EDIT
          IDENT  EDIT,FETS
          ABS 
          ENTRY  EDIT 
          ENTRY  RFL= 
          ENTRY  SSM= 
          SST 
          SYSCOM B1 
          TITLE  EDIT - TIME SHARING TEXT EDITOR. 
          SPACE  4
*COMMENT  EDIT - TIME SHARING TEXT EDITOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       EDIT - TIME SHARING TEXT EDITOR.
*         P. D. HAAS         72/07/10.
*         S. L. KSANDER.     75/09/10.
          SPACE  4
***       EDIT IS A TIME SHARING PACKAGE PROVIDING THE TERMINAL USER
*         WITH A SET OF COMMANDS BY WHICH TO CREATE, MODIFY,
*         OR OTHERWISE MANIPULATE A DATA FILE.
* 
*         THE BASIC STRUCTURE OF A COMMAND IS-
* 
*                COMMAND:/PHRASE/;N 
* 
*         A /PHRASE/ IS THE COMMAND COMPONENT WHICH SPECIFIES A 
*         CHARACTER STRING OF INTEREST. IT MAY BE OF A SIMPLE FORM
*         /P1/, OR COMPLEX /P1/,/P2/. THE PARAMETER N IS A SPECIFIC-
*         ATOR WHICH INDICATES THE NUMBER OF LINES THE COMMAND WILL 
*         AFFECT OR THE NUMBER OF TIMES THE COMMAND WILL ACT ON THE 
*         PRESENCE OF /PHRASE/. 
          SPACE  4
***       THE COMMAND FORMAT. 
* 
*         EDIT(FN=LFN,M=M,I=IFN,L=OFN)
*         OR
*         EDIT(LFN,M,IFN,OFN) 
* 
*         LFN    FILENAME TO BE EDITED. 
* 
*         M      MODE OF PROCESSING FOR CURRENT EDIT SESSION. 
*                IF EITHER THE DIRECTIVE INPUT FILE (I) OR THE
*                OUTPUT FILE (L) IS ASSIGNED TO A 
*                TIME-SHARING TERMINAL, A *TELEX* CALL IS 
*                MADE TO SET THE TERMINAL CONTROL FOR THE EDIT SESSION. 
* 
*                ASCII - FULL ASCII MODE. 
*                AS 
*                NORMAL - NORMAL CHARACTER MODE.
*                N
*                (DEFAULT=NORMAL) 
* 
*         IFN    FILENAME FROM WHICH TO READ INPUT DIRECTIVES.
*                (DEFAULT=INPUT)
* 
*         OFN    FILENAME ON WHICH EDITOR OUTPUT IS WRITTEN.
*                (DEFAULT=OUTPUT) 
          SPACE  4
***       TERMINAL INTERRUPT PROCESSING.  (*DISTC* CONTROL) 
* 
*         IF THE USER,S DIRECTIVE INPUT FILE (I) IS ASSIGNED TO 
*         A TIME-SHARING TERMINAL, *DISTC* PROCESSING IS ENABLED. 
*         IN ALL OTHER CASES, TERMINAL INPTERRUPTS WILL INTERRUPT 
*         OR TERMINATE THE EDIT SESSION.
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         * COMMAND ERROR.* - AN INCORRECT OR INVALID PARAMETER 
*         HAS BEEN DETECTED ON THE *EDIT* COMMAND.
* 
*         * RESERVED FILE NAME.* - FILE NAME SPECIFIED ON *EDIT*
*         COMMAND IS RESERVED FOR USE BY THE EDITOR (SCR, SCR1, 
*         SCR2, SCR3, SCR4), OR IS A DUPLICATE OF THE INPUT, OUTPUT,
*         OR TEXT FILE NAME.
          SPACE  4,10 
***       OUTPUT MESSAGES.
* 
*         * BEGIN TEXT EDITING.* - INFORMATIVE MESSAGE INDICATING 
*         EDITOR IS READY TO BEGIN ACCEPTING COMMANDS.
* 
*         * COMMAND CONTINUE?* - INQUIRY AS TO WHETHER OR NOT AN
*         INTERRUPTED COMMAND SHOULD CONTINUE TO BE PROCESSED.
* 
*         * DISREGARD PREVIOUS TEXT?* - AN INTERRUPT AS BEEN SENSED 
*         WHILE INPUTTING TEXT.  *YES* OR *Y* RESPONSE WILL DISCARD 
*         ALL ENTERED TEXT. *NO* OR *N* WILL PROCESS ALL TEXT ENTERED 
*         TO THIS POINT.  MESSAGE WILL BE RE-ISSUED IF AN INCORRECT 
*         RESPONSE IS GIVEN.  AN INTERRUPT AS A RESPONSE WILL SIMULATE
*         AN *END* COMMAND. 
* 
*         * EDIT FILE NOT IN WRITE MODE.* 
*         * DO YOU WISH TO CONTINUE?* - WARNING TO TERMINAL USER
*         THAT THE EDIT FILE IS NOT ASSIGNED IN WRITE MODE, AND 
*         INQUIRY AS TO WHETHER THE USER WISHES TO CONTINUE EDITING.
*         IF *NO* OR *N* RESPONSE IS ENTERED, *EDIT* WILL TERMINATE.
*         IF *YES* OR *Y* RESPONSE IS ENTERED, EDITING IS ALLOWED,
*         BUT *EDIT* WILL EVENTUALLY ABORT WITH AN ERROR DIAGNOSTIC 
*         SUCH AS *WRITE ON READ ONLY FILE*.
* 
*         * -END OF FILE- * - INFORMATIVE MESSAGE INDICATING THAT 
*         THE TEXT FILE IS POSITIONED AFTER THE LAST LINE OF TEXT,
*         OR THAT THE END OF TEXT WAS ENCOUNTERED DURING *LIST* OR
*         *FIND* COMMAND PROCESSING.
* 
*         * END TEXT EDITING.* - INFORMATIVE MESSAGE INDICATING 
*         TERMINATION OF EDIT SESSION.
* 
*         * ENTER TEXT.* - REQUESTS ENTRY OF NEW OR REPLACEMENT 
*         TEXT FOR *ADD(S)* OR *CHANGE(S)* COMMAND. 
* 
*         * ENTER TEXT FILE NAME.* - REQUESTS ENTRY OF EDIT FILE
*         NAME, SINCE IT WAS NOT SPECIFIED ON THE *EDIT* COMMAND. 
* 
*         * ENTER *YES* OR *NO*.* - PROMPTS THE USER TO ENTER A 
*         RESPONSE FOR A PREVIOUS ENQUIRY.
* 
*         * FILE AT LINE NUMBER N.* - INFORMATIVE MESSAGE INDICATING
*         THAT THE TEXT FILE IS CURRENTLY POSITIONED AT LINE NUMBER N.
* 
*         * INCORRECT COMMAND.* - ERROR MESSAGE INDICATING THE COMMAND
*         NAME ENTERED IS NOT A VALID COMMAND.
* 
*         * INCORRECT DELIMITER.* - ERROR MESSAGE INDICATING AN 
*         INCORRECT DELIMITER WAS USED IN RESPONSE TO THE *ENTER TEXT*
*         REQUEST FROM A NON-INTERACTIVE JOB.  THE *ADD(S)* OR
*         *CHANGES(S)* COMMAND IS TERMINATED. 
* 
*         * INCORRECT DELIMITER - REENTER TEXT.* - ERROR MESSAGE
*         INDICATING AN INCORRECT DELIMITER WAS USED IN RESPONSE TO 
*         THE *ENTER TEXT* REQUEST FROM AN INTERACTIVE JOB. 
*         REQUESTS REENTRY OF TEXT WITH A VALID DELIMITER.
* 
*         * INCORRECT FILE NAME.* - ERROR MESSAGE INDICATING FILE NAME
*         PASSED WITH *MERGE* COMMAND IS INCORRECT. 
* 
*         * IMPROPER TRUNCATION.* - ERROR MESSAGE INDICATING THE
*         LENGTH SPECIFIED ON THE *LENGTH;N* COMMAND IS GREATER 
*         THAN OR EQUAL TO THE PREVIOUS LENGTH SPECIFIED. 
* 
*         * INTERRUPT AT LINE N.* - INFORMATIVE MESSAGE INDICATING
*         THE CURRENT POSITION IN THE TEXT FILE OF AN INTERRUPTED 
*         COMMAND.
* 
*         * MERGE ERROR, SECONDARY FILE EMPTY.* - ERROR MESSAGE 
*         INDICATING THAT THE FILE TO BE MERGED WITH THE EDIT FILE
*         IS EMPTY, DOES NOT EXIST, OR IS NOT LOCAL TO THE JOB
*         (PERMANENT FILE MUST BE ATTACHED PRIOR TO EDIT SESSION).
* 
*         * PHRASE NOT FOUND.* - INFORMATIVE MESSAGE INDICATING THE 
*         SPECIFIED SEARCH STRING WAS NOT FOUND.
* 
*         * READY.* - INFORMATIVE MESSAGE INDICATING THE NEXT COMMAND 
*         CAN BE ENTERED. 
* 
*         * RESERVED FILE NAME.* - ERROR MESSAGE INDICATING THAT THE
*         FILE NAME SPECIFIED ON THE *MERGE* COMMAND IS RESERVED FOR
*         USE BY THE EDITOR (SCR, SCR1, SCR2, SCR3, SCR4), OR IS A
*         DUPLICATE OF THE INPUT, OUTPUT, OR TEXT FILE NAME.
* 
*         * TAB STOPS NONE.* - INFORMATIVE MESSAGE INDICATING NO TAB
*         STOPS ARE CURRENTLY ESTABLISHED.
* 
*         * TAB STOPS  T1  T2 ... TN* - INFORMATIVE MESSAGE ISSUED
*         IN RESPONSE TO *LISTAB* COMMAND INDICATING THE TEXT EDITOR
*         TAB STOPS THAT ARE IN EFFECT. 
* 
*         * XXXXXXX SYNTAX ERROR.* - ERROR MESSAGE INDICATING IMPROPER
*         SYNTAX WAS USED WITH TEXT EDITOR COMMAND XXXXXXX. 
* 
*         * N LINES TO EOF.* - INFORMATIVE MESSAGE INDICATING THE 
*         LINE COUNT FROM THE CURRENT SEARCH POINTER TO THE LAST
*         LINE IN THE TEXT FILE.
* 
*         * N LINES TO INTERRUPT.* - INFORMATIVE MESSAGE INDICATING 
*         NUMBER OF LINES OR OCCURRENCES OF PHRASE FOUND IN TEXT
*         FILE BEFORE THE INTERRUPT WAS DETECTED. 
* 
*         * N OCCURRENCES OF PHRASE FOUND.* - INFORMATIVE MESSAGE 
*         INDICATING THAT THE END OF TEXT WAS ENCOUNTERED BEFORE THE
*         NUMBER OF ITERATIONS SPECIFIED IN THE COMMAND WERE COMPLETED. 
          TITLE  ASSEMBLY CONSTANTS.
*         ASSEMBLY CONSTANTS. 
          SPACE  4
 TABCL    EQU    150         MAXIMUM TAB VALUE
 TTBLL    EQU    7           MAXIMUM NUMBER OF TABS 
 NLR      EQU    8           NUMBER OF LENGTH RECORDS 
 MINWD    EQU    6           MINIMUM SIZE FOR WIDTH 
 MAXWD    EQU    150         MAXIMUM SIZE FOR WIDTH 
 CMDBL    EQU    MAXWD*2     LENGTH OF COMMAND BUFFER 
 STRBL    EQU    MAXWD*2     LENGTH OF CHARACTER BUFFER 
 USBL$    EQU    1           VARIABLE LENGTH OPTION FOR UNPACK BUFFER 
 USBBL    EQU    MAXWD*2     UNPACK STRING BUFFER LENGTH
 CCBL     EQU    80          COMMAND BUFFER LENGTH
 LBUFL    EQU    30          LENGTH OF LINE BUFFER
 FETL     EQU    7           FET LENGTH 
 OBUFL    EQU    201B        LENGTH OF O-BUFFER (OUTPUT)
 IBUFL    EQU    101B        LENGTH OF I-BUFFER (INPUT) 
 MBUFL    EQU    201B        LENGTH OF M-BUFFER (SCR) 
 BBUFL    EQU    201B        LENGTH OF B-BUFFER (SCR2)
 FBUFL    EQU    1001B       LENGTH OF F-BUFFER (SCR5)
 CBUFL    EQU    FBUFL/2
  
  
*         SPECIAL ENTRY POINT.
  
 SSM=     EQU    0           SUPPRESS DUMPS OF FIELD LENGTH 
          TITLE  MACRO DEFINITIONS. 
          SPACE  4
**        COMMAND - GENERATE ENTRY IN COMMAND AND PROCESSOR TABLES. 
* 
*         COMMAND  CNAM,CPROC,STR1,STR2,NUM 
* 
*         CNAM   COMMAND NAME.
*         CPROC  COMMAND PROCESSOR ADDRESS. 
*         STR1   FIRST STRING SPECIFICATION IS ALLOWED. 
*         STR2   SECOND STRING SPECIFICATION IS ALLOWED.
*         NUM    NUMERIC FIELD SPECIFICATION IS ALLOWED.
  
  
 COMMAND  MACRO  CNAM,CPROC,P1,P2,P3
          LOCAL  A,B,C
 A        SET    0
 B        SET    0
 C        SET    0
          ECHO   ,P=(P1,P2,P3)
          IFC    EQ,$P$STR1$,1
 A        SET    1
          IFC    EQ,$P$STR2$,1
 B        SET    1
          IFC    EQ,$P$NUM$,1 
 C        SET    1
          ENDD
          VFD    42/0L_CNAM,1/A,1/B,1/C,15/CPROC
          ENDM
          SPACE  4
**        CEPF - CHECK EOI ON PRIMARY EDIT FILE.
* 
*         LOC    TRANSFER IF NOT PRIMARY FILE.
*         R      REGISTER USED. 
  
  
 CEPF     MACRO  LOC,R
          SA_R   PFADR
          BX7    X_R-X5 
          SX5    X_R
          NZ     X7,LOC 
          ENDM
 INTRPT   SPACE  4
**        INTRPT - PROCESS TERMINAL INTERRUPT 
* 
*         ALL OUTPUT DATA IN THE BUFFER WILL BE ISSUED PRIOR
*         TO PROMPT MESSAGE.
* 
*         NO - ADDRESS IF COMMAND TO NOT CONTINUE AFTER INTERRUPT.
  
  
 INTRPT   MACRO  NO 
+         RJ     PCC
-         EQ     NO 
          ENDM
          SPACE  4
*CALL COMCMAC 
*CALL     COMSTCM 
          TITLE  FETS.
          ORG    105B 
 FETS     BSS    0
  
 F        BSS    0           TEXT FILE
 SCR5     FILEC  FBUF,FBUFL,FET=7,EPR 
          SPACE  3
 S        BSS    0           SCRATCH FILE 
 SCR4     FILEC  SBUF,FBUFL,FET=7 
          SPACE  3
 SC       BSS    0           SECONDARY SCRATCH FILE 
 SCR1     FILEC  SCBUF,FBUFL,FET=7
          SPACE  3
 B        BSS    0           STRING BUFFER FILE 
 SCR2     FILEC  BBUF,BBUFL,FET=7 
          SPACE  3
 M        BSS    0           MERGE FILE 
 SCR      FILEC  MBUF,MBUFL,FET=7,EPR 
          SPACE  3
 I        BSS    0           INPUT FILE 
 INPUT    FILEC  IBUF,IBUFL,FET=7 
          SPACE  3
 O        BSS    0           OUTPUT FILE
 OUTPUT   FILEC  OBUF,OBUFL,FET=7 
          SPACE  3
 T        BSS    0           LENGTH FILE
 SCR3     RFILEC CMDB,FBUFL 
          TITLE  COMMAND TABLE. 
 TCMD     BSS    0           TABLE OF COMMAND KEYWORDS
          COMMAND  A,ADD,STR1,NUM 
          COMMAND  ADD,ADD,STR1,NUM 
          COMMAND  ADDS,ADDS,STR1,NUM 
          COMMAND  AL,ALIGN,STR1,STR2,NUM 
          COMMAND  ALIGN,ALIGN,STR1,STR2,NUM
          COMMAND  AS,ADDS,STR1,NUM 
          COMMAND  B,BLANK,STR1,STR2,NUM
          COMMAND  BLANK,BLANK,STR1,STR2,NUM
          COMMAND  BLANKS,BLANKS,STR1,STR2,NUM
          COMMAND  BS,BLANKS,STR1,STR2,NUM
          COMMAND  C,CHANGE,STR1,STR2,NUM 
          COMMAND  CHANGE,CHANGE,STR1,STR2,NUM
          COMMAND  CHANGES,CHANGES,STR1,STR2,NUM
          COMMAND  CL,CLEAR 
          COMMAND  CLEAR,CLEAR
          COMMAND  CS,CHANGES,STR1,STR2,NUM 
          COMMAND  D,DELETE,STR1,STR2,NUM 
          COMMAND  DEFTAB,DEFTAB,STR1 
          COMMAND  DELETE,DELETE,STR1,STR2,NUM
          COMMAND  DELETES,DLETES,STR1,STR2,NUM 
          COMMAND  DS,DLETES,STR1,STR2,NUM
          COMMAND  DT,DEFTAB,STR1 
          COMMAND  E,XTRACT,STR1,STR2,NUM 
          COMMAND  END,END
          COMMAND  ES,XTRACTS,STR1,STR2,NUM 
          COMMAND  EXTRACT,XTRACT,STR1,STR2,NUM 
          COMMAND  F,FIND,STR1,STR2,NUM 
          COMMAND  FIND,FIND,STR1,STR2,NUM
          COMMAND  FINDS,FINDS,STR1,STR2,NUM
          COMMAND  FS,FINDS,STR1,STR2,NUM 
          COMMAND  INSERTS,INSERTS,STR1,STR2,NUM
          COMMAND  IS,INSERTS,STR1,STR2,NUM 
          COMMAND  L,LIST,STR1,STR2,NUM 
          COMMAND  LENGTH,LENGTH,NUM
          COMMAND  LINE,LINE
          COMMAND  LIST,LIST,STR1,STR2,NUM
          COMMAND  LISTAB,LISTAB
          COMMAND  LISTS,LISTS,STR1,STR2,NUM
          COMMAND  LN,LINE
          COMMAND  LS,LISTS,STR1,STR2,NUM 
          COMMAND  LT,LISTAB
          COMMAND  M,MERGE,STR1,STR2,NUM
          COMMAND  MERGE,MERGE,STR1,STR2,NUM
          COMMAND  N,NUMBER,STR1,STR2 
          COMMAND  NS,NUMBERS,STR1,STR2 
          COMMAND  NUMBER,NUMBER,STR1,STR2
          COMMAND  NUMBERS,NUMBERS,STR1,STR2
          COMMAND  R,RESET
          COMMAND  RESET,RESET
          COMMAND  RS,RPLACES,STR1,STR2,NUM 
          COMMAND  S,SET,STR1,NUM 
          COMMAND  SET,SET,STR1,NUM 
          COMMAND  STOP,END6
          COMMAND  T,TABS,STR1
          COMMAND  TAB,TABS,STR1
          COMMAND  W,WIDTH,NUM
          COMMAND  WIDTH,WIDTH,NUM
 TCMDL    EQU    *-TCMD 
          TITLE      DATA STORAGE.
**        DATA STORAGE. 
  
  
 MODE     BSS    4           MODE FLAG
 STPHR1   EQU    MODE+1      POINTER TO /P1/
 STPHR2   EQU    STPHR1+1    POINTER TO /P2/
 WDTH     CON    72          DEFAULT WITDH
 SVLC     CON    0           SEARCH POINTER 
 PFADR    CON    F           FET ADDRESS OF PRIMARY TEXT FILE 
 JOTY     CON    0           JOB ORIGIN TYPE
 TFILE    CON    1           EDIT FILE NAME 
 INTP     CON    0           INTERRUPT PENDING
 TINT     CON    0           TERMINAL INTERRUPT INDICATOR 
 TFLEN    CON    377776B     LENGTH OF EDIT FILE
 DAFF     CON    0           DIRECT ACCESS FILE FLAG
 EOFIF    CON    1           EOF ON INPUT FLAG
 EOFTF    CON    0           EOF ON TEXT FILE FLAG
 FBB      CON    340B        FILE BIAS BITS 
 TABCH    CON    1S59        TAB CHARACTER
 ASC      CON    0           ESCAPE CODE INDICATOR (-76B IF SET)
 AFLI     CON    0           ALIGN FIELD LENGTH INDICATOR 
  
 TTBL     CON    11          START OF PRESET TAB COLUMNS
          CON    18 
          CON    30 
          CON    40 
          CON    50 
          BSSZ   TTBLL-*+TTBL+1 
 BLKS     CON    1H          BLANK WORD 
 BLKL     VFD    12/2H  ,48/0 
  
  
**        POINTER WORD - FBW, LBW, SLP. 
* 
*T        1/S,35/POSITION,24/ADDRESS
*                *S*        = STATUS OF POINTER, NEGATIVE INDICATES 
*                             POINTER IS AT END OF LINE.
*                *POSITION* = CHARACTER POSITION WITHIN WORD (0 - 9)
*                *ADDRESS*  = ADDRESS OF WORD CONTAINING *POSITION*.
* 
*         THE ORDER OF THE FOLLOWING MUST BE MAINTAINED.
  
 FBW      CON    0           FIRST CHARACTER BUFFER POINTER WORD
 LBW      CON    0           LAST CHARACTER BUFFER POINTER WORD 
 SLP      CON    0           SOURCE LINE POINTER
  
 LBA      CON    LBUF        LINE BUFFER ADDRESS
  
 NUM      CON    0           COMMAND NUMERIC FIELD
 SEC      CON    0           SEARCH COUNT 
 ICT      CON    0           INTERRUPT PROCESSING SEARCH COUNT
  
 LCT      CON    0           LINE COUNT 
 LBL      CON    0           LINE BUFFER LWA
 TBL      CON    0           TEMPORARY BUFFER LWA 
  
 RTFP     CON    0           TEXT FILE BUFFER POINTER 
 TBST     CON    0           TEXT FILE BUFFER STATUS
 MAIN     TITLE    COMMAND CRACKER. 
**        MAIN - CRACKS COMMAND AND LOCATES PROCESSOR.
* 
*         ENTRY  (JOTY)  - JOB ORIGIN TYPE. 
*                (EOFIF) - INPUT FILE STATUS. 
*                (ASC)   - ASCII INDICATOR. 
*                (TFILE) - EDIT FILE NAME.
*                (DAFF)  - DIRECT ACCESS TEXT FILE FLAG.
*                (EOFTF) - TEXT FILE STATUS.
*                (LBL)   - LINE BUFFER LAST WORD ADDRESS. 
* 
*         EXIT   (NUM) - ABSOLUTE VALUE OF NUMERIC FIELD, DEFAULT OF 1. 
*                (SEC) - NEGATE OF (NUM). 
*                (A3) = STPHR1. 
*T STPHR1 36/NUMBER OF CHARACTERS IN STRING P1,24/P1 BEGINNING ADDRESS
*                (A4) = STPHR2. 
*T STPHR2 36/NUMBER OF CHARACTERS IN STRING P2,24/P2 BEGINNING ADDRESS
*                (A5) - FET ADDRESS OF WRITE FILE.
*                (X0) = (X2) = (NUM). 
*                (X1) = (X7) = 0. 
*                (X3) = (STPHR1). 
*                (X4) = (STPHR2). 
*                (X5) - FET ADDRESS OF READ FILE. 
*                (B7) = 1, IF NUMERIC FIELD NEGATIVE, 0 OTHERWISE.
* 
*         USES   ALL. 
* 
*         CALLS  ANC, CFC, SFN, COMMAND PROCESSORS. 
  
  
 MAIN22   SB4    X2-1R
          NZ     B4,MAIN23   IF NOT BLANK CHARACTER 
          SB2    B2+B1
          SA2    B2 
          NE     B2,B6,MAIN22  IF NOT END OF INPUT
          EQ     MAIN17 
  
 MAIN23   SB4    X2-1R$ 
          ZR     B4,MAIN17   IF COMMENTS FIELD
  
