TITLE COMINI - THE COMMAND DECODER SUBTTL T. HASTINGS 8-2-65 ;CALLED FROM CLOCK ROUTINE WHEN COMCNT IS GREATER THAN 0 ;AS SET BY TTY SERVICE ROUTINE ;ALL ACS HAVE BEEN SAVED BY CLOCK CHANNEL ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED ;THE COMMAND AND THEN DISPATCHES(PUSHJ) TO APPROPRIATE ;COMMAND SETUP ROTUINE OF THE SAME NAME WITH ACS SET AS: ;ITEM = JOB NUMBER ;TAC = BYTE POINTER TO COMMAND STRING(SSPACE OR CR AFTER COMMAND NAME) ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK TYPING COMMAND ;JDAT = ADDRESS OF JOB AREA, = 0 IF NO JOB AREA ;PROG = ADDRESS OF PROGRAM AREA ;DEVDAT IS ALSO PUSHED ON END OF PD LIST SO IT MAY BE DESTROYED ;UPON RETURN FROM COMMAND SETUP ROUTINE. A CR-LF IS ADDED TO ;MASSAGE AND TTY IS STARTED ON TTY SPCIFIED BY -1(PDP) ;SINCE THE COMMAND DECODER IS CALLED FROM CLOCK ROUTINE ;COMMAND SETUP ROUTINE MUST RUN TO COMPLETION QUICKLY ;IF A COMMAND FUNCTION CANNON DO THIS. IT MUST JUST SET ;THE JOB TO RUNABLE STATUS AND RETURN IMMEDIATELY INTERNAL COMMAND EXTERNAL TTYCOM,TTYSTR,CTEXT,JBTADR,CONMES EXTERNAL COMERR,COMCNT EXTERNAL JOBINI,CRLF,CTEXT,RADX10,ASSJOB,JBTSTS T=BUFPNT ;TEMPORARY ACS T1=BUFWRD COMMAND: PUSHJ PDP, TTYCOM ;SETUP DEVDAT,DAT,TAC, AND ITEM JRST COM2 ;NONE FOUND PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS PUSHJ PDP, CTEXT ;RETURN COMMAND NAME IN TAC1 JUMPE TAC1, COM2A ;IGNORE BLANK LINE MOVSI T, -DISPL ;SEARCH FOR COMMAND NAME CAME TAC1, COMTAB(T) AOBJN T, .-1 JUMPGE T,COM2B ;WAS COMMAND FOUND? MOVE TAC1,DISP(T) ;YES, GET DISPATCH ADDRESS AND BITS JUMPN ITEM, COM1 ;HAS A JOB NUMBER BEEN ASSIGNED TLNE TAC1,NOJOBN ;NO, IS A JOB NUMBER NEEDED FOR THIS CO JRST COM1 ;NO PUSHJ PDP,ASSJOB ;TRY TO ASSIGN A FREE JOB NUMBER JRST COM3A ;NONE AVAILABLE, ERROR MESSAGE PUSH PDP, TAC ;SAVE INPUT BYTE POINTER PUSH PDP,TAC1 ;SAVE ADDRESS OF COMMAND ROUTINE SETZB PROG,JDAT ;NO CORE, CLEAR REL. ADRESS PUSHJ PDP,JOBINI ;INITIALIZE JOB POP PDP,TAC1 ;RESTORE ADR OF COMMAND ROUTINE POP PDP, TAC ;RESTORE INPUT BYTE POINTER MOVEM DEVDAT,(PDP) ;SET ADDRESS OF TTY DEV. DATA BLOCK COM1: HRRZ JDAT, JBTADR(ITEM) ;AND JOB DATA AREA SKIPN PROG,JDAT ;SET PROG. DOES JOB HAVE CORE? TLNE TAC1,NOCORE ;NO. IS CORE NEEDED FOR THIS COMMAND? JRST COM1C ;NO MOVEI TAC,NOCOR ;YES, PRINT "NO CORE ASSIGNED" COM1B: PUSHJ PDP,CONMES JRST COM1A COM1C: PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE COM1A: JUMPN ITEM, COM3 ;ADD CR-LF AND CHECK FOR JOB INIT. COM1D: POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS PUSHJ PDP, TTYSTR ;START OUTPUT, IF ANY COM2: SOS COMCNT ;DECREMENT COMMAND COUNT POPJ PDP, ;EXIT COM2A: LDB TAC1, TAC ;NULL FIELD. WAS BREAK CHAR. A CR? CAIE TAC1,15 ;A CR? CAIN TAC1,";" ;OR A SEMI COLON? JRST COM1D ;YES. IGNORE LINE COM2B: PUSHJ PDP,COMERR ;NO. PRINT MONITOR COMMAND ERROR JRST COM1D NOCOR: ASCIZ /NO CORE ASSIGNED / COM3: MOVE TAC,JBTSTS(ITEM) ;GET STATUS WORD TLOE TAC,JNA ;IS JOB NO ASSIGNED BIT ON YET JRST COM3A ;YES, JOB INIT. BEFORE MOVEM TAC,JBTSTS(ITEM) MOVEI TAC,[ASCIZ /JOB /] PUSHJ PDP,CONMES ;PRINT JOB N INITIALIZED MOVE TAC,ITEM PUSHJ PDP,RADX10 ;PRINT JOB NUMBER MOVEI TAC,JOBM PUSHJ PDP,CONMES COM3A: PUSHJ PDP,CRLF JRST COM1D JOBM: ASCIZ / INITIALIZED / ;TABLE OF CONSOLE COMMANDS. NOCORE=400000 ;NO CORE NEEDED FOR COMMAND NOJOBN=200000 ;NO JOB NUMBER NEEDED FOR COMMAND DEFINE NAMES C CORE,CORE,NOCORE C GET,GET,0 C START,START,0 C IJOB,IJOB,NOCORE+NOJOBN C PJOB,PJOB,NOCORE C KJOB,KJOB,NOCORE C SAVE,SAVE,0 REPEAT 0,< C RESAVE,COMERR,0 > C CONT,CONT,0 C DDT,DDTGO,0 C ASSIGN,ASSIGN,NOCORE C DEASSI,DEASSIGN,NOCORE C STARTC,STARTC,0 C CONTC,CONTC,0 C DETACH,DETACH,NOCORE+NOJOBN C ATTACH,ATTACH,NOCORE+NOJOBN REPEAT 0,< C MTAPE,COMERR,0 C DAYTIM,COMERR,NOCORE C RUNTIM,COMERR,NOCORE C TOTTIM,COMERR,NOCORE C NULTIM,COMERR,NOCRE C SYSDDT,COMERR,NOCORE C SYSMAK,SYSMAK,0 > C DIGITAL,DIGITAL,NOCORE+NOJOBN > ;GENERATE TABLE OF SIXBIT COMMAND NAMES DEFINE C(A,B,C) < ZZ=.+1 SIXBIT /A/ IFN .-ZZ, ;ONLY FIRST 6 CHARACTERS > COMTAB: NAMES DISPL=.-COMTAB ;LENTH OF TABLE ;GENERATE THE DISPATCH TABLE DEFINE C(A,B,C) < XWD C,B EXTERNAL B > DISP: NAMES END,