Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /5 OS/8 SYMBOLIC EDITOR, V12 |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | // | |
10 | / | |
11 | / | |
12 | / | |
13 | / | |
14 | /COPYRIGHT (C) 1977 | |
15 | /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. | |
16 | / | |
17 | / | |
18 | / | |
19 | /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A | |
20 | /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- | |
21 | /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER | |
22 | /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE | |
23 | /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO | |
24 | /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE | |
25 | /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. | |
26 | / | |
27 | / | |
28 | /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT | |
29 | /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL | |
30 | /EQUIPMRNT COROPATION. | |
31 | / | |
32 | /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS | |
33 | /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. | |
34 | / | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | / | |
40 | \f/5 JULY 1972 EF | |
41 | ||
42 | /COPYRIGHT 1971,1972 DIGITAL EQUIPMENT CORPORATION | |
43 | / MAYNARD, MASSACHUSSETTS 01754 | |
44 | ||
45 | /THE SYMBOLIC EDITOR IS A LINE-ORIENTED | |
46 | /TEXT EDITOR WITH CHARACTER AND STRING | |
47 | /SEARCH CAPABILITIES. IT IS DESIGNED | |
48 | /TO BE COMPATIBLE WITH THE OS/8 SYSTEM. | |
49 | ||
50 | /THE DESIGN OF THE EDITOR IS SIMILAR | |
51 | /TO THAT OF THE PAPER TAPE SYMBOLIC | |
52 | /EDITOR AND THE DISK MONITOR SYSTEM | |
53 | /EDITOR. | |
54 | ||
55 | ||
56 | / OS/8 V3 CHANGES S.R. | |
57 | ||
58 | /1. ?5 ERROR REMOVED | |
59 | /2. ALLOW CHAINING TO EDIT | |
60 | /3. ADDED VERSION # COMMAND (#) | |
61 | /4. COMBINED ^C ROUTINES, TAKING OUT BRANCH THRU 17667 | |
62 | /5. ALLOWED PARITY CHARACTERS EVERYWHERE | |
63 | / | |
64 | / | |
65 | / FIX FOR V10 J.K. 1975 | |
66 | / | |
67 | / THE CLOSE ERROR MESAGE 2? WAS BEING | |
68 | / GIVEN INSTEAD OF FILE FULL MESSAGE | |
69 | / WHEN THE INPUT FILE FIT INTO THE EDIT BUFFER | |
70 | / BUT WAS TOO LARGE FOR THE AVAILIBLE SPACE ON THE | |
71 | / OUTPUT DEVICE. | |
72 | ||
73 | / V11 CHANGES 25-MAY-77 DAVID SPECTOR | |
74 | ||
75 | /1. ESCAPE KEY NO LONGER ECHOED | |
76 | /2. SCOPE MODE SUPPORTED | |
77 | /3. ONCE-ONLY CODE MOVED TO INPUT HANDLER | |
78 | / AREA IN ORDER TO FREE LOCS 3000-3177 | |
79 | ||
80 | / V12 CHANGES 27-JUN-77 EDWARD P. STEINBERGER | |
81 | / | |
82 | /ALLOWED ESCAPE(233) TO BE AN INPUT CHARACTER IN TEXT MODE. | |
83 | /ECHOS AS "$" ON TERMINAL OR LINEPRINTER (IF V), OUTPUT | |
84 | /TO FILE AS ESCAPE | |
85 | ||
86 | \f/THE LOADING AND SAVING PROCEDURE FROM PAPER TAPE IS: | |
87 | / .R ABSLDR | |
88 | / *PTR:/9$^ | |
89 | / .SAVE SYS EDIT | |
90 | / | |
91 | ||
92 | /THE STARTING ADDRESS IS 00200. | |
93 | ||
94 | /COMMAND DECODER RULES: | |
95 | /*OUTPUT FILE<UP TO 9 INPUT FILES/OPTIONS | |
96 | ||
97 | /OPTIONS: | |
98 | /A RETURN CONTROL TO EDITOR AFTER FILE CLOSE | |
99 | / (CALLS COMMAND DECODER FOR NEW FILES) | |
100 | / (DEFAULT IS RETURN TO MONITOR) | |
101 | /B CONVERT 2 OR MORE SPACES TO TAB ON INPUT | |
102 | /D DELETE OLD COPY OF OUTPUT FILE BEFORE | |
103 | / STORING NEW FILE | |
104 | ||
105 | /ERROR CODES: | |
106 | / 0 FAILURE IN INPUT DEVICE HANDLER | |
107 | / 1 FAILURE IN OUTPUT DEVICE HANDER | |
108 | / 2 COULD NOT CLOSE FILE | |
109 | / 3 COULD NOT OPEN FILE | |
110 | / 4 DEVICE HANDLER COULD NOT BE LOADED | |
111 | ||
112 | VERSION=12 | |
113 | PATCH="A /PATCH LEVEL A | |
114 | \f/COMMANDS: | |
115 | ||
116 | /A APPEND TEXT TO BUFFER | |
117 | /I INSERT TEXT INTO BUFFER | |
118 | /C CHANGE TEXT IN BUFFER | |
119 | /L LIST TEXT IN BUFFER | |
120 | /D DELETE TEXT IN BUFFER | |
121 | /K KILL BUFFER | |
122 | /M MOVE TEXT WITHIN BUFFER | |
123 | /G GET AND LIST TAGGED LINE IN BUFFER | |
124 | /B LIST # OF CORE LOCATIONS LEFT IN BUFFER | |
125 | /S CHARACTER SEARCH | |
126 | /J INTER-BUFFER STRING SEARCH | |
127 | /F AFTER J, SEARCH FOR NEXT OCCURRANCE | |
128 | / OF SAME STRING | |
129 | /$ INTRA-BUFFER STRING SEARCH | |
130 | /R READ TEXT INTO BUFFER FROM INPUT DEVICE | |
131 | /N WRITE BUFFER, KILL, AND READ NEXT PAGE | |
132 | /Y INPUT TEXT PAGE, NO OUTPUT | |
133 | /P WRITE TEXT BUFFER TO OUTPUT DEVICE | |
134 | /T PUNCH TRAILER TAPE | |
135 | /E OUTPUT BUFFER, TRANSFER REST OF | |
136 | / INPUT FILE TO OUTPUT FILE | |
137 | / CLOSE OUTPUT FILE | |
138 | /Q IMMEDIATE END OF FILE | |
139 | /V PRINT ON LP08 | |
140 | /# TYPE VERSION NUMBER | |
141 | \f | |
142 | /ABBREVIATIONS | |
143 | ||
144 | /.LT. LESS THAN | |
145 | /.LE. LESS THAN OR EQUAL TO | |
146 | /.GT. GREATER THAN | |
147 | /.GE. GREATER THAN OR EQUAL TO | |
148 | / R RIGHT | |
149 | / L LEFT | |
150 | ||
151 | /SPECIAL COMMENTS | |
152 | ||
153 | /SINCE THE EDITOR IS CODED ACROSS PAGE BOUNDARIES, IT IS | |
154 | /NECESSARY TO BE AWARE OF THE EFFECTS OF THE INSERTION | |
155 | /OR DELETION OF CODE. FOR THIS REASON, THE LIMITS | |
156 | /OF PERMISSABLE PAGE BOUNDARY WANDERING | |
157 | /ARE INDICATED WITH THE FOLLOWING CONSTRUCTION: | |
158 | ||
159 | /----------------------------------------------------------------------- | |
160 | /SOMEWHERE BETWEEN LINES, THE PAGE BOUNDARY MUST OCCUR | |
161 | /----------------------------------------------------------------------- | |
162 | \f | |
163 | *1 | |
164 | ||
165 | /MISCELLANEOUS POINTER AND CONSTANTS | |
166 | ||
167 | BUFEND, 6100 /WARNING FOR END OF BUFFER | |
168 | P7700, 7700 /MONITOR CALL LOCATION | |
169 | ||
170 | M77, -77 | |
171 | NOP /RESERVED FOR ODT | |
172 | NOP / " | |
173 | NOP / " | |
174 | ||
175 | C77, 77 | |
176 | M40, -40 | |
177 | C100, 100 | |
178 | C277, 277 /QUESTION MARK | |
179 | ||
180 | /AUTO-INDEX REGISTERS | |
181 | ||
182 | AXOUT, 0 /OUTPUT INDEX | |
183 | AXCOMB, 0 /COMBINE POINTER | |
184 | AXTEM, 0 /TEMPORARY INDEX | |
185 | AXIN, 0 /STORAGE INDEX | |
186 | ||
187 | /CONSTANTS | |
188 | ||
189 | M4, -4 /LETTER COUNT | |
190 | P177, 177 | |
191 | MCR, -215 | |
192 | M240, -240 | |
193 | P40, 40 | |
194 | C200, 200 /(START & RESTART) | |
195 | \f | |
196 | ||
197 | /LISTS | |
198 | ||
199 | /TAG SEARCH LIST- | |
200 | LIST7=. | |
201 | ||
202 | C240, 240 /SPACE | |
203 | 257 /COMMENT DELIMITER (/) | |
204 | ||
205 | /OUTPUT LIST | |
206 | LIST4=. | |
207 | ||
208 | ESC, 233 /ESC-V12 | |
209 | CTAB, 211 /TAB | |
210 | C215, 215 /CARRIAGE RETURN | |
211 | 212 /LINE FEED | |
212 | 214 /FORM FEED | |
213 | 377 /RUBOUT | |
214 | 216 /CONTROL N (^N) | |
215 | M27, -27 /LIST DELIMITER | |
216 | ||
217 | /SPECIAL CHARACTER LIST FOR | |
218 | /INPUT IN TEXT MODE | |
219 | LIST5=. /USED AT AONE | |
220 | 240 /SPACE | |
221 | LIST6=. /USED AT SFOUND | |
222 | 225 / ^U | |
223 | C214, 214 /FORM FEED | |
224 | BELL, 207 / ^G (BELL) | |
225 | C212, 212 /LINE FEED | |
226 | CRO, 377 /RUBOUT | |
227 | ||
228 | LIST3=. | |
229 | 215 /LIST BRANCHER | |
230 | 000 /(SEARCH CHARACTER) | |
231 | RST3I, RESET3 /RESET AND SAVE BUFFER | |
232 | MCHIN1, -CHIN-1 /LIST DELIMITER | |
233 | \f | |
234 | ||
235 | /CONSTANTS AND POINTERS | |
236 | ||
237 | CCR=C215 /CARRIAGE RETURN | |
238 | CLF=C212 /LINE FEED | |
239 | MTABS, -10 /TAB COUNTER | |
240 | DELT, DELP | |
241 | CHI1, CHIN | |
242 | IGNORE, CHIN+1 | |
243 | END, 200 | |
244 | KEYBD, I33 | |
245 | CCON, JMP I AXCOMB | |
246 | COM1-1 | |
247 | UTR1, UTRA | |
248 | FIN1, FIND | |
249 | LIS1, LIST | |
250 | LIS, LISTER | |
251 | NINE, 12 | |
252 | NUMB, -272 | |
253 | OUT1, OUT | |
254 | OUTL1=. | |
255 | LOW, OUTL | |
256 | CZ, NOP /CONTENTS OF START | |
257 | ONUM, GTOP | |
258 | SORTJ, SORTB | |
259 | PACK1, PACBUF | |
260 | ||
261 | SXS1, TAD CHAR /CONTENTS OF L3 | |
262 | SXS2, SLOOK&177+5200 /JMP SLOOK | |
263 | L3I, L3 /PATCH POINTER | |
264 | L2I, L2 /CONTINUE SEARCH - LETTERS | |
265 | ENDLNI, ENDLN | |
266 | SPCNO, MOR+4 /PACK | |
267 | SPCGO, MOR+1 /SORT | |
268 | \f | |
269 | ||
270 | /CHAR IS ALWAYS SET BY OUT, SOMETIMES BY SORTB; | |
271 | /IT IS ALWAYS USED BY PACK AND SORTB. | |
272 | CHAR, 0 | |
273 | MOV1=. | |
274 | COUNTP, 0 /NUMBER OF PAGES | |
275 | CNT=. /PRINT COUNTER | |
276 | XCT, 0 /UNPACK SWITCH | |
277 | XCTIN, 0 /PACK SWITCH | |
278 | ECHOSW, 1 /NON-ZERO TO PRINT | |
279 | SAVE, 0 | |
280 | TABIND, 0 /TABS OR SPACES SWITCH | |
281 | TEMP, 0 /V3 | |
282 | THIS, 0 /LINE POINTER. | |
283 | OUTDEV, OUTL /POINTER TO OUTPUT SUBROUTINE | |
284 | GRBAGE, GARBAG /GARBAGE COLLECTOR | |
285 | MARK, 0 /OBJECT LINE IN G.C. | |
286 | XSAV, 0 /HOLD INPUT POINTER. | |
287 | BUFR, 200 | |
288 | CFRS, FRST | |
289 | KILL1, KILL+3 | |
290 | CHKARG, CHKARX | |
291 | ERSW, ERROR /ERROR ROUTINE | |
292 | L1I, L1 | |
293 | ||
294 | EKILLL, 0 /E CMD SWITCH 1 IF E NOT ALLOWED | |
295 | ||
296 | /I-O RELATED POINTERS AND WORDS | |
297 | ||
298 | P232, 232 /V3 | |
299 | BUFRDI, BUFRD /OR CHIN...IN DEVICE POINTER | |
300 | BUFWTI, BUFWT /WRITE OUTPUT TO DEVICE | |
301 | CLFLI, FLCLOS /SET TO CLOSE FILE | |
302 | P37, 37 /V3 | |
303 | JMPCH, PUNCH&177+5200 /DESTROYED BY YANK | |
304 | \f | |
305 | /ERROR ROUTINE POINTERS | |
306 | ||
307 | SERR0I, SERR0 | |
308 | SERR1I, SERR1 | |
309 | SERR2I, SERR2 | |
310 | SERR4I, SERR4 | |
311 | ||
312 | GTEM=. /NEXT 6-BITS OF UNPACK | |
313 | DTEM=. /NEXT POINTER IN DELETE CHAIN | |
314 | ||
315 | ||
316 | /ERROR ROUTINE | |
317 | /REJECTS ILLEGAL COMMAND | |
318 | /AND TYPES ? | |
319 | ||
320 | ERROR=JMS . | |
321 | 0 | |
322 | ELIM, 7600 /GRP2-CLA | |
323 | TAD C277 | |
324 | JMS I OUTL1 /PRINT "?" | |
325 | CZONE, TAD CZ /RESET PATCHES | |
326 | DCA I TE1 | |
327 | JMPTE1, JMP I TE1 /*RETURN TO COMMAND MODE* | |
328 | ||
329 | ||
330 | UPAROI, UPAROW /GENERATE ^ CHARACTER | |
331 | MONITOR, MONIT /MONITOR EXIT ROUTINE | |
332 | STRIND, 0 | |
333 | STRFIN, SFIND1 | |
334 | TE1, START | |
335 | ||
336 | /VARIABLES | |
337 | THSN, 0 /CURRENT LINE NUMBER | |
338 | LSTN, 0 /LAST LINE NUMBER | |
339 | TCNT, 0 /TAB COUNT | |
340 | ADD, 0 | |
341 | ARG0, 0 | |
342 | ARG1, 0240 | |
343 | ARG2, -1 | |
344 | ||
345 | POTYPE, OTYPE | |
346 | COMM5, COM5 | |
347 | K7600, 7600 | |
348 | TEMPO, 0 | |
349 | K1210, 1210 | |
350 | X203, -203 | |
351 | K1320, 1320 | |
352 | ||
353 | FRST, 0 /FIRST LINE ADDRESS | |
354 | MOV2=TEMPO | |
355 | LSTCHK, 0 /DIGIT ACCEPTED FLAG | |
356 | \f *177 | |
357 | INIT /INITIALIZATION CODE | |
358 | /EITHER 3000 OR VALUE OF RESET | |
359 | ||
360 | ||
361 | *200 | |
362 | STA /V3 NORMAL START OR RESTART ADDR | |
363 | DCA TEMP /V3 CHAIN START ADDR | |
364 | JMP I 177 /START AT 3000 OR RESET | |
365 | /HANDLER FOR ^U (IF IN COMMAND MODE) | |
366 | START, NOP /V3 MAY BE MODIFIED | |
367 | TAD LOW /ENTER COMMAND MODE | |
368 | DCA OUTDEV /INITIALIZE KEYBOARD | |
369 | DCA TABIND /CLEAR TAB INDICATOR | |
370 | ISZ ECHOSW /SET UP FOR ECHO | |
371 | DCA LIST3+1 | |
372 | TAD SXS1 | |
373 | DCA I L3I | |
374 | TAD ERSW /RESET ERROR SWITCH AT L1 | |
375 | DCA I L1I | |
376 | TAD CZONE | |
377 | DCA I COMM5 | |
378 | DCA LSTCHK /CLEAR DIGIT ACCEPTED | |
379 | TAD CCR /OUTPUT CARRIAGE RETURN | |
380 | JMS I OUT1 | |
381 | /HANDLER FOR CARRIAGE RETURN (COMMAND MODE) | |
382 | TAD SIGN /OUTPUT # | |
383 | JMS I OUT1 | |
384 | GTOP, DCA ARG0 /CLEAR ARGUMENTS | |
385 | DCA ARG2 | |
386 | /HANDLER FOR SPACE OR + | |
387 | GEXP, TAD NONE | |
388 | /HANDLER FOR - | |
389 | GMIN, TAD CMPT | |
390 | DCA G2 /SET SIGN TO + OR - | |
391 | DBCV2, DCA TEMP | |
392 | CMCHK, JMS I CHI1 /INPUT ONE CHARACTER | |
393 | TAD NUMB | |
394 | CLL | |
395 | TAD NINE | |
396 | SZL /WAS IT A DIGIT? | |
397 | JMP COUNT /YES - CONTINUE ACCEPTING NUMBERS | |
398 | \f | |
399 | ||
400 | GLOM, CLA /NO | |
401 | TAD TEMP /GET ACCUMULATED NUMBER | |
402 | G2, HLT /(NOP) OR (CIA) TO HANDLE SIGN | |
403 | TAD ARG2 | |
404 | DCA ARG2 /STORE NEW ARGUMENT | |
405 | JMS SORTB /WAS LAST CHARACTER SPECIAL? | |
406 | LIST1-1 /YES - COMPARE TO LIST | |
407 | OPS1-LIST1 /AND BRANCH TO HANDLER | |
408 | TAD CHAR /NO - SAVE COMMAND CHARACTER | |
409 | DCA SAVE | |
410 | JMS I CHI1 /INPUT ONE CHARACTER | |
411 | JMS SORTB /IS IT CARRIAGE RETURN, ^C, OR ^U? | |
412 | LIST1A-1 /YES - EXIT TO HANDLER | |
413 | OPS1A-LIST1A | |
414 | ERROR /NO - TRY AGAIN | |
415 | \f | |
416 | /CHECK LEGALITY OF ARGUMENTS | |
417 | /ARG0 CONTAINS FIRST ARGUMENT | |
418 | /ARG2 CONTAINS SECOND ARGUMENT | |
419 | ||
420 | RETRN, TAD ARG0 | |
421 | SNA /IS ARG0=0? | |
422 | TAD ARG2 /YES - ARG0=ARG2 | |
423 | DCA ARG0 /NO | |
424 | TAD ARG2 | |
425 | CMA | |
426 | TAD ARG0 | |
427 | SMA /IS ARG0 .LE. ARG2? | |
428 | ERROR /NO | |
429 | DCA ARG1 /YES - ARG1=ARG0-ARG2-1 | |
430 | TAD ARG0 | |
431 | SPA CLA /IS ARG0 .GE. 0? | |
432 | ERROR /NO | |
433 | TAD SAVE /YES - GET COMMAND CHARACTER | |
434 | JMS SORTB /IS IT A LEGAL COMMAND? | |
435 | LIST2-1 /YES - MATCH TO LIST | |
436 | OPS2-LIST2 /AND BRANCH TO ITS HANDLER | |
437 | ERROR /NO - TRY AGAIN | |
438 | ||
439 | ||
440 | /COMMAND IDENTIFICATION LIST | |
441 | LIST2=. /COMMAND LETTERS | |
442 | 305 /E | |
443 | 301 /A | |
444 | 311 /I | |
445 | 303 /C | |
446 | 313 /K | |
447 | 304 /D | |
448 | 314 /L | |
449 | 316 /N | |
450 | 320 /P | |
451 | 322 /R | |
452 | 312 /J | |
453 | 306 /F | |
454 | 324 /T | |
455 | 315 /M | |
456 | 307 /G | |
457 | 323 /S | |
458 | 331 /Y | |
459 | 321 /Q | |
460 | 302 /B | |
461 | 326 /V | |
462 | SIGN, "# /V3 VERSION # | |
463 | NONE, -41 /"NOP-CIA" | |
464 | \f | |
465 | /SORT AND BRANCH ROUTINE | |
466 | /LOOKS FOR MATCH BETWEEN CHAR | |
467 | /AND ELEMENTS OF TABLE 1 SPECIFIED | |
468 | /CALLING SEQUENCE: | |
469 | / JMS I (SORTB | |
470 | / TABLE1-1 | |
471 | / TABLE2-TABLE1 | |
472 | / RETURN IF NO MATCH | |
473 | /DISPATCHES TO CORRESPONDING ADDRESS IN TABLE 2 | |
474 | ||
475 | SORTB, 0 | |
476 | SZA /IS CHARACTER STORED YET? | |
477 | DCA CHAR /NO - STORE IT | |
478 | TAD I SORTB /YES | |
479 | ISZ SORTB | |
480 | DCA AXTEM /STORE TABLE 1 ADDRESS | |
481 | TAD I AXTEM /GET TABLE ENTRY | |
482 | SPA /DONE YET? | |
483 | JMP SEX /YES - EXIT | |
484 | CMPT, CIA /NO | |
485 | TAD CHAR /GET CHARACTER | |
486 | SZA CLA /DO THEY MATCH? | |
487 | JMP .-6 /NO - KEEP TRYING | |
488 | TAD AXTEM /YES - THEY MATCH | |
489 | TAD I SORTB /GET DISPATCH TABLE ADDRESS | |
490 | DCA SORTB | |
491 | TAD I SORTB | |
492 | DCA SORTB /SET RETURN ADDRESS | |
493 | JMP I SORTB /--RETURN--VIA DISPATCH TABLE | |
494 | SEX, ISZ SORTB /MATCH NOT FOUND | |
495 | CLA | |
496 | JMP I SORTB /-- | |
497 | ||
498 | ||
499 | /DECIMAL ADDITION ROUTINE | |
500 | /FOR NUMERIC ARGUMENTS OF COMMANDS | |
501 | /ENTER WITH INPUT DIGIT IN SORTB | |
502 | /EXIT WITH ACCUMULATED NUMBER IN AC | |
503 | COUNT, DCA SORTB | |
504 | ISZ LSTCHK /GOT A DIGIT NOW | |
505 | TAD TEMP | |
506 | RTL CLL | |
507 | TAD TEMP | |
508 | RAL | |
509 | TAD SORTB | |
510 | JMP DBCV2 /RETURN TO MAIN SEQUENCE | |
511 | \f/----------------------------------------------------------------- | |
512 | ||
513 | /DISPATCH LIST FOR COMMAND HANDLERS | |
514 | OPS2, ENDFIL /E | |
515 | APP /A | |
516 | XNS /I | |
517 | CNGE /C | |
518 | KILL /K | |
519 | DELE /D | |
520 | LIST /L | |
521 | COMBO /N | |
522 | PUNCH /P | |
523 | TELE /R | |
524 | JERK /J | |
525 | BARROW /F | |
526 | PUNCT /T | |
527 | MOVEM /M | |
528 | GETTAG /G | |
529 | XCRET /S | |
530 | YANK /Y | |
531 | Q /Q | |
532 | CORSPC /B | |
533 | VIEW /V | |
534 | VERSN /# | |
535 | \f/END OF INPUT TEXT LINE ROUTINE | |
536 | ||
537 | EOL, JMS I ENDLNI /RESET LINK CELLS | |
538 | ISZ LSTN /INCREMENT LINE POINTERS | |
539 | ISZ THSN | |
540 | TAD BUFEND | |
541 | CLL CIA | |
542 | TAD AXIN | |
543 | SNL CLA /IS THE BUFFER FULL? | |
544 | /------------------------------------------------------------ | |
545 | JMP MOR /NO - KEEP FILLING | |
546 | TAD BELL /YES - RING WARNING BELL | |
547 | JMS I OUTL1 | |
548 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
549 | ||
550 | ||
551 | /CONTINUATION OF HANDLERS FOR A, C, AND I COMMANDS | |
552 | APP1, TAD LSTN /APPEND | |
553 | DCA ARG0 /RESET ARG0 TO END OF TEXT | |
554 | JMP INS | |
555 | CNGE1, JMS I DELT /CHANGE - DELETE LINES AND | |
556 | XNS1, TAD ARG0 /INSERT | |
557 | SNA CLA /ANY ARGUMENTS? | |
558 | INS, ISZ ARG0 /NO - INSERT AT BEGINNING OF TEXT | |
559 | TAD ARG0 | |
560 | JMS I FIN1 /FIND THE POINTER | |
561 | DCA THIS | |
562 | ISZ TABIND /SET TAB INDICATOR | |
563 | CDF 10 | |
564 | TAD I THIS /GET LINK TO BUFFER | |
565 | CDF 0 | |
566 | DCA XSAV | |
567 | CMA | |
568 | TAD ARG0 | |
569 | DCA THSN /SET LINE POINTER | |
570 | AONE, TAD BUFR /BEGIN LINE | |
571 | DCA AXIN | |
572 | DCA XCTIN | |
573 | MOR, JMS I BUFRDI /GET A CHARACTER | |
574 | JMS I SORTJ /IS IT SPECIAL? (SEE LIST) | |
575 | LIST5-1 | |
576 | INLIST-LIST5 /YES - GO TO ITS HANDLER | |
577 | JMS PACBUF /NO - PACK IT | |
578 | JMP MOR /FETCH ANOTHER | |
579 | \f | |
580 | /CHARACTER PACKING ROUTINE | |
581 | /CONVERTS CHARACTER IN CHAR TO INTERNAL CODE | |
582 | /AND CALLS PCK1 TO PACK IT INTO BUFFER | |
583 | /ENTER AND EXIT WITH AC CLEAR | |
584 | ||
585 | PACBUF, 0 | |
586 | CLL | |
587 | TAD AXIN /DON'T ADD CHARACTERS | |
588 | TAD K1210 /IF AXIN ABOVE 6570 | |
589 | SZL CLA /IS THERE ROOM FOR THIS ONE? | |
590 | ERROR /NO | |
591 | TAD CHAR /YES | |
592 | TAD M240 | |
593 | SPA /IS IT 200-237? | |
594 | JMP ESCA /YES - ATTACH 77 | |
595 | TAD M77 | |
596 | SMA SZA /IS IT 337 OR LESS? | |
597 | JMP ESCA /NO - ATTACH 77 | |
598 | TAD P40 /YES - IS IT 277? | |
599 | SNA CLA | |
600 | JMP ESCA /YES - ATTACH 77 | |
601 | TR1, TAD CHAR /240-337 EXCEPT 277 | |
602 | AND C77 /MASK OUT LEFT 6 BITS | |
603 | JMS PCK1 /PACK IT | |
604 | JMP I PACBUF /--RETURN-- | |
605 | ESCA, CLA /200-237, 277,340-377 | |
606 | TAD C77 /PACK A 77 | |
607 | JMS PCK1 | |
608 | JMP TR1 /PACK THE CHARACTER | |
609 | \f | |
610 | /PACK CHARACTERS INTO TEXT BUFFER | |
611 | /ENTER WITH 6-BIT CODE IN AC | |
612 | ||
613 | PCK1, 0 | |
614 | ISZ XCTIN /LEFT HALF OR RIGHT HALF? | |
615 | JMP ROT /LEFT HALF | |
616 | DCA UTRA /RIGHT HALF - STORE CHARACTER | |
617 | TAD UTRA /GET CHARACTER | |
618 | TAD ADD /GET PREVIOUS CHARACTER | |
619 | CDF 10 | |
620 | DCA I AXIN /STORE IN FIELD 1 BUFFER | |
621 | CDF 0 | |
622 | DCA ADD | |
623 | JMP I PCK1 /--RETURN-- | |
624 | ROT, CLL RTL /LEFT HALF | |
625 | RTL | |
626 | RTL /ROTATE 6 LEFT | |
627 | DCA ADD /RETAIN UNTIL NEXT CHARACTER | |
628 | CMA /IS READY | |
629 | DCA XCTIN /RESET L OR R SWITCH | |
630 | JMP I PCK1 /--RETURN-- | |
631 | ||
632 | UTEST=PACBUF /TEMPORARY | |
633 | \f | |
634 | /CHARACTER UNPACKING ROUTINE | |
635 | /CONVERTS ONE CHARACTER FROM | |
636 | /BUFFER FORMAT TO 8-BIT ASCII | |
637 | /EXIT WITH CHARACTER IN AC | |
638 | ||
639 | UTRA, 0 | |
640 | CLA CMA /INITIALIZE TO -1 | |
641 | DCA UTEST | |
642 | EXTR, ISZ XCT /LEFT HALF OR RIGHT HALF? | |
643 | JMP GET3 /RIGHT HALF | |
644 | CDF 10 /LEFT HALF | |
645 | TAD I AXOUT /GET BUFFER WORD | |
646 | CDF 0 | |
647 | DCA GTEM | |
648 | TAD GTEM | |
649 | RTR /ROTATE 6 RIGHT | |
650 | RTR | |
651 | RTR | |
652 | JMP GET4 /SKIP TO GETA | |
653 | GET3, CLA CMA /RESET L - R SWITCH | |
654 | DCA XCT | |
655 | TAD GTEM | |
656 | GET4, AND C77 /MASK OUT LEFT 6 BITS | |
657 | TAD M77 | |
658 | CLL | |
659 | SNA /WAS IT 77? | |
660 | ISZ UTEST /YES - WAS IT LEFT HALF? | |
661 | JMP GET5 /NO - CONTINUE | |
662 | JMP EXTR /YES - GET OTHER HALF | |
663 | GET5, TAD P37 | |
664 | ISZ UTEST /RESTORE THE CHARACTER | |
665 | CML | |
666 | SNL | |
667 | TAD C100 | |
668 | TAD C240 | |
669 | TAD X203 /IS IT A ^C? | |
670 | SNA | |
671 | JMP UTRA+1 /YES - IGNORE IT | |
672 | TAD M27 /NO - IS IT A ^Z? | |
673 | SNA | |
674 | JMP UTRA+1 /YES - IGNORE IT | |
675 | TAD P232 /NO - RESTORE CHARACTER | |
676 | JMP I UTRA /--RETURN-- | |
677 | \f | |
678 | /------------------------------------------------------------- | |
679 | /INPUT LIST FOR SPECIAL CHARACTERS IN TEXT MODE | |
680 | INLIST=. | |
681 | SPACES /SPCS | |
682 | CTRLU /^U | |
683 | FULL /FORM | |
684 | FULL /BELL | |
685 | RUB4+1 /LINE FEED | |
686 | RUB1 /RUBOUT | |
687 | EOL /CARRIAGE RETURN | |
688 | ||
689 | /HANDLER FOR FORM FEED OR ^G | |
690 | FULL, TAD IGNORE / | |
691 | TAD MCHIN1 / | |
692 | SNA CLA /IN APPEND MODE? | |
693 | JMP I TE1 /YES*RETURN TO COMMAND MODE* | |
694 | TAD LSTN /NO - IS BUFFER EMPTY? | |
695 | SNA CLA / | |
696 | /-------------------------------------------------------------- | |
697 | JMP I MORI /YES - IGNORE FORM FEED | |
698 | JMP I TE1 /NO*RETURN TO COMMAND MODE* | |
699 | ||
700 | MORI, MOR | |
701 | ||
702 | ||
703 | /SET UP TO READ FROM INPUT DEVICE | |
704 | /USED BY C AND R COMMANDS | |
705 | /CALLED WITH SEQUENCE | |
706 | / JMS I PSETUP | |
707 | / INPUT ROUTINE | |
708 | / CONTINUATION OF HANDLER | |
709 | /EXITS TO CONTINUATION OF HANDLER | |
710 | ||
711 | SETUP, 0 | |
712 | TAD I SETUP /GET READ AREA FROM ARGS | |
713 | DCA BUFRDI | |
714 | TAD I SETUP /LOCATION FOR IGNORED CHARACTERS | |
715 | IAC CLL /V12 | |
716 | DCA IGNORE | |
717 | ISZ SETUP /SETUP PROPER RETURN POINT | |
718 | TAD I SETUP | |
719 | DCA SETUP | |
720 | TAD BUFR | |
721 | TAD K1320 | |
722 | SZL CLA /IS BUFFER FULL? | |
723 | ERROR /YES - DON'T READ | |
724 | JMP I SETUP /--RETURN-- | |
725 | 0 /*** A FREE LOCATION!!!*** | |
726 | ||
727 | \f | |
728 | /SUPERVISOR FOR DELETION OF TEXT LINES | |
729 | ||
730 | DELP, 0 | |
731 | JMS I CHKARG /CHECK ARGUMENT VALIDITY | |
732 | TAD ARG0 | |
733 | DCA THSN /SET CURRENT LINE # | |
734 | TAD ARG1 /SAVE # DELETED | |
735 | DCA LISTER | |
736 | TAD ARG0 /GET POINTER TO LINE | |
737 | JMS I FIN1 /TO BE DELETED | |
738 | DCA THIS /STORE IT | |
739 | DELP1, CDF 10 | |
740 | TAD I THIS | |
741 | DCA MARK /CORE ADDRESS OF OBJECT LINE | |
742 | TAD I MARK | |
743 | DCA I THIS /CHAIN NEW POINTERS TO DELETE LINE | |
744 | TAD MARK | |
745 | CDF 0 | |
746 | JMS I GRBAGE /PHYSICALLY DELETE THE LINE | |
747 | ISZ ARG1 /ALL SPECIFIED LINES DELETED? | |
748 | JMP DELP1 /NO - CONTINUE | |
749 | TAD LSTN /IF 1,/D..MAKE CURRENT=0 | |
750 | SNA CLA | |
751 | DCA THSN | |
752 | TAD LISTER /BUMP TOTAL DOWN | |
753 | TAD LSTN | |
754 | DCA LSTN | |
755 | JMP I DELP /YES--RETURN-- | |
756 | ||
757 | ||
758 | /HANDLER FOR < | |
759 | EXLAS, CLA CLL CMA RAL /PRINT LAST LINE - AC=7776=-2 | |
760 | /HANDLER FOR > OR LINE FEED | |
761 | EXNEX, TAD THSN /PRINT NEXT LINE | |
762 | IAC | |
763 | SNA /IS IT AN EXISTING LINE? | |
764 | ERROR /NO | |
765 | DCA ARG0 /YES SAVE EFFECTIVE ARGUMENTS | |
766 | CMA | |
767 | DCA ARG1 | |
768 | /HANDLER FOR L COMMAND | |
769 | LIST, TAD LOW /SET KEYBOARD AS OUTPUT | |
770 | DCA OUTDEV | |
771 | ISZ TABIND /SET TAB INDICATOR | |
772 | JMS LISTER /OUTPUT LINE(S) | |
773 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
774 | \f | |
775 | /LISTING OUTPUT ROUTINE | |
776 | /OUTPUTS LINES INDICATED BY ARG0,ARG1 | |
777 | ||
778 | LISTER, 0 | |
779 | TAD ARG0 | |
780 | SZA CLA /ANY ARGUMENTS? | |
781 | JMP L0 /YES - SET THEM UP | |
782 | TAD LSTCHK /ALLOW 0L? | |
783 | SZA CLA | |
784 | ERROR /NOPE | |
785 | TAD LSTN /NO - SET TO LIST BUFFER | |
786 | CIA | |
787 | DCA ARG1 | |
788 | ISZ ARG0 /SET TO LINE 1 | |
789 | L0, TAD ARG0 | |
790 | CIA | |
791 | TAD LSTN | |
792 | SPA CLA /ARGUMENTS IN RIGHT RANGE? | |
793 | L1, ERROR /NO -( OR JMP I TE1) | |
794 | TAD ARG0 | |
795 | JMS I FIN1 /GET POINTERS | |
796 | DCA THIS /SAVE POINTER | |
797 | CMA | |
798 | CDF 10 | |
799 | TAD I THIS /GET START | |
800 | DCA AXOUT | |
801 | TAD I AXOUT /SAVE POINTER FOR SEARCH | |
802 | DCA XSAV | |
803 | TAD AXOUT /SAVE OBJECT LINE FOR GARBAGE COLLECT | |
804 | DCA MARK | |
805 | CDF 0 | |
806 | CMA | |
807 | DCA XCT | |
808 | TAD ARG0 /SET POINTER | |
809 | DCA THSN | |
810 | ISZ ARG0 /SET FOR NEXT LINE | |
811 | /(HANDLER FOR FORM FEED DURING CHARACTER SEARCH) | |
812 | L2, JMS I UTR1 /UNPACK A CHARACTER | |
813 | JMS I OUT1 /PRINT A CHARACTER | |
814 | JMS I CPTSTI /WAS IT ^O OR ^C FROM KEYBOARD? | |
815 | JMP L3 /NO - CONTINUE | |
816 | TAD C317 /YES - ^O | |
817 | JMS I UPAROI /GENERATE ^O | |
818 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
819 | L3, TAD CHAR /OR (JMP SLOOK) | |
820 | TAD MCR | |
821 | SZA CLA /WAS IT END OF LINE? | |
822 | JMP L2 /NO - KEEP UNPACKING | |
823 | ISZ ARG1 /YES - DONE YET? | |
824 | JMP L0 /NO - GET NEXT LINE | |
825 | JMP I LISTER /YES --RETURN-- | |
826 | ||
827 | CPTSTI, CTRLP /TEST FOR ^O AND ^C | |
828 | C317, 317 | |
829 | \f | |
830 | /------------------------------------------------------------ | |
831 | /SEARCH ROUTINES | |
832 | ||
833 | ||
834 | /HANDLER FOR CARRIAGE RETURN | |
835 | SRETN, JMS I ENDLNI /TERMINATE THIS LINE | |
836 | TAD MARK /AND NOW GARBAGE COLLECT | |
837 | JMS I GRBAGE | |
838 | ISZ ARG1 /DONE YET? | |
839 | JMP I LIS1 /NO - GET NEXT LINE | |
840 | JMP I TE1 /YES*RETURN TO COMMAND MODE* | |
841 | ||
842 | SLOOK, JMS I SORTJ /SEARCH DONE? | |
843 | LIST3-1 /(CARRIAGE RETURN OR SEARCH CHARACTER) | |
844 | LISTGO-LIST3 /YES - GO TO ITS HANDLER | |
845 | JMS I PACK1 /NO-PACK SEARCHED CHARACTERS | |
846 | JMP I L2I /CONTINUE SEARCH | |
847 | ||
848 | IFNZRO SLOOK&1000 <PGERR,XXX> | |
849 | ||
850 | /HANDLER FOR ^G DURING CHARACTER SEARCH | |
851 | /CHANGE SEARCH CHARACTER | |
852 | SCONT, JMS I KEYBD /FETCH NEW SEARCH CHARACTER | |
853 | DCA LIST3+1 /STORE IT IN LIST | |
854 | JMP I L2I /CONTINUE SEARCH | |
855 | ||
856 | /HANDLER FOR LINE FEED DURING SEARCH | |
857 | SLINE, TAD CCR | |
858 | DCA CHAR | |
859 | JMS I ENDLNI | |
860 | ISZ ARG0 /MOVE POINT | |
861 | ISZ THSN /BUMP CURRENT LINE COUNT | |
862 | ISZ LSTN /ADD A LINE. | |
863 | /HANDLER FOR _ DURING SEARCH | |
864 | SBAR, TAD CCR /CTRL-U | |
865 | JMS I OUT1 /OUTPUT CARRIAGE RETURN | |
866 | TAD BUFR /RESTART PACK BUFFER | |
867 | DCA AXIN | |
868 | DCA XCTIN | |
869 | /------------------------------------------------------------------- | |
870 | SFOUND, JMS I CHI1 /GET A CHARACTER | |
871 | JMS I SORTJ /SPECIAL SEARCH COMMAND? | |
872 | LIST6-1 | |
873 | SRNLST-LIST6 /YES - GO TO HANDLER | |
874 | /HANDLER FOR SEARCH CHARACTER FOUND | |
875 | SGOT, JMS I PACK1 /NO-PACK INSERTS | |
876 | JMP SFOUND /CONTINUE INPUT | |
877 | ||
878 | ||
879 | \f | |
880 | /TELETYPE CHARACTER FETCH ROUTINE | |
881 | /ENTER WITH AC CLEAR | |
882 | /EXIT WITH CHARACTER IN CHAR AND AC | |
883 | /FORCE CHANNEL 8 | |
884 | /BLANK TAPE & LEADER TRAILER IGNORED | |
885 | ||
886 | CHIN, 0 | |
887 | DCA CHAR /CLEAR CHARACTER | |
888 | JMS I KEYBD | |
889 | AND P177 /MASK PARITY | |
890 | SNA /IGNORE BLANK AND L/T | |
891 | JMP CHIN+1 | |
892 | TAD C200 /RESTORE CHARACTER | |
893 | JMS I OUT1 /ECHO INPUT | |
894 | TAD CHAR | |
895 | JMP I CHIN /--RETURN-- | |
896 | ||
897 | ||
898 | /SEARCH TEXT BUFFER FOR LINE | |
899 | /WHOSE NUMBER IS ONE LESS THAN | |
900 | /THE CONTENTS OF THE AC | |
901 | /EXIT WITH ADDRESS OF LINK CELL IN AC | |
902 | ||
903 | FIND, 0 /LOCATE LINE BUFFER | |
904 | CIA | |
905 | SMA /IS LINE NUMBER TOO SMALL? | |
906 | ERROR /YES | |
907 | DCA TEMP /NO - STORE NEGATIVE OF LINE # | |
908 | TAD TEMP | |
909 | IAC | |
910 | TAD LSTN | |
911 | SPA CLA /IS LINE NUMBER TOO LARGE? | |
912 | ERROR /YES | |
913 | TAD CFRS /NO | |
914 | JMP FIND1 | |
915 | FIND2, CDF 10 | |
916 | TAD I SAVE /CHAIN THROUGH LIST | |
917 | CDF 0 | |
918 | SZA /FAILSAFE | |
919 | FIND1, DCA SAVE | |
920 | ISZ TEMP /DONE YET? | |
921 | JMP FIND2 /NO - KEEP CHAINING | |
922 | TAD SAVE /YES - GET LINE NUMBER | |
923 | JMP I FIND /--RETURN-- | |
924 | ||
925 | ||
926 | CON, 6030 /CONVERSION CONSTANTS | |
927 | 7634 | |
928 | 7766 | |
929 | 7777 | |
930 | \f | |
931 | BOX=COUNTP | |
932 | VAL=ARG0 | |
933 | ||
934 | /HANDLER FOR : OR = | |
935 | /PRINTS REQUESTED LINE NUMBER | |
936 | /WHICH IS FOUND IN ARG2 ON ENTRY | |
937 | ||
938 | PRNT, TAD ARG2 | |
939 | DCA VAL /SET NUMBER TO BE PRINTED | |
940 | TAD M4 | |
941 | DCA CNT /SET CHARACTER COUNT | |
942 | TAD ADDR | |
943 | DCA XYZ+2 | |
944 | FLOOZ, DCA BOX | |
945 | CLL | |
946 | TAD VAL /IF VAL IS TOO LARGE, IT LOOKS | |
947 | SMA CLA /LIKE A NEG NO. THE LINK | |
948 | TAD K50 /DETERMINES THE END POINT IN THAT CASE | |
949 | TAD K7430 /7430=SZL; 7500=SMA | |
950 | DCA XYZ+3 | |
951 | JMP .+4 | |
952 | ISZ BOX | |
953 | CLL | |
954 | XYZ, DCA VAL | |
955 | TAD VAL | |
956 | NOP /TAD CON +() SOME DISPLACEMENT | |
957 | SMA /OR, IF VAL TOO BIG,SZL | |
958 | JMP XYZ-2 /KEEP ADDING THE SAME CONSTANT | |
959 | CLA | |
960 | TAD BOX /BOX HAS THE NUMBER COUNT | |
961 | TAD C260 /MAKE ASCII DIGIT | |
962 | JMS I OUTL1 /OUTPUT THE DIGIT | |
963 | ISZ XYZ+2 /ADD IN NEXT CONVERSION CONSTANT LATER | |
964 | ISZ CNT /DONE ALL FOUR? | |
965 | JMP FLOOZ /NO - KEEP CONVERTING | |
966 | JMP I TE1 /YES*RETURN TO COMMAND MODE* | |
967 | ||
968 | C260, 260 | |
969 | ADDR, TAD CON | |
970 | K50, 50 | |
971 | K7430, 7430 | |
972 | \f | |
973 | /CHARACTER OUTPUT ROUTINE | |
974 | ||
975 | OUT, 0 | |
976 | DCA CHAR | |
977 | /ESC PATCH 25-MAY-77 DS | |
978 | / TAD ECHOSW | |
979 | / SNA CLA /ECHO SUPPRESSED? | |
980 | JMS I .+1 /DS | |
981 | ESCPA /DS | |
982 | JMP I OUT /YES--RETURN-- | |
983 | JMS I SORTJ /NO - IS IT A FORMAT CHARACTER? | |
984 | LIST4-1 /YES - EXIT TO ITS HANDLER | |
985 | OUTLIS-LIST4 | |
986 | ISZ TCNT /NO - COUNT ONE LETTER | |
987 | TAD CHAR | |
988 | OUTX, JMS I OUTDEV /OUTPUT THE CHARACTER | |
989 | JMP I OUT /--RETURN-- | |
990 | ||
991 | ||
992 | /CARRIAGE RETURN HANDLER | |
993 | ||
994 | OUTCRL, TAD CCR | |
995 | JMS I OUTDEV /OUTPUT CARRIAGE RETURN | |
996 | DCA TCNT /CLEAR TAB COUNTER | |
997 | TAD CLF /OUTPUT LINE FEED | |
998 | JMP OUTX | |
999 | ||
1000 | ||
1001 | /TAB HANDLER - TAB/RUBOUT | |
1002 | ||
1003 | OUTRT, TAD CTAB | |
1004 | JMS I OUTDEV /OUTPUT TAB | |
1005 | CIF 10 | |
1006 | JMS I POTYPE /TEST TYPE OF OUTPUT | |
1007 | SPA CLA /IS IT DIRECTORY DEVICE? | |
1008 | JMP I OUT /YES--RETURN-- | |
1009 | TAD CRO /NO - OUTPUT RUBOUT | |
1010 | JMP OUTX | |
1011 | ||
1012 | ||
1013 | /TAB HANDLER - SPACES | |
1014 | ||
1015 | OUTTAB, TAD TABIND | |
1016 | SNA CLA /OUTPUT TAB/RUBOUT INSTEAD? | |
1017 | JMP OUTRT /YES - GO TO OTHER TAB HANDLER | |
1018 | TAD TCNT /NO - | |
1019 | TAD MTABS /REDUCE SPACE COUNT TO 8 OR LESS | |
1020 | SMA | |
1021 | JMP .-2 | |
1022 | DCA TCNT | |
1023 | TAD C240 /OUTPUT SPACES | |
1024 | JMS I OUTDEV | |
1025 | ISZ TCNT /DONE YET? | |
1026 | JMP .-3 /NO - CONTINUE | |
1027 | JMP I OUT /YES--RETURN-- | |
1028 | ||
1029 | \f | |
1030 | /----------------------------------------------------------------------- | |
1031 | /I-O SUBROUTINES | |
1032 | ||
1033 | ||
1034 | /HANDLER FOR S COMMAND | |
1035 | ||
1036 | XCRET, JMS I KEYBD /GET THE SEARCH CHARACTER | |
1037 | DCA LIST3+1 /SAVE IT IN LIST | |
1038 | TAD SXS2 | |
1039 | DCA I L3I /MAKE LISTER JUMP TO SLOOK | |
1040 | TAD BUFR | |
1041 | DCA AXIN /BUILD NEW TEXT IMAGE HERE | |
1042 | DCA XCTIN | |
1043 | TAD CHI1 /READ POINT IS CHIN | |
1044 | IAC | |
1045 | DCA IGNORE | |
1046 | JMP I LIS1 | |
1047 | ||
1048 | /LIST OF SPECIAL CHARACTERS FOR G COMMAND | |
1049 | TAGLIST=. | |
1050 | GTAG2 /SPACE | |
1051 | GTAG2 // | |
1052 | GTAG2 /ESC | |
1053 | GTAG2 /TAB | |
1054 | GTAG2 /CARRIAGE RETURN | |
1055 | ||
1056 | /----------------------------------------------------------------------- | |
1057 | ||
1058 | ||
1059 | /LOW SPEED OUTPUT ROUTINE | |
1060 | /ENTER WITH CHARACTER IN AC | |
1061 | ||
1062 | OUTL, 0 | |
1063 | TLS | |
1064 | TSF | |
1065 | JMP .-1 | |
1066 | CLA | |
1067 | JMP I OUTL /--RETURN-- | |
1068 | ||
1069 | /LOW SPEED INPUT ROUTINE | |
1070 | /CHECKS FOR ^C | |
1071 | /EXIT WITH CHARACTER IN AC | |
1072 | ||
1073 | I33, 0 | |
1074 | KSF | |
1075 | JMP .-1 | |
1076 | JMS CTCK | |
1077 | KRB | |
1078 | AND P177 | |
1079 | TAD C200 | |
1080 | JMP I I33 /NO--RETURN-- | |
1081 | \f | |
1082 | /SET UP APPEND, CHANGE, INSERT TO WORK | |
1083 | /EACH READS KEYBOARD, NOT DEVICE | |
1084 | ||
1085 | CNGEL, CNGE1-XNS1 | |
1086 | XNSL, XNS1-APP1 | |
1087 | ||
1088 | /HANDLER FOR C COMMAND | |
1089 | CNGE, TAD CNGEL | |
1090 | ||
1091 | /HANDLER FOR I COMMAND | |
1092 | XNS, TAD XNSL | |
1093 | ||
1094 | /HANDLER FOR A COMMAND | |
1095 | APP, TAD APPL | |
1096 | DCA DEST /RETURN POINT | |
1097 | ISZ ECHOSW | |
1098 | JMS I PSETUP | |
1099 | CHIN /KEYBOARD INPUT | |
1100 | DEST, APP1 | |
1101 | ||
1102 | ||
1103 | /SPECIAL OUTPUT LIST | |
1104 | OUTLIS=. | |
1105 | ESCOUT /233 - ESC - V12 | |
1106 | OUTTAB /211 - TAB | |
1107 | OUTCRL /215 - CARRIAGE RETURN | |
1108 | OUTX+1 /212 - LINE FEED | |
1109 | OUTX+1 /214 - FORM FEED | |
1110 | OUTX+1 /377 - RUBOUT | |
1111 | CTRLN /216 - CNTRL N | |
1112 | ||
1113 | \f/CHECK TTY FOR ^C OR ^O INPUT | |
1114 | /EXIT TO MONITOR ON ^C | |
1115 | /SKIP ON ^O | |
1116 | ||
1117 | CTRLP, 0 | |
1118 | KSF | |
1119 | JMP I CTRLP /--RETURN-- | |
1120 | JMS CTCK | |
1121 | TAD M14 /NO - IS IT ^O? | |
1122 | SZA CLA | |
1123 | JMP I CTRLP /NO--RETURN-- | |
1124 | ISZ CTRLP /YES | |
1125 | KCC | |
1126 | JMP I CTRLP /--RETURN-- | |
1127 | ||
1128 | M14, -14 | |
1129 | CTCK, 0 | |
1130 | TAD C200 | |
1131 | KRS | |
1132 | TAD X203 | |
1133 | SNA | |
1134 | JMP I MONITOR | |
1135 | JMP I CTCK | |
1136 | ||
1137 | ||
1138 | ||
1139 | /HANDLER FOR P COMMAND | |
1140 | ||
1141 | PUNCH, ISZ ECHOSW | |
1142 | TAD BUFWTI /SETUP TO WRITE INTO OUTPUT BUFFER | |
1143 | DCA OUTDEV | |
1144 | PUNC, JMS I LIS /WRITE THE EDITOR BUFFER | |
1145 | TAD C214 /OUTPUT FORM FEED | |
1146 | JMS I OUTDEV | |
1147 | /HANDLER FOR T COMMAND | |
1148 | PUNCT, CDF 10 | |
1149 | TAD I K7600 | |
1150 | CDF 0 | |
1151 | SNA CLA /IS THERE AN OUTPUT DEVICE? | |
1152 | JMP I TE1 /NO*RETURN TO COMMAND MODE* | |
1153 | TAD BUFWTI /YES - SET UP TO WRITE INTO | |
1154 | DCA OUTDEV /OUTPUT BUFFER | |
1155 | TAD M40 | |
1156 | DCA CTRLP /SET TRAILER COUNTER | |
1157 | CIF 10 | |
1158 | JMS I POTYPE / | |
1159 | SMA CLA /DIRECTORY DEVICE FOR OUTPUT? | |
1160 | JMS I OUTDEV /NO - OUTPUT LEADER TRAILER | |
1161 | ISZ CTRLP /DONE YET? | |
1162 | JMP .-5 /NO - CONTINUE | |
1163 | TSF /YES - RESET FLAG | |
1164 | JMP .-1 | |
1165 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
1166 | \f/HANDLER FOR R COMMAND | |
1167 | ||
1168 | TELE=. | |
1169 | TELEN, TSF | |
1170 | JMP .-1 | |
1171 | DCA ECHOSW /INHIBIT ECHO | |
1172 | JMS I PSETUP /SETUP TO READ FROM | |
1173 | BUFRD /INPUT DEVICE | |
1174 | APPL, APP1 /APPEND TEXT TO BUFFER | |
1175 | ||
1176 | /HANDLER FOR Y COMMAND | |
1177 | ||
1178 | YANK, TAD COM1 /YANK KILLS 'P' PART OF N | |
1179 | JMP COMBOA | |
1180 | ||
1181 | /HANDLER FOR N COMMAND | |
1182 | ||
1183 | COMBO, TAD JMPCH /YANK WIPES COM1-1 | |
1184 | COMBOA, DCA I CCON+1 | |
1185 | TAD ARG0 | |
1186 | SNA /ANY ARGUMENTS | |
1187 | IAC /NO - ASSUME 1 | |
1188 | CIA | |
1189 | DCA COUNTP /SET NUMBER OF PAGES TO YANK | |
1190 | TAD CCON /(JMP I AXCOMB) | |
1191 | DCA I TE1 /SET TE1 TO ALLOW LOOPING | |
1192 | COMB, TAD CCON+1 /THROUGH PUNCH, KILL, READ | |
1193 | DCA AXCOMB /CYCLE | |
1194 | DCA ARG0 /CLEAR ARGUMENTS | |
1195 | DCA ARG2 | |
1196 | DCA LSTCHK /DON'T INHIBIT LISTER! | |
1197 | DCA TABIND /CLEAR IN CASE OF MULTIPLE N | |
1198 | JMP PUNC /OUTPUT BUFFER | |
1199 | COM1, JMP I KILL1 /KILL BUFFER | |
1200 | JMP TELEN /READ NEW BUFFER FULL | |
1201 | ISZ COUNTP /DONE YET? | |
1202 | JMP COMB /NO - CONTINUE | |
1203 | CLA CLL CML RAL /YES-AC=1 - RESET CURRENT LINE NUMBER | |
1204 | DCA THSN /.=1 ON RETURN | |
1205 | COM5, TAD CZ /RESTORE TE1 | |
1206 | DCA I TE1 | |
1207 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
1208 | /IT IS VITAL TO KEEP DUMB1 AND COM5 ON THE SAME PAGE | |
1209 | DUMB1, JERK1 | |
1210 | PSETUP, SETUP /V3 | |
1211 | \f | |
1212 | /----------------------------------------------------------------------- | |
1213 | ||
1214 | LIST1=. | |
1215 | 212 /LINE FEED | |
1216 | 240 /SPACE | |
1217 | 253 /PLUS (+) | |
1218 | 254 /COMMA (,) | |
1219 | 255 /MINUS (-) | |
1220 | 256 /PERIOD (.) | |
1221 | 257 /SLASH (/) | |
1222 | 274 /< | |
1223 | 275 /= | |
1224 | 276 /> | |
1225 | 000 /(DUMMY ENTRY) | |
1226 | 375 /ALTMODE ASR-33 | |
1227 | 376 /ALTMODE ASR-35 | |
1228 | 233 /ESCAPE KEY | |
1229 | 242 /DOUBLE QUOTE (") | |
1230 | 244 /DOLLAR SIGN ($) | |
1231 | 377 /RUBOUT | |
1232 | 272 /COLON (:) | |
1233 | LIST1A, 215 /CARRIAGE RETURN | |
1234 | 225 /^U | |
1235 | 203 /^C | |
1236 | ||
1237 | ||
1238 | /HANDLER FOR G COMMAND | |
1239 | ||
1240 | GETTAG, ISZ THSN | |
1241 | TAD ARG0 | |
1242 | SNA /ANY ARGUMENTS | |
1243 | TAD THSN /NO - BEGIN WITH NEXT LINE (.+1) | |
1244 | DCA ARG0 /YES - SET ARGUMENTS | |
1245 | SKP | |
1246 | GTAG2, ISZ ARG0 | |
1247 | IAC | |
1248 | TAD ARG0 | |
1249 | JMS I FIN1 /GET NEXT LINE | |
1250 | DCA AXOUT | |
1251 | CMA | |
1252 | DCA XCT | |
1253 | JMS I UTR1 /UNPACK FIRST CHARACTER | |
1254 | JMS I SORTJ /DOES IT BEGIN A TAG? | |
1255 | LIST7-1 /NO - TAGLIST EXITS | |
1256 | TAGLIST-LIST7 /TO GTAG2 | |
1257 | JMP I LIS1 /YES - PRINT LINE | |
1258 | \f | |
1259 | MP1=ARG1 | |
1260 | MP2=ARG0 | |
1261 | MP3=ARG2 | |
1262 | ||
1263 | /HANDLER FOR M COMMAND | |
1264 | /ENTER WITH FIRST LINE TO MOVE IN MOV1 | |
1265 | /LAST LINE TO MOVE IN MOV2 | |
1266 | /MOV2 .GT. MOV1 | |
1267 | /DESTINATION LINE IN ARG2 | |
1268 | ||
1269 | ||
1270 | MOVEM, TAD MOV1 | |
1271 | CIA /ARG2 MAY NOT BE BETWEEN | |
1272 | TAD ARG2 /MOV1 AND MOV2 | |
1273 | SPA CLA /IS MOV1 .GT. ARG2? | |
1274 | /----------------------------------------------------------------------- | |
1275 | JMP .+6 /YES - O.K. | |
1276 | TAD MOV2 | |
1277 | CMA | |
1278 | TAD ARG2 | |
1279 | SPA SNA CLA /IS MOV2 .LT. ARG2? | |
1280 | ERROR /NO-FAULTY LOGIC IN COMMAND | |
1281 | TAD MOV1 /YES | |
1282 | JMS I FIN1 | |
1283 | DCA MP1 /STORE FIRST LINE POINTER | |
1284 | IAC | |
1285 | TAD MOV2 | |
1286 | JMS I FIN1 | |
1287 | DCA MP2 /STORE LAST LINE POINTER | |
1288 | TAD ARG2 | |
1289 | JMS I FIN1 | |
1290 | DCA MP3 /STORE DESTINATION LINE POINTER | |
1291 | CDF 10 /ALL FOUND | |
1292 | TAD I MP1 /SWAP POINTERS- | |
1293 | DCA TEMP /RESET THE LINK COORDS | |
1294 | TAD I MP2 | |
1295 | DCA I MP1 | |
1296 | TAD I MP3 | |
1297 | DCA I MP2 | |
1298 | TAD TEMP | |
1299 | DCA I MP3 | |
1300 | CDF 0 | |
1301 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
1302 | ||
1303 | SRNLST=. | |
1304 | SBAR /BACK ARROW (_) | |
1305 | L2 /FORM FEED | |
1306 | SCONT /BELL | |
1307 | SLINE /LINE FEED | |
1308 | RUB1 /RUB OUT | |
1309 | ||
1310 | LISTGO=. | |
1311 | SRETN /CARRIAGE RETURN | |
1312 | SGOT /SEARCH CHARACTER FOUND | |
1313 | \f | |
1314 | /HANDLER FOR RUBOUT IN TEXT OR SEARCH | |
1315 | RUB1, TAD AXIN | |
1316 | CIA | |
1317 | TAD BUFR | |
1318 | TAD XCTIN | |
1319 | SZA CLA /IS THERE ANYTHING ON THIS LINE? | |
1320 | TAD ECHOSW /OR ECHO INHIBITED? | |
1321 | SNA CLA | |
1322 | JMP I IGNORE /YES-IGNORE RUBOUT | |
1323 | /SCOPE PATCH 25-MAY-77 DS | |
1324 | / TAD SPLAT /NO- | |
1325 | / JMS I OUT1 /OUTPUT BACKSLASH | |
1326 | JMS I .+1 /DS | |
1327 | RUBPA /DS | |
1328 | /DELETE CHAR FROM BUFFER | |
1329 | TAD AXIN /GET LAST WORD OF INPUT | |
1330 | DCA MOV1 | |
1331 | CDF 10 | |
1332 | DCA I BUFR /PREVENTS INFINITE RUBOUTS | |
1333 | TAD I MOV1 | |
1334 | ISZ XCTIN /WHICH HALF OF WORD? | |
1335 | JMP RUB2 | |
1336 | AND C77 | |
1337 | TAD M77 | |
1338 | SZA CLA /TEST EXTENSION | |
1339 | JMP RUB4 | |
1340 | RUB3, CMA | |
1341 | DCA XCTIN | |
1342 | CMA | |
1343 | TAD AXIN | |
1344 | DCA AXIN | |
1345 | TAD I MOV1 | |
1346 | AND P7700 | |
1347 | RUB4, DCA ADD | |
1348 | CDF 0 | |
1349 | JMP I IGNORE /CHIN+1 | |
1350 | RUB2, AND P7700 | |
1351 | TAD C100 | |
1352 | SZA CLA | |
1353 | JMP RUB3 | |
1354 | DCA I MOV1 | |
1355 | JMP RUB3+1 | |
1356 | \f | |
1357 | /HANDLER FOR SPACE IN TEXT MODE | |
1358 | SPACES, TAD ECHOSW | |
1359 | CLA /OR SZA CLA IF B OPTION | |
1360 | JMP I SPCNO /PACK IT - (MOR+4) | |
1361 | CMA /SET COUNTER | |
1362 | SP2, DCA CNT | |
1363 | JMS I BUFRDI /GET LAST CHARACTER | |
1364 | TAD M240 | |
1365 | SNA CLA /WAS IT SPACE? | |
1366 | JMP SP2 /YES-IGNORE EXTRA SPACES | |
1367 | /----------------------------------------------------------------------- | |
1368 | TAD CHAR /NO | |
1369 | DCA SAVE /SAVE NON-SPACE | |
1370 | ISZ CNT /WAS THERE MORE THAN 1 SPACE? | |
1371 | TAD M27 /YES- STORE TAB | |
1372 | TAD C240 /NO-STORE SPACES | |
1373 | DCA CHAR | |
1374 | JMS I PACK1 | |
1375 | TAD SAVE | |
1376 | JMP I SPCGO /SORT - (MOR+1) | |
1377 | ||
1378 | /HANDLER FOR $ (PART OF M COMMAND) | |
1379 | ||
1380 | MOVE, TAD ARG0 /ARG2 .GE. ARG0 | |
1381 | CIA | |
1382 | TAD ARG2 | |
1383 | SPA CLA /ARE LINES TO BE MOVED LEGITIMATE | |
1384 | ERROR /NO | |
1385 | TAD ARG0 /YES- | |
1386 | DCA MOV1 /SET POINTER TO FIRST LINE | |
1387 | TAD ARG2 | |
1388 | DCA MOV2 /SET POINTER TO LAST LINE | |
1389 | JMP I ONUM /CONTINUE COMMAND INPUT | |
1390 | \f | |
1391 | OPS1, EXNEX /LINE FEED | |
1392 | GEXP /SPACE | |
1393 | GEXP /PLUS | |
1394 | FIRS /COMMA | |
1395 | GMIN /MINUS | |
1396 | PERI /POINT(.) | |
1397 | SLAS /SLASH | |
1398 | EXLAS /BACKUP(<) | |
1399 | PRNT /= | |
1400 | EXNEX /ALT(>) | |
1401 | DBCV2 /DUMMY | |
1402 | AMODE /ALTMODE ASR-33 | |
1403 | AMODE /ALTMODE ASR-35 | |
1404 | AMODE /ESCAPE KEY | |
1405 | DBLQUO /" | |
1406 | MOVE /DOLLAR SIGN | |
1407 | ELIM /COMMAND RUBOUT | |
1408 | PRNT /: | |
1409 | GTOP-2 /CARRIAGE RETURN | |
1410 | START /^U | |
1411 | MONIT /^C (MONITOR RESTART) | |
1412 | OPS1A, RETRN /RETURN | |
1413 | /----------------------------------------------------------------------- | |
1414 | OLDTE1, START /^U | |
1415 | MONIT /^C | |
1416 | \f | |
1417 | /HANDLER FOR E COMMAND | |
1418 | ||
1419 | ENDFIL, TAD EKILLL /IS E COMMAND ALLOWED? | |
1420 | SZA CLA | |
1421 | ERROR /NO-NO INPUT SPECIFIED | |
1422 | CLA CMA /YES-RESET ARGUMENTS | |
1423 | DCA ARG0 | |
1424 | TAD JMPTE1 /SKIP LISTER IF EMPTY BUFFER | |
1425 | DCA I L1I | |
1426 | TAD FLCLSI /CLOSE FILE SETUP | |
1427 | DCA ELIM /CLOSES FILE ON READ FAILURE | |
1428 | JMP I COMBOP | |
1429 | ||
1430 | COMBOP, COMBO | |
1431 | FLCLSI, JMP I CLFLI | |
1432 | AONEI, AONE | |
1433 | ||
1434 | /HANDLER FOR ^U IN TEXT MODE | |
1435 | CTRLU, JMS CTRLU1 /GENERATE A ^U | |
1436 | JMP I AONEI /AND CONTINUE | |
1437 | ||
1438 | /PRINT ^U | |
1439 | CTRLU1, 0 | |
1440 | TAD C325 | |
1441 | JMS I UPAROI /PRINT ^U | |
1442 | TAD CCR /AND A CR/LF | |
1443 | JMS I OUT1 | |
1444 | JMP I CTRLU1 /--RETURN-- | |
1445 | C325, 325 | |
1446 | ||
1447 | /CHECK VALIDITY OF ARGUMENTS | |
1448 | /FOR D COMMAND | |
1449 | CHKARX, 0 | |
1450 | TAD ARG0 | |
1451 | CIA | |
1452 | IAC | |
1453 | TAD ARG1 | |
1454 | TAD LSTN | |
1455 | SPA CLA /DO LINES EXIST? | |
1456 | ERROR /NO | |
1457 | JMP I CHKARX /YES--RETURN-- | |
1458 | \f | |
1459 | /HANDLER FOR . | |
1460 | PERI, TAD THSN | |
1461 | SKP | |
1462 | /HANDLER FOR / | |
1463 | SLAS, TAD LSTN | |
1464 | DCA TEMP /SAVE LINE NUMBER | |
1465 | DCA CHAR | |
1466 | ISZ LSTCHK /GOT EITHE . OR / IN ARGS | |
1467 | JMP I .+1 /FETCH REST OF ARGUMENT | |
1468 | GLOM | |
1469 | ||
1470 | /END OF A NEW TEXT LINE | |
1471 | /PACK CARRIAGE RETURN INTO BUFFER | |
1472 | /SET LINK CELLS AROUND NEW LINE | |
1473 | /ENTER WITH: | |
1474 | / CHAR CONTAINS CARRIAGE RETURN | |
1475 | / THIS CONTAINS ADDRESS OF LINK | |
1476 | / CELL OF PRECEDING TEXT LINE | |
1477 | / XSAV CONTAINS ADDRESS OF LINK | |
1478 | / CELL OF FOLLOWING TEXT LINE | |
1479 | / BUFR CONTAINS ADDRESS OF LINK | |
1480 | / CELL OF NEW TEXT LINE | |
1481 | ||
1482 | ENDLN, 0 | |
1483 | JMS I PACK1 /PACK CARRIAGE RETURN | |
1484 | CDF 10 | |
1485 | TAD ADD | |
1486 | SZA | |
1487 | DCA I AXIN | |
1488 | TAD BUFR /RESET LINK CELL | |
1489 | DCA I THIS /OF PREVIOUS LINE | |
1490 | TAD XSAV | |
1491 | DCA I BUFR /RESET LINK CELL OF NEW LINE | |
1492 | TAD BUFR | |
1493 | DCA THIS /RESET POINTER TO LINK CELL | |
1494 | ISZ AXIN | |
1495 | TAD AXIN | |
1496 | DCA BUFR /RESET FOR NEXT LINE | |
1497 | DCA XCTIN /CR CHARACTER SWITCH | |
1498 | CDF 0 | |
1499 | JMP I ENDLN /--RETURN-- | |
1500 | ||
1501 | \f | |
1502 | /HANDLER FOR ^C | |
1503 | /AND OTHER EXITS TO MONITOR | |
1504 | ||
1505 | MONIT, JMS FXSTWD /SET JOB STATUS TO SAVE CORE | |
1506 | TSF /MAKE SURE TTY FLAG IS SET | |
1507 | JMP .-1 | |
1508 | JMP I K7600 /****EXIT TO MONITOR**** | |
1509 | ||
1510 | /CLEAR BIT 11 OF JOB STATUS WORD | |
1511 | ||
1512 | FXSTWD, 0 | |
1513 | CIF 10 | |
1514 | JMS I JSWSET /IF NONZERO TEXT,SAVE BUFFER | |
1515 | JMP I FXSTWD /--RETURN-- | |
1516 | SPCP1A, SPACES+1 | |
1517 | BUFRD1, BUFRD+1 | |
1518 | ||
1519 | /RESET POINTERS AND SAVE BUFFERS | |
1520 | ||
1521 | RESET3, JMS FXSTWD | |
1522 | CIFTEN, CIF 10 /CLEAR BIT 11 OF JSW | |
1523 | JMS I P7700 /CALL USER SERVICE ROUTINES | |
1524 | 10 /*LOCK USR IN CORE* | |
1525 | TAD CIFTEN /RESET POINTERS | |
1526 | DCA I BUFRD1 | |
1527 | DCA EKILLL | |
1528 | TAD OLDTE1 | |
1529 | DCA TE1 | |
1530 | TAD CZ | |
1531 | DCA I TE1 | |
1532 | TAD K7600 | |
1533 | DCA ELIM | |
1534 | TAD K7600 | |
1535 | DCA I SPCP1A | |
1536 | TAD LOW | |
1537 | DCA OUTDEV | |
1538 | ISZ ECHOSW | |
1539 | TAD JMPCH | |
1540 | DCA I CCON+1 | |
1541 | ISZ FXSTWD /WASTE TIME FOR TTY FLAG | |
1542 | JMP .-3 | |
1543 | CIF CDF 10 | |
1544 | JMP I .+1 /GO CALL COMMAND DECODER | |
1545 | START1 | |
1546 | JSWSET, INSET | |
1547 | ||
1548 | \f | |
1549 | /----------------------------------------------------------------------- | |
1550 | /----------------------------------------------------------------------- | |
1551 | ||
1552 | /READ,WRITE,AND RELATED ROUTINES | |
1553 | ||
1554 | OURECS=4 /SIZE OF OUTPUT BUFFER | |
1555 | ||
1556 | *2000 | |
1557 | ||
1558 | /HANDLER FOR Q COMMAND | |
1559 | ||
1560 | Q, JMS I FXSWDI /CLEAR BIT 11 OF JSW | |
1561 | CDF 10 | |
1562 | TAD I K7600 | |
1563 | CDF 0 | |
1564 | SNA CLA /WAS AN OUTPUT DEVICE SPECIFIED? | |
1565 | ERROR /NO- | |
1566 | FLCLOS, TAD LSTN | |
1567 | SNA CLA /IS BUFFER EMPTY? | |
1568 | JMP FLCLS1 /YES-CLOSE FILE | |
1569 | TAD FLCLI /NO- | |
1570 | DCA TE1 /SET UP RETURN FROM P COMMAND | |
1571 | JMP I .+1 | |
1572 | PUNCH /WRITE CURRENT BUFFER | |
1573 | ||
1574 | /CLOSE FILE ON E OR Q COMMAND | |
1575 | ||
1576 | FLCLS1, JMS I PTCH1 /GO TO PATCH TO HANDLE FILE FULL | |
1577 | CLA CMA /TELL SYSTEM I/O MONITOR IS IN CORE | |
1578 | CDF 10 | |
1579 | DCA I P7700 | |
1580 | CDF 0 | |
1581 | JMP I K7600 /****EXIT TO MONITOR*** | |
1582 | / | |
1583 | PTCH1, PATCH1 | |
1584 | \f | |
1585 | ||
1586 | /INPUT ROUTINE FROM DEVICE | |
1587 | /VIA INPUT DEVICE HANDLER | |
1588 | BUFRD, 0 | |
1589 | CIF 10 | |
1590 | JMS I ICHARI /FETCH A CHARACTER | |
1591 | JMP ERRD /ERROR IN READING FROM BUFFER | |
1592 | DCA CHAR /INTERFACE LOCATION | |
1593 | TAD CHAR | |
1594 | AND P177 | |
1595 | SNA /IS IT L/T? | |
1596 | JMP BUFRD+1 /YES-GET NEXT CHARACTER | |
1597 | TAD C200 /NO RESTORE CHARACTER | |
1598 | JMP I BUFRD /--RETURN-- | |
1599 | ||
1600 | ERRD, SPA CLA /FATAL OR EOF? | |
1601 | JMP I SERR0I /FATAL-OUTPUT ERROR MESSAGE | |
1602 | TAD ERSW /DISABLE FURTHER READS | |
1603 | DCA BUFRD+1 | |
1604 | TAD I COMM5 /IF THIS IS NEGATIVE, DO ONE | |
1605 | SMA CLA /MORE SEARCH (POSSIBLY) IN THE CASE | |
1606 | JMP BUFRD+1 /THAT NO FINAL FORM FEED EXISTS | |
1607 | CLA IAC /SET CURRENT LINE TO 1 AND SEARCH | |
1608 | DCA THSN /ONCE MORE | |
1609 | JMP I .+1 | |
1610 | SFIND2 | |
1611 | ||
1612 | ICHARI, ICHAR /CHARACTER ROUTINES | |
1613 | FLCLI, FLCLS1 | |
1614 | ||
1615 | \f | |
1616 | /OUTPUT ROUTINE TO DEVICE | |
1617 | /VIA OUTPUT DEVICE HANDLER | |
1618 | ||
1619 | BUFWT, 0 | |
1620 | CIF 10 | |
1621 | JMS I OCHARI /OUTPUT A CHARACTER | |
1622 | JMP ERWT /OUTPUT FAILED | |
1623 | BUFRTN, TAD BUFWTI /RESET OUTPUT DEVICE HANDLER POINTER | |
1624 | DCA OUTDEV | |
1625 | JMP I BUFWT /--RETURN-- | |
1626 | ||
1627 | ERWT, SPA CLA /FATAL, OR NO MORE ROOM? | |
1628 | JMP I SERR1I /FATAL-OUTPUT ERROR MESSAGE | |
1629 | JMS I FXSWDI /FIX JOB STATUS WORD-NO MORE ROOM | |
1630 | TAD I TE1 /STORE POINTERS | |
1631 | DCA PTE1 | |
1632 | TAD ELIM | |
1633 | DCA PELIM | |
1634 | TAD TE1 | |
1635 | DCA PPTE1 | |
1636 | CDF 10 | |
1637 | ISZ I PANICI /SET PANIC DUMP | |
1638 | TAD MORECS /PREPARE TO CLOSE PRESENT OUT FILE | |
1639 | TAD I OCNTI /THIS GIVES OPTIMUM CLOSE LENGTH | |
1640 | SPA | |
1641 | JMP PATCH2 | |
1642 | DCA I OCNTI | |
1643 | TAD I OREC /WRITE A ^Z | |
1644 | DCA CLSREC /DIRECTLY TO THE DEVICE | |
1645 | TAD I OHNDL /HANDLER ENTRY POINT | |
1646 | DCA TEMPO | |
1647 | CDF 0 | |
1648 | JMS I TEMPO /CALL OUTPUT DEVICE HANDLER | |
1649 | 4110 /THE BUFFER IS A PAGE OF THE EDITOR | |
1650 | 7000 /WITH A 232 IN THE FIRST LOCATION | |
1651 | CLSREC, 0 /RECORD NUMBER HERE | |
1652 | JMP I SERR1I /**WRITE FAILURE** 1* | |
1653 | CDF CIF 10 | |
1654 | JMS I OCLSI /CLOSE THE FILE IN PANIC MODE | |
1655 | JMP I SERR2I /**FILE CLOSE FAILED**2* | |
1656 | CIF 10 | |
1657 | JMS I C200 /CALL USER SERVICE ROUTINES | |
1658 | 11 /*DISMISS USR FROM CORE* | |
1659 | PATCH2, CLA | |
1660 | CDF 0 | |
1661 | TAD POINT /PRINT OUT"FULL" AND RETURN | |
1662 | DCA AXIN | |
1663 | TAD I AXIN /FETCH CHARACTER | |
1664 | SNA /DONE YET? | |
1665 | JMP I RST3I /YES-RESET & CALL COMMAND DECODER | |
1666 | JMS I OUTL1 /NO - OUTPUT CHARACTER | |
1667 | JMP .-4 /GET NEXT CHARACTER | |
1668 | \f | |
1669 | FXSWDI, FXSTWD | |
1670 | OCNTI, OUCCNT | |
1671 | PANICI, PANIC | |
1672 | OCHARI, OCHAR | |
1673 | MORECS, -OURECS+1 /THIS ALLOWS US TO 'MANUALLY' WRITE | |
1674 | /A FORM FEED AND A ^Z. | |
1675 | ||
1676 | POINT, FULLST-1 | |
1677 | OREC, OUREC | |
1678 | OHNDL, OUHNDL | |
1679 | ||
1680 | /RESET POINTERS STORED PREVIOUSLY | |
1681 | BUFRET, TAD PPTE1 | |
1682 | DCA TE1 | |
1683 | TAD PTE1 | |
1684 | DCA I TE1 | |
1685 | TAD PELIM | |
1686 | DCA ELIM | |
1687 | JMP BUFRTN | |
1688 | ||
1689 | PPTE1, 0 | |
1690 | PELIM, 0 | |
1691 | PTE1, 0 | |
1692 | OCLSI, OCLOSE /V3 FILE CLOSE ROUTINE | |
1693 | ||
1694 | /----------------------------------------------------------------------- | |
1695 | ||
1696 | /ERROR MESSAGE- FULL - | |
1697 | FULLST, 306 /F | |
1698 | 325 /U | |
1699 | 314 /L | |
1700 | 314 /L | |
1701 | 215 /CARRIAGE RETURN | |
1702 | 212 /LINE FEED | |
1703 | 0 /DELIMITER | |
1704 | \f | |
1705 | SRCBUF, ZBLOCK 24 /SEARCH BUFFER | |
1706 | ||
1707 | ||
1708 | /SPECIAL CHARACTER LIST FOR STRING SEARCH | |
1709 | SLST=. | |
1710 | 247 /" | |
1711 | 242 /' | |
1712 | 377 /RUBOUT | |
1713 | 203 /^C | |
1714 | 225 /^U | |
1715 | /----------------------------------------------------------------------- | |
1716 | NEXBUF, DUMB1&177+5600 /JMP I DUMB1 | |
1717 | ||
1718 | /DISPATCH LIST FOR STRING SEARCH | |
1719 | ||
1720 | OSLST, QUO1 /" | |
1721 | QUO2 /' | |
1722 | FORGET /RUBOUT | |
1723 | MONIT /^C | |
1724 | RLEAS /^U IN STRING SEARCH | |
1725 | \f | |
1726 | ||
1727 | /GENERATE ^ FOLLOWED BY THE CHARACTER | |
1728 | /WHICH IS IN AC ON ENTRY | |
1729 | ||
1730 | UPAROW, 0 | |
1731 | DCA TEMPO /SAVE CHARACTER | |
1732 | TSF | |
1733 | JMP .-1 | |
1734 | TAD C336 | |
1735 | JMS I OUTL1 /PRINT ^ | |
1736 | TAD TEMPO | |
1737 | JMS I OUTL1 /PRINT CHARACTER | |
1738 | JMP I UPAROW /--RETURN-- | |
1739 | C336, 336 | |
1740 | ||
1741 | ||
1742 | /HANDLER FOR ^U DURING STRING SEARCH | |
1743 | RLEAS, JMS I (CTRLU1 | |
1744 | JMP I (START /^U GETS US BACK TO # | |
1745 | ||
1746 | /HANDLER FOR ALTMODE | |
1747 | ||
1748 | AMODE, DCA STRIND /NEED SETUP | |
1749 | JMS I STRFIN /SEARCH FOR STRING | |
1750 | ERROR | |
1751 | TAD THSN /RESULT IS LINE NUMBER | |
1752 | JMP I .+1 /LINK TO COMMAND STRUCTURE | |
1753 | GTOP+1 | |
1754 | ||
1755 | ||
1756 | /HANDLER FOR J COMMAND | |
1757 | ||
1758 | JERK, DCA STRIND /SETUP FOR SEARCH | |
1759 | JERK1, JMS I STRFIN /SEARCH FOR STRING | |
1760 | JMP GMOR /GET NEXT BUFFER | |
1761 | TSF | |
1762 | JMP .-1 /JUST TO BE SURE | |
1763 | TAD CZ /RESTORE MONITOR EXIT | |
1764 | DCA I TE1 | |
1765 | JMP I TE1 /*POSSIBLE RETURN TO COMMAND MODE* | |
1766 | \f | |
1767 | /GET NEXT BUFFER FOR S SEARCH | |
1768 | ||
1769 | GMOR, TAD I CNTRI | |
1770 | SNA CLA /IS BUFFER EMPTY? | |
1771 | ERROR /NO | |
1772 | ISZ STRIND /YES-BYPASS SETUP | |
1773 | TAD NEXBUF | |
1774 | DCA I COMM5 /SET UP READ OF ONE BUFFER | |
1775 | IAC | |
1776 | DCA ARG0 | |
1777 | TAD EKILLL | |
1778 | SZA CLA /IS THERE AN OUTPUT DEVICE? | |
1779 | JMP I .+2 /NO | |
1780 | JMP I .+2 /YES | |
1781 | YANK /NO OUTPUT | |
1782 | COMBO /THERE IS OUTPUT | |
1783 | ||
1784 | ||
1785 | /HANDLER FOR F COMMAND | |
1786 | ||
1787 | BARROW, ISZ STRIND /CONTINUES LOOKING FOR EXISTING STRING | |
1788 | ISZ THSN /INCREMENT FOR NEXT LINE | |
1789 | JMP JERK1 | |
1790 | CNTRI, CNTR | |
1791 | ||
1792 | /HANDLER FOR " | |
1793 | ||
1794 | DBLQUO, ISZ THSN /USES STRING NOW IN BUFFER | |
1795 | ISZ STRIND /NO SETUP REQUIRED | |
1796 | JMP AMODE+1 | |
1797 | ||
1798 | /HANDLER FOR B COMMAND | |
1799 | ||
1800 | CORSPC, CLL | |
1801 | TAD BUFR | |
1802 | TAD K1320 | |
1803 | SZL CLA /IS ANY CORE LEFT? | |
1804 | JMP ZROCOR /NO | |
1805 | TAD BUFR /YES-SET UP NUMBER OF LOCATIONS | |
1806 | CIA /IN ARG2 | |
1807 | TAD BUFEND | |
1808 | TAD K360 | |
1809 | ZROCOR, DCA ARG2 | |
1810 | JMP I .+1 | |
1811 | PRNT | |
1812 | K360, 360 | |
1813 | \f | |
1814 | /HANDLER FOR K COMMAND | |
1815 | ||
1816 | KILL, TAD ARG0 /IN CASE HE TYPED N,MK | |
1817 | SZA CLA /INSTEAD OF N,ML. SAVE HIM!! | |
1818 | ERROR | |
1819 | TAD END /RESET BUFFER POINTERS | |
1820 | DCA BUFR /TO REFLECT EMPTY BUFFER | |
1821 | DCA LSTN | |
1822 | DCA THSN | |
1823 | CDF 10 /ZERO FIELD 1 POINTER | |
1824 | DCA I CFRS | |
1825 | CDF 0 | |
1826 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
1827 | ||
1828 | /ROUTINE TO REASSIGN INPUT HANDLER | |
1829 | /AFTER A PANIC DUMP AND RESTART | |
1830 | ||
1831 | PIASGN, CDF CIF 10 | |
1832 | TAD I PINEOF | |
1833 | SZA CLA /IS THERE A HANDLER TO RESTORE? | |
1834 | JMP I PIRETN /NO - BACK TO FIELD 1 | |
1835 | TAD I IHPAGE /YES - | |
1836 | DCA PIHND /GET HANDLER PAGE | |
1837 | TAD I IDVNO | |
1838 | CDF 0 /I/O MONITOR IS IN CORE AT THIS POINT | |
1839 | JMS I C200 /CALL USER SERVICE ROUTINES | |
1840 | 1 /*FETCH HANDLER* | |
1841 | PIHND, 0 | |
1842 | JMP I SERR4I /**DEVICE HANDLER ERROR**+** | |
1843 | TAD PIHND | |
1844 | CDF CIF 10 | |
1845 | DCA I PIHNDL /PUT NEW HANDLER ADDRESS BACK | |
1846 | JMP I PIRETN /AND RETURN | |
1847 | ||
1848 | PIRETN, PANOPN /GO OPEN OUTPUT FILES | |
1849 | PIHNDL, INHNDL | |
1850 | IHPAGE, I1 /I1 CONTAINS "INDEVH+1" | |
1851 | IDVNO, INDEV | |
1852 | PINEOF, INEOF | |
1853 | ||
1854 | /HANDLER FOR # COMMAND | |
1855 | ||
1856 | VERSN, TAD ("V /V3 | |
1857 | JMS I OUTL1 /V3 PRINT V | |
1858 | TAD (VERSION&70%10+260 /V3 | |
1859 | JMS I OUTL1 /V3 PRINT VERSION # | |
1860 | TAD (VERSION&7+260 | |
1861 | JMS I OUTL1 /V3C PRINT 2ND NUMBER OF VERSION # | |
1862 | TAD (PATCH /V3 | |
1863 | JMS I OUTL1 /V3 PRINT PATCH LEVEL | |
1864 | JMP I TE1 /V3 RESTART | |
1865 | \f*2400 | |
1866 | /----------------------------------------------------------------------- | |
1867 | /----------------------------------------------------------------------- | |
1868 | /STRING SEARCH ROUTINE | |
1869 | /CALLED BY $(ALTMODE) AND J COMMAND HANDLERS | |
1870 | ||
1871 | SFIND1, 0 | |
1872 | ISZ ECHOSW | |
1873 | TAD STRIND /IS SETUP NECESSARY | |
1874 | SZA CLA | |
1875 | JMP SFIND2 /NO. | |
1876 | TAD MSCNT | |
1877 | DCA BUFCNT /SET COUNTER | |
1878 | TAD SBUF | |
1879 | DCA AXIN /BEGIN SEARCH BUFFER | |
1880 | TAD ATSIGN | |
1881 | JMS I OUTL1 /OUTPUT $ | |
1882 | ISZ TABIND | |
1883 | RLOOP, JMS I CHI1 /FETCH CHARACTER FROM TTY | |
1884 | JMS I SORTJ /IS IT SPECIAL FOR SEARCH STRING? | |
1885 | SLST-1 /YES-HANDLE IT | |
1886 | OSLST-SLST | |
1887 | ISZ BUFCNT /NO-SEARCH BUFFER FULL? | |
1888 | JMP STORE /NO-STORE THIS CHARACTER | |
1889 | CLA CMA | |
1890 | DCA BUFCNT /YES-DON'T ALLOW ANY MORE | |
1891 | JMP RLOOP-1 /BUT KEEP ECHOING HIS | |
1892 | STORE, TAD CHAR /STORE CHARACTER IN SEARCH BUFFER | |
1893 | DCA I AXIN | |
1894 | JMP RLOOP | |
1895 | ||
1896 | /HANDLER FOR " | |
1897 | QUO2, TAD THSN /START AT .+1 | |
1898 | /HANDLER FOR ' | |
1899 | QUO1, IAC /START AT .=1 | |
1900 | DCA THSN | |
1901 | TAD AXIN | |
1902 | CIA /MAKE UP COUNT OF NO. CHARS NOW IN | |
1903 | TAD SBUF /SEARCH BUFFER | |
1904 | DCA CNTR | |
1905 | DCA I AXIN /END STRING WITH A 0 | |
1906 | SFIND2, TAD CNTR | |
1907 | SNA CLA /IS BUFFER EMPTY? | |
1908 | JMP ER1 /YES-PREPARE TO EXIT | |
1909 | JMS NUCHAR /NO GET FIRST STRING CHARACTER | |
1910 | TAD THSN | |
1911 | JMS I FIN1 /GET APPROPRIATE POINTER | |
1912 | DCA THIS /THE TRICK IS TO GET THE NEXT | |
1913 | DCA CHFND | |
1914 | CDF 10 /POINTER SO THAT WE NEVER HAVE TO GO | |
1915 | TAD I THIS /BACK TO THE FIND ROUTINE | |
1916 | \f | |
1917 | COMBAK, DCA TMP2 | |
1918 | TAD I TMP2 | |
1919 | DCA NEXTPT | |
1920 | CDF 0 | |
1921 | TAD THSN | |
1922 | CIA | |
1923 | TAD LSTN | |
1924 | SPA CLA /LAST LINE? | |
1925 | JMP ER1 /YES-FINISHED WITH BUFFER | |
1926 | TAD TMP2 /NO | |
1927 | DCA AXOUT /SET TO UNPACK CHARACTERS | |
1928 | CMA | |
1929 | DCA XCT | |
1930 | UPK1, JMS I UTR1 /UNPACK A CHARACTER | |
1931 | DCA TMP2 | |
1932 | TAD TMP2 | |
1933 | TAD MCR | |
1934 | SZA CLA /END OF LINE? | |
1935 | JMP NOCR /NO | |
1936 | ISZ THSN /YES-INCREMENT LINE COUNTER | |
1937 | JMS NUCHAR /FORGET PREVIOUS MATCHES ON NEW LINE | |
1938 | DCA CHFND | |
1939 | CDF 10 | |
1940 | TAD NEXTPT /AND GET NEXT LINE | |
1941 | JMP COMBAK | |
1942 | ||
1943 | NOCR, TAD TMP2 /CHARACTER OTHER THAN CARRIAGE RETURN | |
1944 | TAD TMP1 /GET A CHARACTER FROM SEARCH BUFFER | |
1945 | SZA CLA /DO THEY MATCH | |
1946 | JMP UPK /NO | |
1947 | ISZ CHFND /YES-BUMP A RANDOM POINTER | |
1948 | CLA CMA | |
1949 | DCA FMATCH /SIGNIFY FIRST MATCH | |
1950 | JMS NUCHA /GET NEXT SEARCH CHARACTERR | |
1951 | JMP UPK1 /AND ANOTHER BUFFER CHARACTER | |
1952 | ||
1953 | UPK, ISZ FMATCH /WAS THIS FIRST MATCH? | |
1954 | JMP NOTSO /NO-NO PROBLEM | |
1955 | TAD XCT /YES-DON'T LET THE POINTERS BE | |
1956 | SPA CLA /BE CHANGED | |
1957 | JMP WREK | |
1958 | CMA | |
1959 | TAD AXOUT | |
1960 | DCA AXOUT | |
1961 | CMA | |
1962 | WREK, DCA XCT | |
1963 | NOTSO, JMS NUCHAR /GET FIRST CHARACTER OF SEARCH STRING | |
1964 | DCA CHFND | |
1965 | JMP UPK1 /TRY AGAIN | |
1966 | \f | |
1967 | STFIN, TAD CHFND /END OF STRING-DO COUNTS MATCH? | |
1968 | TAD CNTR | |
1969 | SNA CLA | |
1970 | JMP GOOD /YES-SEARCH SUCCESSFUL | |
1971 | ER1, TAD LSTN /IF BUFFER EMPTY, SET .=0 | |
1972 | SZA CLA | |
1973 | IAC | |
1974 | DCA THSN | |
1975 | SKP /CAUSE ERROR RETURN (?) | |
1976 | GOOD, ISZ SFIND1 /INCREMENT RETURN | |
1977 | JMP I SFIND1 /--RETURN-- | |
1978 | ||
1979 | /GET NEXT SEARCH CHARACTER | |
1980 | NUCHA, 0 | |
1981 | TAD .-1 /SET TO RETURN FROM NUCHAR | |
1982 | DCA NUCHAR | |
1983 | JMP NEXX | |
1984 | ||
1985 | /GET FIRST CHARACTER OF SEARCH STRING | |
1986 | NUCHAR, 0 | |
1987 | TAD SBUF | |
1988 | DCA AXIN | |
1989 | NEXX, TAD I AXIN | |
1990 | SNA /END OF STRING? | |
1991 | JMP STFIN /YES | |
1992 | CIA /NO - NEGATE SEARCH CHARACTER | |
1993 | DCA TMP1 /AND STORE IT | |
1994 | JMP I NUCHAR /--RETURN-- | |
1995 | ||
1996 | ENDA=SRCBUF-1 | |
1997 | ATSIGN, 244 | |
1998 | TMP1, 0 | |
1999 | TMP2, 0 | |
2000 | CNTR, 0 | |
2001 | FMATCH, 0 | |
2002 | BUFCNT, 0 | |
2003 | NEXTPT, 0 | |
2004 | CHFND, 1 /MUST BE NONZERO INITIALLY | |
2005 | SBUF, ENDA | |
2006 | MSCNT, -24 | |
2007 | ||
2008 | /HANDLER FOR RUBOUT IN SEARCH STRING | |
2009 | ||
2010 | FORGET, TAD CCR | |
2011 | JMS I OUT1 /OUTPUT CARRIAGE RETURN | |
2012 | JMP SFIND1+1 | |
2013 | ||
2014 | \f | |
2015 | *2600 | |
2016 | /----------------------------------------------------------------------- | |
2017 | /----------------------------------------------------------------------- | |
2018 | THISX=COUNTP | |
2019 | THISX2=DTEM | |
2020 | RELCNT=LPT | |
2021 | ||
2022 | ||
2023 | /GARBAGE COLLECTION ROUTINE | |
2024 | /ENTER WITH NUMBER OF LINE TO BE DELETED | |
2025 | /IN AC | |
2026 | ||
2027 | GARBAG, 0 | |
2028 | DCA LINPTR /SAVE OBJECT LINE ADDRESS | |
2029 | TAD LINPTR | |
2030 | DCA AXCOMB /SCAN LINE LOOKING FOR 7715 OR 1500 (CR) | |
2031 | IAC /CNT HOLDS | |
2032 | DCA CNT /TOTAL # LOCS IN THIS LINE | |
2033 | CDF 10 | |
2034 | COLECT, ISZ CNT | |
2035 | TAD I AXCOMB /GET A WORD | |
2036 | TAD K63 | |
2037 | SNA /IS IT 7715? | |
2038 | JMP FINONE /YES-END OF LINE | |
2039 | TAD K6215 | |
2040 | SZA CLA /NO-IS IT 1500? | |
2041 | JMP COLECT /NO-TRY NEXT WORD | |
2042 | FINONE, TAD CNT /YES MINUS CNT GIVES AMOUNT | |
2043 | CIA /TO REDUCE CERTAIN POINTERS | |
2044 | DCA RELCNT | |
2045 | CDF 0 | |
2046 | IAC /GO THROUGH LIST OF POINTERS | |
2047 | JMS I FIN1 /& OFFSET POINTERS WHICH WILL BE MOVED | |
2048 | CDF 10 /MOVED ALONG WITH TEXT | |
2049 | GBG2, DCA THISX /SAVE POINTER | |
2050 | TAD I THISX /GET ADDRESS OF THIS LINE | |
2051 | SNA /DONE WITH STRING? | |
2052 | JMP GBGEND /YES | |
2053 | JMS CGEPTR /DECREASE POINTER IF NECESSARY | |
2054 | DCA I THISX /STORE NEW POINTER | |
2055 | TAD THISX2 | |
2056 | JMP GBG2 /DO NEXT LINE | |
2057 | \f | |
2058 | GBGEND, CDF 0 /ALL POINTERS ARE REDUCED. NOW, | |
2059 | CLL CML | |
2060 | TAD BUFR /PHYSICALLY MOVE CORE TO | |
2061 | CIA /CORRESPOND WITH POINTERS | |
2062 | TAD AXCOMB /AXCOMB POINTS TO FIRST LOC. TO GO | |
2063 | SMA SNL /POINTERS O.K.? | |
2064 | ERROR /NO | |
2065 | DCA XCT /YES-SET UP OTHER POINTERS | |
2066 | CDF 10 | |
2067 | CMA | |
2068 | TAD LINPTR | |
2069 | DCA AXOUT | |
2070 | TAD I AXCOMB /MOVE TEXT | |
2071 | DCA I AXOUT | |
2072 | ISZ XCT /ALL TEXT MOVED? | |
2073 | JMP .-3 /NO-CONTINUE MOVING | |
2074 | CDF 0 /YES | |
2075 | TAD AXOUT | |
2076 | DCA BUFR /RESET TOP OF BUFFER | |
2077 | TAD BUFR /REDUCE AXIN FOR CHARACTER SEARCH | |
2078 | DCA AXIN | |
2079 | TAD THIS /NOW DECREASE THIS IF IT IS NECESSARY | |
2080 | JMS CGEPTR | |
2081 | DCA THIS | |
2082 | JMP I GARBAG /--RETURN-- | |
2083 | ||
2084 | LINPTR, 0 | |
2085 | K63, 63 | |
2086 | ||
2087 | CGEPTR, 0 /THIS ROUTINE DETERMINES IF THE | |
2088 | DCA THISX2 /OF THE AC MUST BE DECREASED BY RELCNT. | |
2089 | CLL /IF THISX2 IS GREATER THAN LINPTR | |
2090 | TAD THISX2 /DECREASE THISX2 BY RELCNT. | |
2091 | CIA | |
2092 | TAD LINPTR /THIS EFFECTIVELY DECREASE ALL POINTERS | |
2093 | SNL CLA /WHICH HAVE TO BE RELOCATED | |
2094 | TAD RELCNT | |
2095 | TAD THISX2 | |
2096 | JMP I CGEPTR | |
2097 | ||
2098 | /HANDLER FOR V COMMAND | |
2099 | ||
2100 | VIEW, TAD (LPT /SET UP LISTER TO EXIT TO LPT | |
2101 | DCA OUTDEV | |
2102 | ISZ TABIND | |
2103 | JMS I LIS /LIST BUFFER | |
2104 | TAD C214 /AND OUTPUT A FORM FEED | |
2105 | JMS I OUTDEV | |
2106 | JMP I TE1 /*RETURN TO COMMAND MODE* | |
2107 | ||
2108 | ||
2109 | /LINE PRINTER OUTPUT ROUTINE | |
2110 | /ENTER WITH CHARACTER IN AC | |
2111 | /EXIT WITH AC CLEAR | |
2112 | ||
2113 | LPT, 0 | |
2114 | 6666 /LLS | |
2115 | 6661 /LSF | |
2116 | JMP .-1 | |
2117 | CLA | |
2118 | JMP I LPT /--RETURN-- | |
2119 | \f/HANDLER FOR , | |
2120 | ||
2121 | FIRS, TAD ARG2 | |
2122 | JMP I ONUM | |
2123 | ||
2124 | K6215, 6215 | |
2125 | ||
2126 | ||
2127 | /THE FOLLOWING GIVES ERROR MESSAGES FOR I/O RELATED ERRORS | |
2128 | /EACH IS A FATAL ERROR AND WILL ALWAYS EXIT THROUGH | |
2129 | /7600, SAVING THE TEXT BUFFER. | |
2130 | /N IS THE ERROR IDENTIFICATION CODE | |
2131 | /N=0=> FAILED IN READING DEVICE | |
2132 | /N=1=> FATAL WRITE ERROR | |
2133 | /N=2=> FILE CLOSE ERROR | |
2134 | /N=3=> FILE OPEN ERROR | |
2135 | /N=4=> DEVICE HANDLER ERROR | |
2136 | ||
2137 | SERR4, IAC | |
2138 | SERR3, IAC | |
2139 | SERR2, IAC | |
2140 | SERR1, IAC | |
2141 | SERR0, DCA TEMPO | |
2142 | TLS | |
2143 | TSF | |
2144 | JMP .-1 | |
2145 | TAD C215 | |
2146 | JMS I OUTL1 /OUTPUT CARRIAGE RETURN | |
2147 | TAD CLF | |
2148 | JMS I OUTL1 /OUTPUT LINE FEED | |
2149 | TAD C277 | |
2150 | JMS I OUTL1 /OUTPUT? | |
2151 | TAD TEMPO | |
2152 | TAD P260 | |
2153 | JMS I OUTL1 /SEND ERROR CODE | |
2154 | TAD C303 | |
2155 | JMS I UPAROI /SEND ^C | |
2156 | JMP I MONITO /****EXIT TO MONITOR**** | |
2157 | ||
2158 | P260, 260 | |
2159 | C303, 303 | |
2160 | ||
2161 | DELE, JMS I DELT /DELETE THE LINES | |
2162 | TSF | |
2163 | JMP .-1 | |
2164 | JMP I TE1 | |
2165 | ||
2166 | CTRLN, TAD C316 | |
2167 | JMS I UPAROI /ECHO ^N | |
2168 | JMP I .+1 | |
2169 | OUTX+1 | |
2170 | C316, 316 | |
2171 | / | |
2172 | PATCH1, 0 | |
2173 | CIF 10 | |
2174 | JMS I OCLSE /CLOSE FILE | |
2175 | SKP | |
2176 | JMP I PATCH1 /FILE CLOSED OK -RETURN | |
2177 | SPA CLA | |
2178 | JMP SERR2 /**FILE CLOSE FAILED**2* | |
2179 | JMP I NOROOM /RAN OUT OF SPACE WHILE CLOSING | |
2180 | / | |
2181 | NOROOM, ERWT+2 | |
2182 | OCLSE, OCLOSE | |
2183 | \f/*********************************************************************** | |
2184 | ||
2185 | /THE CODE AT 3000 IS ONCE ONLY CODE. IT TAKES THE FIELD 1 | |
2186 | /PART OF THE CODE WHICH IS INITIALLY IN FIELD 0 AND MOVES | |
2187 | /IT UP TO THE PROPER LOCATIONS IN FIELD 1. | |
2188 | *3000 | |
2189 | /----------------------------------------------------------------------- | |
2190 | /----------------------------------------------------------------------- | |
2191 | ||
2192 | INIT, TAD (3177 /COLD LOAD STARTS AT 3200 | |
2193 | DCA AXIN | |
2194 | TAD (6577 /CODE SHOULD BE IN 6600 OF FIELD 1 | |
2195 | DCA AXOUT | |
2196 | TAD (7000 /MOVE 1000 LOCATIONS UP | |
2197 | DCA COUNTA | |
2198 | LOOP, CDF 0 | |
2199 | TAD I AXIN /MOVE CODE | |
2200 | CDF 10 | |
2201 | DCA I AXOUT | |
2202 | ISZ COUNTA /DONE YET? | |
2203 | JMP LOOP /NO | |
2204 | DCA AXIN /YES-RESET COUNTERS | |
2205 | DCA AXOUT | |
2206 | CDF 0 /PUT A NOP INTO LOC. 203 | |
2207 | TAD (NOP | |
2208 | DCA I (START | |
2209 | TAD RST3I /CHANGE START ADDRESS TO SAVE BUFFER | |
2210 | DCA 177 | |
2211 | CIF CDF 10 | |
2212 | JMP I K6600 /STARTING ADDRESS IS 16600 | |
2213 | K6600, 6600 /FIELD 1 STARTING ADDRESS | |
2214 | ||
2215 | COUNTA, 0 | |
2216 | ||
2217 | /ERR5, CDF 0 /SET NOT RESTARTABLE BIT IF CHAIN | |
2218 | / TAD I (1000 | |
2219 | / TAD I (7746 | |
2220 | / DCA I (7746 | |
2221 | / JMP I (SERR5 /AND GIVE ?5^C | |
2222 | \f/MISCELLANEOUS PATCHES (NOT ONCE-ONLY!) | |
2223 | ||
2224 | /ESCAPE PATCH 25-MAY-77 DS | |
2225 | ||
2226 | ESCPA, 0 | |
2227 | ISZ ESCPA /SKIP OVER PATCH ADDR | |
2228 | TAD ECHOSW /IS ECHO SUPPRESSED? | |
2229 | SNA CLA | |
2230 | JMP I ESCPA /YES, RETURN | |
2231 | TAD CHAR /NO, TEST FOR ESC | |
2232 | TAD (-233) | |
2233 | SNA CLA /V12 | |
2234 | JMP .+3 /V12 | |
2235 | ISZ ESCPA /PRINT UNLESS IT IS ESC | |
2236 | JMP I ESCPA | |
2237 | TAD I CHI1 /V12 - TAD CHIN | |
2238 | TAD (-CMCHK-1 | |
2239 | SZA CLA /COMMAND MODE? | |
2240 | ISZ ESCPA /NO, OUTPUT IT | |
2241 | JMP I ESCPA /YES, DON'T OUTPUT IT NOW | |
2242 | /V12 | |
2243 | ||
2244 | /SCOPE PATCH 25-MAY-77 DS | |
2245 | ||
2246 | RUBPA, 0 | |
2247 | ISZ RUBPA /SKIP OVER PATCH ADDR | |
2248 | CDF 10 /LOOK AT "SCOPE" BIT IN | |
2249 | TAD I (7726) /RESIDENT MONITOR | |
2250 | CDF 00 | |
2251 | AND (200) | |
2252 | SZA CLA | |
2253 | JMP RP1 | |
2254 | TAD SPLAT /NO SCOPE, PRINT BACKSLASH | |
2255 | RP2, JMS I OUT1 /PRINT | |
2256 | JMP I RUBPA /DONE, DELETE THE CHAR | |
2257 | RP1, TAD (210) /SCOPE, PRINT BACK SPACE | |
2258 | JMS I OUT1 | |
2259 | TAD (240) /THEN A SPACE | |
2260 | JMS I OUT1 | |
2261 | TAD (210) /THEN ANOTHER BACK SPACE | |
2262 | JMP RP2 | |
2263 | SPLAT, 334 /ACKNOWLEDGE RUBOUT | |
2264 | ||
2265 | \f/ROUTINE TO HANDLE ESCAPE OUTPUT | |
2266 | /V12 - 27-JUN-77 ES | |
2267 | ||
2268 | ESCOUT, TAD OUTDEV | |
2269 | TAD (-OUTL | |
2270 | SZA | |
2271 | TAD (OUTL-LPT | |
2272 | SZA CLA /OUTPUT TO TERMINAL OR LINEPRINTER? | |
2273 | TAD (233-"$ /NO, OUTPUT ESC | |
2274 | TAD ("$ /YES, OUTPUT "$" | |
2275 | JMP OUTX /DO IT | |
2276 | ||
2277 | /MORE STUFF MAY BE INSERTED HERE | |
2278 | ||
2279 | /LITERALS | |
2280 | PAGE | |
2281 | \f *3200 | |
2282 | /******************************************************************** | |
2283 | /CODE MOVED TO 16600-16762 | |
2284 | ||
2285 | NOPUNC | |
2286 | *6600 | |
2287 | ENPUNC | |
2288 | ||
2289 | ||
2290 | /OURECS=4 | |
2291 | /SETUP FOR USING GENERAL INPUT, OUTPUT ROUTINES | |
2292 | INBUF=4200 /INPUT BUFFER AT 04200 | |
2293 | INCTL=0600 /INPUT CONTROL - 6 PAGES | |
2294 | INRECS=3 /3 RECORDS INTO FIELD 0 | |
2295 | INDEVH=3200 /INPUT HANDLER AT 03200 | |
2296 | ||
2297 | OUBUF=5600 /OUTPUT BUFFER AT 05600 | |
2298 | OUCTL=5000 /OUTPUT CONTROL - 8 PAGES | |
2299 | OUDEVH=3600 /OUTPUT HANDLER AT 03600 | |
2300 | ||
2301 | MPARAM=7643 /OPTION SWITCHES | |
2302 | ||
2303 | ||
2304 | JMS I L7700 /CALL USER SERVICE ROUTINES | |
2305 | 10 /*LOCK USR IN CORE* | |
2306 | CDF 0 /V3 | |
2307 | ISZ I PTEMP /V3 WERE WE CHAINED TO? | |
2308 | JMP CHN /V3 YES | |
2309 | CDF 10 /V3 NO | |
2310 | START1, JMS I L200 /CALL USER SERVICE ROUTINES | |
2311 | 5 /*COMMAND DECODER* | |
2312 | 0 | |
2313 | CHN, CDF 10 | |
2314 | TAD K7620 /RESET OUTDMP | |
2315 | DCA I THOLE | |
2316 | TAD I P7600A /OUTPUT LIST | |
2317 | AND C17 | |
2318 | SZCL, SZA CLA /IS THERE AN OUTPUT DEVICE? | |
2319 | JMP NXTOP /YES | |
2320 | CDF 0 /NO-DISALLOW E COMMAND | |
2321 | ISZ I EKILSW | |
2322 | CDF 10 | |
2323 | NXTOP, TAD I PARAM | |
2324 | RAL /B BIT TO BIT 0 | |
2325 | DCA DVHAND /SAVE PARAM. SWITCH | |
2326 | TAD DVHAND | |
2327 | SMA CLA /WAS /B OPTION SPECIFIED? | |
2328 | JMP NEWOP /NO | |
2329 | P7600A, 7600 /YES- | |
2330 | TAD SZCL /SET UP TO CONVERT SPACES TO TABS | |
2331 | CDF 0 | |
2332 | DCA I SPCP1 | |
2333 | CDF 10 | |
2334 | \fNEWOP, TAD DVHAND | |
2335 | RTL | |
2336 | SMA CLA /WAS /D OPTION SPECIFIED? | |
2337 | JMP FILOP /NO | |
2338 | TAD I OHANDL /YES-HANDLER BROUGHT IN FOR D OPTION | |
2339 | DCA DVHAND | |
2340 | TAD I P7600A /DEVICE NUMBER | |
2341 | JMS I L200 /CALL USER SERVICE ROUTINES | |
2342 | 1 /*ASSIGN* | |
2343 | DVHAND, 0 | |
2344 | JMP ISERR4 /**DEVICE HANDLER ERROR**4** | |
2345 | TAD I P7600A /GET DEVICE NUMBER | |
2346 | JMS I L200 /CALL USER SERVICE ROUTINES | |
2347 | 4 /*CLOSE* | |
2348 | 7601 | |
2349 | 0 | |
2350 | JLSTN, LSTN /PAGE ZERO. 'AND' SOME ADDRESS | |
2351 | FILOP, TAD PANIC /PANIC CASE? | |
2352 | SNA | |
2353 | JMS I IOPENI /SET BUFFER POINTERS OR RESTORE HANDLER | |
2354 | SZA CLA /YES- | |
2355 | JMP GINDVH /RESTORE INPUT DEVICE HANDLER IN PANIC MODE | |
2356 | PANOPN, JMS I OOPENI /OPEN OUTPUT FILES | |
2357 | SMA CLA /ERROR RETURN | |
2358 | SKP /NORMAL RETURN | |
2359 | JMP ISERR3 /**FILE OPEN ERROR**3** | |
2360 | TAD PANIC /PANIC CASE? | |
2361 | SNA CLA | |
2362 | JMP NOPAN /NO | |
2363 | TAD I P7600A /YES IF NO OUTPUT,DON'T ALLOW HIM | |
2364 | SNA CLA /TO DESTROY HIS TEXT | |
2365 | JMP START1 | |
2366 | TAD K5000 /SET TO WRITE BUFFER | |
2367 | JMS I ODMP /DUMP IT | |
2368 | JMP ISERR1 /**FATAL WRITE ERROR**1** | |
2369 | CLA IAC | |
2370 | \fNOPAN, DCA DVHAND | |
2371 | DCA PANIC /CLEAR PANIC SWITCH | |
2372 | JMS I L200 /CALL USER SERVICE ROUTINES | |
2373 | 11 /*DISMISS USR FROM CORE* | |
2374 | JMS I OUSTPI /RE-INITIALIZE OUTPUT POINTERS | |
2375 | CLA IAC | |
2376 | JMS I SETJSI | |
2377 | CDF 0 /IF LSTN#0, CLEAR FRST | |
2378 | TAD I JLSTN /BUT IN FIELD 1 | |
2379 | SNA CLA | |
2380 | DCA FRST | |
2381 | CIF CDF 0 | |
2382 | TAD DVHAND | |
2383 | SNA CLA /PANIC MODE? | |
2384 | JMP I STRTUP /NO-START THE EDITOR | |
2385 | TLS | |
2386 | JMP I .+1 /YES - RESUME OUTPUT | |
2387 | BUFRET | |
2388 | ||
2389 | GINDVH, CDF CIF 0 | |
2390 | JMP I .+1 | |
2391 | PIASGN | |
2392 | ||
2393 | ISERR3, JMS I L200 /CALL USER SERVICE ROUTINES | |
2394 | 11 /*DISMISS USR FROM CORE* | |
2395 | CIF CDF 0 | |
2396 | JMP I ASERR3 /**FILE OPEN ERROR**3** | |
2397 | ||
2398 | ISERR4, JMS I L200 /CALL USER SERVICE ROUTINES | |
2399 | 11 /*DISMISS USR FROM CORE* | |
2400 | CIF CDF 0 | |
2401 | JMP I ASERR4 /**DEVICE HANDLER ERROR**4** | |
2402 | ||
2403 | ISERR1, JMS I L200 /CALL USER SERVICE ROUTINES | |
2404 | 11 /*DISMISS USR FROM CORE* | |
2405 | ||
2406 | CIF CDF 0 | |
2407 | JMP I ASERR1 /**FATAL WRITE ERROR**1** | |
2408 | \fSETJSI, SETJSB | |
2409 | L200, 200 | |
2410 | STRTUP, START | |
2411 | PANIC, 0 | |
2412 | SPCP1, SPACES+1 | |
2413 | IOPENI, IOPEN | |
2414 | OOPENI, OOPEN | |
2415 | EKILSW, EKILLL | |
2416 | ODMP, OUTDMP | |
2417 | OHANDL, O1 | |
2418 | C17, 17 | |
2419 | PARAM, MPARAM | |
2420 | L7700, 7700 | |
2421 | ASERR1, SERR1 | |
2422 | ASERR3, SERR3 | |
2423 | ASERR4, SERR4 | |
2424 | K5000, 5000 /OUTPUT BUFF CONTROL WORD | |
2425 | OUSTPI, OUSETP | |
2426 | THOLE, TSTHOL | |
2427 | K7620, 7620 | |
2428 | PTEMP, TEMP | |
2429 | ||
2430 | /*********************************************************************** | |
2431 | \f *3400 | |
2432 | /*********************************************************************** | |
2433 | /CODE MOVED TO 17000-17173 | |
2434 | ||
2435 | NOPUNC | |
2436 | *7000 | |
2437 | ENPUNC | |
2438 | ||
2439 | 232 /THIS PAGE IS ^Z BUFFER | |
2440 | /SET UP ROUTINE FOR OUTPUT | |
2441 | /INITIALIZES CHARACTERS POINTERS | |
2442 | OUSETP, 0 | |
2443 | TAD I PANICJ /IS IT PANIC DUMP TIME? | |
2444 | SZA CLA /IF YES, DONT RESET POINTERS | |
2445 | JMP I OUSETP /--RETURN-- | |
2446 | TAD C1 /GET SIZE OF BUFFER IN DOUBLEWORDS | |
2447 | CIA /NEGATE IT | |
2448 | DCA OUDWCT | |
2449 | TAD C2 | |
2450 | DCA OUPTR /INITIALIZE WORD POINTER | |
2451 | TAD OUJMPE | |
2452 | DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH | |
2453 | JMP I OUSETP /--RETURN-- | |
2454 | ||
2455 | /OUTPUT A CHARACTER | |
2456 | /ENTER WITH CHARACTER IN 8-BIT ASCII | |
2457 | /IN AC | |
2458 | OCHAR, 0 | |
2459 | AND C377 /MASK OUT EXTRA BITS | |
2460 | DCA OUTEMP | |
2461 | KRS | |
2462 | TAD M203 | |
2463 | SNA CLA | |
2464 | KSF | |
2465 | JMP .+3 | |
2466 | CIF CDF 0 | |
2467 | JMP I C7600 | |
2468 | RDF /NO- | |
2469 | TAD CDIF0 | |
2470 | DCA OUCRET | |
2471 | TAD OUTINH /IS OUTPUT INHIBITED? | |
2472 | SZA CLA | |
2473 | JMP PSTOP /NO | |
2474 | CDF OUFLD /YES-SET DATA FIELD TO BUFFER'S FIELD | |
2475 | ISZ OUJMP /BUMP THE CHARACTER SWITCH | |
2476 | OUJMP, HLT /3 WAY CHARACTER SWITCH | |
2477 | JMP OCHAR1 | |
2478 | JMP OCHAR2 | |
2479 | OCHAR3, TAD OUTEMP | |
2480 | CLL RTL | |
2481 | RTL | |
2482 | AND K7400 | |
2483 | TAD I OUPOLD | |
2484 | DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH | |
2485 | /ORDER 4 BITS OF 3RD CHAR | |
2486 | \f TAD OUTEMP | |
2487 | CLL RTR | |
2488 | RTR | |
2489 | RAR | |
2490 | AND K7400 | |
2491 | TAD I OUPTR | |
2492 | DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS | |
2493 | TAD OUJMPE | |
2494 | DCA OUJMP /RESET SWITCH | |
2495 | ISZ OUPTR | |
2496 | ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS | |
2497 | JMP OUCOMN | |
2498 | TAD OUCT /LOAD CONTROL WORD FOR A FULL WRITE | |
2499 | JMS I DMPO /DUMP THE BUFFER | |
2500 | JMP OUCRET /OUTPUT ERROR - GIVE ERROR RETURN | |
2501 | JMS OUSETP /RE-INITIALIZE THE POINTERS | |
2502 | JMP OUCOMN | |
2503 | OCHAR2, TAD OUPTR | |
2504 | DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO | |
2505 | ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD | |
2506 | OCHAR1, TAD OUTEMP | |
2507 | DCA I OUPTR | |
2508 | OUCOMN, ISZ OCHAR | |
2509 | OUCRET, HLT /RESTORE CALLING FIELDS | |
2510 | JMP I OCHAR /--RETURN-- | |
2511 | ||
2512 | OUTEMP, 0 | |
2513 | OUPOLD, 0 | |
2514 | OUPTR, 0 | |
2515 | OUJMPE, JMP OUJMP | |
2516 | OUDWCT, 0 | |
2517 | OUTINH, 0 | |
2518 | \f/FETCH OUTPUT DEVICE CONTROL WORD | |
2519 | ||
2520 | OTYPE, 0 | |
2521 | RDF | |
2522 | TAD CDIF0 | |
2523 | DCA OTRTN | |
2524 | CDF 10 | |
2525 | TAD I C7600 /FETCH OUTPUT DEVICE NUMBER | |
2526 | AND P17 | |
2527 | TAD DCBM1 /+DCB-1 | |
2528 | DCA OUTEMP /FETCH DEVICE CONTROL WORD | |
2529 | TAD I OUTEMP | |
2530 | OTRTN, HLT /RESTORE CALLING FIELDS | |
2531 | JMP I OTYPE /--RETURN-- | |
2532 | PSTOP, CIF 0 /PRINTS ? WHEN NO OUTPUT DEV | |
2533 | ERROR | |
2534 | ||
2535 | INSET, 0 | |
2536 | DCA OTYPE /SAVE AC | |
2537 | RDF | |
2538 | TAD CDIF0 | |
2539 | DCA INSTRT /SET RETURN FIELDS | |
2540 | CDF 0 | |
2541 | TAD I PLASTN | |
2542 | CDF 10 | |
2543 | SNA CLA /IS THERE ANYTHING IN BUFFER? | |
2544 | IAC /NO-NO NEED TO SAVE USR AREA | |
2545 | JMS SETJSB /YES- | |
2546 | TAD OTYPE /RESTORE AC | |
2547 | INSTRT, CIF CDF 0 /RESTORE CALLING FIELDS | |
2548 | JMP I INSET /--RETURN-- | |
2549 | \f/SET JOB STATUS BIT 11 TO SAVE OR NOT SAVE | |
2550 | /ENTER WITH AC=0 OR 1, DEPENDING ON BUFFER | |
2551 | ||
2552 | SETJSB, 0 | |
2553 | DCA JSBTM /SAVE AC | |
2554 | CDF 0 | |
2555 | CLA CLL CMA RAL | |
2556 | AND I PJSBTS /CLEAR BIT 11 OF JSW | |
2557 | TAD JSBTM /SET ACCORDING TO AC | |
2558 | DCA I PJSBTS | |
2559 | CDF 10 | |
2560 | JMP I SETJSB /--RETURN-- | |
2561 | ||
2562 | JSBTM, 0 | |
2563 | PJSBTS, 7746 | |
2564 | PLASTN, LSTN | |
2565 | ||
2566 | DCB=7760 | |
2567 | C1, OUCTL&3700 | |
2568 | C2, OUBUF | |
2569 | C377, 377 | |
2570 | M203, -203 | |
2571 | CDIF0, CDF CIF 0 | |
2572 | K7400, 7400 | |
2573 | OUCT, OUCTL | |
2574 | C7600, 7600 | |
2575 | P17, 17 | |
2576 | DCBM1, DCB-1 | |
2577 | DMPO, OUTDMP | |
2578 | PANICJ, PANIC | |
2579 | /*********************************************************************** | |
2580 | \f *3600 | |
2581 | /*********************************************************************** | |
2582 | /CODE MOVED TO 17200-17376 | |
2583 | NOPUNC | |
2584 | *7200 | |
2585 | ENPUNC | |
2586 | /OPEN OUTPUT FILE | |
2587 | ||
2588 | O17, 17 | |
2589 | OOPEN, 0 | |
2590 | OU7600, 7600 | |
2591 | TAD OU7601 | |
2592 | DCA OUBLK | |
2593 | TAD O1 | |
2594 | DCA OUHNDL /SET OUTPUT HANDLER ENTRY | |
2595 | CDF 10 | |
2596 | TAD I OU7600 /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY | |
2597 | SNA /IS THERE AN OUTPUT DEVICE? | |
2598 | JMP ONOFIL /NO - INHIBIT OUTPUT | |
2599 | JMS I O200 /CALL USER SERVICE ROUTINES | |
2600 | 1 /*ASSIGN,FETCH HANDLER* | |
2601 | OUHNDL, 2600 /OUTPUT DEVICE HANDLER ENTRY | |
2602 | JMP I SERR4A /**DEVICE HANDLER ERROR**4** | |
2603 | OUENTR, TAD I OU7600 | |
2604 | JMS I O200 /CALL USER SERVICE ROUTINES | |
2605 | 3 /*ENTER OUTPUT FILE* | |
2606 | OUBLK, 7601 /REPLACED WITH STARTING BLOCK | |
2607 | OUELEN, 0 /REPLACED WITH LENGTH OF HOLE | |
2608 | JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH | |
2609 | DCA OUCCNT | |
2610 | DCA I O2 /ZERO OUTPUT INHIBIT FLAG | |
2611 | TAD OUBLK | |
2612 | DCA OUREC /INITIALIZE OUTPUT RECORD NUMBER | |
2613 | JMS I O3 | |
2614 | ISZ OOPEN | |
2615 | OORETN, JMP I OOPEN | |
2616 | OEFAIL, TAD I OU7600 | |
2617 | AND O7760 /GET REQUESTED LENGTH | |
2618 | SNA CLA /WAS IT AN INDEFINITE REQUEST | |
2619 | JMP ONTERR /YES - CANNOT ENTER THE FILE | |
2620 | TAD I OU7600 | |
2621 | O200, AND O17 /MAKE THE REQUESTED LENGTH ZERO | |
2622 | DCA I OU7600 | |
2623 | JMP OUENTR /TRY, TRY AGAIN | |
2624 | ONTERR, CLA CLL CML RAR /AC=2 | |
2625 | JMP OORETN /TAKE THE ERROR RETURN WITH AC<0 | |
2626 | ONOFIL, ISZ I O2 | |
2627 | JMP OORETN /TAKE THE ERROR RETURN WITH AC=0 | |
2628 | \fOUTDMP, 0 | |
2629 | DCA OUCTLW /STORE THE CONTROL WORD | |
2630 | JMS OUNREC /COMPUTE NO. OF RECORDS | |
2631 | TAD OUCCNT | |
2632 | DCA OUCCNT | |
2633 | TAD OUCCNT | |
2634 | CLL CML | |
2635 | TAD OUELEN | |
2636 | TSTHOL, SNL CLA /IF ZERO OR POSITIVE,GIVE ERROR | |
2637 | JMP OUERR | |
2638 | CDF CIF 0 | |
2639 | CDF 10 | |
2640 | JMS I OUHNDL /CALL OUTPUT DEVICE HANDLER | |
2641 | OUCTLW, 0 /CONTROL WORD | |
2642 | OUBUF /BUFFER ADDRESS | |
2643 | OUREC, 0 /RECORD NUMBER | |
2644 | JMP OUERR /THERE ARE NO SOFT OUTPUT HANDLER ERRORS | |
2645 | JMS OUNREC | |
2646 | TAD OUREC | |
2647 | DCA OUREC /UPDATE OUTPUT RECORD NUMBER | |
2648 | ISZ OUTDMP /BUMP OUTDMP TO NORMAL RETURN | |
2649 | OUERR, JMP I OUTDMP /--RETURN-- | |
2650 | \f | |
2651 | /CLOSE OUTPUT FILE | |
2652 | OCLOSE, 0 | |
2653 | TAD K7660 /SET UP SNL SZA CLA FOR CLOSE | |
2654 | DCA TSTHOL | |
2655 | CDF 10 | |
2656 | TAD I PANICC | |
2657 | SZA CLA | |
2658 | JMP NODUMP | |
2659 | TAD I O2 | |
2660 | SZA CLA /IS OUTPUT INHIBITED? | |
2661 | JMP OCISZ /YES - CLOSE IS A NOP | |
2662 | TAD O232 /OUTPUT A ^Z | |
2663 | JMS I O4 | |
2664 | JMP OCRET /AND SOME 0'S | |
2665 | JMS I O4 | |
2666 | JMP OCRET | |
2667 | FILLLP, JMS I O4 | |
2668 | JMP OCRET | |
2669 | JMS I O5 /GET TYPE OF OUTPUT DEVICE | |
2670 | SPA CLA | |
2671 | TAD O100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD | |
2672 | TAD O77 /BOUNDARY-OTHERWISE HALF RECORD | |
2673 | AND I O6 | |
2674 | SZA CLA /UP TO THE BOUNDARY YET? | |
2675 | JMP FILLLP /NO - FILL WITH ZEROS | |
2676 | TAD I O6 /GET DOUBLEWORD COUNT LEFT | |
2677 | TAD O7 | |
2678 | SNA /A FULL WRITE LEFT? | |
2679 | JMP NODUMP /YES - DON'T DO IT - ^Z IS ALREADY OUT | |
2680 | TAD O8 /PUT IN FIELD BITS AND WRITE BIT | |
2681 | JMS OUTDMP | |
2682 | JMP OCRET /ERROR OCCURRED WHILE DUMPING THE BUFFER | |
2683 | NODUMP, JMS I O7700 /CALL USER SERVICE ROUTINES | |
2684 | 10 /*LOCK USR IN CORE* | |
2685 | TAD I OU7600 /DEVICE NUMBER | |
2686 | JMS I O200 /CALL USER SERVICE ROUTINES | |
2687 | 4 /*CLOSE OUTPUT FILE* | |
2688 | OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME | |
2689 | OUCCNT, 0 | |
2690 | SKP /ERROR WHILE CLOSING THE FILE | |
2691 | OCISZ, ISZ OCLOSE | |
2692 | OCRET, CIF CDF 0 /RESTORE CALLING FIELDS | |
2693 | JMP I OCLOSE /--RETURN-- | |
2694 | PANICC, PANIC | |
2695 | \f/CONVERT OUTPUT CONTROL WORD | |
2696 | /TO NUMBER OF RECORDS | |
2697 | OUNREC, 0 | |
2698 | TAD OUCTLW | |
2699 | CLL RTL | |
2700 | RTL | |
2701 | RTL | |
2702 | AND O17 | |
2703 | JMP I OUNREC /--RETURN-- | |
2704 | ||
2705 | K7660, SNL SZA CLA | |
2706 | O1, OUDEVH+1 | |
2707 | O7700, 7700 | |
2708 | O2, OUTINH | |
2709 | O3, OUSETP | |
2710 | O7760, 7760 | |
2711 | O232, 232 | |
2712 | O4, OCHAR | |
2713 | O5, OTYPE | |
2714 | O100, 100 | |
2715 | O77, 77 | |
2716 | O6, OUDWCT | |
2717 | O7, OUCTL&3700 | |
2718 | O8, 4000+OUFLD | |
2719 | SERR4A, ISERR4 | |
2720 | ||
2721 | /*********************************************************************** | |
2722 | \f INFLD=INCTL&70 /FIELD OF INPUT BUFFER | |
2723 | OUFLD=OUCTL&70 /FIELD OF OUTPUT BUFFER | |
2724 | /*********************************************************************** | |
2725 | /CODE MOVED TO 17400 -17574 | |
2726 | ||
2727 | *4000 | |
2728 | NOPUNC | |
2729 | *7400 | |
2730 | ENPUNC | |
2731 | ||
2732 | /PREPARE TO OPEN NEW INPUT FILE | |
2733 | ||
2734 | IN7400, 7400 | |
2735 | IOPEN, 0 | |
2736 | CLA CMA | |
2737 | DCA INCHCT /SET INCHCT TO FORCE A READ | |
2738 | ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE | |
2739 | TAD I7617 | |
2740 | DCA INFPTR /RESET FILE POINTER | |
2741 | JMP I IOPEN /--RETURN-- | |
2742 | INPTR, 0 | |
2743 | INDEV, 0 | |
2744 | ||
2745 | /INPUT A CHARACTER | |
2746 | ||
2747 | ICHAR, 0 | |
2748 | IN7600, 7600 | |
2749 | INCHAR, CDF INFLD | |
2750 | ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH | |
2751 | ISZ INCHCT | |
2752 | INJMPP, JMP INJMP | |
2753 | TAD INEOF | |
2754 | SNA CLA /DID LAST READ YIELD END-OF-FILE? | |
2755 | JMP INGBUF /NO-DO ANOTHER | |
2756 | INNEWF, CDF 10 | |
2757 | TAD I1 | |
2758 | DCA INHNDL /INITIALIZE HANDLER ADDRESS | |
2759 | TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY | |
2760 | DCA INDEV /SAVE IT FOR PANIC | |
2761 | TAD INDEV | |
2762 | SNA /ANY MORE? | |
2763 | JMP EOFERR /NO - OUT OF INPUT | |
2764 | JMS I PINSET /YES-SAVE BUFFER IF NECESSARY | |
2765 | JMS I I7700 /CALL USER SERVICE ROUTINE | |
2766 | 1 /*ASSIGN, FETCH HANDLER* | |
2767 | INHNDL, 0 | |
2768 | JMP I SERR4B /**DEVICE HANDLER ERROR**+** | |
2769 | TAD I INFPTR | |
2770 | AND I7760 /GET LENGTH PART OF WORD | |
2771 | SZA /LENGTH OF 0 MEANS LENGTH >=256 | |
2772 | \f TAD I17 /ADD HIGH ORDER BITS | |
2773 | CLL CML RTR | |
2774 | RTR | |
2775 | DCA INCTR /STORE LENGTH OF FILE | |
2776 | ISZ INFPTR | |
2777 | TAD I INFPTR | |
2778 | DCA INREC /STORE STARTING RECORD NUMBER OF FILE | |
2779 | ISZ INFPTR | |
2780 | DCA INEOF /ZERO END-OF-FILE FLAG | |
2781 | INGBUF, TAD INCTR | |
2782 | CLL | |
2783 | TAD I2 | |
2784 | SNL | |
2785 | DCA INCTR /RESTORE INCTR IF IT HASN'T OVERFLOWED | |
2786 | SZL /IS THIS THE LAST READ? | |
2787 | ISZ INEOF /YES - SET END-OF-FILE FLAG | |
2788 | CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THE READ | |
2789 | RTR /FROM THE AMOUNT OF THE OVERFLOW | |
2790 | RTR /(IF ANY) AND THE STANDARD CONTROL WORD | |
2791 | TAD I3 | |
2792 | DCA INCTLW | |
2793 | CDF CIF 0 | |
2794 | CDF 10 | |
2795 | JMS I INHNDL /CALL INPUT DEVICE HANDLER | |
2796 | INCTLW, 0 /CONTROL WORD | |
2797 | INBUFP, INBUF /INPUT BUFFER | |
2798 | INREC, 0 /NUMBER OF RECORDS | |
2799 | JMP INERRX /SOME KIND OF HANDLER ERROR | |
2800 | INBREC, TAD INREC | |
2801 | TAD I2 | |
2802 | DCA INREC /UPDATE THE RECORD NUMBER | |
2803 | TAD INCTLW | |
2804 | AND IN7600 | |
2805 | CLL RAL | |
2806 | TAD INCTLW | |
2807 | AND IN7600 | |
2808 | CMA | |
2809 | DCA INCHCT /COMPUTE THE NEW CHARACTER COUNT | |
2810 | TAD INJMPP | |
2811 | DCA INJMP /RESET THE CHARACTER SWITCH | |
2812 | TAD INBUFP | |
2813 | DCA INPTR /AND THE WORD POINTER | |
2814 | JMP INCHAR /GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED | |
2815 | INERRX, ISZ INEOF /EITHER AN END-OF-FILE OR A ERROR | |
2816 | SMA CLA /WHICH TYPE WAS IT? | |
2817 | JMP INBREC /END OF FILE - RESUME PROCESSING | |
2818 | INERR, CLA CLL CML RAR /BAD - GIVE ERROR RETURN WITH NEGATIVE AC | |
2819 | EOFERR, JMP INRTRN | |
2820 | \fINJMP, HLT /3 WAY CHARACTER SWITCH | |
2821 | JMP ICHAR1 | |
2822 | JMP ICHAR2 | |
2823 | ICHAR3, TAD INJMPP | |
2824 | DCA INJMP | |
2825 | TAD I INPTR | |
2826 | AND IN7400 | |
2827 | CLL RTR | |
2828 | RTR /COMBINE THE HIGH-ORDER FOUR BITS OF | |
2829 | TAD INCTLW | |
2830 | RTR /THE TWO WORD TO FORM THE THIRD CHARACTER | |
2831 | RTR | |
2832 | ISZ INPTR | |
2833 | JMP INCOMN | |
2834 | ICHAR2, TAD I INPTR | |
2835 | AND IN7400 | |
2836 | DCA INCTLW /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR | |
2837 | ISZ INPTR /BUMP THE WORD POINTER | |
2838 | ICHAR1, TAD I INPTR | |
2839 | INCOMN, AND I377 | |
2840 | TAD IM232 | |
2841 | SNA /IS THE CHARACTER A ^Z? | |
2842 | JMP INNEWF /YES - GET A NEW FILE | |
2843 | TAD I232 /RESTORE THE CHARACTER | |
2844 | ISZ ICHAR /BUMP RETURN TO NORMAL RETURN | |
2845 | INRTRN, CDF CIF 0 /RESTORE CALLING FIELDS | |
2846 | JMP I ICHAR /--RETURN-- | |
2847 | ||
2848 | INCHCT, -1 | |
2849 | INFPTR, 7617 | |
2850 | INEOF, 1 | |
2851 | ||
2852 | INCTR=IOPEN | |
2853 | PINSET, INSET | |
2854 | I7617, 7617 | |
2855 | I1, INDEVH+1 | |
2856 | I7760, 7760 | |
2857 | I17, 17 | |
2858 | I2, INRECS | |
2859 | I3, INCTL+1 | |
2860 | I377, 377 | |
2861 | IM232, -232 | |
2862 | I232, 232 | |
2863 | I7700, 7700 | |
2864 | SERR4B, ISERR4 | |
2865 | ||
2866 | $ | |
2867 | /*********************************************************************** | |
2868 | \f |