*         PROCESS SYNTAX ERROR. 
  
 MAINX    SA1    SEM
          RJ     SFN         BLANK FILL COMMAND WORD
          SA6    A1 
          WRITEC O,A6 
  
 MAIN     RJ     CTI         CLEAR TERMINAL INTERRUPTS
          SA3    JOTY 
          ZR     X6,MAIN2    IF NOT INTERRUPT PENDING 
          NZ     X3,MAIN1    IF NOT INTERACTIVE INPUT 
          RECALL I
          SA1    I+1         RESET INPUT FET
          SX6    X1 
          SA6    A1+B1
          SA6    A6+B1
          BX7    X7-X7
          SA7    EOFIF
 MAIN1    RECALL O
          SA1    X2+B1       RESET OUTPUT FET 
          SX6    X1 
          SA6    A1+B1
          SA6    A6+B1
          BX7    X7-X7       CLEAR INTERRUPT PENDING
          SA7    INTP 
 MAIN2    SA2    EOFIF       CHECK INPUT STATUS 
          NZ     X2,MAIN3    IF NO EOF ON INPUT FILE
          SB5    END         PRESET END COMMAND 
          SB7    B0+         CLEAR NEGATIVE NUMERIC INDICATOR 
          NZ     X3,MAIN19   IF NOT INTERACTIVE JOB 
          SX6    B1 
          SA6    A2          CLEAR EOI STATUS 
          READ   I           REINIATE READ
 MAIN3    READS  I,CMDB,-CMDBL
          NZ     X1,MAIN20   IF USER HIT (CR) ONLY
          SB2    CMDB-1      START OF COMMAND BUFFER
          SB3    7
          SB5    60 
          SX7    B0+
  
*         ASSEMBLE COMMAND WORD.
  
 MAIN4    RJ     ANC         ASSEMBLE NEXT CHARACTER
          EQ     B2,B6,MAIN5 IF END OF INPUT
          SX1    X2-1R
          ZR     X1,MAIN4    IF BLANK CHARACTER 
          ZR     X4,MAIN5    IF NOT ALPHA CHARACTER 
          SX1    X4-1R0 
          PL     X1,MAIN5    IF NOT ALPHA CHARACTER 
          SX1    X3-74B 
          ZR     X1,MAIN5    IF 74B ESCAPE CHARACTER
          SB3    B3-1 
          NG     B3,MAIN21   IF COMMAND TOO LONG
          SB5    B5-6 
          LX7    6
          BX7    X4+X7
          EQ     MAIN4
  
*         SEARCH FOR COMMAND. 
  
 MAIN5    ZR     X7,MAIN21   IF NO COMMAND
          MX1    -6          MASK FOR MODE CHARACTER
          BX6    -X1*X7 
          SX6    X6-1RS 
          SA6    MODE        SET MODE 
          LX7    X7,B5       LEFT JUSTIFY COMMAND WORD
          SA1    =0LSTOP     CHECK FOR STOP COMMAND 
          BX5    X1-X7
          ZR     X5,END6     IF STOP COMMAND
          RJ     CTI         CHECK TERMINAL INTERRUPT 
          NZ     X3,MAIN     IF INTERRUPTED 
          SX4    B1 
          MX6    42 
          SB3    TCMD-1      SET COMMAND TABLE ADDRESS
          SX3    TCMDL*2     SET TABLE LENGTH 
 MAIN6    AX3    1
          PL     X4,MAIN7    IF ENTRY TOO HIGH
          SB3    A1+B1       RAISE LOWER LIMIT
 MAIN7    SA1    X3+B3       GET NEXT ENTRY 
          BX5    -X6*X1      CHECK FOR MATCH
          BX1    X6*X1
          IX4    X1-X7
          ZR     X4,MAIN8    IF COMMAND FOUND 
          NZ     X3,MAIN6    IF NOT END OF SEARCH 
          JP     MAIN21      PROCESS INCORRECT COMMAND
  
 MAIN8    SA7    SEM
          MX1    -15
          SX7    B1 
          BX4    -X1*X5      GET PROCESSOR ADDRESS
          SX6    B0 
          LX5    59-17
          SB5    X4 
          SA6    STPHR1      CLEAR STRING FIELD POINTERS
          SB7    B0+
          SB3    -B1
          SA6    A6+B1
          EQ     B2,B6,MAIN18  IF NO OPTIONAL FIELDS
          SX1    X2-1R; 
          ZR     X1,MAIN13   IF SPECIFICATOR FIELD NEXT 
          RJ     CFC         CHECK FOR COLON
          NZ     X3,MAIN23   IF INCORRECT SEPARATOR 
  
*         PROCESS CHARACTER STRING. 
  
 MAIN9    RJ     ANC         ASSEMBLE NEXT CHARACTER
          EQ     B2,B6,MAINX IF PREMATURE END OF INPUT
          SX1    X2-1R
          ZR     X1,MAINX    IF INCORRECT DELIMITER 
          SX1    X2-1R$ 
          ZR     X1,MAINX    IF INCORRECT DELIMITER 
          BX0    X2          SAVE DELIMITER 
          SX6    B2+B1
          SB3    B3+B1       INCREMENT STRING COUNT 
          SB4    X6+
 MAIN10   RJ     ANC         ASSEMBLE NEXT CHARACTER
          EQ     B2,B6,MAINX IF PREMATURE END OF INPUT
          BX1    X0-X2
          NZ     X1,MAIN10   IF NOT DELIMITER 
          ZR     X3,MAIN11   IF NOT ASCII DELIMITER 
          SX3    -1 
 MAIN11   SA0    B2+X3
          SX1    A0-B4       NUMBER OF CHARACTERS IN STRING 
          LX1    24 
          BX6    X1+X6
          SA6    B3+STPHR1
          ZR     X1,MAINX    IF NULL STRING 
          GT     B3,B1,MAINX IF TOO MANY STRINGS
          BX1    X5 
          LX1    X1,B3
          PL     X1,MAINX    IF STRING FIELD NOT ALLOWED
 MAIN12   RJ     ANC         ASSEMBLE NEXT CHARACTER
          EQ     B2,B6,MAIN18  IF END OF INPUT
          SX1    X2-1R
          ZR     X1,MAIN12   IF BLANK CHARACTER 
          SX1    X2-1R, 
          ZR     X1,MAIN9    IF ANOTHER STRING FIELD
          SX1    X2-1R; 
          NZ     X1,MAIN23   IF INCORRECT SEPARATOR 
  
*         PROCESS NUMERIC FIELD.
  
 MAIN13   LX5    59-15-59+17
          PL     X5,MAINX    IF NUMERIC FIELD NOT ALLOWED 
          RJ     ANC         ASSEMBLE NEXT CHARACTER
          EQ     B2,B6,MAINX IF PREMATURE END OF INPUT
          SX7    B0+
          SX1    X2-1R* 
          NZ     X1,MAIN14   IF NOT ASTERISK
          SX7    377776B     SET INFINITE NUMERIC FIELD 
          EQ     MAIN18 
  
 MAIN14   SB4    X2-1R+ 
          ZR     B4,MAIN15   IF PLUS SIGN 
          SB4    B4-B1
          NZ     B4,MAIN16   IF NOT MINUS SIGN
          SB7    B1 
 MAIN15   SB2    B2+B1
          EQ     B2,B6,MAINX IF PREMATURE END OF INPUT
          SA2    B2 
 MAIN16   SX4    X2-1R+ 
          PL     X4,MAIN22   IF NOT DIGIT 
          SX4    X2-1R0 
          NG     X4,MAIN22   IF NOT DIGIT 
          LX6    X7,B1
          LX7    3
          IX7    X6+X7       N(I-1)*10
          IX7    X7+X4       N(I-1)*10+N(I) 
          SB2    B2+B1
          SA2    B2 
          NE     B2,B6,MAIN16  IF NOT END OF INPUT
 MAIN17   ZR     X7,MAINX    IF NUMERIC FIELD ZERO
          MX1    -17
          BX1    -X1*X7 
          BX1    X7-X1
          NZ     X1,MAINX    IF NUMERIC FIELD TOO LARGE 
  
 MAIN18   SA7    NUM
          BX6    -X7
          SA6    A7+B1
          BX0    X7 
          BX2    X7 
          SX6    B5-SET 
          ZR     X6,MAIN19   IF *SET* COMMAND 
          NZ     B7,MAINX    IF NUMERIC FIELD NEGATIVE
 MAIN19   MX7    -4 
          SA1    FBB
          BX3    -X7*X1 
          AX1    4
          BX6    -X7*X1 
          SA4    STPHR2 
          SA5    X6+F        WRITE FILE 
          SX5    X3+F        READ FILE
          SA3    STPHR1      POINTER TO STRING FIELD /P1/ 
          BX7    X7-X7
          BX1    X1-X1
          JP     B5          EXECUTE COMMAND
  
*         PROCESS INCORRECT COMMAND.
  
 MAIN20   SX7    0           SET EOI STATUS 
          SA7    EOFIF
 MAIN21   RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X6,MAIN     IF INTERRUPTED 
          WRITEC O,(=C* INCORRECT COMMAND.*)
          EQ     MAIN 
  
  
 SEM      DATA   C*          SYNTAX ERROR.* 
 ADD      TITLE  LINE COMMAND PROCESSORS. 
***       ADD (A) - ADD LINES.
* 
*         ONE OR MORE LINES ARE ADDED TO THE FILE BEING EDITED. 
*         NEW DATA IS OBTAINED BY POSTING A REQUEST TO
*         * ENTER TEXT.*  NEW TEXT IS ADDED AFTER THE NTH LINE OR 
*         AFTER EACH OF THE FIRST N LINES CONTAINING /P1/.
  
  
 ADD      BSS    0
          NZ     X3,CHL1     IF STRING FIELD PRESENT
 ADL1     SA2    X1+ADLA
          BX6    X2 
          SA6    ADL2        SET RJ FOR ADD/CHANGE
          RJ     ETX         PROCESS TEXT ENTRY 
          ZR     X0,MAIN     IF NO TEXT ENTERED 
          SA4    EOFTF
          BX7    X2          SAVE FET ADDRESS 
          SA7    A6-B1
          ZR     X4,ADL3     IF POSITIONED AT END OF INFORMATION
 ADL2     SA2    NUM
          RJ     *
 ADL3     INTRPT SET2        PROCESS TERMINAL INTERRUPT 
          SA2    RTFP        RETRIEVE FET POINTER 
          READW  X2,TBUF,100B 
          SB7    B6-TBUF     NUMBER WORDS READ
          BX0    X1 
          SX2    A5 
          WRITEW X2,TBUF,B7 
          ZR     X0,ADL3     IF COPY NOT COMPLETE 
          JP     SET2 
  
  
 ADLA     SA2    NUM         POSITION TEXT FILE FOR ADD COMMAND 
          RJ     AFW
 +        SA2    SEC         POSITION TEXT FILE FOR CHANGE COMMAND
          RJ     ATF
 BLANK    EJECT 
***       BLANK (B) - BLANK LINES.
* 
*         ONE OR MORE LINES OF DATA IN THE TEXT FILE ARE REPLACED 
*         WITH BLANK LINES. LINES BLANKED ARE THE FIRST N LINES OR
*         THE FIRST N LINES CONTAINING /PHRASE/.
  
  
 BLANK    BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF POSITIONED AT EOI 
          ZR     X3,BLL6     IF NO STRING FIELDS
          RJ     PSO         SEARCH FOR STRING
 BLL1     SA2    STPHR2 
          NZ     X2,BLL3     IF ELLIPSIS OPERATION
 BLL2     SA3    SEC
          BX6    X6-X6
          SX7    X3+B1       DECREMENT SEARCH COUNT 
          SA6    LBUF 
          SA7    A3 
          SX0    B1 
          ZR     X7,SET2     IF ALL DONE
          INTRPT SET2        PROCESS TEMINAL INTERRUPT
          RJ     SFS         SEARCH FOR STRING
          NZ     X7,BLL1     IF ANOTHER /P1/ FOUND
          JP     CHL6 
  
 BLL3     SX1    B1          CHECK CURRENT LINE FOR /P2/
          RJ     SLS
          ZR     B7,BLL2     IF ONE LINE ELLIPSIS 
          WRITEC A5,TCHM
          SX6    STPHR2      POSITION FILE AT /P2/
          RJ     SRO
          SA4    X5+5 
          SX7    X4+B4       ADVANCE READ FILE LINE POSITION
          SA7    A4 
 BLL4     EQ     B2,B1,BLL2  IF END OF ELLIPSIS IN NEXT LINE
          SX2    A5 
          SX0    B1-B2
 BLL5     WRITEC X2,TCHM     WRITE BLANK LINES
          SX0    X0+1 
          NZ     X0,BLL5     IF BLANKETY-BLANKS NOT ALL WRITTEN 
          EQ     BLL2 
  
 BLL6     BX2    -X0
          SA7    LBUF        SET BLANK LINE 
          SX2    X2+B1
          ZR     X2,SET2     IF ONLY ONE BLANK LINE 
          RJ     ATF
          BX6    X6-X6
          MX4    8
          SA6    LBUF 
 +        LX4    1           SET EIGHT BLANK LINES
          SA6    A6+B1
          NG     X4,* 
          SA2    NUM
          SX0    X2-1 
 BLL7     SB4    -8 
          SX0    X0+B4
          SX2    A5 
          SB7    B0-B4
          PL     X0,BLL8     IF LINES ALL WRITTEN 
          SB7    X0+B7
 BLL8     WRITEW X2,LBUF,B7 
          INTRPT SET2        PROCESS TERMINAL INTERRUPT 
          PL     X0,BLL7     IF LINES NOT ALL BLANKED 
          JP     SET2 
 CHANGE   EJECT 
***       CHANGE (C) - CHANGE LINES.
* 
*         ONE OR MORE LINES OF TEXT ARE DELETED AND REPLACED WITH 
*         DATA ENTERED IN RESPONSE TO THE EDIT REQUEST * ENTER TEXT.* 
  
  
 CHANGE   BSS    0
          SX1    1
          ZR     X3,ADL1     IF NO STRING FIELDS
 CHL1     SA2    X1+CHLA
          BX6    X2          SET RJ FOR CHANGE/ADD
          SX1    B0 
          SA2    EOFTF
          SA6    CHL3 
          ZR     X2,LTL11    IF POSITIONED AT EOF 
          RJ     PSO
          RJ     ETX
          ZR     X0,SET2     IF NO TEXT ENTERED 
          BX7    X2 
          SA7    A6-B1       SAVE FET ADDRESS 
 CHL2     SA1    STPHR2 
          ZR     X1,CHL3     IF NOT ELLIPSIS OPERATION
          BX0    X0-X0
          SX6    A1          SEARCH/READ FOR PHRASE ENDING ELLIPSIS 
          RJ     SRO
          SA3    X5+5 
          SX6    X3+B4       ADVANCE READ FILE LINE POSITION
          SA6    A3 
 CHL3     SX2    -1          GET NEXT LINE
          RJ     ATF
*         SX2    1           ADVANCE LINE FOR ADD COMMAND 
*         RJ     AFW
          SA2    RTFP        TEXT FILE FET ADDRESS
          SA3    X2+5 
          SX0    X3+         SET LINE COUNT OF REPLACEMENT DATA 
          SA0    X2+
 CHL4     READC  A0,TBUF,LBUFL
          SX0    X0-1        DECREMENT LINE COUNT 
          WRITEC A5,TBUF
          NZ     X0,CHL4     LOOP TO END OF TEXT
          SA3    SEC
          SX7    X3+B1       DECREMENT OPERATION COUNT
          SA7    A3 
          ZR     X7,CHL5     IF COUNTDOWN COMPLETE
          INTRPT CHL6        PROCESS TERMINAL INTERRUPT 
          SA2    EOFTF
          SA4    STPHR2 
          BX3    X2+X4
          SX1    B0 
          ZR     X3,CHL6     IF STRING OPERATION COMPLETE 
          SX6    A4-B1
          BX0    X0-X0       LOCATE NEXT OCCURANCE OF /P1/
          RJ     SFS
          ZR     X7,CHL6     IF END OF INFORMATION
          SA2    RTFP 
          SA3    X2+B1
          SX6    X3          SET OUT = FIRST
          SA4    TBST 
          SA6    X2+3 
          ZR     X4,CHL2     IF TEXT ALL IN BUFFER
          REWIND X2 
          READ   X2          REINITIATE INPUT 
          EQ     CHL2 
  
 CHL5     SA3    STPHR2 
          ZR     X3,SET2     IF LINE REPLACEMENT COMPLETE 
 CHL6     SA2    NUM
          SA4    A2+B1       NUMBER LINES PROCESSED 
          IX1    X2+X4
          ZR     X1,SET2     IF NONE CHANGED
          RJ     GSM
          JP     SET2 
  
  
 CHLA     SX2    1           ADVANCE LINE FOR ADD COMMAND 
          RJ     AFW
 +        SX2    -1          ADVANCE LINE FOR CHANGE COMMAND
          RJ     ATF
 DELETE   EJECT 
***       DELETE (D) - DELETE LINES.
* 
*         ONE OR MORE LINES ARE DELETED FROM THE FILE BEING EDITED. 
*         ALL LINES OF A MULTI-LINE /PHRASE/ ARE DELETED. 
  
  
 DELETE   BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF POSITIONED AT EOI 
          ZR     X3,DLL3     IF STRING FIELDS EMPTY 
          RJ     PSO
 DLL1     SA1    STPHR2 
          ZR     X1,DLL2     IF NOT ELLIPSIS OPERATION
          BX0    X0-X0
          SX6    A1 
          RJ     SRO         FIND PHRASE ENDING ELLIPSIS
          SA4    X5+5 
          SX7    X4+B4       ADVANCE READ FILE LINE POSITION
          SA7    A4 
 DLL2     READC  X5,LBUF,LBUFL
          NZ     X1,DLL4     IF EOF ENCOUNTERED 
          SA4    X5+5 
          SX6    X4+B1       BUMP LINE ADVANCE
          SA6    A4 
          SA3    SEC
          SX7    X3+B1       DECREMENT NUMERIC COUNT
          SA7    A3 
          ZR     X7,SET2     IF OPERATION COMPLETE
          INTRPT CHL6        PROCESS TERMINAL INTERRPUT 
          BX0    X0-X0
          SX6    B0 
          RJ     SFS
          NZ     X7,DLL1     IF NEXT OCCURANCE OF /P1/ FOUND
          JP     CHL6 
  
 DLL3     BX2    -X0
          RJ     ATF         ADVANCE FILE OVER LINES BEING DELETED
          JP     SET2 
  
 DLL4     CEPF   DLL2,4 
          SA7    EOFTF
          SA3    SEC
          SX6    X3+B1       DECREMENT COUNT
          SA6    A3 
          ZR     X6,CHL5     IF OPERATION COMPLETE
          JP     CHL6        TERMINATE PROCESSING 
 EXTRACT  EJECT 
***       EXTRACT (E) - EXTRACT LINES.
* 
*         ONE OR MORE LINES OF THE TEXT FILE ARE COPIED TO
*         THE STRING BUFFER (SCRATCH FILE SCR2) FOLLOWING THE LAST
*         ENTRY TO THE BUFFER.
  
  
 XTL5     SX0    0
          RJ     CST         COUNT PHRASES
          SA2    LCTB 
          RJ     ATF         ADVANCE TO LINE CONTAINING PHRASE
          SA1    NUM
          ZR     X1,XTL5.1   IF SPECIFIED NUMBER FOUND
          RJ     GSM         SEND MESSAGE WITH PHRASE COUNT 
 XTL5.1   SA4    STPHR2      CHECK FOR ELLIPSIS 
          ZR     X4,XTL6     IF NOT ELLIPSIS OPERATION
          SA1    LCTB        COUNT TO NTH LINE CONTAINING /P1/
          SA2    A1+B1
          IX4    X2-X1       NUMBER LINES ACROSS ELLIPSIS 
 XTL6     SX0    1
          BX3    X3-X3
          IX0    X0+X4
 XTRACT   BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF POSITIONED AT EOI 
          SX6    B0+
          SA6    XTSB        CLEAR BACKSPACE INDICATOR
          NZ     X3,XTL5     IF STRING FIELDS PRESENT 
          RJ     PSB
          WRITEC B,LBUF      COPY CURRENT LINE TO STRING BUFFER 
          SA4    B+5
          IX6    X4+X0       BUMP STRING BUFFER LINE COUNT
          SA6    A4 
          SX0    X0-1 
          ZR     X0,XTL2     IF TRANSFER COMPLETE 
 XTL1     READC  X5,LBUF,LBUFL
          NZ     X1,XTL4     IF EOF 
          SB7    B6-LBUF
          SX0    X0-1        DECREMENT LINE COUNT 
          WRITEW B,LBUF,B7
          INTRPT XTL3        PROCESS TERMINAL INTERRUPT 
 XTL2     NZ     X0,XTL1     IF TRANSFER INCOMPLETE 
 XTL3     WRITER B           FLUSH BUFFER 
          SX7    -1 
          SA7    XTSP 
          JP     LTL5 
  
 XTL4     CEPF   XTL1,4 
          SA3    B+5
          IX6    X3-X0       READJUST STRING BUFFER LINE COUNT
          SA6    A3 
          SX0    0           CLEAR LINE COUNT 
          EQ     XTL2 
 FIND     EJECT 
***       FIND (F) - FIND LINES.
* 
*         LISTS THE NTH LINE OR THE NTH LINE(S) CONTAINING /PHRASE/.
*         THE SEARCH POINTER IS SET TO THE NTH LINE OR TO THE NTH 
*         LINE CONTAINING /P1/. 
  
  
 FIND     BSS    0
          SA1    EOFTF
          ZR     X1,LTL11    IF POSITIONED AT EOI 
          NZ     X3,FDL2     IF STRING FIELDS PRESENT 
          SX6    X0+
          SA6    LCTB        SET LINE ADVANCE 
          RJ     AFW
          ZR     X7,FDL1     IF POSITIONED AT EOI 
          WRITEC O,LBUF 
          JP     SET8 
  
 FDL1     WRITEC O,EFM       ISSUE EOF MESSAGE
          JP     SET7 
  
 FDL2     SX0    B0 
          BX1    X1-X1
          RJ     CST         ASSURE SPECIFIED PHRASE EXISTS 
          SA2    LCTB 
          RJ     AFW         ADVANCE W/O SEARCH TO PROPER LINE
          SA0    STPHR2 
          WRITEC O,LBUF      COPY LINE TO OUTPUT
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,FDL6     IF INTERRUPTED 
          SA4    A0 
          ZR     X4,FDL6     IF NOT ELLIPSIS OPERATION
          BX1    X1-X1
          SA2    STPHR1      SET POINTERS ABOUT /P1/
          RJ     SLS
          SA2    A0          CHECK LINE FOR PHRASE ENDING ELLIPSIS
          RJ     SLS
          NZ     B7,FDL4     IF NOT ONE LINE ELLIPSIS 
          EQ     FDL6 
  
 FDL3     SA4    PFADR       SWITCH TO PRIMARY TEXT FILE
          SX5    X4+
 FDL4     READC  X5,LBUF,LBUFL
          NZ     X1,FDL3     IF EOR 
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,FDL5     IF INTERRUPTED 
          WRITEC O,LBUF 
          BX1    X1-X1       SEARCH LINE FOR PHRASE ENDING ELLIPSIS 
          SA2    A0 
          RJ     SLS
          NZ     B7,FDL4     IF PHRASE NOT FOUND
 FDL5     RJ     RTF         REPOSITION TEXT FILE 
 FDL6     SA1    NUM
          RJ     GSM
          JP     SET8 
 LIST     EJECT 
