*DECK CSSADL
USETEXT TEXTCS;
USETEXT TEXTSS;
USETEXT TXCMDCS;
USETEXT TXTAPSS;
USETEXT TXTSUSS;
USETEXT TXTSMCS;
PROC CSSADL;
# TITLE CSSADL - ACTION DUMP LOAD COMMAND. #
BEGIN # CSSADL #
#
** CSSADL - ACTION DUMP LOAD COMMAND.
*
* C. BRION 82/05/26.
*
* THIS PROCEDURE PROCESSES THE DUMP OR THE LOAD COMMAND.
* THE NPU INITIALIZE SM MAY BE SENT TO THE NPU AND/OR
* A SUPERVISION EVENT TO LOG THE COMMAND MAY BE SENT TO
* THE EVENT PROCESSOR.
*
* PROC CSSADL
*
* ENTRY:
* THE ROUTED COMMAND HAS BEEN EXTRACTED FROM THE ROUTED COMMAND
* QUEUE AND STORED INTO THE COMMON STORAGE AS FOLLOWS:
* WCBUF = ONE WORD ENTRY WORD COUNT.
* HDRCMD = ONE WORD COMMAND HEADER DESCRIPTOR.
* PARMS = ARRAY THAT CONTAINS THE COMMAND TEXT, THE SYNTAX
* PARAMETER LIST AND THE ADDRESS PARAMETER LIST.
*
* EXIT:
* A NPU INITIALIZATION SM MAY BE SENT.
* A SUPERVISION EVENT TO LOG THE COMMAND MAY BE SENT.
* THE NPUCB DUMP AND LOAD REQUEST FLAGS MAY BE UPDATED.
*
#
#
**** PROC CSSADL XREF LIST
#
XREF
BEGIN
PROC SSTAQE; # SS - ACCEPT QUEUE ENTRY #
PROC MESSAGE; # MACREL MSG TO DAYFILE #
PROC ABORT; # MACREL ABORT #
PROC MOVE; # MACREL MOVE MEMORY #
END
#
****
#
#
* DEFS
#
DEF NPUIDX # HDR$TXWCNT[0] + 2 #;# INDEX INTO PARAM LIST FOR NPU #
#
* ITEMS
#
ITEM BEGAPIX U; # START ADDR PARAMETER INDEX #
ITEM BEGNPU I; # STARTING NPUCB ORDINAL #
ITEM ENDNPU I; # ENDING NPUCB ORDINAL #
ITEM I U; # LOOP VARIABLE #
ITEM BEGSYIX U; # START INDEX OF SYNLIST#
ITEM FINSYIX U; # END INDEX OF SYN LIST #
ITEM FINALIX U; # LAST ADDR PARAMETER INDEX #
ITEM MATCH B; # MATCH INDICATOR #
ITEM NPUORD U; # NPU ORDINAL #
ITEM ONF B; # ON FLAG INDICATOR #
ITEM OFFF B; # OFF FLAG INDICATOR #
ITEM MOVCNT U; # MOVE CHAR COUNT #
#
* SET THE INITIAL ADDRESS PARAMETER LIST BEGINNING AND ENDING
* INDEX.
#
BEGAPIX = HDR$SPCNT[0] + HDR$TXWCNT[0];
FINALIX = BEGAPIX + HDR$APCNT[0];
BEGSYIX = HDR$TXWCNT[0];
FINSYIX = BEGSYIX + HDR$SPCNT[0];
#
* CLEAR THE OUTGOING SM STORAGE AREAS.
#
WCB$WORD[1] = 0;
ABHWORD[1] = 0;
SPMSG0[1] = 0;
#
* IF THIS COMMAND IS FOR ONLY ONE NPU, THEN SEARCH FOR THE NPUCB
* ORDINAL IN THE ADDRESS PARAMETER LIST AND SET THE BEGINNING AND
* ENDING NPU ORDINAL TO THE ORDINAL IN THE PARAMETER LIST.
*
#
IF PAR$PCODE[NPUIDX] EQ "NP0"
THEN
BEGIN
FOR I = BEGAPIX STEP 1 WHILE (I LS FINALIX
AND PAR$PCODE[I] NQ "NOR")
DO
BEGIN
END
BEGNPU = PAR$ORD[I];
ENDNPU = BEGNPU;
END
#
* IF THIS COMMAND IS FOR MULTIPLE NPUS, THEN SET THE BEGINNING AND
* ENDING NPUCB ORDINALS TO BE THE FIRST AND LAST NPU CONTROL
* BLOCK.
#
ELSE
BEGIN
BEGNPU = 0;
ENDNPU = CSNPCNT - 1;
END
#
* CHECK ADDRESS PARAMETER LIST FOR THE PRESENCE OF THE ON OR OFF
* KEYWORDS.
#
OFFF = FALSE;
ONF = FALSE;
FOR I = BEGSYIX STEP 1 WHILE (I LS FINSYIX
AND NOT ONF
AND NOT OFFF)
DO
BEGIN
IF PAR$PCODE[I] EQ "ON0"
THEN
ONF = TRUE;
ELSE IF PAR$PCODE[I] EQ "OFF"
THEN
OFFF = TRUE;
END
NPIDPP[1] = O"116";
IF ONF
THEN
NPIDPP[1] = O"131"; # SET TO ASCII Y #
#
* PREPARE THE OUTGOING NPU INITIALIZATION SM.
#
IF HDR$VERB[0] EQ "LO0" # IF LOAD, SET NPI IN PFCSFC #
THEN
BEGIN
PFCSFC[1] = NPIIN;
IF NOT ONF AND
NOT OFFF
THEN
BEGIN
NPIDPP[1] = 0;
END
END
ELSE
BEGIN
PFC[1] = NPI;
SFC[1] = DP;
END
ABHABT[1] = APPSUP;
ABHBT[1] = APPSUP;
ABHACT[1] = ACTCSNP$;
ABHTLC[1] = NNPI;
WCB$WC[1] = LNPI + 2;
WCB$SMID[1] = SMID"NPIIN";
#
* FOR EACH NPUCB SPECIFIED BY THE BEGINNING AND ENDING ORDINALS.
#
FOR NPUORD=BEGNPU STEP 1 UNTIL ENDNPU
DO
BEGIN
NPU$DMPF[NPUORD] = FALSE;
#
* THE NPU STATE SHOULD BE SUPERVISED. IF SO AND THE DUMP
* ON KEYWORD SPECIFIED, SET THE DUMP OPTION TO ASCII Y IN THE NPU
* INITIALIZATION SM TO BE SENT. OTHERWISE, SET THE DUMP OPTION TO
* ASCII N. IN EITHER CASE SEND THE NPU INITIALIZATION SM TO THE
* OUTGOING TRAFFIC QUEUE.
#
IF NPU$STAT[NPUORD] EQ SUPSTAT"SUP"
THEN
BEGIN
ABHDN[1] = NPU$NID[NPUORD];
ABHSN[1] = NPU$HID[NPUORD];
SSTAQE(P<OTQ>,WCBUF[1],ABH[1],CSSM[1]); # SEND SM #
END
#
* CHECK IF NPU IS IN A NCF MISMATCHED STATE. IF SO, SET THE LOAD
* REQUEST FLAG SINCE THIS MUST BE A LOAD COMMAND FROM THE HOP. A
* SUBSEQUENT SUP/IN SM FROM THE NPU WILL CAUSE THE NEW LOAD REQUEST
* FLAG TO BE SENT TO THE NPU IN THE SUP/IN/A SM.
* SET THE DUMP FLAG ALSO IF SO INDICATED FROM THE DUMP ON KEYWORD
* IN THE COMMAND.
#
ELSE IF (NPU$STAT[NPUORD] EQ SUPSTAT"NCFMIS" OR
NPU$STAT[NPUORD] EQ SUPSTAT"LEVMIS") AND
HDR$VERB[0] EQ "LO0"
THEN
BEGIN
NPU$LRF[NPUORD] = TRUE;
IF ONF
THEN
NPU$DMPF[NPUORD] = TRUE;
END
END
#
* PREPARE THE COMMAND TEXT PRECEEDED BY THE OPERATOR TERMINAL
* NAME FOR THE LOG FILE. THE LOG FILE ENTRY IS SENT AS A
* SUPERVISION EVENT TO THE EVENT PROCESSOR.
#
WCB$WORD[1] = 0;
ABHWORD[1] = 0;
WCB$SMID[1] = SMID"CMDTXT";
WCB$WC[1] = HDR$TXWCNT[0] + 4;
ABHTLC[1] = (HDR$TXWCNT[0] + 2) * 10;
CMD$TNAM[0] = OC$TNAM[HDR$OPORD[0]];
MOVCNT = HDR$TXWCNT[0];
P<MSCMD> = LOC(CMD$TEXT[0]); # SET UP FOR MOVE #
MOVE(MOVCNT,PARMS[0],MSCMD[0]); #MOVE TEXT INTO BUFFER#
SSTAQE(P<EVQ>,WCBUF[1],ABH[1],CMDLINE[0]);
#
* NOW SEND THE NULL TERMINAL TEXT ENTRY TO THE OPERATOR WHICH WILL
* CAUSE THE READY.. MESSAGE TO BE SENT TO THE OPERATOR.
#
WCB$WORD[1] = 0;
ABHWORD[1] = 0;
WCB$SMID[1] = SMID"TTEXT";
WCB$WC[1] = 2;
WCB$IAF[1] = TRUE; # SET INPUT ALLOWED #
ABHADR[1] = HDR$OPORD[0];
ABHTLC[1] = 0; # ZERO LENGTH TTEXT #
SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]);
END # CSSADL #
TERM