*DECK CSSTNO USETEXT TEXTCS USETEXT TEXTSS USETEXT TXTAPSS USETEXT TXTSMCS USETEXT TXTSUSS PROC CSSTNO; # TITLE - TERMINATE NPU OPERATOR. # BEGIN # ** CSSTNO - TERMINATE NPU OPERATOR. * * D.K. ENDO 82/03/10 * * THIS PROCEDURE DOES I-LAYER CLEAN-UP WHEN A CONNECT BROKEN/ * INACTIVE IS DETECTED. * * PROC CSSTNO * * ENTRY 1. CON/CB, CON/CB WARNING, OR FC/INACT SM * * EXIT 2. NPUCB-S AND OCB-S ASSOCIATED WITH OPERATOR ON * CONNECTION ARE CLEARED. * # # **** PROC CSSTNO - XREF LIST BEGINS. # XREF BEGIN PROC SSBCBW; # CLEAR BIT IN WORD # PROC SSBTBW; # TEST BIT IN WORD # PROC SSTAQE; # ADD QUEUE ENTRY # END # **** # ITEM I; # LOOP INDUCATION VARIABLE # ITEM SEND B; # SEND PENDING INDICATOR # ITEM RUNNING B; # ONLINE DIAGNOSTICS RUNNING FLAG # ITEM TNAME C(10); # TERMINAL NAME # # * FLG$WORD - THIS BASED ARRAY POINTS TO THE SEND AND/OR STATUS * REQUEST PENDING BIT MAP. # BASED ARRAY FLG$WORD [00:00] S(NPCBSZ$); BEGIN ITEM FW$WORD I(00,00,60); END CONTROL EJECT; # # # CSSTNO CODE BEGINS HERE # # # # * IF THE OCB STATE IS SET AND IT IS NOT THE CASE THAT THIS SM IS * FC/INACT WITH THE NO TIME OUT FLAG SET, THEN PROCEED WITH * CLEAN UP OPERATIONS FOR THE CONNECTION. * # IF OC$STATE[ABHADR[0]] AND NOT (WCB$SMID[0] EQ SMID"FCINA" AND OC$NTO[ABHADR[0]]) THEN BEGIN # * SEARCH THE NPUCB-S TO SEE IF THIS OPERATOR IS A CURRENT ON-LINE * DIAGNOSTICS OPERATOR. IF SO, THEN SEND AN OLD/TM TO TERMINATE * THE PROCESSING AND CLEAR THE CURRENT-OLD-OPERATOR. # FOR I=0 STEP 1 WHILE I LS CSNPCNT DO BEGIN P = LOC(NPU$OVFLGS[I]); SSBTBW(FLG$WORD,ABHADR[0],RUNNING); IF RUNNING THEN BEGIN WCB$WORD[1] = 0; WCB$SMID[1] = SMID"OLDTM"; WCB$WC[1] = 2 + LOLDIN; ABHWORD[1] = 0; ABHABT[1] = APPSUP; ABHDN[1] = NPU$NID[I]; ABHSN[1] = NPU$HID[I]; ABHBT[1] = NETCMD; ABHACT[1] = CT8ASCII; ABHTLC[1] = NOLDIN; SPMWD[1] = 0; PFCSFC[1] = OLDTM; OLDDO[1] = ABHADR[0]; SSBCBW(FLG$WORD,ABHADR[0]); SSTAQE(P,WCBUF[1],ABH[1],CSSM[1]); END END # * SEARCH THE NPUCB-S AND FOR EACH NPU CONTROLLED BY THIS * OPERATOR, CLEAR THE CONTROLLING NOP FIELD, SEND AN EVENT * INDICATING LOSE OF CONTROL, AND IF THERE IS AN OPERATOR WITH * AUTO CONTROL STATUS, THEN GIVE THAT OPERATOR CONTROL. # IF CSACNOP EQ ABHADR[0] THEN BEGIN CSACNOP = 0; END FOR I=0 STEP 1 WHILE I LS CSNPCNT DO BEGIN IF NPU$STAT[I] EQ SUPSTAT"SUP" AND NPU$CNOP[I] EQ ABHADR[0] THEN BEGIN WCB$WORD[1] = 3; WCB$SMID[1] = SMID"CTRLOFF"; ABHSN[1] = I; TNAME = OC$TNAM[NPU$CNOP[I]]; SSTAQE(P,WCBUF[1],ABH[1],TNAME); NPU$CNOP[I] = 0; IF CSACNOP NQ 0 THEN BEGIN NPU$CNOP[I] = CSACNOP; WCB$WORD[1] = 3; WCB$SMID[1] = SMID"CTRLON"; ABHSN[1] = I; TNAME = OC$TNAM[CSACNOP]; SSTAQE(P,WCBUF[1],ABH[1],TNAME); END END END # * IF THE CURRENT COMMAND IS -STATUS-, THEN IF CURRENT COMMAND NPU1 * IS NON-ZERO, CLEAN UP THINGS FOR NPU1, IF CURRENT COMMAND NPU2 IS * NON-ZERO, CLEAN UP THINGS FOR NPU2. CLEAR THE AFFECTED NPU COUNT * AND CURRENT COMMAND VERB. MAKE AN ENTRY IN THE EVENT QUEUE WITH * THE EVENT CODE SET TO -STATUS FINISHED-. # IF OC$VERB[ABHADR[0]] EQ "ST0" THEN BEGIN IF OC$CNPU[ABHADR[0]] NQ 0 THEN BEGIN NPU$OPST[OC$CNPU[ABHADR[0]]] = MAXACN$ + 1; OC$CNPU[ABHADR[0]] = 0; END P = LOC(NPU$STFLGS[0]); FOR I=0 STEP 1 WHILE I LS CSNPCNT DO BEGIN SSBCBW(FLG$WORD[I],ABHADR[0]); END OC$VERB[ABHADR[0]] = " "; OC$NCNT[ABHADR[0]] = 0; WCB$WORD[1] = 0; WCB$SMID[1] = SMID"STUFIN"; WCB$WC[1] = 2; ABHWORD[1] = ABHWORD[0]; ABHTLC[1] = 0; SSTAQE(P,WCBUF[1],ABH[1],CSSM[1]); END # * IF THE CURRENT COMMAND VERB IS -SE0-, THEN CLEAR THE CURRENT SEND * OPERATOR, CURRENT COMMAND NPU1, AND COMMAND VERB, AND SEND A NULL * TEXT TO THE TERMINAL WITH INPUT ALLOWED FLAG SET. # ELSE IF OC$VERB[ABHADR[0]] EQ "SE0" THEN BEGIN P = LOC(NPU$SDFLGS[0]); FOR I=0 STEP 1 WHILE I LS CSNPCNT DO BEGIN SSBTBW(FLG$WORD[I],ABHADR[0],SEND); IF SEND THEN BEGIN SSBCBW(FLG$WORD[I],ABHADR[0]); NPU$OPSD[I] = MAXACN$ + 1; END END OC$CNPU[ABHADR[0]] = 0; OC$NCNT[ABHADR[0]] = 0; OC$VERB[ABHADR[0]] = " "; WCB$WORD[1] = 0; WCB$SMID[1] = SMID"TTEXT"; WCB$IAF[1] = TRUE; WCB$WC[1] = 2; ABHWORD[1] = 0; ABHADR[1] = ABHADR[0]; SSTAQE(P,WCBUF[1],ABH[1],CSSM[1]); END # * IF THIS SM IS A CON/CB WARNING, THEN SET THE CB PENDING FLAG IN * THE OCB FOR THIS OPERATOR, OTHERWISE PUT A CON/END/R SM IN THE * PROTOCOL RESPONSE QUEUE. CLEAR THE OCB. # IF WCB$SMID[0] EQ SMID"CONCBW" THEN BEGIN OC$CBPD[ABHADR[0]] = TRUE; END ELSE BEGIN WCB$WORD[1] = 0; WCB$SMID[1] = SMID"CONENDR"; WCB$WC[1] = 2; ABHWORD[1] = 0; ABHADR[1] = ABHADR[0]; SSTAQE(P,WCBUF[1],ABH[1],CSSM[1]); OC$WORD[ABHADR[0]] = 0; OC$ORD[ABHADR[0]] = ABHADR[0]; I = OC$TYPE[ABHADR[0]]; OC$WORD1[ABHADR[0]] = 0; OC$TYPE[ABHADR[0]] = I; OC$WORD2[ABHADR[0]] = 0; END END RETURN; # **** RETURN **** # END # CSSTNO # TERM