***       LIST (L) - LIST LINES.
* 
*         LISTS N LINES OR N GROUPS OF LINES CONTAINING /PHRASE/. 
  
  
 LIST     BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF FILE AT EOI 
          NZ     X3,LTL6     IF STRING FIELDS PRESENT 
          NZ     X4,MAINX    IF SYNTAX ERROR
 LTL1     SX0    X0-1        DECREMENT COUNTER
          WRITEC O,LBUF 
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,MAIN     IF INTERRUPTED 
          NZ     X0,LTL3     IF MORE THAN ONE LINE TO BE LISTED 
          EQ     MAIN 
  
 LTL2     SB7    B6-LBUF
          WRITEW O,LBUF,B7
          RJ     CTI         CLEAR TERMINAL INTERRUPTS
          NZ     X3,LTL5     IF INTERRUPTED 
          SX0    X0-1 
          ZR     X0,LTL5     IF LISTING COMPLETE
 LTL3     READC  X5,LBUF,LBUFL
          ZR     X1,LTL2     IF NOT END OF DATA 
          CEPF   LTL3,4 
 LTL4     WRITEC O,EFM
 LTL5     RJ     RTF         REPOSITION TEXT FILES
          JP     MAIN 
  
 LTL6     SX0    0
          ZR     X4,LTL7     IF NOT LOOKING FOR ELLIPSIS
          RJ     CST         COUNT ELLIPSI
          SA2    LCT
          RJ     ATF         ADVANCE WITHOUT SEARCH TO /P1/ 
 LTL7     SX6    STPHR1      LOCATE /P1/
          RJ     SRO
          ZR     X7,LTL4     IF STRING NOT FOUND
          SA4    STPHR2 
          SX0    1
          ZR     X4,LTL10    IF NOT LISTING ELLIPSIS
 LTL8     SA2    STPHR2      SEARCH FOR /P2/
          RJ     SLS
          ZR     B7,LTL10    IF END OF ELLIPSIS FOUND 
          WRITEC O,LBUF 
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,LTL5     IF INTERRUPTED 
 LTL9     READC  X5,LBUF,LBUFL
          ZR     X1,LTL8     IF COPY COMPLETED
          SA4    PFADR
          BX5    X4          SWITCH TO PRIMARY TEXT FILE
          EQ     LTL9 
  
 LTL10    WRITEC O,LBUF      COPY LINE TO OUTPUT
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,LTL5     IF INTERRUPTED 
          SA3    SEC
          SX7    X3+B1       DECREMENT OPERATION COUNT
          SA7    A3 
          NZ     X7,LTL7     IF NOT DONE
          EQ     LTL5 
  
 LTL11    WRITEC O,EFM       ISSUE EOF MESSAGE
          JP     MAIN 
 NUMBER   EJECT 
***       NUMBER (N) - COUNT LINES. 
* 
*         COUNTS LINES OR THE NUMBER OF LINES CONTAINING
*         /PHRASE/ FROM THE SEARCH POINTER TO END OF FILE.
  
  
 NUMBER   BSS    0
          SA2    EOFTF
          NZ     X3,NRS1     IF STRING FIELDS SPECIFIED 
 NRL1     ZR     X2,LTL11    IF FILE AT EOI 
          SX0    B0 
          BX2    X5 
 NRL2     INTRPT NRL3        PROCESS TERMINAL INTERRUPT 
          SX0    X0-1        COUNT LINES READ 
          READC  X2,LBUF,LBUFL
          ZR     X1,NRL2     IF NOT EOR 
          SA2    PFADR
          BX1    -X0         SET COUNT FOR CONVERSION 
          IX7    X2-X5
          SX0    X0+B1
          BX5    X2 
          NZ     X7,NRL2     IF NOT PRIMARY EDIT FILE 
          RJ     CDD         CONVERT LINE COUNT TO DISPLAY CODE 
          SA6    NRLA 
          RJ     RTF         REPOSITION FILES 
          WRITEC O,NRLA 
          JP     MAIN 
  
 NRL3     BX1    -X0         SET COUNT FOR CONVERSION 
          RJ     CDD
          SA6    NRLB 
          RJ     RTF         REPOSITION FILES 
          WRITEC O,NRLB 
          JP     MAIN 
  
  
 NRLA     DATA   C*           LINES TO EOF.*
 NRLB     DATA   C*           LINES TO INTERRUPT.*
 ADDS     TITLE  STRING COMMAND PROCESSORS. 
***       ADDS (AS) - ADD STRINGS.
* 
*         A CHARACTER STRING IS ADDED TO THE TEXT FILE IMMEDIATELY
*         FOLLOWING EACH OF N OCCURENCES OF /P1/. 
  
  
 ADDS     BSS    0
          ZR     X3,ADD      IF NO STRING FIELD 
          SA2    ADSA 
          EQ     CHS1        PROCESS NEW TEXT 
  
  
 ADSA     SA1    LBW         SAVE POINTER TO END OF STRING
          SA2    STPHR2 
 BLANKS   EJECT 
***       BLANKS (BS) - BLANK STRINGS.
* 
*         EACH OF N OCCURRENCES OF /PHRASE/ ARE REPLACED WITH BLANKS. 
  
  
 BLANKS   BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF EDIT FILE AT EOI
          ZR     X3,BLL6     IF STRING FIELDS EMPTY 
          RJ     PSO
 BLS1     SA2    STPHR2      ELLIPSIS FIELD POINTER 
          SA1    FBW
          ZR     X2,BLS2     IF NOT ELLIPSIS OPERATION
          BX6    X1 
          SA6    A7+B1
          NG     X7,BLS4     IF /P1/ AT END OF LINE 
          RJ     SLS
          NZ     B7,BLS4     IF NOT SINGLE LINE ELLIPSIS
          SA1    SLP
 BLS2     SA4    LBW
          RJ     IBC         REPLACE STRING WITH BLANKS 
          SA3    SEC
          SX7    X3+B1       DECREMENT SPECIFICATOR COUNT 
          SA7    A3 
          ZR     X7,DLS7     IF PROCESSING COMPLETE 
          INTRPT DLS7        PROCESS TERMINAL INTERRUPT 
          SA1    LBW
          SX0    B1 
          NG     X1,BLS3     IF PHRASE AT END OF LINE 
          BX0    X0-X0
 BLS3     SX6    STPHR1      SEARCH FILE FOR /P1/ 
          RJ     SFS
          NZ     X7,BLS1     IF NOT EOF 
          JP     CHS14
  
 BLS4     SA1    SLP
          RJ     SLT         SET LINE TERMINATOR
          SX2    A5 
          SX0    B1          DUMP LINE BUFFER 
          WRITEC X2,LBUF
          SX6    STPHR2      READ/SEARCH FOR /P2/ 
          RJ     SRO
          SA4    X5+5 
          SX7    X4+B4       ADVANCE READ FILE LINE POSITION
          SA7    A4 
          EQ     B2,B1,BLS6  IF END OF ELLIPSIS IN NEXT LINE
          SX0    B1-B2
          SX2    A5 
 BLS5     WRITEC X2,TCHM     WRITE BLANK LINES
          SX0    X0+1 
          NZ     X0,BLS5     IF LINES NOT ALL WRITTEN 
 BLS6     SX1    LBUF 
          EQ     BLS2        PROCESS LINE TERMINATING ELLIPSIS
 CHANGES  EJECT 
***       CHANGES (CS) - CHANGE STRINGS.
* 
*         EACH OF N OCCURRENCES OF /PHRASE/ ARE DELETED FROM THE TEXT 
*         FILE AND REPLACED WITH THE CHARACTER STRING ENTERED IN
*         RESPONSE TO THE REQUEST * ENTER TEXT.*
  
  
 CHANGES  BSS    0
          ZR     X3,CHANGE   IF NO STRING FIELDS
          SA2    CHSA 
 CHS1     BX6    X2          STORE INSTRUCTIONS FOR CHANGES/ADDS
          SA6    CHS2 
          SA2    EOFTF       CHECK FILE STATUS
          ZR     X2,LTL11    IF POSITIONED AT EOI 
          RJ     PSO
          RJ     ETX
          ZR     X0,SET2     IF NO TEXT ENTERED 
          SX7    B0+
          SA7    STRB 
          LX7    X2 
          BX6    -X0
          SA7    RTFP 
          SA6    LCT         SAVE COUNT OF LINES ENTERED
 CHS2     SA1    FBW
          SA2    STPHR2 
*         SA1    LBW         IF ADDS COMMAND
*         SA2    STPHR2 
          BX6    X1          SAVE POINTER TO START OF STRING
          NO
          SA6    SLP
          ZR     X2,CHS3     IF NOT ELLIPSIS OPERATION
          RJ     SLS
          ZR     B7,CHS3     IF ELLIPSIS IN SINGLE LINE 
          SX7    STRB+1 
          SX0    1
          SA7    LBA         CHANGE LINE BUFFER POINTER 
          SX6    STPHR2 
          RJ     SRO         READ/SEARCH FOR PHRASE ENDING ELLIPSIS 
          SA7    STRB 
          SA3    X5+5 
          SA6    A6+B1
          SX7    X3+B4       ADVANCE READ FILE LINE POSITION
          SA2    RTFP 
          SA7    A3 
          SA0    X2          RESTORE REPLACEMENT FILE POINTER 
          EQ     CHS5 
  
 CHS3     SA3    LBW
          NG     X3,CHS5     IF PHRASE AT END OF LINE 
          SA4    LBL
          SX1    STRB+1      FIX POINTER TO START OF TEMPORARY BUFFER 
          SX2    X3 
          SB3    X4+         END OF LINE ADDRESS
          BX7    X3-X2
          SB2    X3          ADDRESS OF TEXT FOLLOWING STRING 
          BX6    X7+X1
          SA6    STRB        SET POINTER TO TEXT IN TEMPORARY BUFFER
 CHS4     SA1    B2 
          BX6    X1          MOVE TEXT FOLLOWING STRING 
          SB2    B2+B1
          SA6    A6+B1
          NE     B2,B3,CHS4  IF MOVE INCOMPLETE 
          SX7    A6+B1
          SA7    A4+B1       SET END OF LINE FOR DATA MOVED 
 CHS5     SB7    LBUFL
          SA3    SLP
          READC  A0,X3+B1,B7
          SA1    SLP
          SX7    B6          END OF FIRST REPLACEMENT LINE
          SX2    X1+B1
          SA7    LBL
          SB6    LBUF+LBUFL-1 LWA DESTINATION BUFFER
          RJ     CTL         COMPRESS TEXT
          SA3    LCT
          SX0    X3+1 
          NZ     X0,CHS6     IF MORE THAN ONE LINE REPLACEMENT FILE 
          SA1    SLP
          PL     X1,CHS10    IF NO TRUNCATION OF NEW TEXT OCCURRED
          EQ     CHS11       ELIMINATE REMAINDER OF OLD LINE
  
 CHS6     SA1    SLP
          RJ     SLT         SET LINE TERMINATOR
 CHS7     WRITEC A5+,LBUF 
          READC  A0,LBUF,LBUFL
          SX0    X0+B1
          NZ     X0,CHS7     IF COPY INCOMPLETE 
          SA2    B6-B1
          MX1    -6 
          NZ     X2,CHS8     IF EOL NOT ON WORD BOUNDARY
          SA3    A2-B1
          SX4    A2-LBUF
          ZR     X4,CHS9     IF BLANK LINE
          BX4    -X1*X3 
          NZ     X4,CHS9     IF FULL WORD 
          SA2    A3 
 CHS8     SX0    -10
 CHS8.1   LX2    54 
          BX4    -X1*X2      ISOLATE CHARACTER
          SX0    X0+B1
          ZR     X4,CHS8.1   IF *00* CHARACTER
          LX0    24          POSITION CHARACTER POINTER 
 CHS9     SX4    A2 
          IX7    X4-X0       FORM POINTER TO END OF TEXT
          SA7    SLP
 CHS10    SA2    STRB 
          ZR     X2,CHS11    IF NO DATA AFTER STRING/ELLIPSIS 
          SA4    BAC
          SA1    SLP
          RJ     BSP         BACKSPACE POINTER
          SA3    TBL
          BX7    X3          ADDRESS ENDING DATA IN TEMPORARY BUFFER
          LX6    X1 
          SA7    LBL
          SA6    LBW
          SB6    LBUF+LBUFL-1 LWA DESTINATION BUFFER
          RJ     CTL         APPEND TEXT TO NEW LINE
 CHS11    SA3    SEC
          SX6    LBUF        RESET BUFFER ADDRESS 
          SX7    X3+B1
          SA7    A3          OPERATION COUNT DECREMENTED
          SA6    LBA
          ZR     X7,DLS6     IF PROCESSING COMPLETE 
          INTRPT DLS6        PROCESS TEMINAL INTERRUPT
          SA3    A0+B1
          SX6    X3          SET OUT = FIRST
          SA4    TBST 
          SA6    A0+3 
          ZR     X4,CHS12    IF ALL TEXT IN BUFFER
          REWIND A0+
          READ   X2 
 CHS12    BX7    X7-X7
          SA3    STRB 
          SX1    B1 
          ZR     X3,CHS13    IF REPLACEMENT DATA ENDED LINE 
          SA7    STRB 
 CHS13    SX6    STPHR1      LOOK FOR NEXT OCCURANCE OF /P1/
          RJ     SML
          SA4    RTFP 
          SA0    X4+
 CHS14    NZ     X7,CHS2     IF STRING FOUND
          SA2    SEC
          SA7    EOFTF
          SA3    A2-B1       GET NUMBER OPERATIONS COMPLETED
          IX1    X3+X2
          RJ     GSM         ISSUE DIAGNOSTIC 
          JP     SET2 
  
  
 CHSA     SA1    FBW         SAVE POINTER TO START OF STRING
          SA2    STPHR2 
 DELETES  EJECT 
***       DELETES (DS) - DELETE STRINGS.
* 
*         N OCCURRENCES OF /PHRASE/ ARE DELETED FROM THE TEXT FILE. 
*         DATA FOLLOWING /PHRASE/ WITHIN A LINE IS SHIFTED LEFT.
  
  
 DLETES   BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF FILE AT EOI 
          ZR     X3,DLL3     IF NOT STRING OPERATION
          RJ     PSO
 DLS1     SA1    FBW
          SA2    STPHR2 
          ZR     X2,DLS2     IF ELLIPSIS NOT SPECIFIED
          BX6    X1 
          SA6    SLP
          RJ     SLS         SEARCH CURRENT LINE FOR /P2/ 
          SA1    SLP
          NZ     B7,DLS4     IF NOT SINGLE LINE ELLIPSIS
 DLS2     SA2    LBW
          MX6    1
          BX6    X6*X2
          BX6    X1+X6
          SA6    A2 
          SB6    B0+
          RJ     CTL         COMPRESS TEXT LEFT 
          SA1    LBUF 
          NZ     X1,DLS3     IF NOT EMPTY LINE
          SX2    -1 
          RJ     ATF         ADVANCE TEXT FILE
          SX1    B0+         SET FLAG FOR EMPTY LINE
 DLS3     SA3    SEC
          SX7    X3+B1       DECREMENT SPECIFICATOR COUNT 
          SA7    A3 
          ZR     X7,DLS6     IF PROCESSING COMPLETE 
          INTRPT DLS6        PROCESS TERMINAL INTERRUPT 
          SX6    STPHR1      SEARCH FILE FOR /P1/ 
          RJ     SML
          NZ     X7,DLS1     IF PHRASE FOUND
          JP     CHS14
  
 DLS4     SX4    LBUF 
          BX7    X1-X4
          SX0    B1 
          ZR     X7,DLS5     IF ELLIPSIS STARTED LINE 
          RJ     SLT
          WRITEC A5,LBUF     DUMP LINE BUFFER 
 DLS5     SX6    STPHR2 
          RJ     SRO         READ/SEARCH FOR /P2/ 
          SA4    X5+5 
          SX1    LBUF 
          SX7    X4+B4       ADVANCE READ FILE LINE POSITION
          SA7    A4 
          EQ     DLS2        PROCESS END OF MULTI-LINE ELLIPSIS 
  
 DLS6     SA1    SLP
          RJ     SLT         SET LINE TERMINATOR
 DLS7     SA4    STPHR2 
          ZR     X4,SET2     IF STRING OPERATION COMPLETE 
          SA1    NUM
          RJ     GSM         ISSUE MESSAGE
          JP     SET2 
 EXTRACTS EJECT 
***       EXTRACTS (ES) - EXTRACT STRINGS.
* 
*         THE NTH OCCURRENCE OF /PHRASE/ IS COPIED TO THE 
*         STRING BUFFER FILE (SCR2) FOLLOWING THE LAST ENTRY. 
  
  
 XTRACTS  BSS    0
          ZR     X3,XTRACT   IF NO STRING FIELDS
          SA2    EOFTF
          NZ     X4,XTS8     IF ELLIPSIS SPECIFIED
          BX0    X0-X0
          SX6    A3 
          ZR     X2,LTL11    IF POSITIONED AT EOF 
          RJ     SRO
          ZR     X7,CST1     IF EOI 
          SX6    LBUF-1 
 XTS1     SA6    SLP
          RJ     PSB
          SA3    STPHR2 
          SA1    LBW
          NZ     X3,XTS2     IF ELLIPSIS OPERATION
          RJ     SBT         SET BLANK TERMINATOR 
          SX6    B6+
          SA6    XTSB 
 XTS2     SA2    A1-B1
          SA1    A1+B1
          SB6    B0+
          RJ     CTL
          SA1    SLP
          RJ     SLT         SET LINE TERMINATOR
          SA1    XTSB 
          SX6    B6+X1
          SA6    A1          SAVE NUMBER OF BLANKS ADDED
          WRITEC B,LBUF-1    COPY PHRASE TO STRING BUFFER 
          SX6    1R          RESTORE NON-ZERO WORD PAD BEFORE LBUF
          SA6    LBUF-1 
          SA4    STPHR2 
          NZ     X4,XTS4     IF ELLIPSIS SPECIFIED
          SX0    1
          SA1    LBW
          NG     X1,XTS3     IF STRING AT END OF LINE 
          SA1    SLP
          SX4    B1 
          RJ     BSP         BACKSPACE POINTER
 XTS3     AX1    24 
          BX6    X1 
          SA6    XTSP        SAVE POSITION+1 OF LAST CHARACTER
          SA4    B+5
          IX7    X0+X4       ADVANCE STRING FILE LINE COUNT 
          SA7    A4 
          WRITER X2          FLUSH STRING BUFFER
          RJ     RTF
          JP     MAIN 
  
 XTS4     SX2    1
          RJ     ATF         NEXT LINE TO WORKING STORAGE 
          SA3    LCTB 
          SA2    A3+B1
          IX0    X2-X3       NUMBER LINES TO END OF ELLIPSIS
 XTS5     SX0    X0-1 
          ZR     X0,XTS7     IF LAST LINE READ
          SB7    B6-LBUF
          WRITEW B,LBUF,B7   COPY LINE TO STRING BUFFER 
 XTS6     READC  X5,LBUF,LBUFL
          ZR     X1,XTS5     IF NOT EOR 
          SA4    PFADR
          BX5    X4          SWITCH TO PRIMARY TEXT FILE
          EQ     XTS6 
  
 XTS7     SA2    STPHR2 
          RJ     SLS         LOCATE /P2/
          SA3    LCTB 
          SA2    A3+B1       LINE COUNT TO END OF ELLIPSIS
          IX0    X2-X3
          SX0    X0+B1       NUMBER LINES ACROSS ELLIPSIS 
          BX1    X7 
          RJ     SBT         SET BLANK TERMINATOR 
          SX6    B6+
          SA6    XTSB 
          RJ     SLT         SET END OF LINE
          SA1    XTSB 
          SX6    B6+X1
          SA6    A1          SAVE NUMBER OF BLANKS ADDED
          WRITEC B,LBUF 
          SA1    LBW
          EQ     XTS3        COMPLETE PROCESSING
  
 XTS8     SX0    0
          RJ     CST         ASSURE ELLIPSIS EXISTS 
          SA3    NUM
          ZR     X3,XTS10    IF SPECIFIED ELLIPSIS EXISTS 
          JP     NRS2 
  
 XTS9     SX6    STPHR2      FIND PHRASE ENDING ELLIPSIS
          RJ     SRO
 XTS10    SX6    STPHR1      LOCATE START OF ELLIPSIS 
          RJ     SRO
          SA3    SEC
          SX6    X3+B1       DECREMENT COUNT
          SA6    A3 
          NZ     X6,XTS9     IF SPECIFIED ELLIPSIS NOT REACHED
          SA2    STPHR2 
          SA4    A7-B1
          BX0    X4          CHECK - ONE LINE ELLIPSIS
          RJ     SLS
          NZ     B7,XTS11    IF MULTI-LINE ELLIPSIS 
          BX6    X0 
          SX7    B0 
          SA6    FBW         RESTORE POINTER TO START OF ELLIPSIS 
          SA7    STPHR2 
 XTS11    SX6    LBUF-1 
          EQ     XTS1 
  
  
 XTSB     CON    0           NUMBER OF POSITIONS TO BACKSPACE 
 XTSP     BSS    1
 FINDS    EJECT 
***       FINDS (FS) - FIND STRING. 
* 
*         LISTS THE NTH OCCURRENCE OF /PHRASE/ AND SETS THE SEARCH
*         POINTER TO THAT LINE. IF /PHRASE/ IS MULTI-LINE, THE SEARCH 
*         POINTER IS SET TO THE LINE CONTAINING /P1/. 
  
  
 FINDS    BSS    0
          ZR     X3,FIND     IF STRING FIELDS EMPTY 
          SA2    EOFTF
          SX0    0
          ZR     X2,LTL11    IF EDIT FILE AT EOI
          RJ     CST         ASSURE SPECIFICATION EXISTS
          SA2    LCT
          RJ     AFW         FAST ADVANCE TO LINE CONTAINING /P1/ 
          EQ     FDS2 
  
 FDS1     SA4    STPHR2      CHECK ELLIPSIS SPECIFIED 
          BX0    X0-X0
          SX6    A4 
          ZR     X4,FDS2     IF NOT ELLIPSIS OPERATION
          RJ     SFS         LOCATE PHRASE ENDING ELLIPSIS
 FDS2     SX6    STPHR1 
          RJ     SFS         ADVANCE FILE TO LINE CONTAINING /P1/ 
          SA3    SEC
          SX7    X3+B1       ADVANCE OPERATION COUNT
          SA7    A3 
          INTRPT FDS3        PROCESS TEMINAL INTERRUPT
          SA3    SEC         CHECK OPERATION COUNT
          NZ     X3,FDS1     IF LAST OCCURANCE NOT REACHED
 FDS3     SB2    LBUF 
          SA4    LBL         GET END OF LINE ADDRESS
          SB3    TBUF-LBUF
          SA1    FBW         RESET DESTROYED REGISTER 
          SX2    B3 
          SB5    X4 
          IX6    X1+X2
          SX7    B2+B3       POINT WORKING STORAGE AT TEMPORARY BUFFER
          SA6    A1+B1
          SA7    LBA         SET WORKING STORAGE FOR SEARCH ROUTINES
 FDS4     SA3    B2 
          SB2    B2+B1
          BX6    X3          MOVE LINE TO TEMPORARY BUFFER
          SA6    A3+B3
          NE     B2,B5,FDS4  IF MOVE NOT COMPLETE 
          SX7    A6+B1       SET TBUF END-OF-LINE POINTER 
          BX6    X4          SAVE LBUF END-OF-LINE POINTER
          SA7    A4 
          SA6    A7+B1
          SA2    STPHR1 
          RJ     SLS
          SX1    TBUF 
          BX4    X6          INSERT LEADING BLANKS FOR OUTPUT 
          RJ     IBC
          SA1    TBL         RESTORE LBUF END-OF-LINE POINTER 
          BX6    X1 
          SA6    A1-B1
          SA2    STPHR2      POINTER TO /P2/
          ZR     X2,FDS9     IF NOT ELLIPSIS OPERATION
          RJ     SLS
 FDS5     ZR     B7,FDS9     IF ONE LINE ELLIPSIS 
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,FDS8     IF INTERRUPTED 
          WRITEC O,TBUF 
 FDS6     READC  X5,TBUF,LBUFL
          ZR     X1,FDS7     IF NOT EOR 
          SA4    PFADR
          BX5    X4          SWITCH TO PRIMARY TEXT FILE
          EQ     FDS6 
  
 FDS7     SA2    STPHR2      LOCATE PHRASE ENDING ELLIPSIS
          RJ     SLS
          NZ     B7,FDS5     IF PHRASE NOT FOUND
 FDS8     RJ     RTF         REPOSITION TEXT FILE 
 FDS9     SA1    LBW         SET END OF LINE
          SA2    LBL
          RJ     SLT
          BX6    X2 
          SA6    A2 
          WRITEC O,TBUF      COPY LINE TO OUTPUT
          SX7    LBUF 
          SA7    LBA         RESTORE NORMAL WORKING STORAGE AREA
          JP     FDL6 
 INSERTS  EJECT 
