Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape7 / EDIT.PA
CommitLineData
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
167BUFEND, 6100 /WARNING FOR END OF BUFFER
168P7700, 7700 /MONITOR CALL LOCATION
169
170M77, -77
171 NOP /RESERVED FOR ODT
172 NOP / "
173 NOP / "
174
175C77, 77
176M40, -40
177C100, 100
178C277, 277 /QUESTION MARK
179
180/AUTO-INDEX REGISTERS
181
182AXOUT, 0 /OUTPUT INDEX
183AXCOMB, 0 /COMBINE POINTER
184AXTEM, 0 /TEMPORARY INDEX
185AXIN, 0 /STORAGE INDEX
186
187/CONSTANTS
188
189M4, -4 /LETTER COUNT
190P177, 177
191MCR, -215
192M240, -240
193P40, 40
194C200, 200 /(START & RESTART)
195\f
196
197/LISTS
198
199/TAG SEARCH LIST-
200LIST7=.
201
202C240, 240 /SPACE
203 257 /COMMENT DELIMITER (/)
204
205/OUTPUT LIST
206LIST4=.
207
208ESC, 233 /ESC-V12
209CTAB, 211 /TAB
210C215, 215 /CARRIAGE RETURN
211 212 /LINE FEED
212 214 /FORM FEED
213 377 /RUBOUT
214 216 /CONTROL N (^N)
215M27, -27 /LIST DELIMITER
216
217/SPECIAL CHARACTER LIST FOR
218/INPUT IN TEXT MODE
219LIST5=. /USED AT AONE
220 240 /SPACE
221LIST6=. /USED AT SFOUND
222 225 / ^U
223C214, 214 /FORM FEED
224BELL, 207 / ^G (BELL)
225C212, 212 /LINE FEED
226CRO, 377 /RUBOUT
227
228LIST3=.
229 215 /LIST BRANCHER
230 000 /(SEARCH CHARACTER)
231RST3I, RESET3 /RESET AND SAVE BUFFER
232MCHIN1, -CHIN-1 /LIST DELIMITER
233\f
234
235/CONSTANTS AND POINTERS
236
237CCR=C215 /CARRIAGE RETURN
238CLF=C212 /LINE FEED
239MTABS, -10 /TAB COUNTER
240DELT, DELP
241CHI1, CHIN
242IGNORE, CHIN+1
243END, 200
244KEYBD, I33
245CCON, JMP I AXCOMB
246 COM1-1
247UTR1, UTRA
248FIN1, FIND
249LIS1, LIST
250LIS, LISTER
251NINE, 12
252NUMB, -272
253OUT1, OUT
254OUTL1=.
255LOW, OUTL
256CZ, NOP /CONTENTS OF START
257ONUM, GTOP
258SORTJ, SORTB
259PACK1, PACBUF
260
261SXS1, TAD CHAR /CONTENTS OF L3
262SXS2, SLOOK&177+5200 /JMP SLOOK
263L3I, L3 /PATCH POINTER
264L2I, L2 /CONTINUE SEARCH - LETTERS
265ENDLNI, ENDLN
266SPCNO, MOR+4 /PACK
267SPCGO, 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.
272CHAR, 0
273MOV1=.
274COUNTP, 0 /NUMBER OF PAGES
275CNT=. /PRINT COUNTER
276XCT, 0 /UNPACK SWITCH
277XCTIN, 0 /PACK SWITCH
278ECHOSW, 1 /NON-ZERO TO PRINT
279SAVE, 0
280TABIND, 0 /TABS OR SPACES SWITCH
281TEMP, 0 /V3
282THIS, 0 /LINE POINTER.
283OUTDEV, OUTL /POINTER TO OUTPUT SUBROUTINE
284GRBAGE, GARBAG /GARBAGE COLLECTOR
285MARK, 0 /OBJECT LINE IN G.C.
286XSAV, 0 /HOLD INPUT POINTER.
287BUFR, 200
288CFRS, FRST
289KILL1, KILL+3
290CHKARG, CHKARX
291ERSW, ERROR /ERROR ROUTINE
292L1I, L1
293
294EKILLL, 0 /E CMD SWITCH 1 IF E NOT ALLOWED
295
296/I-O RELATED POINTERS AND WORDS
297
298P232, 232 /V3
299BUFRDI, BUFRD /OR CHIN...IN DEVICE POINTER
300BUFWTI, BUFWT /WRITE OUTPUT TO DEVICE
301CLFLI, FLCLOS /SET TO CLOSE FILE
302P37, 37 /V3
303JMPCH, PUNCH&177+5200 /DESTROYED BY YANK
304\f
305/ERROR ROUTINE POINTERS
306
307SERR0I, SERR0
308SERR1I, SERR1
309SERR2I, SERR2
310SERR4I, SERR4
311
312GTEM=. /NEXT 6-BITS OF UNPACK
313DTEM=. /NEXT POINTER IN DELETE CHAIN
314
315
316/ERROR ROUTINE
317/REJECTS ILLEGAL COMMAND
318/AND TYPES ?
319
320ERROR=JMS .
321 0
322ELIM, 7600 /GRP2-CLA
323 TAD C277
324 JMS I OUTL1 /PRINT "?"
325CZONE, TAD CZ /RESET PATCHES
326 DCA I TE1
327JMPTE1, JMP I TE1 /*RETURN TO COMMAND MODE*
328
329
330UPAROI, UPAROW /GENERATE ^ CHARACTER
331MONITOR, MONIT /MONITOR EXIT ROUTINE
332STRIND, 0
333STRFIN, SFIND1
334TE1, START
335
336/VARIABLES
337THSN, 0 /CURRENT LINE NUMBER
338LSTN, 0 /LAST LINE NUMBER
339TCNT, 0 /TAB COUNT
340ADD, 0
341ARG0, 0
342ARG1, 0240
343ARG2, -1
344
345POTYPE, OTYPE
346COMM5, COM5
347K7600, 7600
348TEMPO, 0
349K1210, 1210
350X203, -203
351K1320, 1320
352
353FRST, 0 /FIRST LINE ADDRESS
354MOV2=TEMPO
355LSTCHK, 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)
366START, 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
384GTOP, DCA ARG0 /CLEAR ARGUMENTS
385 DCA ARG2
386/HANDLER FOR SPACE OR +
387GEXP, TAD NONE
388/HANDLER FOR -
389GMIN, TAD CMPT
390 DCA G2 /SET SIGN TO + OR -
391DBCV2, DCA TEMP
392CMCHK, 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
400GLOM, CLA /NO
401 TAD TEMP /GET ACCUMULATED NUMBER
402G2, 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
420RETRN, 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
441LIST2=. /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
462SIGN, "# /V3 VERSION #
463NONE, -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
475SORTB, 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
484CMPT, 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
494SEX, 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
503COUNT, 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
514OPS2, 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
537EOL, 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
552APP1, TAD LSTN /APPEND
553 DCA ARG0 /RESET ARG0 TO END OF TEXT
554 JMP INS
555CNGE1, JMS I DELT /CHANGE - DELETE LINES AND
556XNS1, TAD ARG0 /INSERT
557 SNA CLA /ANY ARGUMENTS?
558INS, 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
570AONE, TAD BUFR /BEGIN LINE
571 DCA AXIN
572 DCA XCTIN
573MOR, 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
585PACBUF, 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
601TR1, TAD CHAR /240-337 EXCEPT 277
602 AND C77 /MASK OUT LEFT 6 BITS
603 JMS PCK1 /PACK IT
604 JMP I PACBUF /--RETURN--
605ESCA, 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
613PCK1, 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--
624ROT, 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
639UTRA, 0
640 CLA CMA /INITIALIZE TO -1
641 DCA UTEST
642EXTR, 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
653GET3, CLA CMA /RESET L - R SWITCH
654 DCA XCT
655 TAD GTEM
656GET4, 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
663GET5, 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
680INLIST=.
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
690FULL, 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
700MORI, 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
711SETUP, 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
730DELP, 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
739DELP1, 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 <
759EXLAS, CLA CLL CMA RAL /PRINT LAST LINE - AC=7776=-2
760/HANDLER FOR > OR LINE FEED
761EXNEX, 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
769LIST, 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
778LISTER, 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
789L0, TAD ARG0
790 CIA
791 TAD LSTN
792 SPA CLA /ARGUMENTS IN RIGHT RANGE?
793L1, 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)
812L2, 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*
819L3, 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
827CPTSTI, CTRLP /TEST FOR ^O AND ^C
828C317, 317
829\f
830/------------------------------------------------------------
831/SEARCH ROUTINES
832
833
834/HANDLER FOR CARRIAGE RETURN
835SRETN, 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
842SLOOK, 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
852SCONT, 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
857SLINE, 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
864SBAR, TAD CCR /CTRL-U
865 JMS I OUT1 /OUTPUT CARRIAGE RETURN
866 TAD BUFR /RESTART PACK BUFFER
867 DCA AXIN
868 DCA XCTIN
869/-------------------------------------------------------------------
870SFOUND, 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
875SGOT, 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
886CHIN, 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
903FIND, 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
915FIND2, CDF 10
916 TAD I SAVE /CHAIN THROUGH LIST
917 CDF 0
918 SZA /FAILSAFE
919FIND1, 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
926CON, 6030 /CONVERSION CONSTANTS
927 7634
928 7766
929 7777
930\f
931BOX=COUNTP
932VAL=ARG0
933
934/HANDLER FOR : OR =
935/PRINTS REQUESTED LINE NUMBER
936/WHICH IS FOUND IN ARG2 ON ENTRY
937
938PRNT, 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
944FLOOZ, 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
954XYZ, 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
968C260, 260
969ADDR, TAD CON
970K50, 50
971K7430, 7430
972\f
973/CHARACTER OUTPUT ROUTINE
974
975OUT, 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
988OUTX, JMS I OUTDEV /OUTPUT THE CHARACTER
989 JMP I OUT /--RETURN--
990
991
992/CARRIAGE RETURN HANDLER
993
994OUTCRL, 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
1003OUTRT, 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
1015OUTTAB, 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
1036XCRET, 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
1049TAGLIST=.
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
1062OUTL, 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
1073I33, 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
1085CNGEL, CNGE1-XNS1
1086XNSL, XNS1-APP1
1087
1088/HANDLER FOR C COMMAND
1089CNGE, TAD CNGEL
1090
1091/HANDLER FOR I COMMAND
1092XNS, TAD XNSL
1093
1094/HANDLER FOR A COMMAND
1095APP, TAD APPL
1096 DCA DEST /RETURN POINT
1097 ISZ ECHOSW
1098 JMS I PSETUP
1099 CHIN /KEYBOARD INPUT
1100DEST, APP1
1101
1102
1103/SPECIAL OUTPUT LIST
1104OUTLIS=.
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
1117CTRLP, 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
1128M14, -14
1129CTCK, 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
1141PUNCH, ISZ ECHOSW
1142 TAD BUFWTI /SETUP TO WRITE INTO OUTPUT BUFFER
1143 DCA OUTDEV
1144PUNC, JMS I LIS /WRITE THE EDITOR BUFFER
1145 TAD C214 /OUTPUT FORM FEED
1146 JMS I OUTDEV
1147/HANDLER FOR T COMMAND
1148PUNCT, 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
1168TELE=.
1169TELEN, TSF
1170 JMP .-1
1171 DCA ECHOSW /INHIBIT ECHO
1172 JMS I PSETUP /SETUP TO READ FROM
1173 BUFRD /INPUT DEVICE
1174APPL, APP1 /APPEND TEXT TO BUFFER
1175
1176/HANDLER FOR Y COMMAND
1177
1178YANK, TAD COM1 /YANK KILLS 'P' PART OF N
1179 JMP COMBOA
1180
1181/HANDLER FOR N COMMAND
1182
1183COMBO, TAD JMPCH /YANK WIPES COM1-1
1184COMBOA, 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
1192COMB, 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
1199COM1, 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
1205COM5, 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
1209DUMB1, JERK1
1210PSETUP, SETUP /V3
1211\f
1212/-----------------------------------------------------------------------
1213
1214LIST1=.
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 (:)
1233LIST1A, 215 /CARRIAGE RETURN
1234 225 /^U
1235 203 /^C
1236
1237
1238/HANDLER FOR G COMMAND
1239
1240GETTAG, 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
1246GTAG2, 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
1259MP1=ARG1
1260MP2=ARG0
1261MP3=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
1270MOVEM, 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
1303SRNLST=.
1304 SBAR /BACK ARROW (_)
1305 L2 /FORM FEED
1306 SCONT /BELL
1307 SLINE /LINE FEED
1308 RUB1 /RUB OUT
1309
1310LISTGO=.
1311 SRETN /CARRIAGE RETURN
1312 SGOT /SEARCH CHARACTER FOUND
1313\f
1314/HANDLER FOR RUBOUT IN TEXT OR SEARCH
1315RUB1, 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
1340RUB3, CMA
1341 DCA XCTIN
1342 CMA
1343 TAD AXIN
1344 DCA AXIN
1345 TAD I MOV1
1346 AND P7700
1347RUB4, DCA ADD
1348 CDF 0
1349 JMP I IGNORE /CHIN+1
1350RUB2, 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
1358SPACES, TAD ECHOSW
1359 CLA /OR SZA CLA IF B OPTION
1360 JMP I SPCNO /PACK IT - (MOR+4)
1361 CMA /SET COUNTER
1362SP2, 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
1380MOVE, 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
1391OPS1, 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)
1412OPS1A, RETRN /RETURN
1413/-----------------------------------------------------------------------
1414OLDTE1, START /^U
1415 MONIT /^C
1416\f
1417/HANDLER FOR E COMMAND
1418
1419ENDFIL, 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
1430COMBOP, COMBO
1431FLCLSI, JMP I CLFLI
1432AONEI, AONE
1433
1434/HANDLER FOR ^U IN TEXT MODE
1435CTRLU, JMS CTRLU1 /GENERATE A ^U
1436 JMP I AONEI /AND CONTINUE
1437
1438/PRINT ^U
1439CTRLU1, 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--
1445C325, 325
1446
1447/CHECK VALIDITY OF ARGUMENTS
1448/FOR D COMMAND
1449CHKARX, 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 .
1460PERI, TAD THSN
1461 SKP
1462/HANDLER FOR /
1463SLAS, 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
1482ENDLN, 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
1505MONIT, 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
1512FXSTWD, 0
1513 CIF 10
1514 JMS I JSWSET /IF NONZERO TEXT,SAVE BUFFER
1515 JMP I FXSTWD /--RETURN--
1516SPCP1A, SPACES+1
1517BUFRD1, BUFRD+1
1518
1519/RESET POINTERS AND SAVE BUFFERS
1520
1521RESET3, JMS FXSTWD
1522CIFTEN, 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
1546JSWSET, 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
1560Q, 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-
1566FLCLOS, 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
1576FLCLS1, 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/
1583PTCH1, PATCH1
1584\f
1585
1586/INPUT ROUTINE FROM DEVICE
1587/VIA INPUT DEVICE HANDLER
1588BUFRD, 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
1600ERRD, 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
1612ICHARI, ICHAR /CHARACTER ROUTINES
1613FLCLI, FLCLS1
1614
1615\f
1616/OUTPUT ROUTINE TO DEVICE
1617/VIA OUTPUT DEVICE HANDLER
1618
1619BUFWT, 0
1620 CIF 10
1621 JMS I OCHARI /OUTPUT A CHARACTER
1622 JMP ERWT /OUTPUT FAILED
1623BUFRTN, TAD BUFWTI /RESET OUTPUT DEVICE HANDLER POINTER
1624 DCA OUTDEV
1625 JMP I BUFWT /--RETURN--
1626
1627ERWT, 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
1651CLSREC, 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*
1659PATCH2, 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
1669FXSWDI, FXSTWD
1670OCNTI, OUCCNT
1671PANICI, PANIC
1672OCHARI, OCHAR
1673MORECS, -OURECS+1 /THIS ALLOWS US TO 'MANUALLY' WRITE
1674 /A FORM FEED AND A ^Z.
1675
1676POINT, FULLST-1
1677OREC, OUREC
1678OHNDL, OUHNDL
1679
1680/RESET POINTERS STORED PREVIOUSLY
1681BUFRET, TAD PPTE1
1682 DCA TE1
1683 TAD PTE1
1684 DCA I TE1
1685 TAD PELIM
1686 DCA ELIM
1687 JMP BUFRTN
1688
1689PPTE1, 0
1690PELIM, 0
1691PTE1, 0
1692OCLSI, OCLOSE /V3 FILE CLOSE ROUTINE
1693
1694/-----------------------------------------------------------------------
1695
1696/ERROR MESSAGE- FULL -
1697FULLST, 306 /F
1698 325 /U
1699 314 /L
1700 314 /L
1701 215 /CARRIAGE RETURN
1702 212 /LINE FEED
1703 0 /DELIMITER
1704\f
1705SRCBUF, ZBLOCK 24 /SEARCH BUFFER
1706
1707
1708/SPECIAL CHARACTER LIST FOR STRING SEARCH
1709SLST=.
1710 247 /"
1711 242 /'
1712 377 /RUBOUT
1713 203 /^C
1714 225 /^U
1715/-----------------------------------------------------------------------
1716NEXBUF, DUMB1&177+5600 /JMP I DUMB1
1717
1718/DISPATCH LIST FOR STRING SEARCH
1719
1720OSLST, 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
1730UPAROW, 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--
1739C336, 336
1740
1741
1742/HANDLER FOR ^U DURING STRING SEARCH
1743RLEAS, JMS I (CTRLU1
1744 JMP I (START /^U GETS US BACK TO #
1745
1746/HANDLER FOR ALTMODE
1747
1748AMODE, 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
1758JERK, DCA STRIND /SETUP FOR SEARCH
1759JERK1, 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
1769GMOR, 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
1787BARROW, ISZ STRIND /CONTINUES LOOKING FOR EXISTING STRING
1788 ISZ THSN /INCREMENT FOR NEXT LINE
1789 JMP JERK1
1790CNTRI, CNTR
1791
1792/HANDLER FOR "
1793
1794DBLQUO, ISZ THSN /USES STRING NOW IN BUFFER
1795 ISZ STRIND /NO SETUP REQUIRED
1796 JMP AMODE+1
1797
1798/HANDLER FOR B COMMAND
1799
1800CORSPC, 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
1809ZROCOR, DCA ARG2
1810 JMP I .+1
1811 PRNT
1812K360, 360
1813\f
1814/HANDLER FOR K COMMAND
1815
1816KILL, 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
1831PIASGN, 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*
1841PIHND, 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
1848PIRETN, PANOPN /GO OPEN OUTPUT FILES
1849PIHNDL, INHNDL
1850IHPAGE, I1 /I1 CONTAINS "INDEVH+1"
1851IDVNO, INDEV
1852PINEOF, INEOF
1853
1854/HANDLER FOR # COMMAND
1855
1856VERSN, 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
1871SFIND1, 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
1883RLOOP, 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
1892STORE, TAD CHAR /STORE CHARACTER IN SEARCH BUFFER
1893 DCA I AXIN
1894 JMP RLOOP
1895
1896/HANDLER FOR "
1897QUO2, TAD THSN /START AT .+1
1898/HANDLER FOR '
1899QUO1, 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
1906SFIND2, 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
1917COMBAK, 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
1930UPK1, 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
1943NOCR, 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
1953UPK, 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
1962WREK, DCA XCT
1963NOTSO, JMS NUCHAR /GET FIRST CHARACTER OF SEARCH STRING
1964 DCA CHFND
1965 JMP UPK1 /TRY AGAIN
1966\f
1967STFIN, TAD CHFND /END OF STRING-DO COUNTS MATCH?
1968 TAD CNTR
1969 SNA CLA
1970 JMP GOOD /YES-SEARCH SUCCESSFUL
1971ER1, TAD LSTN /IF BUFFER EMPTY, SET .=0
1972 SZA CLA
1973 IAC
1974 DCA THSN
1975 SKP /CAUSE ERROR RETURN (?)
1976GOOD, ISZ SFIND1 /INCREMENT RETURN
1977 JMP I SFIND1 /--RETURN--
1978
1979/GET NEXT SEARCH CHARACTER
1980NUCHA, 0
1981 TAD .-1 /SET TO RETURN FROM NUCHAR
1982 DCA NUCHAR
1983 JMP NEXX
1984
1985/GET FIRST CHARACTER OF SEARCH STRING
1986NUCHAR, 0
1987 TAD SBUF
1988 DCA AXIN
1989NEXX, 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
1996ENDA=SRCBUF-1
1997ATSIGN, 244
1998TMP1, 0
1999TMP2, 0
2000CNTR, 0
2001FMATCH, 0
2002BUFCNT, 0
2003NEXTPT, 0
2004CHFND, 1 /MUST BE NONZERO INITIALLY
2005SBUF, ENDA
2006MSCNT, -24
2007
2008/HANDLER FOR RUBOUT IN SEARCH STRING
2009
2010FORGET, 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
2027GARBAG, 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
2034COLECT, 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
2042FINONE, 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
2049GBG2, 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
2058GBGEND, 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
2084LINPTR, 0
2085K63, 63
2086
2087CGEPTR, 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
2100VIEW, 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
2113LPT, 0
2114 6666 /LLS
2115 6661 /LSF
2116 JMP .-1
2117 CLA
2118 JMP I LPT /--RETURN--
2119\f/HANDLER FOR ,
2120
2121FIRS, TAD ARG2
2122 JMP I ONUM
2123
2124K6215, 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
2137SERR4, IAC
2138SERR3, IAC
2139SERR2, IAC
2140SERR1, IAC
2141SERR0, 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
2158P260, 260
2159C303, 303
2160
2161DELE, JMS I DELT /DELETE THE LINES
2162 TSF
2163 JMP .-1
2164 JMP I TE1
2165
2166CTRLN, TAD C316
2167 JMS I UPAROI /ECHO ^N
2168 JMP I .+1
2169 OUTX+1
2170C316, 316
2171/
2172PATCH1, 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/
2181NOROOM, ERWT+2
2182OCLSE, 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
2192INIT, 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
2198LOOP, 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
2213K6600, 6600 /FIELD 1 STARTING ADDRESS
2214
2215COUNTA, 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
2226ESCPA, 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
2246RUBPA, 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
2255RP2, JMS I OUT1 /PRINT
2256 JMP I RUBPA /DONE, DELETE THE CHAR
2257RP1, 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
2263SPLAT, 334 /ACKNOWLEDGE RUBOUT
2264
2265\f/ROUTINE TO HANDLE ESCAPE OUTPUT
2266/V12 - 27-JUN-77 ES
2267
2268ESCOUT, 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
2285NOPUNC
2286*6600
2287ENPUNC
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
2310START1, JMS I L200 /CALL USER SERVICE ROUTINES
2311 5 /*COMMAND DECODER*
2312 0
2313CHN, CDF 10
2314 TAD K7620 /RESET OUTDMP
2315 DCA I THOLE
2316 TAD I P7600A /OUTPUT LIST
2317 AND C17
2318SZCL, 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
2323NXTOP, 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
2329P7600A, 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*
2343DVHAND, 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
2350JLSTN, LSTN /PAGE ZERO. 'AND' SOME ADDRESS
2351FILOP, 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
2356PANOPN, 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
2389GINDVH, CDF CIF 0
2390 JMP I .+1
2391 PIASGN
2392
2393ISERR3, 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
2398ISERR4, 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
2403ISERR1, 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
2409L200, 200
2410STRTUP, START
2411PANIC, 0
2412SPCP1, SPACES+1
2413IOPENI, IOPEN
2414OOPENI, OOPEN
2415EKILSW, EKILLL
2416ODMP, OUTDMP
2417OHANDL, O1
2418C17, 17
2419PARAM, MPARAM
2420L7700, 7700
2421ASERR1, SERR1
2422ASERR3, SERR3
2423ASERR4, SERR4
2424K5000, 5000 /OUTPUT BUFF CONTROL WORD
2425OUSTPI, OUSETP
2426THOLE, TSTHOL
2427K7620, 7620
2428PTEMP, TEMP
2429
2430/***********************************************************************
2431\f *3400
2432/***********************************************************************
2433/CODE MOVED TO 17000-17173
2434
2435NOPUNC
2436*7000
2437ENPUNC
2438
2439 232 /THIS PAGE IS ^Z BUFFER
2440/SET UP ROUTINE FOR OUTPUT
2441/INITIALIZES CHARACTERS POINTERS
2442OUSETP, 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
2458OCHAR, 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
2476OUJMP, HLT /3 WAY CHARACTER SWITCH
2477 JMP OCHAR1
2478 JMP OCHAR2
2479OCHAR3, 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
2503OCHAR2, TAD OUPTR
2504 DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO
2505 ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD
2506OCHAR1, TAD OUTEMP
2507 DCA I OUPTR
2508OUCOMN, ISZ OCHAR
2509OUCRET, HLT /RESTORE CALLING FIELDS
2510 JMP I OCHAR /--RETURN--
2511
2512OUTEMP, 0
2513OUPOLD, 0
2514OUPTR, 0
2515OUJMPE, JMP OUJMP
2516OUDWCT, 0
2517OUTINH, 0
2518\f/FETCH OUTPUT DEVICE CONTROL WORD
2519
2520OTYPE, 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
2530OTRTN, HLT /RESTORE CALLING FIELDS
2531 JMP I OTYPE /--RETURN--
2532PSTOP, CIF 0 /PRINTS ? WHEN NO OUTPUT DEV
2533 ERROR
2534
2535INSET, 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
2547INSTRT, 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
2552SETJSB, 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
2562JSBTM, 0
2563PJSBTS, 7746
2564PLASTN, LSTN
2565
2566DCB=7760
2567C1, OUCTL&3700
2568C2, OUBUF
2569C377, 377
2570M203, -203
2571CDIF0, CDF CIF 0
2572K7400, 7400
2573OUCT, OUCTL
2574C7600, 7600
2575P17, 17
2576DCBM1, DCB-1
2577DMPO, OUTDMP
2578PANICJ, PANIC
2579/***********************************************************************
2580\f *3600
2581/***********************************************************************
2582/CODE MOVED TO 17200-17376
2583NOPUNC
2584*7200
2585ENPUNC
2586/OPEN OUTPUT FILE
2587
2588O17, 17
2589OOPEN, 0
2590OU7600, 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*
2601OUHNDL, 2600 /OUTPUT DEVICE HANDLER ENTRY
2602 JMP I SERR4A /**DEVICE HANDLER ERROR**4**
2603OUENTR, TAD I OU7600
2604 JMS I O200 /CALL USER SERVICE ROUTINES
2605 3 /*ENTER OUTPUT FILE*
2606OUBLK, 7601 /REPLACED WITH STARTING BLOCK
2607OUELEN, 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
2615OORETN, JMP I OOPEN
2616OEFAIL, 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
2621O200, AND O17 /MAKE THE REQUESTED LENGTH ZERO
2622 DCA I OU7600
2623 JMP OUENTR /TRY, TRY AGAIN
2624ONTERR, CLA CLL CML RAR /AC=2
2625 JMP OORETN /TAKE THE ERROR RETURN WITH AC<0
2626ONOFIL, 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
2636TSTHOL, 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
2641OUCTLW, 0 /CONTROL WORD
2642 OUBUF /BUFFER ADDRESS
2643OUREC, 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
2649OUERR, JMP I OUTDMP /--RETURN--
2650\f
2651/CLOSE OUTPUT FILE
2652OCLOSE, 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
2667FILLLP, 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
2683NODUMP, 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*
2688OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME
2689OUCCNT, 0
2690 SKP /ERROR WHILE CLOSING THE FILE
2691OCISZ, ISZ OCLOSE
2692OCRET, CIF CDF 0 /RESTORE CALLING FIELDS
2693 JMP I OCLOSE /--RETURN--
2694PANICC, PANIC
2695\f/CONVERT OUTPUT CONTROL WORD
2696/TO NUMBER OF RECORDS
2697OUNREC, 0
2698 TAD OUCTLW
2699 CLL RTL
2700 RTL
2701 RTL
2702 AND O17
2703 JMP I OUNREC /--RETURN--
2704
2705K7660, SNL SZA CLA
2706O1, OUDEVH+1
2707O7700, 7700
2708O2, OUTINH
2709O3, OUSETP
2710O7760, 7760
2711O232, 232
2712O4, OCHAR
2713O5, OTYPE
2714O100, 100
2715O77, 77
2716O6, OUDWCT
2717O7, OUCTL&3700
2718O8, 4000+OUFLD
2719SERR4A, 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
2728NOPUNC
2729*7400
2730ENPUNC
2731
2732/PREPARE TO OPEN NEW INPUT FILE
2733
2734IN7400, 7400
2735IOPEN, 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--
2742INPTR, 0
2743INDEV, 0
2744
2745/INPUT A CHARACTER
2746
2747ICHAR, 0
2748IN7600, 7600
2749INCHAR, CDF INFLD
2750 ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH
2751 ISZ INCHCT
2752INJMPP, JMP INJMP
2753 TAD INEOF
2754 SNA CLA /DID LAST READ YIELD END-OF-FILE?
2755 JMP INGBUF /NO-DO ANOTHER
2756INNEWF, 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*
2767INHNDL, 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
2781INGBUF, 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
2796INCTLW, 0 /CONTROL WORD
2797INBUFP, INBUF /INPUT BUFFER
2798INREC, 0 /NUMBER OF RECORDS
2799 JMP INERRX /SOME KIND OF HANDLER ERROR
2800INBREC, 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
2815INERRX, 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
2818INERR, CLA CLL CML RAR /BAD - GIVE ERROR RETURN WITH NEGATIVE AC
2819EOFERR, JMP INRTRN
2820\fINJMP, HLT /3 WAY CHARACTER SWITCH
2821 JMP ICHAR1
2822 JMP ICHAR2
2823ICHAR3, 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
2834ICHAR2, 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
2838ICHAR1, TAD I INPTR
2839INCOMN, 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
2845INRTRN, CDF CIF 0 /RESTORE CALLING FIELDS
2846 JMP I ICHAR /--RETURN--
2847
2848INCHCT, -1
2849INFPTR, 7617
2850INEOF, 1
2851
2852 INCTR=IOPEN
2853PINSET, INSET
2854I7617, 7617
2855I1, INDEVH+1
2856I7760, 7760
2857I17, 17
2858I2, INRECS
2859I3, INCTL+1
2860I377, 377
2861IM232, -232
2862I232, 232
2863I7700, 7700
2864SERR4B, ISERR4
2865
2866$
2867/***********************************************************************
2868\f