1 /10 OS/8 TECO VERSION 5
11 /COPYRIGHT (C) 1974,1975,1976,1977 BY DIGITAL EQUIPMENT CORPORATION
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
45 \f/BROUGHT TO YOU BY: RUSS HAMM, O.M.S.I., AND RICHARD LARY (IN THAT ORDER)
46 /WITH ASSISTANCE FROM MARIO DENOBILI OF THE P?S
47 /PATCHES INCORPORATED BY S.R. ON 5-AUGUST-75 FOR OS/8 V3C:
49 /1. UPDATED VERSION # TO V4
50 /2. INCORPORATED PATCHES #S 1 & 2 (V302 AND V303)
51 / PREVENTS \ FROM GOING OUTSIDE OF BUFFER
52 / RESETS CFLAG TO PREVENT ARGUMENT ERROR EVERY 4096 TIMES IN LOOP
54 / CHANGES FOR V5: -S.R.-
57 /4. EXPANDED ERROR MESSAGES
58 /5. DOCUMENTED CORE LAYOUT
59 /6. ADDED "T, "S, "F, "U, AND "R
61 /8. MADE DEFAULT ITERATION COUNT TRULY INFINITE
64 /11. ADDED SOME SAFETY ERROR MESSAGES
65 / (I) ERROR IF Y HAS A NUMERIC ARGUMENT
66 / (II) ERROR IF TWO ARGUMENTS ARE SPECIFIED TO D
67 /12. REMOVE ^R (OBSOLETE COMMAND)
68 /13. REMOVE "A AND "B (AFTER AND BEFORE)
69 /14. ADDED 13-BIT ARITHMETIC
70 /15. MADE = AND \ GIVE SIGNED RESULTS (DECIMAL ONLY)
71 /16. ALLOW 13-BIT NUMERIC Q-REGISTERS.
72 / THIS IS ACCOMPLISHED BY RESERVING THE HIGH ORDER BIT
73 / OF THE LENGTH WORD. STRING PORTION OF Q-REGISTER
74 / NOW RESTRICTED TO 2047 CHARACTERS. IT GETS CHECKED BY
75 / ^U AND X. BELL RINGS WITHIN 12 CHARACTERS OF FILLING
76 / UP COMMAND STRING Q-REGISTER.
77 /17. STORED LINK AS LOW ORDER BIT IN NLINK IN CASE WE EVER
78 / WANT TO GO TO 24-BIT ARITHMETIC.
80 /19. P DOESN'T CREATE FORM FEEDS
81 /20. ALLOW @ MODIFIER WITH ER, EW, EB.
86 /25. F IS ILLEGAL IF NOT FOLLOWED BY S OR N
87 /26. W IS NOW AN ILLEGAL COMMAND (EXCEPT ON -12)
89 /28. Y AND _ GIVE ERRORS IF DATA IS GOING TO BE LOST
90 / (IF OUTPUT FILE IS OPEN AND BUFFER IS NOT EMPTY)
91 /29. CASE FLAGGING IMPLEMENTED
92 /30. "< AND "> ARE SYNONYMOUS WITH "L AND "G
93 /31. ^G<SPACE> AND ^G*
95 /33. == NOW PRINTS NUMBER IN OCTAL
96 /34. EUFLAG AND ETFLAG IMPLEMENTED
97 /35. CASE FLAGGING WORKS
98 /36. IMAGE MODE (ET BIT 11) APPLIES TO T, ^A, AND N^T
99 / IT DOES NOT APPLY TO :G
100 /37. ERROR IF TRY TO DO AN EB TO A .BK FILE (IT DOES AN ER)
101 /38. VT AND FF ARE NOW LINE TERMINATORS
102 /39. BELL ECHOES AS ^G AS WELL AS RINGING BELL
104 /41. REMOVED ^Z COMMAND
105 /42. CHANGED ^V TO EO
107 /44. MEMORY RESIDENT OVERLAYS IF MORE THAN 12K
108 /45. LONG FORM ERROR MESSAGES ON 1EH
109 /46. ET FLAG 8'S BIT AFFECTS ECHOING OF ^T
110 /47. NEGATIVE OR 0 ITERATION SKIPS
115 /1. LARGE T OR X AND ONLY 1 BLOCK LEFT IN OUT DEV
116 /2. ^S DOESN'T KEEP SCREEN ON
117 /3. FIX BATCH INTERRACTION
118 /4. MAKE VT AND FF SIMULATION INDEPENDENT OF TAB
121 VERSN= 5 / VERSION NUMBER - CHANGE WITH EVERY EDIT
122 OCTAL / LAST EDIT 12-FEB-76
123 \fIN= 6200 /INPUT BUFFER AT 06200
124 OUT= 5200 /OUTPUT BUFFER AT 05200
125 ZMAX= 7640 /MAX 4000[10] CHARACTERS IN TEXT BUFFER
126 QMAX= 3720 /MAX 2000[10] Q-REGISTER CHARS IN 8K
127 Q12MAX= 5600 /MAX 2944[10] Q-REGISTER CHARS IN 12K
128 CHNSTR= 46 /38 CHARACTER STRING PASSED ON CHAIN
131 MTWO= CLA CLL CMA RAL
132 MTHREE= CLA CLL CMA RTL
135 \f/THINGS WE WOULD LIKE TO ADD:
148 /NON-EXACT SEARCH MODE
150 /ERFILESPEC/S FOR SUPERTECO
153 /CHECK INTO SEARCHES IN ITERATIONS
163 /ET BIT 15 SHOULD BE LOWER
165 \f/*****************************************
166 / TECO ERROR MESSAGES:
167 /*****************************************
169 / TECO ERROR MESSAGES CONSIST OF A QUESTION MARK AND THREE LETTERS
170 / TYPING "?" IMMEDIATELY AFTER AN ERROR MESSAGE PRINTOUT PRINTS
171 / THE CURRENT COMMAND LINE UP TO THE ERROR CHARACTER.
173 /1 ?ILL ILLEGAL COMMAND
174 /2 ?UTC INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF COMMAND STRING)
175 /3 ?IQN NON-ALPHANUMERIC Q-REGISTER NAME
176 /4 ?PDO PUSHDOWN OVERFLOW (MACROS & ITERATIONS NESTED TOO DEEPLY)
177 /5 ?MEM TEXT BUFFER OVERFLOW
178 /6 ?STL SEARCH STRING TOO LARGE ( >31 CHARS)
179 /7 ?ARG NUMBER MISSING BEFORE COMMA
180 / OR TWO ARGUMENTS SPECIFIED TO D
181 / OR 3 NUMERIC ARGUMENTS
182 /8 ?IFN ILLEGAL FILE NAME IN "ER","EW" OR "EB" COMMAND
183 /9 ?SNI SEMICOLON ON COMMAND LEVEL
184 /10 ?BNI ITERATION CLOSE (>) WITHOUT MATCHING OPEN (<)
185 /11 ?POP ATTEMPT TO MOVE POINTER OUTSIDE OF TEXT BUFFER
186 /12 ?QMO Q-REGISTER STORAGE OVERFLOW
187 /13 ?UTM INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF MACRO)
188 /14 ?OUT OUTPUT FILE TOO BIG OR OUTPUT PARITY ERROR
189 /15 ?INP PARITY ERROR ON INPUT FILE
190 /16 ?FER FILE ERROR: CAN MEAN EITHER
191 / A) INPUT FILE NOT FOUND ON "ER" COMMAND
192 / B) CANNOT ENTER OUTPUT FILE ON "EW" OR "EB" COMMAND
193 / C) DEVICE SPECIFIED FOR FILE DOES NOT EXIST
194 / D) "EB" COMMAND GIVEN ON NON-FILE-STRUCTURED DEVICE
195 /17 ?FUL OUTPUT COMMAND WOULD HAVE OVERFLOWED OUTPUT FILE
197 /18 ?NAY NUMERIC ARGUMENT SPECIFIED WITH Y COMMAND
198 /19 ?IEC E FOLLOWED BY AN ILLEGAL CHARACTER
199 /20 ?IQC " FOLLOWED BY AN ILLEGAL CHARACTER
200 /21 ?NAE NO NUMERIC ARGUMENT TO THE LEFT OF AN =
201 /22 ?NAU NO NUMERIC ARGUMENT TO THE LEFT OF A U
202 /23 ?NAQ NO NUMERIC ARGUMENT TO THE LEFT OF A "
203 /24 ?SRH FAILING SEARCH AT COMMAND LEVEL
204 /25 ?NAP NEGATIVE OR ZERO ARGUMENT TO P
205 /26 ?NAC NEGATIVE ARGUMENT TO COMMA
206 /27 ?NYI CASE SUPPORT NOT IMPL (USE W FOR WATCH)
208 /29 ?NAS NEGATIVE OR ZERO ARGUMENT WITH A SEARCH
209 /30 ?WLO WRITE LOCKED SYSTEM DEVICE
210 /31 ?IFC F FOLLOWED BY AN ILLEGAL CHARACTER
211 /32 ?YCA Y (OR _) COMMAND ABORTED BECAUSE DATA WOULD BE LOST
212 /33 ?CCL CCL NOT FOUND OR EG ARGUMENT TOO LONG
213 /34 ?XAB EXECUTION ABORTED BY ^C
214 /35 ?NYI CASE SUPPORT NOT IMPL (USE EO FOR VERSION)
215 /36 ?NFO ATTEMPT TO OUTPUT WITHOUT OPENING AN OUTPUT FILE
216 \f/ CORE LAYOUT AND OVERLAY STRUCTURE
220 /BUFFER 8K VERSION 12K VERSION
222 /INPUT BUFFER 06200-07200 25600-27600
223 /OUTPUT BUFFER 05200-06200 05200-07200
224 /Q-REG STORAGE OVER TEXT BFR 20000-25600
228 /HANDLER PDP-8 VERSION PDP-12 VERSION
230 /INPUT HANDLER 7200-7600 7200-7400
231 /OUTPUT HANDLER 4000-4400 7400-7600
232 /SIZE OF HNDLR 2-PAGES 1-PAGE
233 /DISPLAY CODE NONE 4000-4400
237 /ALL OVERLAYS ARE TWO PAGES LONG AND RESIDE IN CORE
238 /AT LOCATIONS 3200-3600 WHEN RUNNING. THE I-OVERLAY
239 /INITIALLY RESIDES IN THESE LOCATIONS.
241 /OVERLAY BLOCK INITIAL LOCATION CONTENTS
243 / I-OVERLAY 40 3200-3600 ER,EW,EB
244 / Q-OVERLAY 41 5600-6200 ", O, SKPSET
245 / E-OVERLAY 42 6200-6600 ERROR MESSAGE PROCESSOR
246 / X-OVERLAY 43 6600-7200 EX,EC,EG,EK,EF (EA,EI,EN,EP)
247 / F-OVERLAY 44 7200-7600 ED,EH,EO,ES,ET,EU (EV)
261 /EACH OVERLAY IS ASSIGNED A LOCATION AT THE BEGINNING OF PAGE 3200.
262 /IF THIS LOCATION IS 0 (AS IT ALWAYS IS), THEN THAT OVERLAY IS NOT
263 /IN CORE. IF IT IS NOT 0, THEN THIS LOCATION CONTAINS THE
264 /BLOCK NUMBER TO READ IN THAT OVERLAY.
265 /THUS EACH OVERLAY HAS POINTERS TO ALL THE OTHER OVERLAYS.
268 /IN 16K MACHINES, FIELD 3 IS USED TO HOLD OVERLAYS
279 /INITIAL MEMORY LAYOUT
282 /3200-3577 OVERLAY AREA (INITIALLY I-OVERLAY)
284 /4000-4377 PDP-12 DISPLAY ROUTINE
286 /5200-5577 INITIALIZATION CODE
287 /5600-6177 Q-OVERLAY CODE
288 /6200-6577 E-OVERLAY CODE
289 /6600-7177 X-OVERLAY CODE
290 /7200-7577 F-OVERLAY CODE
294 /4400-7377 EXTENDED ERROR MESSAGES
296 \f/** TECO KLUDGES ** /7/27/73
297 /ONE OF THE REASONS WHY TECO GETS SO MANY OPERATIONS
298 /INTO SUCH A SMALL AMOUNT OF CORE IS THAT IT
299 /IS FULL OF *K*L*U*D*G*E*S*. THESE SHOULD BE KEPT IN MIND WHEN
300 /MODIFYING THE PROGRAM. SOME OF THEM ARE:
302 / THE "SORT" ROUTINE COMPARE LIST MUST END WITH A NEGATIVE NUMBER.
303 / USUALLY A FORTITUOUS JMS OR OPR INSTRUCTION IS USED
305 / THE "SORT" JUMP LIST ENTRIES ARE TREATED AS JUMP ADDRESSES
306 / IF THEY ARE POSITIVE AND SUBSTITUTE VALUES IF THEY ARE
307 / NEGATIVE - THEREFORE ALL LOCS JUMPED TO MUST BE BELOW 4000
308 / ANOTHER CONSEQUENCE IS THAT "QUOTST" CANNOT BE CALLED FROM
311 / THERE ARE OTHER LOCALIZED KLUDGES - THEY CAN GENERALLY
312 / BE IDENTIFIED BY THE APPEARANCE OF A DOUBLE-ASTERISK IN THE
313 / COMMENTS FIELD ALONG WITH A TERSE DESCRIPTIVE COMMENT
319 JSBITS= 7746 /JOB STATUS BITS - IN FIELD 0
320 OSHNDT= 7647 /OS/8 DEVICE HANDLER TABLE - IN FIELD 1
321 OSDCBT= 7760 /OS/8 DEVICE CONTROL TABLE - IN FIELD 1
322 CCLADR= 400 /CCL OVERLAY LOAD ADDRESS
323 CCLOVL= 67 /BLOCK OF CCL OVERLAY
324 CCLOST= 602 /CCL OVERLAY SECONDARY START ADDRESS
326 NAME, ZBLOCK 4 /NAME BUILD BUFFER - MUST BE AT LOCATION 0
327 /LOCS 4,5&6 ARE RESERVED SO WE CAN USE OS/8 ODT
329 *10 /CONSTANTS & NON-INDIRECT TEMPS STORED IN AUTO-XRS!
330 QUOTE, 33 /QUOTE CHAR - SINGLE WORD SORT LIST
332 SERR, ERR /END OF LIST
333 INRSIZ, 2 /4 IF 12K MACHINE
334 NUMLNS, 3 /NUMBER OF LINES (+ AND -) TO DISPLAY ON VR12 SCOPE
336 SXR, QPUT12-1/XR USED BY SEARCH PROCESSOR
337 INXR, ASR33-1 /XR USED TO UNPACK INPUT BUFFER
340 NMT, 0 /USED AS NUMBER TEMP AND SEARCH FAIL FLAG
345 QFLG, 0 /QUOTED STRING FLAG
348 NLINK, 0 /LINK AFTER ARITH OPERATIONS - TESTED BY "A AND "B
349 CHAR, 0 /CHARACTER BUFFER
350 ITRST, 0 /ITERATION FLAG
351 ITRCNT, 0 /ITERATION COUNT
353 SCHAR, 0 /LAST CHAR SORTED
354 FFFLAG, 0 /FORM FEED FLAG - 7777 IF FORM FEED SEEN ON THIS READ
355 REND, 0 /INPUT END-OF-FILE FLAG
356 SCANP, 0 /COMMAND LINE EXECUTION POINTER
357 OSCANP, 0 /BACKUP FOR SCANP
358 PDLP, PDLBEG /PUSH-DOWN-LIST POINTER
359 QCMND, 0 /COMM LINE OR MACRO POINTER
360 P, 0 /CURRENT PNTR TO TEXT BUFFER
361 ZZ, 0 /END OF TEXT BUFFER POINTER
362 Q, 0 /EXTRA BUFFER POINTERS
363 IFNZRO .-47 <_ERROR_>
365 QP, 0 /Q REGISTER POINTER
366 QZ, CHNSTR /END OF Q-REG POINTER
372 CAFF, 14 /FF: END OF PAGE
376 NERR, ERR /END OF LIST
377 RADIX, DRAD /RADIX TABLE POINTER - DRAD OR ORAD
380 ODEV, 0 /OUTPUT DEVICE NUMBER
383 EBFLG, 0 /EDIT BACKUP FLAG
384 QNMBR, 0 /LAST Q-REG REFERENCED
385 QBASE, 0 /BASE OF CURRENT COMMAND LINE
386 QLENGT, 0 /LENGTH OF CURRENT COMMAND LINE
387 QPTR, 0 /POINTER TO Q-REGISTER CONTROL BLOCK
388 ICRCNT, 0 /INPUT DOUBLEWORD COUNTER
390 OPTR2, 0 /OUTPUT BUFFER POINTER
391 INRCNT, 0 /NUMBER OF INPUT RECORDS LEFT
392 OCMDLN, 0 /LENGTH OF OLD COMMAND LINE
394 KTYPE, TYPE /*ET SET TO PUTT IF NO CONVERSION
395 TEMPT, 0 /TEMP. GET RID OF WHEN FIND ROOM ON PAGE
396 MEMSIZ, 0 /HIGHEST MEMORY FIELD IN BITS 9-11
397 LASTC, 0 /LAST CHARACTER GOTTEN OUT OF COMMAND LINE
399 /NFLG: 0'ED BY COMMANDS WHICH EAT ARGUMENTS OR DON'T RETURN
400 / VALUES; SUCH AS C,R,J,L,^A,X,$,',>,'U,G,O AND
401 / NON-COLON MODIFIED SEARCHES
402 / SET TO -1 TO INDICATE THATWWE'VE SEEN A NUMBER
403 \f /TECO PSEUDO-OPERATIONS
405 PUSH= JMS I .; PUSHXX
406 POP= JMS I .; POPXX /** MUST BE ONE MORE THAN "PUSH"
407 PUSHJ= JMS I .; PUSHJY
408 POPJ= JMP I .; POPJXX
409 PUSHL= JMS I .; PUSHLX
410 POPL= PUSHL /** POPL CALLED WITH POSITIVE AC
412 ERR= JMS I .;ERROR,ERRXX
414 RESORT= JMP I .; SORTA2
417 TYPE= JMS I .; TYPCTV
418 OUTPUT= JMS I .;OUTR, ERRXX /** MUST BE ONE MORE THAN "TYPE"
419 /PROBABLY NOT ANY MORE (19-JUN-77)
420 CRLF= JMS I .; TYCRLF
422 SKPSET= JMS I .; SETSKP
423 NCHK= ISZ NFLG /USED TO BE A SUBROUTINE CALL
424 CTCCHK= JMS I .; CHKCTC
425 BZCHK= JMS I .; CHKBZ
428 QREF= JMS I .; QREFER
429 \fQSUM= JMS I .; QSUMR
431 QUOTST= JMS I .; QTST
432 SETCMD= JMS I .; CMDSET
435 MQLDVI= JMS I .; DVIMQL
436 UPPERC= JMS I .; CUPPER
437 SCANUP= JMS I .; SCUPPR
438 TSTSEP= JMS I .; SCHSRT
439 DISPLY= JMS I .; DSPLAY
440 NOTRCE= JMS I .; SAVTRA
441 ENTRCE= JMS I .; RESTRA
442 OVRLAY= JMS I .; OVERLY
443 GETNUM= JMS I .; NUMGET /GET 13 BIT NUMBER INTO L,AC
446 \f/ENTER HERE TO USE AN ASR33 AS THE TELETYPE
448 TECO, ISZ I SPUT /IF CALLED BY "R" OR "RUN" - CHANGED TO TLS
449 TECO1, JMP I COMPAR /IF CALLED VIA "CHAIN" - CHANGED TO "JMP T0A"
450 TBEL, JMS COMPAR /HERE ON ^G - 2 ^G'S KILL ENTIRE COMMAND
454 DCA PDLP /INITIALIZE PUSHDOWN LIST
458 ERR02, ERR /ERROR - PUSHDOWN LIST DID NOT BALANCE
460 QREF /SET UP POINTERS TO COMMAND LINE
462 DCA OCMDLN /SAVE OLD COMMAND LINE LENGTH
463 /** SAVE ONLY IF < 20?
464 ADJQ /REDUCE COMMAND LINE LENGTH TO 0
467 NRET /CLEAR NUMBER AND LAST OPERATOR
469 DCA MPDL /DELETE MACRO FLAG
470 DCA ITRST /ALSO ITERATION FLAG,
471 DCA CLNF /AND COLON FLAG
472 PUSHJ /KILL QUOTE FLAG
473 ZROSPN /KILL QUOTE AND NUMBER FLAGS AND SCAN POINTER
474 KCC /KILL ^O IF IN KEYBOARD BUFFER
475 DCA I (CHOOPS /KILL FATAL ERROR RETURN
478 ROCMND, JMS I (BACKUP /BACK UP AND GET LAST CHAR
480 T2M1, DCA CHAR /KILL CHAR TO PREVENT SPURIOUS DOUBLE CHARACTERS
481 T2, LISTEN /BUILD COMMAND LINE
486 JMS SPUT /PUT INTO C.L. BUFFER
487 JMP T2 /GO GET ANOTHER
490 TCTLUP, JMS I (BACKUP
491 TAD [-12 /CHECK FOR LF
493 JMP TCTLUP /LOOP UNTIL LF
497 TCRLF, TAD CACR /CR IN COMM LINE
499 JMS SPUT /PUT INTO COMM LINE
500 TAD CALF /THEN PUT IN A LF
501 JMP T2A /AND GET SOME MORE
502 \f /COMMAND EXECUTION LOOP
504 TALTM, JMS COMPAR /2ND ALTM STARTS EXECUTION
505 CRLF /START COMM EXECUTION
506 CHTECO, TAD (45 /NUMBER OF INPUT COMMAND Q-REGISTER
507 SETCMD /SET UP THE INPUT LINE AS THE CURRENT COMMAND LINE
509 T6A, DCA CHAR /SAVE COMMAND CHAR
511 TAD (CDSP /ADD BASE OF DISPATCH TABLE
512 DCA T7 /LOOK UP ENTRY IN
513 TAD I T7 /COMMAND DISPATCH TABLE
514 DCA T7 /CALL RECURSIVELY
517 T7, 0 /CALL TO ROUTINE
518 CTCCHK /CHECK FOR ^C - ** AC MAY NOT BE 0 HERE **
519 CLA /CTCCHK LEAVES AC NON-ZERO
523 DCA N /IF WE ARE NOT ENTERING A NUMBER
524 DCA NLINK /SET 13-BIT N TO 0
525 JMP T6 /KEEP INTERPRETING
527 SNA CLA /ERROR ROUTINE ENTRY POINT NON-ZERO?
529 STA /AN ERROR PRINTOUT
530 DCA QLENGT /SET QLENGT BIG SO WE CAN ACCESS ENTIRE LINE
531 NOTRCE /TURN TRACE OFF
533 TYPE /PRINT OUT THE LINE WHICH CAUSED THE ERROR
534 ISZ I ERROR /UP TO THE ERROR CHAR ITSELF
536 JMP T0 /RE-INITIALIZE
538 CHUA, POP /^ COMMAND - POP OFF RETURN ADDRESS
539 SCANUP /GET THE NEXT CHARACTER IN UPPER CASE
540 AND [77 /MAKE IT A CONTROL CHARACTER
541 JMP T6A /USE IT INSTEAD OF THE ^
542 \fCOMPAR, TCINIT /LOOK FOR DOUBLED COMM LINE CHARS
543 TAD SCHAR /MOST RECENT
548 JMS SPUT /PUT THE CHAR INTO THE COMMAND LINE AND ECHO IT
549 JMP I COMPAR /SAME-SPECIAL HANDLING
551 SPUT, JTECO /PUT CHAR INTO COMM LINE
555 QPUT /STORE CHARACTER AWAY
558 ADJQ /ADJUST COMMAND LINE REGISTER LENGTH
559 DCA I ERROR /CLEAR "ERROR JUST OCCURRED" FLAG
561 TYPE /TYPE THE INSERTED CHARACTER
565 JMP EMERG /TYPE BELL IF WITHIN 12 CHARACTERS OF 2048
569 SNL CLA /TYPE A BELL IF THE LINE IS
570 JMP I SPUT / WITHIN 12 CHARS OF OVERFLOW
576 \f /Q REGISTER PACK AND UNPACK
577 /THE Q-REGISTERS ARE STORED IN THE UPPER 4 BITS OF THE WORDS
578 /WHICH HAVE THE TEXT BUFFER CHARACTERS IN THEIR LOWER 8 BITS.
579 /THEREFORE EACH Q-REGISTER CHARACTER TAKES 2 WORDS.
581 QPUTS, 0 /STORE THROUGH POINTER "QP" AND BUMP POINTER
584 DCA GETQX /SAVE CHARACTER
587 DCA CHKCTC /COMPUTE CORE POINTER = 2*QP
590 JMS ST4BTS /STORE HIGH ORDER 4 BITS
595 JMS ST4BTS /STORE LOW ORDER 4 BITS
602 DCA CHKCTC /COMPUTE CORE POINTER = 2*AC
605 AND [7400 /FETCH HIGH ORDER
609 AND [7400 /FETCH LOW ORDER
612 TAD QPUTS /COMBINE TO FORM CHARACTER
624 DCA I CHKCTC /STORE HIGH ORDER
626 \fCHKCTC, 0 /SUBROUTINE TO CHECK FOR ^C IN KEYBOARD
627 CLA OSR /** AC MAY NOT BE 0 ON ENTRY
628 DCA QPUTS /GET LOCATION FROM SWITCH REGISTER
630 7421 /DISPLAY INDICATED LOCATION IN MQ
631 C7600, 7600 /JUST IN CASE THERE IS NO MQ
633 JMP I CHKCTC /NO CHAR IN KEYBOARD BUFFER - EXIT
635 AND [177 /KILL PARITY BIT
636 TAD [-20 /^P OUGHT TO GO AWAY
640 JMP I CHKCTC /NO - RESUME WITH NON-ZERO AC
641 ERR34, ERR /^C, EXECUTION ABORTED
644 JMP CTLC /WAIT FOR TELETYPE TO DIE DOWN
645 JMP I C7600 /RETURN TO OS/8
648 POPJXX, DCA GETQX /POPJ ROUTINE
653 \f /PUSH DOWN LIST ROUTINES
655 POPXX, 0 /POP ROUTINE
662 PUSHXX, 0 /PUSH ROUTINE (DOESN'T AFFECT LINK)
664 ISZ PDLP /BUMP PUSHDOWN POINTER
665 TAD PDLP /CHECK FOR EXACTLY FULL - THIS ALLOWS THE
667 SNA CLA /** ERROR ROUTINE TO DO A PUSHJ
668 ERR04, ERR /FULL - REPORT IT
671 PUSHJY, 0 /PUSHJ ROUTINE (DOESN'T AFFECT LINK)
673 IAC /** LINK SHOULD BE PRESERVED ON EXIT
679 PUSHLX, 0 /PUSH AND CLEAR A LIST
681 SMA /PUSH LIST IF AC<0, POP IT IF >=0
683 DCA PUSHJY /SET COUNTER
684 RAL /** DEPENDS ON FACT THAT POP=PUSH+1 **
686 DCA PUSHYX /STORE EITHER A "PUSH" OR A "POP"
687 POP /SAVE RETURN POINTER
692 PUSHYX, PUSH /PUSH OR POP
693 DCA I GETQX /IF PUSHYX=PUSH, THIS ZEROES THE PUSHED LOCATION
697 TAD CHKCTC /RESTORE RETURN POINTER
700 \fTPUT, 0 /TELETYPE OUTPUT
702 TPUTX, CTCCHK /CHECK FOR ^C OR ^P
703 TAD (3-17 /INHIBIT PRINTING AS LONG AS THERE
704 SNA /IS A ^O IN THE KEYBOARD BUFFER.
706 TAD (17-23 /CHECK FOR ^S
709 TSF /WAIT FOR TELETYPE FLAG
710 TSFWT, JMP .-1 /WHILE WAITING, DISPLAY TEXT ON SCOPE
716 \f/POINTER MOVING COMMANDS - C,R,J,L
718 CHRJ, DCA NFLG /COMMAND J
719 GETNUM /CAUSE NEG ARGUMENT TO GIVE A POP
722 CHRR, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
723 CHR1, CML CIA /NEGATE 13-BIT NUMBER
725 CHRC, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
726 TAD P /OFFSET RELATIVE TO .
728 / *** LINK NOT ALWAYS SET RIGHT
730 CLOQ, BZCHK /SEE IF IN RANGE B,Z
735 CHRL, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
744 SNA CLA /IF WE ARE AT THE END OF THE BUFFER,
746 JMS I (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED
748 JMP CHRLP /KEEP GOING UNTIL WE GET THERE OR OVERFLOW BUFFER
753 DCA P /MOVE POINTER BACKWARD 1
755 JMP I (CHRLI /OOPS - PAST THE BEGINNING OF THE BUFFER - RETURN
756 JMS I (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED
757 JMP CHRLM /NOT SATISFIED YET - KEEP LOOPING
759 NUMGET, 0 /PUT 13-BIT NUMBER IN L,AC
764 \f/D COMMAND AND PART OF ADJUST ROUTINE
766 CHRD, ISZ CFLG /WAS THERE A COMMA?
768 JMP NERR /YES, 2 ARGS TO D
769 GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
770 SNL /SIGN BIT OF 13-BIT NUMBER IS IN LINK
780 ADJ, SNA /ADJUST BUFFER + OR - N CHARS
783 STL /MOVE UP N CHARACTERS
784 TAD ZZ /ADD TO MAX CHARACTER
786 TAD R /SEE IF TOO HIGH
788 SNL SZA CLA /TWO PLACES FOR OVERFLOW THERE
807 L12K1, AND [377 /JMP .+5 IF 12K
809 TAD I R /BE CAREFUL NOT TO
810 AND [7400 /DESTROY THE HIGH-
811 TAD CHLTMP /ORDER 4 BITS
813 DCA I R /AND PUT IT IN THE LOW PART OF THE TARGET WORD
815 \f/K COMMAND AND MORE OF ADJUST ROUTINE
817 CHRK, JMS I (NLINES /CONVERT LINES TO CHARS
825 TAD P /MOVE DOWN N CHARACTERS
827 CLA CMA /DETECT GROSS OVERFLOWS
840 L12K2, AND [377 /JMP .+5 IF 12K
842 TAD I R /BE CAREFUL NOT TO
843 AND [7400 /DESTROY THE HIGH-
844 TAD CHLTMP /ORDER 4 BITS
846 DCA I R /AND PUT IT IN THE LOW PART OF THE TARGET WORD
856 /GO TO ADJ TO MOVE UP TEXT
857 /GOTO ADJ2 TO MOVE DOWN TEXT
858 /IN EITHER CASE, AC CONTAINS NUMBER OF CHARS TO MOVE (0-4095)
863 \f/SEARCH SUBROUTINE - CALLED BY N, S, AND _ COMMANDS
866 DCA REPFLG /AC MAY BE NON-0 TO ALLOW A REPLACE
869 ERR29, ERR /NEG OR 0 ARG TO SEARCH
871 DCA CSN /GET NUMBER OF OCCURRANCES TO SEARCH FOR
872 QCHK /GET REPLACEMENT FOR ALTMODE, IF ANY
874 DCA SXR /INITIALIZE XR
877 SGTLP, QUOTST /GET A CHARACTER FROM THE SEARCH STRING
878 JMP SCHQUO /OOPS- NO MORE
879 SORT /SEE IF ITS SPECIAL
882 SSTCHR, DCA I SXR /STORE THE CHAR IN THE SEARCH BUFFER
885 ERR06, ERR /OOPS - SEARCH BUFFER FULL!
888 TAD [40 /A NULL SEARCH STRING MEANS USE THE
889 SZA CLA /PREV CONTENTS OF THE SEARCH BUFFER, ELSE
890 DCA I SXR /STORE TERMINATING 0 AND BEGIN THE SEARCH
894 SCHINV, TAD CSNCL /^N, INVERT SKIP SENSE
897 CSL, TAD I SXR /GET A CHAR FROM THE SEARCH BUFFER
899 JMP SCCOMD /NEGATIVE CHARS AND 0 ARE SPECIAL
906 JMP CSF /FAIL TO MATCH ON THIS CHARACTER
909 DCA CSWT /RESTORE SEARCH TEST
913 CSZCL, SZA CLA /CHECK FOR END OF BUFFER
918 \f/SEARCH SUBROUTINE - CONTINUED
920 SCCOMD, DCA .+1 /SPECIAL CHARACTERS ARE JUMPS OR 0
921 HLT /0 FALLS THROUGH INTO TERMINATION CODE
922 ISZ CSN /GET NTH OCCURRENCE
926 CSF, ISZ CSP /INDEX P
928 DCA SXR /INITIALIZE AUTO - INDEX
933 /SEARCH STRING MODIFIERS ^N,^Q,^S, AND ^X
935 SCHTAB, JMP SCHINV /^N: ANYTHING BUT
936 SCHCTQ /^Q: LITERALLY
937 JMP SCHSEP /^S: ANY SEPARATOR
938 JMP CSWT1 /^X: ANYTHING
940 SCHCTQ, SCAN /GET THE NEXT CHARACTER
941 JMP SSTCHR /AND STORE IT IN PLACE OF THE ^Q
943 SCHSEP, CDF 10 /^S, LOOK FOR SEPARATOR
946 TSTSEP /SHARED SORTING ROUTINE
948 CMA /SET AC = -1 IF NON-SEPARATOR
949 JMP CSWT1 /GO CHECK RESULTS
954 \f/S,N AND _ COMMANDS (ALSO FS AND FN)
956 FS, STA /CHANGE S TO FS
957 CHRS, JMS SEARCH /S COMMAND - DO A SEARCH
958 CHKREP, ISZ REPFLG /WAS THERE A REPLACE SPECIFIED?
959 JMP CHKCLN /NO - CHECK FOR COLON
960 QSKP /COUNT UP STRING 2
963 JMP CHKCLN /FAILED, SET VALUE & EXIT
964 TAD CSP /FIGURE OUT OFFSET TO FAKE OUT "I" ROUTINE
965 CIA /SO THAT WE HAVE THE RIGHT INSERTION COUNT
966 TAD P /BUT THE SIZE OF THE HOLE WE NEED
967 DCA DVT1 /IS DECREASED BY THE LENGTH OF THE SEARCH STRING.
972 CHKCLN, DCA REPFLG /CLEAR REPLACE FLAG
974 PUSHJ /FORM NUMBER FROM "NMT"
975 NNEW13 /(APPLYING OPERATOR, IF NECESSARY)
976 ISZ CLNF /WAS THERE A COLON ON THIS SEARCH?
978 JMP I [IREST /YES - GO AWAY REGARDLESS OF RESULTS
979 DCA CLNF /RESET COLON FLAG TO 0
980 ISZ N /DID WE SUCCEED?
981 JMP I (CFSI /NO - SIMULATE A SEMICOLON
982 DCA NFLG /YES - HOWEVER, NO COLON MEANS NO RESULT
985 CHBA, CLA IAC /_ COMMAND
986 CHRN, DCA CNXT /N COMMAND - SET OUTPUT FLAG
987 CHRN1, JMS SEARCH /DO A SEARCH
991 CSNCL, SNA CLA /HAVE WE REACHED END-OF-FILE?
992 JMP CHKREP /YES - STOP AND ASSIGN VALUE
994 SZA CLA /HAVE WE SUCCEEDED?
995 JMP CHKREP /YES - STOP AND ASSIGN VALUE
997 JMS I [NXTBUF /GET NEXT BUFFER
998 JMP CSST /KEEP SEARCHING - RETURN TO CHRN+2
1002 REPFLG, 0 /REPLACE FLAG (-1 MEANS REPLACE)
1004 \f/NUMBER PROCESSORS:
1005 /COMMANDS B,H,Z,. AND DIGITS
1008 NMBR, TAD CHAR /NUMBER FOUND IN COMMAND STRING
1012 NCHK /CHECK NUMBER FLAG
1013 JMP NNEW /NOT UP, NEW OPERAND
1015 DCA NOPR /USE SAME OPERATOR AS FOR THE PREVIOUS DIGITS
1016 TAD NP /MULTIPLY PREV DIGITS BY 10
1018 NMRBAS, TAD NP /REPLACED BY "NOP" FOR OCTAL
1019 CLL RAL /** COULD CHECK FOR OVERFLOW IN THIS AREA
1021 NCOM, DCA NP /CURRENT NUMBER
1024 / TAD NEWLNK /GET NEW LINK
1025 / CLL RAR /INTO LINK
1028 NOPR, SKP /DISPATCH JUMP FOR OPERATOR
1030 TAD NACC /CURRENT EXPRESSION VALUE
1033 TAD NACCLK /ADD IN OLD LINK
1038 DCA NLINK /SAVE LINK FOR POSSIBLE COMPARISON TEST
1042 DCA NOPR /SET OPERATOR TO NULL OP
1044 JMP DCPOPJ /SET NUMBER FLAG AND EXIT
1045 \fCCPR, STL CLA RTL /2
1051 JMP NCOM /COMBINE OLD NUMBER AND PARENTHESIZED RESULT
1060 JMP CPLS /CLEAN OUT INSIDE PARENS
1062 CDOT, TAD P /COMMAND .
1063 /** COULD CAUSE ERROR IF NFLG SET
1066 \f /COMMANDS &,#,/,*,-,+,(,)
1068 CAMP, MTWO /*K* LOGICAL AND **
1069 CNBS, TAD (NIOR-NDIV /LOGICAL OR
1070 CVIR, TAD (NDIV-NMPY /DIVISION
1071 CAST, TAD (NMPY&177+5200-7400 /MULTIPLICATION
1072 CMIN, TAD [7400-SKP /SUBTRACTION
1073 CPLS, TAD (SKP /ADDITION
1074 DCA NOPR /COMMON TO ALL NUMERIC OPERATORS
1080 DCPOPJ, DCA NFLG /CLEAR NUMBER FLAG
1083 NAND, AND NACC /BITWISE AND OF BINARY NUMBERS
1084 JMP NRET /** KEEP THESE TWO OPNS TOGETHER
1085 NIOR, CMA /BITWISE OR OF BINARY VALUES
1090 NACCLK, 0 /LINK OF EXPRESSION WITHOUT NP
1091 NMPY, CIA /*** REALLY OUGHT TO IMPLEMENT 13-BIT MULTIPLY
1094 RAR /SET UP OLD LINK
1099 NACC, 0 /VALUE OF EXPRESSION WITHOUT NP
1105 \f/COMMANDS ^F,^^,^Z,^V, Q AND %, ^D, ^O
1107 CTLF, CLA OSR SKP /^F COMMAND - VALUE OF CONSOLE SWITCHES
1108 CTUA, SCAN /^^ COMMAND - VALUE OF NEXT CHAR IN COMMAND LINE
1110 JMP NCOM /GO INTO NUMBER PROCESSOR
1112 /CTLZ, TAD QZ /COMMAND ^Z
1113 / JMP NCOM /RETURN NUMBER OF CHARACTERS IN ALL Q-REGS.
1114 /CTLV, TAD (VERSN /^V COMMAND - RETURNS THE CURRENT VERSION NUMBER
1118 CTLD, TAD [4 /SET RADIX DECIMAL
1119 CTLO, TAD (ORAD /SET RADIX OCTAL
1122 DCA NMRBAS /EITHER "NOP"(8) OR "TAD NP"(10)
1125 DOPR, 0 /PREVIOUS OPERATOR
1126 NP, 0 /VALUE OF CURRENT NUMBER
1141 CMA /TRACE FLAG ALTERNATES BETWEEN 0 AND 7777
1149 CHRF, SCANUP /COMMAND F
1153 ERR31, ERR /BAD F COMMAND
1155 CCLN, STA /: COMMAND - SET VALUE FLAG
1157 POPJ /SO NEXT SEARCH WILL HAVE A NUMERIC VALUE
1159 \f/CURSOR RIGHT IS $C
1163 BUGFLG, 0 /-1 MEANS MUST RETYPE LINE ON NEXT RUBOUT
1167 PUTT /TYPE BS, SPACE, BS
1173 TAD I (COLCT /FIX UP COLUMN COUNTER
1176 \fSCOPY, JMS I (BACKUP /BACK UP ONE CHAR IN CMD LINE
1177 TAD [-40 /LOOK AT CHAR WE BACKED OVER
1179 JMP EASYRO /IT'S EASY TO RUB THIS ONE OUT
1180 TAD [40 /RESTORE CHARACTER
1185 JMS BSP /^X NEEDS TWO RUB OUTS
1187 ISZ BUGFLG /MAYBE WE REALLY SHOULD REPRINT LINE
1188 TTY10, SKP /NOT NECESSARY
1189 JMP BCR /NECESSARY (PREVIOUS VERTICAL MOTION MAY
1190 /HAVE SCROLLED OFF TOP OF SCREEN)
1195 BCR, JMS BELLSP /REPRINT LINE
1200 BLF, TAD CTLBEL /CURSOR UP 1
1201 BFF, TAD (-4 /CURSOR UP 8
1202 BVT, TAD (-4 /CURSOR UP 4
1211 TSPACE, TAD CHAR /LOOK AT PREVIOUS CHARACTER
1213 SZA CLA /WAS IT ^G ?
1216 TSP9, TAD I [QPNTR /REDUCE CMD LINE BY 1 CHAR
1217 ADJQ /I.E. GET RID OF ^G
1222 BLSP1, CRLF /TAD CACR
1227 TAD QZ /START FROM END OF COMMAND LINE
1228 LFBLP, DCA QP /AND SEARCH FOR LF
1230 TAD MQ /COUNT HOW MANY
1235 JMP LFSTAR /AT BEGIN OF CMD LINE
1237 TAD BCHAR /LOOK FOR LF
1241 TAD QP /BUMP BACK ONE MORE CHAR
1245 TAD [52 /PRINT ANOTHER *
1248 COLG4 /REPRINT LINE TO END OF CMD LINE
1249 TAD SAVMQ /RESTORE MQ
1251 BLSP3, NOP /JMS I SCAPE
1254 DCA BCHAR /SET UP FOR NEXT TIME
1255 KCC /CLEAR OUT ^O OR ^S
1259 BCHAR, -12 /CHAR WE'RE SEARCHING BACKWARDS FOR
1261 \fSORTB, 0 /SORT AND BRANCH ROUTINE
1262 DCA SCHAR /SAVE SORT CHAR
1264 TAD I SORTB /GET POINTER TO LIST
1267 SORTA1, TAD I XR /GET ITEM IN TEST LIST
1268 SPA /END MARKED BY NEG VALUE
1269 JMP SORTA2 /FELL OUT BOTTOM
1272 SZA CLA /COMPARE SORT CHAR
1274 TAD XR /GOT IT. NOW MAKE INDEX
1275 TAD I SORTB /TO JUMP TABLE
1276 DCA COUNT /THIS IS TABLE POINTER
1277 TAD I COUNT /GET JUMP ADDRESS FROM TABLE
1278 SPA /IF IT IS NEGATIVE,
1279 JMP SORTA3 /ITS NOT A JUMP ADDRESS - ITS A VALUE
1283 SORTA2, CLA CLL /FELL OUT BOTTOM
1284 TAD SCHAR /CARRY CHARACTER BACK TO
1286 JMP I SORTB /DO SOMETHING ELSE
1288 CSMC, SCANUP /GET NEXT CHARACTER IN UPPER CASE
1289 AND [77 /MAKE IT A CONTROL CHARACTER
1291 JMP SORTA1 /SUBSTITUTE IT FOR THE UPARROW
1295 \f /COMMANDS P AND T
1297 CHRP, JMS POKE /LOOK AHEAD ONE CHARACTER
1298 UPPERC /BUT IN UPPERCASE
1299 TAD (-127 /SEE IF IT'S "W"
1300 DCA TEMPT /SAVE KNOWLEDGE AS FLAG
1304 CLA /CLEAR W FROM AC
1306 SPA CLA /IS THIS COMMAND M,NP?
1307 JMP CHRW /YES - TREAT LIKE M,NPW
1308 GETN /COMMAND P - GET # OF PAGES
1310 ERR25, ERR /NEG OR 0 ARG TO P
1315 TAD TEMPT /IS NEXT CHARACTER W?
1318 / TAD REND /IF WANT P TO CREATE FF'S
1319 / SZA CLA /WHEN NO MORE INPUT FILE
1320 ISZ FFFLAG /NO, SAW FF?
1324 NOFF, DCA ZZ /FORCE Y COMMAND TO WORK
1326 CHRY /WHOEVER THOUGHT OF THE PW COMMAND SHOULD BE SHOT
1332 POKE, 0 /RETURN NEXT CHARACTER (BY LOOKING AHEAD)
1336 SZL CLA /MAKE SURE WE HAVEN'T RUN OFF END OF COMMAND LINE
1337 JMP I POKE /RETURN 0 IF NO CHAR
1341 JMP I POKE /LEAVE CHAR IN AC
1343 NOYANK, TAD CAFF /NPW OUTPUTS FFS
1349 CHRT2, DCA CWOUT /W AND T COMMANDS - SAME THING, DIFFERENT DEVICES
1350 JMS NLINES /CONVERT LINES TO CHARS
1352 DCA NLINES /SET CHARACTER COUNT
1355 MQLDVI /COMPUTE HOW MANY WORDS THIS OUTPUT WILL USE
1356 6 /(BY TAKING 2/3 OF THE NUMBER OF CHARACTERS,
1357 CLL CML RTL / BU THAT'S SLOW SO WE TAKE 4/6 AND ROUND)
1358 JMS I (FITS /DETERMINE WHETHER THE OUTPUT WILL FIT
1359 ERR17, ERR /NO - TELL THE USER
1360 CLA /CLEAR CRAP FROM AC
1366 CWOUT, 0 /TYPE, OUTPUT, OR QPUT
1368 CWOC, ISZ NLINES /DONE?
1374 \f/X COMMAND AND LINES-TO-CHARACTER CONVERTOR
1376 CHRX, QREF /COMMAND X
1377 JMS NLINES /CONVERT LINES TO CHARS
1378 ADJQ /ADJUST Q-REGISTERS AND SET UP NEW LENGTH.
1380 DCA CWOUT /SET OUTPUT ROUTINE TO STORE INTO Q REG
1381 TAD MQ /LOAD THE CHARACTER COUNT
1382 JMP CWOA /GO TO TEXT OUTPUTTER
1384 NLINES, 0 /CONVERT + OR - N LINES AROUND . TO CHARS M,N
1385 ISZ CFLG /WAS THERE A COMMA?
1387 JMP MFROMN /YES - DON'T CONVERT LINES TO CHARS
1391 PUSHJ /CHRL DOES A "GETN"
1392 CHRL /TO GET THE DEFAULT VALUES OF N
1397 MFROMN, DCA NFLG /CLEAR NFLG IN CASE COMMA FLAG WAS ON
1398 CLL /M AND N ARE KNOWN TO BE 12-BITS LONG
1402 CMA CLL /YES - COMPUTE N-M
1403 TAD M /BY COMPUTING M-N-1
1404 CMA /AND COMPLEMENTING IT
1406 JMP I NLINES /NO - RETURN N-M
1407 TAD M /N-M+M=N NOW IN AC.
1408 DCA CPCT /INTERCHANGE M AND N
1414 \f/COMMANDS ; < AND >
1418 ERR24, ERR /FAILING SEARCH NOT IN ITERATION
1427 DCA QUOTE /TERMINATING CHAR SAME AS COMMAND CHAR
1428 DCA NFLG /KILL NUMBER IF PRESENT
1431 WHERTO, 0 /TYPE OR IGNORE THE CHARACTER
1437 CHRA, NCHK /COMMAND A
1443 JMP I (ERR11 /ERROR IF POINTER OFF PAGE
1447 TAD ZZ /RETURN 'POP' IF POINTER OUTSIDE RANGE [0,Z-1]
1448 SNL CLA /OTHERWISE VALUE OF CHARACTER AT POINTER POSITION
1457 ERR18, ERR /NUMERIC ARGUMENT TO Y
1463 YSKP, SZA CLA /CHANGE TO SKP CLA TO NEVER ABORT Y COMMAND
1464 ERR32, ERR /Y COMMAND ABORTED
1466 DCA P /WIPE OUT THE BUFFER
1470 TAD ZZ /IF WE HAVE ALREADY SEEN THE INPUT EOF,
1471 SZL CLA /OR IF WE'RE ALREADY FULL (OR NEARLY SO)
1474 JMP I2 /NO NEED TO READ
1478 STECO1, SNL /"SKP!CLA" FOR SUPERTECO
1479 DCA INRCNT /UPDATE RECORD COUNT
1480 LFTAB, CLL CML CMA RTR /IF WE OVERFLOWED THE END OF THE FILE, !
1481 RTR /5 ENTRY TABLE: MUST BE - - - + + !
1482 RTR /SHORTEN THE READ BY THE CORRECT AMOUNT !
1484 DCA INCTRL /SO THAT WE WILL NOT READ TOO FAR !
1488 BUFIN, IN /6200 IF 8K, 5600 IF 12K
1492 JMP INER /IGNORE END-OF-FILE ERRORS, WE'LL SEE THE ^Z.
1494 TAD INRSIZ /BUMP RECORD NUMBER BY THE MAXIMUM NUMBER
1495 DCA IBLK /(IF WE READ SHORT ITS THE LAST ONE ANYWAY)
1498 DCA INXR /SET UP INPUT XR
1503 I2, NOP /CDF 20 IF 12K
1505 JMP I1 /NORMAL CHARACTER
1506 MTHREE /WEIRD CHARACTER-RESET SWITCH
1510 DCA INXR /MOVE INPUT XR BACK TO BEGINNING OF DBLWORD
1523 IC, NOP /CDF 0 IF 12K
1524 AND [177 /MASK OFF GARBAGE
1525 /INPUT CHARACTER IN AC
1528 SNA /IGNORE BLANK TAPE AND RUBOUTS
1531 STECO2, SNA /"SKP" FOR SUPERTECO
1535 JMP APFF /ITS A FORM FEED
1536 TAD CAFF /RESTORE CHAR
1539 TAD I ZZ /PROTECT HIGH-
1540 AND [7400 /ORDER BITS
1542 DCA I ZZ /STORE CHAR IN BUFFER
1547 SNA CLA /IF THE CHAR IS A LINE FEED,
1548 TAD (-310 /CHECK THAT THE BUFFER IS NOT NEARLY FULL
1550 APFS, DCA REND /SIGNAL END OF FILE
1553 APLF, DCA FFFLAG /SET FORM FEED FLAG
1555 \fINER, DCA REND /INHIBIT FUTURE INPUTS
1558 INCTLW, 401 /1021 IF 12K MACHINE
1559 INPCNT, 6400 /5000 IF 12K MACHINE
1561 \f/TELETYPE ROUTINES
1563 TYPCTV, 0 /TELETYPE STUFFER
1567 DCA SCHAR /STORE (POSSIBLY TRANSLATED) CHAR
1569 ISZ COLCT /BUMP COLUMN COUNTER
1571 SZA CLA /IS THE CHAR A CONTROL CHARACTER?
1582 OUTCR, DCA COLCT /RESET CHAR COUNT
1585 OUTFF, TAD [7770 /FORM FEED IS 8 LINE FEEDS, VERT TAB IS 4
1587 ASR33, TAD CALF /SIMULATE FORMFEEDS AND VERT TABS WITH LINEFEEDS
1588 JMP OUTCOM /*K* 8 LOCS AT ASR33 OVERLAYED BY ASR35 CODE
1590 OUTHT, TAD COLCT /COLUMN COUNTER, MOD 8
1592 TAD [7770 /SIMULATE TABS WITH SPACES
1594 40 /TAKE UP SPACE SO ASR-35 ROUTINE WILL JUST FIT
1595 TAD .-1 /USE SPACES FOR TABS
1596 OUTCOM, PUTT /PUT ONE OUT THE
1598 JMP I (TPUTX /STILL MORE INSIDE
1603 EU1, SNA CLA /*EU SET TO CLA IF EUFLAG < 0 (NO CASE FLAGGING)
1604 JMP OUTLF /NOT ALPHANUMERIC
1605 EU2, NOP /*EU SET TO TAD [40 IF EUFLAG>0 (FLAG UPPER CASE)
1615 JMP OUTLF1 /OUTPUT UPPER CASE VERSION
1620 \f /ROUTINE TO MANIPULATE Q-REGISTER STORAGE
1622 /*** ALLOW : TO MEAN APPEND TO Q-REGISTER
1623 /APPLIES TO X AND ^U COMMANDS
1624 /MAKE SURE CMD LINE AND ^S ZERO CLNF
1628 JMP ERR12 /STRING TOO LONG FOR Q-REGISTER
1629 DCA MQ /SAVE NEW LENGTH OF Q-REGISTER
1630 QSUM /COMPUTE POINTER TO CURRENT Q-REGISTER
1636 AND I QPTR /GET ITS CURRENT LENGTH
1638 TAD MQ /COMPUTE DIFFERENCE
1640 JMP QDNN /TO HOLD NEW STRING
1642 JMP QADJDN /NOTHING TO DO
1643 TAD QZ /MOVE Q-REGISTERS UP TO INSERT CHARS
1644 DCA QP /(LINK IS 1 FROM PREVIOUS SNL)
1646 TAD MQMAX /SEE IF OUT OF BOUNDS
1647 SNL CLA /TWO PLACES TO TOGGLE LINK THERE
1648 ERR12, ERR /GETTING TOO FULL
1656 SQUO, TAD R /DOUBLES AS ASCII FOR '
1669 \fQDNN, TAD R /MOVE Q-REGS DOWN TO ABSORB CHARACTERS
1673 TAD R /-NUMBER OF CHARS TO MOVE
1680 JMP QDNN1 /LOOP AGAIN
1681 QDNNF, TAD QP /SET NEW VALUE
1682 DCA QZ /OF HIGHEST CHAR
1683 QADJDN, STL CLA RAR /4000
1684 AND I QPTR /SAVE HIGH ORDER PART
1686 DCA I QPTR /SAVE NEW LENGTH OF Q-REGISTER IN Q-REG TABLE
1687 TAD QCMND /SET UP COMMAND LINE AGAIN
1688 SETCMD /AS IT MAY HAVE BEEN SHUFFLED.
1689 QSUM /RECOMPUTE POINTER TO BEGINNING OF NEW Q-REG
1694 QOVER, 0 /SUBROUTINE TO SKIP TO END OF STRING
1695 QCHK /GET THE QUOTE CHARACTER (IF ANY)
1697 DCA OSCANP /SAVE BACKUP SCAN POINTER
1699 JMP I QOVER /FOUND AN ALTM OR EQUIVALENT - RETURN
1700 JMP QOVERL /NOT END - SKIP ANOTHER CHAR
1702 \f /Q-REGISTER SUBROUTINES
1704 QSUMR, 0 /COMPUTE POINTER TO Q-REG
1706 TAD QNMBR /NORMALLY USES QNMBR, BUT CAN BE OVERRIDDEN BY AC
1710 TAD (QARRAY /BASE ADDR OF Q-REG POINTERS
1714 AND I QPTR /ADD # OF CHARS IN LOWER REG
1717 ISZ QPTR /SKIP VALUE WORD
1718 ISZ QPTR /POINT TO NEXT Q-REG
1719 QSUMB, ISZ QKNT /REACHED OUR Q-REGISTER YET?
1720 JMP QSUML /NO - ADD IN ANOTHER
1723 \fSGET, 0 /SCAN COMMAND LINE OR MACRO
1724 SGET1, CLA /** CALLED WITH AC NON-ZERO **
1728 SZL CLA /CHECK THAT WE ARE STILL INSIDE THE COMMAND LINE
1729 JMP SGOVFL /NO - COMMAND DONE
1730 TAD SCANP /GET CHARACTER POSITION IN LINE
1731 TAD QBASE /ADD IT TO THE ADDRESS OF THE LINE
1732 GETQ /AND GET THAT CHARACTER.
1735 AND LASTC /IF THE TRACE FLAG IS ON,
1737 TYPE /PRINT THE CHAR
1739 ISZ SCANP /INCREMENT CHARACTER POINTER AFTER FETCH
1741 SGOVFL, TAD MPDL /"MPDL" IS THE PUSHDOWN POINTER ON ENTRY TO THIS
1742 SNA /MACRO. IF IT IS 0, WE ARE NOT IN A MACRO
1743 JMP I (T1 /SO RETURN TO THE USER
1744 TAD PDLP /CHECK THAT THE ENDING POINTER IS THE SAME
1746 SZA CLA /AS THE ENTRY ONE - OTHERWISE WE HAVE
1747 ERR13, ERR /SCREWED UP SOMEHOW (EG WE ARE
1748 POP / IN THE MIDDLE OF A COMMAND)
1752 POP /RESTORE THE PREVIOUS VALUES OF
1753 DCA MPDL /MPDL, THE SCAN POINTER AND THE COMMAND LINE
1754 POP /POINTER FROM THE PUSHDOWN LIST
1756 JMP SGET1 /AND FETCH A CHARACTER FROM THE UPPER LEVEL.
1757 \fCMDSET, 0 /SUBROUTINE TO SET UP COMMAND LINE POINTERS
1758 DCA QCMND /STORE IN COMMAND LINE NUMBER
1761 TAD QP /GET FIRST LOCATION IN COMMAND LINE
1762 DCA QBASE /AND STORE IN "QBASE"
1765 DCA QLENGT /STORE THE LINE LENGTH IN "QLENGT"
1766 JMP I CMDSET /RETURN
1768 QREFER, 0 /SET UP POINTERS FOR Q-REG REFERENCE
1770 JMP QREFEX /AHA - WE ALREADY HAVE THE Q-REGISTER
1771 SCANUP /GET Q-REGISTER IDENTIFIER
1774 TSTSEP /TEST FOR ALPHANUMERIC (LOWER CASE LEGAL)
1775 ERR03, ERR /OOPS - BAD Q-REGISTER REFERENCE
1779 TAD Z7 /YES - FORCE NUMBERS UP TO ABUT LETTERS
1780 TAD CALF /FORCE IDENTIFIER INTO THE RANGE 1-44 (OCTAL)
1781 QREFEX, DCA QNMBR /STORE AWAY NUMBER FOR FURTHER REFERENCE
1782 QSUM /COMPUTE QP AND QPTR
1783 JMP I QREFER /RETURN
1786 QOVRLY /READ IN Q-OVERLAY
1789 CHRO, OVRLAY /READ IN Q-OVERLAY
1793 TAD I OVERLY /GET LOCATION TO CHECK
1797 DCA OVERLY /SET RETURN ADDRESS
1798 TAD I TMP /IS OUR OVERLAY IN CORE?
1800 JMP I OVERLY /YES, BRANCH INTO IT
1801 DCA TMP /NO, SET BLOCK TO READ IN
1802 /** THE NEXT 5 WORDS ARE MODIFIED IF WE HAVE MORE THAN 12K
1803 OVREAD, JMS I (7607 /CALL SYSTEM HANDLER
1806 TMP, 0 /FROM THIS BLOCK
1807 HLT /ERROR READING OVERLAY
1808 JMP I OVERLY /GO TO NEXT SPOT
1810 CTLTAB, OUTBEL /BELL
1813 4044 /$ WITH SIGN BIT ON
1819 4033 /ALTMODE WITH SIGN BIT ON
1821 CATS, STA /@ COMMAND - FAKE OUT "IREST"
1822 IREST, DCA QFLG /RESET QUOTED STRING FLAG
1824 DCA QUOTE /RESET QUOTE CHAR TO ALTMODE
1827 QTST, 0 /SUBROUTINE TO GET A CHAR AND TEST FOR ALTMODE
1831 QTST-QUOTE /RETURN IF QUOTE FOUND
1833 JMP I QTST /SKIP-RETURN WITH AC INTACT IF NOT FOUND
1834 \f /COMMANDS ^U AND E - ALSO ERROR ROUTINE
1840 \fERRXX, ERR30+1 /ENTRY POINT ALSO SERVES AS A FLAG FOR "TQMK"
1843 TAD I ERRXX /GRAB SIGNAL '0' NOW
1844 DCA ERRTMP /BEFORE OVERLAY MIGHT DESTROY IT
1845 OVRLAY /GO TO ERROR OVERLAY
1849 ERRRET, TAD ERRTMP /GET THE LOCATION AFTER THE CALL
1850 SNA CLA /IF IT'S ZERO AND WE WERE CHAINED TO,
1851 CHOOPS, NOP /ITS A FATAL ERROR - JMP CTLC
1855 DCA ERRXX /SET ERRXX TO CHAR POSITION OF ERROR CHAR.
1856 KCC /ZAP KEYBOARD FLAG
1857 JMP I (T0 /CONTINUE AS NORMAL UNLESS USER TYPES "?"
1859 CHRE, SCANUP /COMMAND E
1869 ERRTMP, 0 /MUST BE INITIALLY 0
1870 \f /COMMANDS I AND <TAB>
1872 CHRI, NCHK /I COMMAND
1874 TAD N /INSERT CHAR WHOSE VALUE IS N
1878 CTLI, DCA QFLG /CANNOT BE QUOTED
1879 / CLA CMA /FOR TAB INSERT
1881 / DCA SCANP /BACK UP SCAN POINTER BY ONE
1882 / /*** THIS IS A BUG
1885 CIL1, QSKP /COUNT LENGTH OF INSERTION
1886 DCA DVT1 /ZERO FUDGE USED BY FS COMMAND
1889 DCA QP /SET UP POINTER TO INSERTION STRING
1893 DCA MQ /STORE CHAR COUNT TO INSERT (-1)
1895 TAD DVT1 /ADD FS FUDGE
1897 SNL /DID WE INSERT MORE THAN WE DELETED?
1898 JMP EXPAND /YES - IGNORE SIGN BIT OF COUNT
1901 ADJ2 /COMPRESS OUT EXCESS DELETED STUFF
1906 JMS STOREC /STORE A CHARACTER
1909 JMP CIL3 /OF INSERTION
1912 STOREC, 0 /STORE CHAR IN "TYI" INTO TEXT BUFFER AT P
1923 CHRG, QREF /G COMMAND - GET Q-REGISTER NUMBER
1926 AND I QPTR /GET COUNT OF CHARS IN REGISTER
1928 DCA MQ /SAVE AS TRANSFER COUNT
1935 EXPAND, PUSHJ /COME HERE FROM INSERT LOGIC
1936 ADJ /INCREASE TEXT BUFFER SIZE ( Q-REG LENGTH MAY
1937 JMP CIL4 /BE NEGATIVE) AND GO TRANSFER THE CHARS
1939 TYI, 0 /TELETYPE INPUT
1940 TYI1, KSF /WAIT FOR THE KEYBOARD FLAG
1941 KSFWT, JMP .-1 /WHILE WAITING, DISPLAY TEXT ON SCOPE
1942 CTCCHK /CHECK FOR ^C
1943 KRB /WATCH OUT - AC MAY NOT BE 0!
1946 JMP TYI1 /IGNORE NULL CHARS AND LEADER
1949 ALTTAB-ALTLST /LOOK FOR NON-STANDARD ALTMODES
1950 AND [177 /IN CASE WE RETURNED A NEGATIVE VALUE
1953 UPOC, 0 /MOVE TEXT BUFFER UP ONE CHAR
1959 JMS STOREC /STORE CHAR IN THE HOLE WE MADE
1962 CUPPER, 0 /FORCE CHARACTER TO UPPER CASE
1965 AND (37 /REDUCE IT TO BE <140
1967 JMP I CUPPER /RETURN
1976 TAD CAAM /TYPE ESCAPE
1980 JMP I ESCAPE /OK TO RETURN TO ARGUMENT
1982 \fTSAVE, TAD I [QPNTR
1983 SZA CLA /IF WE ARE NOT AT THE BEGINNING OF THE C.L.
1984 RESORT /TREAT THIS LIKE ANY OTHER ^S
1985 MTWO /DROP OFF THE TWO BELLS OR ALTMODES
1987 ADJQ /SET COMMAND STRING LENGTH TO OLD VALUE
1989 QREF /SET UP POINTERS TO Q-REG Z
1990 ADJQ /KILL CONTENTS OF Q-REG Z
1993 DCA I [QPNTR /DO A QUICK SHUFFLE OF Q-REG LENGTHS
1995 \fCHRQ, QREF /COMMAND Q
1999 CPCS, QREF /COMMAND %
2001 CQOA, ISZ QPTR /POINT TO VALUE WORD
2002 TAD I QPTR /INCREMENT VALUE BY ARGUMENT
2006 TAD QPTR /GO BACK ONE
2007 DCA QPTR2 /ALSO COMPL LINK
2015 JMP I (NCOM /MAKE A NUMBER
2017 TYCRLF, 0 /TYPE A CR AND LF
2022 JMP I TYCRLF /RETURN
2032 \fCCMA, NCHK /COMMAND ,
2033 JMP NERR /NUMBER FLAG NOT SET
2036 ERR26, ERR /NEG ARGUMENT TO ,
2039 JMP NERR /3 NUMERIC ARGUMENTS
2041 CCMA3, DCA M /ENTERED HERE BY "H" COMMAND
2044 DCA CFLG /SET COMMA FLAG
2046 \f/RETURNS 13-BIT RESULT IN AC,LINK
2048 NGET, 0 /SUBROUTINE TO GET LAST NUMBER, WITH
2049 NGET1, NCHK /DEFAULT VALUES OF +1 (NO NUMBER),
2050 JMP NGET2 /OR -1 (JUST A MINUS SIGN)
2052 JMP I NGET /DIGITS SEEN - RETURN THEM
2053 NGET2, CLA CLL IAC /NO DIGITS SEEN
2054 PUSHJ /MAKE BELIEVE WE SAW THE DIGIT "1"
2055 NCOM /AND CREATE A NUMBER FROM IT (TAKING ANY
2056 JMP NGET1 /OPERATORS INTO ACCOUNT) AND USE IT
2059 TAD I [QPNTR /SEE IF ANYTHING TO ERASE
2061 JMP I (T0 /NO, START ALL OVER
2063 TAD I [QPNTR /THEN THE CHARACTER COUNT
2064 ADJQ /REDUCE THE LENGTH OF THE COMMAND REGISTER BY 1
2066 GETQ /GET THE CHARACTER WE RUBBED OUT
2069 CHLCMP, 0 /COMPARISON SUBROUTINE
2070 TAD I P /DATA FIELD IS 10
2076 SPA CLA /LINE TERMINATORS ARE CHANGED TO NEGATIVE NOS.
2077 ISZ CDT /IS COUNT EXHAUSTED?
2084 CHRH, PUSHJ /COMMAND H
2085 CCMA3 /SET M=0 AND COMMA FLAG ON AND FALL INTO "Z"
2086 /** COULD CAUSE ERROR ON B AND H IF NFLG SET
2087 CHRZ, TAD ZZ /COMMAND Z
2088 CTLH, /^H COMMAND - TIME OF DAY - NOT IMPLEMENTED
2089 CHRB, JMP I (NCOM14 /COMMAND B
2108 \f/COMMANDS = AND \ DISPATCHER TO OVERLAY
2117 ZROSPN, DCA SCANP /RESET TO BEGINNING OF ITERATION
2118 ZRON, DCA NFLG /KILL NUMBER FLAG
2123 / IOVRLY XOVRLY FOVRLY
2139 /SUBROUTINE TO DO LOOKUPS AND ENTERS (LINK CRITICAL ON ENTRY)
2141 OPEN, 0 /CALLED WITH MONITOR CODE - 2 IN AC
2142 DCA RSTSW /ENTER OR LOOKUP
2143 SZL CLA /IF THIS IS THE OUTPUT SIDE OF AN "EB" COMMAND,
2144 JMP DEVLOD /SKIP THE STATEMENT SCAN
2146 TAD DSKNAM /PACKED SIXBIT FOR 'DSK:'
2150 NGO, DCA NAME /CLEAR NAME
2156 \fNAMEC, QUOTST /GET CHAR AND TEST FOR ALTM
2157 JMP DEVQOT /ALTM - END OF NAME
2158 SORT /NO - CHECK SPECIAL CHARS
2159 DEVLST /([,:,., AND SPACE
2161 TSTSEP /NO, SEE IF ALPHANUMERIC
2162 ERR08, ERR /ILLEGAL CHAR
2165 SMA CLA /MORE THAN 6 CHARS?
2166 JMP NAMEC /YES, IGNORE
2167 TAD NAMCNT /NO, PACK IT
2169 DCA TEMP1 /*K* NOTE ASSUMPTION NAME STARTS AT LOC 0!
2171 UPPERC /** "UPPERC" ALWAYS COMPLEMENTS LINK
2183 PERD, ISZ PERDSW /FOUND A PERIOD
2185 SNA CLA /ERROR IF WE HAVE
2186 JMP ERR08 /DOUBLE PERIODS OR NO FILE NAME
2187 DCA DEVLST+1 /DEVICE NO LONGER LEGAL
2188 DCA NAME+3 /ZERO EXTENSION OUT
2189 TAD [6 /AND SET POINTER TO 6TH CHARACTER
2193 SNA /WE MUST PACK THE NAME INTO ONE WORD OURSELVES
2194 JMP .+5 /BECAUSE IF "OPEN" IS CALLED FROM THE OUTPUT
2195 TAD NAME /SIDE OF AN "EB" COMMAND, WE SKIP
2196 SMA CLA /THE NAME COLLECTOR.(WITH GOOD REASON -
2197 CLL CML RAR /THE USR OVERLAYS THE COMMAND LINE).
2198 TAD NAME+1 /SINCE THE OS/8 "ASSIGN" CALL TO THE USR
2199 TAD NAME /REPLACES THE 2ND NAME WORD WITH THE DEVICE
2200 DCA DEVC /NUMBER, ALL NAME INFO MUST BE HELD IN WORD 1.
2201 JMP NGOM1 /DEVICE NAME STORED - RESET FOR FILE NAME
2205 DSKNAM, 5723 /=0423+1300+4000 - SERVES AS LIST TERMINATOR
2206 \fDEVQOT, ISZ PERDSW /IF WE NEVER SAW A PERIOD,
2207 DCA NAME+3 /WIPE OUT THE EXTENSION
2208 JMS I (GETUSR /BRING USR INTO CORE
2210 DEVLOD, TAD I OPEN /MOVE HANDLER ADDRESS
2212 ISZ OPEN /AND BUMP POINTER
2215 DCA CODE /ENTER OR LOOKUP
2216 CIF 10 /AND RESET TABLES
2219 RSTSW, 0 /DON'T ZAP OPEN FILES ON INPUT
2220 DCA DEVNO /ZERO SECOND NAME WORD
2227 JMP OPNERR /ERROR - KICK USR OUT FIRST
2229 TAD RSTSW /GET LOOKUP-ENTER SWITCH
2230 TAD NAME /IF NAME IS NULL AND THIS IS A LOOKUP,
2232 JMP OPSUCC /IT JUST SUCCEEDED
2236 CODE, 0 /ENTER OR LOOKUP
2237 STBLK, 0 /FILLED WITH STARTING BLOCK
2239 FLN, 0 /FILLED WITH -LENGTH
2240 /**** CHECK IF AC MUST = 0
2242 OPSUCC, TAD DEVHND /HANDLER ADDRESS IN AC
2244 PERDSW, 7777 /FLIP FLOP FOR EXTENSION
2245 NAMCNT, 0 /CHARACTER COUNT
2246 \f/*** CHECK FOR : (SEE P.26) RETURN VALUE IF FNF, ALSO IF FOUND
2247 OPNERR, TAD RSTSW /WE SHOULD ONLY KILL THE OUTPUT FILE
2249 JMP .+3 /IF THIS IS AN OUTPUT ERROR
2253 PECDSM, ECDISM /DISMISS THE USR
2255 0 /*K* TELLS ERR RTN TO EXIT IF WE WERE CHAINED TO
2272 /FILE OPEN COMMMANDS:
2274 EBAK, CLA CMA CLL /"EDIT BACKUP" COMMAND WITH LINK CLEAR
2275 PUSHJ /USE 'ROPEN' TO SET POINTERS
2276 ROPEN /WITHOUT KICKING OUT THE USR (AC=-1 ON ENTRY)
2277 TAD I (DEVNO /DEVICE #
2281 TAD I R /GET DEVICE CODE FROM DCB TABLE
2283 SMA CLA /NEGATIVE IF FILE-STRUCTURED
2284 JMP I (EBERR /YOU CAN'T DO THAT!
2285 TAD NAME+3 /EXTENSION
2288 JMP I (EBERR /CAN'T EB A .BK FILE
2289 TAD DOTBK /RESTORE EXTENSION
2291 TAD DOTBK /.BK EXTENSION
2294 TAD I (DEVNO /DEVICE #
2295 JMS I [200 /DELETE THE OLD BACKUP
2299 DOTBK, 213 /WHO CARES IF IT'S NOT THERE?
2300 TAD R /OLD EXTENSION
2302 CLA CLL CML IAC /SET EDIT BACKUP FLAG AND DO AN "ENTER"
2303 /LINK MUST BE SET HERE FOR OPEN
2304 WOPEN, DCA EBFLG /LINK NORMALLY 0 WHEN GOTTEN HERE
2305 CLA IAC /OPEN OUTPUT FILE
2306 JMS I (OPEN /ENTER CODE IN AC
2307 OUHNDL, 4001 /HANDLER ADDRESS
2308 DCA OUTHND /HANDLER ENTRY
2310 DCA ODEV /SAVE DEV #
2311 DCA I (OCNT /CLEAR BLOCK COUNT
2313 DCA I (OMAXLN /MAXIMUM FILE LENGTH
2323 DCA OUTR /ENABLE CHARACTER OUTPUT ROUTINE
2325 DCA I (DECPUT /FAKE RETURN FROM CHAR I/O ROUTINE
2327 JMP I (OSETP /SET UP BLOCK NUMBER AND POINTERS
2328 \f/FILE OPEN ROUTINE
2330 ROPEN, DCA QPTR /ENTERED WITH AC=-1 IF MONITOR IS TO BE KEPT
2331 /ENTERED WITH LINK=0
2332 JMS I (OPEN /LOOKUP CODE IN AC
2333 INHNDL, 7201 /HANDLER ADDRESS
2334 DCA INHND /SAVE HANDLER ENTRY
2338 DCA REND /CLEAR END-OF-FILE FLAG
2340 DCA I (IBLK /FIRST BLOCK
2342 DCA INRCNT /SET UP INPUT FILE LENGTH
2343 ISZ QPTR /SHOULD WE DISMISS THE MONITOR?
2344 JMP I (ECDISM /YES - KICK THE USR OUT AND POPJ
2350 \fNORMAL, TAD ODEV /CLOSE FILE
2355 OCNT, 0 /NUMBER OF BLOCKS
2357 TAD ERROR /RESET OUTPUT SUBROUTINE POINTER
2359 ECDISM, CIF 10 /DISMISS OS/8 USR ROUTINE
2364 /*** REALLY SHOULD BREAK UP INTO 2 ROUTINES
2366 SCHSRT, 0 /SORT LETTERS AND NUMBERS
2367 UPPERC /CONVERT TO UPPER CASE TO REDUCE CASES
2368 CLL /THE LINK WILL ALTERNATE EACH TIME
2369 TAD [-60 /WE ADD ONE OF OUR NEGATIVE CONSTANTS.
2370 SMA /THE LINK AT THE END WILL TELL WHETHER
2371 TAD [-12 /THE CHARACTER WAS ALPHANUMERIC
2372 SMA /(I.E. BETWEEN 60-71,101-132 OR 140-172)
2373 TAD M7 /OR A SEPARATOR CHARACTER.
2376 SZL CLA /WAS IT ALPHANUMERIC?
2378 JMP I SCHSRT /SKIP RETURN IF ALPHANUMERIC
2380 RT, 0 /ROUTINE TO PACK THIRD CHAR INTO OUTPUT BUFFER
2383 DCA DM /CALLED TWICE - FIRST TIME WITH CHAR IN AC,
2384 TAD DM /SECOND TIME WITH "DM" IN AC
2390 \fDVIMQL, 0 /FAKE MQL DVI
2391 DCA DVT1 /STORE DIVIDEND
2392 DCA MQ /INITIALIZE QUOTIENT
2393 DV1, TAD I DVIMQL /GET DIVISOR
2395 CLL /SET UP TO TAKE IMMEDIATE EXIT ON ZERODIVIDE
2396 TAD DVT1 /SUBTRACT DIVISOR FROM DIVIDEND
2397 SNL /OVERFLOWED YET?
2399 DCA DVT1 /NO - STORE IT BACK
2400 ISZ MQ /BUMP QUOTIENT
2404 ISZ DVIMQL /SKIP PAST DIVISOR
2405 JMP I DVIMQL /RETURN WITH QUOTIENT IN AC
2407 /SEARCH STRING MODIFIERS:
2409 SCHLST, 16 /^N - ANYTHING BUT
2411 23 /^S - ANY SEPARATOR
2414 \fDECPUT, 0 /DEVICE INDEPENDENT I/O
2415 TAD [200 /ADD ON PARITY BIT
2416 ISZ O3 /3RD CHAR OF 3?
2418 JMS RT /YES, SPECIAL HANDLING
2419 TAD DM /TEMP STORAGE
2421 SETO3, MTHREE /RESET SWITCH
2423 ISZ OCRCNT /END OF BUFFER?
2425 JMS FITS /CHECK FOR OUTPUT OVERFLOW
2427 DCA OCNT /NO - UPDATE OUTPUT COUNT
2428 JMS I OUTHND /OUTPUT THE BUFFER
2434 TAD INRSIZ /BUMP THE OUTPUT RECORD NUMBER BY THE MAXIMUM
2435 OSETP, DCA OBLK /SINCE ALL WRITES EXCEPT THE LAST ARE MAXIMAL
2436 TAD BUFOUT /BUFFER POINTERS
2441 DCA OCRCNT /DOUBLEWORD COUNT (7377 IF 8K, 6777 IF 12K)
2442 JMP SETO3 /SET BYTE COUNTER AND RETURN
2445 DCA OUTR /INHIBIT FUTURE OUTPUT
2447 O2, DCA I OPTR1 /NORMAL HANDLING
2448 ISZ OPTR1 /BUMP POINTER
2451 OMAXLN, 0 /SIZE OF HOLE FOR OUTPUT
2454 \fFITS, 0 /SUBROUTINE TO CHECK FOR OUTPUT OVERFLOW
2455 TAD OPTR1 /** AC MAY CONTAIN FUDGE ON INPUT **
2457 TAD BUFOUT /COMPUTE NUMBER OF WORDS IN BUFFER
2458 AND [7400 /ROUND "UP" TO NEXT BUFFERLOAD
2461 DCA OUCTRL /AND SAVE IT AS A BUFFER CONTROL WORD
2464 CLL RTL /ISOLATE THE BLOCK COUNT OF THE CONTROL WORD
2465 RTL /IN THE LOW ORDER PART OF THE AC
2467 TAD OCNT /ADD IT TO THE CURRENT OUTPUT COUNT
2469 TAD OMAXLN /SEE THAT WE DIDN'T OVERFLOW
2470 SNL SZA /THE ASSIGNED OUTPUT AREA
2471 JMP I FITS /OOPS - WE DID - ERROR RETURN
2473 TAD OMAXLN /SUBTRACT OFF THE LIMIT
2474 CIA /TO ARRIVE AT THE UPDATED BLOCK COUNT
2476 JMP I FITS /AND SKIP RETURN
2477 OUNAM, ZBLOCK 4 /NAME OF OPEN OUTPUT FILE GOES HERE
2479 \f/DISPLAY ROUTINE FOR PDP-12 SCOPE
2481 WASTE, 0 /** MUST BE AT MULTIPLE OF 2000
2482 XPOS, 0 /PDP-12 BETA REGISTER 1
2483 BETA2, 0 /PDP-12 BETA REGISTER 2
2485 DSPLAY, 0 /TEXT DISPLAY ROUTINE FOR TECO
2486 MTHREE /THIS ROUTINE DEPENDS ON THE FACT THAT THE
2487 TAD DSPLAY /HIGH ORDER BITS OF THE X-COORD ARE IGNORED
2488 DCA DX /BY THE VR12 HARDWARE
2489 TAD I DX /GET THE SKIP
2490 DCA DLPTST /PUT IT IN THE LOOP
2494 STL CIA /LOOK BACKWARD
2495 PUSHJ /FOR BEGINNING OF DISPLAY AREA
2497 D360, STA STL /=7360
2501 DCA P /RESTORE POSITION
2502 TAD NUMLNS /NOW SCAN FORWARD
2504 PUSHJ /FOR THE END OF THE DISPLAY AREA
2509 DCA R /*K* THIS NUMBER MUST GO IN R -
2510 TAD DX /THE ^W COMMAND NEEDS IT THERE
2511 DCA P /RESTORE ORIGINAL P
2515 DCA DQ /SAVE COUNT OF CHARS TO CURSOR POSITION
2523 SETXPS, DCA XPOS /SET X POSITION/COLUMN COUNTER
2529 CDF 0 /GET THE CHARACTER FROM FIELD 1
2530 AND [177 /AND OFF THE HIGH ORDER BITS
2532 SNA /CHANGE ALTMODES
2533 TAD CAHT /TO DOLLAR SIGNS
2535 SMA SZA /IF NOT A CONTXRACTER
2536 JMP DLOOP /DISPLAY IT AND KEEP GOING
2538 JMP DBLANK /DO BLANKS FAST
2541 JMP DISCR /YES - RESET X COORD
2547 JMP DISLF /LINE FEED, VERTICAL TAB, OR FORM FEED
2548 TAD (51 /ORDINARY CONTROL CHAR - RESTORE IT + 40
2549 DCA WASTE /SAVE CHAR
2550 JMS DISCHR /DISPLAY ^
2551 TAD WASTE /NOW DISPLAY ALTERED CHAR
2554 DLPTST, HLT /EITHER KSF OR TSF OR "ISZ R"
2556 JMP I DSPLAY /EXIT IMMEDIATELY IF TEST SKIPS
2557 ISZ DQ /ARE WE AT THE CURRENT POINTER POSITION?
2561 DCA XPOS /BACK UP X POSITION A HALF-CHARACTER
2564 6141 /ENTER LINC MODE
2570 MTHREE /AND MOVE X POSITION BACK TO WHERE IT WAS
2572 TSTEDS, ISZ DR /ARE WE THROUGH?
2574 JMP DSETUP /YES - START OVER
2575 \fDTABB, TAD XPOS /DISPLAY TAB
2578 DCA WASTE /GET NUMBER OF COLUMNS TO GO (-1)
2582 TAD WASTE /MULTIPLY BY 9
2583 DBLANK, TAD CAHT /BUMP ONE MORE COLUMN
2586 JMP SETXPS /NO - SET XPOS AND CONTINUE
2587 JMP LINOFL /YES - GO TO THE NEXT LINE
2589 /SUBROUTINE TO DISPLAY A CHARACTER
2591 DISCHR, DLPTST /*K* DISCHR MUST CONTAIN "DLPTST" WHEN WE
2592 CLL RAL /ARE EXAMINING CHARACTERS **
2594 DCA BETA2 /STORE ADDRESS OF TABLE ENTRY FOR CHAR -1
2597 6141 /ENTER LINC MODE
2600 0002 /RE-ENTER PDP-8 MODE
2603 ISZ XPOS /BUMP THE X COORDINATE/COLUMN COUNTER
2604 JMP I DISCHR /RETURN
2605 LINOFL, TAD (7054 /INDENT ALL CONTINUATION LINES
2607 DISLF, RAR /*K* RAR=7010 AC MAY HAVE A SMALL NUMBER
2608 TAD YPOS /IN IT HERE - THATS OK AS LONG AS ITS SMALL,
2609 TAD [-40 /SINCE ONLY THE HIGH 8 BITS OF YPOS COUNT.
2611 JMP I DISCHR /*K* THIS ALWAYS RETURNS TO DLPTST **
2613 YPOS= NAME /USE SOME FREE PAGE ZERO LOCATIONS
2614 DR= NAME+1 /FOR OUR TEMPORARIES
2618 \fDTABLE, 2000;2076; 7500;0000; 7000;0070; 7714;1477
2619 5721;4671; 6661;4333; 5166;0526; 0000;0070
2620 3600;0041; 4100;0036; 2050;0050; 0404;0437
2621 0500;0006; 0404;0404; 0001;0000; 0601;4030
2622 4536;3651; 2101;0177; 4523;2151; 4122;2651
2623 2414;0477; 5172;0651; 1506;4225; 4443;6050
2624 5126;2651; 5122;3651; 2200;0000; 4601;0000
2625 1000;4224; 1212;1212; 2442;0010; 4020;2055
2626 4077;5751; 4477;7744; 5177;2651; 4136;2241
2627 4177;3641; 4577;4145; 4477;4044; 4136;2645
2628 1077;7710; 7741;0041; 4142;4076; 1077;4324
2629 0177;0301; 3077;7730; 3077;7706; 4177;7741
2630 4477;3044; 4276;0376; 4477;3146; 5121;4651
2631 4040;4077; 0177;7701; 0176;7402; 0677;7701
2632 1463;6314; 0770;7007; 4543;6151; 4177;0000
2633 3040;0106; 0000;7741; 2000;2076; 1604;0404
2634 \fSTABLE, ZBLOCK 40 /SEARCH BUFFER
2636 CTLW, NCHK /^W COMMAND - IF THERE WAS A NUMBER BEFORE
2637 JMP CTLW2 /THE ^W, SET THE NUMBER OF LINES TO DISPLAY
2638 TAD N /EQUAL TO THAT NUMBER.
2640 /DON'T WORRY ABOUT NEGATIVE N
2641 CTLW2, ISZ R /FAKE OUT! (MUST BE BEFORE CALL TO DISPLY)
2642 DISPLY /IN ANY CASE, GO THROUGH ONE DISPLAY CYCLE
2645 SAVTRA, 0 /SAVE TRACE MODE
2649 JMP I SAVTRA /EXIT WITH TRACE OFF
2651 RESTRA, 0 /RESTORE TRACE MODE
2657 CHKQF, 0 /CHECK FOR EXPLICIT QUOTES
2658 ISZ QFLG /QUOTE FLAG SET?
2660 SCAN /GET QUOTING CHAR
2661 DCA QUOTE /PUT INTO SEARCH TABLE
2662 DCA QFLG /ZAP QUOTE FLAG
2666 JMP NOWRIT /READ-ONLY IF AC NOT 0 ON ENTRY
2669 DCA ZZ /FORCE Y TO WORK
2670 ISZ FFFLAG /IF WE DIDN'T SEE A FORM FEED ON INPUT
2671 JMP NOWRIT /DON'T OUTPUT ONE
2675 CHRY /READ NEW BUFFER
2676 CTCCHK /CHECK FOR ^C AND ^P
2677 CLA /*K* CTCCHK LEAVES AC NON-ZERO!
2680 GETUSR, 0 /ROUTINE TO LOCK THE USR INTO CORE
2682 TAD ZZ /IF THE TEXT BUFFER IS EMPTY AND
2683 SNA CLA /WE HAVE 12K, SO Q-REGS ARE IN FIELD 2,
2684 NWRUSR, NOP /(CHANGED BY INIT CODE TO "TAD [4" IF 12K)
2685 STL RTR /THEN WE SHOULD NOT SAVE CORE ON A USR CALL.
2686 DCA I (JSBITS /THIS STORES A 2000 OR A 2001
2688 JMS I [7700 /OK - NOW LOAD THE USR IN
2691 \f/E COMMAND MODIFIERS
2702 CHRU, QREF /COMMAND U
2704 ERR22, ERR /U MUST BE PRECEDED BY A NUMBER
2723 DRAD, NP&177+1200 /"TAD NP"
2727 \f/DISPATCH TABLE FOR COMMAND INPUT
2731 RUBY, ROCMND /RUBOUT
2739 EDFLAG, 0 /MUST BE KEPT TOGETHER
2748 /AND Q-REGISTER STORAGE
2749 COMLST, 7 /^G, COMMAND LINE EDIT LIST
2750 15 /CR, INSERT CR & LF
2752 25 /^U - RUB OUT LINE
2755 23 /^S - SAVE OLD COMMAND LINE IN Q-REG Z
2759 CHRM, QREF /COMMAND M
2760 TAD M4 /4 ITEMS PUSHED TO
2761 PUSHL /SAVE CURRENT MACRO STATE
2764 ITRST /SO THE "O" COMMAND WILL WORK IN MACROS
2765 SCANP /ZEROED BY "PUSHL"
2766 TAD PDLP /MUST CHECK PDL AT END OF MACRO
2769 TAD QNMBR /Q-REGISTER TO EXECUTE
2770 SETCMD /SET COMMAND LINE TO THIS Q-REG
2771 POPJ /LEAVE NUMBER FLAG ALONE AND EXIT
2773 CHKBZ, 0 /SEE THAT B .LE. C(AC) .LE. ZZ
2776 CIA /ENTERED WITH LINK SET CORRECTLY
2778 SNL /13-BIT ARITHMETIC
2779 ERR11, ERR /C(AC)>ZZ
2781 TAD ZZ /RESTORE ORIGINAL AC
2784 ALTLST, 175 /ALT MODE
2785 176 /ANOTHER ALTMODE
2787 \fSCUPPR, 0 /SCAN AND CONVERT TO UPPER CASE
2790 JMP I SCUPPR /THAT'S ALL?
2792 /Q-REGISTER STORAGE - EACH Q-REGISTER TAKES 2 WORDS.
2793 /WD 1 CONTAINS THE LENGTH OF THE CHARACTER PART OF THE REGISTER (IF ANY)
2794 /WD 2 CONTAINS THE VALUE OF THE NUMERIC PART OF THE REGISTER (IF ANY)
2796 QARRAY, ZBLOCK 110 /36 Q-REGISTERS * 2 WORDS/REGISTER = 72 WORDS
2797 QPNTR, CHNSTR /FAKE Q-REGISTER FOR INPUT LINE - LENGTH ONLY.
2801 ET1, TYPE /TYPE CHAR REPRESENTED BY ARGUMENT
2803 CTLT2, LISTEN /^T COMMAND - VALUE OF NEXT CHAR FROM TTY
2804 ET8, TYPE /*ET ECHO THE CHARACTER
2805 TAD SCHAR /GET THE CHARACTER
2806 JMP I (NCOM14 /JUMP INTO NUMBER PROCESSOR
2808 CTLE, TAD FFFLAG /^E COMMAND - RETURNS FORM FEED FLAG
2811 STL /EXTEND SIGN BIT TO LINK
2812 JMP I (NCOM /RETURN -1 IF F.F., 0 OTHERWISE
2816 /COMMAND DISPATCH TABLE ** ALLOW EVEN/ODD FOR NOVICE SUBSET?
2818 CDSP, POPK;CTLA;SERR;CTLC;CTLD;CTLE;CTLF;CTLC /0-7
2819 CTLH;CTLI;POPK;SERR;POPK;POPK;CTLN;CTLO /10-17
2820 T0;SERR;SERR;SERR;CTLT;CTLU;ERR35;ERR27 /20-27
2821 SERR;SERR;SERR;ZRON;SERR;SERR;CTUA;SERR /30-37
2822 POPK;CEXP;CDBQ;CNBS;SERR;CPCS;CAMP;ZRON /40-47
2823 COPR;CCPR;CAST;CPLS;CCMA;CMIN;CDOT;CVIR /50-57
2824 NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR /60-67
2825 NMBR;NMBR;CCLN;CSEM;CHLT;CEQL;CHGT;CQSM /70-77
2826 CATS;CHRA;CHRB;CHRC;CHRD;CHRE;CHRF;CHRG /100-107
2827 CHRH;CHRI;CHRJ;CHRK;CHRL;CHRM;CHRN;CHRO /110-117
2828 CHRP;CHRQ;CHRR;CHRS;CHRT;CHRU;SERR;SERR /120-127
2829 CHRX;CHRY;CHRZ;SERR;CBSL;SERR;CHUA;CHBA /130-137
2830 /END OF DISPATCH TABLE
2832 PDLBEG, ZBLOCK 11 /BEGINNING OF PUSHDOWN LIST
2833 QPUT12, ZBLOCK 16 /ROUTINES INSERTED LATER - USED IN
2834 ASR35, ZBLOCK 10 /INITIALIZATION, OVERLAYED BY PUSHDOWN LIST
2835 PDLEND, 0 /END OF PUSHDOWN LIST
2839 / INITIALIZATION SECTION
2840 / ENTER HERE AT 5200 TO MODIFY TECO TO USE A MODEL 35 TELETYPE
2841 / SORRY - NO CURRENT PAGE LITERALS
2843 TECO35, ISZ JTECO /IF CALLED VIA "R" OR "RUN"
2844 TAD I XR /MOVE ASR-35 PATCH (WHICH OUTPUTS TABS AND
2845 DCA I INXR / FORM FEEDS) OVER PRINT ROUTINE
2851 DCA I Y7745 /CHANGE STARTING ADDRESS IN CASE WE'RE RESTARTED
2852 /AND FALL INTO INITIALIZATION ROUTINE
2854 TCINIT, TLS /INITIALIZATION ROUTINE - INITIALIZE THE TTY
2858 DCA I PTECO1 /CHANGE THE ENTRY AT 200 SO WE'RE NOT CALLED AGAIN
2860 6141 /ENTER LINC MODE (MAYBE)
2861 4 /ESF - SET SMALL CHARACTERS FOR SCOPE
2862 0261 /ROL I 1 - ROTATE LINK INTO AC11
2863 0002 /BACK TO PDP-8 MODE
2864 SNA CLA /AC NON-ZERO IF WE ARE A PDP-12
2865 JMP NOTA12 /NO, JUST AN ORDINARY 8
2867 JMS CHANGE /TRADE OFF TWO PAGE HANDLERS FOR A SCOPE
2872 COR0, CDF 0 /NEEDED FOR PDP-8L
2873 TAD CORSIZ /GET FIELD TO TEST
2876 AND COR70 /MASK USEFUL BITS
2878 DCA .+1 /SET UP CDF TO FIELD
2879 COR1, CDF /N /N IS FIELD TO TEST
2880 TAD I CORLOC /SAVE CURRENT CONTENTS
2881 COR2, NOP /HACK FOR PDP-8!
2883 TAD COR2 /7000 IS A "GOOD" PATTERN
2885 COR70, 70 /HACK FOR PDP-8, NOP
2886 TAD I CORLOC /TRY TO READ BACK 7000
2887 CORX, 7400 /HACK FOR PDP-8, NOP
2888 TAD CORX /GUARD AGAINST WRAP-AROUND
2891 JMP COREX /NON-EXISTENT FIELD EXIT
2892 TAD COR1 /RESTORE CONTENTS DESTROYED
2894 ISZ CORSIZ /TRY NEXT HIGHER FIELD
2897 COREX, CDF 0 /LEAVE WITH DATA FIELD 0
2899 TAD CORSIZ /HIGHEST EXISTING FIELD
2904 TAD YM7 /MORE THAN 8K
2917 JMS CHANGE /AND CHANGE A WHOLE MESS OF LOCATIONS
2918 JTECOM, JMS I YOVINIT /WRITE OUT OVERLAYS
2927 JTECO, JMP I .+1 /INCREMENTED IF WE WERE'NT CHAINED TO
2931 CORLOC, CORX /ADDRESS TO TEST IN EACH FIELD
2932 CORV, 1400 /7000+7400+1400=0
2933 CORSIZ, 1 /CURRENT FIELD TO TEST
2938 \f/CHAINED INIT CODE - MOVE 17600 INTO Q-REGISTER SPACE
2941 TAD I DX /GET A COMMAND LINE CHAR
2946 TAD YFATALJ /SET UP THE FATAL ERROR EXIT
2947 DCA I YCHOOPS /IN THE ERROR ROUTINE
2952 CHANGE, -10 /ROUTINE TO CHANGE SPECIFIC LOCATIONS
2953 DCA XR /STORE TABLE POINTER
2954 CHANGL, TAD I XR /GET LOCATION
2956 JMP I CHANGE /END OF LIST - RETURN
2958 TAD I XR /GET CONTENTS
2962 /CHECK FOR OS/8 SCOPE BIT, IF ON, PATCH TECO
2963 /ALSO SEND ESC SEQ TO TERMINAL TO SEE IF VT05 OR VT5X.
2981 /FLOW INTO NEXT PAGE
2982 \fSCOPE, RUBY; SCOPY /MAKE SCOPE RUBOUTS WORK
2983 BLSP1; TAD CACR /MAKE BELL SPACE WORK
2984 BLSP2; TYPE /AND MORE RUBOUTS
2985 BLSP3; SCAPE&177+4600 /JMS I (ESCAPE
2986 BLSP4; 113 /MORE BELL SPACE
2987 EUFLAG; -1 /SET EU TO -1
2991 \f/LOCATIONS TO CHANGE MUST BE CHANGED IN OVERLAY IMAGE
2992 /BEFORE OVERLAY IS WRITTEN OUT
2994 /LOCATIONS TO CHANGE IF WE HAVE 12K OF CORE
2996 TWLVEK, INRSIZ; 4 /INPUT BUFFER GROWS TO 4 BLOCKS LONG
2997 INCTLW; 1021 /AND LIVES IN FIELD 2
3000 IC; CDF 0 /THIS WAS A NOP TO SPEED UP RTS-8 OPERATION
3001 L12K1; J12K1 /SPEED UP TEXT MOVE ROUTINES,
3002 L12K2; J12K2 /SINCE Q-REGISTERS DON'T SIT ON TOP OF TEXT.
3003 OUTSIZ; 6777 /OUTPUT BUFFER TAKES OVER OLD INPUT BUFFER SPACE
3005 NWRUSR; TAD [4 /LET USR BE CALLED WITHOUT SAVING CORE
3006 MQMAX; -Q12MAX /ALLOW MORE Q-REGISTER STORAGE
3011 /LOCATIONS TO CHANGE IF WE'RE RUNNING ON A PDP-12
3013 PDP12, KSFWT; DISPLY /FIX KEYBOARD AND PRINTER WAITS
3014 TSFWT; DISPLY /SO THEY DISPLAY WHILE WAITING
3015 CDSP+127;CTLW /ENABLE W COMMAND
3016 INHNDL; 7200 /ONE PAGE INPUT HANDLER ONLY
3017 OUHNDL; 7400 /DITTO OUTPUT HANDLER
3018 /VALUE MUST BE 0 INITIALLY TO END LIST
3019 OVINIT, 0 /WRITE OUT OVERLAYS
3020 /IF MORE THAN 12K, MOVE OVERLAYS TO FIELD 3
3024 JMP L16K /LESS THAN 16K
3043 / TAD (COREAD-COREND-1
3053 3200 /WRITE OUT I/O-OVERLAY
3055 JMP OVERR /ERROR WRITING OVERLAY
3058 5600 /WRITE OUT Q-OVERLAY AND E-OVERLAY
3060 JMP OVERR /ERROR WRITING OUT OVERLAY
3062 JMP I OVINIT /RETURN
3064 OVERR, TAD [-400 /SWAP IN ERROR OVERLAY FROM CORE AND MAKE SURE
3065 JMS MOVE /WE RETURN TO MONITOR
3070 / DCA I (ERRTMP /SET FATAL SWITCH
3073 ERR30, JMP I (ERRYY /CALL ERROR MESSAGE PROCESSOR
3099 \f /ROUTINES TO BE (POSSIBLY) SWAPPED INTO TECO
3103 QPUTS, 0 /12K Q-REGISTER PUT ROUTINE
3112 GETQX, 0 /12K Q-REGISTER GET ROUTINE
3121 JMP OUTCMX / FORM FEED/VERT. TAB - USE 8/4 FILLERS
3122 OUTHTX, TAD COLCT /GET COLUMN COUNTER
3125 CLA CMA RAL /OUTPUT 2 FILLERS IF MORE THAN 4 CHARS TO TAB
3126 DCA COLCT /OTHERWISE 1 (COLCT IS A MODULO 8 COUNTER)
3127 OUTCMX, TAD SCHAR /GET CONTROL CHAR TO TYPE
3128 PUTT /AND TYPE IT - WE WILL NOW FILL WITH NULLS
3145 CHROO, TAD SCANP /O COMMAND
3146 DCA COOQ /SAVE CURRENT SCAN POINTER
3148 /??? DCA QFLG /QUOTED "O" COMMAND NOT ALLOWED
3149 QSKP /CHECK THAT THERE IS REALLY A STRING HERE
3150 /BECAUSE WE WILL NOT USE "SCAN" TO GET CHARACTERS
3151 /FROM THIS STRING IN THE SEARCH LOOP.
3152 TAD ITRST /"O" ONLY SCANS FROM THE BEGINNING OF THE
3153 DCA SCANP /CURRENT ITERATION LOOP.
3154 /(JUMPS BACKWARD OUT OF ITERATIONS ARE VERBOTEN)
3156 CS41, 41 /SEARCH FOR !
3158 DCA QUOTE /SET QUOTE CHAR TO !
3161 DCA QP /SET UP PTR TO ACCESS GOTO STRING
3163 GETQ /GET CHAR FROM GOTO STRING
3166 QUOTST /GET CHAR FROM LABEL
3167 JMP COOB /LABEL EXHAUSTED
3170 JMP CSMQ /NO - REJOIN SEARCH ROUTINE FOR ANOTHER !
3174 TAD CAAM /IS GOTO STRING EXHAUSTED TOO?
3176 JMP CSMQ+1 /NO - REJOIN ! SEARCH ROUTINE
3177 ENTRCE /RE-ENABLE TRACE
3180 \f/ROUTINE TO SKIP COMMANDS UP TO A CHARACTER
3182 SETSKP, 0 /SET UP TO SKIP COMMANDS
3184 DCA SKPLST /CHAR TO TRAP ON
3185 NOTRCE /DISABLE TRACE MODE
3186 CSML1, DCA BRACKS /INITIALIZE BRACKET LEVEL
3187 CSML, SCANUP /GET A COMMAND CHAR
3191 JMP CSML /NOTHING SPECIAL - KEEP GOING
3192 CSMD, SCAN /CLEAR OUT MODIFIER
3195 CSMU, SCAN /SKIP ^U COMMAND
3196 SKP CLA /GET RID OF Q-REG NUMBER
3197 CSMFS, QSKP /FS COMMAND - SKIP FIRST STRING
3198 CSMQ, QSKP /SKIP OVER A QUOTED STRING
3200 IREST /FIX UP QUOTE CHAR
3201 JMP CSML /KEEP GOING
3203 CSMY, TAD SCHAR /SKIP ROUTINE FOR ^A AND !
3204 DCA QUOTE /WE MUST SCAN UNTIL WE FIND
3205 JMP CSMQ /A COPY OF THE COMMAND CHARACTER.
3206 \f /SORT LIST FOR " COMMAND
3221 CSME, SCANUP /FOUND E COMMAND
3223 ESKLST /LOOK FOR ER & EW & EG
3224 ESKTAB-ESKLST /USE CSMQ TO SKIP
3227 CSMF, SCAN /F COMMAND - BETTER BE FOLLOWED BY S,N, OR _
3229 JMP CSMFS /SCAN OFF TWO STRINGS
3231 CSMI, ISZ BRACKS /INCREMENT BRACKET LEVEL
3235 TAD BRACKS /DECREMENT BRACKET LEVEL
3237 JMS I (POPITR /IF WE EXIT <> POP OFF ITERATION VALUES
3240 SKPRTN, TAD BRACKS /WE HAVE FOUND THE DESIRED CHARACTER
3241 SZA CLA /BUT IF THE BRACKET LEVEL IS NON-ZERO,
3242 JMP I XSORTA1 /WE CANNOT ACCEPT IT - KEEP SORTING
3243 JMP I SETSKP /EVERYTHING IS OK - RETURN
3246 \f/SORT LIST FOR SKIPPING OVER COMMANDS
3248 SKPLST, 0 /TRAP CHAR
3272 \f/ SKIP LIST FOR E'S
3278 CSMA, STA /LIST TERMINATOR
3279 JMP CSMQ1 /FOUND @ - SET QUOTE FLAG AND CONTINUE
3284 \f/DISPATCH TABLE FOR SKIPPING OVER COMMANDS:
3286 SKPTAB, SKPRTN /DESIRED CHARACTER - RETURN
3299 ESKTAB, CSMQ /I OR ER
3310 \fSEMO, SKPSET /PLOD THRU
3312 ENTRCE /IT'S THE RIGHT ONE, TURN TRACE BACK ON
3316 CNDTAB, TSTSEP /LEGAL CONSTITUENT OF SYMBOL FOR ASSEMBLER
3324 SZA CLA /UNSUCCESSFUL
3325 TSTSEP /ALPHANUMERIC
3329 /THIS TABLE PRESUPPOSES 1000000000000 IS ILLEGAL
3330 \f /COMMANDS " AND '
3332 CDBQO, NCHK /COMMAND "
3333 ERR23, ERR /NO NUMBER TO TEST
3338 SMA /CHECK THAT CHAR WAS TRANSLATED
3339 ERR20, ERR /NO - NO SUCH TEST
3340 DCA SKIP /STORE TEST INSTRUCTION
3341 GETNUM /PERFORM THE TEST
3342 SKIP, HLT /TEST SKIPS IF TRUE
3344 POPJ /CONDITION SATISFIED
3346 DCA SKIP /BEGINNING SKIPPING COMMANDS
3347 SKPSET /CALL SKIPPING ROUTINE
3350 RESORT /NEED ANOTHER: BACK TO CSML
3351 ENTRCE /RE-ENABLE TRACE
3352 JMP I [IREST /COMMAND ' NO ACTION TO TAKE
3354 CNDI, SCAN /HIT ANOTHER "
3355 STA /SO SKIP MATCHING '
3358 RESORT /GO BACK TO CSML
3361 CSEMO, TAD ITRST /COMMAND ; - ALSO HERE ON FAILING NON-COLON SEARCH
3363 ERR09, ERR /IF NOT IN ITERATION
3367 JMP I (ZRON /NO NUMBER - IGNORE IT, WE DID IT ALREADY
3368 JMP SEMO /SEARCH FOR >
3372 JMP CGTC /0 MEANS INFINITY
3373 ISZ ITRCNT /LOOK FOR COUNT EXHAUSTED
3374 JMP CGTC /NO, CONTINUE
3375 CGSG, JMS POPITR /POP UP OLD ITERATION PARAMETERS
3379 ERR10, ERR /IF NOT IN ITERATION
3380 JMP I (ZROSPN /BACK TO ROOT
3383 CLA IAC /** AC NOT NECESSARILY 0 ON ENTRY
3388 \fCHLTO, MTWO /COMMAND <
3393 SNA CLA /WAS A NUMBER SPECIFIED?
3394 JMP INF /NO, ASSUME INFINITY
3399 JMP SEMO /0 OR NEGATIVE MEANS SKIP ITERATION
3401 INF, DCA ITRCNT /SET UP TERMINATION
3402 TAD SCANP /SAVE CURRENT SCAN PNTR
3403 DCA ITRST /ALWAYS .GE. 1 IN ITERATION
3404 DCA NFLG /CLEAR NUMBER FLAG
3407 /SHOULD WE TREAT 0<> SPECIAL?
3425 ERLOOP, ISZ N /BUMP ERROR NUMBER
3428 TAD I (ERRXX /NO - CHECK FOR MATCH
3429 Z40, SZA CLA /FOUND WHAT WE WANTED?
3430 JMP ERLOOP /NO - KEEP LOOKING
3432 CLL RAL /MULTIPLY BY 2
3435 TAD I PTR /GET FIRST WORD OF ERR MSG
3444 JMS I (SIXTYP /TYPE LEFT CHARACTER
3446 JMS I (SIXTYP /TYPE RIGHT CHARACTER
3452 JMS I (SIXTYP /TYPE 3RD CHARACTER
3460 JMP I (ERRRET /NO LONG ERROR MESSAGE UNLESS 16K OOR MORE
3461 TAD Z40 /TYPE EXTENDED ERROR MESSAGE
3469 DCA PTR /GET PTR TO PTR TO ERROR MSG
3471 TAD I PTR /GET PTR TO ERROR MESSAGE
3478 JMS NEGCHR /NEGATIVE CHAR IS FLAG FOR ERRONEOUS CHARACTER
3484 CTCT, KRS /CTRL/C ERROR MESSAGE
3485 AND [177 /ISOLATE ^C OR ^P INTO 7-BIT
3486 TYPE /READ CTRL/C FROM BUFFER
3487 CRLF /ECHO IT AND CR LF
3490 JMP ERL2 /PRINT XAB ERROR MESSAGE
3492 / TAD CHAR /LOOK AT PREVIOUS CHARACTER
3494 / JMP I (ERRRET /ONE ^C DO NOTHING
3495 JMP I (CTLC /TWO ^C'S, ABORT
3503 DCA LASTC /SAVE $ FOR ALTMODE
3510 JMS WOW /USE CARRET FORM FOR CONTROL CHARS
3511 TAD LASTC /AC MAY BE NON-0
3540 AND [137 /IGNORE SIGN BIT OF BYTE
3546 \fERLIST, -ERR01-1 /LIST OF POINTERS TO ALL POSSIBLE
3547 -ERR02-1 /CALLS TO THE ERROR ROUTINE.
3581 0 /ERROR 36 - UNLABELED ERROR - NAMELY "JMS I OUTR"
3582 /** MUST BE LAST ERROR MESSAGE
3583 \fERBASE, TEXT /ILL/ /1 ILLEGAL COMMAND
3584 TEXT /UTC/ /2 UNTERMINATED COMMAND
3585 TEXT /IQN/ /3 ILLEGAL Q-REGISTER NAME
3586 TEXT /PDO/ /4 INTERNAL PUSH DOWN OVERFLOW (RECURSION)
3587 TEXT /MEM/ /5 MEMORY OVERFLOW
3588 TEXT /STL/ /6 SEARCH STRING TOO LONG
3589 TEXT /ARG/ /7 ARGUMENT ERROR
3590 TEXT /IFN/ /8 ILLEGAL FILE NAME
3591 TEXT /SNI/ /9 SEMICOLON NOT IN ITERATION
3592 TEXT /BNI/ /10 CLOSE BRACKET NOT IN ITERATION
3593 TEXT /POP/ /11 POINTER OFF PAGE
3594 TEXT /QMO/ /12 Q-REGISTER MEMORY OVERFLOW
3595 TEXT /UTM/ /13 UNTERMINATED MACRO
3596 TEXT /OUT/ /14 OUTPUT ERROR
3597 TEXT /INP/ /15 INPUT ERROR
3598 TEXT /FER/ /16 FILE ERROR
3599 TEXT /FUL/ /17 OUTPUT COMMAND WOULD HAVE OVERFLOWED
3600 TEXT /NAY/ /18 NEGATIVE ARGUMENT TO Y
3601 TEXT /IEC/ /19 ILLEGAL E CHARACTER
3602 TEXT /IQC/ /20 ILLEGAL " CHARACTER
3603 TEXT /NAE/ /21 NO ARGUMENT BEFORE =
3604 TEXT /NAU/ /22 NO ARGUMENT BEFORE U
3605 TEXT /NAQ/ /23 NO ARGUMENT BEFORE "
3606 TEXT /SRH/ /24 FAILING SEARCH
3607 TEXT /NAP/ /25. NEGATIVE OR 0 ARGUMENT TO P
3608 TEXT /NAC/ /26. NEGATIVE ARGUMENT TO ,
3609 TEXT /NYI/ /27. ^W NOT IMPLEMENTED
3610 TEXT /DMY/ /28. NOT USED
3611 TEXT /NAS/ /29. NEGATIVE OR 0 COUNT TO SEARCH
3612 TEXT /WLO/ /30. CAN'T WRITE OUT ERROR MESSAGE OVERLAY
3613 TEXT /IFC/ /31. ILLEGAL F CHARACTER
3614 TEXT /YCA/ /32. Y COMMAND ABORTED
3615 TEXT /CCL/ /33. CCL NOT FOUND OR EG TOO BIG
3616 / TEXT /XAB/ /34. EXECUTION ABORTED BY ^C
3618 TEXT /NYI/ /35. ^V NOT IMPLEMENTED
3619 TEXT /NFO/ /36. NO FILE FOR OUTPUT
3620 \fCNVTAB, TEXT /HTLFVTFFCR/
3654 /"EX" AND "EC" COMMANDS
3655 EXIT, PUSHJ /"EX" COMMAND
3656 EXITC /CLOSE OUT THE FILES
3657 JMP I (CTLC /AND GO AWAY
3659 EXITC, TAD OUTR /"EC" COMMAND
3660 CIA /CHECK FOR OPEN OUTPUT FILE
3663 POPJ /NOPE, EXIT ALREADY
3664 EXLOOP, JMS I [NXTBUF /GET NEXT BUFFER
3667 TAD ZZ /CHECK FOR END-OF-FILE AND
3668 SZA CLA /TEXT BUFFER EMPTY
3672 CMA /REDUCE THE OUTPUT DOUBLEWORD COUNT
3673 AND [177 /TO REFLECT ONLY THOSE WORDS REMAINING
3674 CMA /UNTIL THE NEXT BLOCK BOUNDARY
3676 TAD (7200 /USED TO BE 'DV7200'
3677 DCA MQ /SET COUNTER FOR ONE BLOCK WORTH OF STUFF
3678 TAD (32 /^Z END-OF-FILE
3681 JMP .-2 /FILL AT LEAST THE CURRENT BUFFER AND OUTPUT IT
3682 TAD ODEV /MAKE SURE THE USR KNOWS THE HANDLER
3683 TAD (OSHNDT-1 /*K* - POINTER INTO
3684 DCA TY / OS/8 DEVICE RESIDENCY TABLE
3687 DCA I TY /MARK THE HANDLER AS IN CORE
3688 JMS I (GETUSR /LOCK THE USR INTO CORE
3689 TAD EBFLG /IS THIS AN EDIT BACKUP?
3691 JMP I (NORMAL /NO, JUST CLOSE FILE
3692 TAD I (OCNT-1 /YES, LOOKUP OLD FILE TO CHANGE NAME
3695 TAD ODEV /INPUT AND OUTPUT ARE ON SAME DEVICE
3699 TY, 0 /USELESS LENGTH--USE IT FOR TEMPORARY
3700 JMP I (NORMAL /ERROR-JUST CLOSE FILE AND DON'T TELL ANYBODY
3701 CDF 10 /ALL THAT WAS JUST TO GET THE DIRECTORY IN CORE
3702 STA /SO WE COULD FIDDLE WITH IT
3703 TAD I (17 /FORM POINTER TO DIRECTORY ENTRY
3706 TAD (213 /CHANGE EXTENSION TO .BK
3708 TAD I Z7 /DIRECTORY BLOCK IT CAME FROM
3713 4210 /WRITE IT BACK OUT
3716 JMP .-4 /ERROR! KEEP TRYING-THIS CAN BLOW A DIRECTORY
3727 \fEXITGO, PUSHJ /DO AN EC TO CLOSE OUT FILE
3730 DCA STOCD /MAKE REUSABLE IN CASE .START
3733 TAD (-47 /47 ENTRIES IN CD TABLE
3737 TAD [200 /TURN ON PARITY BIT FOR OS/8
3744 ERR33, ERR /EG ARG TOO BIG
3755 SNA CLA /ANYTHING IS ARG
3757 JMS STOCD /STORE 0 AT END
3760 DCA ARG1 /JUST IN CASE PREVIOUS EG FAILED
3769 DCA I (JSBITS /KEEP USR IN CORE
3780 CCLNAM, FILENAME CCL.SV
3781 \fREGEG, /EDIT AND GO - A CCL SPECIAL
3782 JMS I (7607 /CALL THE OS/8 SYSTEM HANDLER
3783 0200 /TO READ IN THE CCL OVERLAY
3786 JMP ERR33 /ERROR ON SYSTEM DEVICE!
3787 JMP I .+1 /GO TO THE OVERLAY
3788 CCLOST /AT OUR "SPECIAL" LOCATION
3805 DTAB2-DLIS /CHECK FOR LEGALITY
3806 ERR19, ERR /BAD CHAR AFTER E
3813 JMP XXNO /NO, RETURN VALUE
3815 DCA I XXFLAG /SET NEW VALUE
3821 JMS I XXSUB /CALL IT
3823 XXNO, TAD I XXFLAG /GET VALUE
3824 JMP I (NNEW13 /MAKE NEW 13-BIT VALUE
3832 DTAB, EDFLAG /MUST BE NEGATIVE
3833 EHFLAG /TO CAUSE SUBSTITUTION
3838 \fXXFLAG, 0 /POINTS TO FLAG IN MEMORY ABOVE 4000
3848 \f/ MASK;SKIP;LOC;VALUE IF SKIPS;VALUE IF NO SKIP
3852 7777; SMA CLA; EU1; CLA; SNA CLA
3853 7777; SPA SNA CLA; EU2; TAD [40;NOP
3859 1; SNA CLA; KTYPE; PUTT; TYPE
3860 1; SNA CLA; ET1; PUTT; TYPE
3861 10; SNA CLA; ET8; CLA; TYPE
3871 JMP I FIXUP /DONE, RETURN TO 0
3875 DCA SKIPY /SAVE SKIP CONDITION
3878 DCA LOC /SAVE LOC TO CHANGE
3880 TAD I XXFLAG /LOOK AT FLAG
3881 AND MASK /'AND' WITH MASK
3893 \fCTLUO, QREF /COMMAND ^U
3894 QSKP /COUNT UP STRING
3897 TAD SCANP /LENGTH OF STRING
3899 / *** PROHIBIT STRING > 2047 CHARS
3901 ADJQ /ADJUST Q-REGISTERS AND SET NEW LENGTH
3902 TAD OSCANP /RESET SCAN POINTER
3913 \f/NUMERICAL OUTPUT ROUTINE
3916 DCA ZERFLG /INITIALIZE "LEADING ZEROS" FLAG
3919 DCA OUTDEV /SAVE OUTPUT ROUTINE ADDRESS
3920 TAD NLINK /POS OR NEGATIVE?
3933 JMS I OUTDEV /OUTPUT MINUS SIGN
3935 DCA ZCOUNT /ITERATION COUNT
3940 DCA DIV1 /GET DIVISOR
3942 MQLDVI /DIVIDE BY A POWER OF THE BASE
3946 JMP LZ /IGNORE LEADING ZEROS
3950 DCA ZERFLG /SET LEADING ZEROS FLAG
3951 LZ, TAD DVT1 /GET REMAINDER
3953 ISZ ZCOUNT /GO AROUND AGAIN?
3954 JMP ZDIGIT /WHY NOT?
3957 JMS I OUTDEV /OUTPUT LAST DIGIT NO MATTER WHAT
3960 OUTDEV, 0 /WHERE WE'RE SENDING THE DIGITS
3966 /COMMANDS = AND \ - NUMERICAL OUTPUT
3968 CEQLO, NCHK /COMMAND =
3969 ERR21, ERR /NO NUMBER
3972 JMS I (POKE /LOOK AHEAD ONE CHARACTER
3973 TAD (-75 /CHECK FOR = SIGN
3975 JMP SETRAD /SINGLE =
3976 SCAN /DOUBLE = (PASS UP SECOND ONE)
3980 DCA RADIX /SET OCTAL RADIX TEMPORARILY
3984 DCA RADIX /RESTORE ORIGINAL RADIX
3986 CRLF /NO, END WITH CRLF
3990 CBSLO, NCHK /COMMAND \
3998 NMBR2 /INITIALIZE RESULT TO 0
4001 AND [377 /GET CURRENT CHARACTER
4003 TAD (-55 /CHECK FOR MINUS SIGN
4007 CMIN /RECORD MINUS SIGN
4010 SNA CLA /CHECK FOR PLUS SIGN
4011 CBSNP, ISZ P /BUMP POINTER PAST SIGN
4022 NMBR2 /YES - ACCUMULATE IT
4026 STL CIA /CHECK FOR END OF BUFFER
4090 "I;"l;"l;"e;"g;"a;"l;" ;"C;"o;"m;"m;"a;"n;"d;" ;4000;0
4092 "U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"C;"o;"m;"m;"a;"n;"d;0
4094 "I;"l;"l;"e;"g;"a;"l;" ;"Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"N;"a;"m;"e;" ;4000;0
4096 "I;"n;"t;"e;"r;"n;"a;"l;" ;"P;"u;"s;"h;" ;"D;"o;"w;"n;" ;"O;"v;"e;"r
4099 "S;"t;"o;"r;"a;"g;"e;" ;"C;"a;"p;"a;"c;"i;"t;"y;" ;"E;"x;"c;"e;"e;"d;"e;"d;0
4101 "S;"e;"a;"r;"c;"h;" ;"S;"t;"r;"i;"n;"g;" ;"t;"o;"o;" ;"L;"o;"n;"g;0
4103 "I;"m;"p;"r;"o;"p;"e;"r;" ;"A;"r;"g;"u;"m;"e;"n;"t;"s;0
4105 "I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4106 " ;"i;"n;" ;"F;"i;"l;"e;"n;"a;"m;"e;0
4108 ";;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0
4110 ">;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0
4112 "A;"t;"t;"e;"m;"p;"t;" ;"t;"o;" ;"M;"o;"v;"e;" ;"P;"o;"i;"n;"t;"e;"r
4113 " ;"O;"f;"f;" ;"P;"a;"g;"e;0
4115 "Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"M;"e;"m;"o;"r;"y;" ;"O;"v;"e;"r;"f;"l;"o;"w;0
4117 "U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"M;"a;"c;"r;"o;0
4119 "O;"u;"t;"p;"u;"t;" ;"E;"r;"r;"o;"r;0
4121 "I;"n;"p;"u;"t;" ;"E;"r;"r;"o;"r;0
4123 "F;"i;"l;"e;" ;"E;"r;"r;"o;"r;0
4125 "O;"u;"t;"p;"u;"t;" ;"C;"o;"m;"m;"a;"n;"d;" ;"w;"o;"u;"l;"d;" ;"h;"a;"v;"e
4126 " ;"O;"v;"e;"r;"f;"l;"o;"w;"e;"d;0
4128 "N;"u;"m;"e;"r;"i;"c;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"Y;0
4130 "I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4131 " ;"a;"f;"t;"e;"r;" ;"E;0
4133 "I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4134 " ;"a;"f;"t;"e;"r;" ;"";0
4136 "N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"=;0
4138 "N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"U;0
4140 "N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"q;"u;"o;"t;"e;0
4142 "S;"e;"a;"r;"c;"h;" ;"f;"a;"i;"l;"e;"d;0
4144 "N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o
4145 " ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"P;0
4147 "N;"e;"g;"a;"t;"i;"v;"e;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;",;0
4149 "C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t
4150 " ;"I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177
4151 "[;"u;"s;"e;" ;"W;" ;"f;"o;"r;" ;"W;"a;"t;"c;"h;" ;"C;"o;"m;"m;"a;"n;"d;"];0
4153 /"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;"
4154 /"I;"t;"e;"r;"a;"t;"i;"o;"n;" ;"C;"o;"u;"n;"t;0
4158 "N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;"
4159 "A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"S;0
4161 "C;"a;"n;"n;"o;"t;" ;"W;"r;"i;"t;"e;" ;"O;"u;"t;" ;"E;"r;"r;"o;"r
4162 " ;"M;"e;"s;"s;"a;"g;"e;" ;"O;"v;"e;"r;"l;"a;"y;0
4164 "I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4165 " ;"a;"f;"t;"e;"r;" ;"F;0
4167 "Y;" ;"C;"o;"m;"m;"a;"n;"d;" ;"A;"b;"o;"r;"t;"e;"d;0
4169 "C;"C;"L;".;"S;"V;" ;"n;"o;"t;" ;"f;"o;"u;"n;"d;" ;"o;"r;"
4170 "E;"G;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;"o;" ;"b;"i;"g;0
4172 "E;"x;"e;"c;"u;"t;"i;"o;"n;" ;"a;"b;"o;"r;"t;"e;"d;0
4174 "C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t;"
4175 "I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177
4176 "[;"u;"s;"e;" ;"E;"O;" ;"f;"o;"r
4177 " ;"V;"e;"r;"s;"i;"o;"n;" ;"n;"u;"m;"b;"e;"r;"];0
4179 "N;"o;" ;"F;"i;"l;"e;" ;"f;"o;"r;" ;"O;"u;"t;"p;"u;"t;0
4183 TAD I COREAD /GET BLOCK #
4187 RAR /MULTIPLY BY 400
4214 \fNEWERR, RELOC OVREAD
4215 CIF 30 /NEW CODE TO READ OVERLAY
4216 JMS I .+1 /MUST BE 5 LOCS LONG