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