Cleanup of typos.
[retro-software/dec/tops10/v1.19.git] / src / comcss.mac
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
6 ;         PUSHJ PDP, CTEXT\r
7 ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1\r
8 \r
9 INTERNAL CTEXT, CTEXT1\r
10 \r
11 T=BUFPNT            ;TEMPORARY ACS\r
12 T1=BUFWRD\r
13 T2=UUO\r
14 \r
15 CTEXT1:   MOVEI TAC1, 0         ;CHECK PREVIOUS BREAK CHAR.\r
16           LDB T, TAC\r
17           CAIN T, 15            ;RETURN IF CR.\r
18           POPJ PDP,\r
19 \r
20 CTEXT:    PUSHJ PDP, SKIPS              ;SKIP LEADING SPACES, TABS\r
21           MOVE T,[POINT 6,TAC1]\r
22           MOVEI TAC1, 0\r
23           LDB T1, TAC\r
24           JRST CTEX1\r
25 CTEX0:    ILDB T1,TAC\r
26 CTEX1:    PUSHJ PDP, CTEX               ;IS IT ALPHANUMERIC\r
27           POPJ PDP,                     ;NO. EXIT\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
31           JRST CTEX0                    ;NO\r
32 CTEX2:    ILDB T1, TAC                  ;YES\r
33           PUSHJ PDP, CTEX               ;IS IT ALPHANUMERIC\r
34           POPJ PDP,                     ;NO, EXIT\r
35           JRST CTEX2\r
36 \r
37 ;SCAN FOR ALPHANUMERIC CHAR IN T1\r
38 CTEX:     CAIL T1, "0"\r
39           CAILE T1, "Z"         ;LETTERS ARE LARGER THAN NOS.\r
40           POPJ PDP,           ;NEITHER\r
41           CAILE T1, "9"\r
42           CAIL T1, "A"\r
43           AOS (PDP)           ;LETTER OR NUMBER\r
44           POPJ PDP,\r
45 \f\r
46 ;ROUTINE TO IGNORE LEADING SPACES AND TABS\r
47 ;CALL:    MOVE TAC, BYTE POINTER TO CHAR.\r
48 ;         PUSHJ PDP, SKIPS1\r
49 \r
50 INTERNAL SKIPS1\r
51 \r
52 SKIPS1:   LDB T, TAC\r
53           JRST SKIPSA\r
54 \r
55 ;ROUTINE TO IGNORE LEDING SPACES AND TABS \r
56 ;CALL:    MOVE TAC, BYTE POINTER TO CHAR.-1\r
57 ;         PUSHJ PDP, SKIPS\r
58 \r
59 INTERNAL SKIPS\r
60 \r
61 SKIPS:    ILDB T, TAC\r
62 SKIPSA:   CAIE T, " "\r
63           CAIN T, 11\r
64           JRST SKIPS\r
65           POPJ PDP,\r
66 \f\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
69 ;         PUSHJ PDP, COMERA\r
70 \r
71 INTERNAL COMERA\r
72 \r
73 COMERA:   IBP TAC\r
74  \r
75 ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?"\r
76 ;AND SET AS OUTPUT\r
77 ;CALL:    MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING\r
78 ;         PUSHJ PDP, COMERR\r
79 \r
80 INTERNAL COMERR\r
81 \r
82 EXTERNAL TTYBUF\r
83 \r
84 COMERR:   MOVE DAT,TAC\r
85           MOVEI T,TTYBUF(DEVDAT)        ;IS THERE MORE THAN 3 WORDS I\r
86           CAIGE T,-3(DAT)\r
87           HRRI DAT,3(T)         ;YES, TYPE ONLY 3\r
88           MOVEI T, "?"            ;APPEND "?"\r
89           DPB T, DAT\r
90           JSP TAC,CONMES\r
91 \r
92           ASCIZ / MONITOR COMMAND ERROR\r
93 /\r
94 \f\r
95 ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED\r
96 ;CALL:    MOVE DAT,BYTE POINTER TO OUTPUT\r
97 ;         PUSHJ PDP,CRLF\r
98 \r
99 INTERNAL CRLF\r
100 \r
101 CRLF:     MOVEI TAC,[ASCII /\r
102 /]\r
103 \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
110 \r
111 INTERNAL CONMES\r
112 \r
113 CONMES:   PUSH PDP, TAC1\r
114           HRLI TAC, 440700      ;FORM BYTE POINTER\r
115 CON0:     ILDB TAC1, TAC\r
116           JUMPE TAC1, CON1\r
117           IDPB TAC1, DAT\r
118           JRST CON0\r
119 CON1:     POP PDP, TAC1\r
120           POPJ PDP,\r
121 \r
122 ;ROUTINE TO PRINT "TO FEW ARGUMENTS"\r
123 ;CALL:    MOVE DAT,BYTE POINTER\r
124 ;         PUSHJ PDP,NOTENF\r
125 \r
126 INTERNAL NOTENF\r
127 \r
128 NOTENF:   JSP TAC,CONMES\r
129 \r
130 ASCIZ /TOO FEW ARGUMENTS\r
131 /\r
132 \f\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
137 \r
138 INTERNAL JOBINI,JOBZER\r
139 EXTERNAL JBTSTS,PJOBN,CORE1,MONJOB,ESTOP,TTYATT\r
140 \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
154 \r
155 ;ROUTINE TO RELEASE ALL DEVICES AND FLUSH CORE\r
156 ;RUN AS MONITOR JOB\r
157 ;CALL:    SAME AS JOBIN\r
158 \r
159 EXTERNAL IOKILL\r
160 \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
164 \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
168           JRST CORE1\r
169 \f\r
170 ;ROUTINE TO KILL CURRENT JOB\r
171 ;CALL   PUSHJ PDP,JOBKIL\r
172 \r
173 INTERNAL JOBKIL\r
174 EXTERNAL JBTSTS,TTYKIL\r
175 \r
176 JOBKIL:   AOS (PDP)             ;SUPRESS CR-LF AND JOB INIT. CHECK\r
177           MOVEI TAC,1\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
181           JRST JOBZR1\r
182 \r
183 JOBK2:    PUSH PDP,DEVDAT       ;SAVE DEVDAT FOR TTYKIL\r
184           PUSHJ PDP,JOB1        ;FLUSH CORE AND RELEASE DEVICES\r
185           POP PDP,DEVDAT\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
189 \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
194 \r
195 INTERNAL ASSJOB\r
196 EXTERNAL MJOBN,JBTSTS,CPOPJ1\r
197 \r
198 ASSJOB:   MOVSI ITEM,MJOBN\r
199           AOBJN ITEM,.+1\r
200           MOVSI T1,JNA\r
201           TDNE T1,JBTSTS(ITEM)\r
202           AOBJN ITEM,.-1\r
203           JUMPGE ITEM,ASSJB1\r
204           ANDI ITEM,-1\r
205           JRST CPOPJ1\r
206 \r
207 ASSJB1:   JSP TAC,CONMES\r
208           ASCIZ /JOB CAPACITY EXCEEDED\r
209 /\r
210 \f\r
211 ;ROUTINE TO DEASSIGN A DEVICE \r
212 ;CALL:    MOVE DEVDAT, DEVICE DATA BLOCK\r
213 ;         MOVE ITEM, JOB NUMBER\r
214 ;         PUSHJ DPD, DEASG\r
215 ;         ERROR NOT PREVIOUSLY ASSIGNED\r
216 ;         OK RETURN WITH DEVICE DEASSIGNED\r
217 \r
218 INTERNAL DEASG\r
219 EXTERNAL PJOBN, CPOPJ1\r
220 \r
221 DEASG:    LDB T, PJOBN          ;WAS DEVICE ASSIGNED TO THIS JOB?\r
222           CAME T, ITEM\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
228           POPJ PDP,             ;NO\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
232           JRST CPOPJ1           ;YES\r
233           MOVEI T,0             ;NO, CLEAR JOB NUMBER\r
234           DPB T, PJOBN\r
235           JRST CPOPJ1\r
236 \r
237 ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY\r
238 ;CALL:    MOVE ITEM, JOB NUMBER \r
239 ;         PUSHJ PDP, DEASTY\r
240 \r
241 INTERNAL DEASTY\r
242 \r
243 DEASTY:   MOVSI TAC, 646471     ;SIXBIT /TTY/\r
244                                 ;FALL INTO DEASAL\r
245 \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
250 \r
251 INTERNAL DEASAL\r
252 EXTERNAL DEVLST\r
253 \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
260           JUMPN DEVDAT, DEA1\r
261           POP PDP,DEVDAT\r
262           POPJ PDP,\r
263 \f\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
272 \r
273 INTERNAL OCTIN,ANYRIN,DECIN,DECIN1\r
274 EXTERNAL CPOPJ1, CPOPJ\r
275 \r
276 C=BUFPNT  ;CHARACTER AC\r
277 R=BUFWRD  ;RADIX AC\r
278 \r
279 DECIN1:   IBP TAC       ;SKIP SEPARATION CHARACTER\r
280 DECIN:    MOVEI TAC1,12         ;DECIMAL INPUT\r
281           JRST ANYRIN\r
282 \r
283 OCTIN:    MOVEI TAC1, 10\r
284 ANYRIN:   MOVE R, TAC1\r
285           MOVEI TAC1, 0\r
286           PUSHJ PDP, SKIPS1     ;SKIP LEADING SPACES, TABS\r
287           LDB C, TAC\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
291           CAIN C,15  ;CR?\r
292           JRST CPOPJ1           ;YES, ONLY LEGAL TERMINATORS\r
293           SUBI C,60\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
297           IMUL TAC1, R\r
298           ADD TAC1, C\r
299 OCT1:     ILDB C, TAC\r
300           JRST OCT0\r
301 \r
302           END,\r