cdc:nos2.source:opl871:edit
Table of Contents
EDIT
Table Of Contents
- [00008] EDIT - TIME SHARING TEXT EDITOR.
- [00013] TIME SHARING TEXT EDITOR.
- [00180] ASSEMBLY CONSTANTS.
- [00206] MACRO DEFINITIONS.
- [00208] COMMAND - GENERATE ENTRY IN COMMAND AND PROCESSOR TABLES.
- [00235] CEPF - CHECK EOI ON PRIMARY EDIT FILE.
- [00248] INTRPT - PROCESS TERMINAL INTERRUPT
- [00263] FETS.
- [00290] COMMAND TABLE.
- [00350] DATA STORAGE.
- [00383] POINTER WORD - FBW, LBW, SLP.
- [00410] MAIN - CRACKS COMMAND AND LOCATES PROCESSOR.
- [02447] UTILITY ROUTINES.
- [02449] ANC - ASSEMBLE NEXT CHARACTER.
- [02491] AFW - ADVANCE FILES AND WRITE.
- [02543] ATF - ADVANCE TEXT FILE.
- [02583] ATL - ASSEMBLE TABBED LINE.
- [02671] BLK - INSERTS BLANK AFTER COLON AT END OF LINE.
- [02726] BSP - BACKSPACE POINTER.
- [02755] CAC - COUNT ASCII CHARACTERS.
- [02811] CFC - CHECK FOR COLON.
- [02833] CPY - REPOSITION TEXT FILES.
- [02887] CRN - CHECK RESERVED FILE NAME.
- [02919] CST - COUNT STRINGS.
- [03006] CTI - CHECK TERMINAL INTERRUPTS.
- [03030] CTL - COMPRESS TEXT LEFT.
- [03130] ETX - PROCESS TEXT ENTRY.
- [03298] GSM - GENERATE STRINGS PROCESSED MESSAGE.
- [03321] IBC - INSERT BLANK CHARACTERS.
- [03387] PCC - PROMPT FOR COMMAND CONTINUANCE.
- [03450] PUR - PROCESS USER RESPONSE.
- [03505] PURA - TABLE OF LEGAL RESPONSES.
- [03520] PSB - POSITION STRING BUFFER.
- [03574] PSO - PRELIMINARY STRING SEARCH.
- [03602] RSR - RESTORE WORKING REGISTERS.
- [03616] RTF - REPOSITION TEXT FILES (READ ONLY OPERATIONS).
- [03659] SBT - SET BLANK TERMINATOR.
- [03704] SFS - SEARCH FILE FOR STRING.
- [03760] SLS - SEARCH LINE FOR STRING.
- [03910] TCHM - TABLE OF CHARACTER MASKS.
- [03926] SLT - SET LINE TERMINATOR.
- [03979] SML - SEARCH MODIFIED LINE.
- [04005] SRO - SEARCH READ ONLY.
- [04062] SVR - SAVE WORKING REGISTERS.
- [04080] WNL - WRITE NEW ALIGNED LINE.
- [04174] COMMON DECKS.
- [04380] ERR - ISSUE COMMAND ERROR MESSAGE.
- [04389] TARG - TABLE OF ARGUMENTS.
- [04403] MARG - TABLE OF MODE ARGUMENTS.
Source Code
- EDIT.txt
- 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
cdc/nos2.source/opl871/edit.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator