*DECK KPTYPIN USETEXT NIPDEF USETEXT PARAMP USETEXT PARAMS USETEXT DRHDR USETEXT FREETAB USETEXT OVERLAY USETEXT KDIS USETEXT DISTAIL USETEXT KINITBF USETEXT SUPMSG PRGM KPTYPIN; # PROCESS K DISPLAY TYPE INS # STARTIMS; # *1DC KPTYPIN * * 1. PROC NAME AUTHOR DATE * KPTYPIN A. BEN-ARTZI 81/11/09 * * 2. FUNCTIONAL DESCRIPTION. * * PROCESS ALL OPERATOR TYP-INS TO NAM-S K-DISPLAY * * 3. METHOD USED. * * GET THE INPUT KEY-WORD FROM THE TYPE-IN BUFFER. TEST IT AND * BRANCH TO THE APPROPRIATE SECTION TO EXECUTE THE COMMAND. * WHEN EVER NECESSARY BUILD A DATA BLOCK AND USE BLINK TO SEND IT * TO THE APPLICATION. * * SPECIAL MODULES ARE FOR STATUS DISPLAY AND FOR FL CHANGES. * * 4. ENTRY PARAMETERS. * NONE * * * 5. EXIT PARAMETERS. * PARAMP1 - FLAG TO CALL KDSTIN * * * 6. COMDECKS CALLED AND SYMPL TEXT USED. * * NIPDEF OVERLAY KDIS DISTAIL * KINITBF PARAMP PARAMS * * 7. ROUTINES AND OVERLAYS CALLED. * * OVLCALL LOAD AND EXECUTE OVERLAY * OMSG ISSUE DAYFILE MESSAGE * KPCLNUP OVL K-DISPLAY CLEAN-UP * KAPPMOD OVL PROCESS K-DISPLAY APPLICATION MODE COMMANDS * KAPIGP OVL PROCESS "AP" AND "IG" COMMANDS * KSTPAGE OVL PROCESS STATUS DISPLAY PAGING * KNAMMOD OVL PROCESS K-DISPLAY NAM MODE COMMANDS * KNAMDFL OVL PROCESS FIELD LENGTH K-DISPLAY COMMANDS * XTRACE RECORD PROCESSOR CALLS * * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * THIS PRIMARY OVERLAY IS CALLED BY XEXEC. * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY *CALL OPSIZE * * * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC OMSG; # DAYFILE MESSAGE # PROC OVLCALL; # LOAD OVERLAY # PROC XTRACE; # TRACE ROUTINE CALL # LABEL RJMAIN; END # LOCAL DEFINITIONS # DEF CHAR$COMMA # "," #; DEF CHAR$EQUAL # "=" #; DEF CHAR$PERIOD # "." #; DEF CHAR$BLANK # " " #; DEF CHAR$STAR # "*" #; DEF MAX$KDIS #40 #; # MAX CHARACTERS TO DISPLAY TYPE IN # # INTERNAL VARIABLES # ITEM CHRR; # SINGLE CHARACTER # ITEM CNT; # TOKEN TABLE INDEX # ITEM COUNT; # TOKEN CHARACTER COUNT # ITEM I; # INDUCTION VARIABLE # ITEM INDEX; # INDEX VALUE # ITEM J; # INDUCTION VARIABLE # ITEM KCHARS; # CHARACTER COUNT OF TYPE-INS # ITEM KRC; # ERROR REASON CODE FOR TYPE-IN # ITEM TC; # TOKEN COUNT # DEF L$TOKENTAB # 25#; # SIZE OF TOKEN TABLE # ARRAY TOKENTAB [1:L$TOKENTAB] S(1); BEGIN # TABLE OF NAM K DISPLAY COMMAND TOKENS/SEPARATOR # ITEM TT$WORD C(00,00,10); # WHOLE WORD # ITEM TT$TOKEN C(00,00,08); # TOKEN SEPARATOR # ITEM TT$ATOKEN C(00,00,07); # TOKEN ONLY # ITEM TT$SEP C(00,42,01); # SEPARATOR # END DEF MAX$KINPUT # 4 #; # MAX WORD COUNT - 1 FOR TYPE-IN # BASED ARRAY KDIS$INPUT [0:MAX$KINPUT] S(1); BEGIN ITEM KI$WORD C(00,00,10); # TYPE-IN WORD # END BASED ARRAY KARRAY [0:0] S(1); BEGIN ITEM KAWRD C(00,00,10); END DEF MAX$NAMCMDS # 24 #; # MAXIMUM NAM COMMANDS ALLOWED # ARRAY NAMCMDVERB [0:MAX$NAMCMDS] S(1); BEGIN # VALID NAM COMMAND VERB TABLE # ITEM NC$WORD C(00,00,10); # WHOLE WORD # ITEM NC$KEYWORD C(00,00,08) = [ # VALID COMMAND KEYWORDS # "ST ", "AP =", "AP ", "END ", "IG =", "IG ", "+ ", "- ", "* ", "/ ", "DB =", "DE =", "DU =", "FL =", "LE =", "RS =", "LB =", "LR =", "MO =", "SEND ", "TB =", "TE =", "( ", "HELP ", 0, ]; ITEM NC$TOKENCT U(00,48,06) = [ # TOKEN COUNT ALLOWED FOR CMD # 1,2,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,1,1,0 ]; ITEM NC$CMDORD S:NCT(00,54,06) = [ # CORR COMMAND ORDINAL # S"CMD$ST", S"CMD$AP", S"CMD$AP", S"CMD$END", S"CMD$IG", S"CMD$IG", S"CMD$PFORWD", S"CMD$PBACK", S"CMD$IGNORE", S"CMD$IGNORE", S"CMD$DB", S"CMD$DE", S"CMD$DU", S"CMD$FL", S"CMD$LE", S"CMD$RS", S"CMD$LB", S"CMD$LR", S"CMD$MO", S"CMD$SEND", S"CMD$TB", S"CMD$TE", S"CMD$RFORWD", S"CMD$HELP", S"CMD$ERROR", ]; END SWITCH NAMCMDCASE:NCT # SWITCH FOR VALID NAM COMMANDS # LB$ST:CMD$ST, LB$AP:CMD$AP, LB$END:CMD$END, LB$IG:CMD$IG, LB$EXIT:CMD$IGNORE, LB$PF:CMD$PFORWD, LB$PB:CMD$PBACK, LB$DB:CMD$DB, LB$DE:CMD$DE, LB$DU:CMD$DU, LB$LE:CMD$LE, LB$RS:CMD$RS, LB$LB:CMD$LB, LB$LR:CMD$LR, LB$FL:CMD$FL, LB$MO:CMD$MO, LB$SEND:CMD$SEND, LB$TB:CMD$TB, LB$TE:CMD$TE, LB$RPF:CMD$RFORWD, LB$HELP:CMD$HELP, LB$ERR:CMD$ERROR; CONTROL EJECT; BEGIN # KPTYPIN # CONTROL IFEQ DEBUG,1; XTRACE("KPTYP"); # TRACE CALL # CONTROL FI; PARAMP1 = 0; KREPEAT[0] = CHAR$BLANK; KRC = 0; # COMPUTE CHARACTER COUNT OF K DISPLAY TYPE-IN # P = LOC(KBUF1[0]); # FWA OF TYPE-IN # FOR I=MAX$KINPUT STEP -1 WHILE I GQ 0 AND KI$WORD[I] EQ 0 DO # GET LAST WORD OF TYPE-IN # BEGIN END FOR J=0 STEP 1 WHILE J LS WC AND BKI$WORD[I] NQ 0 DO # GET LAST CHARACTER OF TYPE-IN # BEGIN END KCHARS = I*10 + J; # CHARACTER COUNT OF TYPE-IN # # DISPLAY K DISPLAY TYPE INS # P = LOC(KBFD1[0]); # FWA OF DISPLAY # FOR I=0 STEP 1 UNTIL 3 DO # BLANK-FILL DISPLAY BUFFER # KAWRD[I] = CHAR$BLANK; FOR I=0 STEP 1 WHILE I LS KCHARS AND I LS MAX$KDIS DO # DISPLAY UP TO 40 CHARACTERS OF TYPE-INS # BEGIN INDEX = I/10; # WORD INDEX # J = I-INDEX*10; CKAWRD[INDEX] = CKI$WORD[INDEX]; END # APPLCATION MODE PROCESSING # IF KDAM[0] THEN BEGIN IF C<0>KBUF[0] EQ CHAR$STAR AND (KCHARS EQ 1 OR (KCHARS EQ 2 AND C<1>KBUF[0] EQ CHAR$PERIOD)) THEN # TERMINATE APPLCATION MODE # OVLNAME = KPCLNUPP; ELSE # PROCESS APPLICATION K DISPLAY COMMAND # BEGIN PARAMS1 = KCHARS; # CHARACTER COUNT OF COMMAND # OVLNAME = KAPPMODP; END OVLCALL; END # NAM MODE PROCESSING # ELSE BEGIN IF KDORIG[0] THEN # FIND THE ORIGINAL BUFFER (HAS ERROR LINE) # P = KDBP[0]; ELSE P = KORIGFP[0]; P=P+BLKHSIZE+KHDRSIZE; CNT = KLSIZE-KERRL-2; KERROR1[CNT] = CHAR$BLANK; KERROR1[CNT+1] = CHAR$BLANK; KERROR1[CNT+2] = CHAR$BLANK; KERROR1[CNT+3] = CHAR$BLANK; KERROR2[CNT+4] = CHAR$BLANK; KREADY[KLSIZE-2] = CHAR$BLANK; # CLEAR READY.. PROMPT # P = LOC(KDMES); # FWA OF TYPE IN COMMAND # OMSG(KARRAY,0); # LOG IN NETWORK LOG FILE - NIP DAYFILE # # TOKENIZE K DISPLAY TYPE INS # TC = 0; # INITIALIZE TOKEN COUNT # CNT = 1; # INITIALIZE TOKEN TABLE INDEX # COUNT = 0; # INITIALIZE CHARACTER COUNT OF TOKEN # FOR I=1 STEP 1 UNTIL L$TOKENTAB DO # INITIALIZE TOKEN TABLE # TT$WORD[I] = CHAR$BLANK; # BLANK-FILLED # FOR I=0 STEP 1 WHILE I LS KCHARS AND KRC EQ 0 # NO ERROR OCCURRED # DO # UNPACK COMMAND TEXT INTO TOKENS/SEPARATOR # BEGIN INDEX = I/10; # WORD INDEX OF COMMAND TEXT # J = I - INDEX*10; # CHARACTER POSITION # CHRR = CKI$WORD[INDEX]; # CURRENT CHARACTER # IF CHRR EQ CHAR$COMMA OR CHRR EQ CHAR$EQUAL THEN # LEGAL SEPARATOR # BEGIN IF TT$WORD[CNT] NQ CHAR$BLANK THEN # TOKEN EXISTS # BEGIN IF CHRR EQ CHAR$EQUAL THEN # STORE EQUAL ONLY IN TOKEN TABLE # TT$SEP[CNT] = CHAR$EQUAL; COUNT = 0; # RESET TOKEN CHARACTER COUNT # CNT = CNT + 1; # INCREMENT TOKEN TABLE INDEX # TC = TC + 1; # INCREMENT TOKEN COUNT # END ELSE # TWO SEPARATORS IN A ROW, ERROR # KRC = 4; # SYNTAX ERROR, UNRECOGNIZED COMMAND # END ELSE BEGIN IF CHRR EQ CHAR$PERIOD THEN # ITS A PERIOD - TERMINATOR # I = KCHARS; # TERMINATE UNPACKING COMMAND # ELSE # ASSEMBLE CHARACTER INTO TOKEN # BEGIN IF CNT LQ L$TOKENTAB THEN # COMMAND WITHIN TOKEN TABLE SIZE # BEGIN CTT$WORD[CNT] = CHRR; COUNT = COUNT + 1; # INCREMENT TOKEN CHARACTER COUNT # IF COUNT GQ 10 THEN # RESUME TOKEN ASSEMBLY IN NEXT WORD # BEGIN COUNT = 0; CNT = CNT + 1; END END END END END # END FOR LOOP # IF KRC EQ 0 THEN # NO ERROR OCCURRED # # RECOGNIZE NAM K DISPLAY COMMAND # BEGIN TC = TC + 1; # TOKEN COUNT # NC$TOKENCT[MAX$NAMCMDS] = TC; # FORCE TOKEN COUNT MATCH # NC$KEYWORD[MAX$NAMCMDS] = TT$TOKEN[1]; # FORCE KEYWORD MATCH # FOR I=0 STEP 1 WHILE NC$KEYWORD[I] NQ TT$TOKEN[1] DO # NO KEYWORD MATCH # BEGIN END INDEX = NC$CMDORD[I]; # COMMAND ORDINAL # IF TC NQ NC$TOKENCT[I] THEN # TOKEN COUNT MISMATCH # KRC = 4; # SYNTAX ERROR, UNRECOGNIZED COMMAND # ELSE # SYNTAX CHECK OK # BEGIN IF HRL EQ 0 AND INDEX NQ NCT"CMD$FL" AND INDEX NQ NCT"CMD$DU" THEN # ONLY FL COMMAND IS ALLOWED IN MAX FL # KRC = 6; END END # SWITCH ON COMMAND ORDINAL TO PROCESS COMMAND # IF KRC EQ 0 THEN BEGIN GOTO NAMCMDCASE[INDEX]; CONTROL EJECT; LB$ST: # PROCESS ST - NAM STATUS COMMAND # IF NOT KDST[0] THEN # STATUS DISPLAY CURRENTLY NOT ON # KDIS$STAT = STM"STM$CREATE"; # BUILD STATUS DISPLAY # GOTO LB$EXIT; LB$AP: # PROCESS AP COMMAND # PARAMS2 = 0; PARAMS6 = TT$WORD[2]; # APPLICATIONS NAME # OVLNAME = KAPIGPP; OVLCALL; KRC = PARAMS7; # COMMAND ERROR CODE # IF KRC EQ 0 THEN BEGIN OVLNAME = KPCLNUPP; OVLCALL; KDAPNM[0] = PARAMS6; KDAN[0] = PARAMS4; KSHOW[0]=FALSE; KDAM[0] = TRUE; KDNI[0] = TRUE; KDBK[0] = FALSE; END GOTO LB$EXIT; LB$END: # PROCESS END COMMAND # OVLNAME = KPCLNUPP; OVLCALL; GOTO LB$EXIT; LB$IG: # PROCESS IG COMMAND # PARAMS2 = 1; PARAMS6 = TT$WORD[2]; OVLNAME = KAPIGPP; OVLCALL; KRC = PARAMS7; GOTO LB$EXIT; LB$DB: # PROCESS DB COMMAND # LB$DE: # PROCESS DE COMMAND # LB$DU: # PROCESS DU COMMAND # LB$LE: # PROCESS LE COMMAND # LB$RS: # PROCESS RS COMMAND # LB$LB: # PROCESS LB COMMAND # LB$LR: # PROCESS LR COMMAND # PARAMS3 = INDEX; # COMMAND ORDINAL # PARAMS6 = TT$WORD[2]; # APPLICATION NAME/ALL/NAM # IF PARAMS6 EQ "NAM" OR PARAMS6 EQ "ALL" THEN BEGIN OVLNAME = KNAMCOMP; # PROCESS NAM K-DISPLAY COMMAND # OVLCALL; END IF PARAMS6 NQ "NAM" THEN BEGIN OVLNAME = KNAMMODP; # PROCESS APPL K-DISPLAY COMMAND # OVLCALL; END KRC = PARAMS7; GOTO LB$EXIT; LB$FL: # PROCESS FL COMMAND # PARAMS6 = TT$WORD[2]; # FL VALUE # OVLNAME = KNAMDFLP; OVLCALL; KRC = PARAMS7; GOTO LB$EXIT; LB$MO: # PROCESS MO COMMAND # IF TT$WORD[2] EQ "FAST" THEN BEGIN KFAST[0] = TRUE; # SET STATUS DISPLAY TO REAL TIME UPDATE # IF KDST[0] THEN # STATUS DISPLAY IS ON, UPDATE DISPLAY FIRST # KDIS$STAT = STM"STM$UPDATE"; END ELSE BEGIN IF TT$WORD[2] EQ "SLOW" THEN KFAST[0] = FALSE; ELSE KRC = 4; END KDIS$RT = KDST[0] AND KFAST[0]; GOTO LB$EXIT; LB$SEND: # PROCESS SEND COMMAND # PARAMS6 = TT$WORD[2]; # DETERMINE DESTINATION NODE NUMBER # PARAMS2 = LOC(TT$WORD[3]); # FWA OF HOP MESSAGE TEXT # OVLNAME = KSENDHMP; OVLCALL; KRC = PARAMS7; # RETURN CODE # GOTO LB$EXIT; LB$TB: # PROCESS PIP TRACING ON COMMAND # LB$TE: # PROCESS PIP TRACING OFF COMMAND # KRC = 4; # PIP TRACE OPTION NOT AVAILABLE # GOTO LB$EXIT; LB$PF: # PROCESS STATUS PAGE FORWARD # IF KDST[0]THEN # PERFORM FORWARD PAGE OPERATION # BEGIN PARAMS1 = 1; # SET PARAMETER FOR PAGE FORWARD # OVLNAME = KSTPAGEP; OVLCALL; END GOTO LB$EXIT; LB$PB: # PROCESS STATUS PAGE BACKWARD # IF KDST[0] THEN # PERFORM BACKWARD PAGE OPERATION # BEGIN PARAMS1 = 2; # SET PARAMETER FOR PAGE BACKWARD # OVLNAME = KSTPAGEP; OVLCALL; END GOTO LB$EXIT; LB$RPF: KSHOW[0]=TRUE; GOTO LB$EXIT; LB$HELP: IF NOT KDETAIL[0] THEN BEGIN KDETAIL[0]=TRUE; KDRNXT[0]=1; KSHOW[0]=TRUE; END GOTO LB$EXIT; LB$ERR: # PROCESS TYPE IN ERROR # KRC = 4; GOTO LB$EXIT; LB$IGNORE: # IGNORE TYPE IN # LB$EXIT: END # END NAM K DISPLAY COMMAND SWITCH # IF KRC NQ 0 THEN BEGIN # ISSUE DIAGNOSTIC TO K DISPLAY # IF KDST[0] # RELEASE STATUS DISPLAY TO ISSUE ERROR MSG # THEN BEGIN OVLNAME = KPCLNUPP; OVLCALL; END PARAMS1 = KRC; OVLNAME = KDISRCP; OVLCALL; END END # END NAM MODE PROCESSING # KBUF1[0] = 0; GOTO RJMAIN; END # KPTYPIN # TERM