IDENT IEDIT,FWA,IEDIT
ABS
SST
ENTRY IEDIT
ENTRY MFL=
ENTRY CLB=
ENTRY SSM=
SYSCOM B1 DEFINE (B1) = 1
LIST F
TITLE IEDIT - IN-LINE EDITOR.
SPACE 4,10
*COMMENT IEDIT - IN-LINE EDITOR.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
SPACE 4,10
***** IEDIT - IN-LINE EDITOR.
*
* J. W. YOCUM. 79/12/17.
* C. S. MEAGHER. 80/04/22.
* S. P. BOOTH. 80/05/31.
* K. F. REHM. 81/08/10.
* S. D. PAINTER. 81/08/10.
SPACE 4,10
*** *IEDIT* IS A *CPU* PROGRAM WHICH IS CALLED BY *IAF*
* TO PERFORM AN EDITING FUNCTION ON A LINE NUMBERED FILE.
* IT IS DESIGNED TO BE EXECUTED THROUGH THE *IAF* INTERFACE.
* THE EDIT COMMAND IS PLACED INTO THE COMMAND LINE BUFFER,
* THROUGH THE USE OF THE *CLB=* ENTRY POINT.
SPACE 4,10
*** COMMAND FORMAT.
*
*
* IEDIT (FN=LFN,OP=OPTIONS,CS=CHARTYPE)
*
* LFN NAME OF EDIT FILE. THIS PARAMETER
* IS REQUIRED.
*
* OPTIONS B, F, L (ANY COMBINATION MAY BE USED).
*
* B - BASIC SUBSYSTEM FLAG INDICATING BASIC
* RESEQUENCING SHOULD BE PERFORMED AS
* REQUIRED (OMITTED WHEN TERMINAL IS NOT
* IN BASIC SUBSYSTEM).
*
* F - FORTRAN SUBSYSTEM FLAG INDICATING
* TERMINAL IS IN FORTRAN SUBSYSTEM
* (OMITTED WHEN TERMINAL IS NOT IN
* FORTRAN SUBSYSTEM).
*
* L - LIST FLAG. IF PRESENT, ALL LINES
* CHANGED WILL BE ECHOED TO THE
* TERMINAL.
* IF OMITTED CHANGED LINES ARE NOT
* ECHOED. (TERMINAL USER MAY SUSPEND
* ECHO CAPABILITIES BY ENTERING A USER
* BREAK.)
*
*
* CHARTYPE CHARACTER TYPE DEFINITION
* NORMAL - DISPLAY CODE. ( DEFAULT )
* ASCII - 6/12 ASCII.
SPACE 4,10
*** ERROR MESSAGES.
*
* THE FOLLOWING ERROR MESSAGES WILL BE ISSUED WHEN AN ERROR
* IS ENCOUNTERED, CAUSING *IEDIT* TO ABORT WITHOUT EXECUTING
* THE COMMAND.
*
* *BUFFER SPACE ERROR (TOV).* - INTERNAL ERROR.
*
* *COMMAND ARGUMENT ERROR.* - AN INCORRECT PARAMETER
* WAS ENTERED ON THE COMMAND.
*
* *COMMAND NOT PROCESSED DUE TO OVERLAP.* - YOU HAVE SPECIFIED
* THAT THE SELECTED EDIT COMMAND SHOULD NOT BE
* PROCESSED DUE TO OVERLAPPING LINE NUMBERS.
*
* *DUPLICATE FILE NAME.* - A DUPLICATE FILE NAME WAS
* ENCOUNTERED ON A SINGLE DIRECTIVE.
*
* *EMPTY FILE (SSF).* - INTERNAL ERROR.
*
* *FILE NAME ERROR.* - THE FILE NAME SPECIFIED CONTAINS MORE
* THAN SEVEN CHARACTERS OR NON-ALPHANUMERIC CHARACTERS.
*
* *INCORRECT SYNTAX.* - A REQUIRED PARAMETER IS MISSING,
* PARAMETERS ARE GIVEN IN THE WRONG ORDER, OR AN
* INCORRECT SEPARATOR HAS BEEN ENCOUNTERED.
*
* *LINE NUMBER INCREMENT ERROR.* - THE LINE NUMBER INCREMENT
* SPECIFIED IS LESS THAN ONE OR GREATER THAN 4095.
*
* *LINE NUMBER LIMIT EXCEEDED.* - AN ATTEMPT TO MOVE,
* DUPLICATE, OR READ A GROUP OF LINES IN THE EDIT FILE
* REQUIRED A LINE NUMBER GREATER THAN 99999 TO BE
* ASSIGNED.
*
* *LINE NUMBER OVERLAP ERROR.* - TWO OR MORE LINE RANGES HAVE
* AT LEAST ONE LINE NUMBER IN COMMON.
*
* *LINE RANGE ERROR.* - AN INCORRECT LINE NUMBER WAS SPECIFIED
* IN A LINE RANGE.
*
* *NO LINE NUMBER ON LINE.* - EITHER THE PRIMARY FILE OR A
* SEQUENCED READ FILE CONTAINS A LINE WITHOUT A LINE
* NUMBER.
*
* *NO LINES FOUND.* - NO LINE IN THE EDIT FILE MEETS THE
* CRITERIA SPECIFIED BY THE EDIT COMMAND.
*
* *NO READ/DESTINATION FILE SPECIFIED.* - NO READ OR
* DESTINATION FILE WAS SPECIFIED IN THE EDIT COMMAND.
*
* *NON-EXISTENT EDIT VERB SPECIFIED.* - INTERNAL ERROR.
*
* *READ FILE EMPTY.* - THE READ FILE SPECIFIED DOES NOT EXIST
* OR CONTAINS NO DATA.
*
* *RESERVED FILE NAME.* - A RESERVED FILE NAME WAS INCORRECTLY
* USED.
*
* *TOO SMALL BUFFER SPACE.* - INTERNAL ERROR.
*
* THE FOLLOWING MESSAGES ARE ISSUED TO NOTIFY THE USER OF AN
* UNUSUAL CONDITION. THE *IEDIT* COMMAND IS PROCESSED TO
* COMPLETION.
*
* *NO CLOSING DELIMITER FOUND.* - NO CLOSING DELIMITER WAS
* FOUND ON A STRING. A STRING IS CONSIDERED TO END
* AFTER THE LAST NON BLANK CHARACTER.
*
* *ZZZZZ LINES TRUNCATED ON FILE QQQQQQQ.* - ZZZZZ LINES WERE
* TRUNCATED ON FILE QQQQQQQ.
* ESTABLISH QUAL BLOCK ORDER.
QUAL IEDIT1
QUAL COMCBLP
QUAL COMCSNF
QUAL MACRO$
QUAL
TITLE MACRO DEFINITIONS.
DAC SPACE 4,15
** DAC - DECLARE ATTRIBUTES FOR CHARACTER POSITION.
*
* DAC GENERATES A WORD WHICH STORES ATTRIBUTES FOR TWO
* CHARACTERS. THE HIGH 30 BITS HOLD THE CHARACTER ATTRIBUTES
* FOR AN ASCII 6/12 CHARACTER. THE LOW 30 BITS HOLD THE SAME
* DATA FOR AN ASCII8 CHARACTER. EACH HALF ALSO CONTAINS THE
* DISPLAY CODE EQUIVALENT OF ITS CHARACTER IF ONE EXISTS.
*
* DAC DI,DC,DA,AI,AC,AA
*
* ENTRY DI - IF SPECIFIED, NO DISPLAY CODE EQUIVALENT OF
* ASCII 6/12 CHARACTER.
* DC - DISPLAY CODE EQUIVALENT OF 6/12 ASCII
* CHARACTER.
* DA - ATTRIBUTES FOR ASCII 6/12 CHARACTER.
* AI - IF SPECIFIED, NO DISPLAY CODE EQUIVALENT OF
* ASCII8 CHARACTER.
* AC - DISPLAY CODE EQUIVALENT OF ASCII8 CHARACTER.
* AA - ATTRIBUTES FOR ASCII8 CHARACTER.
*
* EXIT ENTRIES GENERATED IN THE FOLLOWING FORMAT -
*
*T 1/DI,NBIC/DC,DIST/0,MXNA/DA,1/AI,NBIC/AC,DIST/0,MXNA/AA
*
* WHERE -
* NBIC - NUMBER OF BITS IN DISPLAY CODE CHARACTER.
* MXNA - MAXIMUM NUMBER OF ATTRIBUTES PER CHARACTER.
* DIST - PROPER NUMBER OF BITS TO ENSURE THAT CHARACTER
* DATA FITS EXACTLY IN 30 BITS.
*
PURGMAC DAC
DAC MACRO DI,DC,DA,AI,AC,AA
MACREF DAC
DIST EQU 30-1-NBIC-MXNA
.A IFC EQ,*DA**
VFD 30/7777777777B
.A ELSE
.B IFC NE,*DI**
VFD 1/1,NBIC/0,DIST/0,MXNA/DA
.B ELSE
VFD 1/0,NBIC/DC_B,DIST/0,MXNA/DA
.B ENDIF
.A ENDIF
.A IFC EQ,*AA**
VFD 30/7777777777B
.A ELSE
.B IFC NE,*AI**
VFD 1/1,NBIC/0,DIST/0,MXNA/AA
.B ELSE
VFD 1/0,NBIC/AC_B,DIST/0,MXNA/AA
.B ENDIF
.A ENDIF
DAC ENDM
FIELD SPACE 4,20
** FIELD - DEFINE FIELDS.
*
* TAGS ARE GENERATED TO GIVE THE WORD LOCATION, BIT
* LOCATION, AND NUMBER OF BITS IN FIELD.
*
* ENTRY TAG FIELD WP,LB,RP
* TAG = NAME OF FIELD (1-6 LEGAL COMPASS CHARACTERS)
* = *, USE CURRENT VALUE OF PSEUDO ORG COUNTER ORLOC1$
* LB = LEFT-MOST BIT POSITION WITHIN A WORD (BIT 59 BEING
* SIGN BIT).
* RB = RIGHT-MOST BIT POSITION WITHIN A WORD.
*
* EXIT TAGW = WORD LOCATION OF FIELD.
* TAGS = LEFT BIT POSITION OF FIELD.
* TAGN = NUMBER OF BITS IN FIELD.
PURGMAC FIELD
MACRO FIELD,TAG,WP,LB,RB
MACREF FIELD
IFC NE,/WP//,4
IFC EQ,/WP/*/,2
_TAG_W EQU ORLOC1$
SKIP 1
_TAG_W EQU WP
_TAG_S EQU LB
_TAG_N EQU LB-RB+1
ENDM
BASE *
ENDX
MXB SPACE 4,15
** MXB - MASK WITH B REGISTER
*
* ENTRY I - X REGISTER TO PLACE MASK IN.
* J - B REGISTER SPECIFING SIZE OF MASK.
* 0 .LE. (B(J)) .LE. 60.
*
* EXIT MX(I) CONTAINS MASK OF SIZE SPECIFIED IN B(J).
* B(J) SAME AS ON ENTRY.
*
* MXB PROVIDES A MASK INSTRUCTION USING A B REGISTER.
* RESTRICTION - 0 .LE. (B) .LE. 60
MXB OPDEF I,J
BX.I X.I-X.I CLEAR X REGISTER
SB.J B.J-B1
PX.I X.I,B.J
AX.I 58
LX.I 59-0
AX.I B.J A BIT MASK
SB.J B.J+B1 RESTORE BJ
ENDM
OVLDEF SPACE 4,10
** OVLDEF - DEFINE IEDIT OVERLAY.
*
* OVLDEF LA,EA,LEVEL,TITLE
*
* LA = LOAD ADDRESS.
* EA = ENTRY ADDRESS.
* LEVEL = LEVEL OF OVERLAY.
* TITLE = TITLE OF OVERLAY.
PURGMAC OVLDEF
OVLDEF MACRO LA,EA,LVL,TEXT
MACREF OVLDEF
QUAL IEDIT_LVL
TTL IEDIT_LVL - TEXT
TITLE
IDENT IEDIT_LVL,LA,EA,LVL,0
*COMMENT IEDIT - TEXT
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
ORG LA
ENDM OVLDEF
VERB SPACE 4,40
** VERB - DECLARE VERB.
*
* VERB V,AL,P,FP DECLARE VERB
* VERB DECLARE END OF VERB DECLARATIONS.
*
* ENTRY V - IEDIT VERB.
* AL - * IF ALL ABBREVIATIONS OF THE VERB ARE TO BE
* GENERATED; OTHERWISE NULL(OR ANY OTHER SYMBOL).
* P - ORDERED LIST OF PROCESSOR DESCRIPTORS IN THE FORM
* (AD,CON) -
* AD - ENTRY ADDRESS OF PROCESSOR.
* CON - R, IF SYNTACTIC ELEMENT REQUIRED.
* O, IF SYNTACTIC ELEMENT IS OPTIONAL
* (0 OR 1 OCCURRENCES).
* A, IF ALTERNATE SYNTAX FOR COMMAND
* FOLLOWS.
* FP - FUNCTION PROCESSOR NUMBER.
*
* EXIT ENTRIES GENERATED ARE OF THREE TYPES, TYPE1, TYPE2
* AND TYPE3.
*T TYPE1 42/CV,6/0,6/P,6/V
*T,TYPE2 2/OP,40/OFFSET,18/ADR
*T,TYPE3 2/0,1/1,39/0,18/FP
* WHERE -
* CV - V OR ALLOWED ABBREVIATION OF V IN DISPLAY CODE.
* P - NUMBER OF WORDS INCREMENT TO START OF LIST
* OF PROCESSORS.
* V - NUMBER OF WORDS INCREMENT TO NEXT VERB.
* OP - 1, IF PROCESSOR RECOGNITION OF AN ELEMENT IS
* OPTIONAL. I.E. 0 OR 1 OCCURRENCES ARE
* TO BE ACCEPTED.
* - 2 IF PROCESSOR MUST PROCESS AN OCCURENCE OF
* THE SYNTACTIC ELEMENT
* ( I.E. THIS FUNCTION IS REQUIRED).
* OFFSET - OFFSET TO ALTERNATE SYNTAX FROM
* START OF TABLE.
* ADR - ENTRY ADDRESS OF SYNTAX PROCESSOR.
*
* MACROS DSUB.
PURGMAC VERB
VERB MACRO V,AL,P,FP
LOCAL S,L,NM1,R,CV,LIST
MACREF VERB
.A IFC NE,$_V_AL_P_$$
S MICRO 1,,$V$
L MICCNT S
.B IFLT L,3
ERR INCORRECT VERB SPECIFIED
.B ENDIF
.B IFC EQ,$AL$*$
R SET L-3+1 REPETITION COUNT
.B ELSE
R SET 1
.B ENDIF
VERB DUP R
.B IF -DEF,VERBA
N1 SET 1
LASTNM1 MICRO 1,,$VERBA$
.B ELSE
N1 SET N1+1
.B ENDIF
NM1 MICRO N1,1,$BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$
CV MICRO 1,L,$"S"$
"LASTNM1" VFD TDVNN/0L_"CV",TDXXN/0,TDISN/LIST-*,TDIVN/VERB_"NM1"-*
LASTNM1 MICRO 1,,$VERB_"NM1"$
L SET L-1
VERB ENDD
N2 SET 1
NM2 MICRO N2,1,$1234567890$
ALTM MICRO 1,,$."NM1"_"NM2"$
LIST BSS 0
IRP P
NWDS SET *
DSUB P,"ALTM"
.B IFEQ *-NWDS,0
VFD TDRQN/0
VFD TDOPN/0
VFD TDFPN/1
VFD TDRSN/0
VFD TDASN/0
VFD TDSAN/FP
"ALTM" BSS 0
N2 SET N2+1
NM2 MICRO N2,1,$1234567890$
ALTM MICRO 1,,$."NM1"_"NM2"$
.B ENDIF
IRP
"ALTM" EQU 0
VFD TDRQN/0
VFD TDOPN/0
VFD TDFPN/1
VFD TDRSN/0
VFD TDASN/0
VFD TDSAN/FP
.A ELSE
"LASTNM1" BSSZ 1
.A ENDIF
VERB ENDM
DSUB SPACE 4,10
** DSUB - DECLARE SUBROUTINE (HELPER MACRO).
*
PURGMAC DSUB
DSUB MACRO AD,C,ALT
LOCAL F
MACREF DSUB
.A IFC NE,$AD$$
F EQU *
.B IFC EQ,$C$R$
VFD TDRQN/1
VFD TDOPN/0
VFD TDFPN/0
VFD TDRSN/0
VFD TDASN/ALT
VFD TDSAN/AD
.B ENDIF
.B IFC EQ,$C$O$
VFD TDRQN/0
VFD TDOPN/1
VFD TDFPN/0
VFD TDRSN/0
VFD TDASN/ALT
VFD TDSAN/AD
.B ENDIF
.B IFEQ F-*,0
ERR SECOND PARAMETER WRONG
.B ENDIF
.A ELSE
.B IFC NE,$C$A$
ERR
.B ENDIF
.A ENDIF
DSUB ENDM
TITLE COMMON DECKS.
** DEFINITION COMMON DECKS.
*
*CALL COMCMAC
*CALL COMCCMD
*CALL COMCMTM
TITLE WORKING STORAGE.
ORG 111B
FWA BSS 0
** ASSEMBLY CONSTANTS.
CLRL1 EQU 1 CLEAR LINE 1 OF CONTROL POINT
EC1 EQU 74B ESCAPE CODE 1
EC2 EQU 76B ESCAPE CODE 2
LBINC EQU 250 LINE BUFFER TABLE INCREMENT
LNTINC EQU 50 LINE NUMBER TABLE INCREMENT
MINCR EQU 2000B MEMORY INCREMENT
SNF$ SET 0 SNF WILL RETURN NUMBER OF SORTED LINES
TRIM SET 0 TRIM MODE DESELECTED
USBL$ SET 1
USBA$ SET 1
RDX$ SET 1 SUPPRESS HALF-BUFFER CIO THRESHOLD
WTX$ SET 1 SUPPRESS HALF-BUFFER CIO THRESHOLD
MXWL EQU 32D MAXIMUM CM WORDS IN LINE
MXCIL EQU MXWL*10D/2 MAXIMUM CHARACTERS IN LINE
MXIC EQU 4095 MAXIMUM INCREMENT SIZE
MXLN EQU 99999 MAXIMUM LINE NUMBER
MXWS EQU 7 MAXIMUM WORD SIZE IS SEVEN CHARACTERS
NBIC EQU 6 NUMBER OF BITS IN CHARACTER
NUMD EQU 5 MAXIMUM DIGITS IN LINE NUMBER
NWIF EQU 7 NUMBER OF WORDS IN FET
* THE MAIN AND LINE BUFFERS EACH CONTAIN THREE EXTRA
* WORDS TO ALLOW *COMCSNF* TO SPLIT EACH BUFFER IN HALF
* AND STILL HAVE TWO EXTRA WORDS IN THE SECOND HALF.
* FOR MORE INFORMATION SEE *COMCSNF*.
EBSZ EQU 4004B MAIN BUFFER SIZE
LNTSZ EQU 201B LINE NUMBER TABLE SIZE
LBSZ EQU 1404B LINE BUFFER SIZE
SCRASZ EQU 1401B FIRST SCRATCH BUFFER SIZE
SCRBSZ EQU 1401B SECOND SCRATCH BUFFER SIZE
SCRCSZ EQU 4401B SEQUENTIAL FILE-REBUILD BUFFER SIZE
OTSZ EQU 1001B OUTPUT BUFFER SIZE
INSZ EQU 101B INPUT/CLB= BUFFER SIZE
BUFL EQU EBSZ+LNTSZ+LBSZ+SCRASZ+SCRBSZ
BUFL2 EQU EBSZ+SCRCSZ
** COMMAND PARAMETERS.
EFN CON 0 EDIT FILE NAME
BOP CON 0 B OPTION
LOP CON 0 L OPTION
FOP CON 0 F OPTION
** VARIABLES SET BY PRESET.
BLNK CON 0 SET TO A BLANK IN CURRENT CHARACTER SET
CSTI CON 0 CHARACTER SET TYPE INDICATOR
FILEN CON 0 FILE NAME OF SECONDARY FILE
FLNGTH CON 0 LENGTH OF ORIGINAL EDIT FILE
FNUM CON 0 FUNCTION NUMBER
INCR CON 1 RESEQUENCING INCREMENT
LNIA CON MXLN+1 LINE NUMBER TO INSERT AFTER
LSTFIL CON 0 LIST OPTION
MSTAT VFD 30/-1,30/0 MEMORY STATUS WORD
NCIS CON 0 NUMBER OF CHARACTERS IN SEARCH STRING
NCIR CON 0 NUMBER OF CHARACTERS IN REPLACEMENT STRING
NELR CON 0 NUMBER OF ENTRIES IN LINE RANGE TABLE
** VARIABLES SET BY LINE SELECT/PROCESSING PHASE.
APPFLG CON 0 CHANGE RECORDS APPENDED FLAG
CMAX CON 0 MAXIMUM AMOUNT OF MEMORY AVAILABLE
CMEM CON 0 CURRENT AMOUNT OF MEMORY BEING USED
DYNST CON 0 AMOUNT OF DYNAMIC STORAGE
FLAGS CON 0 *LNTBUF* ENTRY FLAGS
FNAI CON MXLN+1 FIRST LINE NUMBER AFTER INSERTION
INTFLG CON 0 SET IF NOT INTERRUPTIBLE
LSRA CON 0 NUMBER TO ASSIGN TO FIRST INSERTED LINE
LTFILE CON 0 *LNT* FILE FLAG
LBFILE CON 0 LINE BUFFER FULL FLAG
LBFET CON E FET ADDRESS OF CURRENT LINE BUFFER
LB2FET CON L FET ADDRESS OF SCRATCH LINE BUFFER
LTFET CON LNT1 FET ADDRESS OF SORT/MERGED *LNT* FILE
LT2FET CON LNT2 FET ADDRESS OF A FREE SCRATCH BUFFER
NBLN CON 0 NEW BINARY LINE NUMBER
NCOL CON 0 NUMBER OF CHARACTERS ON A LINE
NMLS CON 0 NUMBER *LNT* ENTRIES CURRENTLY IN BUFFER
NNOL CON 0 NUMBER OF NON-OVERLAPPED LINES
NTBL CON 0 NUMBER OF TRAILING BLANKS IN LINE
NTL CON 0 NUMBER OF TRUNCATED LINES
OBLN CON -1 OLD BINARY LINE NUMBER
OLLE CON 0 OVERLAPPED LINES LINE RANGE TABLE ENTRY
OVLPFG CON 0 OVERLAP PROCESSING FLAG
OUT DATA C*OUTPUT* FILE NAME TO WRITE TO
SCRFIL CON 0 SCRATCH BUFFER FLAG
TRNC CON 0 TRUNCATED LINE FLAG
UNRF CON 0 UNNUMBERED *READ* FILE FLAG
SPACE 4,15
** TABLE OF FUNCTION NUMBERS.
TOFN BSS 0 BEGINNING OF FUNCTION TABLE
LOC 1
FNDU VFD 18/EFN,42/0 DUP
FNMO VFD 18/EFN,42/0 MOVE
FNRE VFD 18/EFN,42/0 READ
MXIL EQU *-1 MAXIMUM FUNCTION TO CAUSE OVERLAP
FNAL VFD 18/EFN,42/0 ALTER
FNDE VFD 18/EFN,42/0 DELETE
FNLI VFD 18/OUT,42/0 LIST/LNH
MXNW EQU *-1 MAXIMUM NON-*WRITE(N)* FUNCTION
FNWR VFD 18/FILEN,42/0 WRITE
FNWN VFD 18/FILEN,42/0 WRITEN
LOC *O
SPACE 4
** TABLE OF SCRATCH FILES.
TSF BSS 0
VFD 42/0LZZZZZG0,18/0 LINE BUFFER FILES
VFD 42/0LZZZZZG1,18/0
VFD 42/0LZZZZZG2,18/0 LINE NUMBER TABLE FILES
VFD 42/0LZZZZZG3,18/0
VFD 42/0LZZZZZG4,18/0 SORT FILES
VFD 42/0LZZZZZG5,18/0
VFD 42/0LZZZZZG6,18/0 DELETED LINE NUMBER FILE
VFD 42/0LZZZZZG7,18/0 TRUNCATED LINE FILE
CON 0
SPACE 4,5
** *FILINFO* PARAMETER BLOCK.
FIPB VFD 42/0,6/5,12/1
BSSZ 4
SPACE 4,5
** *LOF* PARAMETER BLOCK.
LOFPRM VFD 12/0,18/PRMW2,30/0
PRMW2 VFD 42/0,18/3
VFD 42/0LOUTPUT,18/O
VFD 60/0
SPACE 4,5
** *REPRIEVE* PARAMETER BLOCK.
RPB BSS 0
VFD 36/0,12/RPBL,12/0
VFD 30/0,30/PIT
BSSZ 7
BSSZ 16 EXCHANGE PACKAGE
RPBL EQU *-RPB
TITLE TABLES.
SPACE 4,10
** FIELD DEFINITIONS FOR VERB TABLE.
TDVN FIELD ,59,18 VERB NAME
TDXX FIELD ,17,12 RESERVED FOR CDC
TDIS FIELD ,11,6 INCREMENT TO START OF PROCESSES FOR VERB
TDIV FIELD ,5,0 INCREMENT TO NEXT VERB
TDRQ FIELD ,59,59 REQUIRED ATTRIBUTE (SET IF YES)
TDOP FIELD ,58,58 OPTIONAL
TDFP FIELD ,57,57 SET IF AT END OF PROCESSORS FOR VERB
TDRS FIELD ,56,36 RESERVED FOR CDC
TDAS FIELD ,35,18 OFFSET TO FWA OF ALTERNATE SYNTAX
TDSA FIELD ,17,0 SUBROUTINE ADDRESS TO PROCESS
** CHARACTER ATTRIBUTE BIT LOCATIONS.
LETA EQU 1S0 LETTER ATTRIBUTE
DIGA EQU 1S1 DIGIT (NUMBER) ATTRIBUTE
DLMA EQU 1S2 DELIMITER ATTRIBUTE
CHAA EQU 1S3 CHARACTER ATTRIBUTE
SEPA EQU 1S4 SEPARATOR ATTRIBUTE
TERA EQU 1S5 TERMINATOR ATTRIBUTE
MXNA EQU 6 MAXIMUM NUMBER OF ATTRIBUTES PER CHARACTER
SEDE EQU SEPA+DLMA
*LNT* SPACE 4,10 ATTRIBUTE BIT LOCATIONS DEFINED
** THE *LNT* CONSISTS OF ONE WORD ENTRIES EITHER IN A BUFFER
* OR WRITTEN OUT TO A LOCAL DISK FILE. THE FORMAT OF A
* *LNT* ENTRY IS -
*
*T 18/NLN, 18/OLN, 1/O, 23/
*
* NLN = NEW LINE NUMBER.
* OLN = OLD LINE NUMBER.
* O = OVERLAP PROCESSING FLAG.
FOVL EQU 23 OVERLAPPED LINE FLAG
BUFFERS SPACE 4,10
** BUFFER DEFINITIONS.
LRT BSS MXWL+1 LINE RANGE TABLE
CLIN BSS 0 CURRENT EDIT FILE LINE BEING WORKED
USBB BSS MXCIL+1 STRING BUFFER USED BY *USB*
INBUF BSS INSZ INPUT BUFFER
OTBUF BSS OTSZ OUTPUT BUFFER
PCKDBF BSSZ MXWL+1 PACKED LINE BUFFER
RBUF BSSZ MXCIL REPLACEMENT BUFFER
SBUF BSSZ MXCIL SEARCH STRING BUFFER
TRBUF BSS 204B TRUNCATED LINE BUFFER
EFBUF TABLE EDIT FILE BUFFER
SCRBA TABLE SCRATCH 1 / REBUILD BUFFER
SCRBB TABLE SCRATCH BUFFER 2
LNBUF TABLE LINE BUFFER
LNTBUF TABLE LINE NUMBER TABLE BUFFER
SPACE 4,10 INTERFACE FILE FETS
** FET DEFINITIONS.
E BSS 0 EDIT FILE BUFFER
EFB FILEB 0,0,(FET=NWIF)
I BSS 0 INPUT BUFFER
INPUT FILEB INBUF,INSZ,(FET=NWIF)
O BSS 0 OUTPUT BUFFER
OUTPUT FILEB OTBUF,OTSZ,(FET=NWIF)
L BSS 0 LINE BUFFER FILE
ZZZZZG0 FILEB 0,0,(FET=NWIF)
LNT1 BSS 0 LINE NUMBER TABLE FILE
ZZZZZG2 FILEB 0,0,(FET=NWIF)
LNT2 BSS 0 *LNT* SCRATCH FILE
ZZZZZG3 FILEB 0,0,(FET=NWIF)
SCR BSS 0 SCRATCH FILE 0
ZZZZZG4 FILEB 0,0,(FET=NWIF)
SCR1 BSS 0 SCRATCH FILE 1
ZZZZZG5 FILEB 0,0,(FET=NWIF)
TRNCFET BSS 0 TRUNCATED LINE BUFFER
ZZZZZG7 FILEB TRBUF,204B,(FET=NWIF)
TITLE MAIN PROGRAM.
MAIN SPACE 4,20
** IED - MAIN LOOP OF PROGRAM.
*
* ENTRY NONE.
*
* EXIT *IEDIT* PROCESSING COMPLETED.
* TO *ERR* - IF A FATAL ERROR IS DETECTED.
*
* USES X - 0, 1, 2, 3, 5, 6.
* A - 1, 2, 3, 6.
* B - 2, 5.
*
* CALLS ABS, CDD, ERT, MRD, PRS, PSC, RSF, SFI, SNM.
*
* MACROS ENDRUN, FILINFO, RETURN, SYSTEM, WRITEC, WRITER.
IEDIT BSS 0 ENTRY
RJ PRS
SA1 EFBUF ALLOCATE SPACE FOR MAIN BUFFER
SX2 EBSZ
RJ ABS
NG X6,IED9 IF NOT ENOUGH ROOM FOR MAIN BUFFER
SA1 SCRBA ALLOCATE SPACE FOR SCRATCH/REBUILD
SX2 SCRASZ
SA3 FNUM
SX3 X3-MXIL-1
NG X3,IED1 IF NON-SEQUENTIAL COMMAND
SX2 SCRCSZ
RJ ABS
NG X6,IED9 IF NOT ENOUGH SPACE FOR SEQUENTIAL COMMAND
EQ IED2 PROCESS SEQUENTIAL COMMAND
IED1 RJ ABS
NG X6,IED9 IF NOT ENOUGH SPACE FOR SCRATCH BUFFER
SA1 SCRBB ALLOCATE SECOND SCRATCH BUFFER
SX2 SCRBSZ
RJ ABS
NG X6,IED9 IF NOT ENOUGH SPACE FOR *SCRBB*
SA1 LNBUF ALLOCATE SPACE FOR LINE BUFFER
SX2 LBSZ
RJ ABS
NG X6,IED9 IF NOT ENOUGH SPACE FOR *LBUF*
SA1 BOP
ZR X1,IED2 IF *LNT* NOT NEEDED
SA1 LNTBUF
SX2 LNTSZ
RJ ABS ALLOCATE BUFFER
NG X6,IED9 IF NOT ENOUGH ROOM FOR *LNT*
IED2 RJ SFI UPDATE FET POINTERS FOR ALLOCATED TABLES
SA1 EFN
SA2 FIPB
MX3 42
BX1 X1*X3
BX2 -X3*X2
BX6 X1+X2
SA6 A2
FILINFO FIPB GET LENGTH OF EDIT FILE
SA2 FIPB+3
MX3 24
BX6 X2*X3
LX6 24
SA6 FLNGTH
SA1 FNUM
SX2 X1-MXIL-1
PL X2,IED3 IF A SEQUENTIAL COMMAND
SX7 B0+
RJ RSF REWIND SCRATCH FILES
RJ MRD PROCESS A *MOVE*, *READ*, OR *DUP*
EQ IED4 POST PROCESS COMMAND
IED3 RJ PSC PROCESS A SEQUENTIAL COMMAND
IED4 SA1 NTL
ZR X1,IED6 IF NO TRUNCATED LINES
RJ CDD REPORT TRUNCATIONS
MX0 B2 DELETE TRAILING SPACES
BX1 X0*X4
SB2 1RZ
SB5 ERRLTF
RJ SNM SET NAME IN MESSAGE
SB5 ERRLTF
SB2 1RQ
SA2 FNUM
SA1 X2+TOFN-1
LX1 18
SA1 X1
RJ SNM SET NAME IN MESSAGE
WRITEC O,ERRLTF *ZZZZZ LINES TRUNCATED ON FILE QQQQQQQ.*
SA3 TRNCFET PREPARE TO PRINT TRUNCATED NUMBERS
MX2 42
BX3 -X2*X3
SX2 A3
SX3 X3-3
ZR X3,IED5 IF BUFFER NEVER WRITTEN TO DISK
SX3 B1+ INDICATE ON-DISK STATUS
RJ ERT
RETURN TRNCFET
EQ IED6 PERFORM FINAL PROCESSING
IED5 RJ ERT ECHO RECORD TO TERMINAL
IED6 SA1 FNUM
SX1 X1-MXIL-1
PL X1,IED8 IF SEQUENTIAL COMMAND
SA1 APPFLG SET SORT FLAG IN TERMINAL TABLE
ZR X1,IED7 IF SORT STATUS DID NOT CHANGE
SYSTEM TLX,R,X1,1000B
IED7 SX7 B1
RJ RSF RETURN SCRATCH FILES
IED8 WRITER O
ENDRUN
IED9 SX5 ERRNES *NOT ENOUGH BUFFER SPACE AVAILABLE.*
EQ ERR EXIT TO ERROR PROCESSOR
TITLE FUNCTION PROCESSORS.
MRD SPACE 4,15
** MRD - *MOVE*, *READ*, AND *DUP* FUNCTION PROCESSOR.
*
* ENTRY (FILEN) = NAME OF *READ* FILE IF *READ* COMMAND.
*
* EXIT CHANGE RECORDS APPENDED TO END OF EDIT FILE.
*
* USES X - 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
*
* CALLS AEC, CBR, PLO, RLN, SLF, SLN, SLT.
*
* NOTES ALL LINES FROM THE *READ* FILE ARE IMPLICITLY
* SELECTED FOR INSERTION INTO THE EDIT FILE.
MRD SUBR ENTRY/EXIT
RJ SLF SELECT LINES FROM FILE
SA1 FNUM
SX1 X1-FNRE
NZ X1,MRD1 IF NOT A *READ* COMMAND
SX2 L SET *READ* FILE NAME INTO FET *L*
SA5 FILEN
RJ SLN
SX7 B1+
SA7 LBFILE
MRD1 SA5 TSF+6
SX2 SCR1
RJ SLN RESTORE *ZZZZZG6* INTO FET *SCR1*
SX5 B0+
RJ SBE SET *SCR1* EMPTY
SX7 B0+
RJ RLN REPLACE LINE NUMBER ON LINE
SA2 FNUM
SX2 X2-FNRE
NZ X2,MRD2 IF NOT A *READ* COMMAND
SX2 L SET *ZZZZZG0* INTO FET *L*
SA5 TSF+0
RJ SLN
MRD2 RJ PLO PROCESS LINE OVERLAP
SA1 BOP
ZR X1,MRD3 IF NOT IN *BASIC* SUBSYSTEM
SA1 UNRF CHECK FOR AN UNNUMBERED *READ* FILE
SA2 OVLPFG CHECK FOR NO OVERLAPPED LINES
BX1 -X2*X1
NZ X1,MRD3 IF BOTH CONDITIONS TRUE
RJ SLT SORT LINE NUMBER TABLE
RJ CBR CALL *BASIC* RESEQUENCER
MRD3 SA1 SCRFIL
ZR X1,MRD4 IF NOTHING WRITTEN TO DELETED LINES FILE
SX2 SCR
SA5 TSF+6
RJ SLN PUT DELETED LINES RECORD FILE NAME IN FET
SA5 EFN
SX3 B1
SX6 B0
SA6 LSTFIL
RJ AEC APPEND LINE NUMBERS TO EDIT FILE
SA1 LOP
SX6 X1+
SA6 LSTFIL
MRD4 SA5 EFN
SA2 LBFET
SA3 LBFILE
RJ AEC APPEND AND ECHO RECORD
EQ MRDX RETURN
TITLE SUBROUTINES.
ABL SPACE 4,10
** ABL - ADD BLANKS TO LINE.
*
* ENTRY (X2) = NUMBER OF DIGITS IN LINE NUMBER.
* (NCOL) = NUMBER OF CHARACTERS IN LINE.
* (BLNK) = BLANK CHARACTER TO BE APPENDED.
* CLIN = ADDRESS OF THE BEGINNING OF THE LINE.
*
* EXIT (NCOL) = X7 = NUMBER OF CHARACTERS IN LINE.
* PROPER NUMBER OF BLANKS APPENDED TO LINE, NOT
* TO EXCEED *MXCIL*.
*
* USES X - 1, 2, 3, 4, 6, 7.
* A - 1, 3, 4, 6, 7.
ABL SUBR ENTRY/EXIT
SA1 NCOL
SA4 BLNK
ABL1 SA3 X1+CLIN-1
SX1 X1-1
BX3 X3-X4
ZR X3,ABL1 IF CHARACTER A BLANK
SX7 X1+B1
SX1 MXCIL
SA3 X7+CLIN-1
BX6 X4
IX4 X7-X1
PL X4,ABL4 IF LINE HAS REACHED *MXCIL*
NZ X3,ABL2 IF LINE DOES NOT END IN A COLON
SA6 X7+CLIN ADD A BLANK AFTER THE COLON
SX7 X7+B1 UPDATE *NCOL*
IX4 X7-X1
PL X4,ABL4 IF LINE HAS REACHED *MXCIL*
ABL2 IX2 X2-X7
NZ X2,ABL3 IF LINE CONTAINS MORE THAN A LINE NUMBER
SA6 X7+CLIN
SX7 X7+2
SA6 A6+1
ABL3 BX2 X7
LX2 59-0
PL X2,ABL4 IF LINE HAS AN EVEN NUMBER OF CHARACTERS
SA6 X7+CLIN
SX7 X7+1
ABL4 SA7 NCOL
EQ ABLX RETURN
ABS SPACE 4,20
** ABS - ALLOCATE BUFFER SPACE.
*
* ENTRY (A1) = TABLE NUMBER BEING ALLOCATED.
* (X2) = WORD COUNT (+ OR -) TO BE ALLOCATED.
* (DYNST) = AMOUNT OF DYNAMIC STORAGE LEFT.
*
* EXIT (DYNST) = AMOUNT OF DYNAMIC STORAGE LEFT.
* (X6) .LT. 0, IF NOT ENOUGH MEMORY AVAILABLE.
*
* USES X - 1, 2, 3, 6, 7.
* A - 0, 1, 2, 3, 6, 7.
*
* CALLS RAF.
*
* MACROS ALLOC, MEMORY.
*
* NOTES THERE MUST BE NO *CIO* ACTIVITY (ALL FETS MUST BE
* *RECALLED*) BEFORE CALLING *ALLOC*.
ABS3 BX6 X1
SA6 CMEM
SX6 -B1
ABS SUBR ENTRY/EXIT
SX6 A1 SAVE ENTRY CONDITIONS
SX7 X2
SA6 ABSA
SA7 ABSB
RJ RAF RECALL ALL FETS
ABS1 SA2 ABSA RESTORE ENTRY CONDITIONS
SA1 ABSB
SA0 X2
SA3 DYNST AMOUNT OF DYNAMIC STORAGE LEFT
IX6 X3-X1
NG X6,ABS2 IF NOT ENOUGH DYNAMIC STORAGE
SA6 DYNST
ALLOC A0,X1
BX6 X6-X6 INDICATE SUCCESSFUL REALLOCATION
EQ ABSX RETURN
* SET UP MEMORY REQUEST.
ABS2 SA1 CMEM GET CURRENT MEMORY
SX3 MINCR
IX2 X1+X3
SA3 CMAX
IX6 X3-X2
NG X6,ABSX IF REQUEST WOULD EXCEED VALIDATION LIMITS
BX6 X2
SA6 A1 UPDATE *CMEM*
LX6 30-0
SA6 MSTAT
MEMORY CM,MSTAT,R,,NA REQUEST ADDITIONAL MEMORY
SA1 MSTAT
SA2 CMEM
AX1 30
BX2 X1-X2
NZ X2,ABS3 IF REQUEST NOT HONORED
SA3 F.TEND UPDATE LWA OF TABLE
SX2 MINCR
SA1 DYNST
IX6 X3+X2
IX7 X1+X2
SA6 A3
SA7 A1
EQ ABS1 ALLOCATE SPACE FOR TABLE
ABSA CON 0 ENTRY CONDITIONS
ABSB CON 0
AEC SPACE 4,20
** AEC - APPEND AND ECHO CHANGE RECORD.
*
* ENTRY (X5) = NAME OF THE FILE TO APPEND TO.
* (X2) = FET ADDRESS OF BUFFER CONTAINING RECORD.
* (X3) = 0, IF CHANGE RECORD IS BUFFER RESIDENT.
* 1, IF CHANGE RECORD IS DISK RESIDENT.
* (LSTFIL) = 0, IF LIST OPTION IS OFF.
* 1, IF LIST OPTION IS ON.
*
* EXIT (X2) = UNCHANGED.
* RECORD APPENDED TO FILE AND ECHOED TO TERMINAL.
*
* USES X - 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
*
* CALLS CBO, SBE, SLN.
*
* MACROS READEI, REWIND, WRITE, WRITER.
AEC SUBR ENTRY/EXIT
BX7 X2
BX6 X5
SA7 AECC
SA6 A7-B1 SAVE APPENDED FILE NAME
SA1 X2+3 *OUT* WILL BE FIRST CBO PARAMETER
BX6 X1
SA6 AECD
ZR X3,AEC4 IF RECORD IS BUFFER RESIDENT
MX3 42
SA1 X2
BX6 X1*X3
SA6 AECA STORE ORIGINAL FILE NAME
REWIND X2,R
SA1 X2+3 *OUT* WILL BE FIRST CBO PARAMETER
BX6 X1
SA6 AECD
AEC1 READEI X2,R
SA1 LSTFIL
NZ X1,AEC2 IF LIST OPTION IS ON
SX2 O
SX5 B0
RJ SBE SET *OUTPUT* BUFFER EMPTY
SA2 AECC
AEC2 SA1 X2
LX1 59-9
NG X1,AEC4 IF LAST BUFFER OF DATA
SA5 AECB
RJ SLN PUT APPENDED FILE NAME IN FET
SA1 LSTFIL
ZR X1,AEC3 IF LINES NOT TO BE ECHOED TO TERMINAL
SA3 AECD
RJ CBO COPY BUFFER TO OUTPUT FROM (X3)
BX6 X3 SAVE UPDATED CBO PARAMETER
SA6 AECD
SA2 AECC
AEC3 SX6 B1+
SA6 APPFLG
WRITE X2,R APPEND LINES TO FILE
SA5 AECA
RJ SLN PUT ORIGINAL FILE NAME BACK IN FET
EQ AEC1 READ IN NEXT SEGMENT
AEC4 SA2 AECC
SA5 AECB
RJ SLN PUT APPENDED FILE NAME IN FET
SA1 LSTFIL
ZR X1,AEC5 IF LINES NOT TO BE ECHOED TO TERMINAL
SA3 AECD
RJ CBO COPY BUFFER TO OUTPUT
AEC5 SX6 B1+
SA6 APPFLG
WRITER X2,R FLUSH BUFFER TO APPENDED FILE
EQ AECX RETURN
AECA CON 0 ORIGINAL FILE NAME
AECB CON 0 FILE NAME OF FILE TO APPEND TO
AECC CON 0 FET ADDRESS
AECD CON 0 CBO START POINTER
CBO SPACE 4,15
** CBO - COPY BUFFER TO OUTPUT.
*
* ENTRY (X2) = FET WHOSE BUFFER IS TO BE PRINTED.
* (X3) = FIRST LOCATION TO TRANSMIT, INITIALLY *OUT*.
*
* EXIT (X2) = UNCHANGED.
* (X3) = LAST LOCATION TRANSMITTED + 1.
*
* USES X - 1, 2, 3, 4, 6.
* A - 1, 2, 3, 4, 6.
* B - 6, 7.
*
* CALLS WTO.
CBO SUBR ENTRY/EXIT
BX6 X2
SA6 CBOA SAVE FET ADDRESS
SA1 X2+B1 FIRST
SA4 X2+4 LIMIT
SA2 A1+B1 IN
SB6 X3 FIRST LOCATION TO OUTPUT
SB7 X2+ *IN* POINTER
SB7 B7-B6
ZR B7,CBO2 IF BUFFER EMPTY
NG B7,CBO1 IF BUFFER WRAPS AROUND
RJ WTO
EQ CBO2 EXIT
* PROCESS BUFFER WRAPAROUND.
CBO1 SB7 X4 LIMIT
SB7 B7-B6 COPY FIRST PART OF DATA
RJ WTO
SA2 CBOA
SA1 X2+B1 FIRST
SA2 A1+B1 IN
SB6 X1
SB7 X2
SB7 B7-B6 COPY SECOND PART OF DATA
RJ WTO
CBO2 SA2 CBOA RESTORE FET ADDRESS
SA3 X2+2
EQ CBOX RETURN
CBOA CON 0 FET ADDRESS OF BUFFER TO OUTPUT
CBR SPACE 4,15
** CBR - CALL *BASIC* RESEQUENCER.
*
* EXIT *BASIC* RESEQUENCING COMPLETED.
*
* USES X - 0, 1, 2, 3, 6, 7.
* A - 1, 2, 3.
*
* CALLS OVL=, PBR.
CBR SUBR ENTRY/EXIT
SA1 =0LIEDIT1
SA2 ACTR GET FILE NAME
SA3 LWPR GET FILE/SYSTEM LOAD FLAG
SX6 B1+
SX0 B1
MX7 42
LX3 59-18
LX0 12-0
NG X3,CBR1 IF LOADED FROM SYSTEM
BX1 X2*X7
SX6 B0
CBR1 BX6 X0+X6
SX2 B0
RJ OVL= LOAD THE *BASIC* OVERLAY
RJ /IEDIT1/PBR
EQ CBRX RETURN
CLN SPACE 4,20
** CLN - CHECK IF LINE NUMBER IS IN LINE RANGE TABLE.
*
* ENTRY ((A5)) = (X5) = PACKED LINE NUMBER TO BE EVALUATED.
*
* EXIT (X4) = 0, IF LINE NUMBER NOT IN *LRT*
* .NE. 0, IF LINE NUMBER IS IN *LRT*.
* (X3) = 0, IF LINE NOT FOLLOWED BY AT LEAST TWO
* BLANKS OR A NON-BLANK CHARACTER.
* (X6) = LINE NUMBER OF LINE IN BINARY FORM.
* (X7) = NUMBER OF DIGITS IN LINE NUMBER.
*
* USES X - 1, 4, 5.
* A - 5.
* B - 3, 4, 5.
*
* CALLS VPL.
*
* NOTES IF *LRT* (LINE RANGE TABLE) IS EMPTY, ALL LINES
* ARE ASSUMED TO HAVE BEEN SELECTED.
CLN SUBR ENTRY/EXIT
RJ VPL GET LINE NUMBER
SX5 ERRNLN *NO LINE NUMBER ON LINE.*
ZR X7,ERR IF NO LINE NUMBER ON LINE
SA5 NELR
MX4 1
SB5 X6
ZR X5,CLNX IF NO LINE NUMBERS IN *LRT*
SA5 LRT-1 INITIALIZE POINTER TO BEFORE *LRT*
CLN1 SA5 A5+B1 CHECK *LRT* ENTRY
SB4 X5 CHECK LOW ORDER VALUE
LT B5,B4,CLN2 IF LINE NUMBER NOT IN TABLE
SB3 -18 SET HIGH ORDER VALUE
LX1 X5,B3
SB3 X1
LE B5,B3,CLNX IF LINE NUMBER IN *LRT*
PL X5,CLN1 IF NOT AT END OF *LRT*
CLN2 SX4 B0+ NUMBER NOT IN *LRT*
EQ CLNX RETURN
CNL SPACE 4,15
** CNL - CONVERT AND NORMALIZE LINE NUMBER.
*
* ENTRY (X1) = LINE NUMBER, RIGHT JUSTIFIED, IN BINARY.
*
* EXIT (X6) = LINE NUMBER IN DISPLAY CODE.
*
* USES X - 1, 4, 6.
*
* CALLS CDD.
CNL SUBR ENTRY/EXIT
SX4 100000
IX1 X1+X4 ENSURE LEADING ZEROES
RJ CDD CONVERT TO DECIMAL DISPLAY CODE
MX6 NBIC*NUMD
LX4 NBIC TRUNCATE LEADING *1* DIGIT
BX6 X4*X6
EQ CNLX RETURN
ERT SPACE 4,20
** ERT - ECHO RECORD TO TERMINAL.
*
* ENTRY (X2) = FET ADDRESS OF BUFFER CONTAINING RECORD.
* (X3) = 0, IF RECORD IS BUFFER RESIDENT.
* 1, IF RECORD IS DISK RESIDENT.
* (LSTFIL) = 0, IF LIST OPTION IS OFF.
* 1, IF LIST OPTION IS ON.
*
* USES X - 1, 3, 5, 6.
* A - 1, 3, 6.
*
* CALLS CBO, SBE.
*
* MACROS READEI, REWIND.
ERT SUBR ENTRY/EXIT
SA1 LSTFIL
ZR X1,ERTX IF LIST OPTION IS OFF
ZR X3,ERT2 IF RECORD IS BUFFER RESIDENT
MX3 42
SA1 X2
BX6 X1*X3
SA6 ERTA SAVE ORIGINAL FILE NAME
REWIND X2
ERT1 READEI X2,R
SA1 LSTFIL
ZR X1,ERTX IF LINES NOT TO BE ECHOED
SA1 X2
LX1 59-9
NG X1,ERT2 IF LAST BUFFER OF DATA
SA3 X2+3 COPY BUFFER TO OUTPUT
RJ CBO
SX5 B0+
RJ SBE
EQ ERT1 READ IN NEXT SEGMENT
ERT2 SA3 X2+3 COPY BUFFER TO OUTPUT
RJ CBO
EQ ERTX RETURN
ERTA CON 0 ORIGINAL FILE NAME
ERR SPACE 4,10
** ERR - ERROR PROCESSOR.
*
* ENTRY (X5) = FWA OF ERROR MESSAGE.
*
* EXIT ABORTS AFTER ISSUING APPROPRIATE MESSAGE.
*
* USES X - 1.
* A - 1.
*
* CALLS RSF.
*
* MACROS ABORT, SYSTEM, WRITEC.
ERR BSS 0 ENTRY
ZR X5,ERR1 IF NO MESSAGE TO ISSUE
WRITEC O,X5
ERR1 SA1 APPFLG
ZR X1,ERR2 IF SORT STATUS DID NOT CHANGE
SYSTEM TLX,R,X1,1000B
ERR2 RJ RAF RECALL ALL FETS
SX7 B1+
RJ RSF RETURN SCRATCH FILES
ABORT
** FATAL ERRORS - ERRORS WHICH WHEN ENCOUNTERED CAUSE *IEDIT*
* TO ABORT WITHOUT EXECUTING THE COMMAND.
ERRBSE DATA C*BUFFER SPACE ERROR (TOV).*
ERRCNP DATA C*COMMAND NOT PROCESSED DUE TO OVERLAP.*
ERRCSE DATA C*COMMAND ARGUMENT ERROR.*
ERRDFN DATA C*DUPLICATE FILE NAME.*
ERREEF DATA C*EMPTY FILE (SSF).*
ERREIE DATA C*LINE NUMBER OVERLAP ERROR.*
ERREIF DATA C*FILE NAME ERROR.*
ERREII DATA C*LINE NUMBER INCREMENT ERROR.*
ERREIS DATA C*INCORRECT SYNTAX.*
ERRELR DATA C*LINE RANGE ERROR.*
ERRNES DATA C*TOO SMALL BUFFER SPACE.*
ERRNIV DATA C*NON-EXISTENT EDIT VERB SPECIFIED.*
ERRNLF DATA C*NO LINES FOUND.*
ERRNLN DATA C*NO LINE NUMBER ON LINE.*
ERRNRF DATA C*READ FILE EMPTY.*
ERRNRS DATA C*NO READ/DESTINATION FILE SPECIFIED.*
ERRNTL DATA C*LINE NUMBER LIMIT EXCEEDED.*
ERRRFN DATA C*RESERVED FILE NAME.*
** INFORMATIVE MESSAGES - ISSUED TO NOTIFY THE USER OF AN
* UNUSUAL CONDITION. THE *IEDIT* COMMAND IS PROCESSED TO
* COMPLETION.
ERRLTF DATA C*ZZZZZ LINES TRUNCATED ON FILE QQQQQQQ.*
ERRNDF DATA C*NO CLOSING DELIMITER FOUND.*
MLB SPACE 4,20
** MLB - MANAGE LINE BUFFER.
*
* ENTRY (X2) = ADDRESS OF LINE TO ADD TO INPUT BUFFER.
* .LT. 0, IF LINE IS IN CHARACTER BUFFER.
* (B3) = ADDRESS OF FET TO ADD LINE TO.
* (NCOL) = NUMBER OF CHARACTERS TO BE WRITTEN.
*
* EXIT LINE ADDED TO LINE BUFFER.
*
* USES X - 1, 2, 3, 6, 7.
* A - 1, 2, 3, 6, 7.
* B - 2, 4.
*
* CALLS ABS, PLB, SFI.
*
* MACROS WRITER.
MLB SUBR ENTRY/EXIT
SX6 B3 SAVE FET ADDRESS
BX7 X2
SA6 MLBB
SA7 MLBA
SX3 MXWL+1 MAXIMUM WORDS IN A LINE
MX6 -18
SA1 B3+2 GET *IN* POINTER
BX1 -X6*X1
IX1 X1+X3
SA2 B3+4 GET *LIMIT*
BX2 -X6*X2
SX2 X2-1
IX2 X1-X2
SB2 X2
LT B2,MLB2 IF ENOUGH ROOM LEFT IN BUFFER
SB2 L
NE B2,B3,MLB1 IF NOT *LNBUF*
SA1 LBFILE
NZ X1,MLB1 IF BUFFER PREVIOUSLY WRITTEN OUT
SA1 LNBUF
SX2 LBINC
RJ ABS ALLOCATE MORE LINEBUF SPACE
NZ X6,MLB1 IF NOT ENOUGH DYNAMIC STORAGE LEFT
RJ SFI UPDATE FET POINTERS FOR ALLOCATED BUFFERS
EQ MLB2 BUFFER HAS SPACE ENOUGH FOR THE LINE
MLB1 SX7 B1 SET LINE BUFFER FULL FLAG
SA7 LBFILE
WRITER B3,R WRITE LINE BUFFER TO FILE
SA1 B3+B1 SET LINE BUFFER TO EMPTY
SX6 X1
SA6 A1+B1
SA6 A6+B1
MLB2 SA3 MLBA RESTORE ADDRESS OF LINE TO INSERT
SA2 MLBB RESTORE FET ADDRESS
SA1 X2+2 SET *IN* POINTER
NG X3,MLB4 IF LINE IS UNPACKED
SA3 X3 GET FIRST WORD OF LINE TO BE MOVED
SX7 X1
MX1 -12
MLB3 BX6 X3
SA6 X7+ MOVE WORD
SX7 X7+B1
SA3 A3+B1 GET NEXT WORD
BX6 -X1*X6
NZ X6,MLB3 IF NOT END OF LINE
SA7 X2+2 UPDATE THE *IN* POINTER
EQ MLBX RETURN
MLB4 SA3 NCOL NUMBER OF CHARACTERS IN LINE
SA1 MLBB
SB2 60
SB4 X3+
SA1 X1+2 SET UP PARAMETERS FOR *PLB*
SA2 CLIN
SA1 X1
RJ PLB PACK THE LINE INTO THE LINE BUFFER
SX7 A1+1
SA2 MLBB
SA7 X2+2 UPDATE THE *IN* POINTER
EQ MLBX RETURN
MLBA CON 0 ADDRESS OF LINE TO INSERT
MLBB CON 0 FET ADDRESS
PIT SPACE 4,25
** PIT - PROCESS TERMINAL INTERRUPT.
*
* ENTRY OPERATING SYSTEM HAS DETECTED A USER BREAK 1 OR USER
* BREAK 2.
*
* EXIT IF USER BREAK 1 OCCURRED, CHANGED RECORDS WILL NO
* LONGER BE ECHOED TO THE OUTPUT FILE.
*
* IF USER BREAK 2 OCCURRED, *IEDIT* PROCESSING WILL
* TERMINATE AFTER RESTORING THE EDIT FILE TO ITS
* ORIGINAL CONDITION IF NECESSARY. THE COMPLETE
* BIT IN THE INPUT FET MUST ALSO BE SET SINCE AN
* INPUT REQUEST MAY HAVE BEEN LEFT PENDING AT
* AT THE TIME OF THE INTERRUPT.
*
* USES X - 1, 2, 3, 5, 6, 7.
* A - 1, 3, 5, 6, 7.
*
* CALLS SBE, SLN.
*
* MACROS REPRIEVE, RPHR, WRITEF.
PIT BSS 0 ENTRY
SA1 INTFLG
SX6 B1 SET *NOT INTERRRUPTIBLE*
SA6 A1
NZ X1,PIT3 IF NOT INTERRUPTIBLE
SA1 RPB+7 CHECK WHICH USER BREAK OCCURED
MX2 -12
BX2 -X2*X1
SX2 X2-TIET
SX6 B0+
ZR X2,PIT2 IF USER BREAK ONE
SA1 APPFLG
ZR X1,PIT1 IF NOTHING APPENDED TO EDIT FILE
SX2 E SET FET ADDRESS
SA5 EFN
SA6 A1 CLEAR APPEND FLAG
RJ SLN SET EDIT FILE NAME INTO FET
BX5 X5-X5
RJ SBE SET EDIT BUFFER TO EMPTY
SA1 FLNGTH
MX6 1 SET *RANDOM* BIT IN FET
SA3 X2+B1 FET+1
LX6 47-59
BX7 X6+X3
BX6 X1 LOAD LAST SECTOR OF ORIGINAL FILE
SA7 A3
SA6 X2+6
RPHR X2 SET FET FOR *WRITEF*
BX5 X5-X5
RJ SBE SET BUFFER EMPTY
WRITEF X2,R WRITE *EOF* AFTER LAST ORIGINAL SECTOR
PIT1 SA1 I SET COMPLETE BIT IN INPUT FET
SX7 B1
BX7 X1+X7
SA7 A1
SX5 B0 SET NO MESSAGE TO ISSUE
EQ ERR EXIT TO ERROR PROCESSOR
PIT2 SA6 LOP TURN OFF LIST OPTION
SA6 LSTFIL
PIT3 REPRIEVE RPB,RESUME,200B RESUME PRIOR EXECUTION
PLB SPACE 4,15
** PLB - PACK LINE INTO A BUFFER.
*
* ENTRY ((A1)) = (X1) = WORD TO START PACKING IN.
* (A2) = ADDRESS OF STRING BUFFER TO PACK.
* (B2) = FIRST FREE BIT IN WORD.
* (B4) = LENGTH OF STRING TO PACK.
* (CSTI) = CHARACTER SET IN USE.
*
* EXIT ((A1)) = LAST WORD PACKED.
*
* USES X - 1, 2, 3, 4, 5, 7.
* A - 1, 2, 3, 7.
* B - 2, 3, 4, 5, 6, 7.
PLB5 LX7 B2 LEFT ADJUST FINAL PACKED WORD
SA7 A1+B7 STORE PACKED WORD
SA1 A7+
SB5 12
GE B2,B5,PLBX IF EOL GUARANTEED IN LAST WORD
SA1 A1+B1
SX7 B0+
SA7 A1
PLB SUBR
MX4 54
SA3 CSTI
SB6 X3
SB5 12
GT B6,PLB1 IF *ASCII8* CHARACTER SET
SB5 6
SX3 X3+1
PLB1 NZ B2,PLB2 IF ROOM LEFT IN CURRENT WORD
SB2 60
SA1 A1+1
PLB2 SB7 B0+
SB3 60
SB3 B3-B2
LX7 X1,B3 ADJUST FIRST WORD FOR ADDING CHARACTERS
SA2 A2-1
NZ B3,PLB3 IF FIRST WORD PARTIALLY FILLED
SX7 B0+
PLB3 ZR B4,PLB5 IF ALL CHARACTERS HAVE BEEN PACKED
SA2 A2+B1 GET NEXT CHARACTER
BX5 X4*X2
NZ X3,PLB4 IF NOT *ASCII* CHARACTER SET
ZR X5,PLB4 IF NOT A TWELVE BIT CHARACTER
AX5 6
LX7 X7,B5
BX7 X7+X5 PACK ESCAPE PART OF CHARACTER
SB2 B2-B5
BX2 -X4*X2 GET LOW SIX BITS OF CHARACTER
GT B2,PLB4 IF ROOM LEFT FOR CHARACTER
SA7 A1+B7
SB7 B7+B1
SX7 B0
SB2 60
PLB4 LX7 X7,B5
BX7 X7+X2 ADD NEW CHARACTER
SB2 B2-B5
SB4 B4-B1
GT B2,PLB3 IF ROOM LEFT FOR MORE CHARACTERS
SA7 A1+B7 STORE PACKED WORD
SB7 B7+B1
SX7 B0+
SB2 60
EQ PLB3 CONTINUE WITH NEXT CHARACTER
RAF SPACE 4,10
** RAF - RECALL ALL FETS.
*
* EXIT ALL FETS RECALLED.
*
* MACROS RECALL.
RAF SUBR ENTRY/EXIT
RECALL E RECALL ALL FETS
RECALL L
RECALL LNT1
RECALL LNT2
RECALL SCR
RECALL SCR1
EQ RAFX RETURN
RSF SPACE 4,10
** RSF - REWIND/RETURN SCRATCH FILES.
*
* ENTRY (X7) = 0, REWIND ALL SCRATCH FILES.
* = 1, RETURN ALL SCRATCH FILES.
*
* EXIT SCRATCH FILES REWOUND/RETURNED.
* *READ* FILE REWOUND IF PRESENT.
*
* USES X - 1, 2, 5, 7.
* A - 1, 5, 7.
*
* CALLS SLN.
*
* MACROS RETURN, REWIND.
RSF SUBR ENTRY/EXIT
SA7 RSFC SAVE REWIND/RETURN FLAG
SX7 TSF
SA7 RSFA STORE ADDRESS OF FILE NAMES
SA1 I
BX7 X1
SX2 A1
SA7 RSFB PRESERVE THE ORIGINAL FILE NAME
RSF1 SA5 RSFA
SA5 X5 LOAD NEXT FILE NAME
ZR X5,RSF3 IF END OF TABLE
SX7 A5+1
SA7 RSFA
RJ SLN SET SCRATCH FILE NAME INTO FET
SA1 RSFC
ZR X1,RSF2 IF REWIND RATHER THAN RETURN
RETURN X2
EQ RSF1 GET NEXT FILE NAME
RSF2 REWIND X2,R
EQ RSF1 GET NEXT FILE NAME
RSF3 SA1 FNUM
SX1 X1-FNRE
NZ X1,RSF4 IF NO *READ* FILE EXISTS
SA5 FILEN
RJ SLN SET *READ* FILE NAME INTO FET
REWIND X2
RSF4 SA5 RSFB RESTORE ORIGINAL FET NAME
RJ SLN
EQ RSFX RETURN
RSFA CON 0 ADDRESS OF FILE NAMES
RSFB CON 0 ORIGINAL FET NAME
RSFC CON 0 REWIND/RETURN FLAG
SBE SPACE 4,10
** SBE - SET BUFFER EMPTY.
*
* ENTRY (X2) = FET ADDRESS OF BUFFER.
* (X5) .NE. 0, IF FILE IS TO BE REWOUND.
*
* EXIT BUFFER IS SET TO EMPTY.
*
* USES X - 0, 3, 6.
* A - 3, 6.
*
* MACROS RECALL, REWIND.
SBE SUBR ENTRY/EXIT
ZR X5,SBE1 IF NO REWIND SPECIFIED
REWIND X2,R
EQ SBEX RETURN
SBE1 RECALL X2
MX0 -18 SET FIRST=IN=OUT
SA3 X2+B1
BX6 -X0*X3
SA6 A3+B1
SA6 A6+B1
EQ SBEX RETURN
SFI SPACE 4,15
** SFI - SET FET INFORMATION.
*
* ENTRY FWA OF EACH MANAGED TABLE.
* LENGTH OF EACH MANGED TABLE.
*
* EXIT FETS WILL BE SET ACCORDING TO FWA AND LENGTH OF
* BUFFERS AS DETERMINED BY MANAGED TABLE PROCESSORS.
*
* USES X - 1, 2, 4.
* A - 2, 4.
*
* CALLS SFP.
SFI SUBR ENTRY/EXIT
SA4 F.EFBUF
SX1 E
SA2 L.EFBUF
RJ SFP
SA4 F.LNBUF
SX1 L
SA2 L.LNBUF
RJ SFP
SA4 F.SCRBA
SX1 LNT1
SA2 L.SCRBA
RJ SFP
SA4 F.SCRBB
SX1 LNT2
SA2 L.SCRBB
RJ SFP
SA4 F.SCRBA
SX1 SCR
SA2 L.SCRBA
RJ SFP
SA4 F.SCRBB
SX1 SCR1
SA2 L.SCRBB
RJ SFP
EQ SFIX RETURN
SFP SPACE 4,15
** SFP - SET FET POINTERS.
*
* ENTRY (X1) = FWA OF FET TO BE SET.
* (X2) = BUFFER LENGTH TO BE USED IN THIS FET.
* (X4) = FIRST WORD ADDRESS OF BUFFER.
*
* EXIT FET POINTERS ARE RESET. INITIALLY A FET IS SET
* TO EMPTY (FIRST=IN=OUT).
*
* USES X - 0, 2, 3, 5, 6, 7.
* A - 3, 5, 6.
* B - 2.
SFP SUBR ENTRY/EXIT
SA3 X1+B1 CHECK *FIRST* POINTER
MX0 -18
BX5 -X0*X3
IX7 X4-X5 CALCULATE MOVEMENT OF TABLE
BX3 X3*X0 SET *FIRST* POINTER
BX6 X3+X4
SA6 A3
SA5 A3+B1 UPDATE *IN* POINTER
BX5 -X0*X5
ZR X5,SFP1 IF *IN* POINTER HAS NOT BEEN SET
* RESET FET POINTERS
SB2 X7 MOVEMENT OF TABLE
SX6 X5+B2 NEW *IN* POINTER
SA6 A3+B1
SA3 X1+3 RETRIEVE *OUT* POINTER
BX6 -X0*X3
SX6 X6+B2 SET NEW *OUT* POINTER
SA6 A6+1
EQ SFP2 SET *LIMIT* POINTER
SFP1 BX6 -X0*X6 SET *IN* POINTER IN FET TO *FIRST*
SA6 A6+B1
SA6 A6+1 SET *OUT* POINTER IN FET TO *FIRST*
SFP2 SA3 A6+B1 SET *LIMIT* POINTER IN FET
BX3 X0*X3
SX2 X2+B1
IX2 X2+X4
BX6 X2+X3
SA6 A3
EQ SFPX RETURN
SLN SPACE 4,15
** SLN - SET LOCAL FILE NAME.
*
* ENTRY (X2) = FET ADDRESS.
* (X5) = FILE NAME TO PUT IN FET.
*
* EXIT FILE NAME HAS BEEN INSERTED IN THE SPECFIED FET.
* (X2) = FET ADDRESS.
* (X5) = FET+0 WITH ORIGINAL FILE NAME AFTER *RECALL*.
*
* USES X - 3, 5, 7.
* A - 5, 7.
*
* MACROS RECALL.
SLN SUBR ENTRY/EXIT
RECALL X2
SX3 B1
BX7 X3+X5
SA5 X2
SA7 X2
EQ SLNX RETURN
SSF SPACE 4,15
** SSF - SORT SELECTED FILE.
*
* ENTRY (B2) = FET ADDRESS OF FILE TO BE SORTED.
*
* EXIT (X2) = FET ADDRESS OF SORTED FILE.
* (X6) = NUMBER OF LINES IN SORTED FILE.
*
* USES X - 1, 2, 4, 5, 6, 7.
* A - 1, 2, 5, 6.
*
* CALLS SLN, SNF.
*
* MACROS FILINFO.
SSF SUBR ENTRY/EXIT
SX6 B2+ ADDRESS OF FET OF FILE TO SORT
SA6 SSFA
SA5 TSF+4 RESET SCRATCH FILE NAME
SX2 SCR
RJ SLN
SA5 TSF+5 RESET SCRATCH FILE NAME
SX2 SCR1
RJ SLN
SX1 B1+ INDIRECT ACCESS FILES BEING WORKED WITH
SX6 NUMD NUMBER OF DIGITS TO SORT ON
SA5 CSTI CHARACTER TYPE FOR *COMCSNF*
SX4 X5-1
ZR X4,SSF1 IF CHARACTER SET IS ASCII8
SX5 B0+
SSF1 BX7 X5
SA2 SSFA EDIT FILE FET ADDRESS FOR *COMCSNF*
RJ SNF SORT LINE NUMBERED FILE
ZR X1,SSF2 IF SORT SUCCESSFUL
SX5 ERRNLN *NO LINE NUMBER ON LINE.*
ZR B2,ERR IF NO LINE NUMBER
SX5 ERREEF *EMPTY FILE (SSF).*
NG B2,ERR IF SORT FILE EMPTY
SX5 ERRNES *TOO SMALL BUFFER SPACE.*
EQ ERR NOT ENOUGH BUFFER SPACE AVAILABLE
SSF2 SA1 EFN GET EDIT FILE NAME
SA5 SSFA GET SORT FILE NAME
SA5 X5
MX4 42
BX5 X5*X4
BX1 X5-X1
NZ X1,SSFX IF NOT SORTING EDIT FILE
SA6 SSFB SAVE NUMBER OF LINES
SA1 EFN
SA2 FIPB
BX1 X1*X4
BX2 -X4*X2
BX6 X1+X2
SA6 A2
FILINFO FIPB GET NEW LENGTH OF EDIT FILE
SA2 FIPB+3
MX4 24
BX6 X2*X4
LX6 24
SA2 SSFA
SA6 FLNGTH
SA1 SSFB
BX6 X1
EQ SSFX RETURN
SSFA CON 0 FET ADDRESS OF FILE TO SORT
SSFB CON 0 NUMBER OF LINES IN FILE
TOV SPACE 4,20
** TOV - TABLE OVERFLOW.
*
* THIS ROUTINE IS REQUIRED BY THE MANAGED TABLE PROCESSORS
* AND IS USED WHEN TABLES BECOME LARGER THAN THE
* CURRENT FIELD LENGTH. BECAUSE OF CODE IN *ABS* WHICH
* INCREASES THE FIELD LENGTH WHEN NECESSARY, THIS ROUTINE
* SHOULD NEVER BE CALLED.
*
* ENTRY THE CURRENT FIELD LENGTH IS NOT LARGE ENOUGH
* TO HANDLE THE INCREASE OF A TABLE THAT WAS REQUESTED.
*
* EXIT TO *ERR*.
*
* USES X - 5.
TOV BSS 0 ENTRY
SX5 ERRBSE *BUFFER SPACE ERROR (TOV).*
EQ ERR ISSUE ERROR MESSAGE AND ABORT
VPL SPACE 4,15
** VPL - EVALUATE PACKED LINE NUMBER.
*
* ENTRY ((A5)) = (X5) = PACKED WORD TO BE EVALUATED.
* (CSTI) = CHARACTER SET.
*
* EXIT (X6) = LINE NUMBER IN BINARY FORM.
* (X7) = NUMBER OF DIGITS IN LINE NUMBER.
* (X3) = 0, IF LINE NOT FOLLOWED BY AT LEAST TWO
* BLANKS OR ONE NON-BLANK CHARACTER.
*
* USES X - ALL.
* A - 2, 5.
* B - 3, 4, 5, 6, 7.
VPL SUBR ENTRY/EXIT
SA2 CSTI GET CHARACTER SET
SX1 10D
SB5 60
SX0 NUMD
SB6 60B ZERO IN *ASCII8*
SB7 71B NINE IN *ASCII8*
SX2 X2-1
SB3 12
SX6 B0 INITIALIZE LINE NUMBER TO ZERO
MX3 -12
PL X2,VPL1 IF *ASCII8* CHARACTER SET
SB6 1R0
SB7 1R9
SB3 6
MX3 -6
VPL1 NZ B5,VPL2 IF MORE CHARACTERS REMAIN IN WORD
SB5 60
SA5 A5+1
VPL2 LX5 X5,B3
BX4 -X3*X5 GET NEXT CHARACTER
BX5 X3*X5 ISOLATE CHARACTER
SB5 B5-B3
ZR X4,VPL3 IF COLON OR EOL FOUND
ZR X0,VPL3 IF *NUMD* DIGITS FOUND
SB4 X4+
LT B4,B6,VPL3 IF ALPHABETIC CHARACTER
GT B4,B7,VPL3 IF NOT DIGIT
SB4 B4-B6 CONVERT DIGIT TO BINARY
IX6 X6*X1
SX0 X0-1
SX6 X6+B4 ADD DIGIT TO RUNNING TOTAL
EQ VPL1 PROCESS NEXT CHARACTER
VPL3 SX1 NUMD
SA2 BLNK
IX7 X1-X0
ZR X4,VPL5 IF COLON OF EOL FOUND
IX4 X4-X2
NZ X4,VPLX IF NOT BLANK CHARACTER
NZ B5,VPL4 IF MORE CHARACTERS LEFT IN WORD
SB5 60
SA5 A5+1
VPL4 LX5 X5,B3
BX4 -X3*X5 GET NEXT CHARACTER
BX5 X3*X5
SB5 B5-B3
NZ X4,VPLX IF AT LEAST TWO CHARACTERS AFTER NUMBER
VPL5 NZ B5,VPL6 IF MORE CHARACTERS LEFT IN WORD
SB5 60
SA5 A5+1
VPL6 NZ X5,VPLX IF CHARACTERS FOLLOW LINE NUMBER
SB6 12
GE B5,B6,VPL7 IF ZERO BYTE IN BOTTOM OF WORD
SA5 A5+1
NZ X5,VPLX IF NEXT WORD CONTAINS A CHARACTER
VPL7 SX3 B0 A LINE TO BE DELETED
EQ VPLX RETURN
WTL SPACE 4,15
** WTL - WRITE TRUNCATED LINE.
*
* ENTRY (X1) = BINARY LINE NUMBER OF TRUNCATED LINE.
*
* EXIT LINE NUMBER OF TRUNCATED LINE WILL BE WRITTEN
* TO A SCRATCH FILE.
*
* USES X - 1, 6.
* A - 1, 6.
*
* CALLS CNL.
*
* MACROS WRITEO.
WTL SUBR ENTRY/EXIT
RJ CNL CONVERT LINE NUMBER TO DISPLAY
SX1 2R PAD BLANKS TO ALLOW SORTING
LX1 18
BX6 X1+X6
WRITEO TRNCFET
SA1 NTL
SX6 X1+B1
SA6 A1
EQ WTLX RETURN
WTO SPACE 4,25
** WTO - WRITE DATA TO OUTPUT.
*
* ENTRY (B6) = FWA OF DATA TO WRITE OUT.
* (B7) = LENGTH OF DATA IN WORDS.
*
* EXIT DATA WRITTEN TO *OUTPUT*.
*
* USES X - 1, 6.
* A - 1, 6.
* B - 7.
*
* MACROS WRITEW.
*
* NOTES *WTO* IS EQUIVALENT TO *WRITEW O,B6,B7* EXCEPT
* THAT THE WRITE WILL NOT BE PERFORMED IF THE
* LIST FLAG HAS BEEN CLEARED (THIS MAY HAPPEN AT
* ANY TIME DUE TO A *USER BREAK ONE*). NOTE THAT
* *B6* IS UPDATED BY *COMCWTW*.
WTO SUBR ENTRY/EXIT
WTO1 SA1 LSTFIL
ZR X1,WTOX IF LISTING DISABLED (USER BREAK 1)
SX6 B7
SA6 WTOA SAVE NUMBER OF WORDS TO WRITE
SX6 X6-100B
NG X6,WTO2 IF LESS THAN 100B WORDS LEFT TO WRITE
WRITEW O,B6,100B
SA1 WTOA DECREMENT NUMBER OF WORDS TO WRITE
SB7 X1-100B
EQ WTO1 PROCESS THE NEXT BLOCK OF DATA
WTO2 WRITEW O,B6,B7
EQ WTOX RETURN
WTOA CON 0 NUMBER OF WORDS TO WRITE
TITLE COMMON DECKS.
SPACE 4,10
** EXECUTABLE COMMON DECKS.
*CALL COMCCDD
*CALL COMCCIO
*CALL COMCCPM
*CALL COMCDXB
*CALL COMCLFM
*CALL COMCMTP
*CALL COMCMVE
*CALL COMCOVL
*CALL COMCRDC
*CALL COMCRDO
*CALL COMCRDW
LIST X
*CALL COMCSNF
LIST -X
*CALL COMCSNM
*CALL COMCSST
*CALL COMCSYS
*CALL COMCUSB
*CALL COMCWTC
*CALL COMCWTW
*CALL COMCWTO
USE LITERALS
OVLY EQU *
TITLE OVERLAYABLE FUNCTION PROCESSORS.
PSC SPACE 4,15
** PSC - PROCESS SEQUENTIAL COMMANDS.
*
* *PSC* PROCESSES THE CLASS OF COMMANDS WHICH READ A CLEAN
* SOURCE FILE AND POTENTIALLY WRITE A NEW CLEAN FILE.
*
* EXIT EDIT FILE REWRITTEN IF NECESSARY AND LINES ECHOED
* TO THE TERMINAL.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 5, 6, 7.
* B - 2, 3, 4, 5, 6, 7.
*
* CALLS ABL, CLN, CSL, FSL, PLB, PWN, SLN, USB, WTL.
*
* MACROS READC, READEI, READO, RENAME, WRITEC, WRITER.
PSC SUBR ENTRY/EXIT
SA1 FNUM
SX1 X1-MXNW-1
NG X1,PSC1 IF NOT A *WRITE* OR *WRITEN* FUNCTION
SA5 FILEN SET *WRITE(N)* FILE NAME INTO FET
SX2 SCR
RJ SLN
EQ PSC2 AVOID REWIND OF *WRITE(N)* FILE
PSC1 REWIND SCR
PSC2 READEI E
REWIND TRNCFET
* COUNT NUMBER OF TRAILING BLANKS IN SEARCH STRING AND
* PUT COUNT IN *PSCB*.
SA5 NCIS
SA4 BLNK
SB6 X5+
PSC3 ZR B6,PSC4 IF NO SEARCH STRING
SA3 B6+SBUF-1
BX3 X3-X4
NZ X3,PSC4 IF CHARACTER NOT A BLANK
SB6 B6-B1
EQ PSC3 CHECK NEXT CHARACTER
PSC4 SB6 -B6
SX6 X5+B6
SA6 PSCB
* THIS MARKS THE BEGINNING OF THE MAIN LOOP.
* CLEAR ALL FLAGS AND READ A LINE INTO THE WORKING BUFFER.
PSC5 SX7 B0+
SA7 TRNC
READC E,PCKDBF,MXWL+1
NZ X1,PSC28 IF END OF EDIT FILE REACHED
BX6 X4
PSC6 MX0 -12
BX6 -X0*X6
ZR X6,PSC7 IF NO MORE WORDS IN LINE
READO X2
EQ PSC6 CHECK FOR END OF LINE
* CRACK THE LINE NUMBER AND STORE ITS VALUE AND LENGTH.
PSC7 SA5 PCKDBF CHECK LINE NUMBER
RJ CLN
SA7 PSCA
SA6 OBLN
SA6 NBLN
BX0 X4 SAVE THE LINE SELECT PARAMETER
* UNPACK THE LINE INTO *CLIN* AND CHECK FOR TRUNCATION.
SB2 PCKDBF
SA1 CSTI
SB6 MXCIL+1
SB3 X1+
RJ USB UNPACK LINE INTO STRING BUFFER
SB4 B7-B6
SB4 B4+B1
* FIND THE LAST NON-BLANK CHARACTER.
SA4 BLNK
SB2 MXCIL
GE B2,B4,PSC8 IF LINE NOT TOO LONG
SX7 B2
SA7 NCOL
SX7 B1
SA7 TRNC
EQ PSC10 TRUNCATE FLAG IS SET
PSC8 SA3 B4+CLIN-1
BX7 X3-X4
NZ X7,PSC8.1 IF CHARACTER IS NOT A BLANK
SB4 B4-1
EQ PSC8 CHECK NEXT CHARACTER
PSC8.1 NZ X3,PSC9 IF NOT A 64 CHARACTER SET COLON
GE B4,B2,PSC9 IF ALREADY AT END OF LINE
SB4 B4+1 INSURE A BLANK AFTER THE COLON
PSC9 SX7 B4+
SA7 NCOL
* PERFORM ANY CHARACTER STRING REPLACEMENT
* NECESSARY FOR THE *ALTER* COMMAND.
PSC10 ZR X0,PSC27 IF LINE NOT SELECTED
SA5 NCIS
NZ X5,PSC13 IF NON-NULL SEARCH STRING
SA2 NCIR
ZR X2,PSC22 IF REPLACEMENT STRING ALSO NULL
* PROCESS THE *ALTER* COMMAND FORMAT IN
* WHICH A REPLACEMENT STRING IS SPECIFIED,
* BUT A SEARCH STRING IS NOT.
* (ALTER,//STRING2/)
SA1 NCOL
SB3 MXCIL MAXIMUM NUMBER OF CHARACTERS PER LINE
SB4 X2 LENGTH OF REPLACEMENT STRING
SB2 X1 CURRENT NUMBER OF CHARACTERS IN LINE
SB5 B0+
PSC11 GE B2,B3,PSC12 IF NEW LINE IS TOO LONG
SA1 B5+RBUF
SB5 B5+B1
BX7 X1
SA7 B2+CLIN
SB2 B2+B1
LT B5,B4,PSC11 IF MORE CHARACTERS ARE TO BE ADDED
SX7 B2
SA7 NCOL
EQ PSC22 COMPLETE PROCESSING SELECTED LINE
PSC12 SX6 B1
SX7 B3
SA6 TRNC
SA7 NCOL
EQ PSC22 COMPLETE PROCESSING SELECTED LINE
* PROCESS THE *ALTER* COMMAND FORMAT IN WHICH THE SEARCH
* STRING IS SPECIFIED.
* (ALTER,/STRING1/STRING2/ OR ALTER,/STRING1//)
PSC13 BSS 0
.TRIM IFEQ TRIM,0
SA2 PSCB
ZR X2,PSC16 IF NO TRAILING BLANKS IN SEARCH STRING
IFEQ TRIM,0
SA1 NCOL
SA3 BLNK
SB3 MXCIL
SB2 X1+
BX7 X3
SA1 B2+CLIN-1 GET LAST CHARACTER
BX1 X1-X3
NZ X1,PSC14 IF NOT A BLANK PROTECTING A COLON
SB2 B2-1 POINT TO THE COLON
PSC14 EQ B2,B3,PSC15 IF NO MORE ROOM IN STRING BUFFER
SA7 B2+CLIN
SB2 B2+1
SX2 X2-1
NZ X2,PSC14 IF ALL BLANKS NOT YET ADDED
PSC15 SX7 B2+
SA7 NCOL
.TRIM ENDIF
* STORE THE NUMBER OF TRAILING BLANKS IN LINE INTO *NTBL*.
* CHECK FOR SEARCH STRING PRESENT IN LINE.
PSC16 SA1 NCOL
SA2 PSCA
SX4 MXCIL
IX6 X4-X1
BX7 X2
SA6 NTBL
SB6 X1+
RJ FSL FIND STRING IN LINE
NG X4,PSC27 IF STRING NOT FOUND, DE-SELECT
* REPLACE ALL OCCURENCES OF SEARCH STRING IN LINE
* WITH THE REPLACEMENT STRING.
SA1 FNUM
SX1 X1-FNAL
NZ X1,PSC22 IF FUNCTION NOT *ALTER*
PSC17 RJ CSL CHANGE STRING IN LINE
SA5 NCIR
IX7 X4+X5
SA4 NCOL
SB6 X4+
RJ FSL
PL X4,PSC17 IF ANOTHER SEARCH STRING OCCURENCE FOUND
SA2 NCIS
SA1 PSCB
IX1 X1-X2
NZ X1,PSC22 IF SEARCH STRING IS NOT ALL BLANKS
* PROCESS THE SPECIAL CASE WHERE THE USER SPECIFIED
* AN ALL BLANK SEARCH STRING IN AN *ALTER* COMMAND.
* (ALTER,/ /STRING2/)
.TRIM IFEQ TRIM,0
SA3 NCOL
SB7 X3+ CURRENT NUMBER OF CHARACTERS IN LINE
SA1 NTBL
SA4 NCIR
SB2 X1 ORIGINAL NUMBER OF TRAILING BLANKS
SB3 X2 NUMBER OF CHARACTERS IN SEARCH STRING
SB6 MXCIL
SB4 X4+ NUMBER OF CHARACTERS IN REPLACEMENT STRING
PSC18 LT B2,B3,PSC21 IF LESS THAN *NCIS* BLANKS REMAIN
SB2 B2-B3
SB5 B0
PSC19 EQ B5,B4,PSC18 IF ENTIRE REPLACE STRING ADDED
EQ B7,B6,PSC20 IF NEW LINE IS TOO LONG
SA1 B5+RBUF
SX7 X1+
SA7 B7+CLIN
SB7 B7+B1
SB5 B5+B1
EQ PSC19 ADD THE NEXT CHARACTER
PSC20 SX7 B1+
SA7 TRNC
PSC21 SX7 B7+
SA7 NCOL
.TRIM ENDIF
* PROCESS SELECTED LINES. THE FOLLOWING CODE REPACKS,
* ECHOS TO OUTPUT, AND COPIES THE POTENTIALLY ALTERED
* LINE TO THE NEW SOURCE FILE.
PSC22 SA1 NMLS
SX6 X1+B1
SA6 A1
SA1 FNUM
SX1 X1-FNAL
NZ X1,PSC23 IF NOT AN *ALTER* COMMAND
SA2 PSCA ADD BLANKS AND REPACK
RJ ABL
SB2 60
SA1 PCKDBF
SA2 CLIN
SA3 NCOL
SB4 X3
RJ PLB
PSC23 SA1 FNUM
SX1 X1-MXNW-1
PL X1,PSC24 IF A *WRITE(N)* FUNCTION
SA1 LOP
ZR X1,PSC24 IF LIST FLAG NOT SET
WRITEC O,PCKDBF ECHO SELECTED LINES
PSC24 SA1 FNUM
SX2 X1-FNLI
ZR X2,PSC26 IF A *LIST* COMMAND
SX2 X1-FNDE
ZR X2,PSC26 IF A *DELETE* COMMAND
SX1 X1-FNWN
NZ X1,PSC25 IF NOT A *WRITE(N)* COMMAND
SA1 PSCA
RJ PWN SHIFT TEXT FOR *WRITEN*
PSC25 WRITEC SCR,PCKDBF BUILD NEW FILE
PSC26 SA1 TRNC
ZR X1,PSC5 IF LINE NOT TRUNCATED
SA1 OBLN
RJ WTL
EQ PSC5 PROCESS NEXT LINE
* PROCESS UNSELECTED LINES.
* THE FOLLOWING CODE SUPPRESSES PACKING AND ECHOING AND
* AS SUCH IS FOR THE SIMPLE COPYING OF UNSELECTED LINES.
PSC27 SA1 FNUM
SX2 X1-FNAL
ZR X2,PSC25 IF AN *ALTER* COMMAND
SX2 X1-FNDE
ZR X2,PSC25 IF A *DELETE* COMMAND
EQ PSC5 PROCESS NEXT LINE
* FINISH UP AFTER SCAN OF EDIT FILE IS COMPLETED.
PSC28 SA2 NMLS
SA1 FNUM
NZ X2,PSC29 IF AT LEAST ONE LINE WAS SELECTED
SX2 X1-FNLI
SX5 ERRNLF *NO LINES FOUND.*
NZ X2,ERR IF NOT A *LIST* COMMAND
SX5 B0+
EQ ERR NO LINES FOUND AND A *LIST* COMMAND
* FLUSH TRUNCATED LINES IF NECESSARY
PSC29 SA3 TRNCFET CHECK FET STATUS
MX2 -18
BX3 -X2*X3
SX2 A3+
SX3 X3-3
ZR X3,PSC30 IF BUFFER NEVER WRITTEN TO DISK
WRITER X2
PSC30 SA1 FNUM
SX2 X1-FNLI
ZR X2,PSCX IF A *LIST* COMMAND
WRITER SCR COMPLETE *ALTER*, *DELETE*, OR *WRITE(N)*
SA1 FNUM
SX1 X1-MXNW-1
PL X1,PSCX IF A *WRITE(N)* COMMAND
RENAME SCR,E COMPLETE *ALTER* OR *DELETE*
EQ PSCX RETURN
PSCA CON 0 NUMBER OF DIGITS IN LINE NUMBER
PSCB CON 0 NUMBER OF TRAILING BLANKS IN SEARCH STRING
TITLE OVERLAYABLE SUBROUTINES.
CSL SPACE 4,25
** CSL - CHANGE STRING IN LINE.
*
* *CSL* CHANGES A STRING IN A LINE TO ANOTHER
* STRING OF CHARACTERS.
*
* ENTRY (NCOL) = NUMBER OF CHARACTERS ON LINE.
* (CLIN) = FWA OF UNPACKED LINE.
* (RBUF) = FWA OF REPLACEMENT BUFFER.
* (X4) = CHARACTER POSITION WHERE SEARCH STRING WAS
* FOUND.
*
* EXIT (X4) = CHARACTER POSITION POINTER.
* *CLIN* CHANGED TO INCLUDE THE STRING TO REPLACE
* WITH THE NEW STRING.
* (NCOL) CHANGED TO REFLECT NEW LENGTH OF LINE
* AFTER CHANGE HAS BEEN MADE.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 1, 4, 5, 7.
* B - 3, 5, 6.
*
* MACROS MOVE.
CSL SUBR ENTRY/EXIT
SA5 NCIS FIND DIFFERENCE IN STRING LENGTHS
SA1 NCIR
SX7 X4
IX3 X1-X5 NUMBER OF CHARACTERS TO INCREASE HOLE BY
SA7 CSLA
SX2 CLIN+X4 FIND BEGINNING OF SEARCH STRING
SA4 NCOL
IX7 X4+X3 COMPUTED LENGTH OF NEW STRING
SA7 A4 UPDATE *NCOL* TO ITS NEW LENGTH
ZR X3,CSL2 IF STRINGS ARE SAME SIZE
IX2 X2+X5 GET STARTING ADDRESS FOR MOVE
SX4 X4+CLIN ENDING ADDRESS OF OLD LINE PLUS ONE
IX3 X2+X3 DESTINATION ADDRESS FOR MOVE
IX1 X4-X2 COMPUTE LENGTH OF STRING TO MOVE
SB5 X7-MXCIL-1
SX7 B1
NG B5,CSL1 IF NO TRUNCATION
SA7 TRNC
SX7 MXCIL
SX6 X3-CLIN-MXCIL
SA7 NCOL CORRECT LENGTH OF NEW LINE TO *MXCIL*
PL X6,CSL2 IF DESTINATION ADDRESS BEYOND *MXCIL*
SX4 X7-MXCIL AMOUNT OF TRUNCATION
IX1 X1-X4 ADJUST NUMBER OF CHARACTERS TO MOVE
* ADJUST SEARCH STRING HOLE TO FIT REPLACEMENT STRING.
CSL1 MOVE X1,X2,X3
* MOVE REPLACEMENT STRING TO SEARCH STRING HOLE.
CSL2 SA4 CSLA
SA5 NCIR
SB5 CLIN+X4 ADDR TO START REPLACEMENT
SB6 MXCIL+1
SB3 X4
SB6 B6-B3
SB3 X5+
LE B3,B6,CSL3 IF ROOM FOR ENTIRE REPLACEMENT STRING
SB3 B6+
CSL3 SB6 B0+ CHARACTER REPLACEMENT COUNT
SA1 RBUF-1
CSL4 GE B6,B3,CSLX IF DONE MOVING STRING, RETURN
SA1 A1+B1 GET NEXT CHARACTER
SX7 X1
SA7 B5+B6
SB6 B6+B1
EQ CSL4 MOVE NEXT CHARACTER
CSLA CON 0 SEARCH STRING POSITION
FSL SPACE 4,20
** FSL - FIND STRING IN LINE.
*
* ENTRY (CLIN) = FIRST CHARACTER OF LINE
* (LINE UNPACKED - 1 CHARACTER PER WORD).
* (X7) = NUMBER OF CHARACTERS ON LINE TO SKIP
* OVER BEFORE STARTING SEARCH.
* (B6) = COUNT OF CHARACTERS IN LINE.
* (SBUF) = UNPACKED SEARCH STRING.
* (NCIS) = NUMBER OF CHARACTERS IN SEARCH STRING.
*
* EXIT (X4) = CHARACTER POSITION IN LINE WHERE
* MATCH WAS FOUND.
* .LT. 0, IF CHARACTER STRING NOT IN LINE.
*
* USES X - 1, 4, 5, 7.
* A - 1, 5.
* B - 2, 3, 4, 7.
FSL SUBR ENTRY/EXIT
MX4 1
SA5 NCIS NUMBER OF CHARACTERS IN SEARCH STRING
SB4 X7 OFFSET TO START SEARCH AT
SB3 X5+
SB7 B6-B3
SB2 B0+ COUNT OF CHARACTERS FOUND
GT B4,B7,FSLX IF ALREADY AT END OF LINE
FSL1 SA5 CLIN+B4 GET CHARACTER FROM LINE
SA1 SBUF+B2 GET CHARACTER FROM *SBUF*
BX5 X5-X1
SB4 B4+B1 INCREMENT OFFSET OF *CLIN*
ZR X5,FSL2 IF CHARACTERS MATCH
SB4 X7+B1
SB2 B0+ RESET COUNT OF CHARACTERS FOUND
SX7 B4
LE B4,B7,FSL1 IF NOT AT END OF LINE
EQ FSLX RETURN
FSL2 SB2 B2+B1 INCREMENT COUNT OF CHARACTERS FOUND
NE B2,B3,FSL1 IF MORE CHARACTERS TO MATCH
SX4 B4-B3
EQ FSLX RETURN - MATCH SUCCESSFUL
ICE SPACE 4,10
** ICE - INDEXED CODE EXECUTION.
*
* ENTRY (B7) = SUBROUTINE ADDRESS.
*
* EXIT TO SUBROUTINE WITH RETURN ADDRESS SET.
*
* USES X - 2, 7.
* A - 2, 7.
ICE SUBR ENTRY/ EXIT
SA2 ICEX SET RETURN ADDRESS
BX7 X2
SA7 B7
JP B7+1 JUMP TO SUBROUTINE
MLT SPACE 4,20
** MLT - MANAGE LINE NUMBER TABLE.
*
* ENTRY (FLAGS) = FLAGS FOR *LNT* ENTRY.
* (OBLN) = OLD BINARY LINE NUMBER.
* (NBLN) = NEW BINARY LINE NUMBER.
*
* EXIT AN ENTRY IS MADE TO THE LINE NUMBER TABLE.
* IF *LNT* BUFFER IS FULL, THE *LNT* IS FLUSHED TO
* *ZZZZZG2* AND *NMLS* IS RESET TO ZERO BEFORE ADDING
* THE NEW ENTRY.
*
* USES X - 1, 2, 3, 5, 7.
* A - 1, 2, 3, 5, 7.
* B - 2.
*
* CALLS ABS, SFI.
*
* MACROS WRITEW.
MLT SUBR ENTRY/EXIT
SA1 NMLS
SA3 L.LNTBUF
SX1 X1+B1
IX3 X3-X1
PL X3,MLT2 IF BUFFER NOT FULL
SA1 LNTBUF
SX2 LNTINC
RJ ABS TRY TO ALLOCATE MORE SPACE
NZ X6,MLT1 IF NOT ENOUGH SPACE LEFT
RJ SFI UPDATE FET POINTERS FOR ALLOCATED BUFFER
EQ MLT2 PROCESS *LNT*
MLT1 SX7 B1+
SA7 LTFILE
SX2 LNT1
SA1 F.LNTBUF
SA3 NMLS
WRITEW X2,X1,X3 WRITE *LNT* OUT TO FILE
SX7 B0+
SA7 NMLS
MLT2 SA3 NBLN NEW BINARY LINE NUMBER
SB2 59-17 ALIGN NEW LINE NUMBER
SA1 NMLS NUMBER OF LINES SELECTED
SA2 OBLN
LX7 X3,B2
LX2 41-17 ALIGN OLD LINE NUMBER
BX7 X7+X2
SA5 FLAGS
BX7 X5+X7
SA5 F.LNTBUF
IX5 X5+X1
SA7 X5+
SX7 X1+1 UPDATE NUMBER OF LINES SELECTED
SA7 NMLS
EQ MLTX RETURN
PLO SPACE 4,25
** PLO - PROCESS LINE OVERLAP.
*
* ENTRY SEE EXIT CONDITIONS FOR *RLN*.
*
* EXIT (LBFILE) = 0, ALL SELECTED AND OVERLAPPED LINES ARE
* RESEQUENCED AND IN *EFBUF*.
* 1, ALL SELECTED AND OVERLAPPED LINES ARE
* RESEQUENCED AND WRITTEN TO *ZZZZZG1*.
* (LTFILE) = 0, ALL *LNT* ENTRIES ARE IN *LNTBUF*, IF
* ANY EXIST.
* 1, ALL *LNT* ENTRIES ARE WRITTEN TO FILE
* *ZZZZZG2*.
* (SCRFIL) = 0, NO LINES HAVE BEEN DELETED FROM THEIR
* ORIGINAL POSITIONS.
* 1, THE LINE NUMBERS OF LINES TO BE DELETED
* FROM THEIR ORIGINAL POSITIONS ARE
* WRITTEN TO FILE *ZZZZZG6*.
*
* USES X - 0, 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
* B - 2, 3, 4, 5, 6.
*
* CALLS CDD, CLN, MLB, RLN, SLN, SNM, USB.
*
* MACROS READ, READC, READEI, READO, REWIND, SKIPEI, WRITEC,
* WRITER, WRITEW.
PLO SUBR ENTRY/EXIT
SA3 INCR
SA2 NBLN
SA1 FNAI
BX6 X2
IX2 X2-X1
SA6 PLOA SET BOUNDARY FOR OVERLAP CHECKING
NG X2,PLO16 IF NO LINE OVERLAP
RJ CDD
MX2 B2
BX1 X2*X4
SB2 1RQ
SB5 PLOD
RJ SNM SET NAME IN MESSAGE
* QUERY USER WITH REGARD TO STOPPING.
WRITEC O,PLOD
PLO1 WRITEC O,PLOE
READ I READ IN REPLY
READC I,PCKDBF,MXWL+1 READ REPLY INTO BUFFER
NZ X1,PLO1 IF UNEXPECTED RESPONSE
SA2 CSTI
SB2 PCKDBF
SB6 MXCIL+1
SB3 X2
RJ USB UNPACK REPLY, ONE CHARACTER PER WORD
SB4 B7-B6
SA2 BLNK
PLO2 SA3 B4+CLIN GET NEXT CHARACTER
BX3 X3-X2
NZ X3,PLO3 IF CHARACTER NOT A BLANK
SB4 B4-1
PL B4,PLO2 IF MORE CHARACTERS TO CHECK
PLO3 NZ B4,PLO1 IF MORE THAN ONE CHARACTER
SA5 CLIN
SA1 CSTI GET THE CHARACTER SET
SA2 X1+PLOB+1 CHECK FOR *Y*
SX3 X2
BX3 X3-X5
ZR X3,PLO5 IF UPPER CASE *Y*
AX2 18
BX3 X2-X5
ZR X3,PLO5 IF LOWER CASE *Y*
SA2 X1+PLOC+1 CHECK FOR *N*
SX3 X2
BX3 X3-X5
ZR X3,PLO4 IF UPPER CASE *N*
AX2 18
BX3 X2-X5
NZ X3,PLO1 IF NOT LOWER CASE *N*
PLO4 SX5 ERRCNP *COMMAND NOT PROCESSED DUE TO OVERLAP.*
EQ ERR TERMINATE IEDIT PROCESSING
PLO5 SX6 B1+
SA6 OVLPFG
WRITER E,R FLUSH *EFBUF* TO *ZZZZZG1*
SX6 B0+
SA6 LBFILE
SX2 L
SA5 TSF+0
RJ SLN PUT *ZZZZZG0* IN LINE BUFFER FET
REWIND X2
SA5 EFN SET EDIT FILE NAME
SX2 E
RJ SLN
REWIND X2,R
READEI X2
PLO6 READC E,PCKDBF,MXWL+1 SET LINE INTO BUFFER
NZ X1,PLO10 IF EOI ENCOUNTERED
BX6 X4
EQ PLO8 CHECK FOR END OF LINE
PLO7 READO X2
PLO8 MX0 -12
BX6 -X0*X6
NZ X6,PLO7 IF NOT END OF LINE
SA5 PCKDBF
RJ CLN EVALUATE THE LINE NUMBER
SA2 FNAI
IX2 X6-X2
NG X2,PLO6 IF NOT POSITIONED AT OVERLAP POINT
SA1 FNUM
SX1 X1-FNMO
NZ X1,PLO9 IF NOT A *MOVE* FUNCTION
NZ X4,PLO6 IF LINE IS TO BE DELETED
PLO9 SA1 PLOA
IX2 X1-X6
NG X2,PLO10 IF NO MORE OVERLAP
SA2 INCR
IX6 X1+X2
SA6 PLOA UPDATE OVERLAP BOUNDARY
SX2 PCKDBF
SB3 L
RJ MLB INSTALL OVERLAP LINE INTO BUFFER
EQ PLO6 GET NEXT LINE
PLO10 SKIPEI E
SA1 LBFILE
ZR X1,PLO11 IF LINE BUFFER NOT ON FILE
WRITER L
REWIND X2
PLO11 SX7 B1+
RJ RLN REPLACE OVERLAPPED LINE NUMBERS
SX7 B1+
SA7 LBFILE
PLO12 WRITER E,R WRITE LINES TO *ZZZZZG1*
PLO13 SA1 SCRFIL
ZR X1,PLO14 IF NO LINES DELETED FROM ORIGINAL POSITION
WRITER SCR1,R WRITE DELETED LINES TO *ZZZZZG6*
* FLUSH TRUNCATED LINES IF NECESSARY
PLO14 SA3 TRNCFET CHECK FET STATUS
MX2 -18
BX3 -X2*X3
SX2 A3+
SX3 X3-3
ZR X3,PLO15 IF BUFFER NEVER WRITTEN TO DISK
WRITER X2
PLO15 SA1 BOP
ZR X1,PLOX IF NO *LNT* WAS GENERATED
SA1 LTFILE
ZR X1,PLOX IF *LNT* ENTIRELY IN BUFFER
SX2 LNT1
SA1 F.LNTBUF
SA3 NMLS
WRITEW X2,X1,X3 WRITE REMAINDER OF *LNT* TO DISK
WRITER X2,R
EQ PLOX RETURN
PLO16 SA1 LBFILE
ZR X1,PLO13 IF NO NEED TO WRITE OUT SELECTED LINES
EQ PLO12 WRITE LINES TO *ZZZZZG1*
PLOA CON 0 LINE WITH WHICH RESEQUENCING BEGINS
PLOB BSS 0 TABLE OF *YES* RESPONSES
VFD 24/0,18/7631B,18/1RY *ASCII*
VFD 24/0,18/1RY,18/1RY *NORMAL*
VFD 24/0,18/171B,18/131B *ASCII8*
PLOC BSS 0 TABLE OF *NO* RESPONSES
VFD 24/0,18/7616B,18/1RN *ASCII*
VFD 24/0,18/1RN,18/1RN *NORMAL*
VFD 24/0,18/156B,18/116B *ASCII8
PLOD BSS 0
DATA C*INSERT LINES OVERLAP EXISTING LINES, AT QQQQQ.*
PLOE DATA C*ENTER Y TO CONTINUE OR N TO STOP*
PWN SPACE 4,20
** PWN - PROCESS *WRITEN*.
*
* *PWN* PACKS THE LINE IN THE STRING BUFFER INTO *PCKDBF*
* AFTER STRIPPING OFF THE LINE NUMBER. IF THE FORTRAN
* OPTION IS NOT SELECTED, A BLANK IS ALSO STRIPPED OFF.
*
* ENTRY CLIN = ADDRESS OF UNPACKED LINE.
* (FOP) = FORTRAN OPTION.
* (X1) = NUMBER OF LINE NUMBER DIGITS.
*
* EXIT PCKDBF CONTAINS SHIFTED, PACKED LINE.
*
* USES X - 1, 2, 3.
* A - 1, 2, 3.
* B - 2, 4.
*
* CALLS PLB.
PWN SUBR ENTRY/EXIT
SA3 FOP
NZ X3,PWN1 IF FORTRAN SUBSYSTEM
SA3 NCOL
IX3 X3-X1
ZR X3,PWN1 IF LINE CONSISTS OF A LINE NUMBER ONLY
SA3 X1+CLIN
SA2 BLNK
BX2 X2-X3
NZ X2,PWN1 IF NOT BLANK
SX1 X1+B1 INCREMENT STRIPOFF COUNT
PWN1 SA3 NCOL
SA2 X1+CLIN FIRST USABLE CHARACTER
SB2 60 PACK LINE INTO BUFFER
IX3 X3-X1
SB4 X3
SA1 PCKDBF
RJ PLB
EQ PWNX RETURN
RLN SPACE 4,25
** RLN - REPLACE LINE NUMBER.
*
* ENTRY (X7) = 0, IF USER SELECTED LINES TO BE RENUMBERED.
* .NE. 0, IF OVERLAPPED LINES TO BE RENUMBERED.
* (LBFILE) = 0, ALL LINES TO BE RESEQUENCED ARE IN
* *LNBUF*.
* 1, LINES TO BE RESEQUENCED MUST BE READ
* FROM THE FILE POINTED TO BY FET *L*
* (*ZZZZZG0* OR THE *READ* FILE).
* EXIT (LBFILE) = 0, ALL RESEQUENCED LINES ARE IN *EFBUF*.
* 1, AT LEAST SOME OF THE RESEQUENCED LINES
* HAVE BEEN WRITTEN TO FILE *ZZZZZG1*
* USING FET *E*.
* (LTFILE) = 0, ALL *LNT* ENTRIES ARE IN *LNTBUF, IF
* ANY EXIST.
* 1, AT LEAST SOME OF THE *LNT* ENTRIES HAVE
* BEEN WRITTEN TO FILE *ZZZZZG2* USING
* FET *LNT1*.
* (SCRFIL) = 0, NO LINES HAVE BEEN DELETED FROM THEIR
* ORIGINAL POSITIONS.
* 1, THE LINE NUMBERS OF LINES TO BE DELETED
* FROM THEIR ORIGINAL POSITIONS HAVE BEEN
* WRITTEN INTO *SCRBB* USING FET *SCR1*.
* SOME OF THE ENTRIES MAY HAVE BEEN
* FLUSHED TO FILE *ZZZZZG6*.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 5, 6, 7.
* B - 2, 3, 4, 5, 6.
*
* CALLS ABL, CNL, MLB, MLT, SBE, SLN, USB, VPL, WTL.
*
* MACROS MOVE, READC, READEI, READO, WRITEO.
RLN SUBR ENTRY/EXIT
SA7 RLNA
SX6 B0+
SA6 RLNB INITIALIZE NUMBER OF CHAR TO MOVE
SA5 TSF+1
SX2 E
RJ SLN
SX5 B0+
RJ SBE SET *EFBUF* TO EMPTY
SA3 LBFILE
NZ X3,RLN1 IF LINE BUFFER ON FILE
SA5 L SET EOI STATUS INTO FET
SX6 741031B
MX4 42
BX6 -X4*X6
BX5 X4*X5
BX6 X5+X6
SA6 A5+
EQ RLN2 DO NOT READ FILE
RLN1 READEI L
SX6 B0+
SA6 LBFILE RESET *LBFILE* TO ZERO
RLN2 SX2 L
SX6 B0+
SA6 FLAGS
SA6 TRNC
READC X2,PCKDBF,MXWL+1
NZ X1,RLN21 IF EOI ENCOUNTERED
BX6 X4
RLN3 MX0 -12
BX6 -X0*X6
ZR X6,RLN4 IF EOL ENCOUNTERED
READO X2
EQ RLN3 CHECK FOR END OF LINE
* GET THE LINE NUMBER.
RLN4 SA5 PCKDBF
RJ VPL EVALUATE THE PACKED LINE NUMBER
SA6 OBLN
SA7 RLNC
ZR X3,RLN2 IF A DELETED LINE FOUND ON THE *READ* FILE
* IF THE FIRST LINE IN THE FILE, THEN CHECK FOR A
* LINE NUMBER.
SA2 RLNB
NZ X2,RLN7 IF NOT THE FIRST LINE IN THE FILE
SA3 RLNA
ZR X3,RLN5 IF NOT OVERLAPPED LINES
SA6 OLLE STORE LOWER BOUNDARY FOR OVERLAPPED LINES
RLN5 BX3 X7
MX7 1
NZ X3,RLN6 IF LINE NUMBER PRESENT
SX6 B1+ SET UNNUMBERED *READ* FILE FLAG
SA6 UNRF
SX7 NUMD
SA2 FOP
SX7 X7+CLIN
NZ X2,RLN6 IF FORTRAN SUBSYSTEM
SX7 X7+1
RLN6 SA7 RLNB
* UNPACK THE LINE AND SET THE TRUNCATE BIT IF NECESSARY.
RLN7 SB2 PCKDBF
SA2 CSTI
SB6 MXCIL+1
SB3 X2+
RJ USB UNPACK LINE INTO STRING BUFFER
SB4 B7-B6
SB4 B4+B1
* FIND THE LAST NON-BLANK CHARACTER.
SB2 MXCIL
SA4 BLNK
GE B2,B4,RLN8 IF LINE NOT TOO LONG
SB4 MXCIL
SX7 B1
SA7 TRNC FLAG LINE AS TRUNCATED
EQ RLN9 SET NUMBER OF CHARACTERS IN LINE
RLN8 SA3 B4+CLIN-1
BX3 X3-X4
NZ X3,RLN9 IF CHARACTER NOT A BLANK
SB4 B4-1
EQ RLN8 CHECK THE NEXT CHARACTER
RLN9 SX7 B4+
SA7 NCOL
* IF FUNCTION IS A *MOVE* COMMAND OR THE LINE IS AN OVERLAP
* LINE, THEN INSTALL THE DELETED LINE NUMBER IN (SCR1).
SA3 RLNA
SA1 FNUM
SX2 X1-FNMO
NZ X3,RLN10 IF AN OVERLAPPED LINE
NZ X2,RLN11 IF NOT A *MOVE* COMMAND
RLN10 SA1 PCKDBF
SA2 RLNC
SX6 6 CALCULATE MASK SIZE
IX2 X2*X6
SB4 X2
MX2 B4 FORM MASK INTO (X2)
BX6 X2*X1
WRITEO SCR1 WRITE LINE NUMBER TO SCRATCH FILE
SX6 B1+
SA6 SCRFIL
* GET NEW LINE NUMBER FOR LINE AND CHECK IF NEW LINE
* NUMBER VALUE WOULD BE TOO LARGE.
RLN11 SA1 LSRA SET VALUE (BINARY) OF NEW LINE NUMBER
SA2 INCR
IX7 X1+X2 INCREMENT FOR NEXT LINE NUMBER
SX4 MXLN+1
SA7 A1
IX7 X1-X4 COMPARE WITH LARGEST POSSIBLE NUMBER
SX5 ERRNTL *LINE NUMBER LIMIT EXCEEDED.*
PL X7,ERR IF NUMBER TOO LARGE, ISSUE ERROR MESSAGE
SX7 X1+
SA7 NBLN
* CONVERT NEW LINE NUMBER TO DISPLAY CODE.
RJ CNL CONVERT AND NORMALIZE LINE NUMBER
SA6 RLND SAVE LINE NUMBER
* MOVE LINE OVER IF NECESSARY.
SX2 CLIN
SA3 RLNB
PL X3,RLN12 IF NO LINE NUMBERS ON LINES
SA1 NCOL
SA2 RLNC NUMBER OF CHARACTERS IN OLD LINE NUMBER
SX5 ERRNLN *NO LINE NUMBER ON LINE.*
ZR X2,ERR IF NO LINE NUMBER PRESENT
SX3 NUMD+CLIN
SX2 X2+CLIN
RLN12 IX1 X3-X2
ZR X1,RLN14 IF LINE NUMBERS ARE THE SAME LENGTH
SA4 NCOL
SB3 MXCIL+1
IX7 X4+X1
SB2 X7
GT B3,B2,RLN13 IF LINE WILL NOT BE TRUNCATED
SX6 B1+
SA6 TRNC
SX7 MXCIL
RLN13 SA7 NCOL UPDATE LENGTH OF MOVED LINE
SX7 X7+CLIN COMPUTE STRING LENGTH TO MOVE
IX1 X7-X3
ZR X1,RLN14 IF NO CHARACTERS TO MOVE
MOVE X1,X2,X3 MOVE LINE OVER
* REPLACE LINE NUMBER ON LINE WITH NEW NUMBER.
RLN14 SA1 RLND
SA2 CSTI
MX0 -NBIC
SB4 B0
SB5 30
SB2 X2+
SB3 B0+
RLN15 SB4 B4+6
LX6 X1,B4
BX6 -X0*X6
LE B2,RLN16 IF NOT *ASCII8* CHARACTER SET
SX6 X6+25B CONVERT CHARACTER TO *ASCII8*
RLN16 SA6 CLIN+B3
SB3 B3+1
NE B4,B5,RLN15 IF NOT THROUGH INSERTING LINE NUMBER
SA4 BLNK
SA2 FOP
SA1 RLNB
NZ X2,RLN17 IF BLANK NOT TO FOLLOW LINE NUMBER
NG X1,RLN17 IF REPLACING EXISTING LINE NUMBER
SX7 X4+
SA7 B3+CLIN
* ADD PROPER NUMBER OF TRAILING BLANKS TO LINE AND
* INSTALL LINE WITH NEW LINE NUMBER INTO *EFBUF*.
RLN17 SX2 NUMD
RJ ABL
SB3 E
MX2 1 LINE IS IN CHARACTER BUFFER
RJ MLB PUT LINE INTO *EFBUF*
SA2 TRNC
ZR X2,RLN18 IF LINE WAS NOT TRUNCATED
SA1 NBLN
RJ WTL WRITE TRUNCATED LINE NUMBER
RLN18 SA2 RLNA
ZR X2,RLN20 IF NOT AN OVERLAP LINE
SA2 FLAGS
SX1 B1+
LX1 FOVL-0
BX6 X1+X2
SA6 A2+ SET OVERLAP BIT
RLN19 SA2 BOP
ZR X2,RLN2 IF *LNT* NOT NEEDED
RJ MLT BUILD *LNT* ENTRY
EQ RLN2 PROCESS NEXT LINE
RLN20 SA1 NNOL
SX6 X1+B1
SA6 A1 INCREMENT NUMBER OF NON-OVERLAPPED LINES
SA1 FNUM
SX1 X1-FNRE
NZ X1,RLN19 IF NOT A *READ* FUNCTION
SA1 RLNB
NG X1,RLN19 IF *READ* FILE HAD LINE NUMBERS
EQ RLN2 PROCESS NEXT LINE
RLN21 SA1 RLNA
ZR X1,RLNX IF NOT PROCESSING OVERLAPPED LINES
SA1 OBLN
SA2 OLLE
LX1 18
MX3 1
BX6 X1+X2 ADD UPPER BOUNDARY FOR OVERLAPPED LINES
BX6 X3+X6 SET END OF LINE RANGE TABLE
SA6 A2
EQ RLNX RETURN
RLNA CON 0 OVERLAP PARAMETER
RLNB CON 0 NUMBER OF CHARACTERS TO MOVE LINES OVER
RLNC CON 0 NUMBER OF CHAR IN ORIGINAL LINE NUMBER
RLND CON 0 NEW LINE NUMBER IN DISPLAY CODE
SLF SPACE 4,25
** SLF - SELECT LINES FROM FILE.
*
* *SLF* SELECTS ALL LINES FROM THE EDIT FILE WHICH
* SATISFY THE USER SPECIFIED CRITERIA.
*
* ENTRY E = FET POINTING TO THE EDIT FILE.
* (LNIA) = LINE NUMBER SPECIFIED BY THE USER AFTER
* WHICH SELECTED LINES ARE TO BE INSERTED.
*
* EXIT (LBFILE) = 0, ALL SELECTED LINES ARE IN *LNBUF*.
* 1, ALL SELECTED LINES HAVE BEEN WRITTEN TO
* FILE *ZZZZZG0* USING FET *L*. THE FILE
* IS LEFT REWOUND.
* (FNAI) = FIRST LINE NUMBER FOLLOWING USER SPECIFIED
* INSERT POINT.
* (LSRA) = LINE NUMBER TO BE ASSIGNED TO THE
* FIRST INSERTED LINE.
*
* USES X - 0, 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
* B - 2, 3, 5, 7.
*
* CALLS CLN, MLB, SBE, SSF.
*
* MACROS READEI, READC, READO, REWIND, WRITER.
SLF SUBR ENTRY/EXIT
SLF1 READEI E
* THIS MARKS THE BEGINNING OF THE MAIN LOOP.
* CLEAR ALL FLAGS AND READ A LINE INTO THE WORKING BUFFER.
SLF2 READC E,PCKDBF,MXWL+1
NZ X1,SLF8 IF EOI ENCOUNTERED
BX6 X4
SLF3 MX0 -12
BX6 -X0*X6
ZR X6,SLF4 IF END OF LINE ENCOUNTERED
READO X2
EQ SLF3 CHECK FOR END OF LINE
* CRACK THE LINE NUMBER AND STORE ITS VALUE AND LENGTH.
SLF4 SA5 PCKDBF
RJ CLN
SA2 OBLN
IX2 X2-X6
PL X2,SLF9 IF NUMBER .LT. PREVIOUS LINE NUMBER
ZR X3,SLF9 IF LINE A NUMBER ONLY
SA6 OBLN
SA6 NBLN
SA1 FNUM
SX2 X1-FNMO
NZ X2,SLF5 IF A *READ* OR *DUP* FUNCTION
NZ X4,SLF7 IF LINE SELECTED BY *MOVE* COMMAND
* IF NECESSARY, UPDATE THE LAST LINE NUMBER IN THE FILE.
SLF5 SA5 LNIA
SX2 X5-MXLN-1
NG X2,SLF6 IF USER SPECIFIED A LINE NUMBER
SA6 SLFB
EQ SLF7 CHECK IF LINE IS SELECTED
* IF NECESSARY, UPDATE THE FIRST LINE NUMBER AFTER
* THE INSERT POINT.
SLF6 SA3 FNAI
SB3 X6+
SB5 X5 GET LINE NUMBER TO INSERT AFTER
SB7 X3 GET FIRST LINE NUMBER AFTER INSERT POINT
GE B5,B3,SLF7 IF CURRENT LINE BEFORE INSERT POINT
LT B7,B3,SLF7 IF CURRENT LINE BEYOND INSERT POINT
SA6 FNAI
* IF LINE IS SELECTED BASED UPON ITS LINE NUMBER,
* PUT THE LINE IN *LNBUF*.
SLF7 SA1 FNUM
SX1 X1-FNRE
ZR X1,SLF2 IF *READ*, PROCESS NEXT LINE
ZR X4,SLF2 IF LINE NOT SELECTED
SX7 B1+
SA7 SLFA A LINE WAS FOUND
SX2 PCKDBF
SB3 L
RJ MLB ADD LINE TO LINE BUFFER
EQ SLF2 PROCESS THE NEXT LINE
* FINISH UP AFTER SCAN OF EDIT FILE IS COMPLETED.
SLF8 SA1 FNUM
SX1 X1-FNRE
ZR X1,SLF10 IF A *READ* FUNCTION
SA1 SLFA
NZ X1,SLF10 IF AT LEAST ONE LINE SELECTED
SX5 ERRNLF *NO LINES FOUND.*
EQ ERR NO LINES FOUND
* SORT EDIT FILE WHEN NECESSARY.
SLF9 SX2 L
SA5 LBFILE
RJ SBE
SX6 B0+
SA6 LBFILE
SA6 SLFA
SX7 -1
SA7 SLFB
SA7 OBLN
SX6 MXLN+1
SA6 FNAI
SB2 E
RJ SSF SORT THE EDIT FILE
EQ SLF1 BEGIN SELECTION PHASE AGAIN
* IF NECESSARY, UPDATE THE LINE NUMBER TO INSERT AFTER.
* DETERMINE THE LINE NUMBER TO START RESEQUENCING AT.
SLF10 SA1 LNIA
SX2 X1-MXLN-1
NZ X2,SLF11 IF INSERT POINT WAS SPECIFIED BY USER
SA1 SLFB
SX7 X1+
SA7 LNIA
SLF11 SA2 INCR
IX7 X1+X2
SA7 LSRA
SA1 LBFILE
ZR X1,SLFX IF LINE BUFFER NOT WRITTEN TO FILE
WRITER L WRITE REST OF *LBUF* OUT TO FILE
REWIND X2
EQ SLFX RETURN
SLFA CON 0 LINES SELECTED FLAG
SLFB CON -1 LARGEST LINE NUMBER IN THE FILE
SLE SPACE 4,15
** SLE - SORT *LNT* ENTRIES.
*
* ENTRY (X1) = NUMBER OF ENTRIES TO SORT.
* (B7) = FWA OF *LNT*
*
* EXIT *LNT* SORTED.
*
* USES X - 0, 1, 2, 3, 4, 6.
* A - 1, 2, 6.
* B - 5, 6.
SLE SUBR ENTRY/EXIT
MX0 18
LX0 -18
SB5 X1+B7 LWA+1
SB6 X1
LE B6,B1,SLEX IF NOT AT LEAST TWO ENTRIES
SA2 B7+ GET FIRST ENTRY
SA1 A2+B1 GET SECOND ENTRY
BX3 X0*X1
SLE1 BX4 X0*X2
IX4 X3-X4
PL X4,SLE2 IF PROPER INSERT POINT FOUND
BX6 X2
SA6 A2+1
SA2 A2-B1
SB6 A2-B7
PL B6,SLE1 IF MORE ENTRIES TO CHECK
SLE2 BX6 X1
SA6 A2+B1 PLACE ENTRY IN ITS PROPER SLOT
SA1 A1+B1
BX3 X0*X1
SA2 A1-B1
SB6 A1-B5
NG B6,SLE1 IF MORE ENTRIES TO SORT
EQ SLEX EXIT
SLT SPACE 4,20
** SLT - SORT LINE NUMBER TABLE.
*
* *SLT* SORTS THE *LNT* INTO ASCENDING ORDER
* BASED UPON THE OLD LINE NUMBER FIELD.
*
* ENTRY (LTFILE) = 0, IF *LNT* IS NOT WRITTEN TO DISK.
* 1, IF *LNT* IS WRITTEN TO DISK.
*
* EXIT *LNT* IS SORTED.
*
* USES X - 1, 2, 5.
* A - 1, 2, 5.
* B - 7.
*
* CALLS SBE, SLE, SLN, SMT.
*
* MACROS READEI, RENAME, REWIND.
SLT1 SA5 TSF+2 PUT *ZZZZZG2* INTO FET *L*
SX2 L
RJ SLN
RENAME X2,TSF+4 RENAME *ZZZZZG2* TO *ZZZZZG4*
REWIND X2,R
SLT2 READEI X2 READ A SEGMENT INTO *LNBUF*
SA2 X2+B1
SX2 X2
SA1 A2+B1 GET *IN*
IX1 X1-X2
RJ SMT MERGE SEGMENT WITH NEW *LNT* FILE
SX2 L
SX5 B0+
RJ SBE
SA1 X2
LX1 59-9
PL X1,SLT2 IF MORE ENTRIES TO PROCESS
SA5 TSF+0
RJ SLN RESTORE *ZZZZZG0* INTO FET *L*
SLT SUBR ENTRY/EXIT
SA1 LTFILE
NZ X1,SLT1 IF *LNT* WRITTEN TO MASS STORAGE
SA2 F.LNTBUF
SA1 NMLS
SB7 X2+
RJ SLE SORT *LNT*
EQ SLTX RETURN
SMT SPACE 4,25
** SMT - SORT AND MERGE LINE NUMBER TABLE.
*
* WHEN THE LINE NUMBER TABLE BECOMES FULL, IT IS
* SORTED AND MERGED WITH THE LINE NUMBER TABLE SCRATCH
* FILE.
*
* ENTRY (X1) = NUMBER OF ENTRIES IN TABLE.
* (X2) = FWA OF TABLE TO BE SORT/MERGED.
* (LTFET) = FET ADDRESS OF SORT/MERGED *LNT* FILE.
* (LT2FET) = FET ADDRESS OF SCRATCH FILE.
*
* EXIT (LTFET) = FET ADDRESS OF SORTED *LNT* FILE.
* (LT2FET) = FET ADDRESS OF SCRATCH FILE.
*
* USES X - ALL.
* A - 1, 2, 4, 5, 6, 7.
* B - 6, 7.
*
* CALLS SLE.
*
* MACROS READEI, READO, REWIND, WRITEO, WRITER.
SMT SUBR ENTRY/EXIT
ZR X1,SMTX IF NO ENTRIES IN TABLE
SX6 X2
SX7 X1
SA6 SMTA STORE FWA OF TABLE
SA7 SMTB STORE NUMBER OF TABLE ENTRIES
SA2 LT2FET
REWIND X2,R
SA2 LTFET
REWIND X2,R
READEI X2 PREPARE THE TWO FILES
SA2 SMTA
SA1 SMTB
SB7 X2 FWA OF TABLE
IX6 X1+X2
SA6 SMTB LWA+1 OF TABLE
RJ SLE SORT THE *LNT*
MX0 18
LX0 -18
SA1 SMTA
SA5 X1 GET THE FIRST TABLE ENTRY
SA2 LTFET
READO X2
NZ X1,SMT4 IF NO ENTRIES ON THE FILE
SMT1 BX3 X0*X5
BX4 X0*X6
IX3 X3-X4 COMPARE THE TWO ENTRIES
PL X3,SMT3 IF TABLE ENTRY .GE. THAN FILE ENTRY
BX5 X5-X6
BX6 X5-X6
BX5 X5-X6 REVERSE X5 AND X6
SA2 LT2FET
WRITEO X2 WRITE TABLE ENTRY TO NEW FILE
BX6 X5
SA5 A5+B1 GET NEXT TABLE ENTRY
SA4 SMTB
SB6 A5
SB7 X4
GT B7,B6,SMT1 IF A VALID TABLE ENTRY
SMT2 SA2 LT2FET EMPTY *LNT* FILE TO NEW FILE
WRITEO X2
SA2 LTFET
READO X2
ZR X1,SMT2 IF ENTRIES REMAINING ON FILE
EQ SMT5 FINISH THE SORT
SMT3 SA2 LT2FET WRITE FILE ENTRY TO NEW FILE
WRITEO X2
SA2 LTFET
READO X2
ZR X1,SMT1 IF MORE ENTRIES ON FILE
SMT4 BX6 X5 EMPTY THE LINE NUMBER TABLE TO FILE
SA2 LT2FET
WRITEO X2 WRITE TABLE ENTRY TO FILE
SA5 A5+B1
SA4 SMTB
SB6 A5
SB7 X4
GT B7,B6,SMT4 IF ENTRIES REMAINING IN TABLE
SMT5 SA2 LT2FET
WRITER X2 FLUSH BUFFER TO FILE
SA1 LTFET
SA2 LT2FET
BX6 X1
BX7 X2
SA6 A2
SA7 A1 SWITCH (LTFET) AND (LT2FET)
EQ SMTX RETURN
SMTA CON 0 FWA OF TABLE
SMTB CON 0 LWA OF TABLE
TITLE MEMORY ALLOCATION.
SPACE 4,10
MEM EQU * MANAGED TABLES START ADDRESS
TITLE PRESET.
PRS SPACE 4,55
** PRS - PRESET ARGUMENT PROCESSING.
*
* *PRS* ANALYZES THE COMMAND AND COMMAND LINE BUFFER. THE
* FOLLOWING INFORMATION IS EXTRACTED AND STORED.
* 1. FILE NAME IN EFN (FOR EDIT FILE NAME)
* 2. FLAGS DENOTING OPTIONS SPECIFIED
* 3. CHARACTER SET TYPE SPECIFIED
* 4. INFORMATION EXTRACTED FROM COMMAND LINE BUFFER
*
* CELLS FOR THE SPECIFIED OPTIONS ARE SET OR LEFT ZERO
* DEPENDING ON THEIR PRESENCES OR ABSENCE, RESPECTIVELY
* IN *COPT*. THESE FLAGS ARE SET IN THE FOLLOWING
* LOCATIONS -
* BOP = FOR B OPTION (BASIC SUB-SYSTEM)
* LOP = FOR L OPTION (LIST OPTION)
* FOP = FOR F OPTION (FORTRAN SUB-SYSTEM)
*
* AFTER THE BREAKING UP AND STORING OF THE COMMAND, *FVT* IS
* EXECUTED TO FIND VERB IN TABLE (I.E. MATCH THE VERB IN THE
* COMMAND LINE TO A VERB IN THE TABLE OF DEFINED VERBS (TDVB)).
* WHEN A MATCH IS FOUND, *PVA* IS CALLED TO PROCESS THE VERB
* ARGUMENTS. THIS ROUTINE EXECUTES THE ROUTINES ASSOCIATED
* -VIA TDVB- WITH THE VERB.
*
* ENTRY COMMAND STARTING IN RA+2 IN NORMAL DISPLAY CODE, IN
* STANDARD SYSTEM FORMAT.
* (CLB=) = FWA OF FET FOR COMMAND TO BE PROCESSED
* BY IEDIT.
* (I) = FWA OF FET FOR INPUT FILE
* (WHICH CONTAINS THE FILE TO EDIT).
*
* EXIT *IEDIT* COMMAND ANALYZED, INFORMATION EXTRACTED
* AND STORED.
* COMMAND LINE BUFFER INFORMATION EXTRACTED AND
* STORED IN APPROPRIATE CELLS AND TABLES.
* FUNCTION TO BE PERFORMED ESTABLISHED
* (FUNCTION NUMBER RETURNED IN FNUM).
* TO ERR - IF A FATAL ERROR CONDITION IS DETECTED.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 5, 6, 7.
* B - 1, 2, 3, 4, 5, 6, 7.
*
* CALLS ARG, FVT, PVA, SST, USB.
*
* MACROS FILINFO, MEMORY, MESSAGE, READ, REPRIEVE, SETLOF.
PRS SUBR ENTRY/EXIT
MX6 1
SA2 O+1 SET *FLUSH* BIT
LX6 36-59
SB1 1
BX6 X6+X2
SA6 A2
SETLOF LOFPRM
SA1 ACTR SET UP FOR CALL TO *ARG*
SA4 ARGR
SB5 PRSA
SB4 X1
RJ ARG PROCESS ARGUMENTS
SX5 ERRCSE *COMMAND ARGUMENT ERROR.*
NZ X1,ERR IF ARGUMENT ERROR
SA1 COPT PROCESS *OP* LIST
ZR X1,PRS5 IF NO OPTIONS SPECIFIED
MX0 60-18 CHECK FOR INCORRECT *OP=*
BX7 X1*X0 ERROR IF 60-18 ALL ZEROES
SX5 ERRCSE *COMMAND ARGUMENT ERROR.*
ZR X7,ERR IF INCORRECT *OP=* PASSED
* PROCESS *OP* PARAMETER CHECKING FOR VALIDITY.
SX7 B1 SET FOR USE AS FLAG
MX0 6 MASK FOR OPTION
PRS1 BX2 X0*X1
LX2 5-59 RIGHT JUSTIFY OPTION
ZR X2,PRS5 IF DONE CRACKING *OP*
SB5 X2+ SET CURRENT *OP* BEING COMPARED
SB2 1RB
EQ B2,B5,PRS2 IF *B* PARAMETER SET
SB2 1RL
EQ B2,B5,PRS3 IF *L* PARAMETER SET
SB2 1RF
EQ B2,B5,PRS4 IF *F* PARAMETER SET
SX5 ERRCSE *COMMAND ARGUMENT ERROR.*
EQ ERR *INCORRECT *OP* SPECIFIED*
PRS2 SA7 BOP SET FOR *B* OPTION
LX1 6 LINE UP LIST TO GET NEXT *OP*
EQ PRS1 PROCESS NEXT *OP*
PRS3 SA7 LOP SET FOR *L* OPTION
SA7 LSTFIL
LX1 6 LINE UP LIST TO GET NEXT *OP*
EQ PRS1 PROCESS NEXT *OP*
PRS4 SA7 FOP SET *F* OPTION SELECTED
LX1 6
EQ PRS1 PROCESS NEXT *OP*
PRS SPACE 2,5
* VALIDATE AND SET CHARACTER SET TYPE
* CSTI = -1 FOR ASCII 6/12
* = 0 FOR NORMAL
* = 1 FOR ASCII8
PRS5 SA2 CSCS
SX7 6
SA1 PRSC
BX6 X2-X1
SX7 1R
ZR X6,PRS6 IF NORMAL CHARACTER SET
SA1 PRSD
SX6 -B1
BX5 X2-X1
ZR X5,PRS6 IF ASCII 6/12
SX7 40B
SX6 1 CHARACTER SET MUST BE ASCII8
SA1 PRSE
BX5 X2-X1
ZR X5,PRS6 IF ASCII8
SX5 ERRCSE *COMMAND ARGUMENT ERROR.*
EQ ERR CHARACTER SET ERROR
PRS6 SA6 CSTI SAVE CHARACTER SET TYPE INDICATOR
SA7 BLNK
REPRIEVE RPB,SET,200B SET *REPRIEVE* PROCESSING
MESSAGE =0,1,R CLEAR COMMAND FROM *MS1W*
SA1 C+2 *IN* ADDRESS OF BUFFER
SA2 A1+B1 ADDRESS OF FIRST WORD OF BUFFER
IX3 X1-X2
NZ X3,PRS7 IF COMMAND TO PROCESS
SX5 ERRNIV *NON-EXISTANT EDIT VERB SPECIFIED.*
EQ ERR PROCESS ERROR
PRS7 SA1 CSTI
SB2 X2
SB3 X1
SB6 MXCIL
RJ USB
SA3 USBC
SA3 X3
PRS8 SX3 X3-1R
NZ X3,PRS9 IF NOT BLANK CHARACTER
SA3 A3-B1
EQ PRS8 GET NEXT CHARACTER
PRS9 SX7 A3
SA7 USBC
SA3 CLIN-1
RJ FVT FIND VERB IN TABLE
RJ PVA PROCESS VERB ARGUMENTS
SA1 NELR
ZR X1,PRS13 IF NO ENTRIES
SB7 LRT
SB6 X1+
RJ SST= SORT LINE RANGE TABLE ENTRIES
* VALIDATE LINE RANGE TABLE ENTRIES.
SX5 ERREIE LINE NUMBERS OVERLAP IN RANGE TABLE
SB4 B0
SA1 B7 FIRST HIGH ORDER VALUE
SB3 X1 FIRST LOW ORDER VALUE
AX1 18 HIGH ORDER VALUE OF PAIR
SB5 X1+
PRS10 LT B5,B3,PRS11 IF INCORRECT LINE RANGE ENTRY
SB4 B4+1
EQ B4,B6,PRS12 IF NO MORE ENTRIES TO VALIDATE
SA2 A1+B4 SET NEXT LOW ORDER VALUE
SB3 X2
LE B3,B5,ERR IF OVERLAP OF ENTRIES
AX2 18
SB5 X2
EQ PRS10 CHECK NEXT ENTRY
PRS11 SX5 ERRELR *ERROR IN LINE RANGE.*
EQ ERR PROCESS ERROR
PRS12 MX0 1 MARK THE END OF *LRT*
SA5 LRT+B4-1
BX6 X5+X0
SA6 A5+ REPLACE LAST ENTRY
* SET UP FET FOR EDIT FILE WITH LOCAL FILE.
PRS13 SX0 3 SET EDIT FILE NAME INTO FET
SA5 EFN
BX6 X0+X5
SA6 E
MEMORY CM,MSTAT,R DETERMINE MAXIMUM MEMORY AVAILABLE
SA2 MSTAT
SA1 FNUM
BX6 X2
AX6 30
SX2 X1-FNRE
SA6 CMAX
NZ X2,PRS14 IF NOT A *READ* FUNCTION
SA2 FILEN
SA3 FIPB
BX6 X2+X3
SA6 A3
FILINFO FIPB CHECK DEVICE TYPE OF *READ* FILE
SA1 FIPB+1 ISOLATE DEVICE TYPE
MX2 12
BX1 X2*X1
SX5 ERRNRF *READ FILE EMPTY.*
ZR X1,ERR IF FILE NOT ON MASS STORAGE
PRS14 SX7 B0+
SA7 MSTAT
MEMORY CM,A7,R
SX2 MEML FWA OF *PRS*
SA1 MSTAT
AX1 30
IX6 X1-X2 AVAILABLE SPACE FOR BUFFERS
SX7 X1+ LWA FOR TABLES
SX6 X6-NTAB ADJUST FOR *MTP* SPARE WORDS
SA6 DYNST
SA7 F.TEND
SA2 BOP
SA1 FNUM
SA7 CMEM
SX3 MEM-/IEDIT1/MEM2
PL X3,PRSX IF OVERLAY NOT LONGER THAN MAIN ROUTINE
SX1 X1-MXIL-1
LX1 1
BX1 X1*X2
NZ X1,PRSX IF *BASIC* AND *MOVE*, *DUP*, OR *READ*
SA1 LM
IX6 X1+X3
SA6 A1
SA2 DYNST
IX7 X2-X3
SA7 A2
EQ PRSX RETURN
PRSA BSS 0 COMMAND EQUIVALENCE TABLE
FN ARG EFN,EFN,400B FILE NAME
OP ARG PRSB,COPT,400B OPTIONS
CS ARG PRSC,CSCS CHARACTER SET
ARG
PRSB CON -1 SET -1 IF NO OPTIONS SPECIFIED
PRSC DATA C*NORMAL* NORMAL CHARACTER TYPE
PRSD DATA C*ASCII* ASCII 6/12
PRSE DATA C*ASCII8* ASCII 8/12
PRSF VFD 42/0LINPUT,18/1 TEST DATA FILE NAME
PVA SPACE 4,35
** PVA - PROCESS VERB ARGUMENTS.
*
* PVA JUMPS TO THE SUBROUTINES TO PROCESS THE ARGUMENTS FOR
* THE VERB. THESE SUBROUTINES ARE OBTAINED FROM THE SET OF
* LINES IN THE TABLE CORRESPONDING TO THE VERB THAT WAS FOUND.
*
* ENTRY (A2) = ADDRESS OF TABLE ENTRY MATCHING VERB IN *CLB=*.
* (X2) = *TDVB* ENTRY MATCHING VERB IN *CLB=*.
*
* EXIT TABLES RELEVANT TO COMMAND BUILT.
* NECESSARY VALUES SAVED FOR EXECUTION OF COMMAND.
* COMMAND NUMBER SAVED.
* COMMAND PARAMETERS VALIDATED.
*
* USES X - 0, 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
* B - 2, 7.
*
* CALLS GTC, GTS, ICE.
*
* NOTES *ICE* MAY CALL ANY OF THE FOLLOWING ROUTINES -
* 1. *GFN* - GET FILE NAME.
* 2. *GIN* - GET INCREMENT.
* 3. *GLS* - GET LINES.
* 4. *GLI* - GET LINE NUMBER TO INSERT TEXT AFTER.
* 5. *GSP* - GET STRING PAIR.
* 6. *GSR* - GET SINGLE RANGE OF LINE NUMBERS.
* 7. *GSS* - GET STRING FOR SEARCH.
PVA SUBR ENTRY/EXIT
MX0 -TDISN INCREMENT TO FIRST SUBROUTINE
SB2 TDISN-TDISS-1
LX1 X2,B2
BX1 -X0*X1
SB2 X1+
SA2 A2+B2 FIRST PROCESS FOR COMMAND
PVA1 BX7 X2 SAVE *TDVB* ENTRY
SB7 X2 GET PROCESS ADDRESS
SA3 LCIP
SA7 LINE
SB2 59-TDFPS CHECK FOR END OF SUBROUTINES
SA3 X3
LX7 X2,B2
NG X7,PVA2 IF AT END OF FUNCTION PROCESSOR ENTRIES
SX7 A2 SAVE ADDRESS IN TABLE OF FUNCTION
SA7 ADRF
SX7 B1
SA7 SUCC
RJ ICE PERFORM FUNCTION
* FUNCTION PROCESSORS RETURN HERE.
SA2 ADRF RESTORE ADDRESS OF FUNCTION IN TABLE
SA1 LINE
SA2 X2+B1
LX1 59-TDRQS
PL X1,PVA1 IF FUNCTION OPTIONAL
SA5 SUCC
ZR X5,PVA1 IF PREVIOUS FUNCTION EXECUTED SUCCESSFULLY
MX0 TDASN GET INCREMENT TO FWA OF ALTERNATE SYNTAX
LX0 TDASS-59
SA1 LINE
SX5 ERREIS *INCORRECT SYNTAX.*
BX1 X0*X1
LX1 TDSAS-TDASS RIGHT JUSTIFY OFFSET
ZR X1,ERR IF THERE IS NO ALTERNATE SYNTAX
SA2 TDVB+X1 SET FIRST LINE OF ALTERNATE SYNTAX
SA5 LCIV
SX7 X5
SX6 B0
SA7 LCIP
SA6 NELR
EQ PVA1 PROCESS NEXT PARAMETER
PVA2 SX7 X2+
SA7 FNUM STORE COMMAND NUMBER
RJ GTS SKIP OVER ALL BLANKS
ZR X0,PVA3 IF NOT A SEPARATOR
SA3 A3-1
PVA3 RJ GTC REREAD THE CHARACTER
ZR X4,PVAX IF NO MORE CHARACTERS ON THE LINE
SX1 TERA
BX1 X1*X4
SX5 ERREIS *ERROR IN EDIT COMMAND SYNTAX*
ZR X1,ERR IF NOT A VALID TERMINATOR
SA2 CSTI CHECK CHARACTER SET
SX1 1R.
SX2 X2-1
NG X2,PVA4 IF NOT *ASCII8*
SX1 56B
PVA4 BX3 X3-X1
NZ X3,PVAX IF TERMINATOR NOT A PERIOD
RJ GTC GET THE FOLLOWING CHARACTER
ZR X4,PVAX IF END OF THE STRING
BX3 X3-X1
NZ X3,PVAX IF NOT AN ELLIPSIS
EQ ERR ISSUE *ERROR IN SYNTAX* MESSAGE
GFN TITLE VERB ARGUMENT PROCESSORS.
GFN SPACE 4,15
** GFN - GET FILE NAME.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING FILE NAME.
*
* EXIT (LCIP) = ADDRESS OF LAST CHARACTER PARSED.
* (SUCC) = 0, IF LEGAL FILE NAME FOUND.
* (FILN) = LEGAL FILE NAME FOLDED INTO *NORMAL*
* CHARACTER SET.
*
* USES X - 1, 2, 5, 6, 7.
* A - 1, 2, 6, 7.
* B - 7.
*
* CALLS GTS, GTB.
GFN2 SA6 FILEN STORE FILE NAME
SX7 A3
SX6 B0
SA7 LCIP MARK WHERE SCAN ENDED
SA6 SUCC SET SUCCESS FLAG TO TRUE
GFN SUBR ENTRY/EXIT
RJ GTS GET SEPARATOR
ZR X0,GFNX IF SEPARATOR NOT FOUND, RETURN
SX7 B0+
SA7 CNVRT SET CONVERSION FLAG
RJ GTB GET BLOCK
SX5 ERRNRS *NO READ/DESTINATION FILE SPECIFIED.*
ZR B2,ERR IF NO CHARACTERS IN BLOCK
SB7 MXWS GET MAXIMUM WORD SIZE INTO B7
SX1 LETA+DIGA GET MASK FOR FILE NAME
SX5 ERREIF *FILE NAME ERROR.*
GT B2,B7,ERR IF WORD TOO LONG
BX6 -X1*X6
NZ X6,ERR IF NON-VALID CHARACTERS IN FILE NAME
SA1 BLOCK LOAD FILE NAME
SA2 EFN GET EDIT FILE NAME
SX5 ERRDFN *DUPLICATE FILE NAME.*
BX2 X2-X1
BX6 X1
ZR X2,ERR IF DUPLICATE FILE NAME
SA2 TSF-1
SX5 ERRRFN *RESERVED FILE NAME.*
GFN1 SA2 A2+B1
ZR X2,GFN2 IF END OF TABLE
BX2 X2-X1
NZ X2,GFN1 IF NOT RESERVED FILE NAME
EQ ERR *RESERVED FILE NAME*
GIN SPACE 4,20
** GIN - GET INCREMENT.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING START OF
* INCREMENT BLOCK.
*
* EXIT (LCIP) = ADDRESS OF LAST CHARACTER PARSED.
* (SUCC) = 0, IF FUNCTION SUCCESSFUL.
* (INCR) = INCREMENT IN BINARY.
*
* USES X - 5, 6, 7.
* A - 6, 7.
* B - 2, 7.
*
* CALLS GLN, GTS.
GIN SUBR ENTRY/EXIT
RJ GTS GET SEPARATOR
ZR X0,GINX IF SEPARATOR NOT FOUND, RETURN
RJ GLN
NG X6,GINX IF NUMBER NOT FOUND
SB2 X6+
SB7 MXIC MAXIMUM INCREMENT
LT B2,B1,GIN1 IF INCREMENT TOO SMALL
GT B2,B7,GIN1 IF INCREMEMT TOO LARGE
SA6 INCR STORE INCREMENT
SX7 B0
SX6 A3
SA7 SUCC SET SUCCESS FLAG TO TRUE
SA6 LCIP MARK WHERE SCAN ENDED
EQ GINX RETURN
GIN1 SX5 ERREII *LINE NUMBER INCREMENT ERROR.*
EQ ERR ERROR IN INCREMENT
GLI SPACE 4,15
** GLI - GET LINE NUMBER TO INSERT TEXT AFTER.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING SEPARATOR
* PRECEDING LINE NUMBER.
*
* EXIT (LCIP) = ADDRESS OF LAST CHARACTER PARSED.
* (SUCC) = 0, IF FUNCTION SUCCESSFUL.
* (LNIA) = LINE NUMBER TO INSERT AFTER (IF FOUND).
*
* USES X - 3, 6, 7.
* A - 3, 6, 7.
*
* CALLS GLN, GTS.
GLI1 RJ GLN
NG X6,GLIX IF NO LINE NUMBER FOUND, RETURN
SX7 X6-MXLN-1
ZR X7,GLIX IF ASTERISK FOUND, RETURN
GLI2 SA6 LNIA STORE LINE NUMBER
SX7 B0
SX6 A3
SA7 SUCC SET SUCCESS FLAG TO TRUE
SA6 LCIP MARK WHERE SCAN ENDED
GLI SUBR ENTRY/EXIT
RJ GTS GET SEPARATOR
ZR X0,GLIX IF SEPARATOR NOT FOUND, RETURN
RJ GTS CHECK FOR SECOND SEPARATOR
ZR X0,GLI1 IF SEPARATOR NOT FOUND
SA3 A3-1
SX6 MXLN+1 RETURN *MXLN+1* AS LINE NUMBER
EQ GLI2 SET FUNCTION SUCCESSFUL
GLS SPACE 4,15
** GLS - GET LINES.
*
* *GLS* GETS ONE OR MORE SETS OF LINE RANGES INCLUDING THE
* RANGE OF SINGLE LINE NUMBERS AND STORES THOSE RANGES AS
* ENTRIES IN *LRT*.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING LINE RANGES.
*
* EXIT (LCIP) = ADDRESS OF LAST CHARACTER PARSED.
* (SUCC) = 0, IF AT LEAST ONE LINE NUMBER/RANGE FOUND.
*
* USES X - 6, 7.
* A - 6, 7.
*
* CALLS GLR.
GLS SUBR ENTRY/EXIT
GLS1 RJ GLR GET LINE RANGE
NG X6,GLSX IF NO LINE NUMBER READ, RETURN
SX7 A3
SX6 B0
SA7 LCIP MARK WHERE SCAN ENDED
SA6 SUCC SET SUCCESS FLAG TO TRUE
EQ GLS1 TRY TO GET ANOTHER LINE NUMBER
GSP SPACE 4,15
** GSP - GET STRING PAIR.
*
* GSP GETS A PAIR OF STRINGS - ONE TO SEARCH WITH
* THE OTHER TO REPLACE THE FIRST VALUE WITH.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING STRING PAIR.
*
* EXIT (LCIP) = ADDRESS OF LAST CHARACTER PARSED.
* (SUCC) = 0, IF SUCCESSFUL.
* (SBUF) = SEARCH STRING, ONE CHARACTER PER WORD.
* (RBUF) = REPLACEMENT STRING, ONE CHARACTER PER WORD.
* (SRTFLG) = 1, IF A CHARACTER STRING WAS SPECIFIED.
*
* USES X - 0, 3, 5, 6, 7.
* A - 3, 5, 6, 7.
*
* CALLS GTB, GCS.
*
* MACROS WRITEC.
GSP1 SX0 A3
WRITEC O,ERRNDF *NO CLOSING DELIMITER FOUND.*
SA3 X0+
GSP2 SX7 B0 SET FUNCTION SUCCESS FLAG
SX6 A3
SA7 SUCC SET SUCCESS FLAG TO TRUE
SA6 LCIP MARK WHERE SCAN ENDED
GSP SUBR ENTRY/EXIT
RJ GCS GET CHARACTER STRING TO SEARCH FOR
SA5 STRD
NZ X7,GSPX IF NO SEARCH STRING FOUND, RETURN
SX7 RBUF BUFFER TO WHICH BLOCK IS ADDED
NG X5,GSPX IF NO CLOSING DELIMITER ON SEARCH STRING
SA7 CNVRT
RJ GTB GET BLOCK UP TO DELIMITER
SX7 B2+
SA5 STRD CHECK THE CLOSING DELIMETER
SA7 NCIR STORE NUMBER OF CHARS IN REPLACE STRING
NG X5,GSP1 IF CLOSING DELIMETER MISSING
SA3 A3+1
EQ GSP2 SET FUNCTION SUCCESSFUL
GSR SPACE 4,20
** GSR - GET SINGLE RANGE OF LINE NUMBERS.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING LINE RANGE.
*
* EXIT (LCIP) = ADDRESS OF LAST CHARACTER PARSED.
* (SUCC) = 0, IF LINE NUMBER/RANGE FOUND.
*
* USES X - 6, 7.
* A - 6, 7.
*
* CALL GLR.
GSR SUBR ENTRY/EXIT
RJ GLR GET A LINE RANGE
NG X6,GSRX IF LINE NUMBER NOT FOUND, RETURN
SX7 A3
SX6 B0
SA7 LCIP SET SUCCESS FLAG TO TRUE
SA6 SUCC MARK WHERE SCAN ENDED
EQ GSRX RETURN
GSS SPACE 4,15
** GSS - GET STRING FOR SEARCH.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING STRING.
*
* EXIT (LCIP) = ADDRESS OF LAST CHARACTER PARSED.
* (SUCC) = 0, IF FUNCTION SUCCESSFUL.
* (SRTFLG) = 1, IF CHARACTER STRING SPECIFIED.
*
* USES X - 5, 6.
* A - 5, 6, 7.
*
* MACROS WRITEC.
GSS SUBR ENTRY/EXIT
RJ GCS GET SEARCH STRING
NZ X7,GSSX IF SEARCH STRING NOT FOUND, RETURN
SX6 A3+
SA7 SUCC SET SUCCESS FLAG TO TRUE
SA6 LCIP MARK WHERE SCAN ENDED
SA5 STRD
PL X5,GSSX IF CLOSING DELIMETER FOUND, RETURN
WRITEC O,ERRNDF *NO CLOSING DELIMITER FOUND.*
EQ GSSX RETURN
ABB TITLE PRESET SUBROUTINES
FVT SPACE 4,20
** FVT - FIND VERB IN TABLE.
*
* FVT SCANS THE *VERB* TABLE LOOKING FOR THE VERB
* THAT MATCHES THE ONE IN THE COMMAND BUFFER.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING VERB NAME.
*
* EXIT ((A2)) = (X2) = LINE IN *TDVB* CONTAINING VERB.
* (LCIV) = (LCIP) = ADDRESS OF LAST CHARACTER IN VERB.
*
* USES X - 0, 1, 2, 4, 5, 6, 7.
* A - 1, 2, 7.
* B - 6.
*
* CALLS GTB.
FVT2 SX7 A3+
SA7 LCIV STORE ADDRESS OF LAST CHARACTER IN VERB
SA7 LCIP MARK WHERE SCAN ENDED
FVT SUBR ENTRY/EXIT
SX7 B0+
SA7 CNVRT
RJ GTB GET VERB
SA1 BLOCK
SX5 ERRNIV *NON-EXISTENT EDIT VERB SPECIFIED.*
ZR B2,ERR IF NO CHARACTERS IN BLOCK
SB6 MXWS
SX2 LETA
GT B2,B6,ERR IF NAME TOO LONG
BX6 -X2*X6
NZ X6,ERR IF INCORRECT CHARACTERS FOUND
SA2 TDVB
MX0 TDVNN
MX7 -TDIVN
FVT1 BX4 X0*X2 VERB FROM TABLE
BX4 X1-X4
ZR X4,FVT2 IF MATCH FOUND
BX4 -X7*X2
SB6 X4+
SA2 A2+B6 NEXT TABLE ENTRY WITH VERB
ZR X2,ERR IF NO VERB FOUND
EQ FVT1 CHECK NEXT ENTRY FOR MATCH
GCS SPACE 4,20
** GCS - GET CHARACTER STRING FOR SEARCH.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING STRING.
*
* EXIT ((A3)) = (X3) = LAST CHARACTER IN STRING.
* (X7) = 0, IF FUNCTION SUCCESSFUL.
* (NCIS) = NUMBER OF CHARACTERS IN SEARCH STRING.
* (SBUF) = SEARCH STRING, ONE CHARACTER PER WORD.
* (STRD) = STRING DELIMITER CHARACTER.
*
* USES X - 3, 5, 6, 7.
* A - 3, 5, 6, 7.
*
* CALLS GTB, GTC, GTS.
GCS SUBR ENTRY/EXIT
SX7 B1+
RJ GTS GET SEPARATOR
ZR X0,GCSX IF SEPARATOR NOT FOUND, RETURN
RJ GTS GET NEXT SEPARATOR
ZR X0,GCS1 IF SEPARATOR NOT FOUND
SA3 A3-1
GCS1 RJ GTC GET CHARACTER
ZR X4,GCSX IF NO CHARACTERS FOUND, RETURN
SX5 DLMA
BX5 X5*X4
ZR X5,GCSX IF STRING DELIMITER NOT FOUND
SX7 X3 SAVE DELIMITER
SX6 SBUF SET UP FOR NO ASCII TO NORMAL CONVERSION
SA7 STRD
SA6 CNVRT
RJ GTB GET BLOCK UP TO DELIMITER
SX7 B2+ SAVE CHARACTER COUNT OF SEARCH STRING
SA5 STRD
SA7 NCIS
SX7 B0+
NG X5,GCSX IF SECOND DELIMITER NOT FOUND, RETURN
SA3 A3+B1
EQ GCSX RETURN
GLN SPACE 4,20
** GLN - GET LINE NUMBER.
*
* *GLN* GETS A LINE NUMBER AND CONVERTS IT TO BINARY IN *X6*.
* AN ASTERISK IS CONVERTED INTO THE VALUE *MXLN+1*.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING LINE NUMBER
*
* EXIT ((A3)) = (X3) = LAST CHARACTER IN LINE NUMBER.
* (X6) = LINE NUMBER READ RIGHT JUSTIFIED (BINARY).
* .LT. 0, IF LINE NUMBER NOT READ.
*
* USES X - 3, 5, 6, 7.
* A - 3, 5, 7.
* B - 2, 7.
*
* CALLS DXB, GTB.
GLN2 SA3 A3+B1
SA5 CSTI CHECK CHARACTER SET
SB2 X5
SB2 B2-B1
SX7 X3-1R*
NG B2,GLN3 IF NOT *ASCII8* CHARACTER SET
SX7 X3-52B
GLN3 NZ X7,GLN1 IF NOT AN ASTERISK
SX6 MXLN+1 SET VALUE TO *MXLN+1*
GLN SUBR ENTRY/EXIT
SX7 B0+
SA7 CNVRT
RJ GTB GET LINE NUMBER
ZR B2,GLN2 IF NO CHARACTERS FOUND
SX5 DIGA GET MASK FOR NUMBER
SB7 NUMD
BX5 -X5*X6
NZ X5,GLN1 IF NON-DIGIT FOUND
GT B2,B7,GLN1
SB7 B1
SA5 BLOCK
RJ DXB CONVERT NUMBER TO BINARY
SA3 A3
ZR X4,GLNX IF NUMBER CONVERTABLE
SX5 ERRELR *LINE RANGE ERROR.*
EQ ERR ISSUE *ERROR IN LINE RANGE* MESSAGE
GLN1 SX6 -1 SET FAILURE FLAG
EQ GLNX RETURN
GLR SPACE 4,25
** GLR - GET LINE RANGE.
*
* *GLR* GETS A LINE RANGE (INCLUDING THE RANGE OF SINGLE LINE
* NUMBERS) AND MAKES A RANGE ENTRY FOR IT IN THE *LRT*.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING LINE RANGE.
*
* EXIT ((A3)) = (X3) = LAST CHARACTER IN LINE RANGE.
* (X6) = .LT. 0, IF FUNCTION NOT SUCCESSFUL.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 1, 3, 4, 6, 7.
* B - 2.
*
* CALLS GLN, GTC, GTS.
GLR SUBR ENTRY/EXIT
SX6 -B1
RJ GTS
ZR X0,GLRX IF NO SEPARATOR FOUND, RETURN
RJ GLN GET LINE NUMBER
NG X6,GLRX IF NUMBER NOT FOUND, RETURN
SA6 LROP STORE NUMBER
RJ GTC GET CHARACTER
ZR X4,GLR2 IF END OF LINE
LX4 30
MX5 -NBIC
NG X4,GLR1 IF NO DISPLAY CODE EQUIVALENT
LX4 NBIC+1
BX1 -X5*X4
SX1 X1-1R.
ZR X1,GLR4 IF CHARACTER A PERIOD
GLR1 SA3 A3-1
GLR2 SA4 LROP
SX2 X4-MXLN-1
NZ X2,GLR3 IF ENTIRE FILE NOT SELECTED
SX6 MXLN
LX6 18 CONSTRUCT AN *..* *LRT* ENTRY
EQ GLR6 APPEND TO *LRT*
GLR3 SB2 18
LX4 B2,X6
BX6 X4+X6 CONSTRUCT A SINGLE LINE *LRT* ENTRY
EQ GLR6 APPEND TO *LRT*
GLR4 RJ GTC GET NEXT CHARACTER
SA3 A3-B1
ZR X4,GLR2 IF NO CHARACTER
SA3 A3-B1
LX4 30
NG X4,GLR2 IF NO DISPLAY CODE EQUIVALENT
LX4 NBIC+1
BX1 -X5*X4
SX2 X1-1R.
NZ X2,GLR2 IF NOT A PERIOD
SA3 A3+2
RJ GLN GET SECOND LINE NUMBER
NG X6,GLR7 IF NO NUMBER FOUND
SA4 LROP
SX2 X4-MXLN-1
NZ X2,GLR5 IF FIRST NUMBER NOT AN ASTERISK
SX4 B0+
GLR5 LX6 18
BX6 X6+X4
GLR6 SA1 NELR
SA6 X1+LRT ADD ENTRY TO *LRT*
SX7 X1+B1
SA7 A1 ADD ONE TO *LRT* ENTRY COUNT
EQ GLRX RETURN
GLR7 SX5 ERRELR *LINE RANGE ERROR.*
EQ ERR ISSUE *ERROR IN LINE RANGE* MESSAGE
GTB SPACE 4,30
** GTB - GET BLOCK.
*
* IF (CNVRT) = 0, CHARACTERS ARE CONVERTED TO DISPLAY CODE AND
* PACKED INTO *BLOCK* UP TO THE FIRST SEPARATOR, TERMINATOR,
* OR DELIMITER. ANY BLANKS FOUND ARE REMOVED. IF
* (CNVRT) .NE. 0, IT CONTAINS A STRING BUFFER ADDRESS TO WHICH
* CHARACTERS SHOULD BE MOVED. THE CHARACTERS ARE NOT
* CONVERTED TO DISPLAY CODE AND BLANKS ARE NOT DISCARDED.
* THE CHARACTERS ARE STORED IN THE BUFFER, ONE CHARACTER PER
* WORD UNTIL THE CHARACTER IN *STRD* IS FOUND OR THE END OF
* THE COMMAND IS REACHED.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING START OF BLOCK.
* (CNVRT)= 0, IF BLOCK TO BE CONVERTED TO DISPLAY CODE
* AND PACKED INTO *BLOCK* WITH ALL BLANKS
* REMOVED.
* .GT. 0, IF BLOCK IS NOT TO BE CONVERTED AND
* IS TO BE MOVED IN UNPACKED FORM TO THE
* ADDRESS IN *CNVRT*
* (STRD) = THE DESIRED DELIMITER WHEN *CNVRT* = ZERO.
*
* EXIT ((A3)) = (X3) = LAST CHARACTER OF BLOCK.
* (B2) = COUNT OF CHARACTERS READ IN BLOCK.
* (X6) = ATTRIBUTES OF BLOCK.
* BLOCK = FWA OF BLOCK OF CHARACTERS OBTAINED
* CHARACTERS IN LAST WORD OF *BLOCK* LEFT
* JUSTIFIED.
* (STRD) = .LT. 0, IF SPECIFIED DELIMETER NOT FOUND.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 2, 3, 5, 7.
* B - 2, 4, 6, 7.
*
* CALLS GTC.
GTB5 LX7 B7
SA7 BLOCK+B6 STORE LAST WORD OF BLOCK
GTB6 MX7 -MXNA
BX6 -X7*X6 LEAVE ONLY THE ATTRIBUTES IN *X6*
ZR X4,GTB7 IF NO CLOSING DELIMITER FOUND
SA3 A3-1
EQ GTBX RETURN
GTB7 SX7 -1
SA7 STRD
GTB SUBR ENTRY/EXIT
SA2 CNVRT
SX6 B0 INITIALIZE ATTRIBUTE OF BLOCK
SB2 B0 INITIALIZE COUNT OF CHARACTERS IN BLOCK
ZR X2,GTB2 IF BLOCK IS TO BE PACKED
SA5 STRD
SB4 X2-1
GTB1 RJ GTC GET CHARACTER AND ATTRIBUTE
ZR X4,GTB6 IF END OF LINE ENCOUNTERED
IX2 X5-X3
ZR X2,GTB6 IF SPECIFIED DELIMITER FOUND
BX6 X6+X4 ACCUMULATE ATTRIBUTES
SB2 B2+B1 INCREMENT COUNT OF CHARACTERS
BX7 X3
SA7 B4+B2 ADD CHARACTER TO BUFFER
EQ GTB1 GET NEXT CHARACTER
GTB2 SB6 B0
SX7 B0
SB7 60
GTB3 RJ GTC
ZR X4,GTB5 IF END OF LINE ENCOUNTERED
SX1 X3
SA2 CSTI
ZR X2,GTB4 IF *NORMAL* CHARACTER SET
LX4 30
SX5 ERREIS *ERROR IN EDIT COMMAND SYNTAX*
NG X4,ERR IF CHARACTER NOT CONVERTABLE TO *NORMAL*
LX4 NBIC+1
MX2 -NBIC
BX1 -X2*X4 GET DISPLAY CODE EQUIVALENT
LX4 29-NBIC
GTB4 SX2 X1-1R
ZR X2,GTB3 IF CHARACTER IS A BLANK
SX2 SEDE+TERA+CHAA
BX2 X2*X4
NZ X2,GTB5 IF DELIMITER, SEPARATOR, OR TERMINATOR
BX6 X6+X4 ACCUMULATE ATTRIBUTES
SB2 B2+1 INCREMENT COUNT OF CHARACTERS
LX7 NBIC
BX7 X7+X1 ADD CHARACTER TO BLOCK
SB7 B7-NBIC
GT B7,GTB3 IF ROOM FOR MORE CHARACTERS IN *X7*
SB7 60
SA7 BLOCK+B6 STORE PACKED WORD
SB6 B6+B1
SX7 B0
EQ GTB3 GET NEXT CHARACTER
GTC SPACE 4,25
** GTC - GET CHARACTER AND ATTRIBUTE.
*
* *GTC* GETS THE NEXT CHARACTER IN THE COMMAND. THE
* ATTRIBUTES OF THE CHARACTER ARE OBTAINED BY EXTRACTING THE
* ENTRY FROM THE ATTRIBUTE TABLE CORRESPONDING TO THAT
* CHARACTER. THE ATTRIBUTES ARE RETURNED IN X4 (ONE BIT IS SET
* FOR EACH ATTRIBUTE OF THE CHARACTER). FOR ASCII 6/12 AND
* 8/12 CHARACTERS, THE HIGH ORDER BITS OF X4 CONTAIN THE
* DISPLAY CODE EQUIVALENT OF THAT CHARACTER IF IT EXISTS.
*
* ENTRY ((A3)) = (X3) = CHARACTER LAST RETRIEVED BY *GTC*.
*
* EXIT ((A3)) = (X3) = CHARACTER RIGHT JUSTIFIED, ZERO FILL.
* (X4) = ATTRIBUTES OF CHARACTER AND DISPLAY CODE
* EQUIVALENT (ZERO IF END OF LINE).
* AND DISPLAY CODE EQUIVALENT.
*
* USES X - 2, 3, 4.
* A - 2, 3, 4.
* B - 5.
GTC SUBR ENTRY/EXIT
SA2 USBC GET ADDRESS OF END OF LINE
SX4 B0 INITIALIZE ATTRIBUTES TO ZERO
SB5 X2
SB5 A3-B5
GE B5,GTCX IF END OF LINE, RETURN
SA3 A3+B1 GET NEXT CHARACTER
SA4 TATC
SA2 CSTI DETERMINE CHARACTER SET
SB5 X2
GT B5,GTC3 IF ASCII 8/12 CHARACTER SET
BX2 X3
ZR B5,GTC2 IF *NORMAL* CHARACTER SET
BX4 X3
AX4 NBIC
ZR X4,GTC2 IF NO ESCAPE CODE
SX4 X4-EC2
SB5 70 OFFSET FOR 76 ESCAPE CODE
ZR X4,GTC1 IF ESCAPE CODE 76
SB5 63 OFFSET FOR 74 ESCAPE CODE
GTC1 SA4 A4+B5
BX2 X3
MX4 -NBIC
BX2 -X4*X2 SET CHARACTER WITHOUT ESCAPE CODE
GTC2 SB5 X2+
SA4 A4+B5 GET *6/12* OR *NORMAL* CHAR ATTRIBUTE
MX2 30
BX4 X2*X4 SET ATTRIBUTE
LX4 30
EQ GTCX RETURN
GTC3 MX2 -7
BX2 -X2*X3
SB5 X2
SA4 A4+B5 GET 8/12 CHARACTER ATTRIBUTE
MX2 -30
BX4 -X2*X4
EQ GTCX RETURN
GTS SPACE 4,15
** GTS - GET SEPARATOR.
*
* ENTRY ((A3)) = (X3) = CHARACTER PRECEDING SEPARATOR.
*
* EXIT ((A3)) = (X3) = SEPARATOR RIGHT JUSTIFIED.
* (X0) = 0, IF SEPARATOR NOT FOUND.
* .NE. 0, IF SEPARATOR FOUND.
*
* USES X - 0, 1, 3, 4.
* A - 3, 4.
*
* CALLS GTC.
GTS SUBR ENTRY/EXIT
SX1 SEPA GET MASK FOR SEPARATOR
SX0 B0+
GTS1 RJ GTC GET NEXT CHARACTER
ZR X4,GTSX IF NO MORE CHARACTERS, RETURN
BX0 X1*X4
NZ X0,GTSX IF CHARACTER A SEPARATOR, RETURN
SA4 BLNK
BX0 X4-X3
ZR X0,GTS1 IF CHARACTER IS A BLANK
GTS2 SA3 A3-B1
SX0 B0 SEPARATOR NOT FOUND
EQ GTSX RETURN
STORAGE EJECT PRESET WORKING STORAGE
** PRESET WORKING STORAGE.
ADRF CON 0 ADDRESS OF CURRENT FUNCTION IN TABLE
BLOCK BSS MXWL BLOCK OF CHARACTERS READ FROM COMMAND LINE
C BSS 0
CLB= FILEB CLBF,INSZ
CLBF BSS INSZ
CNVRT CON 0 CONVERT ASCII TO NORMAL FLAG
COPT CON 0 CONTROL STATMENT OPTIONS
CSCS CON 0 CHARACTER SET FROM COMMAND
LINE CON 0 LINE FROM DEFINED VERB TABLE BEING WORKED
LROP CON 0 LOW VALUE IN ORDERED PAIR IN RANGE TABLE
LCIV CON 0 NUMBER OF CHARACTERS IN VERB
LCIP CON 0
STRD CON 0 STRING DELIMITER
SUCC CON 0 SUCCESSFUL FUNCTION FLAG, ZERO IF YES
TATC EJECT ATTRIBUTE TABLE
** TABLE OF ATTRIBUTES FOR CHARACTERS.
TATC BSS 0 NORMAL ASCII ASCII8
DAC I,,CHAA,I,,CHAA CL 00 NUL 000
DAC ,01,LETA,I,,CHAA UC A 01 UC A SOH 001
DAC ,02,LETA,I,,CHAA UC B 02 UC B STX 002
DAC ,03,LETA,I,,CHAA UC C 03 UC C ETX 003
DAC ,04,LETA,I,,CHAA UC D 04 UC D EOT 004
DAC ,05,LETA,I,,CHAA UC E 05 UC E ENQ 005
DAC ,06,LETA,I,,CHAA UC F 06 UC F ACK 006
DAC ,07,LETA,I,,CHAA UC G 07 UC G BEL 007
DAC ,10,LETA,I,,CHAA UC H 10 UC H BS 010
DAC ,11,LETA,I,,CHAA UC I 11 UC I HT 011
DAC ,12,LETA,I,,CHAA UC J 12 UC J LF 012
DAC ,13,LETA,I,,CHAA UC K 13 UC K VT 013
DAC ,14,LETA,I,,CHAA UC L 14 UC L FF 014
DAC ,15,LETA,I,,CHAA UC M 15 UC M CR 015
DAC ,16,LETA,I,,CHAA UC N 16 UC N SO 016
DAC ,17,LETA,I,,CHAA UC O 17 UC O SI 017
DAC ,20,LETA,I,,CHAA UC P 20 UC P DLE 020
DAC ,21,LETA,I,,CHAA UC Q 21 UC Q DC1 021
DAC ,22,LETA,I,,CHAA UC R 22 UC R DC2 022
DAC ,23,LETA,I,,CHAA UC S 23 UC S DC3 023
DAC ,24,LETA,I,,CHAA UC T 24 UC T DC4 024
DAC ,25,LETA,I,,CHAA UC U 25 UC U NAK 025
DAC ,26,LETA,I,,CHAA UC V 26 UC V SYN 026
DAC ,27,LETA,I,,CHAA UC W 27 UC W ETB 027
DAC ,30,LETA,I,,CHAA UC X 30 UC X CAN 030
DAC ,31,LETA,I,,CHAA UC Y 31 UC Y EM 031
DAC ,32,LETA,I,,CHAA UC Z 32 UC Z SUB 032
DAC ,33,DIGA,I,,CHAA 0 33 0 ESC 033
DAC ,34,DIGA,I,,CHAA 1 34 1 FS 034
DAC ,35,DIGA,I,,CHAA 2 35 2 GS 035
DAC ,36,DIGA,I,,CHAA 3 36 3 RS 036
DAC ,37,DIGA,I,,CHAA 4 37 4 US 037
DAC ,40,DIGA,,55,CHAA 5 40 5 SP 040
DAC ,41,DIGA,,66,SEDE 6 41 6 EX 041
DAC ,42,DIGA,,64,SEDE 7 42 7 DQ 042
DAC ,43,DIGA,,60,SEDE 8 43 8 NM 043
DAC ,44,DIGA,,53,CHAA 9 44 9 DS 044
DAC ,45,SEDE,,63,SEDE PL 45 PL PC 045
DAC ,46,SEDE,,67,SEDE MI 46 MI AM 046
DAC ,47,CHAA,,70,SEDE AS 47 AS AP 047
DAC ,50,SEDE,,51,SEDE SL 50 SL OP 050
DAC ,51,SEDE,,52,TERA OP 51 OP CP 051
DAC ,52,TERA,,47,CHAA CP 52 CP AS 052
DAC ,53,CHAA,,45,SEDE DS 53 DS PL 053
DAC ,54,SEDE,,56,SEDE EQ 54 EQ CM 054
DAC ,55,CHAA,,46,SEDE SP 55 SP MI 055
DAC ,56,SEDE,,57,TERA CM 56 CM PD 056
DAC ,57,TERA,,50,SEDE PD 57 PD SL 057
DAC ,60,SEDE,,33,DIGA NM 60 NM 0 060
DAC ,61,SEDE,,34,DIGA OB 61 OB 1 061
DAC ,62,SEDE,,35,DIGA CB 62 CB 2 062
DAC ,63,SEDE,,36,DIGA PC 63 PC 3 063
DAC ,64,SEDE,,37,DIGA DQ 64 DQ 4 064
DAC ,65,SEDE,,40,DIGA UL 65 UL 5 065
DAC ,66,SEDE,,41,DIGA EX 66 EX 6 066
DAC ,67,SEDE,,42,DIGA AM 67 AM 7 067
DAC ,70,SEDE,,43,DIGA AP 70 AP 8 070
DAC ,71,SEDE,,44,DIGA QM 71 QM 9 071
DAC ,72,SEDE,,00,CHAA LT 72 LT CL 072
DAC ,73,SEDE,,77,SEDE GT 73 GT SC 073
DAC I,,CHAA,,72,SEDE AT 74 LT 074
DAC ,75,SEDE,,54,SEDE RVS 75 RVS EQ 075
DAC I,,CHAA,,73,SEDE CF 76 GT 076
DAC ,77,SEDE,,71,SEDE SC 77 SC QM 077
DAC ,74,CHAA,,74,CHAA 7401 AT AT 100
DAC ,76,CHAA,,01,LETA 7402 CF UC A 101
DAC ,,,,02,LETA UC B 102
DAC ,00,CHAA,,03,LETA 7404 CL UC C 103
DAC ,,,,04,LETA UC D 104
DAC ,,,,05,LETA UC E 105
DAC I,,CHAA,,06,LETA 7407 GV UC F 106
DAC ,01,LETA,,07,LETA 7601 LC A UC G 107
DAC ,02,LETA,,10,LETA 7602 LC B UC H 110
DAC ,03,LETA,,11,LETA 7603 LC C UC I 111
DAC ,04,LETA,,12,LETA 7604 LC D UC J 112
DAC ,05,LETA,,13,LETA 7605 LC E UC K 113
DAC ,06,LETA,,14,LETA 7606 LC F UC L 114
DAC ,07,LETA,,15,LETA 7607 LC G UC M 115
DAC ,10,LETA,,16,LETA 7610 LC H UC N 116
DAC ,11,LETA,,17,LETA 7611 LC I UC O 117
DAC ,12,LETA,,20,LETA 7612 LC J UC P 120
DAC ,13,LETA,,21,LETA 7613 LC K UC Q 121
DAC ,14,LETA,,22,LETA 7614 LC L UC R 122
DAC ,15,LETA,,23,LETA 7615 LC M UC S 123
DAC ,16,LETA,,24,LETA 7616 LC N UC T 124
DAC ,17,LETA,,25,LETA 7617 LC O UC U 125
DAC ,20,LETA,,26,LETA 7620 LC P UC V 126
DAC ,21,LETA,,27,LETA 7621 LC Q UC W 127
DAC ,22,LETA,,30,LETA 7622 LC R UC X 130
DAC ,23,LETA,,31,LETA 7623 LC S UC Y 131
DAC ,24,LETA,,32,LETA 7624 LC T UC Z 132
DAC ,25,LETA,,61,SEDE 7625 LC U OB 133
DAC ,26,LETA,,75,SEDE 7626 LC V RVS 134
DAC ,27,LETA,,62,SEDE 7627 LC W CB 135
DAC ,30,LETA,,76,CHAA 7630 LC X CF 136
DAC ,31,LETA,,65,SEDE 7631 LC Y UL 137
DAC ,32,LETA,I,,CHAA 7632 LC Z GV 140
DAC I,,CHAA,,01,LETA 7633 LB LC A 141
DAC I,,CHAA,,02,LETA 7634 VL LC B 142
DAC I,,CHAA,,03,LETA 7635 RB LC C 143
DAC I,,CHAA,,04,LETA 7636 TL LC D 144
DAC I,,CHAA,,05,LETA 7637 BRK LC E 145
DAC I,,CHAA,,06,LETA 7640 NUL LC F 146
DAC I,,CHAA,,07,LETA 7641 SOH LC G 147
DAC I,,CHAA,,10,LETA 7642 STX LC H 150
DAC I,,CHAA,,11,LETA 7643 ETX LC I 151
DAC I,,CHAA,,12,LETA 7644 EOT LC J 152
DAC I,,CHAA,,13,LETA 7645 ENQ LC K 153
DAC I,,CHAA,,14,LETA 7646 ACK LC L 154
DAC I,,CHAA,,15,LETA 7647 BEL LC M 155
DAC I,,CHAA,,16,LETA 7650 BS LC N 156
DAC I,,CHAA,,17,LETA 7651 HT LC O 157
DAC I,,CHAA,,20,LETA 7652 LF LC P 160
DAC I,,CHAA,,21,LETA 7653 VT LC Q 161
DAC I,,CHAA,,22,LETA 7654 FF LC R 162
DAC I,,CHAA,,23,LETA 7655 CR LC S 163
DAC I,,CHAA,,24,LETA 7656 SO LC T 164
DAC I,,CHAA,,25,LETA 7657 SI LC U 165
DAC I,,CHAA,,26,LETA 7660 DLE LC V 166
DAC I,,CHAA,,27,LETA 7661 DC1 LC W 167
DAC I,,CHAA,,30,LETA 7662 DC2 LC X 170
DAC I,,CHAA,,31,LETA 7663 DC3 LC Y 171
DAC I,,CHAA,,32,LETA 7664 DC4 LC Z 172
DAC I,,CHAA,I,,CHAA 7665 NAK LB 173
DAC I,,CHAA,I,,CHAA 7666 SYN VL 174
DAC I,,CHAA,I,,CHAA 7667 ETB RB 175
DAC I,,CHAA,I,,CHAA 7670 CAN TL 176
DAC I,,CHAA,I,,CHAA 7671 EM BRK 177
DAC I,,CHAA 7672 SUB
DAC I,,CHAA 7673 ESC
DAC I,,CHAA 7674 FS
DAC I,,CHAA 7675 GS
DAC I,,CHAA 7676 RS
DAC I,,CHAA 7677 US
TDVB SPACE 4,10
** TDVB - TABLE OF DEFINED VERBS.
*
* THIS TABLE DEFINES ALL THE LEGAL VERBS FOR *IEDIT*.
* EACH OF THESE LEGAL VERBS EXIST IN ALL ALLOWED FORMS
* (I.E. ALL VERBS WITH ABBREVIATIONS HAVE THOSE ABBREVIATIONS
* INCLUDED IN THE TABLE.)
* THIS TABLE ALSO CONTAINS THE PROCESSES ASSOCIATED WITH
* EACH VERB. THE ADDRESS OF THAT PROCESS AND WHETHER IT IS
* REQUIRED FOR THAT PROCESS BE CALLED IN ORDER FOR THE
* RESPECTIVE VERB TO BE LEGAL.
TDVB BSS 0
LOC 0
VERB ALTER,*,((GLS,O),(GSP,R)),FNAL
VERB DELETE,*,((GLS,R),(GSS,O),(,A),(GSS,R)),FNDE
VERB DUP,,((GSR,R),(GLI,R),(GIN,O),(,A),(GSR,R),(GLI,O)),FNDU
VERB LIST,*,((GLS,O),(GSS,O)),FNLI
VERB LNH,,((GLS,O),(GSS,O)),FNLI
VERB READ,*,((GFN,R),(GLI,R),(GIN,O),(,A),(GFN,R),(GLI,O)),FNRE
VERB MOVE,*,((GSR,R),(GLI,R),(GIN,O),(,A),(GSR,R),(GLI,O)),FNMO
VERB WRITE,,((GFN,R),(GLS,O),(GSS,O)),FNWR
VERB WRITEN,,((GFN,R),(GLS,O),(GSS,O)),FNWN
VERB
LOC *O
** PRESET COMMON DECKS.
*CALL COMCARG
SPACE 4,10
MINSZ EQU *
OVLDEF OVLY,PBR,1,(BASIC RESEQUENCING ROUTINES.)
SPACE 4,5
PBR SPACE 4,15
** PBR - PERFORM *BASIC* RESEQUENCING.
*
* EXIT *BASIC* RESEQUENCING COMPLETED.
*
* USES X - 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
* B - 2.
*
* CALLS PEF, PNL, POL, SLN, SSF.
*
* MACROS READEI, REWIND, WRITER.
PBR SUBR ENTRY/EXIT
SX6 L
SA6 LBFET
SA1 NTL SAVE NUMBER OF TRUNCATED LINES
BX6 X1
MX1 42
SA6 PBRA
SA3 LBFILE
NZ X3,PBR1 IF WRITTEN TO DISK
SA5 E SET EOI STATUS IN FET *E*
SX6 741031B
BX6 -X1*X6
BX5 X1*X5
BX6 X5+X6
SA6 A5
EQ PBR2 PROCESS NON-OVERLAPPED LINES
PBR1 REWIND E,R REWIND FILE CONTAINING SELECTED LINES
READEI X2
PBR2 SA5 NNOL NUMBER OF NON-OVERLAPPED LINES
RJ PNL PROCESS NON-OVERLAPPED LINES
SA1 FNUM GET FUNCTION NUMBER
SA2 OVLPFG
SX1 X1-FNMO
NZ X2,PBR3 IF OVERLAPPED LINES
ZR X1,PBR4 IF A *MOVE* COMMAND
WRITER L FLUSH I/O BUFFER
EQ PBR8 CHECK IF TRUNCATED LINE COUNT HAS CHANGED
PBR3 RJ POL PROCESS OVERLAPPED LINES
PBR4 SA1 FNUM GET FUNCTION NUMBER
SA2 LRT GET FIRST *LRT* ENTRY
SX1 X1-FNMO
SA5 OLLE GET OVERLAPPED LINE RANGE TABLE ENTRY
SX6 B1 SET NUMBER OF *LRT* ENTRIES TO ONE
NZ X1,PBR6 IF NOT A *MOVE* COMMAND
MX1 1
SA3 OVLPFG
ZR X3,PBR7 IF NO OVERLAPPED LINES
IX3 X5-X2 ASSURE SORTED LINE RANGE TABLE
SX6 B1+B1 SET NUMBER OF *LRT* ENTRIES TO TWO
PL X3,PBR5 IF *LRT* WILL BE IN ASCENDING ORDER
BX3 X2 EXCHANGE *LRT* ENTRIES
BX2 X5
BX5 X3
PBR5 BX7 -X1*X2
SA7 A2 STORE *LRT* ENTRY
SA2 A2+B1
PBR6 SA6 NELR STORE NUMBER OF *LRT* ENTRIES
BX7 X5
SA7 A2 STORE *LRT* ENTRY
PBR7 SA5 EFN PUT EDIT FILE NAME INTO FET *E*
SX2 E
RJ SLN SET LOCAL FILE NAME
REWIND X2,R
READEI X2
RJ PEF PROCESS ENTIRE EDIT FILE
PBR8 SA1 NTL
SA2 PBRA
IX1 X1-X2
SX6 B1+ SET *WRITTEN TO DISK* FLAG FOR FET *L*
SA6 LBFILE
ZR X1,PBRX IF TRUNCATED LINE COUNT NEVER CHANGED
WRITER TRNCFET FLUSH TRNCFET I/O BUFFER
SB2 X2 SORT TRUNCATED LINES
RJ SSF SORT SELECTED FILE
SA6 NTL STORE NEW TRUNCATED LINE COUNT
EQ PBRX RETURN
PBRA CON 0 STORAGE FOR TRUNCATED LINE COUNT
PEF SPACE 4,15
** PEF - PROCESS EDIT FILE.
*
* ENTRY FET *E* REWOUND AND READ INTO I/O BUFFER.
*
* EXIT BASIC LINE PROCESSING PERFORMED, SELECTED LINES
* WRITTEN TO FET *L*, FET *L* SORTED IF NECESSARY.
*
* USES X - 0, 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
* B - 2, 3, 4, 6, 7.
*
* CALLS ABL, BLP, CLN, PLB, SSF, USB, WTL.
*
* MACROS READC, WRITEC, WRITER.
PEF SUBR ENTRY/EXIT
PEF1 READC E,PCKDBF,MXWL+1 READ LINE FROM FET *E*
NZ X1,PEF5 IF EOI ON FET *E*
MX0 -12
BX7 -X0*X4
SA7 PEFA SET *CLEAR OUT PARTIAL LINE* FLAG
SA5 PCKDBF
RJ CLN CHECK IF LINE NUMBER IN LINE RANGE TABLE
NZ X4,PEF3 IF LINE IS NOT TO BE PROCESSED
SA6 PEFD SAVE BINARY LINE NUMBER
SA7 PEFE SAVE NUMBER OF CHARACTERS IN LINE NUMBER
SB2 PCKDBF
SA1 CSTI CHARACTER SET
SB6 MXCIL+1
SB3 X1
RJ USB UNPACK STRING BUFFER
SA1 F.LNTBUF FWA OF *LNT*
SA2 NMLS NUMBER OF *LNT* ENTRIES
SA5 LTFILE
SX3 B0+
ZR X5,PEF2 IF *LNT* IS NOT WRITTEN TO DISK
SA3 LTFET FET ADDRESS
PEF2 SA5 PEFE RESEQUENCE ONE *BASIC* COMMAND
IX2 X2+X1
SB2 B7+B1
SB7 X5+CLIN
SX5 B1+
SX6 CLIN+MXCIL
RJ BLP
ZR X2,PEF3 IF NO RESEQUENCING TOOK PLACE
SA2 PEFA GET PARTIAL LINE FLAG
BX6 X2+X1
SA6 PEFC IF TRUNCATED BY READ IN OR BY *BLP*
SX7 B1
SA7 PEFB SET SORT FET *L* FLAG
SX7 B7-CLIN ADD BLANKS TO LINE
SA2 PEFE
SA7 NCOL SAVE NUMBER OF CHARACTERS
RJ ABL
SB4 X7+ NUMBER OF CHARACTERS NOW IN LINE
SA1 PCKDBF PACK LINE INTO BUFFER
SA2 CLIN
SB2 60
RJ PLB
WRITEC L,PCKDBF WRITE CHANGED LINE TO FET *L*
SA2 PEFC CHECK IF TRUNCATED BY READ OR BY *BLP*
ZR X2,PEF1 IF LINE NOT TRUNCATED
SA1 PEFD WRITE TRUNCATED LINE
RJ WTL
PEF3 SA1 PEFA
ZR X1,PEF1 IF NO PARTIAL LINE TO CLEAR OUT
PEF4 READC E,PCKDBF,MXWL+1 THROW AWAY REMAINDER OF LINE
MX0 -12
BX7 -X0*X4
NZ X7,PEF4 IF EOL NOT YET FOUND
EQ PEF1 READ NEXT LINE
PEF5 WRITER L FLUSH I/O BUFFER
SA1 PEFB
ZR X1,PEFX IF NO NEED TO SORT FET *L*
SB2 X2+
RJ SSF SORT SELECTED FILE
EQ PEFX RETURN
PEFA CON 0 PARTIAL LINE FLAG
PEFB CON 0 SORT FET *L* FLAG (CHANGED LINES)
PEFC CON 0 TRUNCATE BY READ OR *BLP* FLAG
PEFD CON 0 BINARY LINE NUMBER
PEFE CON 0 NUMBER OF CHARACTERS IN LINE NUMBER
PLN SPACE 4,15
** PLN - PROCESS LINE.
*
* ENTRY *PCKDBF* HOLDS THE LINE TO BE PROCESSED.
*
* EXIT BASIC LINE PROCESSING PERFORMED, TRUNCATED LINE
* COUNT UPDATED, AND LINE WRITTEN TO FET *L*.
*
* USES X - 1, 2, 3, 5, 7.
* A - 1, 2, 3, 5, 7.
* B - 2, 3, 4, 6, 7.
*
* CALLS ABL, BLP, PLB, USB, VPL, WTL.
*
* MACROS WRITEC.
PLN SUBR ENTRY/EXIT
SB2 PCKDBF UNPACK STRING BUFFER
SA1 CSTI
SB3 X1+
SB6 MXCIL+1
RJ USB
SA1 F.LNTBUF RESEQUENCE ONE *BASIC* COMMAND
SA2 NMLS
SA3 LTFET
IX2 X2+X1
SB2 B7+B1
SB7 CLIN+NUMD
SX6 CLIN+MXCIL
SA5 LTFILE
NZ X5,PLN1 IF *LNT* IS WRITTEN TO DISK
SX3 B0
SX5 B1 SET SORTED *LNT*
PLN1 RJ BLP *BASIC* LINE PROCESSOR
ZR X2,PLN3 IF LINE WAS NOT RESEQUENCED
SX7 B7-CLIN
SA7 NCOL
ZR X1,PLN2 IF LINE WAS NOT TRUNCATED
SA5 PCKDBF EVALUATE PACKED LINE NUMBER
RJ VPL
BX1 X6 WRITE TRUNCATED LINE NUMBER
RJ WTL
PLN2 SX2 NUMD ADD BLANKS TO LINE
RJ ABL
SB4 X7+ PACK LINE INTO BUFFER
SA1 PCKDBF
SA2 CLIN
SB2 60
RJ PLB
PLN3 WRITEC L,PCKDBF WRITE CHANGED LINE TO *L*
EQ PLNX RETURN
PNL SPACE 4,20
** PNL - PROCESS NON-OVERLAPPED LINES.
*
* ENTRY (X5) = NUMBER OF NON-OVERLAPPED LINES.
*
* EXIT NON-OVERLAPPED LINES PROCESSED.
*
* USES X - 1, 2, 5.
* A - 0, 2.
*
* CALLS PLN.
*
* MACROS READC, WRITEC.
*
* NOTE THE NUMBER OF NON-OVERLAPPED LINES IS HELD IN (A0)
* DURING THE LOOP AT *PNL2* SINCE *BLP* USES ALL
* REGISTERS EXCEPT (A0) AND (A5).
PNL2 READC E,PCKDBF READ LINE FROM FET *E*
RJ PLN PROCESS LINE
SA0 A0-B1 DECREMENT NON-OVERLAPPED LINE COUNT
SX1 A0
NZ X1,PNL2 IF MORE NON-OVERLAPPED LINES
PNL SUBR ENTRY/EXIT
SA0 X5+ SAVE NUMBER OF NON-OVERLAPPED LINES
SA2 UNRF
ZR X2,PNL2 IF NOT AN UNNUMBERED *READ* FILE
PNL1 READC E,PCKDBF READ LINE FROM FET *E*
WRITEC L,PCKDBF WRITE LINE TO FET *L*
SX5 X5-1
NZ X5,PNL1 IF MORE NON-OVERLAPPED LINES
EQ PNLX RETURN
POL SPACE 4,10
** POL - PROCESS OVERLAPPED LINES.
*
* ENTRY (X1) = 0, IF A *MOVE* FUNCTION.
* = NONZERO, OTHERWISE.
*
* EXIT OVERLAPPED LINES PROCESSED.
*
* CALLS PLN, RNE.
*
* MACROS READC.
POL SUBR ENTRY/EXIT
ZR X1,POL1 IF A *MOVE* COMMAND
RJ RNE REMOVE NON - OVERLAPPED *LNT* ENTRIES
POL1 READC E,PCKDBF READ LINE FROM FET *E*
NZ X1,POLX IF EOR ON FET *E*
RJ PLN PROCESS LINE
EQ POL1 READ NEXT LINE
RNE SPACE 4,15
** RNE - REMOVE NON-OVERLAP *LNT* ENTRIES.
*
* *RNE* REMOVES ALL ENTRIES IN THE LINE NUMBER TABLE
* WHICH DO NOT HAVE THE OVERLAP BIT SET.
*
* ENTRY (LTFILE) = 0, IF THE *LNT* IS BUFFER RESIDENT.
* 1, IF THE *LNT* IS MASS STORAGE RESIDENT.
*
* EXIT *LNT* UPDATED.
*
* USES X - 0, 1, 2, 6, 7.
* A - 1, 2, 6, 7.
* B - 7.
*
* MACROS READEI, READO, REWIND, WRITEO, WRITER.
RNE SUBR ENTRY/EXIT
SA1 LTFILE
NZ X1,RNE3 IF *LNT* RESIDES ON MASS STORAGE
SA1 F.LNTBUF
SA2 NMLS
SX0 B1
LX0 FOVL-0 SET UP OVERLAP BIT MASK
SB7 X1 FWA OF TABLE
SA1 X1 GET FIRST ENTRY
RNE1 BX6 X0*X1
ZR X6,RNE2 IF OVERLAP BIT NOT SET
BX6 X1
SA6 B7+ STORE OVERLAP *LNT* ENTRY
SB7 B7+1
RNE2 SA1 A1+1
SX2 X2-1
NZ X2,RNE1 IF MORE ENTRIES TO PROCESS
SA1 F.LNTBUF
SX6 B7
IX6 X6-X1
SA6 NMLS UPDATE NUMBER OF *LNT* ENTRIES
EQ RNEX RETURN
RNE3 SA2 LT2FET
REWIND X2,R REWIND THE SCRATCH FILE
SA2 LTFET
REWIND X2,R
READEI X2 PREPARE THE *LNT* FILE
SX0 B1
LX0 FOVL-0 SET MASK FOR THE TRUNCATE BIT
SA1 LTFET
SA2 LT2FET REVERSE THE FILE NAMES
BX6 X1
BX7 X2
SA7 A1+
SA6 A2+
RNE4 SA2 LT2FET
READO X2 GET NEXT ENTRY
NZ X1,RNE5 IF NO MORE ENTRIES TO PROCESS
BX2 X0*X6
ZR X2,RNE4 IF NOT AN OVERLAP ENTRY
SA2 LTFET
WRITEO X2 ADD THE OVERLAP ENTRY TO THE NEW *LNT*
EQ RNE4 PROCESS NEXT ENTRY
RNE5 SA2 LTFET
WRITER X2 FLUSH THE *LNT* TO THE FILE
EQ RNEX RETURN
LIST X
*CALL COMCBLP
TTL IEDIT - IN-LINE EDITOR.
MEM2 EQU * MANAGED TABLES START ADDRESS
QUAL MAKE *MEML* A GLOBAL SYMBOL
* DEFINITION OF MEML IS CHANGED DURING PRESET TO MATCH
* ACTUAL OVERLAY SIZES AND UTILIZATION. THE *ERRNG* CHECKS
* ARE FOR THE WORST POSSIBLE CASES.
MEM2 EQU /IEDIT1/MEM2
MEML EQU MEM
MFL= EQU 17400B
SSM= EQU 0
ERRNG MEM-MEM2
ERRNG MFL=-MEM-BUFL
ERRNG MFL=-MEM-BUFL2
ERRNG MFL=-MEM2-BUFL
ERRNG MFL=-MINSZ
END