*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,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,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,WCBUF[1],HDRCMD[0],PARMS[0]); END END # ELSE # END # IF OC$STATE # END # FOR I LOOP # END # CSSDNR # TERM