*DECK CSSAED
USETEXT TEXTCS;
USETEXT TEXTSS;
USETEXT TXCMDCS;
USETEXT TXTAPSS;
USETEXT TXTSUSS;
USETEXT TXTSMCS;
PROC CSSAED;
# TITLE CSSAED - ACTION END COMMAND #
BEGIN # CSSAED #
#
** CSSAED - ACTION END COMMAND.
*
* C. BRION 82/05/06.
*
* THIS PROCEDURE PROCESSES THE END, BYE, HELLO, LOGIN, LOGOUT,
* OR GOODBYE COMMANDS.
*
* CSSAED
*
* ENTRY
* 1. HDRCMD[0] = COMMAND HEADER WORD.
* 2. PARMS[0] = COMMAND BLOCK CONTAINING THE ORIGINAL TYPEIN
* AND THE SYNTAX PARAMETER LIST.
*
* EXIT
* 1. IF NOP:
* A. CON/END/R TO THE CONNECTION TRAFFIC QUEUE
* B. IF CONTROLLING NOP -- CTRL/OFF TO THE EVENT QUEUE.
* 2. IF HOP:
* TERMINAL TEXT TO THE CONNECTION TRAFFIC QUEUE
* INDICATING ILLEGAL COMMAND.
#
#
**** PROC CSSAED XREF LIST
#
XREF
BEGIN
PROC SSBTBW; # SS-TEST BIT IN WORD #
PROC SSTAQE; # SS-ACCEPT QUEUE ENTRY #
END
#
****
#
ITEM OORD U; # OPERATOR ORDINAL #
ITEM DVAR;
ITEM I U; # LOOP INDUCTION VARIABLE #
ITEM TNAME C(10); # TERMINAL NAME #
ITEM BEGSYIX U; # START INDEX OF SYNTAX LIST#
ITEM FINSYIX U; # FINAL INDEX OF SYNTAX LIST#
ITEM NAPFLAG B; # NEXT APPL PRESENT FLAG #
ITEM NAPINDX U; # INDEX LOC OF NAP PARAMETER#
ITEM RUNNING B; # OLD RUNNING FLAG #
#
* FLG$WORD - BASED ARRAY THAT POINTS TO THE FLAG WORD INDICATING
* OPERATORS RUNNING ONLINE DIAGNOSTICS.
#
BASED ARRAY FLG$WORD [00:00] S(NPCBSZ$);
BEGIN
ITEM FW$WORD I(00,00,60);
END
#
* RESCMD - COMMAND RESTRICTED MESSAGE.
#
ARRAY RESCMD [00:00] S(4);
BEGIN
ITEM RES$TXT C(00,00,20) = ["COMMAND RESTRICTED T"];
ITEM RES$TXT1 C(02,00,15) = ["O NPU OPERATORS"];
ITEM RES$ZERO U(03,30,30)= [0];
END
OORD = HDR$OPORD[0]; # SET OCB ORDINAL #
#
* IF HOP OPERATOR ENTERED COMMAND, NOT ALLOWED. SEND ERROR MSG.
#
IF OC$TYPE[OORD] EQ OPTYP"HOP"
THEN
BEGIN
ABHADR[1] = OORD;
WCB$SMID[1] = SMID"TTEXT";
WCB$WC[1] = 6;
WCB$IAF[1] = TRUE;
SSTAQE(P<CNQ>,WCBUF[1],ABH[1],RESCMD[0]);
GOTO ENDEXIT;
END
#
* NPU OPERATOR ENTERED COMMAND. SET UP THE WORD COUNT WORD AND ABH
* WORD OF THE OUTGOING OVERLAY/TM SM THAT WILL TERMINATE ANY TEST
* ON ANY NPU THAT THE ORIGIN OPERATOR MAY HAVE IN PROGRESS.
*
* FOR EACH NPU THAT HAS THE ORIGIN OPERATOR AS THE CURRENT OVERLAY
* OPERATOR, SEND THE OVERLAY/TM SM TO TERMINATE THE TEST.
* IF THE OPERATOR HAS REQUESTED A CONNECTION TO OLD AND HAS YET TO
* BE CONFIRMED, SET THE CURRENT OVERLAY OPERATOR OF THE NPUCB TO AN
* OUT OF RANGE VALUE SO AS TO INTERLOCK THE NPU UNTIL THE RESPONSE
* TO THE REQUEST IS RECEIVED.
#
WCB$WORD[1] = 0;
ABHWORD[1] = 0;
PFCSFC[1] = OLDTM;
OLDDO[1] = OORD;
ABHABT[1] = APPSUP;
ABHBT[1] = APPSUP;
ABHACT[1] = ACTCSNP$;
ABHTLC[1] = 2;
WCB$WC[1] = 3;
FOR I = 0 STEP 1 WHILE I LS CSNPCNT
DO
BEGIN
P<FLG$WORD> = LOC(NPU$OVFLGS[I]);
SSBTBW(FLG$WORD,OORD,RUNNING);
IF RUNNING
THEN
BEGIN
ABHDN[1] = NPU$NID[I];
ABHSN[1] = NPU$HID[I];
SSTAQE(P<OTQ>,WCBUF[1],ABH[1],CSSM[1]);
END
END
#
* SEARCH THE NPUCB-S AND FOR EACH NPU THAT THIS OPERATOR CONTROLS,
* SEND AN EVENT INDICATING LOSE OF CONTROL, CLEAR THE CONTROLLING
* NOP FIELD, AND IF THERE IS AN OPERATOR WITH AUTO CONTROL STATUS,
* THEN ASSIGN THAT OPERATOR CONTROL OF THE NPU.
#
IF CSACNOP EQ OORD
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 OORD
THEN
BEGIN
WCB$WORD[1] = 3;
WCB$SMID[1] = SMID"CTRLOFF";
ABHSN[1] = I;
TNAME = OC$TNAM[OORD];
SSTAQE(P<EVQ>,WCBUF[1],ABH[1],TNAME);
NPU$CNOP[I] = 0;
IF CSACNOP NQ 0
THEN
BEGIN
NPU$CNOP[I] = CSACNOP;
WCB$SMID[1] = SMID"CTRLON";
SSTAQE(P<EVQ>,WCBUF[1],ABH[1],TNAME);
END
END
END
#
* IF THE COMMAND IS END, SEARCH THE SYNTAX LIST OF PARMS FOR THE
* NEXT APPLICATION NAME (NAP). IF PRESENT, INSERT INTO THE CON/
* END/R PROTOCOL RESPONSE.
#
IF HDR$VERB[0] EQ "END"
THEN
BEGIN
BEGSYIX = HDR$TXWCNT[0] + 1;
FINSYIX = HDR$TXWCNT[0] + HDR$SPCNT[0];
NAPFLAG = FALSE;
FOR I = BEGSYIX STEP 1 WHILE (I LS FINSYIX AND NOT NAPFLAG)
DO
BEGIN
IF PAR$PCODE[I] EQ "NAP"
THEN
BEGIN
NAPINDX = I;
NAPFLAG = TRUE;
END
END
CONUANM[1] = 0;
IF NAPFLAG
THEN
CONANM[1] = PAR$ELNAME[NAPINDX];
END
ELSE
#
* NOT THE END COMMAND BUT ONE OF THE OTHERS.
#
BEGIN
#
* IF HELLO, SET NEXT APPLICATION NAME TO LOGIN, OTHERWISE SET TO
* LOGOUT.
#
IF HDR$VERB[0] EQ "HEL"
THEN
CONANM[1] = "LOGIN ";
ELSE
CONANM[1] = "LOGOUT ";
END
#
* SET UP CON/END/R PROTOCOL RESPONSE TO C LAYER.
#
WCB$SMID[1] = SMID"CONENDR";
WCB$WC[1] = LCONEN + 2;
ABHADR[1] = OORD;
SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]);
OC$TNAM[OORD] = " ";
OC$UNAM[OORD] = " ";
OC$NCNT[OORD] = 0;
OC$CBPD[OORD] = FALSE;
OC$NTO[OORD] = FALSE;
OC$WORD2[OORD] = 0;
ENDEXIT:
DVAR = 1;
END #CSSAED#
TERM