***       INSERTS (IS) - INSERT STRING. 
* 
*         SAME AS ADDS EXCEPT THAT NEW DATA IS FOUND IN /P2/. 
  
  
 INSERTS  BSS    0
          ZR     X4,MAINX    IF REPLACEMENT STRING EMPTY
          SA2    INSA 
          JP     RPS1 
  
  
 INSA     BX2    X7 
          SB6    10 
          SA4    X2          FIRST WORD OF PHRASE 
 LISTS    EJECT 
***       LISTS (LS) - LIST STRINGS.
* 
*         ONE OR MORE OCCURRENCES OF /PHRASE/ IS LISTED.
  
  
 LISTS    BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF POSITIONED AT EOI 
          ZR     X3,LTL1     IF NOT STRING OPERATION
          SX0    0
          ZR     X4,LTS1     IF ELLIPSIS SEARCH NOT REQUIRED
          RJ     CST
          SA2    LCT         FAST ADVANCE TO START OF ELLIPSIS
          RJ     ATF
 LTS1     SX6    STPHR1      SEARCH FOR /P1/
          RJ     SRO
          ZR     X7,LTL4     IF EOI 
          SX1    LBUF 
          SA4    FBW         INSERT LEADING BLANKS
          RJ     IBC
 LTS2     SA1    STPHR2 
          NZ     X1,LTS7     IF LOOKING FOR ELLIPSIS
 LTS3     SA1    SEC
          SX6    X1+B1       DECREMENT SPECIFICATOR COUNT 
          SA6    A1 
          ZR     X6,LTS4     IF OPERATION COMPLETE
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,LTS9     IF INTERRUPTED 
          SA3    LBW
          NG     X3,LTS6     IF PHRASE AT EOL 
          BX7    X3          SAVE -END OF STRING- POINTER 
          SA7    A3+B1
          SA2    STPHR1      SCAN LINE FOR ANOTHER OCCURRENCE 
          RJ     SLS
          NZ     B7,LTS5     IF STRING NOT IN LINE
          SA1    SLP
          SA4    FBW
          RJ     IBC         BLANK BETWEEN STRINGS
          EQ     LTS2 
  
 LTS4     SA1    LBW
          RJ     SLT         SET LINE TERMINATOR
          WRITEC O,LBUF 
          EQ     LTS9        COMPLETE PROCESSING
  
 LTS5     SA1    SLP         SET END OF LINE
          RJ     SLT
 LTS6     RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,LTS9     IF INTERRUPTED 
          WRITEC O,LBUF      COPY LINE TO OUTPUT
          SX0    1
          EQ     LTS1        CONTINUE PROCESSING
  
 LTS7     SA2    STPHR2      SEARCH FOR PHRASE ENDING ELLIPSIS
          RJ     SLS
          ZR     B7,LTS3     IF ELLIPSIS FOUND
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,LTS9     IF INTERRUPTED 
          WRITEC O,LBUF 
 LTS8     READC  X5,LBUF,LBUFL
          SX7    B6          SAVE END OF LINE POINTER 
          SA7    LBL
          ZR     X1,LTS7     IF NOT EOR 
          SA4    PFADR
          BX5    X4          SWITCH TO PRIMARY FILE 
          EQ     LTS8 
  
 LTS9     RJ     RTF         REPOSITION TEXT FILE 
          JP     MAIN 
 NUMBERS  EJECT 
***       NUMBERS (NS) - COUNT STRINGS. 
* 
*         COUNTS THE OCCURRENCES OF /PHRASE/ FROM THE SEARCH POINTER
*         TO END OF FILE. 
  
  
 NUMBERS  BSS    0
          SA2    EOFTF
          ZR     X3,NRL1     IF NO STRING FIELDS
 NRS1     ZR     X2,LTL11    IF POSITIONED AT EOF 
          SX6    -377776B 
          BX7    -X6
          SA6    SEC         FORCE SEARCH LIMIT HIGH
          BX0    X0-X0
          SA7    NUM
          RJ     CST         COUNT STRINGS
 NRS2     SA1    NUM
          RJ     GSM         SEND MESSAGE WITH PHRASE COUNT 
          JP     MAIN 
 REPLACES EJECT 
***       REPLACES (RS) - REPLACE STRINGS.
* 
*         SAME AS CHANGES EXCEPT THAT REPLACEMENT DATA IS TAKEN 
*         FROM /P2/.
  
  
 RPLACES  BSS    0
          SA2    RPSA 
 RPS1     ZR     X3,MAINX    IF STRING TO BE REPLACED NOT SPECIFIED 
          ZR     X4,DLETES   IF REPLACEMENT STRING EMPTY
          BX7    X2 
          SX0    0           SELECT SEARCH BEFORE WRITE/READ
          SA2    EOFTF
          SA7    RPS4 
          ZR     X2,LTL11    IF POSITIONED AT EOI 
          SX6    STPHR1      SEARCH FILE FOR STRING 
          RJ     SFS
 RPS2     ZR     X7,RPS11    IF EOI 
          NG     X7,RPS4     IF PHRASE AT END OF LINE 
          SX3    TBUF-LBUF
          SA4    LBL         GET END OF LINE POINTER
          SB2    X7 
          IX6    X7+X3       FORM END OF PHRASE POINTER 
          SB3    X4 
          SA6    A7+B1
 RPS3     SA1    B2          MOVE TEXT FOLLOWING PHRASE 
          BX6    X1 
          SA6    X3+B2             TO TEMPORARY LOCATION
          SB2    B2+B1
          NE     B2,B3,RPS3  IF MOVE NOT DONE 
          SX6    A6+B1
          SA6    A4          RESET END OF LINE ADDRESS
 RPS4     SA2    A7-B1
          SA4    X2          FIRST WORD OF PHRASE 
          SB6    10 
*         BX2    X7 
*         SB6    10          IF ENTRY FROM INSERTS
*         SA4    X2 
          AX2    24          POSITION CHARACTER POINTER 
          SB3    A4 
          SA3    X2+TCHM     MASK FOR DATA PRECEDING PHRASE 
          CX1    X3 
          SB5    X2 
          BX6    X3*X4       ISOLATE LEADER 
          SB4    X1 
          SA3    STPHR2      POINTER TO REPLACEMENT PHRASE
          SA2    X3-1 
          AX3    24          POSITION CHARACTER COUNT 
          SX4    B1 
          SB7    X3 
          LX6    B4,X6
 RPS5     SX3    B3-LBUF-LBUFL+1
          NZ     X3,RPS6     IF NOT AT LWA BUFFER 
          SB6    7
          SX4    B0+
          GE     B5,B6,RPS7  IF BUFFER COMPLETELY FULL
          SX4    B1+
 RPS6     ZR     B7,RPS7     IF REPLACEMENT COMPLETE
          LX6    6
          SA2    A2+B1       GET NEXT ELEMENT 
          SB5    B5+1 
          BX6    X6+X2       ASSEMBLE WORD
          SB7    B7-B1
          LT     B5,B6,RPS6   IF WORD NOT COMPLETE
          SX4    B6-7 
          ZR     X4,RPS7     IF AT BUFFER LIMIT 
          SA6    B3 
          SB5    B0 
          BX6    X6-X6       CLEAR ASSEMBLY REGISTER
          SB3    B3+B1
          NZ     B7,RPS5     IF REPLACEMENT NOT COMPLETE
 RPS7     SX1    B5+         CHARACTER POINTER TO END OF NEW STRING 
          SB6    10 
          LX1    24 
          ZR     B5,RPS8     IF NEW STRING FILLED WORD
 +        LX6    6
          SB5    B5+B1       LEFT JUSTIFY WORD ENDING PHRASE
          NE     B5,B6,*
 RPS8     SA6    B3 
          SX3    A6 
          BX0    X0-X0
          BX7    X1+X3
          SA2    SLP         POINTER TO TEXT IN TEMPORARY BUFFER
          SA3    LBW         POINTER TO END OF OLD PHRASE 
          BX1    X7 
          MX6    1
          NG     X3,RPS9     IF NO DATA FOLLOWING ORIGINAL PHRASE 
          NZ     X4,RPS10    IF NOT AT BUFFER LIMIT 
 RPS9     SX0    B1 
          BX2    X6*X3
          BX7    X2+X7
          BX2    X3 
 RPS10    SA7    A3          SET POINTER TO END OF NEW STRING 
          SB6    LBUF+LBUFL-1 
          RJ     CTL         APPEND TEXT FOLLOWING PHRASE TO LINE 
          SA1    SEC
          SX7    X1+B1       DECREMENT COUNTER
          SA7    A1 
          ZR     X7,RPS12    IF OPERATION COMPLETE
          INTRPT RPS11       PROCESS TERMINAL INTERRUPTS
          SX6    STPHR1 
          RJ     SML         SEARCH MODIFIED LINE 
          EQ     RPS2 
  
 RPS11    SA3    SEC
          SA4    A3-B1       GET NUMBER SUCCESSFUL OPERATIONS 
          IX1    X4+X3
          ZR     X1,PSO2     IF NONE COMPLETED
          RJ     GSM
          JP     SET2        REPOSITION FILES 
  
 RPS12    SA1    SLP         SET LINE TERMINATOR
          RJ     SLT
          JP     SET2        REPOSITION FILES 
  
  
 RPSA     SA2    A7-B1
          SA4    X2          FIRST WORD OF PHRASE 
          SB6    10 
 ALIGN    TITLE  AUXILIARY COMMAND PROCESSORS.
***       ALIGN (AL) - ALIGN DATA.
* 
*         ELIMINATES UNWANTED BLANKS ON THE TEXT FILE. DATA IS LINED
*         UP BY WORD, SENTENCE, AND PARAGRAPH.
  
  
 ALIGN    BSS    0
          SA2    EOFTF
          ZR     X2,LTL11    IF POSITIONED AT EOI 
          SA2    AFLI 
          NZ     X2,ALN1     IF ALIGN FIELD LENGTH ALREADY SET
          MEMORY CM,AFLI,R,ALFL 
          SA3    STPHR1 
          SA4    STPHR2 
 ALN1     ZR     X3,ALN2     IF NO STRING FIELDS
          RJ     PSO
 ALN2     SA3    SEC
          BX6    -X3
          SA6    A3+B1       INITIAL COUNT FOR INTERRUPT PROCESSING 
 ALN3     SA2    STPHR2 
          SX7    B0 
          SX1    B1 
          ZR     X2,ALN4     IF NOT ELLIPSIS OPERATION
          RJ     SLS         SEARCH FOR /P2/ IN SAME LINE AS /P1/ 
          SX7    B1 
          NZ     B7,ALN4     IF NOT ONE LINE ELLIPSIS 
          BX7    X7-X7
 ALN4     SA7    SLP         MULTI-LINE ELLIPSIS INDICATOR
 ALN5     SA3    WDTH        NEW LINE WIDTH 
          SX1    STRA        FWA NEW LINE BUFFER
          IX3    X1+X3       MAXIMUM LWA NEW LINE 
          LX1    18 
          BX0    X1+X3
 ALN6     SA3    LBUF 
          SX7    1R 
          SB2    A3+
          SB6    USBBL
          RJ     USB         UNPACK OLD LINE TO STRING BUFFER 
          SB4    X0          MAXIMUM LWA NEW LINE 
          AX0    18 
          SB5    X0+         CURRENT ADDRESS IN NEW LINE
          SA0    B6+         FWA NEXT WORD IN OLD LINE
          SA1    B6          FIRST CHARACTER IN OLD LINE
          AX0    18          LWA+1 OF LAST COMPLETE WORD IN NEW LINE
          NZ     X3,ALN7     IF NOT ZERO WORD 
          PL     X3,ALN14    IF BLANK LINE
 ALN7     SA2    ASC         ASCII INDICATOR
          IX3    X1-X7
          NZ     X3,ALN9     IF NOT BLANK CHARACTER 
          SB6    B6+B1
          MX4    4
          SB5    B5+5 
          SA7    B5-B1       INITIALIZE INDENTATION 
+         LX4    1
          SA7    A7-B1       INDENT NEW LINE
          NG     X4,* 
 ALN8     GT     B6,B7,ALN14 IF END OF OLD LINE 
          SA1    B6 
          IX3    X1-X7
          SB6    B6+B1
          ZR     X3,ALN8     IF BLANK CHARACTER 
          SB6    B6-B1
 ALN9     GT     B6,B7,ALN15 IF END OF OLD LINE 
          SA1    B6+
          IX3    X1-X7
          SB6    B6+B1
          BX6    X1          TRANSFER CURRENT CHARACTER TO NEW LINE 
          SA6    B5 
          SB5    B5+B1
          ZR     X2,ALN11    IF NO ESCAPE CODE SET
          IX4    X2+X6
          ZR     X4,ALN10    IF ESCAPE CODE 76
          SX4    X4-74B+76B 
 ALN10    NZ     X4,ALN11    IF NO ESCAPE CODE
          SB4    B4+1 
 ALN11    GE     B5,B4,ALN13 IF NEW LINE WIDTH REACHED
          NZ     X3,ALN9     IF NOT BLANK CHARACTER 
          SA4    A6-B1       LAST NON-BLANK CHARACTER 
          SX0    B5          LWA+1 OF LAST COMPLETE WORD IN NEW LINE
          SX6    X4-1R. 
          SX3    B1 
          SA0    B6          FWA NEXT WORD IN OLD LINE
          ZR     X6,ALN12    IF PERIOD ENDING SENTENCE
          SX6    X4-1R? 
          NZ     X6,ALN8     IF NOT QUESTION MARK 
 ALN12    SA7    B5 
          SB5    B5+B1
          LT     B5,B4,ALN8  IF NEW LINE WIDTH NOT REACHED
  
*         NEW LINE WIDTH REACHED. 
  
 ALN13    RJ     WNL         WRITE NEW LINE 
          SX7    1R 
          SA2    ASC         ASCII INDICATOR
          SA1    USBC 
          BX0    X0-X0
          SB7    X1          LWA OLD LINE 
          EQ     ALN8 
  
*         END OF OLD LINE REACHED.
  
 ALN14    NZ     X0,ALN15    IF NOT BLANK LINE
          SB2    A0-USBB
          NZ     B2,ALN15    IF NOT BLANK LINE
          SA7    STRA 
          WRITEC A5,BLKL     WRITE BLANK LINE 
          SB4    STRA 
          SB5    B4+1 
 ALN15    SA4    SLP
          NZ     X4,ALN18    IF WORKING WITH MULTI-LINE ELLIPSIS
          SA3    SEC
          SX7    X3+B1       DECREMENT SEARCH COUNT 
          SA7    A3 
          ZR     X7,ALN27    IF ALIGNMENT COMPLETE
          INTRPT ALN27       PROCESS TERMINAL INTERRUPT 
          SA1    STPHR1 
          ZR     X1,ALN18    IF SEARCH FOR PHRASE NOT REQUIRED
          SX3    B0+
          RJ     WNL         WRITE ENTIRE NEW LINE
 ALN16    READC  X5,LBUF,LBUFL
          ZR     X1,ALN17    IF NOT EOR 
          CEPF   ALN16,4
          SA7    EOFTF       SET FILE STATUS
          EQ     ALN28
  
 ALN17    SA4    X5+5 
          SX6    B6          LWA+1 PACKED LINE
          SX7    X4+B1       ADVANCE READ FILE LINE POSITION
          BX0    X0-X0
          SA6    LBL
          SA7    A4 
          SX6    STPHR1      SEARCH FILE FOR /P1/ 
          SX1    B0+
          RJ     SFS
          ZR     X7,ALN28    IF PHRASE NOT FOUND
          EQ     ALN3 
  
 ALN18    SX4    B5 
          SX1    B4 
          LX4    18 
          BX0    X4+X1
 ALN19    READC  X5,LBUF,LBUFL
          ZR     X1,ALN20    IF NOT EOR 
          CEPF   ALN19,4
          SA7    EOFTF
          AX0    18 
          SB5    X0          CURRENT CHARACTER ADDRESS IN NEW LINE
          BX3    X3-X3
          RJ     WNL         WRITE ENTIRE NEW LINE
          EQ     ALN28
  
 ALN20    SA4    X5+5 
          SX6    B6          LWA+1 PACKED LINE
          SX7    X4+B1       ADVANCE READ FILE LINE POSITION
          SA6    LBL
          SA2    STPHR2 
          SA7    A4 
          ZR     X2,ALN21    IF NOT ELLIPSIS OPERATION
          SX1    B0 
          RJ     SLS
          NZ     B7,ALN21    IF NOT ONE LINE ELLIPSIS 
          SX6    B0+
          SA6    SLP         CLEAR MULTI-LINE ELLIPSIS FLAG 
 ALN21    SB4    X0          LWA+1 NEW LINE 
          SX7    1R 
          AX0    18 
          SA1    LBUF        FIRST PACKED WORD OF NEXT OLD LINE 
          SB5    X0+         CURRENT CHARACTER ADDRESS IN NEW LINE
          MX2    -6 
          LX1    6
          BX2    -X2*X1      FIRST CHARACTER OF NEXT OLD LINE 
          IX3    X2-X7
          ZR     X3,ALN26    IF NEW PARAGRAPH 
          NZ     X1,ALN22    IF NOT ZERO WORD 
          PL     X1,ALN26    IF BLANK LINE
 ALN22    SA1    B5-B1       LAST CHARACTER IN NEW LINE 
          IX3    X1-X7
          ZR     X3,ALN24    IF LAST CHARACTER IN NEW LINE BLANK
          SA7    B5          INSERT BLANK 
          SB5    B5+B1
          GT     B5,B4,ALN26 IF END OF NEW LINE REACHED 
          SX3    X1-1R. 
          ZR     X3,ALN23    IF LAST CHARACTER IN NEW LINE IS PERIOD
          SX3    X1-1R? 
          NZ     X3,ALN24    IF LAST CHARACTER NOT QUESTION MARK
 ALN23    SA7    B5          INSERT BLANK 
          SB5    B5+B1
          GT     B5,B4,ALN26 IF END OF NEW LINE REACHED 
 ALN24    SA1    STRA        FIRST CHARACTER IN NEW LINE
          IX4    X1-X7
          SB2    A1 
          NZ     X4,ALN25    IF FIRST CHARACTER IN NEW LINE NOT BLANK 
          SB2    B2+5 
 ALN25    LE     B5,B2,ALN5  IF NEW LINE ALREADY FLUSHED
          SX4    B5 
          SX3    B4 
          LX4    18 
          BX0    X3+X4
          LX4    18 
          BX0    X0+X4
          EQ     ALN6 
  
 ALN26    BX3    X3-X3
          RJ     WNL         WRITE NEW LINE 
          EQ     ALN5 
  
*         ALIGNMENT COMPLETION PROCESSING.
  
 ALN27    BX3    X3-X3
          RJ     WNL         WRITE ENTIRE NEW LINE
          SX2    -B1         GET NEXT LINE
          RJ     ATF         ADVANCE TEXT FILES 
 ALN28    SA1    STPHR1 
          ZR     X1,SET2     IF NO STRING FIELDS
          SA1    ICT
          SA2    SEC
          SA3    NUM
          SA4    STPHR2 
          IX1    X1+X2
          ZR     X4,ALN29    IF NOT ELLIPSIS
          IX2    X2+X3
 ALN29    ZR     X2,SET2     IF ALL OCCURANCES FOUND AND PROCESSED
          RJ     GSM         GENERATE OCCURANCES MESSAGE
          JP     SET2        REPOSITION TEXT FILES
 CLEAR    EJECT 
***       CLEAR (CL) - CLEARS THE STRING BUFFER.
* 
*         RETURNS THE STRING BUFFER FILE (SCR2).
  
  
 CLEAR    BSS    0
          EVICT  B,R         RETURN STRING FILE SPACE 
          SA3    X2+B1
          SX7    X3+         SET IN = OUT = FIRST 
          BX6    X6-X6
          SA7    A3+B1
          SA6    B+5         CLEAR LINE COUNT 
          SA7    A7+B1
          JP     MAIN 
 DEFTAB   EJECT 
***       DEFTAB (DT) - DEFINE TAB CHARACTER. 
* 
*         IDENTIFIES A TAB CHARACTER TO BE USED WHEN STRUCTURING
*         LINES FROM DATA PASSED IN RESPONSE TO * ENTER TEXT.*
  
  
 DEFTAB   BSS    0
          MX7    1
          ZR     X3,DFT1     IF TAB CHARACTER DEFINITION TO BE CLEARED
          SA1    X3 
          AX3    24          POSITION CHARACTER COUNT 
          SB2    X3 
          NE     B2,B1,MAINX IF MORE THAN ONE CHARACTER 
          BX7    X1 
 DFT1     SA7    TABCH
          JP     MAIN 
 LENGTH   EJECT 
***       LENGTH - TRUNCATE TEXT FILE.
* 
*         LIMITS THE NUMBER OF LINES TO BE PROCESSED ON THE TEXT FILE.
*         LINE LIMIT IS SPECIFIED BY N. ORIGINAL PROCESSING BOUNDARIES
*         ARE RESTORED IF N = *.
  
  
 LENGTH   BSS    0
          SB5    X0-377776B 
          ZR     B5,LEN5     IF NUMERIC FIELD * 
          SA4    X5+5 
          SA3    EOFTF       CHECK FILE STATUS
          IX2    X0-X4
          NG     X2,LEN1     IF EDIT FILE BEYOND LINE OF INTEREST 
          SA1    TFLEN       CHECK CURRENT FILE LENGTH
          IX4    X0-X1       CHECK FOR PROPER TRUNCATION
          PL     X4,LEN8     IF IMPROPER TRUNCATION 
          BX6    X0          SAVE NEW LENGTH
          SA6    A1 
          ZR     X3,MAIN     IF POSITIONED AT EOI 
 LEN1     SA1    CTO
          ZR     X1,MAIN     IF TABLE FULL
          SB4    X1+
          SX6    B4-B1       RESET INDEX
          SX7    A1+B4
          SA6    CTO
          SA7    T+6
 LEN2     NG     X2,LEN4     IF FILE BEYOND LINE OF INTEREST
          RJ     AFW
          ZR     X7,RESET    IF ADVANCE WENT TO EOI 
          SA0    T
          WRITEC A5+,LBUF    COPY LAST LINE OF ABBREVIATED TEXT FILE
 LEN3     READW  X5,LBUF,CBUFL
          SX2    A0          SCRATCH FILE FET ADDRESS 
          BX0    X1 
          SB7    B6-LBUF     SET NUMBER WORDS TO WRITE
          WRITEW X2,LBUF,B7 
          ZR     X0,LEN3     IF NOT EOR 
          CEPF   LEN3,4 
          SA7    EOFTF       SET FILE STATUS
          SA7    SVLC 
          WRITER X2          FLUSH BUFFER 
          JP     SET2 
  
 LEN4     SA0    X0          SAVE LINE ADVANCE
          RJ     CPY         REWIND FILES 
          SX2    A0-B1       RESTORE CORRECT LINE ADVANCE 
          SX7    B1          INSURE ADVANCE TO EOI NOT DEFAULT
          EQ     LEN2 
  
 LEN5     SA1    CTO
          SX6    NLR
          IX4    X1-X6
          ZR     X4,MAIN     IF NO DATA ON FILE 
          SB4    X1+B1
          SX7    A1+B4
          SA6    A1 
          SA3    EOFTF       CHECK FILE STATUS
          SA7    T+5
          ZR     X3,LEN6     IF POSITIONED AT EOI 
          SX2    377776B
          RJ     AFW         ADVANCE TO EOI 
 LEN6     READLS T
          RECALL A5 
 LEN7     READW  T,LBUF,CBUFL 
          SB7    B6-LBUF     NUMBER OF WORDS TO WRITE 
          BX0    X1 
          SX2    A5          WRITE FILE FET ADDRESS 
          WRITEW X2,LBUF,B7 
          ZR     X0,LEN7     IF NOT END OF RECORD 
          EVICT  T           RETURN LENGTH FILE SPACE 
          SX7    0
          SA7    SVLC        RESET SEARCH POINTER 
          JP     SET2 
  
 LEN8     WRITEC O,(=C* IMPROPER TRUNCATION.*)
          JP     MAIN 
  
 CTO      CON    NLR
          BSS    NLR
          CON    0
 LINE     EJECT 
