*DECK NVFOFVD USETEXT TEXTNVF USETEXT TEXTSS USETEXT TXCMDNV USETEXT TXSMNVF USETEXT TXTAPSS PROC NVFOFVD; # TITLE - FORMAT VCB DATA # BEGIN # ** NVFOFVD - FORMAT VCB DATA * * D.K. ENDO 82/05/06 * C.J. BRION 83/05/10, 83/11/08. * * THIS PROCEDURE FORMAT THE USER/TERM STATUS MESSAGES BASED ON A * VCBSSQ ENTRY AND THE CURRENT COMMAND. * * PROC NVFOFVD * * ENTRY 1. VCBSSQ WITH AT LEAST ONE ENTRY. * * EXIT 1. USER/TERM STATUS MESSAGE TO THE HOP * 2. NULL TEXT TO C-LAYER TO CLEAR THE PIPE LINE. * # # **** PROC NVFOFVD - XREF LIST BEGINS. # XREF BEGIN FUNC ETIME C(10); # UNPACK PACKED TIME # PROC SSBSBF; # STORE BIT FIELD # PROC SSTAQE; # ACCEPT QUIEUE ENTRY # PROC SSTRQE; # REMOVE QUEUE ENTRY # FUNC XCDD U; # CONVERT INTEGER TO DECIMAL DISPLAY CODE # FUNC XSFW C(10); # SPACE FILL A LEFT JUST Z-FILLED NAME # END # **** # DEF NTUTXTL # 50 #; # CHAR COUNT OF NO TERM/USER TEXT # DEF NUTTXTL # 30 #; # CHAR CNT OF TERM/USER NOT CONNECTED TEXT# DEF STSTXTL # 60 #; # CHAR COUNT OF STATUS MESSAGE TEXT # DEF TUNTXTL # 30 #; # CHAR CNT OF NO TERM UNDER USER TEXT # ITEM CNST1; # CONSTANT ONE # ITEM CNST2; # CONSTANT TWO # ITEM CNST3; # CONSTANT THREE # ITEM CTEMP C(10); # CHARACTER TEMPORARY # ITEM I; # LOOP INDUCTION VARIALBLE # ITEM ASENTRY I; # NUMBER AST ENTRIES # ITEM AS I; # LOCAL AST ENTRY ORDINAL # # THIS ARRAY DEFINES THE DEVICE TYPE TABLE. THE DISPLAY CODE NAME IS FOUND BY INDEXING INTO THE TABLE WITH THE NUMERIC DT VALUE. # DEF DTMAX # 07 #; ARRAY DT$TABLE [00:DTMAX] S(1); BEGIN ITEM DT$VAL C(00,00,10) = ["CON", "CR", "LP", "CP", "PL", "SAA", "MAA", "DT7" ]; END # THIS BASED ARRAY POINTS TO THE MESSAGE TO BE SENT TO THE HOP. # BASED ARRAY MTXT [00:00] S(1); BEGIN ITEM MTT$WORD I(00,00,60); END # THIS ARRAY DEFINES THE -NO TERM/USER- MESSAGE TEXT SENT WHEN NO TERMINAL OR USER NAME IS FOUND OR CONNECTED TO APPLICATION. # ARRAY NTUTXT [00:00] S(5); BEGIN ITEM NTU$TXT1 C(00,00,20) = [" NO TERM/USER CONNEC"]; ITEM NTU$TXT2 C(02,00,24) = ["TED TO THIS APPLICATION."]; ITEM NTU$ZBYT U(04,24,36) = [0]; END # THIS ARRAY DEFINES THE -NO TERM UNDER USER- MESSAGE TEXT SENT WHEN USER IS NOT FOUND. # ARRAY NUTTXT [00:00] S(3); BEGIN ITEM NUT$MSG C(00,00,25) = [" NO TERM UNDER THIS USER."]; ITEM NUT$ZBYT U(02,30,30) = [0]; END # THIS ARRAY DEFINES THE -TERM/USER NOT CONNECTED- MESSAGE TEXT SENT WHEN THE TERM/USER IS NOT FOUND. # ARRAY TUNTXT [00:00] S(3); BEGIN ITEM TUN$MSG C(00,00,28) = [" THIS TERM IS NOT CONNECTED."]; ITEM TUN$ZBYT U(02,48,12) = [0]; END # THIS ARRAY DEFINES THE STATUS MESSAGE TEXT FOR THE TERM OR USER. # ARRAY STSTXT [00:00] S(6); BEGIN ITEM STS$TYP C(00,00,04); ITEM STS$COLON C(00,24,02) = [": "]; ITEM STS$NAM1 C(00,36,42); ITEM STS$C1 C(01,18,01) = [","]; ITEM STS$NAM2 C(01,24,42); ITEM STS$C2 C(02,06,01) = [","]; ITEM STS$LTIME C(02,12,09); ITEM STS$C3 C(03,06,01) = [","]; ITEM STS$ANAM C(03,12,07); ITEM STS$S1 C(03,54,01) = ["/"]; ITEM STS$ACN U(04,00,18); ITEM STS$C4 C(04,18,01) = [","]; ITEM STS$CTIME C(04,24,09); ITEM STS$C5 C(05,18,01) = [","]; ITEM STS$DT C(05,24,03); ITEM STS$ZBYT U(05,42,18) = [0]; END CONTROL EJECT; # # # NVFOFVD CODE BEGINS HERE # # # # * DETERMINE NUMBER AST ENTRIES. # ASENTRY = ASTLNGTH/ASTSIZ$; # * FOR EACH ENTRY IN THE VCBSSQ, CHECK IF THE END FLAG IS SET. # P = LOC(NVFSM); FOR I=0 WHILE VSSLNGTH GR 0 DO BEGIN SSTRQE(P,WCBUF[0],ABHBUF[0],NVFSM); # * IF THE END FLAG IS NOT SET, FORMAT THE STATUS TEXT. IF IT IS A * TERMINAL STATUS COMMAND FORMAT THE TEXT AND SEND IT TO THE HOP, * OTHERWISE FORMAT THE USER TEXT AND SEND IT TO THE HOP. # IF NOT TSS$VENDF[0] THEN BEGIN DATA$ = TRUE; IF CRNT$CMD EQ SSA$ OR CRNT$CMD EQ SSU$ OR CRNT$CMD EQ STT$ THEN BEGIN STS$TYP[0] = "TERM"; CNST1 = 0; CNST2 = 36; CNST3 = 42; SSBSBF(STSTXT,CNST1,CNST2,CNST3,B<0,42>TSS$TN[0]); CTEMP = XSFW(TSS$UWORD[0]); CNST1 = 1; CNST2 = 24; SSBSBF(STSTXT,CNST1,CNST2,CNST3,B<0,42>CTEMP); END ELSE BEGIN STS$TYP[0] = "USER"; CTEMP = XSFW(TSS$UWORD[0]); CNST1 = 0; CNST2 = 36; CNST3 = 42; SSBSBF(STSTXT,CNST1,CNST2,CNST3,B<0,42>CTEMP); CNST1 = 1; CNST2 = 24; SSBSBF(STSTXT,CNST1,CNST2,CNST3,B<0,42>TSS$TN[0]); END CTEMP = ETIME(TSS$LTIME[0]); CNST1 = 2; CNST2 = 12; CNST3 = 54; SSBSBF(STSTXT,CNST1,CNST2,CNST3,CTEMP); IF TSS$SWAPNM[0] NQ "NVF" THEN BEGIN FOR AS = 0 STEP 1 WHILE (AS LS ASENTRY AND TSS$SWAPNM[0] NQ AST$PANAM[AS]) DO BEGIN END STS$ANAM[0] = TSS$SWAPNM[0]; END ELSE BEGIN STS$ANAM[0] = "NVF"; END STS$ACN[0] = XCDD(1000 + TSS$AACN); IF TSS$CATIME[0] NQ 0 THEN BEGIN CTEMP = ETIME(TSS$CATIME[0]); END ELSE BEGIN CTEMP = ETIME(TSS$LTIME[0]); END CNST1 = 4; CNST2 = 24; SSBSBF(STSTXT,CNST1,CNST2,CNST3,CTEMP); STS$DT[0] = DT$VAL[TSS$DT[0]]; WCB$WORD[1] = 0; WCB$WC[1] = 2 + STSTXTL/10; ABHWORD[1] = 0; ABHABT[1] = HOPTX$; SSTAQE(P,WCBUF[1],ABHBUF[1],STSTXT); END # * THE END FLAG AND THE LAST APPLICATION FLAG IS SET THEREFORE * CHECK THE ERROR CODE FIELD. IF EC IS ONE, * (NO VCB-S FOUND) AND NO PTAC DATA FOUND EITHER, THEN SEND MESSAGE * INDICATING NO TERM/USER CONNECTED. IF EC ES TWO,(ABORT COMMAND) * CLEAR THE ABORT COMMAND FLAG. SEND A NULL TEXT TO THE C-LAYER TO * CLEAN THE PIPE LINE. CLEAR THE COMMAND IN PROGRESS FLAG. # ELSE BEGIN IF TSS$EC[0] EQ SSEC"NOMATCH" AND NOT DATA$ AND TSS$APENDF[0] THEN BEGIN WCB$WORD[1] = 0; IF CRNT$CMD EQ SSA$ OR CRNT$CMD EQ SUA$ THEN BEGIN WCB$WC[1] = 2 + NTUTXTL/10; P = LOC(NTUTXT); END ELSE IF CRNT$CMD EQ SSU$ OR CRNT$CMD EQ STU$ THEN BEGIN WCB$WC[1] = 2 + NUTTXTL/10; P = LOC(NUTTXT); END ELSE BEGIN # ELSE IF CRNT COMMAND IS STT # WCB$WC[1] = 2 + TUNTXTL/10; P = LOC(TUNTXT); END ABHWORD[1] = 0; ABHABT[1] = HOPTX$; SSTAQE(P,WCBUF[1],ABHBUF[1],MTXT); END ELSE IF TSS$EC[0] EQ SSEC"ABRT" THEN BEGIN ABORTCMDF = FALSE; END # * ONLY IF THE END FLAG AND THE LAST APPL FLAG SET, SEND * HOP TEXT TO CAUSE THE READY.. MESSAGE. # IF TSS$VENDF[0] AND TSS$APENDF[0] THEN BEGIN WCB$WORD[1] = 0; WCB$IAF[1] = TRUE; WCB$WC[1] = 2; ABHWORD[1] = 0; ABHABT[1] = HOPTX$; SSTAQE(P,WCBUF[1],ABHBUF[1],NVFSM); CMDINPGF = FALSE; END END END RETURN; # **** RETURN **** # END # NVFOFVD # TERM