*DECK NVFOROC USETEXT TEXTNVF USETEXT TEXTSS USETEXT TXCMDNV USETEXT TXTAPSS PROC NVFOROC; # TITLE NVFOROC - RECOGNIZE OPERATOR COMMAND. # BEGIN # NVFOROC # # ** NVFOROC - RECOGNIZE OPERATOR COMMAND. * * A. LIM. 82/03/17. * * THIS PROCEDURE-S MAIN FUNCTION IS TO RECOGNIZE OPERATOR TYPEINS. * IT CALLS COMMAND RECOGNIZER TO VALIDATE THE COMMAND. IT MAY * DISPATCH THE RETURNED PARAMETERIZED COMAND TO THE *NVFODHC* * ROUTINE, OR IT MAY GENERATE A MESSAGE TO THE OPERATOR IN THE * EVENT OF AN ERRONEOUS COMMAND. IT IS CALLED INTO EXECUTION * WHENEVER THERE IS DATA IN OPERATOR-TYPEIN-QUEUE *OPTQ*. * * PROC NVFOROC * * ENTRY OPERATOR TYPEIN ENTRIES IN *OPTQ*. * * EXIT IN THE EVENT OF VALID COMMAND, IT CALLS *NVFODHC* WITH * PARAMETERIZED COMMAND IN *WCBUF[1]*, *HDRCMD[1]*, AND * *PARMS[0]*. OTHERWISE, A TERMINAL-TEXT IS SENT TO * THE CONNECTION-TRAFFIC-QUEUE, *CTQ*. * * METHOD THIS PROCEDURE CONSISTS PRIMARY A LARGE LOOP, EACH TIME * THROGH THE LOOP, AN OPERATOR TYPEIN ENTRY WILL BE * REMOVED FROM THE *OPTQ*. * IF HOP/END-WARNING, DISCARD THE CURRENT ENTRY, AND * SEND A NULL TERMINAL-TEXT TO *CTQ*. * IF HOP/BRK, CALL *NVFOPHC* TO PROCESS IT. * ELSE, IT CALLS *SSRRCS* TO RECOGNIZE THE COMMAND. * IF VALID COMMAND, IT CALLS *NVFODHC* TO DO FURTHER * PROCESSING OF THE COMMAND, ELSE IT SENDS A TERMINAL * -TEXT TO THE CONNECTION TRAFFIC QUEUE *CTQ*. * IT TERMINATES WHEN *OPTQ* IS EXHAUSTED. * # # **** PROC NVFOROC XREF LIST # XREF BEGIN PROC ABORT; # MACREL- ABORT TASK MACRO # PROC MESSAGE; # MACREL- MESSAGE MACRO # PROC NVFODHC; # DISPATCH HOP COMMAND # PROC SSRRCS; # RECOGNIZE A COMMAND STRING # PROC SSTAQE; # ACCEPT A QUEUE ENTRY # PROC SSTRQE; # REMOVE A QUEUE ENTRY # END # **** # DEF DF$ # 0 #; # MESSAGE OPTION FOR DAYFILE MESSAGE # DEF CSTSIZ$ # 14 #; # CST SIZE= 14 ENTRY + 1 TERMINATE ENTRY # DEF CSSIZ$ # 14 #; # CMD STRING SIZE= 139 + 1 TERMINATE CHAR# # THIS IS THE SWITCH LIST FOR ERROR CODE RETURNING FROM *SSRRCS* # SWITCH ERRSWT # ERROR SWITCH BY ERROR CODE # LLNOERR, # 0- NO ERROR # LLPRMLNG, # 1- PARAMETER TOO LONG # LLEXPRD, # 2- EXPECTING PERIOD # LLEXPDCMA, # 3- EXPECTING PERIOD OR COMMA # LLUNRGCMD, # 4- UNRECOGNIZED COMMAND # LLINVCMPRM, # 5- INVALID COMBINATION OF PARMS # LLCMDMSPRM, # 6- COMMAND MISSING PARAMETER # LLPRMSH, # 7- PARAMETER LIST TOO SHORT # LLMSGLNG; # 8- INPUT MESSAGE TOO LONG # # ** CST- COMMAND SYNTAX TABLE. * * THIS IS THE COMMAND SYNTAX TABLE FOR NVF. IT IS INPUT TO * THE COMMAND RECOGNIZER TO DEFINE THE SYNTAX AND THE SEMANTICS * OF THE ALLOWABLE COMMANDS. * THE TABLE IS ORDERED(SCANNED TOP TO BOTTOM) AND CONTAINS FLAG * CHARACTERS TO DEFINE THE ORDER AND MEANING OF THE CHARACTERS * TO BE ENTERED TO SELECT THE ACTION TO BE PERFORMED. * EACH SYNTAX LINE IS TERMINATED BY AN END-OF-LINE($) TERMINATOR, * AND THE TABLE IS TERMINATED BY AN END-OF-LINE ENTRY. # ARRAY CST[00:CSTSIZ$] S(CSSIZ$); BEGIN ITEM CST$LINE C(00,00,140) = ["ENA@APL,,\!=@APP?^\$", "IDA@APL,,\!=@APP?^\$", "IDH@HST,,\!@HO0^\$", "DIA@APL,,\!=@APP?^\$", "DIH@HST,,\!@HO0^\$", "STA@APL,,\!=@APP?^\$", "STT@STA,,\!=@TER?^\$", "STU@STA,,\!=@USR?^\$", "STS@APL,,\![@APS^\\[AC@AC0^\$", "SSA@APL,,\![@TES^\\![=@APP?^\ $", "SSU@STA,,\![@TES^\\![=@USR?^ \$", "SUA@APL,,\![@USS^\\![=@APP?^ \$", "HIL@HIS,^\ALL@ALL^\$", "$"]; END # * THE FOLLOWING ARE MESSAGE ARRAYS EITHER FOR OUTBOUND TERMINAL * TEXT OR DESTINED FOR SYSTEM DAYFILE. # ARRAY PLGMSG[00:00] S(3); BEGIN ITEM PLG$MSG C(00,00,19) = ["PARAMETER TOO LONG."]; ITEM PLG$ZERO U(01,54,06) = [0]; ITEM PLG$ZERO1 U(02,00,60) = [0]; END ARRAY EPDMSG[00:00] S(2); BEGIN ITEM EPD$MSG C(00,00,17) = ["EXPECTING PERIOD."]; ITEM EPD$ZERO U(01,42,18) = [0]; END ARRAY EPCMSG[00:00] S(3); BEGIN ITEM EPC$MSG C(00,00,26) = ["EXPECTING PERIOD OR COMMA."]; ITEM EPC$ZERO U(02,36,24) = [0]; END ARRAY URCMSG[00:00] S(3); BEGIN ITEM URC$MSG C(00,00,21) = ["UNRECOGNIZED COMMAND."]; ITEM URC$ZERO U(02,06,54) = [0]; END ARRAY ICPMSG[00:00] S(4); BEGIN ITEM ICP$MSG C(00,00,34) = ["INVALID COMBINATION OF PARAMETERS."]; ITEM ICP$ZERO U(03,24,36) = [0]; END ARRAY CMPMSG[00:00] S(3); BEGIN ITEM CMP$MSG C(00,00,26) = ["COMMAND MISSING PARAMETER."]; ITEM CMP$ZERO U(02,36,24) = [0]; END ARRAY IMLMSG[00:00] S(3); BEGIN ITEM IML$MSG C(00,00,23) = ["INPUT MESSAGE TOO LONG."]; ITEM IML$ZERO U(02,18,42) = [0]; END $BEGIN ARRAY PLSMSG[00:00] S(4); BEGIN ITEM PLS$MSG C(00,00,36) = [" NVFOROC- PARAMETER LIST TOO SHORT."]; ITEM PLS$ZERO U(03,36,24) = [0]; END $END ITEM EC U; # ERROR CODE RETURNING FROM *SSRRCS* # ITEM ET U; # ERROR TEXT RETURNING FROM *SSRRCS* # ITEM I I; # DUMMY LOOP INDUCTION VAR # ITEM MAX U; # MAX NO OF CMD PARMS IN PARAMETER LIST # ITEM PCNT U; # PARM COUNT FROM *SSRRCS* # CONTROL EJECT; # * PROCESS ALL ENTRIES IN *OPTQ*, FOR EACH ENTRY: * CALL COMMAND RECOGNIZER WITH COMMAND SYNTAX TABLE, COMMAND * STRING, STRING LENGTH IN CHARACTERS, AND MAXIMUM NUMBER OF * COMMAND PARAMETERS ALLOWABLE IN PARAMETER LIST. IT RETURNS * THE PARAMETER LIST, PARAMETER LIST COUNT, ERROR CODE AND * ERROR TEXT IF ANY. # FOR I = 0 WHILE OPQL NQ 0 DO BEGIN WCB$WORD[1] = 0; # CLEAR WC WORD 1 # HDR$WORD[1] = 0; # CLEAR HDR CMD WORD 1 # WCB$IAF[1] = TRUE; # PRESET IAF TO TRUE # WCB$HAF[1] = FALSE; # PRESET HAF TO FALSE # SSTRQE(P,WCBUF[0],HDRCMD[0],PARMS[0]); # REMOVE 1 ENTRY # IF HOPENDWF THEN BEGIN # HOP/END-WARNING, DISCARD ENTRY # WCB$WC[1] = 2; # AND SEND A NULL TEXT TO *CTQ* # ABHABT[1] = HOPTX$; SSTAQE(P,WCBUF[1],ABHBUF[1],MSGBUF[0]); GOTO ENDCASE; END IF HDR$BOF[0] THEN BEGIN # HOP/BRK # IF CMDINPGF THEN BEGIN ABORTCMDF = TRUE; END GOTO ENDCASE; END MAX = MCMDL$ - (WCB$WC[0] - 2); # MAX NO OF CMD IN PARM LIST # SSRRCS(CST,PARMS[0],HDR$TXCCNT[0],PARMS[WCB$WC[0]-2],MAX,PCNT, EC,ET); HDR$OPORD[1] = HDR$OPORD[0]; # SET OPERATOR ORDINAL # ABHWORD[1] = 0; ABHABT[1] = HOPTX$; GOTO ERRSWT[EC]; # ERROR SWITCH BY EC # LLNOERR: # VALID COMMAND, CALL *NVFODHC* # CRNT$CMD = PAR$ELNAME[WCB$WC[0]-2]; # SAVE CURRENT COMMAND ID # HDR$SPCNT[1] = PCNT; # SYNTAX PARAMETER COUNT # HDR$APCNT[1] = 0; # ADDR PARAMETER COUNT # HDR$TXWCNT[1] = WCB$WC[0] - 2; # TEXT WORD COUNT # HDR$VERB[1] = PAR$ELNAME[WCB$WC[0]-2]; # COMMAND VERB # HDR$TXCCNT[1] = HDR$TXCCNT[0]; # TEXT LEN IN CHARS # NVFODHC; # DISPATCH HOP COMMAND # GOTO ENDCASE; LLPRMLNG: # EC= "PARAMETER TOO LONG." # WCB$WC[1] = LMSG30$/10 + 2; SSTAQE(P,WCBUF[1],ABHBUF[1],PLGMSG[0]); GOTO ENDCASE; LLEXPRD: # EC= "EXPECTING PERIOD." # WCB$WC[1] = LMSG20$/10 + 2; SSTAQE(P,WCBUF[1],ABHBUF[1],EPDMSG[0]); GOTO ENDCASE; LLEXPDCMA: # EC= "EXPECTING PERIOD OR COMMA." # WCB$WC[1] = LMSG30$/10 + 2; SSTAQE(P,WCBUF[1],ABHBUF[1],EPCMSG[0]); GOTO ENDCASE; LLUNRGCMD: # EC= "UNRECOGNIZED COMMAND." # WCB$WC[1] = LMSG30$/10 + 2; SSTAQE(P,WCBUF[1],ABHBUF[1],URCMSG[0]); GOTO ENDCASE; LLINVCMPRM: # EC= "INVALID COMBINATION OF PARAMETERS."# WCB$WC[1] = LMSG40$/10 + 2; SSTAQE(P,WCBUF[1],ABHBUF[1],ICPMSG[0]); GOTO ENDCASE; LLCMDMSPRM: # EC= "COMMAND MISSING PARAMETER." # WCB$WC[1] = LMSG30$/10 + 2; SSTAQE(P,WCBUF[1],ABHBUF[1],CMPMSG[0]); GOTO ENDCASE; LLPRMSH: # EC= "PARAMETER LIST TOO SHORT." # $BEGIN MESSAGE(PLSMSG[0], DF$); # SEND MESSAGE TO DAYFILE # ABORT; # AND ABORT NVF # $END LLMSGLNG: # EC= "INPUT MESSAGE TOO LONG." # WCB$WC[1] = LMSG30$/10 + 2; SSTAQE(P,WCBUF[1],ABHBUF[1],IMLMSG[0]); ENDCASE: END # FOR I LOOP # END # NVFOROC # TERM