***       LINE (LN) - LIST LINE NUMBER. 
* 
*         INDICATE LINE NUMBER ASSOCIATED WITH SEARCH POINTER.
  
  
 LINE     BSS    0
          SA2    SVLC 
          SX0    1L.&3L 
          SA5    EOFTF
          SX1    X2+B1
          RJ     CDD         CONVERT LINE NUMBER
          LX6    18 
          ZR     X5,LIN1     IF LAST LINE ON FILE 
          BX6    X6-X0
 LIN1     SA6    LNMA        SET NUMBER IN MESSAGE
          WRITEC O,LNM
          JP     MAIN 
  
  
 LNM      DATA   20H FILE AT LINE NUMBER
 LNMA     BSS    1
  
 EFM      DATA   C* -END OF FILE-*
 LISTAB   EJECT 
***       LISTAB (LT) - LIST TAB STOPS. 
  
  
 LISTAB   BSS    0
          SA1    TTBL        FIRST TAB COLUMN 
          SA0    TSM+1
 LTB1     ZR     X1,LTB3     IF NO TAB STOPS
          RJ     CDD
          MX0    30 
          BX5    -X0*X6 
          SA1    A1+B1       READ NEXT TAB COLUMN 
          LX5    30 
          ZR     X1,LTB2     IF END OF TABLE
          RJ     CDD
          BX6    -X0*X6 
          BX7    X5+X6
          SA1    A1+B1
          SA7    A0          STORE CONVERTED VALUES IN MESSAGE
          BX5    X5-X5
          SA0    A0+B1
          NZ     X1,LTB1     IF NOT END OF TABLE
 LTB2     BX7    X5 
          SA7    A0 
          WRITEC O,TSM       LIST TAB STOPS 
          JP     MAIN 
  
 LTB3     SA5    LTBA 
          EQ     LTB2 
  
  
 LTBA     DATA   L* NONE.*
  
 TSM      DATA   10H TAB STOPS
          BSS    TTBLL/2+1
 MERGE    EJECT 
***       MERGE (M) - MERGE FILES.
* 
*         MERGES A SECONDARY FILE INTO THE FILE BEING EDITED. THE 
*         SECONDARY FILE NAME IS PASSED IN /P1/. IF MERGING IS
*         RELATIVE TO A SPECIFIC CHARACTER STRING, THE STRING OF
*         INTEREST IS GIVEN IN /P2/. MERGING OCCURS AFTER THE NTH 
*         LINE OR AFTER THE NTH LINE CONTAINING /P2/. 
  
  
 MERGE    BSS    0
          ZR     X3,MAINX    IF MERGE FILE NAME NOT GIVEN 
          SB2    X3-1 
          AX3    24          POSITION CHARACTER COUNT 
          SB5    60 
          BX6    X6-X6       CLEAR ACCUMULATOR
          SB6    X3+B2
 MRG1     RJ     ANC         ASSEMBLE NEXT CHARACTER
          ZR     X4,MRG10    IF NOT ALPHANUMERIC CHARACTER
          SX1    X4-1R+ 
          PL     X1,MRG10    IF NOT ALPHANUMERIC CHARACTER
          SX1    X3-74B 
          ZR     X1,MRG10    IF 74B ESCAPE CODE 
          LX6    6
          BX6    X6+X4       ADD CHARACTER TO ACCUMULATOR 
          SB5    B5-6 
          LT     B2,B6,MRG1  IF DELIMITER NOT REACHED 
          LX4    B5,X6
          MX7    -18
          SA3    B0          CLEAR FET ADDRESS
          BX3    -X7*X4 
          NZ     X3,MRG10    IF NAME > 7 CHARACTERS 
          RJ     CRN
          ZR     X7,MRG10.1  IF FILE NAME RESERVED
          RETURN M,R
          SX1    B1          BUSY FLAG OFF
          BX6    X4+X1
          MX3    5
          SA6    X2          SET FILE NAME IN FET 
          STATUS X2 
          LX3    5+1
          SA1    X2 
          BX7    X3*X1       EXTRACT STATUS FIELD 
          LX3    9
          NZ     X7,MRG3     IF FILE LOCAL
          GET    X2 
          SA4    X2 
          BX7    X3*X4
          ZR     X7,MRG4     IF PERMANENT FILE
 MRG2     WRITEC O,(=C* MERGE ERROR, SECONDARY FILE EMPTY.*)
          SB4    MAIN        SET TRANSFER 
          EQ     MRG9 
  
 MRG3     REWIND X2 
 MRG4     READ   X2          INITIATE READ ON MERGE FILE
          READC  X2,TBUF,LBUFL
          NZ     X1,MRG2     IF MERGE FILE EMPTY
          SA4    STPHR2 
          ZR     X4,MRG6     IF NO STRING FIELD 
          SA2    EOFTF
          SX0    0
          ZR     X2,LTL11    IF EDIT FILE AT EOI
          SA1    NUM
          SX6    X1-377776B 
          NZ     X6,MRG5     IF NOT ASTERISK
          SA1    STPHR2      SET UP STRING POINTERS 
          BX6    X1 
          SA6    STPHR1 
          BX7    X7-X7
          SA6    MRGA 
          SA7    STPHR2 
          RJ     CST         COUNT STINGS 
          SA1    MRGA        RESTORE STRING POINTER 
          BX0    X0-X0
          LX6    X1 
          SA6    STPHR2 
 MRG5     SX6    STPHR2 
          SX1    B0+         BEGIN SEARCH AT START OF CURRENT LINE
          RJ     SFS
          ZR     X7,MRG11    IF END OF INFORMATION
          SA3    SEC
          SX7    X3+1        ADVANCE OPERATION COUNT
          SX0    B1+
          SA7    A3+
          INTRPT MRG6        PROCESS TERMINAL INTERRUPT 
          NZ     X7,MRG5     IF STRING NOT FOUND
 MRG6     SA3    EOFTF
          ZR     X3,MRG7     IF POSITIONED AT EOI 
          BX2    X0 
          RJ     AFW         POSITION TEXT FILES FOR MERGE
 MRG7     WRITEC A5+,TBUF 
 MRG8     READW  M,TBUF,100B
          SB7    B6-TBUF     SET WORD COUNT 
          BX0    X1 
          SX2    A5          WRITE FILE FET ADDRESS 
          WRITEW X2,TBUF,B7 
          ZR     X0,MRG8     IF NOT END OF DATA 
          SB4    SET2 
 MRG9     SX2    3RSCR
          BX7    X7-X7       CLEAR LINE COUNT 
          SX1    B1 
          LX2    60-18       RESTORE NAME IN FET TO *SCR* 
          SA7    M+5
          BX6    X2+X1
          SA6    M
          JP     B4 
  
 MRG10    SB6    =C* INCORRECT FILE NAME.*
 MRG10.1  WRITEC O,B6 
          EQ     MAIN        PROCESS NEXT COMMAND 
  
 MRG11    SB4    RPS11       SET RETURN 
          EQ     MRG9 
  
  
 MRGA     CON    0
 RESET    EJECT 
***       RESET (R) - RESET SEARCH POINTER. 
* 
*         THE SEARCH POINTER IS SET TO THE FIRST LINE OF THE FILE.
  
  
 RESET    BSS    0
          BX3    X3-X3
          SX6    B0          CLEAR SEARCH POINTER 
          EQ     SET1 
 SET      EJECT 
***       SET (S) - REDEFINE SEARCH POINTER.
* 
*         MOVES THE SEARCH POINTER AHEAD OR BACK DEPENDING ON 
*         POSITIVE OR NEGATIVE N. IT MAY ALSO BE SET TO THE NTH LINE
*         CONTAINING /P1/, HOWEVER, N MUST BE POSITIVE. 
  
  
 SET      BSS    0
          ZR     B7,SET5     IF LINE ADVANCE POSITIVE 
          SA4    SVLC 
          IX6    X4-X0
          PL     X6,SET1     IF SET COUNT IN RANGE
          BX6    X6-X6
 SET1     NZ     X3,MAINX    IF INCORRECT STRING FIELD
          SA6    SVLC 
 SET2     RJ     CPY
          SA2    SVLC        GET SEARCH POINTER 
          SX6    B1 
          BX7    X2 
          SA6    X5+5        INITIALIZE READ FILE LINE POSITION 
          SA7    A5+5 
          NZ     X1,SET4     IF EOR 
          SA6    EOFTF       CLEAR EOI FLAG 
          RJ     AFW
 SET3     SA1    FBB
          MX2    56 
          BX3    X2*X1       ASSURE NEXT READ FROM SAME FILE
          SX4    X5-F 
          IX6    X4+X3       RESET READ FILE BIAS 
          SA6    A1 
 SET4     SA4    EOFTF
          ZR     X4,LTL11    IF FILE POSITIONED AT EOF
          JP     MAIN 
  
 SET5     SA4    EOFTF
          ZR     X4,LTL11    IF FILE POSITIONED AT EOF
          LX7    X2 
          BX0    X0-X0
          SA7    LCTB 
          ZR     X3,SET6     IF NO STRING FIELD 
          SX6    B1 
          SA6    A3-B1       SET LINE MODE
          RJ     CST
          SA1    NUM
          RJ     GSM
 SET6     SA2    LCTB 
          RJ     AFW         ADVANCE FILES
 SET7     SA2    LCTB 
          IX6    X2-X0
          SA6    A2 
 SET8     SA2    LCTB 
          SA3    SVLC 
          IX6    X2+X3       REDEFINE SEARCH POINTER
          SA6    A5+5 
          SA6    A3 
          EQ     SET3 
 TABS     EJECT 
***       TABS (T) - SET TAB COLUMNS. 
* 
*         SET TAB STOPS AS SPECIFIED IN /P1/. SEE DEFTAB. 
  
  
 TABS     BSS    0
          SB4    X3 
          SB7    B0 
          ZR     B4,TBS4     IF TAB STOPS TO BE CLEARED 
          AX3    24 
          SB6    X3+B4       SET END OF STRING
 TBS1     SA1    B4 
          SB4    B4+B1       ADVANCE STRING BUFFER ADDRESS
          SX2    X1-1R, 
          ZR     X2,TBS2     IF END OF TAB
          SX3    X1-1R0 
          NG     X3,TBS5     IF CHARACTER ALPHABETIC
          SX2    X1-1R9-1 
          PL     X2,TBS5     IF CHARACTER NOT NUMERIC 
          LX6    X7,B1
          LX7    3
          IX7    X6+X7       ASSEMBLE TAB VALUE 
          IX7    X7+X3
          NE     B4,B6,TBS1  IF NOT END OF STRING 
 TBS2     SX4    X7-TABCL 
          PL     X4,TBS5     IF TAB VALUE TOO LARGE 
 TBS3     SA7    B7+TTBL
          SB7    B7+B1
          BX7    X7-X7       CLEAR ASSEMBLY 
          SX0    B7-TTBLL 
          EQ     B4,B6,TBS4  IF END OF INPUT
          NG     X0,TBS1     IF NOT MAX TAB COUNT 
  
 TBS4     SA7    B7+TTBL     SET TERMINATOR IN TAB TABLE
          JP     MAIN 
  
 TBS5     SX6    0
          SA6    B7+TTBL     TERMINATE TAB TABLE
          JP     MAINX
 WIDTH    EJECT 
***       WIDTH (W) - SET LINE WIDTH. 
* 
*         DEFINES A COLUMN AT WHICH LINE ASSEMBLY WILL TERMINATE. 
*         USED IN CONNECTION WITH ALIGN.
  
  
 WIDTH    BSS    0
          SX2    X0-MAXWD-1 
          PL     X2,MAINX    IF WIDTH TOO LARGE 
          SX3    X0-MINWD 
          NG     X3,MAINX    IF WIDTH TOO SMALL 
          SX7    X0+
          SA7    WDTH        SET NEW WIDTH
          JP     MAIN 
          TITLE  UTILITY ROUTINES.
 ANC      SPACE 
**        ANC - ASSEMBLE NEXT CHARACTER.
* 
*         PRESET REPLACES ANCA CODE WITH ANCB CODE IF ASCII MODE
*         SPECIFIED.
* 
*         ENTRY  (B2) = PREVIOUS CHARACTER ADDRESS. 
*                (B6) = LWA+1 OF CHARACTER BUFFER.
* 
*         EXIT   (B2) = CURRENT CHARACTER ADDRESS.
*                (B6) = LWA+1 OF CHARACTER BUFFER.
*                (X2) = TOTAL CHARACTER (6 OR 12 BITS), 
*                       RIGHT-JUSTIFIED.
*                (X3) = UPPER 6 BITS OF 12 BIT ASCII CHARACTER, 
*                       RIGHT-JUSTIFIED, ZERO OTHERWISE.
*                (X4) = LOWER 6 BITS OF CHARACTER, RIGHT-JUSTIFIED. 
* 
*         USES   A - 2, 4.
*                B - 2. 
*                X - 1, 2, 3, 4.
  
  
 ANC      SUBR               ENTRY/EXIT 
          SB2    B2+B1       ADVANCE CHARACTER ADDRESS
          SA2    B2 
          BX4    X2 
          BX3    X3-X3
 ANCA     EQ     ANCX        RETURN - NOT ASCII MODE
*         EQ     B2,B6,ANCX  (ASCII MODE) 
*         SX1    X4-76B      (ASCII MODE) 
          ZR     X1,ANC1     IF 76B ESCAPE CODE 
          SX1    X4-74B 
          NZ     X1,ANCX     IF NOT 74B ESCAPE CODE 
 ANC1     BX3    X4 
          SB2    B2+B1       ADVANCE CHARACTER ADDRESS
          SA4    B2 
          LX2    6
          BX2    X4+X2
          EQ     ANCX        RETURN - ASCII MODE
  
 ANCB     EQ     B2,B6,ANCX  IF END OF LINE 
          SX1    X4-76B 
 AFW      SPACE  4,9
**        AFW - ADVANCE FILES AND WRITE.
* 
*         ENTRY  (X2) = NUMBER LINES TO ADVANCE.
* 
*         USES   A - 1, 3, 4, 6, 7. 
*                B - 6. 
*                X - ALL. 
* 
*         CALLS  RDC=, WTC=.
  
  
 AFW3     SX6    B6 
          SA3    TBL
          SA6    A3-B1       SET END OF LINE ADDRESS
          SA4    X5+5 
          IX7    X4+X3       ADVANCE READ FILE LINE POINTER 
          SA7    A4 
  
 AFW      SUBR               ENTRY/EXIT 
          ZR     X2,AFWX     IF LINE ADVANCE ZERO 
          SA4    LBL
          BX7    X2 
          SB6    X4          SET EOL ADDRESS FOR CURRENT LINE 
          LX0    X2 
          SA7    A4+B1       SAVE LINE ADVANCE
 AFW1     ZR     X0,AFW3     IF FILE POSITIONING COMPLETE 
          WRITEC A5,LBUF
 AFW2     READC  X5,LBUF,LBUFL
          SX0    X0-1 
          ZR     X1,AFW1     IF NOT END OF DATA 
          SX0    X0+B1
          SX7    X0 
          SA3    TBL
          IX2    X3-X0       NUMBER LINES ADVANCED
          SA1    X5+5 
          SA7    A3 
          IX6    X1+X2       BUMP READ FILE LINE POINTER
          SA4    PFADR
          SA6    A1 
          BX7    X4-X5
          BX5    X4 
          SA1    FBB         TEXT FILE BECOMES NEW READ FILE
          MX2    56 
          BX1    X2*X1
          SX2    X5-F        READ FILE BIAS 
          BX6    X1+X2
          SA6    A1          UPDATE WRITE/READ FILE BIAS
          NZ     X7,AFW2     IF NOT READING PRIMARY TEXT FILE 
          SX0    X0-1 
          SA7    EOFTF
          EQ     AFWX        RETURN 
 ATF      SPACE  4,9
**        ATF - ADVANCE TEXT FILE.
* 
*         ENTRY  (X2) = NUMBER OF LINES TO ADVANCE. 
* 
*         USES   A - 0, 4, 6, 7.
*                B - 2, 6, 7. 
*                X - 0, 2, 4, 5, 6, 7.
* 
*         CALLS  RDC=.
  
  
 ATF4     SX6    B6+         SAVE END OF LINE ADDRESS 
          SA6    LBL
  
 ATF      SUBR               ENTRY/EXIT 
          BX0    X2 
          ZR     X2,ATFX     IF LINE ADVANCE ZERO 
          SA0    X0 
 ATF1     BX2    X5 
          PL     X0,ATF2     IF NO LINE POINTER MANIPULATION
          BX0    -X0
          SA4    X5+5 
          IX7    X4+X0       BUMP TEXT FILE LINE COUNT
          SA7    A4 
 ATF2     ZR     X0,ATF4     IF ADVANCE COMPLETE
          READC  X2,LBUF,LBUFL
          SX0    X0-1        DECREMENT COUNT
          ZR     X1,ATF2     IF NOT EOR 
          SA4    PFADR
          SX0    X0+B1
          BX7    X4-X5       CHECK EOR ON PRIMARY FILE
          SB2    A0 
          PL     B2,ATF3     IF NO LINE POINTER MANIPULATION
          BX0    -X0
 ATF3     SX5    X4 
          NZ     X7,ATF1     IF NOT PRIMARY TEXT FILE 
          SX0    B0 
          SA7    EOFTF
          EQ     ATFX        RETURN 
 ATL      SPACE  4,11 
**        ATL - ASSEMBLE TABBED LINE. 
* 
*         ENTRY  (B2) = LINE BUFFER ADDRESS.
*                (B4) = CHARACTER BUFFER ADDRESS. 
*                (B6) = END OF DATA IN CHARACTER BUFFER.
* 
*         USES   A - 1, 2, 3, 6, 7. 
*                B - 2, 3, 4, 5, 7. 
*                X - 1, 2, 3, 6, 7. 
* 
*         CALLS  SLT. 
  
  
 ATL8     SX7    B2 
          SB5    B2+B2       FORM SHIFT COUNT 
          LX7    2
          SB5    X7+B5
          SA3    MODE 
          LX7    B5,X6       LEFT JUSTIFY ASSEMBLY
          SA7    A6+B1
          BX6    X6-X6       INSURE END OF LINE 
          SA2    STRB 
          SA6    A7+B1
          SX1    B2-10
          BX1    -X1
          PL     X2,ATL9     IF NOT FINAL DELIMITER 
          ZR     X3,ATLX     IF STRING MODE AND FINAL DELIMITER 
 ATL9     SA2    LBL
          ZR     X1,ATLX     IF EOL ON WORD BOUNDARY
          SX6    A7 
          LX1    24          FORM EOL POINTER 
          BX1    X1+X6
          RJ     SLT         SET LINE TERMINATOR
          SX6    X2+
          SA6    LBL         RESTORE EOL ADDRESS
  
 ATL      SUBR               ENTRY/EXIT 
          SA1    B2-B1
          SA3    TTBL        FIRST TAB COLUMN 
          BX6    X1 
          SB5    B1 
          SA6    A1+         INITIALIZE STORAGE REGISTER
          SA1    TABCH
          SB7    X3 
          BX6    X6-X6       CLEAR ASSEMBLY 
          SB2    10 
          SA4    ASC         ASCII FLAG 
 ATL1     SA2    B4          GET NEXT CHARACTER 
          SB4    B4+B1
          GT     B4,B6,ATL8  IF ASSEMBLY COMPLETE 
          BX7    X2-X1
          ZR     X7,ATL4     IF TAB CHARACTER FOUND 
          ZR     X4,ATL2     IF ASCII FLAG NOT SET
          SX7    X2-76B      CHECK ESCAPE 76
          ZR     X7,ATL3     IF ESCAPE 76 
          SX7    X2-74B      CHECK ESCAPE 74
 ATL2     ZR     X7,ATL3     IF ESCAPE 74 
          SB5    B5+1 
 ATL3     LX6    6           POSITION ASSEMBLY REGISTER 
          SB2    B2-1        DECREMENT CHARACTER COUNT
          BX6    X6+X2
          NZ     B2,ATL1     IF WORD NOT COMPLETE 
          SA6    A6+B1
          BX6    X6-X6       CLEAR ASSEMBLY 
          SB2    10 
          EQ     ATL1 
  
 ATL4     ZR     B7,ATL1     IF ALL TABS PROCESSED
          SX2    1R 
 ATL5     LE     B5,B7,ATL6  IF NOT PAST TAB COLUMN 
          SA3    A3+B1
          SB7    X3 
          ZR     X3,ATL1     IF ALL TABS PROCESSED
          GT     B5,B7,ATL5 
 ATL6     EQ     B5,B7,ATL7  IF TAB COLUMN REACHED
          SB5    B5+B1
          LX6    6           BLANK FILL TO TAB COLUMN 
          SB2    B2-B1
          BX6    X6+X2
          NZ     B2,ATL6     IF WORD NOT COMPLETE 
          SA6    A6+B1
          SB2    10 
          BX6    X6-X6
 ATL7     NE     B5,B7,ATL6 
          SA3    A3+B1
          SB7    X3          GET NEXT TAB VALUE 
          EQ     ATL1 
 BLK      SPACE  4,13 
**        BLK - INSERTS BLANK AFTER COLON AT END OF LINE. 
* 
*         ENTRY  (X1) = END OF LINE POINTER WORD. 
*T        36/ N1,24/ A1.
*         N1 = POSITION +1 (MOD 10) OF LAST CHARACTER IN LINE.
*         A1 = ADDRESS OF WORD CONTAINING *N1*. 
* 
*         EXIT   (X1) = END OF LINE POINTER WORD, UPDATED IF NECESSARY. 
*                (B6) = NUMBER OF BLANKS ADDED. 
* 
*         USES   A - 3, 4, 7. 
*                B - 2, 3, 4, 5, 6. 
*                X - 1, 3, 4, 7.
  
  
 BLK1     SA4    A3-1        GET PREVIOUS WORD
 BLK2     MX7    -6 
          BX7    -X7*X4 
          NZ     X7,BLKX     IF LAST CHARACTER NOT *00* 
          MX7    -54
          BX4    -X7*X3      INSERT BLANK AFTER *00* CHARACTER
          SX7    1R 
          LX7    54 
          BX7    X7+X4
          SB2    B4-B2       SHIFT COUNT
          LX7    B2,X7       REPOSITION WORD
          SB5    10 
          SA7    A3 
          SB3    B3+B1       INCREMENT CHARACTER POSITION 
          NE     B3,B5,BLK3  IF NOT FULL WORD 
          SB3    B0 
          SA3    A3+B1
 BLK3     SX1    B3 
          LX1    24 
          SX4    A3          ADDRESS OF NEW END OF LINE WORD
          BX1    X1+X4       FORM NEW END OF LINE POINTER WORD
          SB6    1
  
 BLK      SUBR               ENTRY/EXIT 
          SB6    B0 
          MX4    -59
          BX4    -X4*X1 
          SA3    X4          ADDRESS OF END OF LINE WORD
          AX4    24          POSITION +1 (MOD 10) OF LAST CHARACTER 
          SB2    B0 
          SB4    60 
          SB3    X4 
          ZR     B3,BLK1     IF LAST CHARACTER IS IN PREVIOUS WORD
          SB2    B3+B3       FORM SHIFT COUNT 
          LX4    2
          SB2    X4+B2       CHARACTER POSITION * 6 
          LX3    B2,X3       RIGHT JUSTIFY LAST CHARACTER 
          BX4    X3 
          EQ     BLK2 
 BSP      SPACE  4,10 
