1 TITLE COMINI - THE COMMAND DECODER
\r
2 SUBTTL T. HASTINGS 8-2-65
\r
3 ;CALLED FROM CLOCK ROUTINE WHEN COMCNT IS GREATER THAN 0
\r
4 ;AS SET BY TTY SERVICE ROUTINE
\r
5 ;ALL ACS HAVE BEEN SAVED BY CLOCK CHANNEL
\r
6 ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED
\r
7 ;THE COMMAND AND THEN DISPATCHES(PUSHJ) TO APPROPRIATE
\r
8 ;COMMAND SETUP ROTUINE OF THE SAME NAME WITH ACS SET AS:
\r
10 ;TAC = BYTE POINTER TO COMMAND STRING(SSPACE OR CR AFTER COMMAND NAME)
\r
11 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER
\r
12 ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK TYPING COMMAND
\r
13 ;JDAT = ADDRESS OF JOB AREA, = 0 IF NO JOB AREA
\r
14 ;PROG = ADDRESS OF PROGRAM AREA
\r
15 ;DEVDAT IS ALSO PUSHED ON END OF PD LIST SO IT MAY BE DESTROYED
\r
16 ;UPON RETURN FROM COMMAND SETUP ROUTINE. A CR-LF IS ADDED TO
\r
17 ;MASSAGE AND TTY IS STARTED ON TTY SPCIFIED BY -1(PDP)
\r
19 ;SINCE THE COMMAND DECODER IS CALLED FROM CLOCK ROUTINE
\r
20 ;COMMAND SETUP ROUTINE MUST RUN TO COMPLETION QUICKLY
\r
21 ;IF A COMMAND FUNCTION CANNON DO THIS. IT MUST JUST SET
\r
22 ;THE JOB TO RUNABLE STATUS AND RETURN IMMEDIATELY
\r
25 EXTERNAL TTYCOM,TTYSTR,CTEXT,JBTADR,CONMES
\r
26 EXTERNAL COMERR,COMCNT
\r
27 EXTERNAL JOBINI,CRLF,CTEXT,RADX10,ASSJOB,JBTSTS
\r
29 T=BUFPNT ;TEMPORARY ACS
\r
32 COMMAND: PUSHJ PDP, TTYCOM ;SETUP DEVDAT,DAT,TAC, AND ITEM
\r
33 JRST COM2 ;NONE FOUND
\r
34 PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS
\r
35 PUSHJ PDP, CTEXT ;RETURN COMMAND NAME IN TAC1
\r
36 JUMPE TAC1, COM2A ;IGNORE BLANK LINE
\r
37 MOVSI T, -DISPL ;SEARCH FOR COMMAND NAME
\r
38 CAME TAC1, COMTAB(T)
\r
40 JUMPGE T,COM2B ;WAS COMMAND FOUND?
\r
41 MOVE TAC1,DISP(T) ;YES, GET DISPATCH ADDRESS AND BITS
\r
42 JUMPN ITEM, COM1 ;HAS A JOB NUMBER BEEN ASSIGNED
\r
43 TLNE TAC1,NOJOBN ;NO, IS A JOB NUMBER NEEDED FOR THIS CO
\r
45 PUSHJ PDP,ASSJOB ;TRY TO ASSIGN A FREE JOB NUMBER
\r
46 JRST COM3A ;NONE AVAILABLE, ERROR MESSAGE
\r
48 PUSH PDP, TAC ;SAVE INPUT BYTE POINTER
\r
49 PUSH PDP,TAC1 ;SAVE ADDRESS OF COMMAND ROUTINE
\r
50 SETZB PROG,JDAT ;NO CORE, CLEAR REL. ADRESS
\r
51 PUSHJ PDP,JOBINI ;INITIALIZE JOB
\r
52 POP PDP,TAC1 ;RESTORE ADR OF COMMAND ROUTINE
\r
53 POP PDP, TAC ;RESTORE INPUT BYTE POINTER
\r
54 MOVEM DEVDAT,(PDP) ;SET ADDRESS OF TTY DEV. DATA BLOCK
\r
55 COM1: HRRZ JDAT, JBTADR(ITEM) ;AND JOB DATA AREA
\r
56 SKIPN PROG,JDAT ;SET PROG. DOES JOB HAVE CORE?
\r
57 TLNE TAC1,NOCORE ;NO. IS CORE NEEDED FOR THIS COMMAND?
\r
59 MOVEI TAC,NOCOR ;YES, PRINT "NO CORE ASSIGNED"
\r
60 COM1B: PUSHJ PDP,CONMES
\r
63 COM1C: PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE
\r
64 COM1A: JUMPN ITEM, COM3 ;ADD CR-LF AND CHECK FOR JOB INIT.
\r
65 COM1D: POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS
\r
66 PUSHJ PDP, TTYSTR ;START OUTPUT, IF ANY
\r
67 COM2: SOS COMCNT ;DECREMENT COMMAND COUNT
\r
70 COM2A: LDB TAC1, TAC ;NULL FIELD. WAS BREAK CHAR. A CR?
\r
72 CAIN TAC1,";" ;OR A SEMI COLON?
\r
73 JRST COM1D ;YES. IGNORE LINE
\r
74 COM2B: PUSHJ PDP,COMERR ;NO. PRINT MONITOR COMMAND ERROR
\r
77 NOCOR: ASCIZ /NO CORE ASSIGNED
\r
80 COM3: MOVE TAC,JBTSTS(ITEM) ;GET STATUS WORD
\r
81 TLOE TAC,JNA ;IS JOB NO ASSIGNED BIT ON YET
\r
82 JRST COM3A ;YES, JOB INIT. BEFORE
\r
83 MOVEM TAC,JBTSTS(ITEM)
\r
84 MOVEI TAC,[ASCIZ /JOB /]
\r
85 PUSHJ PDP,CONMES ;PRINT JOB N INITIALIZED
\r
87 PUSHJ PDP,RADX10 ;PRINT JOB NUMBER
\r
90 COM3A: PUSHJ PDP,CRLF
\r
93 JOBM: ASCIZ / INITIALIZED
\r
96 ;TABLE OF CONSOLE COMMANDS.
\r
98 NOCORE=400000 ;NO CORE NEEDED FOR COMMAND
\r
99 NOJOBN=200000 ;NO JOB NUMBER NEEDED FOR COMMAND
\r
108 C IJOB,IJOB,NOCORE+NOJOBN
\r
117 C ASSIGN,ASSIGN,NOCORE
\r
118 C DEASSI,DEASSIGN,NOCORE
\r
121 C DETACH,DETACH,NOCORE+NOJOBN
\r
122 C ATTACH,ATTACH,NOCORE+NOJOBN
\r
125 C DAYTIM,COMERR,NOCORE
\r
126 C RUNTIM,COMERR,NOCORE
\r
127 C TOTTIM,COMERR,NOCORE
\r
128 C NULTIM,COMERR,NOCRE
\r
129 C SYSDDT,COMERR,NOCORE
\r
132 C DIGITAL,DIGITAL,NOCORE+NOJOBN
\r
135 ;GENERATE TABLE OF SIXBIT COMMAND NAMES
\r
140 IFN .-ZZ,<RELOC ZZ> ;ONLY FIRST 6 CHARACTERS
\r
144 DISPL=.-COMTAB ;LENTH OF TABLE
\r
146 ;GENERATE THE DISPATCH TABLE
\r