1 TITLE COMCSS - COMMAND COMMON ROUTINES
\r
2 SUBTTL T. HASTINGS 8-15-65
\r
3 ;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING
\r
4 ; IN COMMAND LINE (SIXBIT)
\r
5 ; CALL: MOVE TAC, BYTE POINTER TO FIRST CHAR.-1
\r
7 ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1
\r
9 INTERNAL CTEXT, CTEXT1
\r
11 T=BUFPNT ;TEMPORARY ACS
\r
15 CTEXT1: MOVEI TAC1, 0 ;CHECK PREVIOUS BREAK CHAR.
\r
17 CAIN T, 15 ;RETURN IF CR.
\r
20 CTEXT: PUSHJ PDP, SKIPS ;SKIP LEADING SPACES, TABS
\r
21 MOVE T,[POINT 6,TAC1]
\r
26 CTEX1: PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC
\r
28 TRC T1,40 ;CONVERT TO SIXBIT
\r
29 IDPB T1,T ;YES, STORE AWAY
\r
30 CAME T,[POINT 6,TAC1,35] ;SIX CHARACTER YET
\r
32 CTEX2: ILDB T1, TAC ;YES
\r
33 PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC
\r
37 ;SCAN FOR ALPHANUMERIC CHAR IN T1
\r
39 CAILE T1, "Z" ;LETTERS ARE LARGER THAN NOS.
\r
43 AOS (PDP) ;LETTER OR NUMBER
\r
46 ;ROUTINE TO IGNORE LEADING SPACES AND TABS
\r
47 ;CALL: MOVE TAC, BYTE POINTER TO CHAR.
\r
55 ;ROUTINE TO IGNORE LEDING SPACES AND TABS
\r
56 ;CALL: MOVE TAC, BYTE POINTER TO CHAR.-1
\r
67 ;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT
\r
68 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING
\r
75 ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?"
\r
77 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING
\r
84 COMERR: MOVE DAT,TAC
\r
85 MOVEI T,TTYBUF(DEVDAT) ;IS THERE MORE THAN 3 WORDS I
\r
87 HRRI DAT,3(T) ;YES, TYPE ONLY 3
\r
88 MOVEI T, "?" ;APPEND "?"
\r
92 ASCIZ / MONITOR COMMAND ERROR
\r
95 ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED
\r
96 ;CALL: MOVE DAT,BYTE POINTER TO OUTPUT
\r
101 CRLF: MOVEI TAC,[ASCII /
\r
104 ;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER
\r
105 ; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER
\r
106 ; MOVEI TAC, ADDRESS OF ASCII MESSAGE`
\r
107 ; PUSHJ PDP, CONMES
\r
108 ; STRING TERMINATED BY NULL
\r
109 ; CONMES DOES NOT START TTY
\r
113 CONMES: PUSH PDP, TAC1
\r
114 HRLI TAC, 440700 ;FORM BYTE POINTER
\r
115 CON0: ILDB TAC1, TAC
\r
119 CON1: POP PDP, TAC1
\r
122 ;ROUTINE TO PRINT "TO FEW ARGUMENTS"
\r
123 ;CALL: MOVE DAT,BYTE POINTER
\r
128 NOTENF: JSP TAC,CONMES
\r
130 ASCIZ /TOO FEW ARGUMENTS
\r
133 ;ROUTINE TO INITIALIZE A JOB
\r
134 ;CALL: MOVE ITEM, JOB NUMBER
\r
135 ; PUSHJ PDP, JOBINI
\r
136 ; DEVDAT IS SETUP ON RETURN
\r
138 INTERNAL JOBINI,JOBZER
\r
139 EXTERNAL JBTSTS,PJOBN,CORE1,MONJOB,ESTOP,TTYATT
\r
141 JOBINI: JUMPN ITEM,JOB0 ;HAS A JOB NUMBER BEED ASSIGNED?
\r
142 PUSHJ PDP,ASSJOB ;NO, THEN ASSIGN ONE.
\r
143 JRST CONMESS ;NONE LEFT
\r
144 JOB0: PUSHJ PDP,TTYATT ;ATTACH TTY
\r
145 JFCL ;ALREADY ATTACHED
\r
146 MOVSI TAC,JNA ;CLEAR JOB NO. ASSIGNED BIT
\r
147 ANDCAM TAC,JBTSTS(ITEM) ;TO FORCE MESSAGE
\r
148 MOVSI TAC,646471 ;SIXBIT /TTY/
\r
149 MOVEM TAC, DEVLOG(DEVDAT) ;SET LOGICAL NAME
\r
150 MOVEI T, ASSCON ;SET ASSIGNED BY CONSOLE BIT
\r
151 IORM T, DEVMOD(DEVDAT)
\r
152 PUSHJ PDP, DEASTY ;DE-ASSIGNED ALL DEVICES EXCEPT TTY
\r
153 JUMPE JDAT,CPOPJ ;DOES JOB ALREDY HAVE CORE?
\r
155 ;ROUTINE TO RELEASE ALL DEVICES AND FLUSH CORE
\r
156 ;RUN AS MONITOR JOB
\r
157 ;CALL: SAME AS JOBIN
\r
161 JOBZER: HRRI TAC1,JOB1 ;ADDRESS OF SUB. TO RELEASE DEV.
\r
162 JOBZR1: HRLI TAC1, ESTOP ;RETURN ADDRESS AFER IORELS
\r
163 JRST MONJOB ;GO SCHEDULE MONITOR JOB
\r
165 JOB1: PUSHJ PDP,IOKILL ;KILL ALL IO DEVICES
\r
166 MOVEI TAC,0 ;FLUSH ALL CORE
\r
167 SOS (PDP) ;CORE1 WILL SKIP RETURN
\r
170 ;ROUTINE TO KILL CURRENT JOB
\r
171 ;CALL PUSHJ PDP,JOBKIL
\r
174 EXTERNAL JBTSTS,TTYKIL
\r
176 JOBKIL: AOS (PDP) ;SUPRESS CR-LF AND JOB INIT. CHECK
\r
178 PUSHJ PDP,DEASAL ;DEASSIGN ALL DEVICES
\r
179 JUMPE JDAT,JOBKA ;DOES JOB HAVE CORE?
\r
180 HRRI TAC1,JOBK2 ;YES,RELEAS DEVICE AND CLEAR
\r
183 JOBK2: PUSH PDP,DEVDAT ;SAVE DEVDAT FOR TTYKIL
\r
184 PUSHJ PDP,JOB1 ;FLUSH CORE AND RELEASE DEVICES
\r
186 JOBKA: MOVSI TAC,JERR ;CLEAR ALL BUT JOB ERROR BIT
\r
187 MOVEM TAC,JBTSTS(ITEM) ;IN JOB STATUS WORD
\r
188 JRST TTYKIL ;RETURN TTY TO VIRGIN STATE
\r
190 ;ROUTINE TO ASSIGN AN UNUSED JOB NUMBER
\r
191 ;CALL PUSHJ PDP,ASSJOB
\r
192 ; ERROR RETURN TAC DESTROYED
\r
193 ; OK RETURN ITEM SET, TAC AND TAC1 PRESERVED
\r
196 EXTERNAL MJOBN,JBTSTS,CPOPJ1
\r
198 ASSJOB: MOVSI ITEM,MJOBN
\r
201 TDNE T1,JBTSTS(ITEM)
\r
207 ASSJB1: JSP TAC,CONMES
\r
208 ASCIZ /JOB CAPACITY EXCEEDED
\r
211 ;ROUTINE TO DEASSIGN A DEVICE
\r
212 ;CALL: MOVE DEVDAT, DEVICE DATA BLOCK
\r
213 ; MOVE ITEM, JOB NUMBER
\r
215 ; ERROR NOT PREVIOUSLY ASSIGNED
\r
216 ; OK RETURN WITH DEVICE DEASSIGNED
\r
219 EXTERNAL PJOBN, CPOPJ1
\r
221 DEASG: LDB T, PJOBN ;WAS DEVICE ASSIGNED TO THIS JOB?
\r
223 POPJ PDP, ;NO. RETURN
\r
224 MOVSI T,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT
\r
225 ANDCAM T,DEVMOD(DEVDAT)
\r
226 MOVEI T, ASSCON ;YES, IS ASSIGNED BY CONSOLE BIT ON?
\r
227 TDNN T, DEVMOD(DEVDAT)
\r
229 ANDCAB T,DEVMOD(DEVDAT) ;YES, CLEAR BIT
\r
230 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME
\r
231 TRNE T, ASSPRG ;IS ASSIGNED BY PROGRAM BIT ON?
\r
233 MOVEI T,0 ;NO, CLEAR JOB NUMBER
\r
237 ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY
\r
238 ;CALL: MOVE ITEM, JOB NUMBER
\r
239 ; PUSHJ PDP, DEASTY
\r
243 DEASTY: MOVSI TAC, 646471 ;SIXBIT /TTY/
\r
246 ;ROUTINE TO DEASSIGN ALL DEVICES EXECPT ONE
\r
247 ;CALL: MOVE ITEM, JOB NUMBER
\r
248 ; MOVE TAC, LOGICAL DEVICE NOT TO BE DEASSIGNED
\r
249 ; PUSHJ PDP, DEASAL
\r
254 DEASAL: PUSH PDP,DEVDAT
\r
255 HLRZ DEVDAT,DEVLST ;SEARCH ALL DDBS
\r
256 DEA1: CAME TAC, DEVLOG(DEVDAT) ;IS THIS THE LOGICAL NAME
\r
257 PUSHJ PDP, DEASG ;NO, TRY TO DEASSIGN IT
\r
258 JFCL ;IGNORE IF CANT
\r
259 HLRZ DEVDAT, DEVSER(DEVDAT)
\r
264 ;ROUTINE TO READ CONSOLE AND CONVERT ANY RADIX NUMBER
\r
265 ; CALL: MOVE TAC1, DESIRED RADIX
\r
266 ; MOVE TAC, BYTE POINTER TO FIRST CHRACTER
\r
267 ; PUSHJ PDP, ANYRIN
\r
268 ; ERROR EXIT ;AC TAC1=0 IF NO NUMBER BEFORE FIRST NO
\r
269 ; NORMAL EXIT ;AC TAC1 CONTAINS NUMEBR
\r
270 ; SCAN STOPS ON FIRST ILLEGAL CHARACTER OR CR
\r
271 ; IGNORES SPACES, TABS, RUBOUTS
\r
273 INTERNAL OCTIN,ANYRIN,DECIN,DECIN1
\r
274 EXTERNAL CPOPJ1, CPOPJ
\r
276 C=BUFPNT ;CHARACTER AC
\r
279 DECIN1: IBP TAC ;SKIP SEPARATION CHARACTER
\r
280 DECIN: MOVEI TAC1,12 ;DECIMAL INPUT
\r
283 OCTIN: MOVEI TAC1, 10
\r
284 ANYRIN: MOVE R, TAC1
\r
286 PUSHJ PDP, SKIPS1 ;SKIP LEADING SPACES, TABS
\r
288 CAIN C, 15 ;CHECK FOR INITIAL CR
\r
289 POPJ PDP, ;EXIT WITH 0 IN TAC1
\r
290 OCT0: CAIE C,"-" ;DASH?
\r
292 JRST CPOPJ1 ;YES, ONLY LEGAL TERMINATORS
\r
294 JUMPL C, OCTE ;ERROR IF NEGATIVE
\r
295 CAML C, R ;OR .GE. RADIX
\r
296 OCTE: AOJA TAC1,CPOPJ ;ERROR,INSURE TAC1 NON-ZERO
\r