**        BSP - BACKSPACE POINTER.
* 
*         ENTRY  (X1) = POINTER WORD TO BE BACKSPACED.
*                (X4) = NUMBER OF POSITIONS TO BACKSPACE. 
* 
*         EXIT   (X1) = UPDATED POINTER WORD. 
* 
*         USES   A - NONE.
*                B - 2. 
*                X - 1, 3.
  
  
 BSP      SUBR               ENTRY/EXIT 
          SB2    X4+
          LE     B2,BSPX     IF NO BACKSPACE
          MX3    1
          BX1    -X3*X1 
          SX3    X1 
          AX1    24 
 BSP1     SX1    X1-1 
          PL     X1,BSP2     IF NOT ON WORD BOUNDARY
          SX1    9
          SX3    X3-1 
 BSP2     SB2    B2-B1
          GT     B2,BSP1     IF MORE POSITIONS TO BACKSPACE 
          LX1    24 
          BX1    X1+X3       FORM NEW POINTER WORD
          EQ     BSPX        RETURN - POINTER UPDATED 
 CAC      SPACE  4,10 
**        CAC - COUNT ASCII CHARACTERS. 
* 
*         ENTRY  (X1) = FIRST CHARACTER POINTER WORD. 
*                (X4) = LAST CHARACTER POINTER WORD.
* 
*         EXIT   (B4) = NUMBER OF ASCII CHARACTERS FOUND. 
* 
*         USES   A - 2, 3.
*                B - 3, 4, 5, 6, 7. 
*                X - 2, 3, 6, 7.
  
  
 CAC      SUBR               ENTRY/EXIT 
          SB3    TCHM 
          SB4    B0          INITIALIZE ASCII CHARACTER COUNTER 
          SB6    X1          FWA OF ASCII STRING
          SB7    X4          LWA OF ASCII STRING
          SB5    24 
          AX2    X4,B5       LAST CHARACTER POSITION + 1
          SA3    B3+X2       MASK FOR LAST WORD 
          SA2    B7          GET LAST WORD
          BX7    X3*X2       CLEAR UNWANTED DATA
          AX2    X1,B5       FIRST CHARACTER POSITION 
          SA3    B3+X2       MASK FOR FIRST WORD
          SA2    B6+         GET FIRST WORD 
          BX2    -X3*X2      CLEAR UNWANTED DATA
          NE     B6,B7,CAC1  IF STRING NOT WITHIN ONE WORD
          BX2    X2*X7
          BX7    X7-X7
 CAC1     CX6    X3 
          SB5    X6 
          LX2    B5          LEFT-JUSTIFY REMAINING CHARACTERS
          MX6    -6 
 CAC2     LX2    6
          BX3    -X6*X2      ISOLATE CHARACTER
          BX2    X2-X3       CLEAR CHARACTER FROM WORD
          SX3    X3-76B 
          ZR     X3,CAC3     IF 76B ESCAPE CODE 
          SX3    X3+76B-74B 
          NZ     X3,CAC5     IF NOT 74B ESCAPE CODE 
 CAC3     SB4    B4+B1
          NZ     X2,CAC4     IF LOWER 6 BITS OF CHARACTER IN SAME WORD
          SB6    B6+B1
          SA2    B6 
          LT     B6,B7,CAC4  IF NOT LAST WORD 
          BX2    X7 
 CAC4     LX2    6
          BX2    X6*X2       CLEAR LOWER 6 BITS OF CHARACTER FROM WORD
 CAC5     NZ     X2,CAC2     IF WORD NOT UNPACKED 
          SB6    B6+1 
          SA2    B6 
          LT     B6,B7,CAC2  IF NOT LAST WORD 
          BX2    X7 
          EQ     B6,B7,CAC2  IF LAST WORD 
          EQ     CACX        RETURN 
 CFC      SPACE  4,12 
**        CFC - CHECK FOR COLON.
* 
*         ENTRY  (X2) = CURRENT CHARACTER.
* 
*         EXIT   (X3) - FINAL COMPARISON. 
* 
*         USES   X - 1, 3.
*                A - 1. 
  
  
 CFC1     BX3    X3-X2       COMPARE
  
 CFC      SUBR               ENTRY/EXIT 
          SA1    CSMR        SYSTEM CHARACTER SET MODE
          SX3    63B         COLON FOR 63 CHARACTER SET SYSTEM
          PL     X1,CFC1     IF 63 CHARACTER SET SYSTEM 
          SA1    ASC         CHECK ASCII FLAG 
          SX3    B0          64 CHARACTER SET COLON 
          ZR     X1,CFC1     IF NOT ASCII MODE
          SX3    7404B       64 CHARACTER SET ASCII COLON 
          EQ     CFC1        COMPARE ON 64 CHARACTER SET COLON
 CPY      SPACE  4,7
**        CPY - REPOSITION TEXT FILES.
* 
*         USES   A - 1, 5, 6, 7.
*                B - 6, 7.
*                X - ALL. 
* 
*         CALLS  CIO=, RDC=, RDW=, WTC=, WTW=.
  
  
 CPY3     WRITEC A5+,LBUF    DUMP LINE BUFFER 
          SX1    A5-F 
          SX2    X5-F        UNUSED FILE BECOMES NEXT WRITE FILE
          IX3    X1+X2
          SX4    X3-21
          BX2    -X4         RELATIVE FET OF UNUSED FILE
          SA5    X2+F 
          SX5    X1+F        OLD WRITE FILE IS NEXT READ FILE 
 CPY4     SX2    A5-F 
          SX1    X5-F        READ FILE BIAS 
          LX2    4
          IX7    X2+X1       MERGE FILE BIAS BITS 
          SA7    FBB
          REWIND A5+
          WRITER X5+         FLUSH BUFFER 
          REWIND X2 
          READ   X2 
          READC  X2,LBUF,LBUFL
          SX6    B6+
          SA6    LBL
  
 CPY      SUBR               ENTRY/EXIT 
          SA1    PFADR
          BX3    X1-X5       CHECK - READ FILE IS PRIMARY FILE
          SX7    A5 
          NZ     X3,CPY1     IF SECONDARY TEXT FILE 
          SA1    EOFTF
          NZ     X1,CPY3     IF NOT AT END OF PRIMARY FILE
          SA7    PFADR
          SA5    X5          SET NEW WRITE FILE 
          SX5    X7 
          EQ     CPY4 
  
 CPY1     WRITEC A5+,LBUF    WRITE LINE BUFFER
 CPY2     READW  X5,LBUF,CBUFL
          SB7    B6-LBUF     NUMBER WORDS TO WRITE
          BX0    X1 
          SX2    A5          WRITE FILE FET ADDRESS 
          WRITEW X2,LBUF,B7 
          ZR     X0,CPY2     IF NOT END OF RECORD 
          SX2    A5 
          SA5    X5          SWAP READ/WRITE FILES
          SX5    X2+
          EQ     CPY4 
 CRN      SPACE  4,11 
**        CRN - CHECK RESERVED FILE NAME. 
* 
*         ENTRY  (X4) = LEFT JUSTIFIED FILE NAME. 
*                (A3) = FET ADDRESS OF FILE BEING CHECKED.
* 
*         EXIT   (X7) = 0  IF FILE NAME RESERVED. 
*                (B6) = ERROR MESSAGE ADDRESS, IF FILE NAME RESERVED. 
* 
*         USES   A - 1. 
*                B - 2, 3, 4, 5, 6. 
*                X - 1, 2, 3, 7.
  
  
 CRN      SUBR               ENTRY/EXIT 
          SB4    FETL 
          SB2    F-FETL      SET FWA OF RESERVE FILE FETS 
          SB5    A3          SET CURRENT FET ADDRESS
          SB3    T           SET LWA FOR SEARCH 
          MX3    42 
 CRN1     SB2    B2+B4       SET NEXT FET ADDRESS 
          EQ     B2,B5,CRN1  IF CURRENT FET 
          GT     B2,B3,CRNX  IF SEARCH COMPLETE 
          SA1    B2          SET FILE NAME
          BX2    X3*X1
          BX7    X2-X4
          NZ     X7,CRN1     IF NO MATCH
          SB6    CRNA        * RESERVED FILE NAME.* 
          EQ     CRNX        RETURN 
  
  
 CRNA     DATA   C* RESERVED FILE NAME.*
 CST      SPACE  4,7
**        CST - COUNT STRINGS.
* 
*         USES   A - 2, 3, 4, 6, 7. 
*                B - 6. 
*                X - 0, 2, 3, 4, 6, 7.
* 
*         CALLS  RTF, SRO, WTC=.
  
  
*         COUNT SIMPLE STRINGS  /P1/. 
  
 CST6     SA2    LCTB        SET LINE COUNT TO STRING 
          SA3    SEC
          SX6    X2+B2
          SX7    X3+B1       DECREMENT SEARCH COUNT 
          SA6    A2 
          SA7    A3 
 CST7     ZR     X7,CST8     IF ALL STRINGS FOUND 
          SX0    *
          SX6    STPHR1      SEARCH FOR NEXT OCCURRENCE OF STRING 
          RJ     SRO
 CST8     NZ     X7,CST6     IF STRING FOUND
          SA2    SEC
          SA3    A2-B1       DETERMINE NUMBER PHRASES FOUND 
          IX7    X3+X2
          ZR     X7,CST1     IF NO ELLIPSI FOUND
          BX6    -X7
          NZ     X2,CST9     IF ALL NOT FOUND 
          SX7    B0 
 CST9     SA6    A2 
          SA7    A3 
          RJ     RTF         REPOSITION FILES 
  
 CST      SUBR               ENTRY/EXIT 
          SX6    STPHR1 
          RJ     SRO
 CST1     NZ     X7,CST2     IF /P1/ FOUND
          RJ     RTF
          WRITEC O,NPM
          JP     MAIN 
  
 CST2     SX6    B2 
          BX7    X7-X7
          SA6    LCT         LINE COUNT TO FIRST OCCURRENCE OF /P1/ 
          SA7    LCTT 
          SA6    A7+B1
          SA7    A7-B1
          SA3    MODE 
          SA4    STPHR2 
          ZR     X3,CST3     IF STRING MODE 
          SX3    1
 CST3     SA2    A7-B1
          BX6    X2+X3       SET CALL TO *SRO*
          SA6    CST7 
          ZR     X4,CST6     IF COUNTING SIMPLE STRINGS 
          SA6    CST5 
  
*         COUNT ELLIPSI  /P1/,/P2/. 
  
 CST4     SA2    LCTT 
          SX7    X2+B2       LINE COUNT TO PHRASE STARTING ELLIPSIS 
          SA7    A2+B1
          SX6    STPHR2      SEARCH FOR PHRASE ENDING ELLIPSIS
          RJ     SRO
          ZR     X7,CST8     IF PHRASE NOT FOUND
          SA2    LCTX 
          SX6    X2+B2       LINE COUNT TO PHRASE ENDING ELLIPSIS 
          BX7    X2 
          SA6    A2-B1
          SA7    A6-B1
          SA3    SEC
          SX7    X3+B1       DECREMENT SEARCH COUNT 
          SA7    A3 
 CST5     ZR     X7,CST8     IF ALL ELLIPSI FOUND 
          SX0    *
          SX6    STPHR1      SEARCH FOR PHRASE STARTING ELLIPSIS
          RJ     SRO
          NZ     X7,CST4     IF PHRASE FOUND
          EQ     CST8 
  
  
 CSTA     ZR     X7,CST8
          SX0    0
 LCTB     BSS    3
 LCTT     EQU    LCTB+1 
 LCTX     EQU    LCTT+1 
 CTI      SPACE  4
**        CTI - CHECK TERMINAL INTERRUPTS.
* 
*         ENTRY  (TINT) = TERMINAL INTERRUPT INDICATOR. 
* 
*         EXIT   (X3) .NE. 0 IF TERMINAL INTERRUPT. 
*                (X6) .NE. 0 IF INTERRUPT PENDING.
* 
*         USES   A - 3, 6.
*                X - 3, 6.
*                EOR/EOF/EOI STATUS IS X1 PRESERVED.
  
  
 CTI      SUBR               ENTRY/EXIT 
          BX6    X1          SAVE X1
          SA3    TINT        RESET INTERRUPT INDICATOR
          SA1    INTP        SET INTERRUPT PENDING
          BX3    X1+X3
          LX1    X6          RESTORE X1 
          BX6    X6-X6
          SA6    A3 
          BX6    X3 
          SA6    A1 
          EQ     CTIX 
 CTL      SPACE  4,8
**        CTL - COMPRESS TEXT LEFT. 
* 
*         ENTRY  (X1) = DESTINATION POINTER WORD. 
*                (X2) = SOURCE POINTER WORD.
*                (B6) = LWA DESTINATION BUFFER. 
*                (B6) = 0, IF NO DESTINATION BUFFER LIMIT.
* 
*         USES   A - 3, 4, 6, 7.
*                B - 2, 3, 4, 5, 6, 7.
*                X - 1, 2, 3, 4, 6, 7.
  
  
 CTL3     EQ     B3,B7,CTL9  IF PACKING COMPLETE
          SB4    B4-10
          SA3    B3 
          SB3    B3+B1       ADVANCE SOURCE ADDRESS 
          NZ     X3,CTL4     IF NOT ZERO WORD 
          PL     X3,CTL9     IF END OF LINE 
 CTL4     ZR     B4,CTL7     IF LAST CHARACTER IS *00*
          SB4    B0+
 CTL5     LX3    6           POSITION NEXT CHARACTER
          BX4    -X7*X3 
          SB4    B4+1        INCREMENT SOURCE CHARACTER COUNT 
          NZ     X3,CTL6     IF NOT ZERO WORD 
          PL     X3,CTL3     IF WORD UNPACKED 
 CTL6     BX3    X3-X4
 CTL7     LX6    6
          SB5    B5+1        INCREMENT CHARACTER COUNT
          BX6    X6+X4
          LT     B5,B6,CTL5  IF NOT FULL WORD 
          SX2    B6-7 
          ZR     X2,CTL9     IF AT DESTINATION BUFFER LIMIT 
          SA6    B2+
          SB5    B0+
          BX6    X6-X6       CLEAR ASSEMBLY 
          SB2    B2+B1
 CTL8     ZR     X1,CTL5     IF NO DESTINATION BUFFER LIMIT 
          SX2    B2 
          IX2    X1-X2
          NZ     X2,CTL5     IF NOT AT LWA DESTINATION BUFFER 
          SB6    7
          SX2    B1 
          LT     B5,B6,CTL5  IF BUFFER NOT COMPLETELY FULL
          SX2    B0 
 CTL9     SX1    B5+
          SB6    10 
          LX1    24 
          ZR     B5,CTL10    IF LAST WORD FULL
 +        LX6    6
          SB5    B5+B1
          NE     B5,B6,*     LEFT JUSTIFY ASSEMBLY
 CTL10    SA6    B2+
          SX4    A6 
          BX7    X1+X4       MERGE CHARACTER POSITION AND ADDRESS 
          MX3    -12
          SA7    SLP         STORE EOL POINTER
          BX4    -X3*X6 
          ZR     X4,CTL11    IF EOL BYTE
          BX6    X6-X6
          SA6    A6+B1       SET END OF LINE
 CTL11    SX7    A6+1 
          SA1    SLP
          SA7    LBL         STORE EOL ADDRESS
          ZR     X2,CTL1     IF SOURCE LINE TRUNCATED 
  
 CTL      SUBR               ENTRY/EXIT 
          PL     X2,CTL2     IF NOT END OF LINE 
 CTL1     RJ     SLT         SET LINE TERMINATOR
          SX4    A6+
          MX3    1           FORM EOL POINTER 
          BX6    X3+X4
          SA6    SLP
          EQ     CTLX        RETURN 
  
 CTL2     SB2    X1          SET DESTINATION ADDRESS
          AX1    24 
          SA4    X1+TCHM     READ LEFT MASK 
          SA3    B2 
          SB5    X1 
          BX6    X4*X3       REMOVE UNWANTED CHARACTER DATA 
          CX1    X4 
          SB4    X1          SET SHIFT COUNT
          LX6    B4,X6
          SB3    X2+B1       SET SOURCE ADDRESS 
          AX2    24 
          SA3    B3-B1
          SA4    X2+TCHM     READ RIGHT MASK
          BX3    -X4*X3 
          CX1    X4 
          SB4    X1          SET SHIFT COUNT
          SX1    B6          DESTINATION BUFFER LIMIT 
          LX3    B4,X3       POSITION SOURCE DATA 
          SB6    10 
          SA4    LBL
          MX7    -6 
          SB7    X4          SET EOL ADDRESS
          SB4    X2          SOURCE CHARACTER COUNT 
          SX2    B1 
          EQ     CTL8 
 ETX      SPACE  4,10 
**        ETX - PROCESS TEXT ENTRY. 
* 
*         EXIT   (X2) = TEXT DATA FET ADDRESS.
*                (A6) = ADDRESS OF BUFFER STATUS WORD.
* 
*         USES   A - 0, 1, 2, 3, 4, 6, 7. 
*                B - 2, 4, 5, 6, 7. 
*                X - 0, 1, 2, 3, 4, 6, 7. 
* 
*         CALLS  ATL, CIO=, RDS=, WTC=. 
  
  
 ETX13    READS  I,STRA,-STRBL
          RJ     CTI         CHECK TERMINAL INTERRUPT 
          NZ     X3,ETX9     IF INTERRUPTED 
          NZ     X1,ETX8     IF NULL INPUT
          SB4    STRA 
 ETX14    SA3    A0+         GET DELIMITER
          SA4    B6-B1       GET LAST CHARACTER 
          SB5    A4-B1
 ETX15    SX6    X4-1R
          NZ     X6,ETX16    IF NOT BLANK 
          SB6    B6-B1
          LE     B6,B4,ETX2  IF BLANK LINE
          SA4    B6-B1       GET LAST CHARACTER 
          EQ     B5,B6,ETX16 IF TWO BLANKS SKIPPED
          ZR     X3,ETX15    IF DELIMITER *00*
 ETX16    SB2    B6-1 
          SA1    ASC
          ZR     X1,ETX18    IF NOT ASCII CHARACTER SET 
          LE     B2,B4,ETX18 IF AT BEGINING OF LINE 
          SA2    B2-B1
          IX6    X1+X2
          ZR     X6,ETX17    IF ESCAPE CODE 76B 
          SX6    X2-74B 
          NZ     X6,ETX18    IF NOT ESCAPE CODE 74B 
 ETX17    SB2    B2-1 
          LX2    6
          BX4    X4+X2
 ETX18    BX6    X3-X4
          NZ     X6,ETX19    IF NOT FINAL DELIMITER 
          MX6    1
          SB6    B2+         BACKSPACE OVER FINAL DELIMITER 
          SA6    A0 
          SA4    B6-B1       GET LAST TEXT CHARACTER
          GE     B4,B6,ETX2  IF FINAL DELIMITER ONLY
          NZ     X4,ETX20    IF LAST CHARACTER NOT *00* 
          SX6    1
          SA6    BAC         BLANK ADDED AFTER COLON PRECEDING DELIMITER
 ETX19    NZ     X4,ETX20    IF LAST CHARACTER NOT *00* 
          SX6    1R 
          SA6    B6+         PRESERVE COLON WITH BLANK
          SB6    B6+1 
 ETX20    SB2    TBUF 
          RJ     ATL         ASSEMBLE TEXT INTO LINE
 ETX21    SX0    X0+1        ADVANCE LINE COUNT 
          WRITEC M,TBUF 
          SA3    A0 
          PL     X3,ETX13    IF NOT END OF INPUT
          BX6    X0 
          SA6    M+5         STORE LINE COUNT 
          WRITER X2          FLUSH BUFFER 
          REWIND X2 
 ETX22    SB6    =C* READY.*
          SA0    M
 ETX23    WRITEC O,B6 
          ZR     X0,ETXX     IF NO INPUT
          READ   A0+,R
          SA3    A0+5        GET LINE COUNT 
          SA4    X2 
          BX0    X3 
          SX6    X4-21B      SET BUFFER STATUS
          SA6    TBST 
  
 ETX      SUBR               ENTRY/EXIT 
          SX0    1
          REWIND M,R         REWIND TEXT FILE 
          SA0    STRB 
          WRITEC O,(=C* ENTER TEXT.*) 
 ETX1     READS  I,STRA,-STRBL
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,ETX9     IF INTERRUPTED 
          BX7    X7-X7
          NZ     X1,ETX5     IF EOF (CR) ON INPUT 
          SB2    A0 
          SA7    BAC         CLEAR BACKSPACE INDICATOR
          RJ     ANC         ASSEMBLE NEXT CHARACTER
          BX6    X2 
          SB4    B2+B1       SET FWA OF CHARACTER BUFFER
          SX1    X2-1R$ 
          ZR     X1,ETX6     IF TEXT IN STRING BUFFER 
          SX1    X2-1R
          ZR     X1,ETX3     IF INCORRECT DELIMITER 
          SX0    B0 
          SA7    B4-B1
          SA7    A7-B1
          SA6    A0 
          NE     B4,B6,ETX14 IF NOT DELIMITER ONLY
 ETX2     SX7    B0+         WRITE BLANK LINE 
          SA7    TBUF 
          EQ     ETX21
  
 ETX3     SA3    JOTY 
          NZ     X3,ETX4     IF NOT INTERACTIVE JOB 
          WRITEC O,(=C* INCORRECT DELIMITER - REENTER TEXT.*) 
          EQ     ETX1 
  
 ETX4     WRITEC O,(=C* INCORRECT DELIMITER.*)
          EQ     MAIN 
  
*         USER SELECTED TEXT ENTERED PREVIOUSLY.
  
 ETX5     SA7    EOFIF       SET EOF ON INPUT 
          EQ     ETX22
  
*         USER SELECTED TEXT IN STRING BUFFER.
  
 ETX6     GE     B4,B6,ETX7    IF STRING BUFFER SYMBOL ONLY 
          SA4    B4 
          SB4    B4+B1
          SX2    X4-1R
          NZ     X2,ETX3     IF INCORRECT DELIMITER 
          LT     B4,B6,ETX3  IF INCORRECT DELIMITER 
 ETX7     SA0    B
          REWIND B,R
          SB6    =C* READY.*
          SA1    XTSB        GET NUMBER OF POSITIONS TO BACKSPACE 
          BX6    X1 
          SA6    BAC
          EQ     ETX23
  
*         INPUT TERMINATED WITH EOF.
  
 ETX8     MX7    1           CLEAR DELIMITER
          BX6    X6-X6
          SA7    A0+
          SA6    EOFIF
          EQ     ETX2 
  
 ETX9     SX6    B6          SAVE INPUT STRING LWA+1
          SA6    ETXA 
 ETX10    WRITEC O,(=C* DISREGARD PREVIOUS TEXT  "CB"*) 
          SB6    CMDB        FWA WORKING BUFFER 
          RJ     PUR         PROCESS USER RESPONSE
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,END      IF INTERRUPT, SIMULATE END 
          NG     X4,ETX12    IF INCORRECT REPONSE 
          NZ     X4,ETX11    PROCESS *YES* RESPONSE 
  
