A large commit.
[pdp8.git] / sw / os8 / v3d / sources / extensions / dectapes / dectape3 / teco.pa
diff --git a/sw/os8/v3d/sources/extensions/dectapes/dectape3/teco.pa b/sw/os8/v3d/sources/extensions/dectapes/dectape3/teco.pa
new file mode 100644 (file)
index 0000000..d15b6b8
--- /dev/null
@@ -0,0 +1,4222 @@
+/10 OS/8 TECO VERSION 5
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT  (C)  1974,1975,1976,1977 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
+/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
+/
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/BROUGHT TO YOU BY: RUSS HAMM, O.M.S.I., AND RICHARD LARY (IN THAT ORDER)
+/WITH ASSISTANCE FROM MARIO DENOBILI OF THE P?S
+/PATCHES INCORPORATED BY S.R. ON 5-AUGUST-75 FOR OS/8 V3C:
+
+/1.    UPDATED VERSION # TO V4
+/2.    INCORPORATED PATCHES #S 1 & 2 (V302 AND V303)
+/      PREVENTS \ FROM GOING OUTSIDE OF BUFFER
+/      RESETS CFLAG TO PREVENT ARGUMENT ERROR EVERY 4096 TIMES IN LOOP
+
+/      CHANGES FOR V5: -S.R.-
+
+/3.    ADDED OVERLAYS
+/4.    EXPANDED ERROR MESSAGES
+/5.    DOCUMENTED CORE LAYOUT
+/6.    ADDED "T, "S, "F, "U, AND "R
+/7.    FIXED EG BUG
+/8.    MADE DEFAULT ITERATION COUNT TRULY INFINITE
+/9.    ADDED N^T
+/10.   ADDED :=
+/11.   ADDED SOME SAFETY ERROR MESSAGES
+/      (I)     ERROR IF Y HAS A NUMERIC ARGUMENT
+/      (II)    ERROR IF TWO ARGUMENTS ARE SPECIFIED TO D
+/12.   REMOVE ^R (OBSOLETE COMMAND)
+/13.   REMOVE "A AND "B (AFTER AND BEFORE)
+/14.   ADDED 13-BIT ARITHMETIC
+/15.   MADE = AND \ GIVE SIGNED RESULTS (DECIMAL ONLY)
+/16.   ALLOW 13-BIT NUMERIC Q-REGISTERS.
+/      THIS IS ACCOMPLISHED BY RESERVING THE HIGH ORDER BIT
+/      OF THE LENGTH WORD.  STRING PORTION OF Q-REGISTER
+/      NOW RESTRICTED TO 2047 CHARACTERS.  IT GETS CHECKED BY
+/      ^U AND X.  BELL RINGS WITHIN 12 CHARACTERS OF FILLING
+/      UP COMMAND STRING Q-REGISTER.
+/17.   STORED LINK AS LOW ORDER BIT IN NLINK IN CASE WE EVER
+/      WANT TO GO TO 24-BIT ARITHMETIC.
+/18.   ERROR ON A,B,C
+/19.   P DOESN'T CREATE FORM FEEDS
+/20.   ALLOW @ MODIFIER WITH ER, EW, EB.
+/21.   EK
+/22.   ^S FREEZE
+/23.   EGTEXT$
+/24.   GOT RID OF F_
+/25.   F IS ILLEGAL IF NOT FOLLOWED BY S OR N
+/26.   W IS NOW AN ILLEGAL COMMAND (EXCEPT ON -12)
+/27.   ADDED :G
+/28.   Y AND _ GIVE ERRORS IF DATA IS GOING TO BE LOST
+/      (IF OUTPUT FILE IS OPEN AND BUFFER IS NOT EMPTY)
+/29.   CASE FLAGGING IMPLEMENTED
+/30.   "< AND "> ARE SYNONYMOUS WITH "L AND "G
+/31.   ^G<SPACE> AND ^G*
+/32.   SCOPE RUBOUTS
+/33.   == NOW PRINTS NUMBER IN OCTAL
+/34.   EUFLAG AND ETFLAG IMPLEMENTED
+/35.   CASE FLAGGING WORKS
+/36.   IMAGE MODE (ET BIT 11) APPLIES TO T, ^A, AND N^T
+/      IT DOES NOT APPLY TO :G
+/37.   ERROR IF TRY TO DO AN EB TO A .BK FILE (IT DOES AN ER)
+/38.   VT AND FF ARE NOW LINE TERMINATORS
+/39.   BELL ECHOES AS ^G AS WELL AS RINGING BELL
+/40.   ^K IS AN ERROR
+/41.   REMOVED ^Z COMMAND
+/42.   CHANGED ^V TO EO
+/43.   CHANGED ^W TO W
+/44.   MEMORY RESIDENT OVERLAYS IF MORE THAN 12K
+/45.   LONG FORM ERROR MESSAGES ON 1EH
+/46.   ET FLAG 8'S BIT AFFECTS ECHOING OF ^T
+/47.   NEGATIVE OR 0 ITERATION SKIPS
+/48.   CTRL/N
+/49.   CTRL/C TRAP
+
+/KNOWN BUGS
+/1.    LARGE T OR X AND ONLY 1 BLOCK LEFT IN OUT DEV
+/2.    ^S DOESN'T KEEP SCREEN ON
+/3.    FIX BATCH INTERRACTION
+/4.    MAKE VT AND FF SIMULATION INDEPENDENT OF TAB
+
+       DECIMAL
+VERSN= 5       / VERSION NUMBER - CHANGE WITH EVERY EDIT 
+       OCTAL   / LAST EDIT  12-FEB-76  
+\fIN=   6200            /INPUT BUFFER AT 06200
+OUT=   5200            /OUTPUT BUFFER AT 05200
+ZMAX=  7640            /MAX 4000[10] CHARACTERS IN TEXT BUFFER
+QMAX=  3720            /MAX 2000[10] Q-REGISTER CHARS IN 8K
+Q12MAX=        5600            /MAX 2944[10] Q-REGISTER CHARS IN 12K
+CHNSTR=        46              /38 CHARACTER STRING PASSED ON CHAIN
+
+TWO=   CLA CLL CML RTL
+MTWO=  CLA CLL CMA RAL
+MTHREE=        CLA CLL CMA RTL
+AC3777=        CLL STA RAR
+SCPBIT=        7726
+\f/THINGS WE WOULD LIKE TO ADD:
+
+/:ER
+/:EB
+/NV
+/@^A
+/FR
+/-S
+/::S
+/^EQ
+/M,NS
+/[Q
+/]Q
+/NON-EXACT SEARCH MODE
+/*N
+/ERFILESPEC/S FOR SUPERTECO
+/^N
+/CHECK FOR $ ON NI$
+/CHECK INTO SEARCHES IN ITERATIONS
+/ERR MSG ON EA, EP
+/NV=(1-N)TNT
+/^C TRAP
+/:X
+
+/THINGS FOR -11:
+/^R
+/3EH
+/M,ND
+/ET BIT 15 SHOULD BE LOWER
+/ECHO OF NULL
+\f/*****************************************
+/      TECO ERROR MESSAGES:
+/*****************************************
+
+/      TECO ERROR MESSAGES CONSIST OF A QUESTION MARK AND THREE LETTERS
+/      TYPING "?" IMMEDIATELY AFTER AN ERROR MESSAGE PRINTOUT PRINTS
+/      THE CURRENT COMMAND LINE UP TO THE ERROR CHARACTER.
+
+/1     ?ILL    ILLEGAL COMMAND
+/2     ?UTC    INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF COMMAND STRING)
+/3     ?IQN    NON-ALPHANUMERIC Q-REGISTER NAME
+/4     ?PDO    PUSHDOWN OVERFLOW (MACROS & ITERATIONS NESTED TOO DEEPLY)
+/5     ?MEM    TEXT BUFFER OVERFLOW
+/6     ?STL    SEARCH STRING TOO LARGE ( >31 CHARS)
+/7     ?ARG    NUMBER MISSING BEFORE COMMA
+/              OR TWO ARGUMENTS SPECIFIED TO D
+/              OR 3 NUMERIC ARGUMENTS
+/8     ?IFN    ILLEGAL FILE NAME IN "ER","EW" OR "EB" COMMAND
+/9     ?SNI    SEMICOLON ON COMMAND LEVEL
+/10    ?BNI    ITERATION CLOSE (>) WITHOUT MATCHING OPEN (<)
+/11    ?POP    ATTEMPT TO MOVE POINTER OUTSIDE OF TEXT BUFFER
+/12    ?QMO    Q-REGISTER STORAGE OVERFLOW
+/13    ?UTM    INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF MACRO)
+/14    ?OUT    OUTPUT FILE TOO BIG OR OUTPUT PARITY ERROR
+/15    ?INP    PARITY ERROR ON INPUT FILE
+/16    ?FER    FILE ERROR: CAN MEAN EITHER
+/              A)      INPUT FILE NOT FOUND ON "ER" COMMAND
+/              B)      CANNOT ENTER OUTPUT FILE ON "EW" OR "EB" COMMAND
+/              C)      DEVICE SPECIFIED FOR FILE DOES NOT EXIST
+/              D)      "EB" COMMAND GIVEN ON NON-FILE-STRUCTURED DEVICE
+/17    ?FUL    OUTPUT COMMAND WOULD HAVE OVERFLOWED OUTPUT FILE
+/              [PANIC MODE]
+/18    ?NAY    NUMERIC ARGUMENT SPECIFIED WITH Y COMMAND
+/19    ?IEC    E FOLLOWED BY AN ILLEGAL CHARACTER
+/20    ?IQC    " FOLLOWED BY AN ILLEGAL CHARACTER
+/21    ?NAE    NO NUMERIC ARGUMENT TO THE LEFT OF AN =
+/22    ?NAU    NO NUMERIC ARGUMENT TO THE LEFT OF A U
+/23    ?NAQ    NO NUMERIC ARGUMENT TO THE LEFT OF A "
+/24    ?SRH    FAILING SEARCH AT COMMAND LEVEL
+/25    ?NAP    NEGATIVE OR ZERO ARGUMENT TO P
+/26    ?NAC    NEGATIVE ARGUMENT TO COMMA
+/27    ?NYI    CASE SUPPORT NOT IMPL (USE W FOR WATCH)
+/28    ?
+/29    ?NAS    NEGATIVE OR ZERO ARGUMENT WITH A SEARCH
+/30    ?WLO    WRITE LOCKED SYSTEM DEVICE
+/31    ?IFC    F FOLLOWED BY AN ILLEGAL CHARACTER
+/32    ?YCA    Y (OR _) COMMAND ABORTED BECAUSE DATA WOULD BE LOST
+/33    ?CCL    CCL NOT FOUND OR EG ARGUMENT TOO LONG
+/34    ?XAB    EXECUTION ABORTED BY ^C
+/35    ?NYI    CASE SUPPORT NOT IMPL (USE EO FOR VERSION)
+/36    ?NFO    ATTEMPT TO OUTPUT WITHOUT OPENING AN OUTPUT FILE
+\f/     CORE LAYOUT AND OVERLAY STRUCTURE
+
+/      BUFFER STRUCTURE:
+
+/BUFFER                8K VERSION      12K VERSION
+
+/INPUT  BUFFER 06200-07200     25600-27600
+/OUTPUT BUFFER 05200-06200     05200-07200
+/Q-REG STORAGE OVER TEXT BFR   20000-25600
+
+/      HANDLER LOCATIONS:
+
+/HANDLER       PDP-8 VERSION   PDP-12 VERSION
+
+/INPUT  HANDLER        7200-7600       7200-7400
+/OUTPUT HANDLER        4000-4400       7400-7600
+/SIZE OF HNDLR 2-PAGES         1-PAGE
+/DISPLAY CODE  NONE            4000-4400
+
+/      OVERLAY STRUCTURE
+
+/ALL OVERLAYS ARE TWO PAGES LONG AND RESIDE IN CORE
+/AT LOCATIONS 3200-3600 WHEN RUNNING.  THE I-OVERLAY
+/INITIALLY RESIDES IN THESE LOCATIONS.
+
+/OVERLAY       BLOCK   INITIAL LOCATION        CONTENTS
+
+/  I-OVERLAY   40      3200-3600       ER,EW,EB
+/  Q-OVERLAY   41      5600-6200       ", O, SKPSET
+/  E-OVERLAY   42      6200-6600       ERROR MESSAGE PROCESSOR
+/  X-OVERLAY   43      6600-7200       EX,EC,EG,EK,EF (EA,EI,EN,EP)
+/  F-OVERLAY   44      7200-7600       ED,EH,EO,ES,ET,EU (EV)
+
+       IOVRLC=40
+       QOVRLC=41
+       EOVRLC=42
+       XOVRLC=43
+       FOVRLC=44
+
+       IOVRLY=3200
+       QOVRLY=3201
+       EOVRLY=3202
+       XOVRLY=3203
+       FOVRLY=3204
+
+/EACH OVERLAY IS ASSIGNED A LOCATION AT THE BEGINNING OF PAGE 3200.
+/IF THIS LOCATION IS 0 (AS IT ALWAYS IS), THEN THAT OVERLAY IS NOT
+/IN CORE.  IF IT IS NOT 0, THEN THIS LOCATION CONTAINS THE
+/BLOCK NUMBER TO READ IN THAT OVERLAY.
+/THUS EACH OVERLAY HAS POINTERS TO ALL THE OTHER OVERLAYS.
+\f      MEMLOC=2000
+
+/IN 16K MACHINES, FIELD 3 IS USED TO HOLD OVERLAYS
+
+/NAME  BLOCK   MEMORY
+
+/I     40      2000
+/Q     41      2400
+/E     42      3000
+/X     43      3400
+/F     44      4000
+
+
+/INITIAL MEMORY LAYOUT
+
+/0000-3177     TECO
+/3200-3577     OVERLAY AREA (INITIALLY I-OVERLAY)
+/3600-3777     TECO
+/4000-4377     PDP-12 DISPLAY ROUTINE
+/4400-5177     TECO
+/5200-5577     INITIALIZATION CODE
+/5600-6177     Q-OVERLAY CODE
+/6200-6577     E-OVERLAY CODE
+/6600-7177     X-OVERLAY CODE
+/7200-7577     F-OVERLAY CODE
+
+/FIELD 1:
+
+/4400-7377     EXTENDED ERROR MESSAGES
+/              MOVES TO FIELD 3
+\f/**  TECO KLUDGES **          /7/27/73
+/ONE OF THE REASONS WHY TECO GETS SO MANY OPERATIONS
+/INTO SUCH A SMALL AMOUNT OF CORE IS THAT IT
+/IS FULL OF *K*L*U*D*G*E*S*.  THESE SHOULD BE KEPT IN MIND WHEN
+/MODIFYING THE PROGRAM.  SOME OF THEM ARE:
+
+/      THE "SORT" ROUTINE COMPARE LIST MUST END WITH A NEGATIVE NUMBER.
+/      USUALLY A FORTITUOUS JMS OR OPR INSTRUCTION IS USED
+
+/      THE "SORT" JUMP LIST ENTRIES ARE TREATED AS JUMP ADDRESSES
+/      IF THEY ARE POSITIVE AND SUBSTITUTE VALUES IF THEY ARE
+/      NEGATIVE - THEREFORE ALL LOCS JUMPED TO MUST BE BELOW 4000
+/      ANOTHER CONSEQUENCE IS THAT "QUOTST" CANNOT BE CALLED FROM
+/      ABOVE 4000
+
+/      THERE ARE OTHER LOCALIZED KLUDGES - THEY CAN GENERALLY
+/      BE IDENTIFIED BY THE APPEARANCE OF A DOUBLE-ASTERISK IN THE
+/      COMMENTS FIELD ALONG WITH A TERSE DESCRIPTIVE COMMENT
+
+
+
+/      OS/8 EQUIVALENCES:
+
+JSBITS=        7746    /JOB STATUS BITS - IN FIELD 0
+OSHNDT=        7647    /OS/8 DEVICE HANDLER TABLE - IN FIELD 1
+OSDCBT=        7760    /OS/8 DEVICE CONTROL TABLE - IN FIELD 1
+CCLADR=        400     /CCL OVERLAY LOAD ADDRESS
+CCLOVL=        67      /BLOCK OF CCL OVERLAY
+CCLOST=        602     /CCL OVERLAY SECONDARY START ADDRESS
+\f      *0
+NAME,  ZBLOCK  4       /NAME BUILD BUFFER - MUST BE AT LOCATION 0
+                       /LOCS 4,5&6 ARE RESERVED SO WE CAN USE OS/8 ODT
+
+       *10     /CONSTANTS & NON-INDIRECT TEMPS STORED IN AUTO-XRS!
+QUOTE, 33      /QUOTE CHAR - SINGLE WORD SORT LIST
+ERR01,
+SERR,  ERR     /END OF LIST
+INRSIZ,        2       /4 IF 12K MACHINE
+NUMLNS,        3       /NUMBER OF LINES (+ AND -) TO DISPLAY ON VR12 SCOPE
+DX,    7577    /DISPLAY XR
+SXR,   QPUT12-1/XR USED BY SEARCH PROCESSOR
+INXR,  ASR33-1 /XR USED TO UNPACK INPUT BUFFER
+XR,    ASR35-1 /WORK XR
+
+NMT,   0       /USED  AS NUMBER TEMP AND SEARCH FAIL FLAG
+CFLG,  0       /COMMA FLAG
+CLNF,  0       /COLON FLAG
+TFLG,  0       /TRACE FLAG
+NFLG,  0       /NUMBER FLAG
+QFLG,  0       /QUOTED STRING FLAG
+M,     0       /NUMBER ARGS
+N,     0
+NLINK, 0       /LINK AFTER ARITH OPERATIONS - TESTED BY "A AND "B
+CHAR,  0       /CHARACTER BUFFER
+ITRST, 0       /ITERATION FLAG
+ITRCNT,        0       /ITERATION COUNT
+MPDL,  0       /MACRO FLAG
+SCHAR, 0       /LAST CHAR SORTED
+FFFLAG,        0       /FORM FEED FLAG - 7777 IF FORM FEED SEEN ON THIS READ
+REND,  0       /INPUT END-OF-FILE FLAG
+SCANP, 0       /COMMAND LINE EXECUTION POINTER
+OSCANP,        0       /BACKUP FOR SCANP
+PDLP,  PDLBEG  /PUSH-DOWN-LIST POINTER
+QCMND, 0       /COMM LINE OR MACRO POINTER
+P,     0       /CURRENT PNTR TO TEXT BUFFER
+ZZ,    0       /END OF TEXT BUFFER POINTER
+Q,     0       /EXTRA BUFFER POINTERS
+       IFNZRO .-47 <_ERROR_>
+R,     0
+QP,    0       /Q REGISTER POINTER
+QZ,    CHNSTR  /END OF Q-REG POINTER
+Z7,
+CTLBEL,        7
+CACR,  15      /CR
+CAHT,  11      /HT
+CAAM,  33      /ALT MODE
+CAFF,  14      /FF: END OF PAGE
+       13      /VT
+CALF,  12      /LF
+ERR07,
+NERR,  ERR     /END OF LIST
+RADIX, DRAD    /RADIX TABLE POINTER - DRAD OR ORAD
+\fMQ,   0
+DVT1,  0
+ODEV,  0       /OUTPUT DEVICE NUMBER
+OUTHND,        0
+INHND, 0
+EBFLG, 0       /EDIT BACKUP FLAG
+QNMBR, 0       /LAST Q-REG REFERENCED
+QBASE, 0       /BASE OF CURRENT COMMAND LINE
+QLENGT,        0       /LENGTH OF CURRENT COMMAND LINE
+QPTR,  0       /POINTER TO Q-REGISTER CONTROL BLOCK
+ICRCNT,        0       /INPUT DOUBLEWORD COUNTER
+OCRCNT,        0       /OUTPUT "
+OPTR2, 0       /OUTPUT BUFFER POINTER
+INRCNT,        0       /NUMBER OF INPUT RECORDS LEFT
+OCMDLN,        0       /LENGTH OF OLD COMMAND LINE
+CDT,   0
+KTYPE, TYPE            /*ET SET TO PUTT IF NO CONVERSION
+TEMPT, 0               /TEMP.  GET RID OF WHEN FIND ROOM ON PAGE
+MEMSIZ,        0               /HIGHEST MEMORY FIELD IN BITS 9-11
+LASTC, 0               /LAST CHARACTER GOTTEN OUT OF COMMAND LINE
+
+/NFLG: 0'ED BY COMMANDS WHICH EAT ARGUMENTS OR DON'T RETURN
+/      VALUES; SUCH AS C,R,J,L,^A,X,$,',>,'U,G,O AND
+/      NON-COLON MODIFIED SEARCHES
+/      SET TO -1 TO INDICATE THATWWE'VE SEEN A NUMBER
+\f      /TECO PSEUDO-OPERATIONS
+
+PUSH=  JMS I   .;      PUSHXX
+POP=   JMS I   .;      POPXX   /** MUST BE ONE MORE THAN "PUSH"
+PUSHJ= JMS I   .;      PUSHJY
+POPJ=  JMP I   .;      POPJXX
+PUSHL= JMS I   .;      PUSHLX
+POPL=  PUSHL                   /** POPL CALLED WITH POSITIVE AC
+
+ERR=   JMS I   .;ERROR,ERRXX
+SORT=  JMS I   .;      SORTB
+RESORT=        JMP I   .;      SORTA2
+SCAN=  JMS I   .;      SGET
+LISTEN=        JMS I   .;      TYI
+TYPE=  JMS I   .;      TYPCTV
+OUTPUT=        JMS I   .;OUTR, ERRXX   /** MUST BE ONE MORE THAN "TYPE"
+                               /PROBABLY NOT ANY MORE (19-JUN-77)
+CRLF=  JMS I   .;      TYCRLF
+GETQ=  JMS I   .;      GETQX
+SKPSET=        JMS I   .;      SETSKP
+NCHK=  ISZ     NFLG            /USED TO BE A SUBROUTINE CALL
+CTCCHK=        JMS I   .;      CHKCTC
+BZCHK= JMS I   .;      CHKBZ
+QCHK=  JMS I   .;      CHKQF
+QSKP=  JMS I   .;      QOVER
+QREF=  JMS I   .;      QREFER
+\fQSUM= JMS I   .;      QSUMR
+QPUT=  JMS I   .;      QPUTS
+QUOTST=        JMS I   .;      QTST
+SETCMD=        JMS I   .;      CMDSET
+GETN=  JMS I   .;      NGET
+ADJQ=  JMS I   .;      QADJ
+MQLDVI=        JMS I   .;      DVIMQL
+UPPERC=        JMS I   .;      CUPPER
+SCANUP=        JMS I   .;      SCUPPR
+TSTSEP=        JMS I   .;      SCHSRT
+DISPLY=        JMS I   .;      DSPLAY
+NOTRCE=        JMS I   .;      SAVTRA
+ENTRCE=        JMS I   .;      RESTRA
+OVRLAY=        JMS I   .;      OVERLY
+GETNUM=        JMS I   .;      NUMGET  /GET 13 BIT NUMBER INTO L,AC
+PUTT=  JMS I   .;      TPUT
+       PAGE
+\f/ENTER HERE TO USE AN ASR33 AS THE TELETYPE
+
+TECO,  ISZ I   SPUT    /IF CALLED BY "R" OR "RUN" - CHANGED TO TLS
+TECO1, JMP I   COMPAR  /IF CALLED VIA "CHAIN" - CHANGED TO "JMP T0A"
+TBEL,  JMS     COMPAR  /HERE ON ^G - 2 ^G'S KILL ENTIRE COMMAND
+
+T0,    CRLF
+T0A,   TAD     (PDLBEG
+       DCA     PDLP    /INITIALIZE PUSHDOWN LIST
+T1,    TAD     PDLP
+       TAD     (-PDLBEG
+       SZA CLA
+ERR02, ERR             /ERROR - PUSHDOWN LIST DID NOT BALANCE
+       TAD     (45
+       QREF            /SET UP POINTERS TO COMMAND LINE
+       TAD I   [QPNTR
+       DCA     OCMDLN  /SAVE OLD COMMAND LINE LENGTH
+                       /** SAVE ONLY IF < 20?
+       ADJQ            /REDUCE COMMAND LINE LENGTH TO 0
+       CLL
+       PUSHJ
+               NRET    /CLEAR NUMBER AND LAST OPERATOR
+       DCA     CFLG
+       DCA     MPDL    /DELETE MACRO FLAG
+       DCA     ITRST   /ALSO ITERATION FLAG,
+       DCA     CLNF    /AND COLON FLAG
+       PUSHJ           /KILL QUOTE FLAG
+               ZROSPN  /KILL QUOTE AND NUMBER FLAGS AND SCAN POINTER
+       KCC             /KILL ^O IF IN KEYBOARD BUFFER
+       DCA I   (CHOOPS /KILL FATAL ERROR RETURN
+       TAD     [52
+       SKP
+ROCMND,        JMS I   (BACKUP /BACK UP AND GET LAST CHAR
+       TYPE
+T2M1,  DCA     CHAR    /KILL CHAR TO PREVENT SPURIOUS DOUBLE CHARACTERS
+T2,    LISTEN          /BUILD COMMAND LINE
+       SORT
+               COMLST
+               COMTAB-COMLST
+T2A,   DCA     CHAR
+       JMS     SPUT    /PUT INTO C.L. BUFFER
+       JMP     T2      /GO GET ANOTHER
+\fTCTLU,        TAD     SCHAR
+       TYPE            /PRINT "^U"
+TCTLUP,        JMS I   (BACKUP
+       TAD     [-12    /CHECK FOR LF
+       SZA CLA
+       JMP     TCTLUP  /LOOP UNTIL LF
+       IAC
+       JMP I   (TSP9
+
+TCRLF, TAD     CACR    /CR IN COMM LINE
+       DCA     CHAR
+       JMS     SPUT    /PUT INTO COMM LINE
+       TAD     CALF    /THEN PUT IN A LF
+       JMP     T2A     /AND GET SOME MORE
+\f      /COMMAND EXECUTION LOOP
+
+TALTM, JMS     COMPAR  /2ND ALTM STARTS EXECUTION
+       CRLF            /START COMM EXECUTION
+CHTECO,        TAD     (45     /NUMBER OF INPUT COMMAND Q-REGISTER
+       SETCMD          /SET UP THE INPUT LINE AS THE CURRENT COMMAND LINE
+T6,    SCANUP
+T6A,   DCA     CHAR    /SAVE COMMAND CHAR
+       TAD     CHAR
+       TAD     (CDSP   /ADD BASE OF DISPATCH TABLE
+       DCA     T7      /LOOK UP ENTRY IN
+       TAD I   T7      /COMMAND DISPATCH TABLE
+       DCA     T7      /CALL RECURSIVELY
+       CLL
+       PUSHJ
+T7,            0       /CALL TO ROUTINE
+       CTCCHK          /CHECK FOR ^C - ** AC MAY NOT BE 0 HERE **
+       CLA             /CTCCHK LEAVES AC NON-ZERO
+       TAD     NFLG
+       SPA CLA
+       JMP     T6
+       DCA     N       /IF WE ARE NOT ENTERING A NUMBER
+       DCA     NLINK   /SET 13-BIT N TO 0
+       JMP     T6      /KEEP INTERPRETING
+TQMK,  TAD I   ERROR
+       SNA CLA         /ERROR ROUTINE ENTRY POINT NON-ZERO?
+       RESORT          /NO
+       STA             /AN ERROR PRINTOUT
+       DCA     QLENGT  /SET QLENGT BIG SO WE CAN ACCESS ENTIRE LINE
+       NOTRCE          /TURN TRACE OFF
+       SCAN
+       TYPE            /PRINT OUT THE LINE WHICH CAUSED THE ERROR
+       ISZ I   ERROR   /UP TO THE ERROR CHAR ITSELF
+       JMP     .-3
+       JMP     T0      /RE-INITIALIZE
+
+CHUA,  POP             /^ COMMAND - POP OFF RETURN ADDRESS
+       SCANUP          /GET THE NEXT CHARACTER IN UPPER CASE
+       AND     [77     /MAKE IT A CONTROL CHARACTER
+       JMP     T6A     /USE IT INSTEAD OF THE ^
+\fCOMPAR,       TCINIT          /LOOK FOR DOUBLED COMM LINE CHARS
+       TAD     SCHAR   /MOST RECENT
+       CIA
+       TAD     CHAR    /PREVIOUS
+       SZA CLA
+       RESORT          /NOT THE SAME
+       JMS     SPUT    /PUT THE CHAR INTO THE COMMAND LINE AND ECHO IT
+       JMP I   COMPAR  /SAME-SPECIAL HANDLING
+
+SPUT,  JTECO           /PUT CHAR INTO COMM LINE
+       TAD     QZ
+       DCA     QP
+       TAD     CHAR
+       QPUT            /STORE CHARACTER AWAY
+       TAD I   [QPNTR
+       IAC
+       ADJQ            /ADJUST COMMAND LINE REGISTER LENGTH
+       DCA I   ERROR   /CLEAR "ERROR JUST OCCURRED" FLAG
+       TAD     CHAR
+       TYPE            /TYPE THE INSERTED CHARACTER
+       TAD I   [QPNTR
+       TAD     CALF    /12
+       SPA CLA
+       JMP     EMERG   /TYPE BELL IF WITHIN 12 CHARACTERS OF 2048
+       CLL
+       TAD     QZ
+       TAD     QLIMIT
+       SNL CLA         /TYPE A BELL IF THE LINE IS
+       JMP I   SPUT    / WITHIN 12 CHARS OF OVERFLOW
+EMERG, TAD     Z7
+       TYPE
+       JMP I   SPUT
+QLIMIT,        12-QMAX
+       PAGE
+\f      /Q REGISTER PACK AND UNPACK
+       /THE Q-REGISTERS ARE STORED IN THE UPPER 4 BITS OF THE WORDS
+       /WHICH HAVE THE TEXT BUFFER CHARACTERS IN THEIR LOWER 8 BITS.
+       /THEREFORE EACH Q-REGISTER CHARACTER TAKES 2 WORDS.
+
+QPUTS, 0               /STORE THROUGH POINTER "QP" AND BUMP POINTER
+       CLL RTL
+       RTL
+       DCA     GETQX   /SAVE CHARACTER
+       TAD     QP
+       CLL RAL
+       DCA     CHKCTC  /COMPUTE CORE POINTER = 2*QP
+       CDF 10
+       TAD     GETQX
+       JMS     ST4BTS  /STORE HIGH ORDER 4 BITS
+       ISZ     CHKCTC
+       TAD     GETQX
+       CLL RTL
+       RTL
+       JMS     ST4BTS  /STORE LOW ORDER 4 BITS
+       CDF 0
+       ISZ     QP      /BUMP POINTER
+       JMP I   QPUTS
+
+GETQX, 0
+       CLL RAL
+       DCA     CHKCTC  /COMPUTE CORE POINTER = 2*AC
+       CDF 10
+       TAD I   CHKCTC
+       AND     [7400   /FETCH HIGH ORDER
+       ISZ     CHKCTC
+       DCA     QPUTS
+       TAD I   CHKCTC
+       AND     [7400   /FETCH LOW ORDER
+       CLL RTR
+       RTR
+       TAD     QPUTS   /COMBINE TO FORM CHARACTER
+       RTR
+       RTR
+       CDF 0
+       JMP I   GETQX
+
+ST4BTS,        0
+       AND     [7400
+       DCA     POPXX
+       TAD I   CHKCTC
+       AND     [377
+       TAD     POPXX
+       DCA I   CHKCTC  /STORE HIGH ORDER
+       JMP I   ST4BTS
+\fCHKCTC,       0               /SUBROUTINE TO CHECK FOR ^C IN KEYBOARD
+       CLA OSR         /** AC MAY NOT BE 0 ON ENTRY
+       DCA     QPUTS   /GET LOCATION FROM SWITCH REGISTER
+       TAD I   QPUTS
+       7421            /DISPLAY INDICATED LOCATION IN MQ
+C7600, 7600            /JUST IN CASE THERE IS NO MQ
+       KSF
+       JMP I   CHKCTC  /NO CHAR IN KEYBOARD BUFFER - EXIT
+       KRS
+       AND     [177    /KILL PARITY BIT
+       TAD     [-20    /^P OUGHT TO GO AWAY
+       SZA
+       TAD     CACR
+       SZA             /^C?
+       JMP I   CHKCTC  /NO - RESUME WITH NON-ZERO AC
+ERR34, ERR             /^C, EXECUTION ABORTED
+
+CTLC,  TSF
+       JMP     CTLC    /WAIT FOR TELETYPE TO DIE DOWN
+       JMP I   C7600   /RETURN TO OS/8
+
+
+POPJXX,        DCA     GETQX   /POPJ ROUTINE
+       POP
+POPJXY,        DCA     POPXX
+       TAD     GETQX
+       JMP I   POPXX
+\f      /PUSH DOWN LIST ROUTINES
+
+POPXX, 0               /POP ROUTINE
+       CLA CMA
+       TAD     PDLP
+       DCA     PDLP
+       TAD I   PDLP
+       JMP I   POPXX
+
+PUSHXX,        0               /PUSH ROUTINE (DOESN'T AFFECT LINK)
+       DCA I   PDLP
+       ISZ     PDLP    /BUMP PUSHDOWN POINTER
+       TAD     PDLP    /CHECK FOR EXACTLY FULL - THIS ALLOWS THE
+       TAD     (-PDLEND
+       SNA CLA         /** ERROR ROUTINE TO DO A PUSHJ
+ERR04, ERR             /FULL - REPORT IT
+       JMP I   PUSHXX
+
+PUSHJY,        0               /PUSHJ ROUTINE (DOESN'T AFFECT LINK)
+       DCA     GETQX
+       IAC             /** LINK SHOULD BE PRESERVED ON EXIT
+       TAD     PUSHJY
+       PUSH
+       TAD I   PUSHJY
+       JMP     POPJXY
+
+PUSHLX,        0               /PUSH AND CLEAR A LIST
+       CLL
+       SMA             /PUSH LIST IF AC<0, POP IT IF >=0
+       CMA STL
+       DCA     PUSHJY  /SET COUNTER
+       RAL             /** DEPENDS ON FACT THAT POP=PUSH+1 **
+       TAD     PUSHYY
+       DCA     PUSHYX  /STORE EITHER A "PUSH" OR A "POP"
+       POP             /SAVE RETURN POINTER
+       DCA     CHKCTC
+PUSHLP,        TAD I   PUSHLX
+       DCA     GETQX
+       TAD I   GETQX
+PUSHYX,        PUSH            /PUSH OR POP
+       DCA I   GETQX   /IF PUSHYX=PUSH, THIS ZEROES THE PUSHED LOCATION
+       ISZ     PUSHLX
+       ISZ     PUSHJY
+       JMP     PUSHLP
+       TAD     CHKCTC  /RESTORE RETURN POINTER
+PUSHYY,        PUSH
+       JMP I   PUSHLX
+\fTPUT, 0               /TELETYPE OUTPUT
+       DCA     TEMPT
+TPUTX, CTCCHK          /CHECK FOR ^C OR ^P
+       TAD     (3-17   /INHIBIT PRINTING AS LONG AS THERE
+       SNA             /IS A ^O IN THE KEYBOARD BUFFER.
+       JMP I   TPUT
+       TAD     (17-23  /CHECK FOR ^S
+       SNA CLA
+       JMP     TPUTX
+       TSF             /WAIT FOR TELETYPE FLAG
+TSFWT, JMP     .-1     /WHILE WAITING, DISPLAY TEXT ON SCOPE
+       TAD     TEMPT
+       TLS
+       CLA
+       JMP I   TPUT
+       PAGE
+\f/POINTER MOVING COMMANDS - C,R,J,L
+
+CHRJ,  DCA     NFLG    /COMMAND J
+       GETNUM          /CAUSE NEG ARGUMENT TO GIVE A POP
+       JMP     CLOQ
+
+CHRR,  GETN            /GET LAST NUMBER, DEFAULT=(+ OR -)1
+CHR1,  CML CIA         /NEGATE 13-BIT NUMBER
+       SKP
+CHRC,  GETN            /GET LAST NUMBER, DEFAULT=(+ OR -)1
+       TAD     P       /OFFSET RELATIVE TO .
+/
+/      *** LINK NOT ALWAYS SET RIGHT
+/
+CLOQ,  BZCHK           /SEE IF IN RANGE B,Z
+       DCA     P       /IN RANGE
+DNN3,  CDF 0
+       POPJ
+
+CHRL,  GETN            /GET LAST NUMBER, DEFAULT=(+ OR -)1
+CHRL1, CDF 10
+       SZL SNA
+       JMP     LNEG
+       CIA
+       DCA     CDT
+CHRLP, TAD     P
+       CIA
+       TAD     ZZ
+       SNA CLA         /IF WE ARE AT THE END OF THE BUFFER,
+       JMP     DNN3    /RETURN
+       JMS I   (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED
+       ISZ     P
+       JMP     CHRLP   /KEEP GOING UNTIL WE GET THERE OR OVERFLOW BUFFER
+LNEG,  TAD     (-1
+       DCA     CDT
+CHRLM, CLA CMA CLL
+       TAD     P
+       DCA     P       /MOVE POINTER BACKWARD 1
+       SNL
+       JMP I   (CHRLI  /OOPS - PAST THE BEGINNING OF THE BUFFER - RETURN
+       JMS I   (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED
+       JMP     CHRLM   /NOT SATISFIED YET - KEEP LOOPING
+
+NUMGET,        0               /PUT 13-BIT NUMBER IN L,AC
+       TAD     NLINK
+       CLL RAR
+       TAD     N
+       JMP I   NUMGET
+\f/D COMMAND AND PART OF ADJUST ROUTINE
+
+CHRD,  ISZ     CFLG    /WAS THERE A COMMA?
+       SKP             /NO
+       JMP     NERR    /YES, 2 ARGS TO D
+       GETN            /GET LAST NUMBER, DEFAULT=(+ OR -)1
+       SNL             /SIGN BIT OF 13-BIT NUMBER IS IN LINK
+       JMP     PLUSND  /+ND
+       CLL CIA
+       DCA     CDT     /-ND
+       TAD     CDT
+       PUSHJ           /DO (-)NC(+)ND
+               CHR1
+       TAD     CDT
+       JMP     PLUSND
+
+ADJ,   SNA             /ADJUST BUFFER + OR - N CHARS
+                       /TEST FOR NOTHING
+       POPJ            /GO AWAY
+       STL             /MOVE UP N CHARACTERS
+       TAD     ZZ      /ADD TO MAX CHARACTER
+       DCA     R       /NEW HIGHEST
+       TAD     R       /SEE IF TOO HIGH
+       TAD     (-ZMAX
+       SNL SZA CLA     /TWO PLACES FOR OVERFLOW THERE
+ERR05, ERR
+       TAD     ZZ
+       DCA     Q
+       TAD     R
+       DCA     ZZ
+       CDF 10
+UPNL,  TAD     Q
+       CIA
+       TAD     P
+       SNA CLA         /FINISHED?
+       JMP     DNN3    /YES
+       CMA
+       TAD     Q
+       DCA     Q
+       CMA
+       TAD     R
+       DCA     R
+       TAD I   Q       /GET A CHAR
+L12K1, AND     [377    /JMP .+5  IF 12K
+       DCA     CHLTMP
+       TAD I   R       /BE CAREFUL NOT TO
+       AND     [7400   /DESTROY THE HIGH-
+       TAD     CHLTMP  /ORDER 4 BITS
+J12K1= JMP     .
+       DCA I   R       /AND PUT IT IN THE LOW PART OF THE TARGET WORD
+       JMP     UPNL
+\f/K COMMAND AND MORE OF ADJUST ROUTINE
+
+CHRK,  JMS I   (NLINES /CONVERT LINES TO CHARS
+       DCA     CDT
+       TAD     M       /SET POINTER
+       DCA     P       /LOWER ARG
+       TAD     CDT
+PLUSND,        SNA
+       POPJ            /IGNORE 0D
+ADJ2,  CLL
+       TAD     P       /MOVE DOWN N CHARACTERS
+       SZL
+       CLA CMA         /DETECT GROSS OVERFLOWS
+                       /** CHECK
+       BZCHK
+       DCA     Q       /N IN AC
+       TAD     P
+       DCA     R
+       CDF 10
+DNN1,  TAD     ZZ
+       CIA
+       TAD     Q
+       SNA CLA         /FINISHED?
+       JMP     DNN2
+       TAD I   Q       /GET A CHAR
+L12K2, AND     [377    /JMP .+5  IF 12K
+       DCA     CHLTMP
+       TAD I   R       /BE CAREFUL NOT TO
+       AND     [7400   /DESTROY THE HIGH-
+       TAD     CHLTMP  /ORDER 4 BITS
+J12K2= JMP     .
+       DCA I   R       /AND PUT IT IN THE LOW PART OF THE TARGET WORD
+       ISZ     Q
+       ISZ     R
+       JMP     DNN1
+DNN2,  TAD     R
+       DCA     ZZ
+       JMP     DNN3
+
+CHLTMP,        0
+
+/GO TO ADJ TO MOVE UP TEXT
+/GOTO ADJ2 TO MOVE DOWN TEXT
+/IN EITHER CASE, AC CONTAINS NUMBER OF CHARS TO MOVE (0-4095)
+
+ERR27, ERR             /^W
+ERR35, ERR             /^V
+       PAGE
+\f/SEARCH SUBROUTINE - CALLED BY N, S, AND _ COMMANDS
+
+SEARCH,        0
+       DCA     REPFLG  /AC MAY BE NON-0 TO ALLOW A REPLACE
+       GETN
+       SZL SNA
+ERR29, ERR             /NEG OR 0 ARG TO SEARCH
+       CIA
+       DCA     CSN     /GET NUMBER OF OCCURRANCES TO SEARCH FOR
+       QCHK            /GET REPLACEMENT FOR ALTMODE, IF ANY
+       TAD     (STABLE-1
+       DCA     SXR     /INITIALIZE XR
+       TAD     [-40
+       DCA     CSP
+SGTLP, QUOTST          /GET A CHARACTER FROM THE SEARCH STRING
+       JMP     SCHQUO  /OOPS- NO MORE
+       SORT            /SEE IF ITS SPECIAL
+               SCHLST
+               SCHTAB-SCHLST
+SSTCHR,        DCA I   SXR     /STORE THE CHAR IN THE SEARCH BUFFER
+       ISZ     CSP
+       JMP     SGTLP   /LOOP
+ERR06, ERR             /OOPS - SEARCH BUFFER FULL!
+
+SCHQUO,        TAD     CSP
+       TAD     [40     /A NULL SEARCH STRING MEANS USE THE
+       SZA CLA         /PREV CONTENTS OF THE SEARCH BUFFER, ELSE
+       DCA I   SXR     /STORE TERMINATING 0 AND BEGIN THE SEARCH
+CSST,  TAD     P
+       DCA     CSP
+       JMP     CSF1
+SCHINV,        TAD     CSNCL   /^N, INVERT SKIP SENSE
+       DCA     CSWT
+
+CSL,   TAD I   SXR     /GET A CHAR FROM THE SEARCH BUFFER
+       SPA SNA
+       JMP     SCCOMD  /NEGATIVE CHARS AND 0 ARE SPECIAL
+       CIA
+       CDF 10
+       TAD I   P
+       AND     [377
+CSWT1, CDF 0
+CSWT,  SZA CLA
+       JMP     CSF     /FAIL TO MATCH ON THIS CHARACTER
+       ISZ     P
+CSG,   TAD     CSZCL
+       DCA     CSWT    /RESTORE SEARCH TEST
+       TAD     ZZ
+       CMA
+       TAD     P
+CSZCL, SZA CLA         /CHECK FOR END OF BUFFER
+       JMP     CSL     /NO
+       DCA     P
+CSZ,   DCA     NMT
+       JMP I   SEARCH
+\f/SEARCH SUBROUTINE - CONTINUED
+
+SCCOMD,        DCA     .+1     /SPECIAL CHARACTERS ARE JUMPS OR 0
+       HLT             /0 FALLS THROUGH INTO TERMINATION CODE
+       ISZ     CSN     /GET NTH OCCURRENCE
+       JMP     CSF     /MORE TO GO
+       CMA
+       JMP     CSZ     /GOT IT
+CSF,   ISZ     CSP     /INDEX P
+CSF1,  TAD     (STABLE-1
+       DCA     SXR     /INITIALIZE AUTO - INDEX
+       TAD     CSP
+       DCA     P
+       JMP     CSG
+
+/SEARCH STRING MODIFIERS ^N,^Q,^S, AND ^X
+
+SCHTAB,        JMP     SCHINV  /^N: ANYTHING BUT
+       SCHCTQ          /^Q: LITERALLY
+       JMP     SCHSEP  /^S: ANY SEPARATOR
+       JMP     CSWT1   /^X: ANYTHING
+
+SCHCTQ,        SCAN            /GET THE NEXT CHARACTER
+       JMP     SSTCHR  /AND STORE IT IN PLACE OF THE ^Q
+
+SCHSEP,        CDF 10          /^S, LOOK FOR SEPARATOR
+       TAD I   P
+       AND     [377
+       TSTSEP          /SHARED SORTING ROUTINE
+       SKP
+       CMA             /SET AC = -1 IF NON-SEPARATOR
+       JMP     CSWT1   /GO CHECK RESULTS
+
+FN,    DCA     CNXT
+       STA
+       JMP     CHRN1
+\f/S,N AND _ COMMANDS (ALSO FS AND FN)
+
+FS,    STA             /CHANGE S TO FS
+CHRS,  JMS     SEARCH  /S COMMAND - DO A SEARCH
+CHKREP,        ISZ     REPFLG  /WAS THERE A REPLACE SPECIFIED?
+       JMP     CHKCLN  /NO - CHECK FOR COLON
+       QSKP            /COUNT UP STRING 2
+       TAD     NMT
+       SMA CLA
+       JMP     CHKCLN  /FAILED, SET VALUE & EXIT
+       TAD     CSP     /FIGURE OUT OFFSET TO FAKE OUT "I" ROUTINE
+       CIA             /SO THAT WE HAVE THE RIGHT INSERTION COUNT
+       TAD     P       /BUT THE SIZE OF THE HOLE WE NEED
+       DCA     DVT1    /IS DECREASED BY THE LENGTH OF THE SEARCH STRING.
+       TAD     CSP     /RESET
+       DCA     P       /TEXT POINTER
+       PUSHJ           /INSERT
+               CIL2    /STRING 2
+CHKCLN,        DCA     REPFLG  /CLEAR REPLACE FLAG
+       TAD     NMT
+       PUSHJ           /FORM NUMBER FROM "NMT"
+               NNEW13  /(APPLYING OPERATOR, IF NECESSARY)
+       ISZ     CLNF    /WAS THERE A COLON ON THIS SEARCH?
+       SKP             /NO
+       JMP I   [IREST  /YES - GO AWAY REGARDLESS OF RESULTS
+       DCA     CLNF    /RESET COLON FLAG TO 0
+       ISZ     N       /DID WE SUCCEED?
+       JMP I   (CFSI   /NO - SIMULATE A SEMICOLON
+       DCA     NFLG    /YES - HOWEVER, NO COLON MEANS NO RESULT
+       JMP I   [IREST
+
+CHBA,  CLA IAC         /_ COMMAND
+CHRN,  DCA     CNXT    /N COMMAND - SET OUTPUT FLAG
+CHRN1, JMS     SEARCH  /DO A SEARCH
+       TAD     REND
+       CIA
+       TAD     ZZ
+CSNCL, SNA CLA         /HAVE WE REACHED END-OF-FILE?
+       JMP     CHKREP  /YES - STOP AND ASSIGN VALUE
+       TAD     NMT
+       SZA CLA         /HAVE WE SUCCEEDED?
+       JMP     CHKREP  /YES - STOP AND ASSIGN VALUE
+       TAD     CNXT
+       JMS I   [NXTBUF /GET NEXT BUFFER
+       JMP     CSST    /KEEP SEARCHING - RETURN TO CHRN+2
+CNXT,  0               /OUTPUT FLAG
+CSP,   0               /TEMP P
+CSN,   0
+REPFLG,        0               /REPLACE FLAG (-1 MEANS REPLACE)
+       PAGE
+\f/NUMBER PROCESSORS:
+/COMMANDS B,H,Z,. AND DIGITS
+
+
+NMBR,  TAD     CHAR    /NUMBER FOUND IN COMMAND STRING
+       TAD     [-60
+NMBR2, DCA     NMT
+       CLL
+       NCHK            /CHECK NUMBER FLAG
+       JMP     NNEW    /NOT UP, NEW OPERAND
+       TAD     DOPR
+       DCA     NOPR    /USE SAME OPERATOR AS FOR THE PREVIOUS DIGITS
+       TAD     NP      /MULTIPLY PREV DIGITS BY 10
+       CLL RTL
+NMRBAS,        TAD     NP      /REPLACED BY "NOP" FOR OCTAL
+       CLL RAL         /** COULD CHECK FOR OVERFLOW IN THIS AREA
+NNEW,  TAD     NMT
+NCOM,  DCA     NP      /CURRENT NUMBER
+/      RAL
+/      DCA     NEWLNK
+/      TAD     NEWLNK  /GET NEW LINK
+/      CLL RAR         /INTO LINK
+NCOM2, TAD     NP
+
+NOPR,  SKP             /DISPATCH JUMP FOR OPERATOR
+       CML CIA
+       TAD     NACC    /CURRENT EXPRESSION VALUE
+       DCA N
+       RAL
+       TAD     NACCLK  /ADD IN OLD LINK
+       RAR
+       SKP CLA
+NRET,  DCA     N
+       RAL
+       DCA     NLINK   /SAVE LINK FOR POSSIBLE COMPARISON TEST
+       TAD     NOPR
+       DCA     DOPR
+       TAD     NULLOP
+       DCA     NOPR    /SET OPERATOR TO NULL OP
+       STA
+       JMP     DCPOPJ  /SET NUMBER FLAG AND EXIT
+\fCCPR, STL CLA RTL     /2
+       POPL
+               NOPR
+               NACC
+               NACCLK
+       GETNUM
+       JMP     NCOM    /COMBINE OLD NUMBER AND PARENTHESIZED RESULT
+
+COPR,  MTHREE
+       PUSHL
+               NACCLK
+               NACC
+               NOPR
+       DCA     N
+       DCA     NLINK
+       JMP     CPLS    /CLEAN OUT INSIDE PARENS
+
+CDOT,  TAD     P       /COMMAND .
+/** COULD CAUSE ERROR IF NFLG SET
+       JMP     NCOMCL
+/NEWLNK,       0
+\f      /COMMANDS &,#,/,*,-,+,(,)
+
+CAMP,  MTWO                            /*K* LOGICAL AND **
+CNBS,  TAD     (NIOR-NDIV              /LOGICAL OR
+CVIR,  TAD     (NDIV-NMPY              /DIVISION
+CAST,  TAD     (NMPY&177+5200-7400     /MULTIPLICATION
+CMIN,  TAD     [7400-SKP               /SUBTRACTION
+CPLS,  TAD     (SKP                    /ADDITION
+       DCA     NOPR    /COMMON TO ALL NUMERIC OPERATORS
+       TAD     N
+       DCA     NACC
+       TAD     NLINK
+       DCA     NACCLK
+       DCA     NP
+DCPOPJ,        DCA     NFLG    /CLEAR NUMBER FLAG
+       POPJ
+
+NAND,  AND     NACC    /BITWISE AND OF BINARY NUMBERS
+       JMP     NRET    /** KEEP THESE TWO OPNS TOGETHER
+NIOR,  CMA             /BITWISE OR OF BINARY VALUES
+       AND     NACC
+       TAD     NP
+NULLOP,        JMP     NRET
+
+NACCLK,        0               /LINK OF EXPRESSION WITHOUT NP
+NMPY,  CIA             /*** REALLY OUGHT TO IMPLEMENT 13-BIT MULTIPLY
+       DCA     ND
+       TAD     NACCLK
+       RAR             /SET UP OLD LINK
+       TAD     NACC
+       ISZ     ND
+       JMP     .-2
+       JMP     NRET
+NACC,  0               /VALUE OF EXPRESSION WITHOUT NP
+NDIV,  DCA     ND
+       TAD     NACC
+       MQLDVI
+ND,    0
+       JMP     NRET
+\f/COMMANDS ^F,^^,^Z,^V, Q AND %, ^D, ^O
+
+CTLF,  CLA OSR SKP     /^F COMMAND - VALUE OF CONSOLE SWITCHES
+CTUA,  SCAN            /^^ COMMAND - VALUE OF NEXT CHAR IN COMMAND LINE
+NCOMCL,        CLL
+       JMP     NCOM    /GO INTO NUMBER PROCESSOR
+
+/CTLZ, TAD     QZ      /COMMAND ^Z
+/      JMP     NCOM    /RETURN NUMBER OF CHARACTERS IN ALL Q-REGS.
+/CTLV, TAD     (VERSN  /^V COMMAND - RETURNS THE CURRENT VERSION NUMBER
+/NCOM14,       CLL
+/      JMP     NCOM
+
+CTLD,  TAD     [4      /SET RADIX DECIMAL
+CTLO,  TAD     (ORAD   /SET RADIX OCTAL
+       DCA     RADIX
+       TAD I   RADIX
+       DCA     NMRBAS  /EITHER "NOP"(8) OR "TAD NP"(10)
+       POPJ
+
+DOPR,  0               /PREVIOUS OPERATOR
+NP,    0               /VALUE OF CURRENT NUMBER
+
+SCPTAB,        BBELL
+       BCR
+       BCR             /TAB
+       EASYRO          /ALT
+       BFF
+       BVT
+       BLF
+
+CTLN,  TAD     REND
+       CMA
+       JMP I   (NNEW13
+
+CQSM,  TAD     TFLG
+       CMA             /TRACE FLAG ALTERNATES BETWEEN 0 AND 7777
+       DCA     TFLG
+       POPJ
+\fFTAB, FN
+       FS
+FLST,  116             /FN
+       123             /FS
+
+CHRF,  SCANUP          /COMMAND F
+       SORT
+               FLST
+               FTAB-FLST
+ERR31, ERR             /BAD F COMMAND
+
+CCLN,  STA             /: COMMAND - SET VALUE FLAG
+       DCA     CLNF
+       POPJ            /SO NEXT SEARCH WILL HAVE A NUMERIC VALUE
+       PAGE
+\f/CURSOR RIGHT IS $C
+/CURSOR UP IS $A
+/ERASE LINE IS $K
+
+BUGFLG,        0               /-1 MEANS MUST RETYPE LINE ON NEXT RUBOUT
+
+BSP,   0
+       TAD     TTY10
+       PUTT            /TYPE BS, SPACE, BS
+       TAD     TTY40
+       PUTT
+       TAD     TTY10
+       PUTT
+       STA
+       TAD I   (COLCT  /FIX UP COLUMN COUNTER
+       DCA I   (COLCT
+       JMP I   BSP
+\fSCOPY,        JMS I   (BACKUP /BACK UP ONE CHAR IN CMD LINE
+       TAD     [-40    /LOOK AT CHAR WE BACKED OVER
+       SMA
+       JMP     EASYRO  /IT'S EASY TO RUB THIS ONE OUT
+       TAD     [40     /RESTORE CHARACTER
+       SORT
+               CTLBEL
+               SCPTAB-CTLBEL
+BBELL, CLA
+       JMS     BSP     /^X NEEDS TWO RUB OUTS
+EASYRO,        CLA
+       ISZ     BUGFLG  /MAYBE WE REALLY SHOULD REPRINT LINE
+TTY10, SKP             /NOT NECESSARY
+       JMP     BCR     /NECESSARY (PREVIOUS VERTICAL MOTION MAY
+                       /HAVE SCROLLED OFF TOP OF SCREEN)
+       JMS     BSP     /RUB IT OUT
+SCOPGO,        DCA     BUGFLG
+       JMP I   (T2M1
+
+BCR,   JMS     BELLSP  /REPRINT LINE
+       JMS I   SCAPE
+       113             /ERASE LINE
+       JMP     SCOPGO
+
+BLF,   TAD     CTLBEL  /CURSOR UP 1
+BFF,   TAD     (-4     /CURSOR UP 8
+BVT,   TAD     (-4     /CURSOR UP 4
+       DCA     BSP
+       JMS I   (ESCAPE
+       101             /CURSOR UP
+       ISZ     BSP
+       JMP     .-3
+TTY40, STA
+       JMP     SCOPGO
+\fTSTAR,        DCA     BCHAR
+TSPACE,        TAD     CHAR    /LOOK AT PREVIOUS CHARACTER
+       TAD     (-7
+       SZA CLA         /WAS IT ^G ?
+       RESORT          /NO
+       STA             /YES
+TSP9,  TAD I   [QPNTR  /REDUCE CMD LINE BY 1 CHAR
+       ADJQ            /I.E. GET RID OF ^G
+       JMS     BELLSP
+       JMP I   (T2M1
+
+BELLSP,        0
+BLSP1, CRLF            /TAD    CACR
+BLSP2, NOP             /TYPE
+       TAD     MQ
+       DCA     SAVMQ
+       DCA     MQ
+       TAD     QZ      /START FROM END OF COMMAND LINE
+LFBLP, DCA     QP      /AND SEARCH FOR LF
+       STA
+       TAD     MQ      /COUNT HOW MANY
+       DCA     MQ
+       STA
+       TAD     QP
+       SPA
+       JMP     LFSTAR  /AT BEGIN OF CMD LINE
+       GETQ
+       TAD     BCHAR   /LOOK FOR LF
+       SNA CLA         /IS IT LF?
+       JMP     LFB     /YES
+       STA             /NO
+       TAD     QP      /BUMP BACK ONE MORE CHAR
+       JMP     LFBLP
+
+LFSTAR,        CLA
+       TAD     [52     /PRINT ANOTHER *
+       TYPE
+LFB,   PUSHJ
+               COLG4   /REPRINT LINE TO END OF CMD LINE
+       TAD     SAVMQ   /RESTORE MQ
+       DCA     MQ
+BLSP3, NOP             /JMS I  SCAPE
+BLSP4, NOP             /113
+       TAD     [-12
+       DCA     BCHAR   /SET UP FOR NEXT TIME
+       KCC             /CLEAR OUT ^O OR ^S
+       JMP I   BELLSP
+
+SAVMQ, 0
+BCHAR, -12             /CHAR WE'RE SEARCHING BACKWARDS FOR
+SCAPE, ESCAPE
+\fSORTB,        0               /SORT AND BRANCH ROUTINE
+       DCA     SCHAR   /SAVE SORT CHAR
+       STA
+       TAD I   SORTB   /GET POINTER TO LIST
+       ISZ     SORTB
+       DCA     XR
+SORTA1,        TAD I   XR      /GET ITEM IN TEST LIST
+       SPA             /END MARKED BY NEG VALUE
+       JMP     SORTA2  /FELL OUT BOTTOM
+       CIA STL
+       TAD     SCHAR
+       SZA CLA         /COMPARE SORT CHAR
+       JMP     SORTA1  /NOT IT.
+       TAD     XR      /GOT IT. NOW MAKE INDEX
+       TAD I   SORTB   /TO JUMP TABLE
+       DCA     COUNT   /THIS IS TABLE POINTER
+       TAD I   COUNT   /GET JUMP ADDRESS FROM TABLE
+       SPA             /IF IT IS NEGATIVE,
+       JMP     SORTA3  /ITS NOT A JUMP ADDRESS - ITS A VALUE
+       DCA     COUNT
+       CLA CLL
+       JMP I   COUNT
+SORTA2,        CLA CLL         /FELL OUT BOTTOM
+       TAD     SCHAR   /CARRY CHARACTER BACK TO
+SORTA3,        ISZ     SORTB
+       JMP I   SORTB   /DO SOMETHING ELSE
+
+CSMC,  SCANUP          /GET NEXT CHARACTER IN UPPER CASE
+       AND     [77     /MAKE IT A CONTROL CHARACTER
+       DCA     SCHAR
+       JMP     SORTA1  /SUBSTITUTE IT FOR THE UPARROW
+
+COUNT, 0
+       PAGE
+\f      /COMMANDS P AND T
+
+CHRP,  JMS     POKE    /LOOK AHEAD ONE CHARACTER
+       UPPERC          /BUT IN UPPERCASE
+       TAD     (-127   /SEE IF IT'S "W"
+       DCA     TEMPT   /SAVE KNOWLEDGE AS FLAG
+       TAD     TEMPT
+       SNA CLA
+       SCAN            /PASS UP W
+       CLA             /CLEAR W FROM AC
+       TAD     CFLG
+       SPA CLA         /IS THIS COMMAND  M,NP?
+       JMP     CHRW    /YES - TREAT LIKE M,NPW
+       GETN            /COMMAND P - GET # OF PAGES
+       SZL SNA
+ERR25, ERR             /NEG OR 0 ARG TO P
+       CIA
+       DCA     CPCT
+CPOA,  PUSHJ
+               CPOC    /DO N<HPY>
+       TAD     TEMPT   /IS NEXT CHARACTER W?
+       SNA CLA
+       JMP     NOYANK  /YES
+/      TAD     REND    /IF WANT P TO CREATE FF'S
+/      SZA CLA         /WHEN NO MORE INPUT FILE
+       ISZ     FFFLAG  /NO, SAW FF?
+       JMP     NOFF    /NO
+       TAD     CAFF    /YES
+       OUTPUT          /OUTPUT FF
+NOFF,  DCA     ZZ      /FORCE Y COMMAND TO WORK
+       PUSHJ
+               CHRY    /WHOEVER THOUGHT OF THE PW COMMAND SHOULD BE SHOT
+YANKY, ISZ     CPCT
+       JMP     CPOA
+       POPJ
+CPCT,  0
+
+POKE,  0               /RETURN NEXT CHARACTER (BY LOOKING AHEAD)
+       TAD     QLENGT
+       CIA CLL
+       TAD     SCANP
+       SZL CLA         /MAKE SURE WE HAVEN'T RUN OFF END OF COMMAND LINE
+       JMP I   POKE    /RETURN 0 IF NO CHAR
+       TAD     SCANP
+       TAD     QBASE
+       GETQ
+       JMP I   POKE    /LEAVE CHAR IN AC
+
+NOYANK,        TAD     CAFF    /NPW OUTPUTS FFS
+       OUTPUT
+       JMP     YANKY
+\fCPOC, PUSHJ
+               CHRH
+CHRW,  TAD     (OUTPUT
+CHRT2, DCA     CWOUT   /W AND T COMMANDS - SAME THING, DIFFERENT DEVICES
+       JMS     NLINES  /CONVERT LINES TO CHARS
+CWOA,  CMA
+       DCA     NLINES  /SET CHARACTER COUNT
+       TAD     NLINES
+       CIA
+       MQLDVI          /COMPUTE HOW MANY WORDS THIS OUTPUT WILL USE
+       6               /(BY TAKING 2/3 OF THE NUMBER OF CHARACTERS,
+       CLL CML RTL     / BU THAT'S SLOW SO WE TAKE 4/6 AND ROUND)
+       JMS I   (FITS   /DETERMINE WHETHER THE OUTPUT WILL FIT
+ERR17, ERR             /NO - TELL THE USER
+       CLA             /CLEAR CRAP FROM AC
+       JMP     CWOC
+CWOB,  CDF 10
+       TAD I   M
+       AND     [177
+       CDF 0
+CWOUT, 0               /TYPE, OUTPUT, OR QPUT
+       ISZ     M
+CWOC,  ISZ     NLINES  /DONE?
+       JMP     CWOB    /NO
+       POPJ
+
+CHRT,  TAD     KTYPE
+       JMP     CHRT2
+\f/X COMMAND AND LINES-TO-CHARACTER CONVERTOR
+
+CHRX,  QREF            /COMMAND X
+       JMS     NLINES  /CONVERT LINES TO CHARS
+       ADJQ            /ADJUST Q-REGISTERS AND SET UP NEW LENGTH.
+       TAD     (QPUT
+       DCA     CWOUT   /SET OUTPUT ROUTINE TO STORE INTO Q REG
+       TAD     MQ      /LOAD THE CHARACTER COUNT
+       JMP     CWOA    /GO TO TEXT OUTPUTTER
+
+NLINES,        0               /CONVERT + OR - N LINES AROUND . TO CHARS M,N
+       ISZ     CFLG    /WAS THERE A COMMA?
+       SKP             /NO
+       JMP     MFROMN  /YES - DON'T CONVERT LINES TO CHARS
+       TAD     P
+       DCA     M
+       DCA     CFLG    /V3C
+       PUSHJ           /CHRL DOES A "GETN"
+               CHRL    /TO GET THE DEFAULT VALUES OF N
+       TAD     P
+       DCA     N
+       TAD     M
+       DCA     P
+MFROMN,        DCA     NFLG    /CLEAR NFLG IN CASE COMMA FLAG WAS ON
+       CLL             /M AND N ARE KNOWN TO BE 12-BITS LONG
+                       /AND POSITIVE
+       TAD     N
+       BZCHK           /IS N OK?
+       CMA CLL         /YES - COMPUTE N-M
+       TAD     M       /BY COMPUTING M-N-1
+       CMA             /AND COMPLEMENTING IT
+       SNL             /IS M>N?
+       JMP I   NLINES  /NO - RETURN N-M
+       TAD     M       /N-M+M=N NOW IN AC.
+       DCA     CPCT    /INTERCHANGE M AND N
+       TAD     M
+       DCA     N
+       TAD     CPCT
+       DCA     M
+       JMP     MFROMN
+\f/COMMANDS ; < AND >
+
+CFSI,  TAD     ITRST
+       SNA CLA
+ERR24, ERR             /FAILING SEARCH NOT IN ITERATION
+CSEM,  OVRLAY
+               QOVRLY
+               CSEMO
+\f/     ^A ROUTINE
+
+CTLA,  TAD     KTYPE
+CEXP,  DCA     WHERTO
+       TAD     CHAR
+       DCA     QUOTE   /TERMINATING CHAR SAME AS COMMAND CHAR
+       DCA     NFLG    /KILL NUMBER IF PRESENT
+CTLALP,        QUOTST
+       JMP I   [IREST
+WHERTO,        0               /TYPE OR IGNORE THE CHARACTER
+       CLA
+       JMP     CTLALP
+       PAGE
+\f/COMMANDS A AND Y
+
+CHRA,  NCHK            /COMMAND A
+       JMP     CHAA
+       GETNUM
+       TAD     P
+       DCA     R
+       SZL
+       JMP I   (ERR11  /ERROR IF POINTER OFF PAGE
+       CDF 10
+       TAD     R
+       CMA CLL
+       TAD     ZZ      /RETURN 'POP' IF POINTER OUTSIDE RANGE [0,Z-1]
+       SNL CLA         /OTHERWISE VALUE OF CHARACTER AT POINTER POSITION
+       JMP I   (ERR11  /POP
+       TAD I   R
+       AND     [377
+       CDF 0
+NCOM14,        CLL
+       JMP I   (NCOM
+\fCHRY, TAD     NFLG
+       SZA CLA
+ERR18, ERR             /NUMERIC ARGUMENT TO Y
+       TAD     OUTR
+       CIA
+       TAD     ERROR
+       SZA CLA
+       TAD     ZZ
+YSKP,  SZA CLA         /CHANGE TO SKP CLA TO NEVER ABORT Y COMMAND
+ERR32, ERR             /Y COMMAND ABORTED
+       DCA     ZZ
+       DCA     P       /WIPE OUT THE BUFFER
+CHAA,  TAD     (ZMAX-1
+       AND     REND
+       CIA CLL
+       TAD     ZZ      /IF WE HAVE ALREADY SEEN THE INPUT EOF,
+       SZL CLA         /OR IF WE'RE ALREADY FULL (OR NEARLY SO)
+       JMP     APLF    /GET OUT
+DECGET,        ISZ     ICRCNT
+       JMP     I2      /NO NEED TO READ
+       CLL
+       TAD     INRSIZ
+       TAD     INRCNT
+STECO1,        SNL             /"SKP!CLA" FOR SUPERTECO
+       DCA     INRCNT  /UPDATE RECORD COUNT
+LFTAB, CLL CML CMA RTR /IF WE OVERFLOWED THE END OF THE FILE,  !
+       RTR             /5 ENTRY TABLE: MUST BE - - - + +       !
+       RTR             /SHORTEN THE READ BY THE CORRECT AMOUNT !
+       TAD     INCTLW  /                                       !
+       DCA     INCTRL  /SO THAT WE WILL NOT READ TOO FAR       !
+       JMS I   INHND
+I3,
+INCTRL,        0400
+BUFIN, IN              /6200 IF 8K, 5600 IF 12K
+IBLK,  0
+       SMA CLA
+       SKP
+       JMP     INER    /IGNORE END-OF-FILE ERRORS, WE'LL SEE THE ^Z.
+       TAD     IBLK
+       TAD     INRSIZ  /BUMP RECORD NUMBER BY THE MAXIMUM NUMBER
+       DCA     IBLK    /(IF WE READ SHORT ITS THE LAST ONE ANYWAY)
+       CLA CMA
+       TAD     BUFIN
+       DCA     INXR    /SET UP INPUT XR
+       TAD     INPCNT
+       DCA     ICRCNT
+       MTHREE
+       DCA     I3
+I2,    NOP             /CDF 20 IF 12K
+       ISZ     I3
+       JMP     I1      /NORMAL CHARACTER
+       MTHREE          /WEIRD CHARACTER-RESET SWITCH
+       DCA     I3
+       MTWO
+       TAD     INXR
+       DCA     INXR    /MOVE INPUT XR BACK TO BEGINNING OF DBLWORD
+       TAD I   INXR
+       AND     [7400
+       DCA     FFFLAG  /TEMP
+       TAD I   INXR
+       AND     [7400
+       CLL RTR
+       RTR
+       TAD     FFFLAG
+       CLL RTR
+       RTR
+       SKP
+I1,    TAD I   INXR
+IC,    NOP             /CDF 0  IF 12K
+       AND     [177    /MASK OFF GARBAGE
+       /INPUT CHARACTER IN AC
+       SZA
+       TAD     (-177
+       SNA             /IGNORE BLANK TAPE AND RUBOUTS
+       JMP     DECGET
+       TAD     (177-32
+STECO2,        SNA             /"SKP" FOR SUPERTECO
+       JMP     APFS    /IT'S A ^Z
+       TAD     (16
+       SNA
+       JMP     APFF    /ITS A FORM FEED
+       TAD     CAFF    /RESTORE CHAR
+       CDF 10
+       DCA     MQ      /SAVE CHAR
+       TAD I   ZZ      /PROTECT HIGH-
+       AND     [7400   /ORDER BITS
+       TAD     MQ      /OF TARGET
+       DCA I   ZZ      /STORE CHAR IN BUFFER
+       TAD     MQ
+       CDF 0
+       ISZ     ZZ
+       TAD     [-12
+       SNA CLA         /IF THE CHAR IS A LINE FEED,
+       TAD     (-310   /CHECK THAT THE BUFFER IS NOT NEARLY FULL
+       JMP     CHAA
+APFS,  DCA     REND    /SIGNAL END OF FILE
+       SKP
+APFF,  STA
+APLF,  DCA     FFFLAG  /SET FORM FEED FLAG
+       POPJ
+\fINER, DCA     REND    /INHIBIT FUTURE INPUTS
+ERR15, ERR
+
+INCTLW,        401             /1021 IF 12K MACHINE
+INPCNT,        6400            /5000 IF 12K MACHINE
+       PAGE
+\f/TELETYPE ROUTINES
+
+TYPCTV,        0               /TELETYPE STUFFER
+       SORT
+               CTLBEL
+               CTLTAB-CTLBEL
+       DCA     SCHAR   /STORE (POSSIBLY TRANSLATED) CHAR
+OUTCC, TAD     SCHAR
+       ISZ     COLCT   /BUMP COLUMN COUNTER
+       AND     [7740
+       SZA CLA         /IS THE CHAR A CONTROL CHARACTER?
+       JMP     NOCON   /NO
+       TAD     (136
+       PUTT            /OUTPUT "^"
+       ISZ     COLCT
+       TAD     [100
+OUTLF, TAD     SCHAR
+OUTLF1,        PUTT
+       JMP I   TYPCTV
+\fCOLCT,        0
+
+OUTCR, DCA     COLCT   /RESET CHAR COUNT
+       JMP     OUTLF
+OUTVT, TAD     [4
+OUTFF, TAD     [7770   /FORM FEED IS 8 LINE FEEDS, VERT TAB IS 4
+       DCA     COLCT   /*** BUG
+ASR33, TAD     CALF    /SIMULATE FORMFEEDS AND VERT TABS WITH LINEFEEDS
+       JMP     OUTCOM  /*K* 8 LOCS AT ASR33 OVERLAYED BY ASR35 CODE
+
+OUTHT, TAD     COLCT   /COLUMN COUNTER, MOD 8
+       AND     [7
+       TAD     [7770   /SIMULATE TABS WITH SPACES
+       DCA     COLCT
+       40              /TAKE UP SPACE SO ASR-35 ROUTINE WILL JUST FIT
+       TAD     .-1     /USE SPACES FOR TABS
+OUTCOM,        PUTT            /PUT ONE OUT THE
+       ISZ     COLCT   /WINDOW
+       JMP I   (TPUTX  /STILL MORE INSIDE
+       JMP I   TYPCTV
+
+NOCON, TAD     SCHAR
+       AND     [100
+EU1,   SNA CLA         /*EU SET TO CLA IF EUFLAG < 0 (NO CASE FLAGGING)
+       JMP     OUTLF   /NOT ALPHANUMERIC
+EU2,   NOP             /*EU SET TO TAD [40 IF EUFLAG>0 (FLAG UPPER CASE)
+       TAD     SCHAR
+       AND     [40
+       SNA CLA
+       JMP     OUTLF
+       TAD     SQUO
+       PUTT
+       ISZ     COLCT
+       TAD     SCHAR
+       AND     [137
+       JMP     OUTLF1  /OUTPUT UPPER CASE VERSION
+
+OUTBEL,        TAD     SCHAR
+       PUTT
+       JMP     OUTCC
+\f      /ROUTINE TO MANIPULATE Q-REGISTER STORAGE
+
+/*** ALLOW : TO MEAN APPEND TO Q-REGISTER
+/APPLIES TO X AND ^U COMMANDS
+/MAKE SURE CMD LINE AND ^S ZERO CLNF
+
+QADJ,  0
+       SPA
+       JMP     ERR12   /STRING TOO LONG FOR Q-REGISTER
+       DCA     MQ      /SAVE NEW LENGTH OF Q-REGISTER
+       QSUM            /COMPUTE POINTER TO CURRENT Q-REGISTER
+       AC3777
+       AND I   QPTR
+       TAD     QP
+       DCA     R
+       AC3777
+       AND I   QPTR    /GET ITS CURRENT LENGTH
+       CIA CLL
+       TAD     MQ      /COMPUTE DIFFERENCE
+       SNL             /ADJUST Q-REGS
+       JMP     QDNN    /TO HOLD NEW STRING
+       SNA             /CHECK FOR ZERO
+       JMP     QADJDN  /NOTHING TO DO
+       TAD     QZ      /MOVE Q-REGISTERS UP TO INSERT CHARS
+       DCA     QP      /(LINK IS 1 FROM PREVIOUS SNL)
+       TAD     QP
+       TAD     MQMAX   /SEE IF OUT OF BOUNDS
+       SNL CLA         /TWO PLACES TO TOGGLE LINK THERE
+ERR12, ERR             /GETTING TOO FULL
+       TAD     QZ
+       DCA     Q
+       TAD     QP
+       DCA     QZ
+       ISZ     QP
+QUPL,  TAD     Q
+       CIA
+SQUO,  TAD     R       /DOUBLES AS ASCII FOR '
+       SNA CLA
+       JMP     QADJDN
+       CMA
+       TAD     Q
+       DCA     Q
+       MTWO
+       TAD     QP
+       DCA     QP
+       TAD     Q
+       GETQ
+       QPUT
+       JMP     QUPL
+\fQDNN, TAD     R       /MOVE Q-REGS DOWN TO ABSORB CHARACTERS
+       DCA     QP
+QDNN1, TAD     QZ
+       CIA
+       TAD     R       /-NUMBER OF CHARS TO MOVE
+       SNA CLA         /DONE?
+       JMP     QDNNF   /YES
+       TAD     R
+       GETQ
+       QPUT
+       ISZ     R
+       JMP     QDNN1   /LOOP AGAIN
+QDNNF, TAD     QP      /SET NEW VALUE
+       DCA     QZ      /OF HIGHEST CHAR
+QADJDN,        STL CLA RAR     /4000
+       AND I   QPTR    /SAVE HIGH ORDER PART
+       TAD     MQ
+       DCA I   QPTR    /SAVE NEW LENGTH OF Q-REGISTER IN Q-REG TABLE
+       TAD     QCMND   /SET UP COMMAND LINE AGAIN
+       SETCMD          /AS IT MAY HAVE BEEN SHUFFLED.
+       QSUM            /RECOMPUTE POINTER TO BEGINNING OF NEW Q-REG
+       JMP I   QADJ
+
+MQMAX, -QMAX
+
+QOVER, 0               /SUBROUTINE TO SKIP TO END OF STRING
+       QCHK            /GET THE QUOTE CHARACTER (IF ANY)
+       TAD     SCANP
+       DCA     OSCANP  /SAVE BACKUP SCAN POINTER
+QOVERL,        QUOTST
+       JMP I   QOVER   /FOUND AN ALTM OR EQUIVALENT - RETURN
+       JMP     QOVERL  /NOT END - SKIP ANOTHER CHAR
+       PAGE
+\f      /Q-REGISTER SUBROUTINES
+
+QSUMR, 0               /COMPUTE POINTER TO Q-REG
+       SNA
+       TAD     QNMBR   /NORMALLY USES QNMBR, BUT CAN BE OVERRIDDEN BY AC
+       CIA
+       DCA     QKNT
+       DCA     QP
+       TAD     (QARRAY /BASE ADDR OF Q-REG POINTERS
+       DCA     QPTR
+       JMP     QSUMB
+QSUML, AC3777
+       AND I   QPTR    /ADD # OF CHARS IN LOWER REG
+       TAD     QP
+       DCA     QP
+       ISZ     QPTR    /SKIP VALUE WORD
+       ISZ     QPTR    /POINT TO NEXT Q-REG
+QSUMB, ISZ     QKNT    /REACHED OUR Q-REGISTER YET?
+       JMP     QSUML   /NO - ADD IN ANOTHER
+       JMP I   QSUMR
+QKNT,  0
+\fSGET, 0               /SCAN COMMAND LINE OR MACRO
+SGET1, CLA             /** CALLED WITH AC NON-ZERO **
+       TAD     QLENGT
+       CIA CLL
+       TAD     SCANP
+       SZL CLA         /CHECK THAT WE ARE STILL INSIDE THE COMMAND LINE
+       JMP     SGOVFL  /NO - COMMAND DONE
+       TAD     SCANP   /GET CHARACTER POSITION IN LINE
+       TAD     QBASE   /ADD IT TO THE ADDRESS OF THE LINE
+       GETQ            /AND GET THAT CHARACTER.
+       DCA     LASTC
+       TAD     TFLG
+       AND     LASTC   /IF THE TRACE FLAG IS ON,
+       SZA
+       TYPE            /PRINT THE CHAR
+       TAD     LASTC
+       ISZ     SCANP   /INCREMENT CHARACTER POINTER AFTER FETCH
+       JMP I   SGET    /RETURN
+SGOVFL,        TAD     MPDL    /"MPDL" IS THE PUSHDOWN POINTER ON ENTRY TO THIS
+       SNA             /MACRO. IF IT IS 0, WE ARE NOT IN A MACRO
+       JMP I   (T1     /SO RETURN TO THE USER
+       TAD     PDLP    /CHECK THAT THE ENDING POINTER IS THE SAME
+       IAC
+       SZA CLA         /AS THE ENTRY ONE - OTHERWISE WE HAVE
+ERR13, ERR             /SCREWED UP SOMEHOW (EG WE ARE
+       POP             / IN THE MIDDLE OF A COMMAND)
+       DCA     SCANP
+       POP
+       DCA     ITRST
+       POP             /RESTORE THE PREVIOUS VALUES OF
+       DCA     MPDL    /MPDL, THE SCAN POINTER AND THE COMMAND LINE
+       POP             /POINTER FROM THE PUSHDOWN LIST
+       SETCMD
+       JMP     SGET1   /AND FETCH A CHARACTER FROM THE UPPER LEVEL.
+\fCMDSET,       0               /SUBROUTINE TO SET UP COMMAND LINE POINTERS
+       DCA     QCMND   /STORE IN COMMAND LINE NUMBER
+       TAD     QCMND
+       QSUM
+       TAD     QP      /GET FIRST LOCATION IN COMMAND LINE
+       DCA     QBASE   /AND STORE IN "QBASE"
+       AC3777
+       AND I   QPTR
+       DCA     QLENGT  /STORE THE LINE LENGTH IN "QLENGT"
+       JMP I   CMDSET  /RETURN
+
+QREFER,        0               /SET UP POINTERS FOR Q-REG REFERENCE
+       SZA
+       JMP     QREFEX  /AHA - WE ALREADY HAVE THE Q-REGISTER
+       SCANUP          /GET Q-REGISTER IDENTIFIER
+       DCA     QNMBR
+       TAD     QNMBR
+       TSTSEP          /TEST FOR ALPHANUMERIC (LOWER CASE LEGAL)
+ERR03, ERR             /OOPS - BAD Q-REGISTER REFERENCE
+       TAD     QNMBR
+       TAD     [7700
+       SPA             /NUMERIC?
+       TAD     Z7      /YES - FORCE NUMBERS UP TO ABUT LETTERS
+       TAD     CALF    /FORCE IDENTIFIER INTO THE RANGE 1-44 (OCTAL)
+QREFEX,        DCA     QNMBR   /STORE AWAY NUMBER FOR FURTHER REFERENCE
+       QSUM            /COMPUTE QP AND QPTR
+       JMP I   QREFER  /RETURN
+
+CDBQ,  OVRLAY
+               QOVRLY  /READ IN Q-OVERLAY
+               CDBQO
+
+CHRO,  OVRLAY          /READ IN Q-OVERLAY
+               QOVRLY
+               CHROO
+\fOVERLY,       0
+       TAD I   OVERLY  /GET LOCATION TO CHECK
+       ISZ     OVERLY
+       DCA     TMP
+       TAD I   OVERLY
+       DCA     OVERLY  /SET RETURN ADDRESS
+       TAD I   TMP     /IS OUR OVERLAY IN CORE?
+       SNA
+       JMP I   OVERLY  /YES, BRANCH INTO IT
+       DCA     TMP     /NO, SET BLOCK TO READ IN
+/**    THE NEXT 5 WORDS ARE MODIFIED IF WE HAVE MORE THAN 12K
+OVREAD,        JMS I   (7607   /CALL SYSTEM HANDLER
+       0200            /READ 2 PAGES
+       3200            /INTO 3200
+TMP,   0               /FROM THIS BLOCK
+       HLT             /ERROR READING OVERLAY
+       JMP I   OVERLY  /GO TO NEXT SPOT
+
+CTLTAB,        OUTBEL  /BELL
+       OUTCR
+POUTHT,        OUTHT
+       4044            /$ WITH SIGN BIT ON
+       OUTFF
+       OUTVT
+       OUTLF
+
+ALTTAB,        4033
+       4033            /ALTMODE WITH SIGN BIT ON
+
+CATS,  STA             /@ COMMAND - FAKE OUT "IREST"
+IREST, DCA     QFLG    /RESET QUOTED STRING FLAG
+       TAD     CAAM
+       DCA     QUOTE   /RESET QUOTE CHAR TO ALTMODE
+POPK,  POPJ            /RETURN
+
+QTST,  0               /SUBROUTINE TO GET A CHAR AND TEST FOR ALTMODE
+       SCAN
+       SORT
+               QUOTE
+               QTST-QUOTE      /RETURN IF QUOTE FOUND
+       ISZ     QTST
+       JMP I   QTST    /SKIP-RETURN WITH AC INTACT IF NOT FOUND
+\f      /COMMANDS ^U AND E - ALSO ERROR ROUTINE
+
+CTLU,  OVRLAY
+               FOVRLY
+               CTLUO
+       PAGE
+\fERRXX,        ERR30+1         /ENTRY POINT ALSO SERVES AS A FLAG FOR "TQMK"
+       KCC             /CLEARS AC
+       CDF 0           /JUST IN CASE
+       TAD I ERRXX     /GRAB SIGNAL '0' NOW
+       DCA ERRTMP      /BEFORE OVERLAY MIGHT DESTROY IT
+       OVRLAY          /GO TO ERROR OVERLAY
+               EOVRLY
+               ERRYY
+
+ERRRET,        TAD ERRTMP      /GET THE LOCATION AFTER THE CALL
+       SNA CLA         /IF IT'S ZERO AND WE WERE CHAINED TO,
+CHOOPS,        NOP             /ITS A FATAL ERROR - JMP CTLC
+FATALJ=        JMP I   (CTLC
+CTRLP, TAD     SCANP
+       CIA
+       DCA     ERRXX   /SET ERRXX TO CHAR POSITION OF ERROR CHAR.
+       KCC             /ZAP KEYBOARD FLAG
+       JMP I   (T0     /CONTINUE AS NORMAL UNLESS USER TYPES "?"
+
+CHRE,  SCANUP          /COMMAND E
+       DCA     TYI
+       TAD     TYI
+       SORT
+               EFLST
+               EFTAB-EFLST
+       CLA
+       OVRLAY
+               FOVRLY
+               CHRED
+ERRTMP,        0               /MUST BE INITIALLY 0
+\f      /COMMANDS I AND <TAB>
+
+CHRI,  NCHK            /I COMMAND
+       JMP     CIL1
+       TAD     N       /INSERT CHAR WHOSE VALUE IS N
+       JMS     UPOC
+/*** CHECK FOR $
+       POPJ
+CTLI,  DCA     QFLG    /CANNOT BE QUOTED
+/      CLA CMA         /FOR TAB INSERT
+/      TAD     SCANP
+/      DCA     SCANP   /BACK UP SCAN POINTER BY ONE
+/                      /*** THIS IS A BUG
+       TAD     CAHT    /TAB
+       JMS     UPOC
+CIL1,  QSKP            /COUNT LENGTH OF INSERTION
+       DCA     DVT1    /ZERO FUDGE USED BY FS COMMAND
+CIL2,  TAD     OSCANP
+       TAD     QBASE
+       DCA     QP      /SET UP POINTER TO INSERTION STRING
+       TAD     SCANP
+       CIA CLL
+       TAD     OSCANP
+       DCA     MQ      /STORE CHAR COUNT TO INSERT (-1)
+       TAD     MQ
+       TAD     DVT1    /ADD FS FUDGE
+       CMA
+       SNL             /DID WE INSERT MORE THAN WE DELETED?
+       JMP     EXPAND  /YES - IGNORE SIGN BIT OF COUNT
+       CIA
+       PUSHJ
+               ADJ2    /COMPRESS OUT EXCESS DELETED STUFF
+       JMP     CIL4
+CIL3,  TAD     QP
+       GETQ            /GET A CHAR
+       DCA     TYI
+       JMS     STOREC  /STORE A CHARACTER
+       ISZ     QP
+CIL4,  ISZ     MQ
+       JMP     CIL3    /OF INSERTION
+       JMP I   [IREST
+
+STOREC,        0               /STORE CHAR IN "TYI" INTO TEXT BUFFER AT P
+       CDF 10
+       TAD I   P
+       AND     [7400
+       TAD     TYI
+       DCA I   P
+       CDF 0
+       ISZ     P
+       JMP I   STOREC
+\f/G COMMAND
+
+CHRG,  QREF            /G COMMAND - GET Q-REGISTER NUMBER
+       DCA     NFLG
+       AC3777
+       AND I   QPTR    /GET COUNT OF CHARS IN REGISTER
+       CMA
+       DCA     MQ      /SAVE AS TRANSFER COUNT
+       ISZ     CLNF
+       SKP
+       JMP     COLG4
+       DCA     CLNF
+       AC3777
+       AND I   QPTR
+EXPAND,        PUSHJ           /COME HERE FROM INSERT LOGIC
+               ADJ     /INCREASE TEXT BUFFER SIZE ( Q-REG LENGTH MAY
+       JMP     CIL4    /BE NEGATIVE) AND GO TRANSFER THE CHARS
+
+TYI,   0               /TELETYPE INPUT
+TYI1,  KSF             /WAIT FOR THE KEYBOARD FLAG
+KSFWT, JMP     .-1     /WHILE WAITING, DISPLAY TEXT ON SCOPE
+       CTCCHK          /CHECK FOR ^C
+       KRB             /WATCH OUT - AC MAY NOT BE 0!
+       AND     [177
+       SNA
+       JMP     TYI1    /IGNORE NULL CHARS AND LEADER
+       SORT
+               ALTLST
+               ALTTAB-ALTLST   /LOOK FOR NON-STANDARD ALTMODES
+       AND     [177    /IN CASE WE RETURNED A NEGATIVE VALUE
+       JMP I   TYI
+
+UPOC,  0               /MOVE TEXT BUFFER UP ONE CHAR
+       AND     [177
+       DCA     TYI
+       CLA IAC
+       PUSHJ
+               ADJ
+       JMS     STOREC  /STORE CHAR IN THE HOLE WE MADE
+       JMP I   UPOC
+
+CUPPER,        0               /FORCE CHARACTER TO UPPER CASE
+       TAD     [-100
+       SMA             /IF ITS >100
+       AND     (37     /REDUCE IT TO BE <140
+       TAD     [100
+       JMP I   CUPPER  /RETURN
+\fCOLG3,        TAD     QP
+       GETQ            /GET A CHAR
+       TYPE
+       ISZ     QP
+COLG4, ISZ     MQ
+       JMP     COLG3
+       POPJ
+\fESCAPE,       0
+       TAD     CAAM    /TYPE ESCAPE
+       PUTT
+       TAD I   ESCAPE
+       PUTT            /TYPE ARGUMENT
+       JMP I   ESCAPE  /OK TO RETURN TO ARGUMENT
+       PAGE
+\fTSAVE,        TAD I   [QPNTR
+       SZA CLA         /IF WE ARE NOT AT THE BEGINNING OF THE C.L.
+       RESORT          /TREAT THIS LIKE ANY OTHER ^S
+       MTWO            /DROP OFF THE TWO BELLS OR ALTMODES
+       TAD     OCMDLN
+       ADJQ            /SET COMMAND STRING LENGTH TO OLD VALUE
+       TAD     L44
+       QREF            /SET UP POINTERS TO Q-REG Z
+       ADJQ            /KILL CONTENTS OF Q-REG Z
+       TAD I   [QPNTR
+       DCA I   (QPNTR-2
+       DCA I   [QPNTR  /DO A QUICK SHUFFLE OF Q-REG LENGTHS
+       JMP I   (TCTLU
+\fCHRQ, QREF            /COMMAND Q
+       CLL
+       JMP     CQOA
+
+CPCS,  QREF            /COMMAND %
+       GETN
+CQOA,  ISZ     QPTR    /POINT TO VALUE WORD
+       TAD I   QPTR    /INCREMENT VALUE BY ARGUMENT
+       DCA I   QPTR
+/ADD LINKS
+       STA
+       TAD     QPTR    /GO BACK ONE
+       DCA     QPTR2   /ALSO COMPL LINK
+       CML RAR
+       TAD I   QPTR2
+       DCA I   QPTR2
+       TAD I   QPTR2
+       RAL
+       CLA
+       TAD I   QPTR
+       JMP I   (NCOM   /MAKE A NUMBER
+
+TYCRLF,        0               /TYPE A CR AND LF
+       TAD     CACR    /CR
+XTYPE, TYPE
+       TAD     CALF    /LF
+       TYPE
+       JMP I   TYCRLF  /RETURN
+
+QPTR2, 0
+
+CHGT,  OVRLAY
+               QOVRLY
+               CHGTO
+CHLT,  OVRLAY
+               QOVRLY
+               CHLTO
+\fCCMA, NCHK            /COMMAND ,
+       JMP     NERR    /NUMBER FLAG NOT SET
+       TAD     NLINK
+       SZA CLA
+ERR26, ERR             /NEG ARGUMENT TO ,
+       ISZ     CFLG
+       SKP
+       JMP     NERR    /3 NUMERIC ARGUMENTS
+       TAD     N       /MOVE N TO M
+CCMA3, DCA     M       /ENTERED HERE BY "H" COMMAND
+       DCA     N       /AND CLEAR N
+       STA
+       DCA     CFLG    /SET COMMA FLAG
+       POPJ
+\f/RETURNS 13-BIT RESULT IN AC,LINK
+
+NGET,  0               /SUBROUTINE TO GET LAST NUMBER, WITH
+NGET1, NCHK            /DEFAULT VALUES OF +1 (NO NUMBER),
+       JMP     NGET2   /OR -1 (JUST A MINUS SIGN)
+       GETNUM
+       JMP I   NGET    /DIGITS SEEN - RETURN THEM
+NGET2, CLA CLL IAC     /NO DIGITS SEEN
+       PUSHJ           /MAKE BELIEVE WE SAW THE DIGIT "1"
+               NCOM    /AND CREATE A NUMBER FROM IT (TAKING ANY
+       JMP     NGET1   /OPERATORS INTO ACCOUNT) AND USE IT
+
+BACKUP,        0
+       TAD I   [QPNTR  /SEE IF ANYTHING TO ERASE
+       SNA CLA
+       JMP I   (T0     /NO, START ALL OVER
+       STA
+       TAD I   [QPNTR  /THEN THE CHARACTER COUNT
+       ADJQ            /REDUCE THE LENGTH OF THE COMMAND REGISTER BY 1
+       TAD     QZ
+       GETQ            /GET THE CHARACTER WE RUBBED OUT
+       JMP I   BACKUP
+
+CHLCMP,        0               /COMPARISON SUBROUTINE
+       TAD I   P       /DATA FIELD IS 10
+       AND     [377
+       CDF     0
+       SORT
+               CAFF
+               LFTAB-CAFF
+       SPA CLA         /LINE TERMINATORS ARE CHANGED TO NEGATIVE NOS.
+       ISZ     CDT     /IS COUNT EXHAUSTED?
+       JMP     CHLRET  /NO
+CHRLI, ISZ     P
+L44,   44
+       CDF     0
+       POPJ
+
+CHRH,  PUSHJ           /COMMAND H
+               CCMA3   /SET M=0 AND COMMA FLAG ON AND FALL INTO "Z"
+                       /** COULD CAUSE ERROR ON B AND H IF NFLG SET
+CHRZ,  TAD     ZZ      /COMMAND Z
+CTLH,                  /^H COMMAND - TIME OF DAY - NOT IMPLEMENTED
+CHRB,  JMP I   (NCOM14 /COMMAND B
+
+CHLRET,        CDF     10
+       JMP I   CHLCMP
+\fEFTAB,        IOV
+       XOV
+       XOV
+       XOV
+       XOV
+       IOV
+       IOV
+       XOV
+\fXOV,  OVRLAY
+               XOVRLY
+               CHREX
+
+IOV,   OVRLAY
+               IOVRLY
+               CHRER
+\f/COMMANDS = AND \ DISPATCHER TO OVERLAY
+
+CEQL,  OVRLAY
+               FOVRLY
+               CEQLO
+CBSL,  OVRLAY
+               FOVRLY
+               CBSLO
+
+ZROSPN,        DCA     SCANP   /RESET TO BEGINNING OF ITERATION
+ZRON,  DCA     NFLG    /KILL NUMBER FLAG
+       JMP I   [IREST
+       PAGE
+\f/     I/O-OVERLAY
+
+/      IOVRLY  XOVRLY  FOVRLY
+/      ER      EF      EU
+/      EB      EC      ES
+/      EW      EX      ET
+/              EG      EV
+/                      EH
+/                      EO
+
+       *3200
+
+IOVRLY,        0
+       QOVRLC
+       EOVRLC
+       XOVRLC
+       FOVRLC
+
+       /SUBROUTINE TO DO LOOKUPS AND ENTERS (LINK CRITICAL ON ENTRY)
+
+OPEN,  0               /CALLED WITH MONITOR CODE - 2 IN AC
+       DCA     RSTSW   /ENTER OR LOOKUP
+       SZL CLA         /IF THIS IS THE OUTPUT SIDE OF AN "EB" COMMAND,
+       JMP     DEVLOD  /SKIP THE STATEMENT SCAN
+       QCHK
+       TAD     DSKNAM  /PACKED SIXBIT FOR 'DSK:'
+       DCA     DEVC
+       TAD     (72     /RESTORE :
+NGOM1, DCA     DEVLST+1
+NGO,   DCA     NAME    /CLEAR NAME
+       DCA     NAME+1
+       DCA     NAME+2
+       MTWO
+       DCA     PERDSW
+NAMCM1,        DCA     NAMCNT
+\fNAMEC,        QUOTST          /GET CHAR AND TEST FOR ALTM
+       JMP     DEVQOT  /ALTM - END OF NAME
+       SORT            /NO - CHECK SPECIAL CHARS
+               DEVLST  /([,:,., AND SPACE
+               DEVTAB-DEVLST
+       TSTSEP          /NO, SEE IF ALPHANUMERIC
+ERR08, ERR             /ILLEGAL CHAR
+       TAD     NAMCNT
+       TAD     [-10
+       SMA CLA         /MORE THAN 6 CHARS?
+       JMP     NAMEC   /YES, IGNORE
+       TAD     NAMCNT  /NO, PACK IT
+       CLL RAR
+       DCA     TEMP1   /*K* NOTE ASSUMPTION NAME STARTS AT LOC 0!
+       TAD     SCHAR
+       UPPERC          /** "UPPERC" ALWAYS COMPLEMENTS LINK
+       AND     [77
+       SNL
+       JMP     .+4
+       CLL RTL
+       RTL
+       RTL
+       TAD I   TEMP1
+       DCA I   TEMP1
+       ISZ     NAMCNT
+       JMP     NAMEC
+
+PERD,  ISZ     PERDSW  /FOUND A PERIOD
+       TAD     NAME
+       SNA CLA         /ERROR IF WE HAVE
+       JMP     ERR08   /DOUBLE PERIODS OR NO FILE NAME
+       DCA     DEVLST+1        /DEVICE NO LONGER LEGAL
+       DCA     NAME+3  /ZERO EXTENSION OUT
+       TAD     [6      /AND SET POINTER TO 6TH CHARACTER
+       JMP     NAMCM1
+
+COLON, TAD     NAME+1
+       SNA             /WE MUST PACK THE NAME INTO ONE WORD OURSELVES
+       JMP     .+5     /BECAUSE IF "OPEN" IS CALLED FROM THE OUTPUT
+       TAD     NAME    /SIDE OF AN "EB" COMMAND, WE SKIP
+       SMA CLA         /THE NAME COLLECTOR.(WITH GOOD REASON -
+       CLL CML RAR     /THE USR OVERLAYS THE COMMAND LINE).
+       TAD     NAME+1  /SINCE THE OS/8 "ASSIGN" CALL TO THE USR
+       TAD     NAME    /REPLACES THE 2ND NAME WORD WITH THE DEVICE
+       DCA     DEVC    /NUMBER, ALL NAME INFO MUST BE HELD IN WORD 1.
+       JMP     NGOM1   /DEVICE NAME STORED - RESET FOR FILE NAME
+
+DEVLST,        56              /.
+       72              /:
+DSKNAM,        5723            /=0423+1300+4000 - SERVES AS LIST TERMINATOR
+\fDEVQOT,       ISZ     PERDSW  /IF WE NEVER SAW A PERIOD,
+       DCA     NAME+3  /WIPE OUT THE EXTENSION
+       JMS I   (GETUSR /BRING USR INTO CORE
+
+DEVLOD,        TAD I   OPEN    /MOVE HANDLER ADDRESS
+       DCA     DEVHND
+       ISZ     OPEN    /AND BUMP POINTER
+       TWO
+       TAD     RSTSW
+       DCA     CODE    /ENTER OR LOOKUP
+       CIF 10          /AND RESET TABLES
+       JMS I   [200
+       13
+RSTSW, 0               /DON'T ZAP OPEN FILES ON INPUT
+       DCA     DEVNO   /ZERO SECOND NAME WORD
+       CIF 10
+       JMS I   [200
+       1               /ASSIGN HANDLER
+DEVC,  0
+DEVNO, 0
+DEVHND,        0
+       JMP     OPNERR  /ERROR - KICK USR OUT FIRST
+       DCA     STBLK
+       TAD     RSTSW   /GET LOOKUP-ENTER SWITCH
+       TAD     NAME    /IF NAME IS NULL AND THIS IS A LOOKUP,
+       SNA CLA
+       JMP     OPSUCC  /IT JUST SUCCEEDED
+       TAD     DEVNO   /DEVICE #
+       CIF 10
+       JMS I   [200
+CODE,  0               /ENTER OR LOOKUP
+STBLK, 0               /FILLED WITH STARTING BLOCK
+TEMP1,
+FLN,   0               /FILLED WITH -LENGTH
+/**** CHECK IF AC MUST = 0
+       JMP     OPNERR  /ERROR
+OPSUCC,        TAD     DEVHND  /HANDLER ADDRESS IN AC
+       JMP I   OPEN
+PERDSW,        7777            /FLIP FLOP FOR EXTENSION
+NAMCNT,        0               /CHARACTER COUNT
+\f/*** CHECK FOR : (SEE P.26) RETURN VALUE IF FNF, ALSO IF FOUND
+OPNERR,        TAD     RSTSW   /WE SHOULD ONLY KILL THE OUTPUT FILE
+       SNA CLA
+       JMP     .+3     /IF THIS IS AN OUTPUT ERROR
+EBERR, TAD     ERROR
+       DCA     OUTR
+       PUSHJ
+PECDSM,        ECDISM          /DISMISS THE USR
+ERR16, ERR
+       0               /*K* TELLS ERR RTN TO EXIT IF WE WERE CHAINED TO
+
+       PAGE
+\fCHRER,        TAD I   (TYI
+       SORT
+               ERLST
+               ERTAB-ERLST
+       ERR             /CAN'T HAPPEN
+
+ERTAB, EBAK            /EB
+       ROPEN           /ER
+       WOPEN           /EW
+
+ERLST, 102             /EB
+       122             /ER
+       127             /EW
+
+       /FILE OPEN COMMMANDS:
+
+EBAK,  CLA CMA CLL     /"EDIT BACKUP" COMMAND WITH LINK CLEAR
+       PUSHJ           /USE 'ROPEN' TO SET POINTERS
+               ROPEN   /WITHOUT KICKING OUT THE USR (AC=-1 ON ENTRY)
+       TAD I   (DEVNO  /DEVICE #
+       TAD     (OSDCBT-1
+       DCA     R
+       CDF 10
+       TAD I   R       /GET DEVICE CODE FROM DCB TABLE
+       CDF
+       SMA CLA         /NEGATIVE IF FILE-STRUCTURED
+       JMP I   (EBERR  /YOU CAN'T DO THAT!
+       TAD     NAME+3  /EXTENSION
+       TAD     (-213
+       SNA
+       JMP I   (EBERR  /CAN'T EB A .BK FILE
+       TAD     DOTBK   /RESTORE EXTENSION
+       DCA     R       /SAVE IT
+       TAD     DOTBK   /.BK EXTENSION
+       DCA     NAME+3
+       CIF 10
+       TAD I   (DEVNO  /DEVICE #
+       JMS I   [200    /DELETE THE OLD BACKUP
+       4
+       NAME
+       0
+DOTBK, 213             /WHO CARES IF IT'S NOT THERE?
+       TAD     R       /OLD EXTENSION
+       DCA     NAME+3
+       CLA CLL CML IAC /SET EDIT BACKUP FLAG AND DO AN "ENTER"
+                       /LINK MUST BE SET HERE FOR OPEN
+WOPEN, DCA     EBFLG   /LINK NORMALLY 0 WHEN GOTTEN HERE
+       CLA IAC         /OPEN OUTPUT FILE
+       JMS I   (OPEN   /ENTER CODE IN AC
+OUHNDL,                4001    /HANDLER ADDRESS
+       DCA     OUTHND  /HANDLER ENTRY
+       TAD I   (DEVNO
+       DCA     ODEV    /SAVE DEV #
+       DCA I   (OCNT   /CLEAR BLOCK COUNT
+       TAD I   (FLN
+       DCA I   (OMAXLN /MAXIMUM FILE LENGTH
+       TAD     NAME
+       DCA I   (OUNAM
+       TAD     NAME+1
+       DCA I   (OUNAM+1
+       TAD     NAME+2
+       DCA I   (OUNAM+2
+       TAD     NAME+3
+       DCA I   (OUNAM+3
+       TAD     (DECPUT
+       DCA     OUTR    /ENABLE CHARACTER OUTPUT ROUTINE
+       TAD     (ECDISM
+       DCA I   (DECPUT /FAKE RETURN FROM CHAR I/O ROUTINE
+       TAD I   (STBLK
+       JMP I   (OSETP  /SET UP BLOCK NUMBER AND POINTERS
+\f/FILE OPEN ROUTINE
+
+ROPEN, DCA     QPTR    /ENTERED WITH AC=-1 IF MONITOR IS TO BE KEPT
+                       /ENTERED WITH LINK=0
+       JMS I   (OPEN   /LOOKUP CODE IN AC
+INHNDL,                7201    /HANDLER ADDRESS
+       DCA     INHND   /SAVE HANDLER ENTRY
+       STA
+       DCA     ICRCNT  /POINTER
+       STA
+       DCA     REND    /CLEAR END-OF-FILE FLAG
+       TAD I   (STBLK
+       DCA I   (IBLK   /FIRST BLOCK
+       TAD I   (FLN
+       DCA     INRCNT  /SET UP INPUT FILE LENGTH
+       ISZ     QPTR    /SHOULD WE DISMISS THE MONITOR?
+       JMP I   (ECDISM /YES - KICK THE USR OUT AND POPJ
+       JMP I   [IREST  /EXIT
+
+DEVTAB,        PERD            /.
+       COLON           /:
+       PAGE
+\fNORMAL,       TAD     ODEV    /CLOSE FILE
+       CIF 10
+       JMS I   [200
+       4
+       OUNAM
+OCNT,  0               /NUMBER OF BLOCKS
+       HLT
+       TAD     ERROR   /RESET OUTPUT SUBROUTINE POINTER
+       DCA     OUTR    /TO ERROR
+ECDISM,        CIF 10          /DISMISS OS/8 USR ROUTINE
+       JMS I   [200
+       11              /KICK USR OUT
+       JMP I   [IREST
+
+/*** REALLY SHOULD BREAK UP INTO 2 ROUTINES
+
+SCHSRT,        0               /SORT LETTERS AND NUMBERS
+       UPPERC          /CONVERT TO UPPER CASE TO REDUCE CASES
+       CLL             /THE LINK WILL ALTERNATE EACH TIME
+       TAD     [-60    /WE ADD ONE OF OUR NEGATIVE CONSTANTS.
+       SMA             /THE LINK AT THE END WILL TELL WHETHER
+       TAD     [-12    /THE CHARACTER WAS ALPHANUMERIC
+       SMA             /(I.E. BETWEEN 60-71,101-132 OR 140-172)
+       TAD     M7      /OR A SEPARATOR CHARACTER.
+       SMA
+       TAD     (-32
+       SZL CLA         /WAS IT ALPHANUMERIC?
+       ISZ     SCHSRT  /YES
+       JMP I   SCHSRT  /SKIP RETURN IF ALPHANUMERIC
+
+RT,    0               /ROUTINE TO PACK THIRD CHAR INTO OUTPUT BUFFER
+       CLL RTL
+       RTL
+       DCA     DM      /CALLED TWICE - FIRST TIME WITH CHAR IN AC,
+       TAD     DM      /SECOND TIME WITH "DM" IN AC
+       AND     [7400
+       TAD I   OPTR2
+       DCA I   OPTR2
+       ISZ     OPTR2
+       JMP I   RT
+\fDVIMQL,       0               /FAKE MQL DVI
+       DCA     DVT1    /STORE DIVIDEND
+       DCA     MQ      /INITIALIZE QUOTIENT
+DV1,   TAD I   DVIMQL  /GET DIVISOR
+       CIA
+       CLL             /SET UP TO TAKE IMMEDIATE EXIT ON ZERODIVIDE
+       TAD     DVT1    /SUBTRACT DIVISOR FROM DIVIDEND
+       SNL             /OVERFLOWED YET?
+       JMP     DV7200  /YES
+       DCA     DVT1    /NO - STORE IT BACK
+       ISZ     MQ      /BUMP QUOTIENT
+       JMP     DV1     /AND LOOP
+DV7200,        CLA
+       TAD     MQ
+       ISZ     DVIMQL  /SKIP PAST DIVISOR
+       JMP I   DVIMQL  /RETURN WITH QUOTIENT IN AC
+
+/SEARCH STRING MODIFIERS:
+
+SCHLST,        16      /^N - ANYTHING BUT
+       21      /^Q - LITERALLY
+       23      /^S - ANY SEPARATOR
+       30      /^X - ANYTHING
+M7,    -7
+\fDECPUT,       0               /DEVICE INDEPENDENT I/O
+       TAD     [200    /ADD ON PARITY BIT
+       ISZ     O3      /3RD CHAR OF 3?
+       JMP     O2      /NO
+       JMS     RT      /YES, SPECIAL HANDLING
+       TAD     DM      /TEMP STORAGE
+       JMS     RT
+SETO3, MTHREE          /RESET SWITCH
+       DCA     O3
+       ISZ     OCRCNT  /END OF BUFFER?
+       JMP I   DECPUT  /NO
+       JMS     FITS    /CHECK FOR OUTPUT OVERFLOW
+       JMP     OERR    /YUP
+       DCA     OCNT    /NO - UPDATE OUTPUT COUNT
+       JMS I   OUTHND  /OUTPUT THE BUFFER
+OUCTRL,        4400
+BUFOUT,        OUT
+OBLK,  0
+       JMP     OERR
+       TAD     OBLK
+       TAD     INRSIZ  /BUMP THE OUTPUT RECORD NUMBER BY THE MAXIMUM
+OSETP, DCA     OBLK    /SINCE ALL WRITES EXCEPT THE LAST ARE MAXIMAL
+       TAD     BUFOUT  /BUFFER POINTERS
+       DCA     OPTR1
+       TAD     BUFOUT
+       DCA     OPTR2
+       TAD     OUTSIZ
+       DCA     OCRCNT  /DOUBLEWORD COUNT (7377 IF 8K, 6777 IF 12K)
+       JMP     SETO3   /SET BYTE COUNTER AND RETURN
+OERR,  CLA
+       TAD     ERROR
+       DCA     OUTR    /INHIBIT FUTURE OUTPUT
+ERR14, ERR
+O2,    DCA I   OPTR1   /NORMAL HANDLING
+       ISZ     OPTR1   /BUMP POINTER
+       JMP I   DECPUT
+OPTR1, 0
+OMAXLN,        0               /SIZE OF HOLE FOR OUTPUT
+OUTSIZ,        7377            /6777
+O3,    0
+\fFITS, 0               /SUBROUTINE TO CHECK FOR OUTPUT OVERFLOW
+       TAD     OPTR1   /** AC MAY CONTAIN FUDGE ON INPUT **
+       CIA
+       TAD     BUFOUT  /COMPUTE NUMBER OF WORDS IN BUFFER
+       AND     [7400   /ROUND "UP" TO NEXT BUFFERLOAD
+       CIA             /MAKE POSITIVE
+       CLL CML RAR
+       DCA     OUCTRL  /AND SAVE IT AS A BUFFER CONTROL WORD
+       TAD     OUCTRL
+       CLL RAL
+       CLL RTL         /ISOLATE THE BLOCK COUNT OF THE CONTROL WORD
+       RTL             /IN THE LOW ORDER PART OF THE AC
+       RAL
+       TAD     OCNT    /ADD IT TO THE CURRENT OUTPUT COUNT
+       CLL CML
+       TAD     OMAXLN  /SEE THAT WE DIDN'T OVERFLOW
+       SNL SZA         /THE ASSIGNED OUTPUT AREA
+       JMP I   FITS    /OOPS - WE DID - ERROR RETURN
+       CIA
+       TAD     OMAXLN  /SUBTRACT OFF THE LIMIT
+       CIA             /TO ARRIVE AT THE UPDATED BLOCK COUNT
+       ISZ     FITS
+       JMP I   FITS    /AND SKIP RETURN
+OUNAM, ZBLOCK  4       /NAME OF OPEN OUTPUT FILE GOES HERE
+       PAGE
+\f/DISPLAY ROUTINE FOR PDP-12 SCOPE
+
+WASTE, 0               /** MUST BE AT MULTIPLE OF 2000
+XPOS,  0               /PDP-12 BETA REGISTER 1
+BETA2, 0               /PDP-12 BETA REGISTER 2
+
+DSPLAY,        0               /TEXT DISPLAY ROUTINE FOR TECO
+       MTHREE          /THIS ROUTINE DEPENDS ON THE FACT THAT THE
+       TAD     DSPLAY  /HIGH ORDER BITS OF THE X-COORD ARE IGNORED
+       DCA     DX      /BY THE VR12 HARDWARE
+       TAD I   DX      /GET THE SKIP
+       DCA     DLPTST  /PUT IT IN THE LOOP
+       TAD     P
+       DCA     DX
+       TAD     NUMLNS
+       STL CIA         /LOOK BACKWARD
+       PUSHJ           /FOR BEGINNING OF DISPLAY AREA
+               CHRL1
+D360,  STA STL         /=7360
+       TAD     P
+       DCA     DM
+       TAD     DX
+       DCA     P       /RESTORE POSITION
+       TAD     NUMLNS  /NOW SCAN FORWARD
+       CLL IAC
+       PUSHJ           /FOR THE END OF THE DISPLAY AREA
+               CHRL1
+       TAD     P
+       CIA
+       TAD     DM
+       DCA     R       /*K* THIS NUMBER MUST GO IN R -
+       TAD     DX      /THE ^W COMMAND NEEDS IT THERE
+       DCA     P       /RESTORE ORIGINAL P
+DSETUP,        TAD     P
+       CIA
+       TAD     DM
+       DCA     DQ      /SAVE COUNT OF CHARS TO CURSOR POSITION
+       TAD     DM
+       DCA     DX
+       TAD     R
+       DCA     DR
+       TAD     D360
+       DCA     YPOS
+DISCR, TAD     DISLF
+SETXPS,        DCA     XPOS    /SET X POSITION/COLUMN COUNTER
+       JMP     DLPTST
+\f      /DISPLAY LOOP
+
+DGETCH,        CDF 10
+       TAD I   DX
+       CDF 0           /GET THE CHARACTER FROM FIELD 1
+       AND     [177    /AND OFF THE HIGH ORDER BITS
+       TAD     (-33
+       SNA             /CHANGE ALTMODES
+       TAD     CAHT    /TO DOLLAR SIGNS
+       TAD     (-5
+       SMA SZA         /IF NOT A CONTXRACTER
+       JMP     DLOOP   /DISPLAY IT AND KEEP GOING
+       SNA
+       JMP     DBLANK  /DO BLANKS FAST
+       TAD     (40-15
+       SNA             /CR?
+       JMP     DISCR   /YES - RESET X COORD
+       STL
+       TAD     [4
+       SNA             /TAB?
+       JMP     DTABB
+       SNL
+       JMP     DISLF   /LINE FEED, VERTICAL TAB, OR FORM FEED
+       TAD     (51     /ORDINARY CONTROL CHAR - RESTORE IT + 40
+       DCA     WASTE   /SAVE CHAR
+       JMS     DISCHR  /DISPLAY ^
+       TAD     WASTE   /NOW DISPLAY ALTERED CHAR
+DLOOP, JMS     DISCHR
+
+DLPTST,        HLT             /EITHER KSF OR TSF OR "ISZ R"
+       SKP
+       JMP I   DSPLAY  /EXIT IMMEDIATELY IF TEST SKIPS
+       ISZ     DQ      /ARE WE AT THE CURRENT POINTER POSITION?
+       JMP     TSTEDS  /NO
+       TAD     (-5
+       TAD     XPOS
+       DCA     XPOS    /BACK UP X POSITION A HALF-CHARACTER
+       TAD     DM20
+       TAD     YPOS
+       6141            /ENTER LINC MODE
+DM20,  1760            /DSC I
+       2000
+       1760            /DISPLAY A ^
+       2076
+       0002            /PDP
+       MTHREE          /AND MOVE X POSITION BACK TO WHERE IT WAS
+       JMP     DBLANK+1
+TSTEDS,        ISZ     DR      /ARE WE THROUGH?
+       JMP     DGETCH  /NO
+       JMP     DSETUP  /YES - START OVER
+\fDTABB,        TAD     XPOS    /DISPLAY TAB
+       CMA
+       AND     Z7
+       DCA     WASTE   /GET NUMBER OF COLUMNS TO GO (-1)
+       TAD     WASTE
+       CLL RTL
+       RAL
+       TAD     WASTE   /MULTIPLY BY 9
+DBLANK,        TAD     CAHT    /BUMP ONE MORE COLUMN
+       TAD     XPOS
+       SZA             /OVERFLOW?
+       JMP     SETXPS  /NO - SET XPOS AND CONTINUE
+       JMP     LINOFL  /YES - GO TO THE NEXT LINE
+
+/SUBROUTINE TO DISPLAY A CHARACTER
+
+DISCHR,        DLPTST          /*K* DISCHR MUST CONTAIN "DLPTST" WHEN WE
+       CLL RAL         /ARE EXAMINING CHARACTERS **
+       TAD     (DTABLE-1
+       DCA     BETA2   /STORE ADDRESS OF TABLE ENTRY FOR CHAR -1
+       TAD     YPOS
+
+       6141            /ENTER LINC MODE
+       1762            /DSC I 2
+       1762            /DSC I 2
+       0002            /RE-ENTER PDP-8 MODE
+
+       CLA
+       ISZ     XPOS    /BUMP THE X COORDINATE/COLUMN COUNTER
+       JMP I   DISCHR  /RETURN
+LINOFL,        TAD     (7054   /INDENT ALL CONTINUATION LINES
+       DCA     XPOS
+DISLF, RAR             /*K* RAR=7010  AC MAY HAVE A SMALL NUMBER
+       TAD     YPOS    /IN IT HERE - THATS OK AS LONG AS ITS SMALL,
+       TAD     [-40    /SINCE ONLY THE HIGH 8 BITS OF YPOS COUNT.
+       DCA     YPOS
+       JMP I   DISCHR  /*K* THIS ALWAYS RETURNS TO DLPTST **
+
+YPOS=  NAME            /USE SOME FREE PAGE ZERO LOCATIONS
+DR=    NAME+1          /FOR OUR TEMPORARIES
+DQ=    NAME+2
+DM=    NAME+3
+       PAGE
+\fDTABLE,       2000;2076;      7500;0000;      7000;0070;      7714;1477
+       5721;4671;      6661;4333;      5166;0526;      0000;0070
+       3600;0041;      4100;0036;      2050;0050;      0404;0437
+       0500;0006;      0404;0404;      0001;0000;      0601;4030
+       4536;3651;      2101;0177;      4523;2151;      4122;2651
+       2414;0477;      5172;0651;      1506;4225;      4443;6050
+       5126;2651;      5122;3651;      2200;0000;      4601;0000
+       1000;4224;      1212;1212;      2442;0010;      4020;2055
+       4077;5751;      4477;7744;      5177;2651;      4136;2241
+       4177;3641;      4577;4145;      4477;4044;      4136;2645
+       1077;7710;      7741;0041;      4142;4076;      1077;4324
+       0177;0301;      3077;7730;      3077;7706;      4177;7741
+       4477;3044;      4276;0376;      4477;3146;      5121;4651
+       4040;4077;      0177;7701;      0176;7402;      0677;7701
+       1463;6314;      0770;7007;      4543;6151;      4177;0000
+       3040;0106;      0000;7741;      2000;2076;      1604;0404
+\fSTABLE,       ZBLOCK  40      /SEARCH BUFFER
+
+CTLW,  NCHK            /^W COMMAND - IF THERE WAS A NUMBER BEFORE
+       JMP     CTLW2   /THE ^W, SET THE NUMBER OF LINES TO DISPLAY
+       TAD     N       /EQUAL TO THAT NUMBER.
+       DCA     NUMLNS
+                       /DON'T WORRY ABOUT NEGATIVE N
+CTLW2, ISZ     R       /FAKE OUT! (MUST BE BEFORE CALL TO DISPLY)
+       DISPLY          /IN ANY CASE, GO THROUGH ONE DISPLAY CYCLE
+       POPJ            /THEN RETURN
+
+SAVTRA,        0               /SAVE TRACE MODE
+       TAD     TFLG
+       DCA     TFGTMP
+       DCA     TFLG
+       JMP I   SAVTRA  /EXIT WITH TRACE OFF
+
+RESTRA,        0               /RESTORE TRACE MODE
+       TAD     TFGTMP
+       DCA     TFLG
+       JMP I   RESTRA
+TFGTMP,        0
+
+CHKQF, 0               /CHECK FOR EXPLICIT QUOTES
+       ISZ     QFLG    /QUOTE FLAG SET?
+       JMP     .+3     /NO
+       SCAN            /GET QUOTING CHAR
+       DCA     QUOTE   /PUT INTO SEARCH TABLE
+       DCA     QFLG    /ZAP QUOTE FLAG
+       JMP I   CHKQF   /RETURN
+\fNXTBUF,       0
+       SZA CLA
+       JMP     NOWRIT  /READ-ONLY IF AC NOT 0 ON ENTRY
+       PUSHJ
+               CPOC    /HP
+       DCA     ZZ      /FORCE Y TO WORK
+       ISZ     FFFLAG  /IF WE DIDN'T SEE A FORM FEED ON INPUT
+       JMP     NOWRIT  /DON'T OUTPUT ONE
+       TAD     CAFF
+       OUTPUT
+NOWRIT,        PUSHJ
+               CHRY    /READ NEW BUFFER
+       CTCCHK          /CHECK FOR ^C AND ^P
+       CLA             /*K* CTCCHK LEAVES AC NON-ZERO!
+       JMP I   NXTBUF
+
+GETUSR,        0               /ROUTINE TO LOCK THE USR INTO CORE
+       CDF 0
+       TAD     ZZ      /IF THE TEXT BUFFER IS EMPTY AND
+       SNA CLA         /WE HAVE 12K, SO Q-REGS ARE IN FIELD 2,
+NWRUSR,        NOP             /(CHANGED BY INIT CODE TO "TAD [4" IF 12K)
+       STL RTR         /THEN WE SHOULD NOT SAVE CORE ON A USR CALL.
+       DCA I   (JSBITS /THIS STORES A 2000 OR A 2001
+       CIF 10
+       JMS I   [7700   /OK - NOW LOAD THE USR IN
+       10
+       JMP I   GETUSR
+\f/E COMMAND MODIFIERS
+
+EFLST, 102             /EB     I
+       103             /EC     X
+       106             /EF     X
+       107             /EG     X
+       113             /EK     X
+       122             /ER     I
+       127             /EW     I
+       130             /EX     I
+
+CHRU,  QREF            /COMMAND U
+       NCHK
+ERR22, ERR             /U MUST BE PRECEDED BY A NUMBER
+       TAD     NLINK
+       CLL RTR
+       DCA     NLINK
+       AC3777
+       AND I   QPTR
+       TAD     NLINK
+       DCA I   QPTR
+       ISZ     QPTR
+       TAD     N
+       DCA I   QPTR
+       POPJ
+
+/RADIX TABLES:
+
+ORAD,  NOP
+       1000
+       100
+       10
+DRAD,  NP&177+1200     /"TAD NP"
+       1750
+       144
+       12
+\f/DISPATCH TABLE FOR COMMAND INPUT
+
+COMTAB,        TBEL            /^G
+       TCRLF           /CR
+RUBY,  ROCMND          /RUBOUT
+       TCTLU           /^U
+       TALTM           /ALTMODE
+       TQMK            /?
+       TSAVE           /^S
+       TSTAR           /*
+       TSPACE          /SPACE
+
+EDFLAG,        0               /MUST BE KEPT TOGETHER
+EHFLAG,        0
+EOFLAG,        VERSN
+ESFLAG,        0
+ETFLAG,        0
+EUFLAG,        0
+/CXFLAG,       0
+       PAGE
+\f/COMMAND M
+/AND Q-REGISTER STORAGE
+COMLST,        7               /^G, COMMAND LINE EDIT LIST
+       15              /CR, INSERT CR & LF
+       177             /RUBOUT
+       25              /^U - RUB OUT LINE
+       33              /^[, ALT MODE
+       77              /?
+       23              /^S - SAVE OLD COMMAND LINE IN Q-REG Z
+       52              /*
+       40              /SPACE
+
+CHRM,  QREF            /COMMAND M
+       TAD     M4      /4 ITEMS PUSHED TO
+       PUSHL           /SAVE CURRENT MACRO STATE
+               QCMND
+               MPDL
+               ITRST   /SO THE "O" COMMAND WILL WORK IN MACROS
+               SCANP   /ZEROED BY "PUSHL"
+       TAD     PDLP    /MUST CHECK PDL AT END OF MACRO
+       CIA
+       DCA     MPDL
+       TAD     QNMBR   /Q-REGISTER TO EXECUTE
+       SETCMD          /SET COMMAND LINE TO THIS Q-REG
+       POPJ            /LEAVE NUMBER FLAG ALONE AND EXIT
+
+CHKBZ, 0               /SEE THAT B .LE. C(AC) .LE. ZZ
+       SZL
+       JMP     ERR11   /POP
+       CIA             /ENTERED WITH LINK SET CORRECTLY
+       TAD     ZZ
+       SNL             /13-BIT ARITHMETIC
+ERR11, ERR             /C(AC)>ZZ
+       CIA
+       TAD     ZZ      /RESTORE ORIGINAL AC
+       JMP I   CHKBZ
+
+ALTLST,        175     /ALT MODE
+       176     /ANOTHER ALTMODE
+M4,    -4
+\fSCUPPR,       0               /SCAN AND CONVERT TO UPPER CASE
+       SCAN
+       UPPERC
+       JMP I   SCUPPR  /THAT'S ALL?
+
+/Q-REGISTER STORAGE - EACH Q-REGISTER TAKES 2 WORDS.
+/WD 1 CONTAINS THE LENGTH OF THE CHARACTER PART OF THE REGISTER (IF ANY)
+/WD 2 CONTAINS THE VALUE  OF THE NUMERIC PART OF THE REGISTER (IF ANY)
+
+QARRAY,        ZBLOCK  110     /36 Q-REGISTERS * 2 WORDS/REGISTER = 72 WORDS
+QPNTR, CHNSTR          /FAKE Q-REGISTER FOR INPUT LINE - LENGTH ONLY.
+\fCTLT, NCHK
+       JMP     CTLT2   /NO ARG
+       TAD     N
+ET1,   TYPE            /TYPE CHAR REPRESENTED BY ARGUMENT
+       POPJ
+CTLT2, LISTEN          /^T COMMAND - VALUE OF NEXT CHAR FROM TTY
+ET8,   TYPE            /*ET    ECHO THE CHARACTER
+       TAD     SCHAR   /GET THE CHARACTER
+       JMP I   (NCOM14 /JUMP INTO NUMBER PROCESSOR
+
+CTLE,  TAD     FFFLAG  /^E COMMAND - RETURNS FORM FEED FLAG
+NNEW13,        CLL
+       SPA
+       STL             /EXTEND SIGN BIT TO LINK
+       JMP I   (NCOM   /RETURN -1 IF F.F., 0 OTHERWISE
+       PAGE
+\f      *5000
+
+/COMMAND DISPATCH TABLE        ** ALLOW EVEN/ODD FOR NOVICE SUBSET?
+
+CDSP,  POPK;CTLA;SERR;CTLC;CTLD;CTLE;CTLF;CTLC /0-7
+       CTLH;CTLI;POPK;SERR;POPK;POPK;CTLN;CTLO /10-17
+         T0;SERR;SERR;SERR;CTLT;CTLU;ERR35;ERR27       /20-27
+       SERR;SERR;SERR;ZRON;SERR;SERR;CTUA;SERR /30-37
+       POPK;CEXP;CDBQ;CNBS;SERR;CPCS;CAMP;ZRON /40-47
+       COPR;CCPR;CAST;CPLS;CCMA;CMIN;CDOT;CVIR /50-57
+       NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR /60-67
+       NMBR;NMBR;CCLN;CSEM;CHLT;CEQL;CHGT;CQSM /70-77
+       CATS;CHRA;CHRB;CHRC;CHRD;CHRE;CHRF;CHRG /100-107
+       CHRH;CHRI;CHRJ;CHRK;CHRL;CHRM;CHRN;CHRO /110-117
+       CHRP;CHRQ;CHRR;CHRS;CHRT;CHRU;SERR;SERR /120-127
+       CHRX;CHRY;CHRZ;SERR;CBSL;SERR;CHUA;CHBA /130-137
+       /END OF DISPATCH TABLE
+
+PDLBEG,        ZBLOCK  11      /BEGINNING OF PUSHDOWN LIST
+QPUT12,        ZBLOCK  16      /ROUTINES INSERTED LATER - USED IN
+ASR35, ZBLOCK  10      /INITIALIZATION, OVERLAYED BY PUSHDOWN LIST
+PDLEND,        0               /END OF PUSHDOWN LIST
+       PAGE
+\f      *5200
+
+/      INITIALIZATION SECTION
+/      ENTER HERE AT 5200 TO MODIFY TECO TO USE A MODEL 35 TELETYPE
+/      SORRY - NO CURRENT PAGE LITERALS
+
+TECO35,        ISZ     JTECO   /IF CALLED VIA "R" OR "RUN"
+       TAD I   XR      /MOVE ASR-35 PATCH (WHICH OUTPUTS TABS AND
+       DCA I   INXR    / FORM FEEDS) OVER PRINT ROUTINE
+       ISZ     ASRCNT
+       JMP     .-3
+       TAD     YOUTHTX
+       DCA I   YPOUTHT
+       TAD     [TECO
+       DCA I   Y7745   /CHANGE STARTING ADDRESS IN CASE WE'RE RESTARTED
+                       /AND FALL INTO INITIALIZATION ROUTINE
+
+TCINIT,        TLS             /INITIALIZATION ROUTINE - INITIALIZE THE TTY
+       TAD     .-1
+       DCA I   [TECO
+       TAD     YT0A            /"JMP T0A"
+       DCA I   PTECO1  /CHANGE THE ENTRY AT 200 SO WE'RE NOT CALLED AGAIN
+       CLA STL
+       6141            /ENTER LINC MODE (MAYBE)
+       4               /ESF - SET SMALL CHARACTERS FOR SCOPE
+       0261            /ROL I 1 - ROTATE LINK INTO AC11
+       0002            /BACK TO PDP-8 MODE
+       SNA CLA         /AC NON-ZERO IF WE ARE A PDP-12
+       JMP     NOTA12  /NO, JUST AN ORDINARY 8
+       TAD     YPDP12
+       JMS     CHANGE  /TRADE OFF TWO PAGE HANDLERS FOR A SCOPE
+NOTA12,        TAD I Y7777
+       AND COR70
+       SZA
+       JMP     SOFCOR
+COR0,  CDF 0           /NEEDED FOR PDP-8L
+       TAD CORSIZ      /GET FIELD TO TEST
+       RTL
+       RAL
+       AND COR70       /MASK USEFUL BITS
+       TAD COREX
+       DCA .+1         /SET UP CDF TO FIELD
+COR1,  CDF /N          /N IS FIELD TO TEST
+       TAD I CORLOC    /SAVE CURRENT CONTENTS
+COR2,  NOP             /HACK FOR PDP-8!
+       DCA COR1
+       TAD COR2        /7000 IS A "GOOD" PATTERN
+       DCA I CORLOC
+COR70, 70              /HACK FOR PDP-8, NOP
+       TAD I CORLOC    /TRY TO READ BACK 7000
+CORX,  7400            /HACK FOR PDP-8, NOP
+       TAD CORX        /GUARD AGAINST WRAP-AROUND
+       TAD CORV        /TAD (1400
+       SZA CLA
+       JMP COREX       /NON-EXISTENT FIELD EXIT
+       TAD COR1        /RESTORE CONTENTS DESTROYED
+       DCA I CORLOC
+       ISZ CORSIZ      /TRY NEXT HIGHER FIELD
+       JMP COR0
+
+COREX, CDF 0           /LEAVE WITH DATA FIELD 0
+       STA
+       TAD CORSIZ      /HIGHEST EXISTING FIELD
+COR999,        DCA     MEMSIZ
+       TAD     MEMSIZ
+       SNA CLA
+       JMP     JTECOM  /8K
+       TAD     YM7     /MORE THAN 8K
+       JMS I   YMOVE
+       CDF     0
+       QPUT12-1
+       CDF     0
+       QPUTS-1
+       TAD     YM7
+       JMS I   YMOVE
+       CDF     0
+       QPUT12+7-1
+       CDF     0
+       GETQX-1
+       TAD     YTWLVEK
+       JMS     CHANGE  /AND CHANGE A WHOLE MESS OF LOCATIONS
+JTECOM,        JMS I   YOVINIT /WRITE OUT OVERLAYS
+       CDF     10
+       TAD I   YSCPBIT
+       CDF     0
+       AND     [200
+       SNA CLA
+       JMP     JTECO
+       TAD     YSCOPE
+       JMS     CHANGE
+JTECO, JMP I   .+1     /INCREMENTED IF WE WERE'NT CHAINED TO
+       CHINIL
+PTECO1,        TECO1
+
+CORLOC,        CORX            /ADDRESS TO TEST IN EACH FIELD
+CORV,  1400            /7000+7400+1400=0
+CORSIZ,        1               /CURRENT FIELD TO TEST
+
+SOFCOR,        CLL RAR
+       RTR
+       JMP     COR999
+\f/CHAINED INIT CODE - MOVE 17600 INTO Q-REGISTER SPACE
+
+CHINIL,        CDF 10
+       TAD I   DX      /GET A COMMAND LINE CHAR
+       CDF 0
+       QPUT
+       ISZ     INICT
+       JMP     CHINIL
+       TAD     YFATALJ /SET UP THE FATAL ERROR EXIT
+       DCA I   YCHOOPS /IN THE ERROR ROUTINE
+       JMP I   YCHTECO
+INICT, -CHNSTR
+
+ASRCNT,
+CHANGE,        -10             /ROUTINE TO CHANGE SPECIFIC LOCATIONS
+       DCA     XR      /STORE TABLE POINTER
+CHANGL,        TAD I   XR      /GET LOCATION
+       SNA
+       JMP I   CHANGE  /END OF LIST - RETURN
+       DCA     TEMPT
+       TAD I   XR      /GET CONTENTS
+       DCA I   TEMPT   /ZAP!
+       JMP     CHANGL
+
+/CHECK FOR OS/8 SCOPE BIT, IF ON, PATCH TECO
+/ALSO SEND ESC SEQ TO TERMINAL TO SEE IF VT05 OR VT5X.
+
+
+YOUTHTX,       OUTHTX
+YPOUTHT,POUTHT
+Y7745, 7745
+Y7777, 7777
+YM7,   -7
+YMOVE, MOVE
+YOVINIT,OVINIT
+YSCPBIT,SCPBIT
+YFATALJ,FATALJ
+YCHOOPS,CHOOPS
+YCHTECO,CHTECO
+YPDP12,        PDP12-1
+YTWLVEK,TWLVEK-1
+YSCOPE,        SCOPE-1
+YT0A,  T0A&177+5200
+/FLOW INTO NEXT PAGE
+\fSCOPE,        RUBY;   SCOPY           /MAKE SCOPE RUBOUTS WORK
+       BLSP1;  TAD CACR        /MAKE BELL SPACE WORK
+       BLSP2;  TYPE            /AND MORE RUBOUTS
+       BLSP3;  SCAPE&177+4600  /JMS I (ESCAPE
+       BLSP4;  113             /MORE BELL SPACE
+       EUFLAG; -1              /SET EU TO -1
+       EU1;    CLA
+       EU2;    TAD [40
+       0
+\f/LOCATIONS TO CHANGE MUST BE CHANGED IN OVERLAY IMAGE
+/BEFORE OVERLAY IS WRITTEN OUT
+
+/LOCATIONS TO CHANGE IF WE HAVE 12K OF CORE
+
+TWLVEK,        INRSIZ; 4       /INPUT BUFFER GROWS TO 4 BLOCKS LONG
+       INCTLW; 1021    /AND LIVES IN FIELD 2
+       INPCNT; 5000
+       I2;     CDF 20
+       IC;     CDF 0   /THIS WAS A NOP TO SPEED UP RTS-8 OPERATION
+       L12K1;  J12K1   /SPEED UP TEXT MOVE ROUTINES,
+       L12K2;  J12K2   /SINCE Q-REGISTERS DON'T SIT ON TOP OF TEXT.
+       OUTSIZ; 6777    /OUTPUT BUFFER TAKES OVER OLD INPUT BUFFER SPACE
+       BUFIN;  5600
+       NWRUSR; TAD [4  /LET USR BE CALLED WITHOUT SAVING CORE
+       MQMAX;  -Q12MAX /ALLOW MORE Q-REGISTER STORAGE
+       QLIMIT; 12-Q12MAX
+       0
+
+
+/LOCATIONS TO CHANGE IF WE'RE RUNNING ON A PDP-12
+
+PDP12, KSFWT;  DISPLY  /FIX KEYBOARD AND PRINTER WAITS
+       TSFWT;  DISPLY  /SO THEY DISPLAY WHILE WAITING
+       CDSP+127;CTLW   /ENABLE W COMMAND
+       INHNDL; 7200    /ONE PAGE INPUT HANDLER ONLY
+       OUHNDL; 7400    /DITTO OUTPUT HANDLER
+                       /VALUE MUST BE 0 INITIALLY TO END LIST
+OVINIT,        0               /WRITE OUT OVERLAYS
+/IF MORE THAN 12K, MOVE OVERLAYS TO FIELD 3
+       MTHREE
+       TAD     MEMSIZ
+       SPA CLA
+       JMP     L16K    /LESS THAN 16K
+       TAD     [-400
+       JMS     MOVE
+       CDF     0
+       3200-1
+       CDF 30
+       MEMLOC-1
+       TAD     M2000
+       JMS     MOVE
+       CDF     0
+       5600-1
+       CDF     30
+       MEMLOC+400-1
+       TAD     M5
+       JMS     MOVE
+       CDF     10
+       NEWERR-1
+       CDF     0
+       OVREAD-1
+/      TAD     (COREAD-COREND-1
+       TAD     M3000
+       JMS     MOVE
+       CDF     10
+       4400-1          /       COREAD-1
+       CDF     30
+       4400-1
+       JMP     G16K
+L16K,  JMS I   (7607
+       4200
+       3200            /WRITE OUT I/O-OVERLAY
+       IOVRLC
+       JMP     OVERR   /ERROR WRITING OVERLAY
+M3000, JMS I   (7607
+       5400            /4 OVERLAYS
+       5600            /WRITE OUT Q-OVERLAY AND E-OVERLAY
+       QOVRLC
+       JMP     OVERR   /ERROR WRITING OUT OVERLAY
+G16K,  DCA I   (ERRXX
+       JMP I   OVINIT  /RETURN
+
+OVERR, TAD     [-400   /SWAP IN ERROR OVERLAY FROM CORE AND MAKE SURE
+       JMS     MOVE    /WE RETURN TO MONITOR
+       CDF     0
+       6200-1
+       CDF     0
+       3200-1
+/      DCA I   (ERRTMP /SET FATAL SWITCH
+       TAD     (FATALJ
+       DCA I   (CHOOPS
+ERR30, JMP I   (ERRYY  /CALL ERROR MESSAGE PROCESSOR
+
+M2000, -2000
+M5,    -5
+\fMOVE, 0
+       DCA     MQ
+       TAD I   MOVE
+       DCA     MOVEL
+       ISZ     MOVE
+       TAD I   MOVE
+       DCA     INXR
+       ISZ     MOVE
+       TAD I   MOVE
+       DCA     MOVEC
+       ISZ     MOVE
+       TAD I   MOVE
+       DCA     XR
+       ISZ     MOVE
+MOVEL, HLT
+       TAD I   INXR
+MOVEC, HLT
+       DCA I   XR
+       CDF     0
+       ISZ     MQ
+       JMP     MOVEL
+       JMP I   MOVE
+\f      /ROUTINES TO BE (POSSIBLY) SWAPPED INTO TECO
+
+       *QPUT12
+       RELOC QPUTS
+QPUTS, 0               /12K Q-REGISTER PUT ROUTINE
+       AND     [377
+       CDF 20
+       DCA I   QP
+       CDF 0
+       ISZ     QP
+       JMP I   QPUTS
+
+       RELOC GETQX
+GETQX, 0               /12K Q-REGISTER GET ROUTINE
+       DCA     CHKCTC
+       CDF 20
+       TAD I   CHKCTC
+       CDF 0
+       AND     [377
+       JMP I   GETQX
+
+       RELOC ASR33
+       JMP     OUTCMX  / FORM FEED/VERT. TAB - USE 8/4 FILLERS
+OUTHTX,        TAD     COLCT   /GET COLUMN COUNTER
+       RTR
+       RAR
+       CLA CMA RAL     /OUTPUT 2 FILLERS IF MORE THAN 4 CHARS TO TAB
+       DCA     COLCT   /OTHERWISE 1 (COLCT IS A MODULO 8 COUNTER)
+OUTCMX,        TAD     SCHAR   /GET CONTROL CHAR TO TYPE
+       PUTT            /AND TYPE IT - WE WILL NOW FILL WITH NULLS
+       RELOC
+       PAGE
+\f/     Q-OVERLAY
+
+       *5600
+
+       RELOC 3200
+
+       IOVRLC
+QOVRLY,        0
+       EOVRLC
+       XOVRLC
+       FOVRLC
+
+/O COMMAND
+
+CHROO, TAD     SCANP   /O COMMAND
+       DCA     COOQ    /SAVE CURRENT SCAN POINTER
+       DCA     NFLG
+/???   DCA     QFLG    /QUOTED "O" COMMAND NOT ALLOWED
+       QSKP            /CHECK THAT THERE IS REALLY A STRING HERE
+                       /BECAUSE WE WILL NOT USE "SCAN" TO GET CHARACTERS
+                       /FROM THIS STRING IN THE SEARCH LOOP.
+       TAD     ITRST   /"O" ONLY SCANS FROM THE BEGINNING OF THE
+       DCA     SCANP   /CURRENT ITERATION LOOP.
+                       /(JUMPS BACKWARD OUT OF ITERATIONS ARE VERBOTEN)
+       SKPSET
+CS41,          41      /SEARCH FOR !
+       TAD     CS41
+       DCA     QUOTE   /SET QUOTE CHAR TO !
+       TAD     COOQ
+       TAD     QBASE
+       DCA     QP      /SET UP PTR TO ACCESS GOTO STRING
+COOC,  TAD     QP
+       GETQ            /GET CHAR FROM GOTO STRING
+       CIA
+       DCA     MQ      /SAVE IT
+       QUOTST          /GET CHAR FROM LABEL
+       JMP     COOB    /LABEL EXHAUSTED
+       TAD     MQ
+       SZA CLA         /MATCH?
+       JMP     CSMQ    /NO - REJOIN SEARCH ROUTINE FOR ANOTHER !
+       ISZ     QP
+       JMP     COOC
+COOB,  TAD     MQ
+       TAD     CAAM    /IS GOTO STRING EXHAUSTED TOO?
+       SZA CLA
+       JMP     CSMQ+1  /NO - REJOIN ! SEARCH ROUTINE
+       ENTRCE          /RE-ENABLE TRACE
+       JMP I   [IREST
+COOQ,  0
+\f/ROUTINE TO SKIP COMMANDS UP TO A CHARACTER
+
+SETSKP,        0               /SET UP TO SKIP COMMANDS
+       TAD I   SETSKP
+       DCA     SKPLST  /CHAR TO TRAP ON
+       NOTRCE          /DISABLE TRACE MODE
+CSML1, DCA     BRACKS  /INITIALIZE BRACKET LEVEL
+CSML,  SCANUP          /GET A COMMAND CHAR
+       SORT
+               SKPLST
+               SKPTAB-SKPLST
+       JMP     CSML    /NOTHING SPECIAL - KEEP GOING
+CSMD,  SCAN            /CLEAR OUT MODIFIER
+       JMP     CSML
+
+CSMU,  SCAN            /SKIP ^U COMMAND
+       SKP CLA         /GET RID OF Q-REG NUMBER
+CSMFS, QSKP            /FS COMMAND - SKIP FIRST STRING
+CSMQ,  QSKP            /SKIP OVER A QUOTED STRING
+CSMQ1, PUSHJ
+               IREST   /FIX UP QUOTE CHAR
+       JMP     CSML    /KEEP GOING
+
+CSMY,  TAD     SCHAR   /SKIP ROUTINE FOR ^A AND !
+       DCA     QUOTE   /WE MUST SCAN UNTIL WE FIND
+       JMP     CSMQ    /A COPY OF THE COMMAND CHARACTER.
+\f      /SORT LIST FOR " COMMAND
+
+CNDLST,        103             /C
+       107             /G
+       116             /N
+       114             /L
+       105             /E
+       124             /T
+       123             /S
+       106             /F
+       125             /U
+       122             /R
+       74              /<
+       76              />
+
+CSME,  SCANUP          /FOUND E COMMAND
+       SORT
+               ESKLST          /LOOK FOR ER & EW & EG
+               ESKTAB-ESKLST   /USE CSMQ TO SKIP
+       JMP     CSML    /NO STRING
+
+CSMF,  SCAN            /F COMMAND - BETTER BE FOLLOWED BY S,N, OR _
+       CLA
+       JMP     CSMFS   /SCAN OFF TWO STRINGS
+
+CSMI,  ISZ     BRACKS  /INCREMENT BRACKET LEVEL
+       JMP     CSML
+
+CSMO,  STA
+       TAD     BRACKS  /DECREMENT BRACKET LEVEL
+       SPA
+       JMS I   (POPITR /IF WE EXIT <> POP OFF ITERATION VALUES
+       JMP     CSML1
+
+SKPRTN,        TAD     BRACKS  /WE HAVE FOUND THE DESIRED CHARACTER
+       SZA CLA         /BUT IF THE BRACKET LEVEL IS NON-ZERO,
+       JMP I   XSORTA1 /WE CANNOT ACCEPT IT - KEEP SORTING
+       JMP I   SETSKP  /EVERYTHING IS OK - RETURN
+
+BRACKS,        0
+\f/SORT LIST FOR SKIPPING OVER COMMANDS
+
+SKPLST,        0       /TRAP CHAR
+       41      /!
+       76      />
+       74      /<
+       42      /"
+       136     /^
+       100     /@
+       1       /^A
+       11      /TAB
+       25      /^U
+       36      /^^
+       105     /E
+       106     /F
+       111     /I
+       116     /N
+       117     /O
+       123     /S
+       137     /_
+       121     /Q
+       125     /U
+       130     /X
+       107     /G
+       115     /M
+       45      /%
+\f/     SKIP LIST FOR E'S
+ESKLST,        122             /R
+       127             /W
+       102             /B
+       107             /G
+
+CSMA,  STA             /LIST TERMINATOR
+       JMP     CSMQ1   /FOUND @ - SET QUOTE FLAG AND CONTINUE
+
+
+XSORTA1,SORTA1
+       PAGE
+\f/DISPATCH TABLE FOR SKIPPING OVER COMMANDS:
+
+SKPTAB,        SKPRTN  /DESIRED CHARACTER - RETURN
+       CSMY    /!
+       CSMO    />
+       CSMI    /<
+       CNDI    /"
+       CSMC    /^
+       CSMA    /@
+       CSMY    /^A
+       CSMQ    /TAB
+       CSMU    /^U
+       CSMD    /^^
+       CSME    /E
+       CSMF    /F
+ESKTAB,        CSMQ    /I OR ER
+       CSMQ    /N OR EW
+       CSMQ    /O OR EB
+       CSMQ    /S OR EG
+       CSMQ    /_
+       CSMD    /Q
+       CSMD    /U
+       CSMD    /X
+       CSMD    /G
+       CSMD    /M
+       CSMD    /%
+\fSEMO, SKPSET          /PLOD THRU
+               76      /LOOKING FOR >
+       ENTRCE          /IT'S THE RIGHT ONE, TURN TRACE BACK ON
+       JMP I ZCGSG
+ZCGSG, CGSG
+
+CNDTAB,        TSTSEP          /LEGAL CONSTITUENT OF SYMBOL FOR ASSEMBLER
+       SZL SNA CLA     /GT 0
+       SNA CLA         /NE 0
+       SNL CLA         /LT 0
+       SZA CLA         /EQ 0
+       SNL CLA         /TRUE
+       SNL CLA         /SUCCESSFUL
+       SZA CLA         /FALSE
+       SZA CLA         /UNSUCCESSFUL
+       TSTSEP          /ALPHANUMERIC
+       SNL CLA         /<
+       SZL SNA CLA     />
+
+/THIS TABLE PRESUPPOSES 1000000000000 IS ILLEGAL
+\f      /COMMANDS " AND '
+
+CDBQO, NCHK            /COMMAND "
+ERR23, ERR             /NO NUMBER TO TEST
+       SCANUP
+       SORT
+               CNDLST
+               CNDTAB-CNDLST
+       SMA             /CHECK THAT CHAR WAS TRANSLATED
+ERR20, ERR             /NO - NO SUCH TEST
+       DCA     SKIP    /STORE TEST INSTRUCTION
+       GETNUM          /PERFORM THE TEST
+SKIP,  HLT             /TEST SKIPS IF TRUE
+       SKP CLA
+       POPJ            /CONDITION SATISFIED
+       STA             /NOT SATISFIED
+       DCA     SKIP    /BEGINNING SKIPPING COMMANDS
+       SKPSET          /CALL SKIPPING ROUTINE
+               47      /FIND A '
+       ISZ     SKIP    /FOUND A '
+       RESORT          /NEED ANOTHER: BACK TO CSML
+       ENTRCE          /RE-ENABLE TRACE
+       JMP I   [IREST  /COMMAND ' NO ACTION TO TAKE
+
+CNDI,  SCAN            /HIT ANOTHER "
+       STA             /SO SKIP MATCHING '
+       TAD     SKIP
+       DCA     SKIP
+       RESORT          /GO BACK TO CSML
+\f/COMMANDS ; AND >
+
+CSEMO, TAD     ITRST   /COMMAND ; - ALSO HERE ON FAILING NON-COLON SEARCH
+       SNA CLA
+ERR09, ERR             /IF NOT IN ITERATION
+CSEM2, TAD     NLINK
+       SNA CLA
+       NCHK
+       JMP I   (ZRON   /NO NUMBER - IGNORE IT, WE DID IT ALREADY
+       JMP     SEMO    /SEARCH FOR >
+
+CHGTO, TAD     ITRCNT
+       SNA CLA
+       JMP     CGTC    /0 MEANS INFINITY
+       ISZ     ITRCNT  /LOOK FOR COUNT EXHAUSTED
+       JMP     CGTC    /NO, CONTINUE
+CGSG,  JMS     POPITR  /POP UP OLD ITERATION PARAMETERS
+       JMP I   [IREST
+CGTC,  TAD     ITRST
+       SNA
+ERR10, ERR             /IF NOT IN ITERATION
+       JMP I   (ZROSPN /BACK TO ROOT
+
+POPITR,        0
+       CLA IAC         /** AC NOT NECESSARILY 0 ON ENTRY
+       POPL
+               ITRCNT
+               ITRST
+       JMP I   POPITR
+\fCHLTO,        MTWO            /COMMAND <
+       PUSHL
+               ITRST
+               ITRCNT
+       TAD     NFLG
+       SNA CLA         /WAS A NUMBER SPECIFIED?
+       JMP     INF     /NO, ASSUME INFINITY
+       TAD     NLINK
+       SNA CLA
+       TAD     N
+       SNA
+       JMP     SEMO    /0 OR NEGATIVE MEANS SKIP ITERATION
+       CIA             /MAKE NEGATIVE
+INF,   DCA     ITRCNT  /SET UP TERMINATION
+       TAD     SCANP   /SAVE CURRENT SCAN PNTR
+       DCA     ITRST   /ALWAYS .GE. 1 IN ITERATION
+       DCA     NFLG    /CLEAR NUMBER FLAG
+       POPJ
+
+/SHOULD WE TREAT 0<> SPECIAL?
+       PAGE
+       RELOC
+\f/     ERROR-OVERLAY
+
+       *6200
+
+       RELOC 3200
+
+       IOVRLC
+       QOVRLC
+EOVRLY,        0
+       XOVRLC
+       FOVRLC
+
+ERRYY, DCA     N
+       TAD     (ERLIST-1
+       DCA     XR
+ERLOOP,        ISZ     N       /BUMP ERROR NUMBER
+       TAD I   XR
+       SZA             /END OF LIST?
+       TAD I   (ERRXX  /NO - CHECK FOR MATCH
+Z40,   SZA CLA         /FOUND WHAT WE WANTED?
+       JMP     ERLOOP  /NO - KEEP LOOKING
+       TAD     N
+       CLL RAL         /MULTIPLY BY 2
+       TAD     (ERBASE-2
+       DCA     PTR
+       TAD I   PTR     /GET FIRST WORD OF ERR MSG
+       SPA CLA
+       JMP     CTCT    /^C TRAP
+ERL2,  TAD     [77
+       TYPE
+       TAD I   PTR
+       RTR
+       RTR
+       RTR
+       JMS I   (SIXTYP /TYPE LEFT CHARACTER
+       TAD I   PTR
+       JMS I   (SIXTYP /TYPE RIGHT CHARACTER
+       ISZ     PTR
+       TAD I   PTR
+       RTR
+       RTR
+       RTR
+       JMS I   (SIXTYP /TYPE 3RD CHARACTER
+       CLA IAC
+       AND I   (EHFLAG
+       SZA CLA
+       JMP I   (ERRRET
+       MTHREE
+       TAD     MEMSIZ
+       SPA CLA
+       JMP I   (ERRRET /NO LONG ERROR MESSAGE UNLESS 16K OOR MORE
+       TAD     Z40     /TYPE EXTENDED ERROR MESSAGE
+       TYPE
+       TAD     Z40
+       TYPE
+/      TAD     Z40
+/      TYPE
+       TAD     N
+       TAD     (XERBAS-1
+       DCA     PTR     /GET PTR TO PTR TO ERROR MSG
+       CDF     30
+       TAD I   PTR     /GET PTR TO ERROR MESSAGE
+       DCA     PTR
+XLUP,  TAD I   PTR
+       CDF     0
+       SNA
+       JMP I   (ERRRET
+       SPA
+       JMS     NEGCHR  /NEGATIVE CHAR IS FLAG FOR ERRONEOUS CHARACTER
+       PUTT
+       ISZ     PTR
+       CDF     30
+       JMP     XLUP
+
+CTCT,  KRS             /CTRL/C ERROR MESSAGE
+       AND     [177    /ISOLATE ^C OR ^P INTO 7-BIT
+       TYPE            /READ CTRL/C FROM BUFFER
+       CRLF            /ECHO IT AND CR LF
+       TAD I   [QPNTR
+       SZA CLA
+       JMP     ERL2    /PRINT XAB ERROR MESSAGE
+/      MTHREE
+/      TAD     CHAR    /LOOK AT PREVIOUS CHARACTER
+/      SZA CLA
+/      JMP I   (ERRRET /ONE ^C DO NOTHING
+       JMP I   (CTLC   /TWO ^C'S, ABORT
+\fNEGCHR,       0
+       CLA
+       TAD     LASTC
+       SORT
+               CACR
+               ERPTAB-CACR
+       SPA
+       DCA     LASTC   /SAVE $ FOR ALTMODE
+       CLA
+       TAD     (""
+       PUTT
+       TAD     LASTC
+       AND     [7740
+       SNA CLA
+       JMS     WOW     /USE CARRET FORM FOR CONTROL CHARS
+       TAD     LASTC   /AC MAY BE NON-0
+       PUTT
+       TAD     (""
+       JMP I   NEGCHR
+
+WOW,   0
+       TAD     ("^
+       PUTT
+       TAD     [100
+       JMP I   WOW
+
+SPY,   TAD     LASTC
+       TAD     (-11+CNVTAB
+       DCA     WOW
+       TAD     ("<
+       PUTT
+       TAD I   WOW
+       RTR
+       RTR
+       RTR
+       JMS I   (SIXTYP
+       TAD I   WOW
+       JMS I   (SIXTYP
+       TAD     (">
+       JMP I   NEGCHR
+\fPTR,  0
+
+       PAGE
+\fSIXTYP,       0
+       AND     [137    /IGNORE SIGN BIT OF BYTE
+       TAD     [40
+       AND     [77
+       TAD     [40
+       PUTT
+       JMP I   SIXTYP
+\fERLIST,       -ERR01-1        /LIST OF POINTERS TO ALL POSSIBLE
+       -ERR02-1        /CALLS TO THE ERROR ROUTINE.
+       -ERR03-1
+       -ERR04-1
+       -ERR05-1
+       -ERR06-1
+       -ERR07-1
+       -ERR08-1
+       -ERR09-1
+       -ERR10-1
+       -ERR11-1
+       -ERR12-1
+       -ERR13-1
+       -ERR14-1
+       -ERR15-1
+       -ERR16-1
+       -ERR17-1
+       -ERR18-1
+       -ERR19-1
+       -ERR20-1
+       -ERR21-1
+       -ERR22-1
+       -ERR23-1
+       -ERR24-1
+       -ERR25-1
+       -ERR26-1
+       -ERR27-1
+ERR28, -ERR28-1
+       -ERR29-1
+       -ERR30-1
+       -ERR31-1
+       -ERR32-1
+       -ERR33-1
+       -ERR34-1
+       -ERR35-1
+       0               /ERROR 36 - UNLABELED ERROR - NAMELY "JMS I OUTR"
+                       /** MUST BE LAST ERROR MESSAGE
+\fERBASE,       TEXT    /ILL/   /1      ILLEGAL COMMAND
+       TEXT    /UTC/   /2      UNTERMINATED COMMAND
+       TEXT    /IQN/   /3      ILLEGAL Q-REGISTER NAME
+       TEXT    /PDO/   /4      INTERNAL PUSH DOWN OVERFLOW (RECURSION)
+       TEXT    /MEM/   /5      MEMORY OVERFLOW
+       TEXT    /STL/   /6      SEARCH STRING TOO LONG
+       TEXT    /ARG/   /7      ARGUMENT ERROR
+       TEXT    /IFN/   /8      ILLEGAL FILE NAME
+       TEXT    /SNI/   /9      SEMICOLON NOT IN ITERATION
+       TEXT    /BNI/   /10     CLOSE BRACKET NOT IN ITERATION
+       TEXT    /POP/   /11     POINTER OFF PAGE
+       TEXT    /QMO/   /12     Q-REGISTER MEMORY OVERFLOW
+       TEXT    /UTM/   /13     UNTERMINATED MACRO
+       TEXT    /OUT/   /14     OUTPUT ERROR
+       TEXT    /INP/   /15     INPUT ERROR
+       TEXT    /FER/   /16     FILE ERROR
+       TEXT    /FUL/   /17     OUTPUT COMMAND WOULD HAVE OVERFLOWED
+       TEXT    /NAY/   /18     NEGATIVE ARGUMENT TO Y
+       TEXT    /IEC/   /19     ILLEGAL E CHARACTER
+       TEXT    /IQC/   /20     ILLEGAL " CHARACTER
+       TEXT    /NAE/   /21     NO ARGUMENT BEFORE =
+       TEXT    /NAU/   /22     NO ARGUMENT BEFORE U
+       TEXT    /NAQ/   /23     NO ARGUMENT BEFORE "
+       TEXT    /SRH/   /24     FAILING SEARCH
+       TEXT    /NAP/   /25.    NEGATIVE OR 0 ARGUMENT TO P
+       TEXT    /NAC/   /26.    NEGATIVE ARGUMENT TO ,
+       TEXT    /NYI/   /27.    ^W NOT IMPLEMENTED
+       TEXT    /DMY/   /28.    NOT USED
+       TEXT    /NAS/   /29.    NEGATIVE OR 0 COUNT TO SEARCH
+       TEXT    /WLO/   /30.    CAN'T WRITE OUT ERROR MESSAGE OVERLAY
+       TEXT    /IFC/   /31.    ILLEGAL F CHARACTER
+       TEXT    /YCA/   /32.    Y COMMAND ABORTED
+       TEXT    /CCL/   /33.    CCL NOT FOUND OR EG TOO BIG
+/      TEXT    /XAB/   /34.    EXECUTION ABORTED BY ^C
+       7001;0200
+       TEXT    /NYI/   /35.    ^V NOT IMPLEMENTED
+       TEXT    /NFO/   /36.    NO FILE FOR OUTPUT
+\fCNVTAB,       TEXT    /HTLFVTFFCR/
+       *.-1
+ERPTAB,        SPY             /CR
+       SPY             /HT
+       4044            /$
+       SPY             /FF
+       SPY             /VT
+       SPY             /LF
+       PAGE
+       RELOC
+\f/     X-OVERLAY
+
+       *6600
+
+       RELOC 3200
+
+       IOVRLC
+       QOVRLC
+       EOVRLC
+XOVRLY,        0
+       FOVRLC
+
+CHREX, TAD I   (TYI
+       SORT
+               XLIS
+               XTAB-XLIS
+       ERR             /CAN'T HAPPEN
+
+XLIS,  103             /EC
+       106             /EF
+       107             /EG
+       113             /EK
+       130             /EX
+
+       /"EX" AND "EC" COMMANDS
+EXIT,  PUSHJ           /"EX" COMMAND
+               EXITC   /CLOSE OUT THE FILES
+       JMP I   (CTLC   /AND GO AWAY
+
+EXITC, TAD     OUTR    /"EC" COMMAND
+       CIA             /CHECK FOR OPEN OUTPUT FILE
+       TAD     ERROR
+       SNA CLA
+       POPJ            /NOPE, EXIT ALREADY
+EXLOOP,        JMS I   [NXTBUF /GET NEXT BUFFER
+       TAD     REND
+       CIA
+       TAD     ZZ      /CHECK FOR END-OF-FILE AND
+       SZA CLA         /TEXT BUFFER EMPTY
+       JMP     EXLOOP  /NOT YET
+                       /ENDFILE PROCESSOR
+ENDFIL,        TAD     OCRCNT
+       CMA             /REDUCE THE OUTPUT DOUBLEWORD COUNT
+       AND     [177    /TO REFLECT ONLY THOSE WORDS REMAINING
+       CMA             /UNTIL THE NEXT BLOCK BOUNDARY
+       DCA     OCRCNT
+       TAD     (7200   /USED TO BE 'DV7200'
+       DCA     MQ      /SET COUNTER FOR ONE BLOCK WORTH OF STUFF
+       TAD     (32     /^Z END-OF-FILE
+       OUTPUT
+       ISZ     MQ
+       JMP     .-2     /FILL AT LEAST THE CURRENT BUFFER AND OUTPUT IT
+       TAD     ODEV    /MAKE SURE THE USR KNOWS THE HANDLER
+       TAD     (OSHNDT-1       /*K* - POINTER INTO
+       DCA     TY      / OS/8 DEVICE RESIDENCY TABLE
+       CDF 10
+       TAD     OUTHND
+       DCA I   TY      /MARK THE HANDLER AS IN CORE
+       JMS I   (GETUSR /LOCK THE USR INTO CORE
+       TAD     EBFLG   /IS THIS AN EDIT BACKUP?
+       SNA CLA
+       JMP I   (NORMAL /NO, JUST CLOSE FILE
+       TAD I   (OCNT-1 /YES, LOOKUP OLD FILE TO CHANGE NAME
+       DCA     TY-1
+       CIF 10
+       TAD     ODEV    /INPUT AND OUTPUT ARE ON SAME DEVICE
+       JMS I   [200
+       2
+       OUNAM
+TY,    0               /USELESS LENGTH--USE IT FOR TEMPORARY
+       JMP I   (NORMAL /ERROR-JUST CLOSE FILE AND DON'T TELL ANYBODY
+       CDF 10          /ALL THAT WAS JUST TO GET THE DIRECTORY IN CORE
+       STA             /SO WE COULD FIDDLE WITH IT
+       TAD I   (17     /FORM POINTER TO DIRECTORY ENTRY
+       TAD I   (1404
+       DCA     TY
+       TAD     (213    /CHANGE EXTENSION TO .BK
+       DCA I   TY
+       TAD I   Z7      /DIRECTORY BLOCK IT CAME FROM
+       AND     Z7
+       DCA     ACI
+       CDF 0
+       JMS I   OUTHND
+       4210            /WRITE IT BACK OUT
+       1400
+ACI,   0
+       JMP     .-4     /ERROR! KEEP TRYING-THIS CAN BLOW A DIRECTORY
+       JMP I   (NORMAL
+\fXTAB, EXITC           /EC
+       ENDFIL          /EF
+       EXITGO          /EG
+       EKILL           /EK
+       EXIT            /EX
+\fEKILL,        TAD     ERROR
+       DCA     OUTR
+       POPJ
+       PAGE
+\fEXITGO,       PUSHJ           /DO AN EC TO CLOSE OUT FILE
+               EXITC
+       QCHK            /ALLOW @
+       DCA     STOCD   /MAKE REUSABLE IN CASE .START
+       TAD     (7600
+       DCA     CDPTR
+       TAD     (-47    /47 ENTRIES IN CD TABLE
+       DCA     EGCNT
+EG1,   QUOTST
+       JMP     EG2
+       TAD     [200    /TURN ON PARITY BIT FOR OS/8
+       JMS     STOCD
+       JMP     EG1
+
+STOCD, 0
+       ISZ     EGCNT
+       SKP
+ERR33, ERR             /EG ARG TOO BIG
+       CDF     10
+       DCA I   CDPTR
+       CDF     0
+       ISZ     CDPTR
+       JMP I   STOCD
+
+CDPTR, 7600
+EGCNT, -41
+
+EG2,   TAD     STOCD
+       SNA CLA         /ANYTHING IS ARG
+       JMP     REGEG   /NO
+       JMS     STOCD   /STORE 0 AT END
+       JMS I   (GETUSR
+       TAD     (CCLNAM
+       DCA     ARG1            /JUST IN CASE PREVIOUS EG FAILED
+       CLA IAC         /SYS
+       CIF 10
+       JMS I   [200
+       2               /LOOKUP
+ARG1,  CCLNAM
+       0
+       JMP     CCLERR
+       TAD     (2001
+       DCA I   (JSBITS /KEEP USR IN CORE
+       TAD     ARG1
+       DCA     CHNBLK
+       CIF 10
+       JMS I   [200
+       6               /CHAIN
+CHNBLK,        0
+\fCCLERR,       PUSHJ
+               ECDISM
+       JMP     ERR33
+
+CCLNAM,        FILENAME CCL.SV
+\fREGEG,                        /EDIT AND GO - A CCL SPECIAL
+       JMS I   (7607   /CALL THE OS/8 SYSTEM HANDLER
+       0200            /TO READ IN THE CCL OVERLAY
+       CCLADR
+       CCLOVL
+       JMP     ERR33   /ERROR ON SYSTEM DEVICE!
+       JMP I   .+1     /GO TO THE OVERLAY
+       CCLOST          /AT OUR "SPECIAL" LOCATION
+       RELOC
+\f/     F-OVERLAY
+
+       *7200
+
+       RELOC 3200
+
+       IOVRLC
+       QOVRLC
+       EOVRLC
+       XOVRLC
+FOVRLY,        0
+
+CHRED, TAD I   (TYI
+       SORT
+               DLIS
+               DTAB2-DLIS      /CHECK FOR LEGALITY
+ERR19, ERR             /BAD CHAR AFTER E
+DTOK,  TAD I   (TYI
+       SORT
+               DLIS
+               DTAB-DLIS
+       DCA     XXFLAG
+       NCHK            /ANY ARGUMENT?
+       JMP     XXNO    /NO, RETURN VALUE
+       TAD     N       /YES
+       DCA I   XXFLAG  /SET NEW VALUE
+       TAD     XXFLAG
+       TAD     (-EDFLAG+XXSUBS
+       DCA     XXSUB
+       TAD I   XXSUB
+       DCA     XXSUB
+       JMS I   XXSUB   /CALL IT
+       POPJ            /RETURN
+XXNO,  TAD I   XXFLAG  /GET VALUE
+       JMP I   (NNEW13 /MAKE NEW 13-BIT VALUE
+
+DLIS,  104             /ED
+       110             /EH
+       117             /EO
+       123             /ES
+       124             /ET
+       125             /EU
+DTAB,  EDFLAG          /MUST BE NEGATIVE
+       EHFLAG          /TO CAUSE SUBSTITUTION
+       EOFLAG
+       ESFLAG
+       ETFLAG
+       EUFLAG
+\fXXFLAG,       0               /POINTS TO FLAG IN MEMORY ABOVE 4000
+
+DTAB2, DTOK
+       DTOK
+       DTOK
+       DTOK
+       DTOK
+       DTOK
+
+XXSUB, 0
+\f/     MASK;SKIP;LOC;VALUE IF SKIPS;VALUE IF NO SKIP
+
+EUSUB, 0
+       JMS     FIXUP
+       7777;   SMA CLA;        EU1;    CLA;    SNA CLA
+       7777;   SPA SNA CLA;    EU2;    TAD [40;NOP
+       0
+       JMP I   EUSUB
+
+ETSUB, 0
+       JMS     FIXUP
+       1;      SNA CLA;        KTYPE;  PUTT;   TYPE
+       1;      SNA CLA;        ET1;    PUTT;   TYPE
+       10;     SNA CLA;        ET8;    CLA;    TYPE
+       0
+       JMP I   ETSUB
+
+\fLOC,  0
+MASK,  0
+
+FIXUP, 0
+FIXLUP,        TAD I   FIXUP
+       SNA
+       JMP I   FIXUP   /DONE, RETURN TO 0
+       DCA     MASK    /SAVE MASK
+       ISZ     FIXUP
+       TAD I   FIXUP
+       DCA     SKIPY   /SAVE SKIP CONDITION
+       ISZ     FIXUP
+       TAD I   FIXUP
+       DCA     LOC     /SAVE LOC TO CHANGE
+       ISZ     FIXUP
+       TAD I   XXFLAG  /LOOK AT FLAG
+       AND     MASK    /'AND' WITH MASK
+SKIPY, HLT
+       JMP     SKPF
+       TAD I   FIXUP
+       DCA I   LOC
+       ISZ     FIXUP
+SKPT,  ISZ     FIXUP
+       JMP     FIXLUP
+SKPF,  ISZ     FIXUP
+       TAD I   FIXUP
+       DCA I   LOC
+       JMP     SKPT
+\fCTLUO,        QREF            /COMMAND ^U
+       QSKP            /COUNT UP STRING
+       TAD     OSCANP
+       CMA
+       TAD     SCANP   /LENGTH OF STRING
+/
+/      *** PROHIBIT STRING > 2047 CHARS
+/
+       ADJQ            /ADJUST Q-REGISTERS AND SET NEW LENGTH
+       TAD     OSCANP  /RESET SCAN POINTER
+       DCA     SCANP
+       DCA     NFLG
+       NOTRCE
+CCUB,  QUOTST
+       JMP     CTLUND
+       QPUT
+       JMP     CCUB
+CTLUND,        ENTRCE
+       JMP I   [IREST
+       PAGE
+\f/NUMERICAL OUTPUT ROUTINE
+
+ZEROD, 0
+       DCA     ZERFLG  /INITIALIZE "LEADING ZEROS" FLAG
+       TAD I   ZEROD
+       ISZ     ZEROD
+       DCA     OUTDEV  /SAVE OUTPUT ROUTINE ADDRESS
+       TAD     NLINK   /POS OR NEGATIVE?
+       SNA CLA
+       JMP     ZER2    /POSITIVE
+       TAD     RADIX
+       TAD     (-ORAD
+       SNA CLA
+       JMP     PUTSGN  /OCTAL
+       TAD     N       /DECIMAL
+       CIA
+       DCA     N       /NEGATE
+       SKP
+PUTSGN,        TAD     ["1-"-
+       TAD     ("-
+       JMS I   OUTDEV  /OUTPUT MINUS SIGN
+ZER2,  MTHREE
+       DCA     ZCOUNT  /ITERATION COUNT
+       TAD     RADIX
+       DCA     RXR
+ZDIGIT,        ISZ     RXR
+       TAD I   RXR
+       DCA     DIV1    /GET DIVISOR
+       TAD     N
+       MQLDVI          /DIVIDE BY A POWER OF THE BASE
+DIV1,  0
+       TAD     ZERFLG
+       SNA
+       JMP     LZ      /IGNORE LEADING ZEROS
+       TAD     (60
+       JMS I   OUTDEV
+       STL RAR
+       DCA     ZERFLG  /SET LEADING ZEROS FLAG
+LZ,    TAD     DVT1    /GET REMAINDER
+       DCA     N
+       ISZ     ZCOUNT  /GO AROUND AGAIN?
+       JMP     ZDIGIT  /WHY NOT?
+       TAD     N
+       TAD     (60
+       JMS I   OUTDEV  /OUTPUT LAST DIGIT NO MATTER WHAT
+       JMP I   ZEROD
+
+OUTDEV,        0               /WHERE WE'RE SENDING THE DIGITS
+ZERFLG,        0
+ZCOUNT,        0
+RXR,   0
+\f/COMMANDS = AND \
+
+/COMMANDS = AND \ - NUMERICAL OUTPUT
+
+CEQLO, NCHK            /COMMAND =
+ERR21, ERR             /NO NUMBER
+       TAD     RADIX
+       DCA     RADTMP
+       JMS I   (POKE   /LOOK AHEAD ONE CHARACTER
+       TAD     (-75    /CHECK FOR = SIGN
+       SZA CLA
+       JMP     SETRAD  /SINGLE =
+       SCAN            /DOUBLE = (PASS UP SECOND ONE)
+       SKP CLA         /CLEAR AC
+SETRAD,        TAD     [4
+       TAD     (ORAD
+       DCA     RADIX   /SET OCTAL RADIX TEMPORARILY
+       JMS     ZEROD
+       TPUT
+       TAD     RADTMP
+       DCA     RADIX   /RESTORE ORIGINAL RADIX
+       ISZ     CLNF    /: SEEN?
+       CRLF            /NO, END WITH CRLF
+       DCA     CLNF
+       POPJ
+
+CBSLO, NCHK            /COMMAND \
+       JMP     CBSN
+       JMS     ZEROD
+       UPOC
+       POPJ
+
+RADTMP,        0
+\fCBSN, PUSHJ
+               NMBR2   /INITIALIZE RESULT TO 0
+       JMS     PTCH
+       TAD I   P
+       AND     [377    /GET CURRENT CHARACTER
+       CDF 0
+       TAD     (-55    /CHECK FOR MINUS SIGN
+       SZA
+       JMP     .+3     /NOT MINUS
+       PUSHJ
+               CMIN    /RECORD MINUS SIGN
+       CIA
+       CLL RTR
+       SNA CLA         /CHECK FOR PLUS SIGN
+CBSNP, ISZ     P       /BUMP POINTER PAST SIGN
+       JMS     PTCH
+       TAD I   P       /GET A CHAR
+       AND     [377
+       CDF 0
+       TAD     (-72
+       CLL
+       TAD     CALF
+       SNL             /IS IT A DIGIT?
+       POPJ            /NO
+       PUSHJ
+               NMBR2   /YES - ACCUMULATE IT
+       JMP     CBSNP   /AND LOOP
+\fPTCH, 0
+       TAD P           /V3C
+       STL CIA         /CHECK FOR END OF BUFFER
+       TAD ZZ
+       SZL SNA CLA
+       POPJ
+       CDF 10
+       JMP I PTCH
+
+XXSUBS,        EDSUB
+       EHSUB
+       EOSUB
+       ESSUB
+       ETSUB
+       EUSUB
+/      CXSUB
+
+/CXSUB,
+EDSUB,
+EHSUB,
+ESSUB,
+EOSUB, 0
+       JMP I   EOSUB
+       PAGE
+       RELOC
+\f      FIELD 1
+
+       *4400
+
+XERBAS,        XER1
+       XER2
+       XER3
+       XER4
+       XER5
+       XER6
+       XER7
+       XER8
+       XER9
+       XER10
+       XER11
+       XER12
+       XER13
+       XER14
+       XER15
+       XER16
+       XER17
+       XER18
+       XER19
+       XER20
+       XER21
+       XER22
+       XER23
+       XER24
+       XER25
+       XER26
+       XER27
+       XER28
+       XER29
+       XER30
+       XER31
+       XER32
+       XER33
+       XER34
+       XER35
+       XER36
+\fXER1,
+"I;"l;"l;"e;"g;"a;"l;" ;"C;"o;"m;"m;"a;"n;"d;" ;4000;0
+XER2,
+"U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"C;"o;"m;"m;"a;"n;"d;0
+XER3,
+"I;"l;"l;"e;"g;"a;"l;" ;"Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"N;"a;"m;"e;" ;4000;0
+XER4,
+"I;"n;"t;"e;"r;"n;"a;"l;" ;"P;"u;"s;"h;" ;"D;"o;"w;"n;" ;"O;"v;"e;"r
+"f;"l;"o;"w;0
+XER5,
+"S;"t;"o;"r;"a;"g;"e;" ;"C;"a;"p;"a;"c;"i;"t;"y;" ;"E;"x;"c;"e;"e;"d;"e;"d;0
+XER6,
+"S;"e;"a;"r;"c;"h;" ;"S;"t;"r;"i;"n;"g;" ;"t;"o;"o;" ;"L;"o;"n;"g;0
+XER7,
+"I;"m;"p;"r;"o;"p;"e;"r;" ;"A;"r;"g;"u;"m;"e;"n;"t;"s;0
+XER8,
+"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
+" ;"i;"n;" ;"F;"i;"l;"e;"n;"a;"m;"e;0
+XER9,
+";;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0
+XER10,
+">;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0
+XER11,
+"A;"t;"t;"e;"m;"p;"t;" ;"t;"o;" ;"M;"o;"v;"e;" ;"P;"o;"i;"n;"t;"e;"r
+" ;"O;"f;"f;" ;"P;"a;"g;"e;0
+XER12,
+"Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"M;"e;"m;"o;"r;"y;" ;"O;"v;"e;"r;"f;"l;"o;"w;0
+XER13,
+"U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"M;"a;"c;"r;"o;0
+XER14,
+"O;"u;"t;"p;"u;"t;" ;"E;"r;"r;"o;"r;0
+XER15,
+"I;"n;"p;"u;"t;" ;"E;"r;"r;"o;"r;0
+XER16,
+"F;"i;"l;"e;" ;"E;"r;"r;"o;"r;0
+XER17,
+"O;"u;"t;"p;"u;"t;" ;"C;"o;"m;"m;"a;"n;"d;" ;"w;"o;"u;"l;"d;" ;"h;"a;"v;"e
+" ;"O;"v;"e;"r;"f;"l;"o;"w;"e;"d;0
+XER18,
+"N;"u;"m;"e;"r;"i;"c;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"Y;0
+XER19,
+"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
+" ;"a;"f;"t;"e;"r;" ;"E;0
+XER20,
+"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
+" ;"a;"f;"t;"e;"r;" ;"";0
+XER21,
+"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"=;0
+XER22,
+"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"U;0
+XER23,
+"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"q;"u;"o;"t;"e;0
+XER24,
+"S;"e;"a;"r;"c;"h;" ;"f;"a;"i;"l;"e;"d;0
+XER25,
+"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o
+" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"P;0
+XER26,
+"N;"e;"g;"a;"t;"i;"v;"e;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;",;0
+XER27,
+"C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t
+" ;"I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177 
+"[;"u;"s;"e;" ;"W;" ;"f;"o;"r;" ;"W;"a;"t;"c;"h;" ;"C;"o;"m;"m;"a;"n;"d;"];0
+/XER28,
+/"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;" 
+/"I;"t;"e;"r;"a;"t;"i;"o;"n;" ;"C;"o;"u;"n;"t;0
+XER28,
+0
+XER29,
+"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;" 
+"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"S;0
+XER30,
+"C;"a;"n;"n;"o;"t;" ;"W;"r;"i;"t;"e;" ;"O;"u;"t;" ;"E;"r;"r;"o;"r
+" ;"M;"e;"s;"s;"a;"g;"e;" ;"O;"v;"e;"r;"l;"a;"y;0
+XER31,
+"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
+" ;"a;"f;"t;"e;"r;" ;"F;0
+XER32,
+"Y;" ;"C;"o;"m;"m;"a;"n;"d;" ;"A;"b;"o;"r;"t;"e;"d;0
+XER33,
+"C;"C;"L;".;"S;"V;" ;"n;"o;"t;" ;"f;"o;"u;"n;"d;" ;"o;"r;" 
+"E;"G;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;"o;" ;"b;"i;"g;0
+XER34,
+"E;"x;"e;"c;"u;"t;"i;"o;"n;" ;"a;"b;"o;"r;"t;"e;"d;0
+XER35,
+"C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t;" 
+"I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177
+"[;"u;"s;"e;" ;"E;"O;" ;"f;"o;"r
+" ;"V;"e;"r;"s;"i;"o;"n;" ;"n;"u;"m;"b;"e;"r;"];0
+XER36,
+"N;"o;" ;"F;"i;"l;"e;" ;"f;"o;"r;" ;"O;"u;"t;"p;"u;"t;0
+       PAGE
+\fCOREAD,       0
+       ISZ     COREAD
+       TAD I   COREAD  /GET BLOCK #
+       AND     CO7
+       CLL RTR
+       RTR
+       RAR             /MULTIPLY BY 400
+       TAD     KMEM
+       DCA     FLO
+       TAD     M400
+       DCA     FLCNT
+       TAD     K3200
+       DCA     FTO
+FLOO,  CDF     30
+       TAD I   FLO
+       CDF     0
+       DCA I   FTO
+       ISZ     FLO
+       ISZ     FTO
+       ISZ     FLCNT
+       JMP     FLOO
+       ISZ     COREAD
+       CIF CDF 0
+       JMP I   COREAD
+
+FLCNT, 0
+CO7,   7
+M400,  -400
+K3200, 3200
+KMEM,  MEMLOC
+FLO,   0
+FTO,   0
+COREND=.
+\fNEWERR,       RELOC OVREAD
+       CIF 30  /NEW CODE TO READ OVERLAY
+       JMS I .+1       /MUST BE 5 LOCS LONG
+       COREAD
+TMP,   0               /BLOCK #
+       NOP
+       RELOC
+       PAGE
+\f