*DECK CSSDNR
USETEXT TEXTCS
USETEXT TXTAPSS
USETEXT TEXTSS
USETEXT TXTSMCS
USETEXT TXCMDCS
PROC CSSDNR;
# TITLE CSSDNR - DETERMINE NPU REQUIREMENT #
BEGIN # CSSDNR #
#
** CSSDNR - DETERMINE NPU REQUIREMENT.
*
* C. BRION 82/06/15.
*
* THIS PROCEDURE IS PART OF THE COMMAND RECOGNITION ELEMENT OF CS.
* ITS PURPOSE IS TO DETERMINE WHETHER A COMMAND THAT HAS BEEN
* SYNTAXICALLY EXAMINED BY THE COMMAND RECOGNIZER IS A COMMAND THAT
* WILL NEED TO HAVE THE PHYSICAL ADDRESSES OF THE NAMED ELEMENTS
* INCORPORATED INTO THE COMMAND, WHETHER THE COMMAND IS GOING TO
* BE ROUTED TO THE COMMAND DISPATCHER FOR PROCESSING.
*
* PROC CSSDNR
*
* ENTRY ONE OR MORE VALID COMMANDS RESIDE IN THE VALID COMMAND
* QUEUE.
*
* EXIT THE VALID COMMAND QUEUE ENTRIES ARE EITHER ROUTED TO
* THE COMMAND DISPATCHER FOR PROCESSING OR THEY ARE
* PASSED TO THE APPROPRIATE SUBROUTINE FOR FURTHER
* COMMAND PARAMETERIZATION OF PHYSICAL ADDRESSES OF
* NAMED ELEMENTS.
*
#
#
**** PROC CSSDNR XREF LIST
#
XREF
BEGIN
PROC CSSRCA; # RESOLVE SINGLE NPU COMMAND #
PROC SSTAQE; # SS-ACCEPT QUEUE ENTRY #
PROC SSTRQE; # SS-REMOVE QUEUE ENTRY #
END
#
****
#
#
* DEFS
#
#
* ITEMS
#
ITEM I,J; # LOOP VARIABLES #
ITEM MATCH B; # MATCH INDICATOR #
ITEM OCBORD U; # LOCAL OCB ORDINAL #
ITEM STRTINDX U; # START INDX FOR SYNT PARMS #
ITEM MAXINDX U; # MAX INDEX OF PARMS #
CONTROL EJECT;
#
* MAIN PROC START
#
#
* CLEAR OUT THE LOCAL COMMAND STORAGE AREAS.
#
HDR$WORD[0] = 0;
ABHWORD[1] = 0;
FOR I = 0 STEP 1 UNTIL MCMDL$
DO
BEGIN
PAR$WORD[I] = 0;
END
#
* REMOVE THE FIRST ENTRY FROM THE VALID COMMAND QUEUE AND KEEP
* PROCESSING THE ENTRIES UNTIL THE QUEUE IS EMPTY.
#
FOR I = 0 WHILE VCQL NQ 0
DO
BEGIN
SSTRQE(P<VCQ>,WCBUF[0],HDRCMD[0],PARMS[0]);
OCBORD = HDR$OPORD[0]; # SET LOCAL OCB ORDINAL #
ABHADR[1] = OCBORD; # SET ADDRESS IN ABH #
#
* VALID COMMAND ENTRY NOW LOCAL, CHECK TO VERIFY THAT THE OP-
* ERATOR IS STILL ACTIVELY CONNECTED TO CS. IF SO, CHECK TO
* VERIFY THAT A CONNECTION BROKEN ISN'T PENDING. IF SO, SEND
* A NULL TERMINAL TEXT ENTRY TO THE C LAYER TO BE ABLE TO
* PROCEED WITH THE CONNECTION BROKEN.
#
IF OC$STATE[OCBORD]
THEN
BEGIN
IF OC$CBPD[OCBORD]
THEN
BEGIN
WCB$SMID[1] = SMID"TTEXT";
WCB$WC[1] = 2;
WCB$IAF[1] = TRUE;
ABHTLC[1] = 0;
SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]);
END
ELSE
#
* THE OPERATOR IS ACTIVELY CONNECTED.
* SEARCH THE COMMAND PARAMETER LIST FOR THE KEYWORDS THAT WOULD
* QUALIFY THE COMMAND AS A SINGLE NPU COMMAND OR A DUAL NPU
* COMMAND OR A COMMAND THAT IS ALREADY TO BE ROUTED TO THE
* COMMAND DISPATCHER VIA THE ROUTED COMMAND QUEUE.
#
BEGIN
MATCH = FALSE;
STRTINDX = HDR$TXWCNT[0] + 1; # SET START INDEX#
MAXINDX = HDR$SPCNT[0] + HDR$TXWCNT[0]; # SET MAX INDEX #
FOR J = STRTINDX STEP 1
WHILE J LS MAXINDX AND NOT MATCH
DO
BEGIN
#
* CHECK THE COMMAND ELEMENT. IF A COMMAND ELEMENT THAT NEEDS
* ELEMENT ADDRESSES RESOLVED, CALL PROC CSSRCA. OTHERWISE THE
* COMMAND ALREADY FOR COMMAND DISPATCHER.
#
IF PAR$PCODE[J] EQ "NP0"
OR PAR$PCODE[J] EQ "CP0"
OR PAR$PCODE[J] EQ "LI0"
OR PAR$PCODE[J] EQ "TE0"
OR PAR$PCODE[J] EQ "VC0"
OR PAR$PCODE[J] EQ "TR0"
OR PAR$PCODE[J] EQ "LL0"
OR PAR$PCODE[J] EQ "NPS"
OR PAR$PCODE[J] EQ "AU0"
OR PAR$PCODE[J] EQ "HO0"
THEN
BEGIN
MATCH = TRUE;
CSSRCA(J);
END
END # FOR J LOOP #
#
* IF NONE OF THE PARAMETER LIST KEYWORDS FOR A SINGLE OR DUAL
* NPU TYPE COMMAND WERE FOUND, THEN THE COMMAND IS ALREADY
* FOR THE COMMAND DISPATCHER. GENERATE A ROUTED COMMAND QUEUE
* ENTRY TO THE COMMAND DISPATCHER.
#
IF NOT MATCH
THEN
BEGIN
HDR$APCNT[0] = 0;
SSTAQE(P<RCQ>,WCBUF[1],HDRCMD[0],PARMS[0]);
END
END # ELSE #
END # IF OC$STATE #
END # FOR I LOOP #
END # CSSDNR #
TERM