*         TERMINATE TEXT AND PROCESS. 
*         (ENTER ASSUMED TERMINATION DELIMETER AT POINT OF INTERRUPT) 
  
          SA1    ETXA        RESTORE INPUT STRING LWA+1 
          SB6    X1 
          SB4    STRA 
          EQ     ETX8        TERMINATE INPUT
  
 ETX11    BX0    X0-X0
          EQ     ETX22
  
 ETX12    WRITEC O,PCCD      REQUEST *YES* OR *NO* RESPONSE 
          EQ     ETX10
  
  
 ETXA     CON    0           INTERRUPTED INPUT STRING LWA+1 
  
 BAC      CON    0           NUMBER OF POSITIONS TO BACKSPACE 
 GSM      SPACE  4,9
**        GSM - GENERATE STRINGS PROCESSED MESSAGE. 
* 
*         ENTRY  (X1) = NUMBER OF STRINGS PROCESSED.
* 
*         USES   A - 6. 
*                B - 6. 
*                X - 2, 6.
* 
*         CALLS  CDD, WTC=. 
  
  
 GSM1     RJ     CDD         CONVERT NUMBER TO DISPLAY CODE 
          LX6    12 
          SA6    OPM         INSERT VALUE IN MESSAGE
          WRITEC O,A6 
  
 GSM      SUBR               ENTRY/EXIT 
          NZ     X1,GSM1     IF VALID COUNT 
          EQ     GSMX        RETURN 
  
  
 OPM      DATA   C*          OCCURRENCES OF PHRASE FOUND.*
 IBC      SPACE  4,10 
**        IBC - INSERT BLANK CHARACTERS.
* 
*         ENTRY  (X1) = POINTER TO START OF BLANK STRING. 
*                (X4) = POINTER TO END OF BLANK STRING. 
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                B - 2, 3, 4, 6, 7. 
*                X - 1, 2, 3, 4, 6, 7.
* 
*         CALLS  BSP, CAC, CTL, SLT.
  
  
 IBC1     BX7    X4-X1
          SA2    ASC
          SB2    X2 
          ZR     X7,IBCX     IF NO STRING 
          ZR     B2,IBC2     IF NOT ASCII MODE
          RJ     CAC         COUNT ASCII CHARACTERS 
 IBC2     SB6    X1+         FWA OF BLANK STRING
          SB3    TCHM 
          AX1    24 
          BX2    X4          SAVE END OF STRING POINTER 
          SB7    X4+         LWA OF BLANK STRING
          SA3    BLKS 
          AX4    24          NUMBER OF BLANKS FOR LAST WORD 
          SA1    X1+B3
          SA4    X4+B3
          NE     B6,B7,IBC3  IF FWA " LWA 
          BX4    X4-X1
 IBC3     LX7    X3 
          SA3    B6 
          EQ     B6,B7,IBC5  IF STRING WITHIN ONE WORD
          BX6    X1*X3
          SB6    B6+B1
          BX3    -X1*X7 
          BX6    X6+X3       ADD BLANKS TO FIRST WORD 
          SA3    B7 
          SA6    B6-B1
          EQ     B6,B7,IBC5  IF STRING SPANS TWO WORDS
 IBC4     SA7    B6 
          SB6    B6+B1       BLANK BETWEEN FWA AND LWA
          NE     B6,B7,IBC4  IF NOT DONE
 IBC5     BX6    X4*X7
          BX1    -X4*X3      ADD BLANKS TO LAST WORD
          BX6    X6+X1
          SA6    B7          STORE LAST WORD
          ZR     B2,IBCX     IF NOT ASCII MODE
          ZR     B4,IBCX     IF NO ASCII CHARACTERS 
          SX4    B4+
          SA1    LBW
          NG     X1,IBC6     IF LBW AT END OF LINE
          RJ     BSP         BACKSPACE LBW POINTER
          BX6    X1 
          SA6    LBW
 IBC6     BX1    X2 
          RJ     BSP         BACKSPACE END OF STRING POINTER
          SB6    B0 
          RJ     CTL         ELIMINATE EXCESS BLANKS
          SA1    SLP
          RJ     SLT         SET LINE TERMINATOR
  
 IBC      SUBR               ENTRY/EXIT 
          PL     X4,IBC1     IF BLANK STRING NOT AT EOL 
          RJ     SLT         SET LINE TERMINATOR
          EQ     IBCX        RETURN 
 PCC      SPACE  4,12 
**        PCC - PROMPT FOR COMMAND CONTINUANCE. 
* 
*         ENTRY  ((PCCX)-1) = NEGATIVE RETURN ADDRESS.
*                ALL OUTPUT DATA IN THE BUFFER WILL BE ISSUED 
*                PRIOR TO PROMPT MESSAGE. 
* 
*         EXIT   TO NEGATIVE RETURN IF NEGATIVE REPONSE.
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                X - 2, 3, 4, 7.
*                B - ALL. 
*                (REGISTERS X0, X1, X6 ARE SAVED/RESTORED)
* 
*         CALLS  CTI, PUR, RSR, SVR, WTC=.
  
  
 PCC3     RJ     RSR         RESTORE WORKING REGISTERS
  
 PCC      SUBR
          SA3    TINT        CHEC TEMINAL INTERRUPTS
          ZR     X3,PCCX     IF NO INTERRUPT
          RJ     SVR         SAVE WORKING REGISTERS 
          RJ     CTI         CLEAR TERMINAL INTERRUPT 
          SA3    NUM         CALCULATE CURRENT POSITION 
          SA2    A3+B1
          IX1    X3+X2
          SA2    SVLC        SET LINE NUMBER
          SX0    1L.&3L 
          SX3    X2+B1
          IX1    X3+X1
          RJ     CDD
          LX6    18 
          BX6    X6-X0
          SA6    PCCB 
          WRITEC O,PCCA 
 PCC1     WRITEC O,(=C* COMMAND CONTINUE "CB"*) 
          SB6    CMDB        FWA WORKING BUFFER 
          RJ     PUR         PROCESS USER RESPONCE
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NG     X4,PCC2     IF INCORRECT REPONSE 
          NZ     X4,PCC3     IF COMMAND TO CONTINUE 
          SA4    PCCX        SET NEGATIVE RETURN ADDRESS
          AX4    30 
          MX0    42 
          SA1    PCCC 
          SA4    X4-1        READ RETURN JUMP WORD
          BX6    X0*X1
          BX4    -X0*X4 
          IX7    X6+X4
          LX7    30 
          SA7    A1 
          RJ     RSR         RESTORE ALL REGISTERS
 PCCC     EQ     *           RETURN 
-         EQ     *
  
 PCC2     WRITEC O,PCCD      REQUEST *YES* OR *NO* RESPONSE 
          EQ     PCC1 
  
  
 PCCA     DATA   20H INTERRUPT AT LINE
 PCCB     BSS    1
 PCCD     DATA   C/ ENTER *YES* OR *NO*./ 
 PUR      SPACE  4,15 
**        PUR - PROCESS USER RESPONSE.
* 
*         ENTRY  PROMPT MESSAGE ISSUED TO USER. 
*                (B6) = FWA WORKING BUFFER FOR READING RESPONSE 
*                       (MUST BE AT LEAST *LBUFL* WORDS LONG).
* 
*         EXIT   (X4) .LT. 0, IF INCORRECT RESPONSE.
*                (X4) = 0, IF NEGATIVE RESPONSE.
*                (X4) .GT. 0, IF POSITIVE RESPONSE. 
* 
*         USES   A - 1, 7.
*                B - 2, 3, 5. 
*                X - 0, 1, 2, 4, 6, 7.
* 
*         CALLS  ANC. 
* 
*         MACROS READ, READS. 
  
  
 PUR1     SX4    -1          SET INCORRECT REPONSE
  
 PUR      SUBR
          SX0    B6-B1       SAVE FWA-1 WORKING BUFFER
          BX7    X7-X7       CLEAR INTERRUPT PENDING
          SA7    INTP 
          READ   I
          READS  X2,B6,-LBUFL  READ RESPONSE
          NZ     X1,PUR1     IF ONLY (CR) ENTERED 
          SB2    X0 
          BX6    X6-X6       CLEAR ACCUMULATOR
          SB5    60 
          SB3    3           SET RESPONSE SIZE
  
 PUR2     RJ     ANC         ASSEMBLE NEXT CHARACTER
          EQ     B2,B6,PUR3  IF INPUT COMPLETE
          SX1    X2-1R       CHECK FOR BLANK
          ZR     X1,PUR2     IF BLANK 
          SB3    B3-1        INCREMENT LENGTH 
          NG     B3,PUR1     IF RESPONSE TOO LONG 
          SB5    B5-6 
          LX6    6
          BX6    X4+X6
          EQ     PUR2 
  
 PUR3     LX4    B5,X6       SET RESPONSE 
          MX0    42 
          SA1    PURA-1      INITIALIZE TABLE SEARCH
 PUR4     SA1    A1+B1       SET NEXT TABLE ITEM
          BX6    X0*X1       COMPARE RESPONSE TO TABLE
          ZR     X1,PUR1     IF AT END OF TABLE 
          BX2    X6-X4
          NZ     X2,PUR4     IF NOT A MATCH 
          SX4    X1          SET REPONSE INDICATOR
          EQ     PURX        RETURN 
          SPACE  4
**        PURA - TABLE OF LEGAL RESPONSES.
* 
*T        42/RESPONSE,18/TYPE 
* 
*         TYPE   0 = NEGATIVE RESPONSE. 
*                1 = POSITIVE RESPONSE. 
  
  
 PURA     BSS    0
          VFD    42/0LNO,18/0 
          VFD    42/0LN,18/0
          VFD    42/0LYES,18/1
          VFD    42/0LY,18/1
          CON    0
 PSB      SPACE  4,7
**        PSB - POSITION STRING BUFFER. 
* 
*         USES   A - 0, 1, 3, 4, 6, 7.
*                B - NONE.
*                X - 1, 2, 3, 4, 6, 7.
* 
*         CALLS  CIO=.
  
  
 PSB4     BX7    X4 
          SX6    A0 
          SA7    A4          RESTORE BUFFER POINTERS
          SA6    A7-B1
  
 PSB      SUBR               ENTRY/EXIT 
          SA3    B+5
          ZR     X3,PSBX     IF STRING BUFFER EMPTY 
          SA1    B
          LX1    59-4        CHECK FILE POSITION
          SX2    A1 
          NG     X1,PSB1     IF POSITIONED AT EOR 
          SKIPEI X2 
 PSB1     BKSPRU X2 
          RPHR   X2,R        READ LAST SECTOR 
          SA3    X2+2 
          SA4    A3+B1       SAVE BUFFER POINTERS 
          SA0    X3 
          BKSPRU X2,,R       POSITION FILE FOR REWRITE
          SA1    MODE 
          NZ     X1,PSB4     IF LINE MODE 
          SA1    XTSP 
          NG     X1,PSB4     IF PREVIOUS PHRASE AT EOL
          IX6    X4-X3
          SX6    X6+B1
          NZ     X6,PSB2     IF MORE THAN ONE WORD IN BUFFER
          SX7    X1-9 
          ZR     X7,PSB1     IF BUFFER CONTAINS EOL ONLY
 PSB2     SA3    B+5
          SX7    X3-1        ADJUST LINE COUNT
          SA0    A0-B1
          SA7    A3 
          ZR     X1,PSB4     IF NEXT PHRASE ON WORD BOUNDARY
          SA3    A0+
          NZ     X3,PSB3     IF LAST WORD NOT ZERO
          SA0    A0-B1
          SA3    A0 
 PSB3     SX2    LBUF-1 
          BX6    X3 
          LX1    24 
          SA6    X2          LAST WORD CURRENTLY IN BUFFER
          BX7    X1+X2
          SA7    SLP         FIX POINTER TO LAST WORD 
          EQ     PSB4 
 PSO      SPACE  4,10 
**        PSO - PRELIMINARY STRING SEARCH.
* 
*         ENTRY  (X3) = POINTER WORD FOR FIRST STRING.
*                (X4) = POINTER WORD FOR SECOND STRING. 
* 
*         USES   A - 2, 7.
*                B - NONE.
*                X - 0, 2, 6, 7.
* 
*         CALLS  CST, AFW, SFS, WTC=. 
  
  
 PSO      SUBR               ENTRY/EXIT 
          SX0    0
          ZR     X4,PSO1     IF ELLIPSIS SEARCH NOT REQUIRED
          RJ     CST         COUNT ELLIPSI
          SA2    LCT
          RJ     AFW         ADVANCE TO FIRST OCCURRENCE OF /P1/
 PSO1     SX6    STPHR1      LOCATE FIRST STRING
          RJ     SFS
          NZ     X7,PSOX     IF PHRASE FOUND
          SA7    EOFTF
 PSO2     WRITEC O,NPM
          JP     SET2 
  
  
 NPM      DATA   C* PHRASE NOT FOUND.*
 RSR      SPACE  4
**        RSR - RESTORE WORKING REGISTERS.
* 
*         ENTRY  (SVRA - SVRA+3) = PREVIOUS REGISTER CONTENTS.
  
  
 RSR      SUBR               ENTRY/EXIT 
          SA2    SVRA        X6 
          BX6    X2 
          SA1    A2+B1       X1 
          SA2    A1+B1       X0 
          BX0    X2 
          SA2    A2+B1       X2 
          EQ     RSRX 
 RTF      SPACE  4,7
**        RTF - REPOSITION TEXT FILES (READ ONLY OPERATIONS). 
* 
*         USES   A - 1, 3, 7. 
*                B - 6, 7.
*                X - 0, 1, 2, 3, 4, 5, 7. 
* 
*         CALLS  CIO=, RDC=.
  
  
 RTF2     SA1    X5+5 
          BX0    X1          TEXT FILE LINE ADVANCE 
          REWIND X5 
          READ   X2 
 RTF3     READC  X2,LBUF,LBUFL
          SX0    X0-1 
          NZ     X0,RTF3     IF ADVANCE INCOMPLETE
          SX7    B6 
          BX1    X1-X1
          SA7    LBL
  
 RTF      SUBR               ENTRY/EXIT 
          MX2    -4 
          SA1    FBB
          BX4    -X2*X1      ISOLATE ORIGINAL READ FILE BIAS
          SA3    PFADR
          SX2    X4+F        INITIAL READ FILE FET
          BX2    X3-X2
          ZR     X2,RTF2     IF READ FILE IS PRIMARY FILE 
          BX2    X5-X3
          NZ     X2,RTF2     IF SCRATCH FILE
          SA3    X5+5 
          BX0    X3          SET LINE ADVANCE 
          REWIND X5 
          READ   X2          REPOSITION PRIMARY FILE
 RTF1     READC  X2,LBUF,LBUFL
          SX0    X0-1 
          NZ     X0,RTF1     IF NOT REPOSITIONED
          MX2    -4 
          SA1    FBB
          BX3    -X2*X1      BIAS FOR ORIGINAL READ FILE
          SX5    X3+F 
          EQ     RTF2        REPOSITION SECONDARY FILE
 SBT      SPACE  4,12 
**        SBT - SET BLANK TERMINATOR. 
* 
*         ENTRY  (X1) = END OF LINE POINTER WORD. 
* 
*         EXIT   (X1) = UPDATED END OF LINE POINTER WORD. 
*                (X6) = LAST WORD IN LINE.
*                (B6) = NUMBER OF BLANKS ADDED. 
*                (LBL) = END OF LINE ADDRESS. 
* 
*         USES   A - 3, 4, 6, 7.
*                B - 3. 
*                X - 1, 3, 4, 6, 7. 
  
  
 SBT1     SX7    A6+B1
          SX1    X1+B1       INCREMENT CHARACTER POSITION 
          SX3    X1-10
          NZ     X3,SBT2     IF NOT FULL WORD 
          SX1    B0 
          SX4    X4+B1
 SBT2     LX1    24 
          BX1    X1+X4       FORM NEW END OF LINE POINTER WORD
          SA7    LBL         SET END OF LINE ADDRESS
  
 SBT      SUBR               ENTRY/EXIT 
          SB6    B0 
          NG     X1,SBTX     IF END OF LINE SET 
          SB6    B1 
          SA4    X1          GET LAST WORD
          AX1    24 
          SA3    X1+TCHM     GET MASK 
          BX6    X3*X4
          CX7    X3 
          SB3    X7-54
          SX3    1R 
          AX3    B3,X3       POSITION BLANK CHARACTER 
          BX6    X6+X3
          SX3    X1-8 
          SA6    A4 
          SX4    A4 
          NG     X3,SBT1     IF END OF LINE ALREADY SET 
          BX6    X6-X6
          SA6    A6+B1       SET END OF LINE
          EQ     SBT1 
 SFS      SPACE  4,14 
**        SFS - SEARCH FILE FOR STRING. 
* 
*         ENTRY  (X0) = 0  SEARCH BEFORE WRITE/READ.
*                     " 0  WRITE/READ BEFORE SEARCH.
*                (X6) = STRING POINTER ADDRESS. 
* 
*         EXIT   (X7) " 0  IF STRING FOUND. 
*                     = 0  IF EOF.
* 
*         USES   A - 0, 2, 4, 6, 7. 
*                B - 2, 6, 7. 
*                X - 0, 2, 4, 5, 6, 7.
* 
*         CALLS  RDC=, SLS, WTC=. 
  
  
 SFS      SUBR               ENTRY/EXIT 
          ZR     X6,SFS1     IF STRING ADDRESS SET PREVIOUSLY 
          SA6    SFSA        SAVE STRING POINTER ADDRESS
 SFS1     SB2    X0 
          BX0    X0-X0
          ZR     B2,SFS4     IF SEARCH BEFORE WRITE/READ
 SFS2     WRITEC A5+,LBUF 
 SFS3     READC  X5,LBUF,LBUFL
          NZ     X1,SFS5     IF END OF DATA ENCOUNTERED 
          SX0    X0+B1
          SA0    B6 
 SFS4     SA2    SFSA        GET STRING POINTER 
          SA2    X2 
          RJ     SLS
          NZ     B7,SFS2     IF STRING NOT FOUND
          ZR     X0,SFSX     IF STRING IN ORIGINAL LINE 
          SA2    X5+5 
          IX6    X2+X0       ADVANCE READ FILE LINE COUNT 
          SA6    A2 
          BX0    X0-X0
          SX6    A0          SAVE END OF LINE ADDRESS 
          SA6    LBL
          EQ     SFSX        RETURN 
  
 SFS5     SX0    0
          SA4    PFADR
          BX7    X4-X5
          BX5    X4 
          SA1    FBB         TEXT FILE BECOMES NEW READ FILE
          MX2    56 
          BX1    X2*X1
          SX2    X5-F        READ FILE BIAS 
          BX6    X1+X2
          SA6    A1          UPDATE WRITE/READ FILE BIAS
          NZ     X7,SFS3     IF NOT READING PRIMARY TEXT FILE 
          SA7    EOFTF
          EQ     SFSX        RETURN 
  
 SFSA     CON    0           STRING POINTER ADDRESS 
 SLS      SPACE  4,18 
**        SLS - SEARCH LINE FOR STRING. 
* 
*         ENTRY  (X1) = 0 BEGIN SEARCH AT ADDRESS IN *LBA*. 
*                (X1) .NE. 0 BEGIN SEARCH AT POINTER IN *LBW*.
*                (X2) = STRING LENGTH AND ADDRESS.
* 
*         EXIT   (B7) = 0 IF STRING FOUND.
*                (X7) - LBW.
*                (X6) - FBW.
*                (A6) - ADDRESS OF FBW. 
*                (A7) - ADDRESS OF LBW. 
*T, FBW   36/  N1,24/  A1 
*T, LBW   36/  N2,24/  A2 
* 
*         N1 = POSITION OF LEADING CHARACTER IN STRING, .LE. 9. 
*         A1 = ADDRESS OF WORD CONTAINING *N1*. 
*         N2 = POSITION + 1 OF LAST CHARACTER IN STRING, .LE. 9.
*         A2 = ADDRESS OF WORD CONTAINING *N2*. 
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                B - 2, 3, 4, 5, 6, 7.
*                X - 1, 2, 3, 4, 6, 7.
  
  
 SLS10    SX6    B5-B1
          LX6    24 
          SX1    A1          LINE ADDRESS OF BEGINNING OF STRING
          SX7    B2 
          BX6    X1+X6
          SX4    A3          FORM POINTER TO END OF STRING
          SA6    FBW
          LX7    24 
          SB4    B6-B2
          SA2    TCHM+B4     SET MASK 
          IX7    X7+X4
          BX3    X2*X3
          NZ     X3,SLS12    IF NOT END OF LINE 
          NG     X3,SLS12    IF WORD OF SEMI-COLONS 
          NE     B4,B1,SLS11 IF END OF LINE 
          SA3    A3+1        NEXT WORD IN LINE
          NZ     X3,SLS12    IF NOT ZERO WORD 
          NG     X3,SLS12    IF NOT END OF LINE 
 SLS11    MX1    1
          BX7    X1+X7
 SLS12    SB7    B0+
          SA7    LBW
  
 SLS      SUBR               ENTRY/EXIT 
          ZR     X1,SLS1     IF SEARCH BEGINS AT START OF LINE
          SX1    LBW-LBA
 SLS1     SA4    X2          FIRST STRING CHARACTER 
          AX2    24 
          SA3    X1+LBA      BEGINNING SEARCH ADDRESS 
          SB7    X2 
          NG     X3,SLSX     IF POINTER MARKED END OF LINE
          BX6    X1          ZERO INDICATES NO PREVIOUS WORD
          SA1    X3 
          SB6    10 
          AX3    24 
          SB5    X3          POSITION OF ELEMENT IN WORD (0-9)
          LX2    B1,X3
          LX3    2           FORM SHIFT COUNT 
          IX2    X3+X2       CHARACTER POSITION * 6 
          SB4    X2          SHIFT COUNT FOR FIRST WORD 
          LX1    B4,X1       POSITION FIRST CHARACTER 
          BX7    -X4         COMPLEMENT OF FIRST STRING CHARACTER 
          MX4    -6 
          EQ     SLS3 
  
 SLS2     MX3    -12
          BX2    -X3*X1      CHECK END OF LINE BYTE 
          SB5    B0+
          ZR     X2,SLSX     IF END OF LINE 
          BX6    X1          SAVE PREVIOUS WORD (FOR ASCII) 
          SA1    A1+B1
  
*         LOOP TO LOCATE FIRST STRING CHARACTER IN LINE.
  
 SLS3     EQ     B5,B6,SLS2  IF LAST CHARACTER IN WORD
          LX1    6
          SB5    B5+B1
          BX2    -X4*X1      ISOLATE CHARACTER
          IX3    X2+X7
          NZ     X3,SLS3     IF NO MATCH
          NZ     X2,SLS5     IF SEARCH CHARACTER NOT A *00* 
          NE     B5,B6,SLS4  IF COLON NOT AT END OF WORD
          SA2    A1+1        GET NEXT SEARCH WORD 
          NZ     X2,SLS5     IF NOT ZERO WORD 
          PL     X2,SLSX     IF END OF LINE 
          EQ     SLS5 
  
 SLS4     SX2    B6-B5
          SA2    X2+TCHM     GET MASK 
          BX2    X2*X1       INITIALIZE REMAINING CHARACTERS
          ZR     X2,SLSX     IF END OF LINE 
  
*         CODE TO CHECK PREVIOUS CHARACTER FOR ASCII ESCAPE 
*         CHARACTER EXECUTED ONLY IF IN ASCII MODE. 
  
 SLSA     BSS    0
 SLS5     EQ     SLS7 
*         EQ     B5,B1,SLS6  (ASCII MODE) 
*         BX6    X1          (ASCII MODE) 
*         LX6    54          (ASCII MODE) 
 SLS6     ZR     X6,SLS7     IF NO PREVIOUS WORD
          BX2    -X4*X6      ISOLATE PREVIOUS CHARACTER 
          SX3    X2-76B 
          ZR     X3,SLS3     IF 76B ESCAPE CODE 
          SX3    X2-74B 
          ZR     X3,SLS3     IF 74B ESCAPE CODE 
 SLS7     SB3    B0 
          SA2    A4 
          SA3    A1 
          SB2    B5 
          BX3    X1 
          EQ     B2,B6,SLS9  IF CHARACTER LAST IN WORD
  
