*DECK CSSAAC
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXTAPSS
USETEXT TXCMDCS
PROC CSSAAC;
# TITLE CSSAAC - ACTION ALERT COMMAND. #
BEGIN # CSSAAC #
#
** CSSAAC - ACTION ALERT COMMAND.
*
* A. LIM 83/02/25
*
* THIS PROCEDURE ACTIONS THE ALERT COMMAND FROM THE HOP OR
* THE CONTROLLING NOP.
*
* PROC CSSAAC
*
* ENTRY:
* 1. HDRCMD[0] = COMMAND HEADER WORD.
* 2. PARMS[0] = COMMAND BLOCK CONTAINING THE ORIGINAL
* TYPEIN, SYNTAX PARAMETER LIST AND ADDRESS.
*
* EXIT:
* 1. THE *CP* AND/OR *BU* VALUE(S) IN NPUCB(S) GOT UPDATED.
*
* NOTE:
* THE ALERT COMMAND MAY CONTAIN:
* 1. NO *CP* AND *BU*,
* 2. EITHER *CP* OR *BU*, OR
* 3. BOTH *CP* AND *BU*.
*
*
#
#
**** PROC CSSAAC XREF LIST
#
XREF
BEGIN
PROC CSUCDB; # CONVERT DC DECIMAL TO BINARY #
PROC SSTAQE; # SS- ACCEPT A QUEUE ENTRY #
END
#
****
#
ITEM CPVALUE B; # SET IF VALID CP VALUE ENTERED #
ITEM BUVALUE B; # SET IF VALID BU VALUE ENTERED #
ITEM FPINDX U; # FIRST INDEX INTO SYNTAX PARM #
ITEM LPINDX U; # LAST INDEX INTO SYNTAX PARM #
ITEM B U; # TEMP FOR BINARY VALUE (CSUCDB)#
ITEM D U; # TEMP FOR DECIM VALUE (CSUCDB) #
ITEM ERROR B; # ERROR INDICATOR (CSUCDB) #
ITEM CP U; # CPU UTILIZATION VALUE #
ITEM BU U; # BUFFER AVAILABILITY VALUE #
ITEM NPUS B; # ALERT ALL NPUS INDICATOR #
ITEM DONE B; # LOOP EXIT VAR #
ITEM I U; # LOOP INDICATION VAR #
ITEM NPUORD U; # NPUCB ORDINAL #
#
* IVPBUF - INVALID PARAMETER BUFFER.
#
ARRAY IVPBUF[00:00] S(3);
BEGIN
ITEM IVP$MSG C(00,00,24) =
["INVALID PARAMETER VALUE."];
ITEM IVP$ZRO U(02,24,36) = [0];
END
CONTROL EJECT;
#
* INITIALIZE BUFFERS, INDICES, VARIABLES AND FLAGS.
#
ABHWORD[1] = 0;
WCB$WORD[1] = 0;
FPINDX = HDR$TXWCNT[0] + 2;
LPINDX = HDR$TXWCNT[0] + HDR$SPCNT[0] - 1;
CPVALUE = FALSE;
BUVALUE = FALSE;
NPUS = TRUE;
ERROR = FALSE;
DONE = FALSE;
#
* SEARCH THE PARAMETER LIST FOR *CP* AND *BU* VALUES.
* CONVERT THE VALUES TO BINARY.
* DETERMINE IF ALERT WERE FOR ALL NPUS OR JUST A SINGLE NPU.
#
FOR I = FPINDX STEP 1 WHILE (I LQ LPINDX) AND (NOT ERROR)
DO
BEGIN
IF PAR$PCODE[I] EQ "CP1"
THEN
BEGIN # CP VALUE SPECIFIED #
CSUCDB(PAR$ELNAME[I],B,D,ERROR);
IF (NOT ERROR)
AND ((B GQ MINCP$) AND (B LQ MAXCP$))
THEN
BEGIN # NO ERROR, AND VALUE IN RANGE #
CP = B;
CPVALUE = TRUE;
END
ELSE
BEGIN # ERR IN VALUE, OR NOT IN RANGE #
ERROR = TRUE;
END
END
ELSE IF PAR$PCODE[I] EQ "BU0"
THEN
BEGIN # BU VALUE SPECIFIED #
CSUCDB(PAR$ELNAME[I],B,D,ERROR);
IF (NOT ERROR)
AND ((B GQ MINBU$) AND (B LQ MAXBU$))
THEN
BEGIN
BU = B;
BUVALUE = TRUE;
END
ELSE
BEGIN
ERROR = TRUE;
END
END
ELSE IF PAR$PCODE[I] EQ "NP0"
THEN
BEGIN # ALERT FOR A SINGLE NPU #
NPUS = FALSE;
NPUORD = PAR$ORD[LPINDX+1]; # SAVE NPU ORDINAL #
END
END
IF (NOT ERROR)
AND (CPVALUE OR BUVALUE)
THEN # NO ERROR #
BEGIN # AND ONE OR MORE VALUES SPECIFIED #
IF NPUS
THEN
BEGIN # ALERT ALL NPUS #
NPUORD = 0;
END
FOR I = NPUORD STEP 1 WHILE (NOT DONE)
AND (I LS CSNPCNT)
DO
BEGIN
IF CPVALUE
THEN
NPU$CP[I] = CP;
IF BUVALUE
THEN
NPU$BU[I] = BU;
IF NOT NPUS
THEN
DONE = TRUE;
END
END
ELSE IF ERROR # ERROR IN SPECIFIED VALUE #
THEN
BEGIN
ABHADR[1] = HDR$OPORD[0];
WCB$SMID[1] = SMID"TTEXT";
WCB$WC[1] = 3 + 2;
SSTAQE(P<CNQ>, WCBUF[1], ABH[1], IVPBUF[0]);
END
#
* SEND A NULL TERMINAL TEXT TO C-LAYER TO CLEAR THE PIPELINE.
#
ABHWORD[1] = 0;
WCB$WORD[1] = 0;
ABHADR[1] = HDR$OPORD[0];
WCB$SMID[1] = SMID"TTEXT";
WCB$WC[1] = 2;
WCB$IAF[1] = TRUE;
SSTAQE(P<CNQ>, WCBUF[1], ABH[1], MSGBUF[0]);
END # CSSAAC #
TERM