Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape7 / EDIT.PA
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