*         LOOP CHECKING REMAINDER OF PHRASE.
  
 SLS8     SB3    B3+B1       COUNT CHARACTERS FOUND 
          EQ     B3,B7,SLS10 IF SEACH COMPLETE
          LX3    6
          SA2    A2+B1       NEXT STRING ELEMENT
          BX6    -X4*X3 
          SB2    B2+B1       ADVANCE CHARACTER POINTER
          BX6    X6-X2
          NZ     X6,SLS3     IF NO MATCH
          EQ     B2,B6,SLS9  IF AT END OF WORD
          NZ     X2,SLS8     IF SEARCH CHARACTER NOT A *00* 
          SB4    A2 
          SX2    B6-B2
          SA2    X2+TCHM     GET MASK 
          BX2    X2*X3       INITIALIZE REMAINING CHARACTERS
          ZR     X2,SLSX     IF END OF LINE 
          SA2    B4+
          EQ     SLS8 
  
 SLS9     SB2    B0 
          SA3    A3+B1
          NZ     X2,SLS8     IF SEARCH CHARACTER NOT A *00* 
          NZ     X3,SLS8     IF NOT ZERO WORD 
          PL     X3,SLSX     IF END OF LINE 
          EQ     SLS8 
  
*         ASCII MODE CODE REPLACES SLSA.
  
 SLSB     EQ     B5,B1,SLS6  IF FIRST CHARACTER IN WORD 
          BX6    X1 
          LX6    54          POSITION CURRENT CHARACTER 
 TCHM     SPACE  4
**        TCHM - TABLE OF CHARACTER MASKS.
  
  
 TCHM     BSS    0
          DATA   0
          DATA   77000000000000000000B
          DATA   77770000000000000000B
          DATA   77777700000000000000B
          DATA   77777777000000000000B
          DATA   77777777770000000000B
          DATA   77777777777700000000B
          DATA   77777777777777000000B
          DATA   77777777777777770000B
          DATA   77777777777777777700B
          DATA   77777777777777777777B
 SLT      SPACE  4,9
**        SLT - SET LINE TERMINATOR.
* 
*         ENTRY  (X1) = END OF LINE POINTER WORD. 
* 
*         EXIT   (X6) = LAST WORD IN LINE.
*                (B6) = NUMBER OF BLANKS ADDED OR REMOVED (NEGATIVE). 
* 
*         USES   A - 3, 4, 6, 7.
*                B - 2, 3.
*                X - 1, 3, 4, 6, 7. 
  
  
 SLT3     SX7    B2+B1       SET END OF LINE ADDRESS
          SA6    B2 
          SA7    LBL
  
 SLT      SUBR               ENTRY/EXIT 
          NG     X1,SLTX     IF END OF LINE SET 
          RJ     BLK         CHECK FOR COLON AT END OF LINE 
          SA4    X1 
          AX1    24 
          SB2    A4          SET LWA
          SA3    X1+TCHM
          LX1    59-0 
          BX6    X3*X4
          PL     X1,SLT3     IF EOL ON BYTE BOUNDARY
          CX7    X3 
          SX1    1R *100B 
          SB3    X7-54
          AX4    B3,X1       POSITION BLANK CHARACTER 
          BX7    X6-X4
          SA3    A3-B1       CHECK FOR ODD CHARACTER BLANK
          BX1    -X3*X7 
          NZ     X1,SLT2     IF NOT BLANK 
          NZ     X3,SLT1     IF PRECEDING CHARACTER IN SAME WORD
          SA1    B2-B1
          BX7    X1 
          SA3    TCHM+10
 SLT1     SA3    A3-B1       CHECK PRECEDING CHARACTER FOR *00* 
          BX1    -X3*X7 
          ZR     X1,SLT2     IF *00*
          LX4    6
          SB3    B1 
          SB6    B6-2 
 SLT2     LX4    54          POSITION BLANK CHARACTER 
          BX6    X6-X4
          SB6    B6+1 
          NZ     B3,SLT3     IF NOT ON WORD BOUNDARY
          SB2    B2+1 
          SA6    A4 
          BX6    X6-X6       CLEAR END OF LINE
          EQ     SLT3 
 SML      SPACE  4,11 
**        SML - SEARCH MODIFIED LINE. 
* 
*         ENTRY  (X6) = STRING POINTER ADDRESS. 
*                (X1) - SEE *SLS*.
* 
*         EXIT   (X7) " 0 IF STRING FOUND.
* 
*         USES   A - 1, 2.
*                B - NONE.
*                X - 0, 1, 2, 6.
* 
*         CALLS  SLS, SLT, SFS. 
  
  
 SML1     SA1    SLP         SET LINE TERMINATOR
          RJ     SLT
          BX6    X0          SEARCH FILE FOR STRING 
          RJ     SFS
  
 SML      SUBR               ENTRY/EXIT 
          BX0    X6 
          SA2    X6          SEARCH LINE FOR STRING 
          RJ     SLS
          NZ     B7,SML1     IF NOT IN CURRENT LINE 
          EQ     SMLX 
 SRO      SPACE  4,15 
**        SRO - SEARCH READ ONLY. 
* 
*         ENTRY  (X0) = 0  SEARCH BEFORE READ.
*                     " 0  READ BEFORE SEARCH.
*                (X6) = STRING POINTER ADDRESS. 
* 
*         EXIT   (X7) " 0  IF STRING FOUND. 
*                     = 0  IF EOF.
*                (B2) = NUMBER OF LINES READ. 
*                (B4) = NUMBER OF LINES ADVANCED IN CURRENT READ FILE.
* 
*         USES   A - 2, 3, 4, 6.
*                B - 2, 6, 7. 
*                X - 0, 2, 3, 4, 5, 6, 7. 
* 
*         CALLS  RDC=, SLS. 
  
  
 SRO4     SX6    X0+
          SA6    SROC        SAVE PREVIOUS LINE ADVANCE 
          CEPF   SRO2,4 
          SX0    0
  
 SRO      SUBR               ENTRY/EXIT 
          ZR     X6,SRO1     IF STRING POINTER SET PREVIOUSLY 
          SA6    SROA        SAVE STRING POINTER
 SRO1     SB2    X0 
          BX0    X0-X0
          SX6    B0+
          SA6    SROC        CLEAR PREVIOUS LINE ADVANCE
          ZR     B2,SRO3     IF SEARCH BEFORE READ
 SRO2     SB7    LBUFL       SET LINE LENGTH
          SA3    LBA
          READC  X5,X3,B7 
          NZ     X1,SRO4     IF NO DATA TRANSFERED
          SA0    B6 
          SX0    X0+B1       ADVANCE LINE COUNT 
 SRO3     SA2    SROA        GET STRING POINTER 
          SA2    X2+
          RJ     SLS         SEARCH LINE FOR STRING 
          NZ     B7,SRO2     IF STRING NOT FOUND
          SA2    SROC        GET PREVIOUS LINE ADVANCE
          IX2    X0-X2
          SB4    X2          LINE ADVANCE ON CURRENT READ FILE
          SB2    X0 
          BX0    X0-X0
          ZR     B2,SROX     IF FILE NOT ADVANCED 
          SX6    A0+
          SA6    LBL
          EQ     SROX        RETURN 
  
  
 SROA     CON    0           STRING POINTER 
  
  
 SROC     CON    0           PREVIOUS LINE ADVANCE
 SVR      SPACE  4
**        SVR - SAVE WORKING REGISTERS. 
* 
*         EXIT   FOLLOWING REGISTERS SAVED. 
*                X - 0, 1, 2, 6.
  
  
 SVR      SUBR               ENTRY/EXIT 
          SA6    SVRA        X6 
          BX7    X1          X1 
          SA7    A6+B1
          BX6    X0          X0 
          SA6    A7+B1
          BX7    X2          X2 
          SA7    A6+B1
          EQ     SVRX 
  
 SVRA     BSS    4           REGISTER SAVE AREA 
 WNL      SPACE  4,19 
**        WNL - WRITE NEW ALIGNED LINE. 
* 
*         NEW ALIGNED LINE WRITTEN FROM CHARACTER BUFFER, 
*         IF NON-BLANK. 
* 
*         ENTRY  (B5) = CURRENT CHARACTER ADDRESS IN NEW LINE.
*                (B6) = CURRENT CHARACTER ADDRESS IN OLD LINE.
*                (X0) = LWA+1 LAST COMPLETE WORD IN NEW LINE. 
*                (X0) = 0, IF NEW LINE WIDTH .LT. WORD SIZE.
*                (X3) = 0, IF ENTIRE NEW LINE TO BE FLUSHED.
* 
*         EXIT   (B4) = MAXIMUM LWA+1 NEW LINE. 
*                (B5) = FWA NEW LINE BUFFER.
*                (B6) = CURRENT CHARACTER ADDRESS IN OLD LINE.
* 
*         USES   A - 0, 1, 3, 7.
*                X - 0, 1, 3, 4, 7. 
*                B - 2, 4, 5, 6.
* 
*         CALLS  WTS=.
  
  
 WNL      SUBR               ENTRY/EXIT 
          SA1    STRA 
          SX7    1R 
          IX4    X1-X7
          SB2    A1 
          NZ     X4,WNL1     IF FIRST CHARACTER NOT BLANK 
          SB2    B2+5 
 WNL1     LE     B5,B2,WNLX  IF NEW LINE ALREADY FLUSHED
          ZR     X3,WNL2     IF ENTIRE LINE TO BE FLUSHED 
          SA1    B6          GET NEXT CHARACTER IN OLD LINE 
          IX1    X1-X7
          ZR     X1,WNL2     IF NEXT CHARACTER BLANK
          NZ     X0,WNL3     IF AT LEAST ONE COMPLETE WORD IN NEW LINE
 WNL2     SX0    B5+
          SA0    B6+
 WNL3     SA1    X0-1 
          NZ     X1,WNL4     IF LAST CHARACTER NOT COLON
          SA7    X0+
          SX0    X0+1 
 WNL4     WRITES A5,STRA,X0-STRA
          SB5    STRA 
          SA3    WDTH 
          SB4    X3+B5
          SB6    A0 
          EQ     WNLX 
 END      TITLE  END COMMAND PROCESSOR. 
***       END - PROCESS *END* COMMAND.
  
  
 END      BSS    0
          SA1    EOFTF
          SX2    A5+
          ZR     X1,END2     IF POSITIONED AT EOF 
          WRITEC X2,LBUF
 END1     READW  X5,LBUF,CBUFL
          SB7    B6-LBUF     SET NUMBER WORDS TO WRITE
          BX0    X1 
          SX2    A5          WRITE FILE FET ADDRESS 
          WRITEW X2,LBUF,B7 
          ZR     X0,END1     IF COPY INCOMPLETE 
          CEPF   END1,4 
 END2     WRITER X2,R        FLUSH BUFFER 
          SA3    DAFF 
          ZR     X3,END7     IF DIRECT ACCESS FILE
          RENAME X2,TFILE    RENAME FINAL COPY
 END3     REWIND X2 
          SB3    S
          SB4    M           LAST FILE TO BE RETURNED 
 END4     SX3    A5-B3
          ZR     X3,END5     IF FILE CONTAINING FINAL COPY
          RETURN B3 
 END5     SB3    B3+FETL
          LE     B3,B4,END4  IF NOT ALL FILES RETURNED
 END6     WRITEC O,(=C* END TEXT EDITING.*) 
          WRITER X2          END TEXT EDITING 
          ENDRUN
  
 END7     SX4    X2-F 
          ZR     X4,END3     IF FINAL COPY PERMANENT
          REWIND F
          SA0    X2 
          REWIND A5 
          READ   X2          MAKE FINAL COPY PERMANENT
 END8     READW  A5,LBUF,CBUFL
          SB7    B6-LBUF
          BX0    X1 
          SX2    A0 
          WRITEW X2,LBUF,B7 
          ZR     X0,END8     IF COPY NOT COMPLETE 
          WRITER X2,R 
          SA5    X2 
          EQ     END3        RETURN SCRATCH FILES 
          TITLE  COMMON DECKS.
*CALL     COMCUSB 
*CALL COMCSYS 
*CALL COMCCIO 
*CALL     COMCRDS 
*CALL COMCLFM 
*CALL COMCRDW 
*CALL COMCRDC 
*CALL     COMCSFN 
*CALL COMCWTW 
*CALL COMCWTS 
*CALL COMCWTC 
*CALL COMCCDD 
*CALL COMCPFM 
 IDENT    SPACE  4
          IDENT              FORCE LITERALS 
 PRS      TITLE  PRESET.
 EDIT     BSS    0
 PRS      SB1    1
 PRS1     SB2    CCDR        UNPACK COMMAND 
          SB6    CCBL 
          RJ     USB
          SX2    1R9+1       SET DELIMITER CHECK
 PRS2     SA1    B6          ADVANCE CHARACTER
          SB6    B6+B1
          IX3    X1-X2       CHECK FOR END OF PROGRAM NAME\ 
          ZR     X1,ERR      IF TERMINATION 
          NG     X3,PRS2     IF NOT END OF PROGRAM NAME 
          SB3    X1-1R. 
          SB4    X1-1R) 
          SX1    X1-1R
          ZR     B3,PRS3     IF NO ARGUMENTS
          ZR     B4,PRS3     IF NO ARGUMENTS
          ZR     X1,PRS2     IF SPACE (IGNORE)
          SB3    TARG        SET ARGUMENT TABLE ADDRESS 
          SB2    TARGL       SET ARGUMENT TABLE LENGTH
          SB4    PRSD        SET STRING BUFFER ADDRESS
          RJ     CPA         CONVERT POSITIONAL ARGUMENTS 
          NG     B5,ERR      IF ERROR IN CONVERSION 
          PL     X1,PRS3     IF NO ARGUMENTS PROCESSED
          SX6    B5          SET UP PARAMETER CRACKING
          SB6    PRSD 
          SA6    USBC 
          RJ     ARM         CRACK PARAMETERS 
          NZ     X1,ERR      IF ERROR IN PARAMETERS 
          MX0    42          CHECK FOR RESERVED FILE NAMES
          SA3    TFILE
          BX7    X3 
          SA7    F
          BX4    X3*X0
          SA3    A7 
          RJ     CRN
          ZR     X7,ERR1     IF FILE NAME RESERVED
          SA3    I
          BX4    X3*X0
          RJ     CRN
          ZR     X7,ERR1     IF FILE NAME RESERVED
          SA3    O
          BX4    X3*X0
          RJ     CRN
          ZR     X7,ERR1     IF FILE NAME RESERVED
 PRS3     SX2    I           SET TERMINAL FILE
          RJ     STF
          SA6    EOFIF       SET FILE STATUS
          SA6    JOTY 
          BX5    X6 
          ZR     X6,PRS4     IF INTERACTIVE JOB 
          READ   X2          INITIAL DIRECTIVE READ 
          EQ     PRS5        EVICT SCRATCH FILES
  
 PRS4     DISTC  ON,TINT     SET TERMINAL CONTROLS
 PRS5     EVICT  S
          EVICT  SC 
          EVICT  B
          EVICT  M
          EVICT  T
          SA3    O           SET OUTPUT FET POINTER 
          MX0    42 
          SX2    A3 
          BX3    X0*X3
          BX6    X3+X2
          SX7    1R          SET NON-ZERO WORD PAD BEFORE LINE BUFFERS
          SA6    ARGR 
          SA7    LBUF-1 
          SA7    TBUF-1 
          SA4    ASC         CHECK EDIT MODE
          ZR     X4,PRS8     IF NO MODE PARAMETER PRESENT 
          SA1    MARG-1      CHECK MODE PARAMETER 
          MX0    42 
          BX4    X4*X0
 PRS6     SA1    A1+B1       CHECK NEXT TABLE ITEM
          SB2    X1 
          ZR     X1,ERR      IF ITEM NOT IN TABLE 
          BX6    X1*X0
          IX7    X6-X4       COMPARE TABLE ITEM TO MODE 
          NZ     X7,PRS6     IF NO MATCH
          BX0    X5          SET INTERACTIVE I/O
          EQ     B2,B0,PRS7  IF *NORMAL* OPTION 
  
*         PROCESS *ASCII* OPTION. 
  
          SX6    -76B        SET ASCII INDICATOR TO ASCII 
          SA6    ASC
          SA1    SLSB        PRESET ASCII CODE
          SA2    ANCB 
          BX6    X1 
          LX7    X2 
          SA6    SLSA 
          SA7    ANCA 
          NZ     X0,PRS8     IF NOT INTERACTIVE I/O 
          CSET   ASCII
          EQ     PRS8 
  
*         PROCESS *NORMAL* OPTION.
  
 PRS7     SX6    B0+         SET ASCII INDICATOR TO NORMAL
          SA6    ASC
          NZ     X0,PRS8     IF NOT INTERACTIVE I/O 
          CSET   NORMAL 
 PRS8     SX3    B1          CHECK EDIT FILE
          SA4    TFILE
          IX4    X4-X3
          NZ     X4,PRS11    IF EDIT FILE SPECIFIED 
  
          NZ     X5,ERR      IF NOT INTERACTIVE JOB 
          WRITEC O,PRSA      * ENTER TEXT FILE NAME.* 
          READ   I           GET EDIT FILE NAME 
          SA0    LBUF 
          READS  X2,A0,-30
          NZ     X1,ERR      IF EOF (CR) ON INPUT 
          SB2    A0-B1
          BX6    X6-X6       CLEAR ACCUMULATOR
          SB5    60 
          SB3    7
  
*         ASSEMBLE FILE NAME. 
  
 PRS9     RJ     ANC         ASSEMBLE NEXT CHARACTER
          EQ     B2,B6,PRS10 IF END OF INPUT
          SX1    X2-1R
          ZR     X1,PRS9     IF BLANK CHARACTER 
          ZR     X4,ERR      IF NOT ALPHANUMERIC CHARACTER
          SX1    X4-1R+ 
          PL     X1,ERR      IF NOT ALPHANUMERIC CHARACTER
          SX1    X3-74B 
          ZR     X1,ERR      IF 74B ESCAPE CODE 
          SB3    B3-1 
          NG     B3,ERR      IF FILE NAME TOO LONG
          SB5    B5-6 
          LX1    B5,X4
          BX6    X6+X1       ADD CHARACTER TO ACCUMULATOR 
          EQ     PRS9 
  
 PRS10    BX4    X6          CHECK FILE NAME
          ZR     X4,PRS9     IF NO FILE NAME
          SA3    B0 
          RJ     CRN         CHECK FOR RESERVED FILE NAME 
          ZR     X7,ERR1     IF FILE NAME RESERVED
          SX5    B1 
          BX7    X4+X5
          SA7    TFILE
          SA7    F           SET FILE NAME IN FET 
 PRS11    SA1    F           SET FILE NAME IN *FILINFO* BLOCK 
          MX0    42 
          BX1    X0*X1
          SA2    FINB 
          BX6    X1+X2
          MX0    -6 
          SA6    A2 
          FILINFO  A2        GET FILE INFORMATION 
          SA1    FINB+1      CHECK FILE TYPE
          BX6    -X0*X1 
          LX1    59-7        CHECK FILE MODE
          SX6    X6-4        INITIALIZE DIRECT ACCESS FILE FLAG 
          SA6    DAFF 
          ZR     X1,PRS11.2  IF FILE NOT FOUND
          SA3    JOTY        CHECK FOR INTERACTIVE JOB
          NZ     X3,PRS11.2  IF NOT TERMINAL INPUT
          NG     X1,PRS11.2  IF EDIT FILE IN WRITE MODE 
          WRITEC O,PRSE      *EDIT FILE NOT IN WRITE MODE.* 
          WRITEC O,PRSF      *DO YOU WISH TO CONTINUE*
 PRS11.1  SB6    LBUF        FWA WORKING BUFFER 
          RJ     PUR         PROCESS USER RESPONSE
          RJ     CTI         CHECK TERMINAL INTERRUPTS
          NZ     X3,END6     IF TERMINAL INTERRUPT
          ZR     X4,END6     IF *NO* RESPONSE 
          PL     X4,PRS11.2  IF *YES* RESPONSE
          WRITEC O,PCCD      REQUEST *YES* OR *NO* RESPONSE 
          EQ     PRS11.1     PROCESS USER RESPONSE
  
 PRS11.2  REWIND F
          READ   X2 
          READC  X2,LBUF,LBUFL
          SX7    B1 
          SX6    B6 
          NZ     X1,PRS12    IF EDIT FILE EMPTY 
          SA7    EOFTF
          SA6    LBL
 PRS12    SA5    SC 
          SA7    F+5
          SX5    F
          RJ     CTI         CHECK TERMINAL INTERRUPT 
          NZ     X3,END6     IF INTERRUPTED 
          WRITEC O,PRSB      * BEGIN TEXT EDITING.* 
          JP     MAIN        BEGIN TEXT EDITING 
 ERR      SPACE  4
**        ERR - ISSUE COMMAND ERROR MESSAGE.
* 
*         ENTRY  (B6) = ERROR MESSAGE ADDRESS, IF ENTRY AT *ERR1*.
  
  
 ERR      SB6    PRSC        * COMMAND ERROR.*
 ERR1     MESSAGE  B6,3      ISSUE ERROR MESSAGE
          ABORT 
 TARG     SPACE  4
**        TARG - TABLE OF ARGUMENTS.
  
  
 TARG     BSS    0
 FN       ARG    ST,TFILE,400B,0
 M        ARG    ST,ASC,0,1 
 I        ARG    ST,I,,0
 L        ARG    ST,O,,0
          ARG 
 TARGL    EQU    *-TARG-1    ARGUMENT TABLE LENGTH
  
  
 ST       CON    1           DEFAULT FET STATUS 
 MARG     SPACE  4
**        MARG - TABLE OF MODE ARGUMENTS. 
  
  
 MARG     BSS    0
          VFD    42/0LASCII,18/1
          VFD    42/0LAS,18/1 
          VFD    42/0LNORMAL,18/0 
          VFD    42/0LN,18/0
          CON    0
          SPACE  4,10 
 FINB     BSS    0           *FILINFO* PARAMETER BLOCK
          VFD    42/0,6/5,12/1
          BSSZ   4
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMCARM 
*CALL     COMCCPA 
*CALL     COMCPOP 
*CALL     COMCSTF 
 PRSA     SPACE  4
**        PRESET MESSAGES.
  
  
 PRSA     DATA   C* ENTER TEXT FILE NAME."CB"*
 PRSB     DATA   C* BEGIN TEXT EDITING.*
 PRSC     DATA   C* COMMAND ERROR.* 
 PRSE     DATA   C* EDIT FILE NOT IN WRITE MODE.* 
 PRSF     DATA   C* DO YOU WISH TO CONTINUE"CB"*
  
*         COMMAND STRING BUFFER.
  
 PRSD     EQU    *
*         BSS    200
 BUFFERS  TITLE  BUFFERS. 
 CMDB     EQU    PRS
 STRB     EQU    CMDB+CMDBL 
 STRA     EQU    STRB+1 
          IFLT   CMDBL+STRBL+2,FBUFL
 LBUF     EQU    CMDB+FBUFL 
          ELSE   1
 LBUF     EQU    STRA+STRBL+1 
 TBUF     EQU    LBUF+LBUFL+1 
          IFLT   LBUFL*3,CBUFL
 OBUF     EQU    LBUF+CBUFL 
          ELSE   1
 OBUF     EQU    TBUF+2*LBUFL 
 IBUF     EQU    OBUF+OBUFL 
 MBUF     EQU    IBUF+IBUFL 
 BBUF     EQU    MBUF+MBUFL 
 FBUF     EQU    BBUF+BBUFL 
 SBUF     EQU    FBUF+FBUFL 
 SCBUF    EQU    SBUF+FBUFL 
 USBB     EQU    SCBUF+FBUFL
 RFL=     EQU    USBB+CCBL+4
 ALFL     EQU    USBB+USBBL+4 
          END 
