cdc:nos2.source:opl871:iedit
Table of Contents
IEDIT
Table Of Contents
- [00010] IEDIT - IN-LINE EDITOR.
- [00142] MACRO DEFINITIONS.
- [00144] DAC - DECLARE ATTRIBUTES FOR CHARACTER POSITION.
- [00200] FIELD - DEFINE FIELDS.
- [00232] MXB - MASK WITH B REGISTER
- [00255] OVLDEF - DEFINE IEDIT OVERLAY.
- [00278] VERB - DECLARE VERB.
- [00388] DSUB - DECLARE SUBROUTINE (HELPER MACRO).
- [00425] COMMON DECKS.
- [00431] WORKING STORAGE.
- [00578] TABLES.
- [00664] MAIN PROGRAM.
- [00666] IED - MAIN LOOP OF PROGRAM.
- [00778] FUNCTION PROCESSORS.
- [00780] MRD - *MOVE*, *READ*, AND *DUP* FUNCTION PROCESSOR.
- [00845] SUBROUTINES.
- [00847] ABL - ADD BLANKS TO LINE.
- [00893] ABS - ALLOCATE BUFFER SPACE.
- [00964] AEC - APPEND AND ECHO CHANGE RECORD.
- [01044] CBO - COPY BUFFER TO OUTPUT.
- [01091] CBR - CALL *BASIC* RESEQUENCER.
- [01119] CLN - CHECK IF LINE NUMBER IS IN LINE RANGE TABLE.
- [01160] CNL - CONVERT AND NORMALIZE LINE NUMBER.
- [01180] ERT - ECHO RECORD TO TERMINAL.
- [01223] ERR - ERROR PROCESSOR.
- [01249] FATAL ERRORS - ERRORS WHICH WHEN ENCOUNTERED CAUSE *IEDIT*
- [01273] INFORMATIVE MESSAGES - ISSUED TO NOTIFY THE USER OF AN
- [01281] MLB - MANAGE LINE BUFFER.
- [01365] PIT - PROCESS TERMINAL INTERRUPT.
- [01430] PLB - PACK LINE INTO A BUFFER.
- [01498] RAF - RECALL ALL FETS.
- [01514] RSF - REWIND/RETURN SCRATCH FILES.
- [01566] SBE - SET BUFFER EMPTY.
- [01592] SFI - SET FET INFORMATION.
- [01633] SFP - SET FET POINTERS.
- [01681] SLN - SET LOCAL FILE NAME.
- [01704] SSF - SORT SELECTED FILE.
- [01773] TOV - TABLE OVERFLOW.
- [01793] VPL - EVALUATE PACKED LINE NUMBER.
- [01867] WTL - WRITE TRUNCATED LINE.
- [01893] WTO - WRITE DATA TO OUTPUT.
- [01928] COMMON DECKS.
- [01955] OVERLAYABLE FUNCTION PROCESSORS.
- [01957] PSC - PROCESS SEQUENTIAL COMMANDS.
- [02269] OVERLAYABLE SUBROUTINES.
- [02271] CSL - CHANGE STRING IN LINE.
- [02347] FSL - FIND STRING IN LINE.
- [02390] ICE - INDEXED CODE EXECUTION.
- [02406] MLT - MANAGE LINE NUMBER TABLE.
- [02463] PLO - PROCESS LINE OVERLAP.
- [02642] PWN - PROCESS *WRITEN*.
- [02681] RLN - REPLACE LINE NUMBER.
- [02949] SLF - SELECT LINES FROM FILE.
- [03087] SLE - SORT *LNT* ENTRIES.
- [03125] SLT - SORT LINE NUMBER TABLE.
- [03173] SMT - SORT AND MERGE LINE NUMBER TABLE.
- [03267] MEMORY ALLOCATION.
- [03270] PRESET.
- [03272] PRS - PRESET ARGUMENT PROCESSING.
- [03520] PVA - PROCESS VERB ARGUMENTS.
- [03620] GFN - GET FILE NAME.
- [03670] GIN - GET INCREMENT.
- [03705] GLI - GET LINE NUMBER TO INSERT TEXT AFTER.
- [03739] GLS - GET LINES.
- [03765] GSP - GET STRING PAIR.
- [03809] GSR - GET SINGLE RANGE OF LINE NUMBERS.
- [03831] GSS - GET STRING FOR SEARCH.
- [03857] FVT - FIND VERB IN TABLE.
- [03902] GCS - GET CHARACTER STRING FOR SEARCH.
- [03943] GLN - GET LINE NUMBER.
- [03992] GLR - GET LINE RANGE.
- [04066] GTB - GET BLOCK.
- [04162] GTC - GET CHARACTER AND ATTRIBUTE.
- [04223] GTS - GET SEPARATOR.
- [04408] TDVB - TABLE OF DEFINED VERBS.
- [04443] PBR - PERFORM *BASIC* RESEQUENCING.
- [04527] PEF - PROCESS EDIT FILE.
- [04613] PLN - PROCESS LINE.
- [04665] PNL - PROCESS NON-OVERLAPPED LINES.
- [04699] POL - PROCESS OVERLAPPED LINES.
- [04719] RNE - REMOVE NON-OVERLAP *LNT* ENTRIES.
Source Code
- IEDIT.txt
- 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
cdc/nos2.source/opl871/iedit.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator