cdc:nos2.source:opl871:xedit
Table of Contents
XEDIT
Table Of Contents
- [00008] XEDIT - EXTENDED INTERACTIVE TEXT EDITOR.
- [00198] MACROS AND COMMON DECKS.
- [00207] CHAR - SET UP CALL TO *CHAR=* MACRO TO PRESET CHARACTERS.
- [00234] CHAR= - FORM ENTRY INTO CHARACTER REPLACEMENT TABLE.
- [00259] COMMAND - DEFINE AN XEDIT COMMAND TABLE ENTRY.
- [00318] DEVICE - DEFINE INPUT DEVICE.
- [00350] ERRMSG - DEFINE XEDIT ERROR MESSAGES.
- [00439] ERROR - ISSUE ERROR MESSAGE.
- [00464] FERROR - ISSUE FILE ERROR MESSAGE.
- [00494] HEREL - ASSEMBLE AND LIST REMOTE TEXT.
- [00509] MHELP - ASSEMBLE HELP COMMAND DIRECTORY.
- [00590] OVLDEF - DEFINE XEDIT OVERLAY
- [00631] PARAM - DEFINE PARAMETER SYMBOL FOR COMMAND MACRO.
- [00648] PREFIX - DEFINE PREFIX CHARACTERS.
- [00693] SPECIAL - DEFINE SPECIAL COMMANDS (1 CHARACTER).
- [00741] FETS AND BUFFERS (CODED AND STRING).
- [00828] STORAGE ALLOCATION.
- [00897] SPCP - SPECIFIED PARAMETERS.
- [00946] TABLES AND MESSAGES.
- [01009] COMMAND PARSER - MAIN LOOP.
- [01011] NCM - GET NEXT COMMAND.
- [01276] PRM - COMMAND PARAMETER CRACKER.
- [01727] PST - POST COMMAND PROCESSOR.
- [01800] NER - COMMAND PARSER ERROR PROCESSOR.
- [01826] PREFIX CHARACTER ROUTINES.
- [01832] X - TOGGLE VERIFICATION.
- [01849] + - GET DATA INPUT FROM NEW INPUT LINES.
- [01866] / - SKIP TO A NEW LINE.
- [01891] UP ARROW - GO TO TOP OF FILE BEFORE PROCESSING.
- [01919] SPECIAL COMMAND FORMS.
- [01924] - - EXECUTE LAST Y OR Z COMMAND.
- [01971] . - EXECUTE LAST COMMAND.
- [01989] NCL - OBTAIN NEXT COMMAND LINE AND PUT INTO *C.STR*.
- [02111] COMMAND TABLE.
- [02202] COMMAND PROCESSORS.
- [02208] ABO - PROCESS ABORT COMMAND.
- [02233] ADD - ADD TEXT TO END OF LINE(S).
- [02292] BTR - ADVANCE TO BOTTOM OF CURRENT RECORD.
- [02328] CNG/CNS - PROCESS CHANGE AND CHANGES COMMANDS.
- [02402] DEL - SET DELIMITER CHARACTER.
- [02436] DLT - DELETE LINE(S).
- [02468] DRF - DELETE RECORD/FILE MARKS.
- [02494] PEC - PROCESS EDIT COMMAND.
- [02512] EFQ - END, FILE, AND QUIT PROCESSOR.
- [02708] FLL - FIND LONG LINE PROCESSOR.
- [02737] FLN - ADVANCE TO SPECIFIED LINE NUMBER.
- [02757] IIB - *INSERT* AND *INSERT BEFORE* PROCESSOR.
- [02813] INP - ENTRY INPUT MODE REQUEST.
- [02875] LCT - LOCATE SPECIFIED STRING.
- [02940] MOD - MODIFY LINE(S).
- [02995] NXT - PROCESS NEXT COMMAND.
- [03017] PNT - PRINT COMMAND PROCESSOR.
- [03052] RLP - *REPLACE* PROCESSOR.
- [03087] RMA - PROCESS RIGHT MARGIN COMMAND.
- [03112] SWN - SET WINDOWS.
- [03147] RST - RESTORE FILE TO PREVIOUS CONDITION.
- [03168] SCH - SET CHARACTER IN WORD.
- [03188] SFG - SET FLAG.
- [03215] STB - SET TABS.
- [03254] TGL - PROCESS TOGGLES.
- [03277] TRN - TRUNCATE COMMAND.
- [03313] TTN - TOP AND TOPNULL PROCESSOR.
- [03337] WHR - PROCESS WHERE COMMAND.
- [03363] WRM - WRITE RECORD MARK.
- [03385] YZP - Y/Z COMMAND PROCESSOR.
- [03431] SUBROUTINES.
- [03433] ABT - ABORT XEDIT.
- [03453] ASF - ANALYZE STRING FIELDS.
- [03592] BTL - ISSUE *BAD TEXT LINE ENCOUNTERED* MESSAGE.
- [03607] CER - COMMAND ERROR PROCESSOR.
- [03650] CFF - COPY FAST FILE.
- [03756] CHS - CHANGE STRING(S).
- [03887] ETL - ECHO TEXT LINE.
- [03942] EXT - EXIT XEDIT.
- [04005] GFN - GET FILE NAME.
- [04106] GLN - GET LINE NUMBER (ADVANCE TO IT).
- [04239] ICH - INITIALIZE CHARACTERS.
- [04270] IEM - ISSUE EXPLAIN ERROR MESSAGE.
- [04300] IFM - ISSUE FILE MESSAGE.
- [04361] ITM - ISSUE TRUNCATION MESSAGE.
- [04386] PCN - PRINT COLUMN NUMBERS.
- [04406] ERD - PROCESS END OF FILE READ.
- [04508] LOC - LOCATE STRING SPECIFIED.
- [04639] LOCA - LOCC - LOCATE DEFINITION CELLS.
- [04662] LST - LOCATE STRING IN EDIT LINE.
- [04744] MDY - PROCESS MODIFY DIRECTIVES.
- [04876] MPR - MOVE POINTER.
- [04914] RDF - READ EDIT FILE LINE.
- [05205] RTA - CONVERT 160K1 TO C FORMAT (MAX 33 WORDS).
- [05271] RTB - REMOVE TRAILING BLANKS FROM A CODED LINE.
- [05392] SAC - SET ASCII MODE LINE AND READS.
- [05424] SCD - SET CODED LINE.
- [05451] STL - PROCESS TLX INTERRUPTS.
- [05479] STK - STACK INPUT DEVICES.
- [05543] TAB - TAB INPUT LINE ACCORDING TO TAB SETTINGS.
- [05602] TCD - TABULATE CODED DATA LINE.
- [05629] TLB - TRANSFER DATA LINE TO *E.LINE* BUFFER.
- [05653] TOP - MOVE POINTER TO TOP OF FILE.
- [05740] TSL - TRIM SPACES OFF LINE (STRING BUFFER).
- [05767] UPL - UNPACK LINE TO ASCII BUFFER.
- [05875] VAL - EVALUATE NUMERIC STRING.
- [05931] VIS - VOID INSTRUCTION STACK.
- [05940] VRT - VERIFY LINE AND RETURN TO *NCM*.
- [05954] VRY - VERIFY XEDIT OPERATIONS.
- [05985] WTF - WRITE EDIT LINE.
- [06049] SPECIAL PURPOSE SUBROUTINES.
- [06051] LCB - LOAD CIRCULAR BUFFER.
- [06129] RDX - READ EXIT.
- [06199] PRESET AND BUFFER ALLOCATION.
- [06210] PRF - PRESET EDIT FILE.
- [06471] PRS - PRESET XEDIT AND BEGIN EXECUTION.
- [06785] MACROS LOCAL TO OVERLAY.
- [06787] ENDHELP - CLOSE EXPLAIN ENTRY.
- [06805] EXPP - DEFINE PRIMARY EXPLAIN ENTRY.
- [06832] EXPS - DEFINE SECONDARY EXPLAIN ENTRY TEXT.
- [06856] EXP - PROCESS EXPLAIN COMMAND.
- [07108] EMI - FILE FUNCTION INCORRECT SECONDARY EXPLANATIONS.
- [07218] HELP - PROCESS XEDIT HELP COMMAND.
- [07513] HTI - *HELP* COMMAND TELEX INTERRUPT PROCESSOR.
- [07560] LOCAL FETS AND STORAGE.
- [07564] COMMAND PROCESSORS.
- [07566] CPY - COPY/COPYD PROCESSORS.
- [07664] DLB - DELETE LEADING BLANKS.
- [07730] LTB - LIST TAB SETTINGS.
- [07800] NBL - CHANGE ERROR MESSAGES TO CONTAIN NO BELLS.
- [07825] OCT - PROCESS OCTCHANGE COMMAND.
- [07981] PBL - PROCESS BAD LINE COMMANDS.
- [08022] PLN - PROCESS LINE NUMBER COMMANDS.
- [08164] RDP - READ/READP PROCESSOR.
- [08287] SUBROUTINE LOCAL TO OVERLAY.
- [08289] GAF - GET/ATTACH FILE.
- [08321] RCP - RESET COMMAND PARAMETERS.
- [08345] SCP - SET COMMAND PARAMETERS.
- [08372] LOCAL COMMON DECKS AND BUFFERS.
Source Code
- XEDIT.txt
- IDENT XEDIT,111B,XEDIT,0,0
- ABS
- ENTRY XEDIT
- ENTRY RFL=
- SST IR
- SYSCOM B1
- LIST F
- TITLE XEDIT - EXTENDED INTERACTIVE TEXT EDITOR.
- *COMMENT XEDIT - EXTENDED INTERACTIVE TEXT EDITOR.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- XEDIT SPACE 4,10
- ***** XEDIT - EXTENDED INTERACTIVE TEXT EDITOR.
- * D. W. MEARS 72/08/01.
- * W. C. WELLS 76/04/29.
- * REVISED 77/04/01.
- * B.C. ANTIN 79/03/09.
- *
- * XEDIT IS AN INTERACTIVE TEXT EDITOR CAPABLE OF CREATING
- * AND MODIFYING A TEXT FILE QUICKLY, EASILY, AND ACCURATELY.
- SPACE 4,10
- *** XEDIT IS AN INTERACTIVE TEXT EDITOR CAPABLE OF CREATING
- * AND MODIFYING A TEXT FILE QUICKLY EASILY AND ACCURATELY.
- SPACE 4,10
- *** XEDIT COMMAND CALL.
- *
- * XEDIT,EDITFIL,OPTIONS.
- *
- * WHERE EDITFIL IS THE FILE TO BE EDITED. IF THE EDITFIL IS
- * NOT SPECIFIED, THE PRIMARY FILE IS USED. IF NO PRIMARY IS
- * FOUND, XEDIT WILL USE *TAPE1*.
- *
- * THE OPTIONS ARE -
- *
- * OPTION DESCRIPTION/ACTION
- * ------ ------------------
- *
- * AS TURNS ON ASCII PROCESSING. ASCII IS DEFAULT IF THE
- * TERMINAL IS IN ASCII MODE. IF IT IS NOT IN ASCII,
- * THIS PARAMETER WILL TURN ON ASCII FOR XEDIT ONLY.
- *
- * B DENOTES BATCH PROCESSING. THIS PARAMETER IS ASSUMED
- * FOR NON-TELEX ORIGIN JOBS.
- *
- * C DENOTES CREATION MODE. THE USER, IN THIS MODE, CAN
- * CREATE A TEXT FILE FROM AN EMPTY FILE.
- *
- * DB DEBUG. INHIBITS INTERRUPT CONTROL.
- *
- * FR INSTRUCTS XEDIT TO SCAN THE FIRST LINE OF THE XEDIT
- * EDIT FILE FOR THE INITIAL COMMAND. XEDIT ASSUMES
- * THAT THE COMMAND BEGINS WITH THE FIRST NON-BLANK
- * CHARACTER WHICH OCCURS AFTER 2 CONSECUTIVE BLANKS.
- * THIS FEATURE ALLOWS THE COMMAND TO BE PLACED INTO A
- * COMMENT STRING IN MOST LANGUAGES.
- * NOTE- ONLY ONE COMMAND IS ALLOWED. MULTIPLE COMMANDS
- * ARE ALLOWED VIA THE Y/Z COMMANDS. ALSO, THIS COMMAND
- * IS EXECUTED BEFORE ANY COMMANDS FOLLOWING THE
- * TERMINATOR ON THE *XEDIT* COMMAND.
- *
- * LK DENOTES LOOK MODE. IN LOOK MODE, THE EDIT
- * FILE CAN BE EXAMINED, BUT NOT MODIFIED.
- *
- * NH NO HEADER, CANCELS THE ISSUEING OF THE XEDIT VERSION
- * MESSAGE.
- *
- * P CAUSES EDITFIL TO BE RETRIEVED FROM THE PERMANENT
- * FILE CATALOG.
- *
- * I=IFN CAUSES XEDIT TO READ INPUT DIRECTIVES FROM FILE IFN.
- *
- * L=LFN CAUSES NORMAL XEDIT PRINTOUT TO BE PLACED ON FILE
- * LFN INSTEAD OF BEING PRINTED AT THE TERMINAL.
- *
- * DEFAULTS FOR THE PARAMETERS DEPEND ON ORIGIN TYPE.
- * FOR TELEX ORIGIN, XEDIT ASSUMES THE FOLLOWING:
- * *AS* PARAMETER IS SET (DEPENDING ON CHARACTER SET).
- * FOR BATCH ORIGIN
- * *B* PARAMETER IS SET. TO PROCESS ASCII FILES, USE THE
- * *AS* PARAMETER.
- *
- * THE SPECIAL INPUT PROMPT OF A DOUBLE QUESTION MARK WILL BE
- * ISSUED ONLY IF BOTH THE INPUT AND OUTPUT FILES ARE ASSIGNED
- * AS TYPE *TT*.
- *
- * THE FIRST LINES OF INPUT TO XEDIT MAY BE SPECIFIED ON
- * THE XEDIT COMMAND. TO DO THIS, FOLLOW THE TERMINATOR OF THE
- * COMMAND WITH A DELIMITER AND THE LINES OF INPUT SEPARATED BY
- * THE SAME DELIMITER CHARACTER.
- SPACE 4
- ** CONDITIONAL ASSEMBLY OPTIONS.
- *
- * SYMBOL FUNCTION
- * ------ --------
- *
- * CYBRNET ASSEMBLES A MODIFIED XEDIT FOR USE BY CYBERNET.
- *
- * DEBUG IF = 1, ASSEMBLE VARIOUS PIECES OF DEBUGGING CODE.
- * IF = 0, DO NOT ASSEMBLE DEBUG CODE.
- *
- * FILEOV DETERMINES WHERE THE OVERLAYS WILL BE LOADED FROM.
- * IF = 0, THEN LOAD OVERLAYS FROM LOCAL FILE. FILE
- * NAME IS CONTAINED IN *ACTR*.
- * IF = 1, THEN LOAD OVERLAYS FROM THE SYSTEM.
- *
- * TIMES ASSEMBLES TIMING CODE. THIS CODE ISSUES THE
- * ELSAPED TIME BETWEEN ENTRIES INTO THE COMMAND
- * PARSER. THE IS GIVEN IN THOUSANDTHS OF SECONDS
- * AND SHOULD BE ASSEMBLED ONLY WITH KRONOS LEVEL 10+
- * OR NOS.
- DEBUG SET 0 NO DEBUG
- FILEOV SET 1 LOAD OVERLAYS FROM SYSTEM
- CYBRNET SET 0 CYBERNET VERSION
- * END OF CONDITIONAL ASSEMBLY OPTIONS.
- SPACE 4,10
- ** REGISTER CONVENTIONS.
- *
- * IN GENERAL, THE FOLLOWING REGISTERS CAN BE ASSUMED TO
- * CONTAIN SPECIFIC INFORMATION, OR ARE AVAILABLE UNDER THE
- * DESCRIBED CIRCUMSTANCES.
- *
- * A5, X5 = DURING THE PARSING OF THE CURRENT COMMAND, THESE
- * REGISTERS POINT/CONTAIN THE CURRENT CHARACTER UNDER
- * INVESTIGATION. A NEGATIVE WORD INDICATES AN END
- * OF COMMAND. THIS CONVENTION FORCES ALL ROUTINES
- * CALLED BY THE PARSER TO AVOID USING THESE
- * REGISTERS. A PARTIAL LIST OF THE SUBROUTINES
- * AFFECTED ARE -
- * *TOP*, *RDF*, *WTF*, *UPL*, *RTOA*.
- * ANY ROUTINE WHOSE PARAMETERS ARE COMPLETELY PARSED
- * WITHIN THE COMMAND ROUTINE CAN USE THESE REGISTERS.
- * THEY SHOULD NOT BE USED BY ANY SUBROUTINES.
- *
- * A0 = SCRATCH REGISTER. ANY COMMAND PROCESSOR CAN USE THIS
- * FOR SCRATCH PURPOSES. SUBROUTINES ARE NOT
- * TO USE A0.
- *
- * B1 = 1.
- SPACE 4,10
- ** FLAG CONVENTIONS.
- *
- * -A FLAG OR TOGGLE IS *ON* IF THE FLAG/TOGGLE IS NEGATIVE.
- *
- * -A FLAG OR TOGGLE IS *TRUE* IF THE FLAG/TOGGLE IS NEGATIVE.
- *
- * -THE FOLLOWING MATRIX HOLDS FOR THE VARIOUS COMBINATIONS OF
- * E.CMODE AND E.LMOD WITH REGARD TO E.LINE AND E.STR.
- *
- * . E.CMODE = 0 . E.CMODE = 1
- * *----------------------------*----------------------------*
- * E.LMOD=0 . E.LINE = CORRECT LINE IMAGE. E.LINE = CORRECT LINE IMAGE.
- * . E.STR = GARBAGE . E.STR = CORRECT LINE IMAGE.
- * . . (EITHER CAN BE USED SAFELY).
- * *----------------------------*----------------------------*
- * E.LMOD=1 . THIS CONDITION IS UNDEFINED. E.LINE = GARBAGE .
- * . --NEVER-- DEFINE IT . E.STR = CORRECT LINE IMAGE.
- * . . .
- * *----------------------------*----------------------------*
- *
- * THUS, IF E.LMOD = 0, THE CODED LINE CAN BE WRITTEN.
- * IF E.CMODE = 1, THE LINE IS UNPACKED TO THE STRING BUFFER.
- * IF E.CMODE = 1 AND E.LMOD = 1 THEN THE LINE *MUST* BE
- * REPACKED BEFORE USING (E.LMOD IS THEN SET TO 0).
- SPACE 4,10
- ** END OF LINE/STRING CONVENTIONS.
- *
- * WITHIN XEDIT, THERE ARE SEVERAL NOTATIONS USED TO DENOTE THE
- * END OF A LINE, STRING, ETC.. TO AVOID CONFUSION, THE
- * FOLLOWING IS THE DIFFERENCES BETWEEN THE REPRESENTATIONS.
- *
- * A TRUE END OF LINE CONSISTS OF A MASK OF 2 BITS (ALWAYS)
- *
- * AN END OF STRING IS DENOTED BY THE CHARACTER ORED WITH A
- * MASK OF 1 BIT.
- *
- * THIS METHOD ALLOWS THE USER TO ALWAYS SET BIT 59 IF HE WANTS
- * AN END OF LINE, AND YET TELL THE TWO FORMS APART WHEN ONE
- * HAS TO RESET THE PSEUDO END OF LINE.
- SPACE 4,10
- *** ASSEMBLY CONSTANTS.
- BUFAL EQU 1401B SCRATCH FILE BUFFER LENGTH
- BUFBL EQU 1401B SECOND SCRATCH BUFFER LENGTH
- BUFCL EQU 201B ALTERNATE INPUT BUFFER LENGTH
- BUFDL EQU 201B COPY BUFFER LENGTH
- BUFIL EQU 101B INPUT BUFFER LENGTH
- BUFOL EQU 301B OUTPUT BUFFER LENGTH
- BUFRL EQU 501B READ BUFFER LENGTH (LOCAL TO OVL2)
- MINWD EQU 10D MINIMUM LINE WIDTH
- MAXWD EQU 160D MAXIMUM LINE WIDTH
- M.ASCII EQU 1 ASCII MODE SETTING
- M.CODED EQU 0 CODED MODE SETTING
- NTABS EQU 8 NUMBER OF AVAILABLE TAB STOPS
- VERSION MICRO 1,,$XEDIT 3.1.00$
- ORG 111B
- TITLE MACROS AND COMMON DECKS.
- * COMMON DECKS.
- *CALL COMCMAC
- *CALL COMSPFM
- *CALL COMSLFD
- CHAR SPACE 4,15
- ** CHAR - SET UP CALL TO *CHAR=* MACRO TO PRESET CHARACTERS.
- *
- * CHAR A,B
- *
- * ENTRY *A* = INSTRUCTION IN WHICH SUBSTITUTION WILL OCCUR.
- * *B* = CHARACTER MNEMONIC TO SUBSTITUTE.
- * THE REPLACEMENT IS DONE WITH BOOLEAN OR, THUS THE
- * INVERSE CHARACTER VALUE CAN BE OBTAINED BY SETTING UP
- * A NEGATIVE FIELD.
- *
- * EXIT INSTRUCTION *A* IS ENTERED.
- * AN ENTRY IS MADE IN THE CHARACTER REPLACEMENT TABLE.
- NOREF .CH1,.CH2
- PURGMAC CHAR
- CHAR MACRO A,B
- A
- .CH1 SET *P
- IFGT .CH1,59,3
- .CH1 SET 0
- .CH2 SET *-1
- SKIP 1
- .CH2 SET *
- CHAR= .CH1,.CH2,B
- ENDM CHAR
- CHAR= SPACE 4,10
- ** CHAR= - FORM ENTRY INTO CHARACTER REPLACEMENT TABLE.
- *
- *
- * CHAR= A,B,C
- * ENTRY *A* = LEFT SHIFT COUNT TO POSITION CHARACTER.
- * *B* = WORD TO REPLACE INTO.
- * *C* = ADDRESS OF DESIRED CHARACTER REPLACEMENT WORD.
- *
- * EXIT AN ENTRY IS MADE IN CHARACTER REPLACEMENT TABLE.
- PURGMAC CHAR=
- CHAR= MACRO A,B,C
- USE SETCHAR
- VFD 12/A+2000B,30/B,18/C
- USE *
- ENDM CHAR=
- * INITIALIZE SETCHAR USE BLOCK.
- USE SETCHAR
- CHARSET BSS 0
- USE *
- COMMAND SPACE 4,20
- ** COMMAND - DEFINE AN XEDIT COMMAND TABLE ENTRY.
- *
- * ID COMMAND LONG,SHORT,PARMS,MOD,ADDR,SPECIAL,OVRL
- *
- * ENTRY *ID* = XEDIT COMMAND IDENTIFIER.
- * *LONG* = LONG FORM OF COMMAND.
- * *SHORT* = SHORT FORM OF COMMAND.
- * *PARMS* = SPECIFIED PARAMETER CRACKING.
- * *ADDR* = JUMP ADDRESS FOR ROUTINE.
- * *MOD* = OPTIONAL MODIFIER FIELD.
- * *OVL* = OVERLAY NEEDED TO EXECUTE COMMAND, IF NEEDED.
- * *SPECIAL* = REPEATING PARAMETER WHOSE ARGUMENTS ARE -
- * *CR* = COMMAND VALID IN CREATION MODE.
- * *F0* = NUMBER PARAMETER MUST BE FORCED
- * ZERO, IF COMMAND IS EXECUTED IN *INPUT
- * MODE.
- * *LK* = COMMAND VALID ON LOOK MODE.
- * *IN* = COMMAND VALID IN INPUT MODE.
- *
- * EXIT COMMAND TABLE ENTRY IS DEFINED.
- MXOVL SET 0 SET NUMBER OF OVERLAYS
- PURGMAC COMMAND
- MACRO COMMAND,NM,LONG,SHORT,PARMS,MOD,ADDR,SPL,OVRL
- IFC NE,$SHORT$$,1
- IRP SHORT
- DATA 0L_SHORT
- IRP
- IFC NE,$LONG$$,2
- DATA 0L_LONG
- MHELP LONG,SHORT
- C.A SET PARMS 0
- IRP SPL
- POS /OPTS/SPL+1
- VFD 1/1
- IRP
- POS 60
- .. IFC NE,$OVRL$$
- C.D MICRO 4,4,$_OVRL_$
- VFD 2/2,10/-OVL
- POS 36
- VFD 18/NM-1,18/"C.D"
- CMD_"C.D" RMT
- QUAL
- NM BSS 0
- QUAL *
- COMMAND (),(),PARMS,MOD,ADDR,(_SPL_)
- RMT
- . IFGT "C.D",MXOVL,1
- MXOVL SET "C.D"
- .. ELSE
- NM VFD 2/2,10/-C.A
- POS 36
- VFD 18/MOD,18/ADDR
- .. ENDIF
- ENDM COMMAND
- DEVICE SPACE 4,20
- ** DEVICE - DEFINE INPUT DEVICE.
- *
- *
- *N DEVICE FET,ACTIVE,CMDPOP
- *
- * ENTRY *N* = 1 CHARACTER SYMBOL FOR NAME OF DEVICE.
- * *FET* = ADDRESS OF FET ASSOCIATED WITH DEVICE,
- * IF ONE EXISTS.
- * *ACTIVE* = DEVICE IS ACTIVE (SET ONLY ON *I* DEVICE).
- * *CMDPOP* = POP STACK IF READ REQUIRED FOR NEXT
- * COMMAND, ELSE READ LINE IF FOR DATA.
- *
- * EXIT N.LINE = FWA OF CODED LINE BUFFER FOR DEVICE.
- * N.DEV = ADDRESS OF DEVICE DEFINITION FOR
- * ROUTINE, *STK*.
- * A DEVICE DEFINITION BLOCK IS GENERATED.
- PURGMAC DEVICE
- MACRO DEVICE,N,FET,ACTIVE,CMDPOP
- N_.LINE BSSZ 33D
- IFC NE,$CMDPOP$$,1
- VFD 1/1
- VFD *P/FET
- N_.DEV BSS 0
- IFC EQ,$ACTIVE$$,2
- CON -1
- SKIP 1
- CON 0
- VFD 1/0,11/0,30/,18/-1
- ENDM DEVICE
- ERRMSG SPACE 4,25
- ** ERRMSG - DEFINE XEDIT ERROR MESSAGES.
- *
- *
- *NAME ERRMSG BELLS,TEXT
- *
- * ENTRY *NAME* = THE NAME OF THE ERROR MESSAGE.
- * *BELLS* = THE NUMBER OF BELLS TO ISSUE BEFORE
- * THE MESSAGE.
- * *TEXT* = THE TEXT OF THE MESSAGE.
- *
- * THIS MACRO GENERATES A TABLE OF POINTERS TO THE ERROR
- * MESSAGES (FOR USE BY *EXPLAIN*). THE TEXT OF THE MESSAGES
- * IS PUT INTO REMOTE BLOCK *ERRMSG*. THIS BLOCK IS ASSUMED TO
- * BE ASSEMBLED IMMEDIATELY AFTER THE MACRO CALLS. A SIMILIAR
- * BLOCK IS MADE FOR USE BY THE *NOBELLS* COMMAND. THIS BLOCK
- * CONTAINS THE ERROR MESSAGES BUT WITHOUT THE BELLS IN THEM.
- * (THIS TABLE IS IN REMOTE BLOCK *ERROVL*)
- * IN ADDITION, THE *NO BELLS* TABLE IS ALSO DUPLICATED IN
- * ANOTHER REMOTE BLOCK CALLED *ERRPRS*. THIS BLOCK IS
- * DESIGNED TO BE ASSEMBLED IN THE PRESET CODE. THIS ALLOWS
- * BATCH ORIGIN OUTPUT TO LOOK NICE BY REMOVING ALL THE
- * BELL SYMBOLS AND CONTROL BYTES. A LEADING BLANK IS ADDED.
- PURGMAC ERRMSG
- MACRO ERRMSG,NAME,BELLS,TEXT
- LOCAL Y
- ... IFC NE,^_TEXT_^^
- .. IFC NE,$NAME$$,1
- NAME BSS 0
- CON Y
- ERRMSG RMT
- .C MICRO 1,,^_TEXT_^
- .F MICCNT .C
- .B SET BELLS*2
- .B SET .A-.B
- .C MICRO 1,.B,^_TEXT_^
- .D MICRO .B+1,,^_TEXT_^
- Y BSS 0
- . IFC NE,$NAME$$,1
- VFD 12/0011B
- DUP BELLS,1
- CHAR (VFD 12/0),BL.
- .. IFLE .F+2,.B,4
- .E DECMIC .F
- .F SET .F*6
- VFD .F/_".E"_H_".C"_,*P/
- .. SKIP 3
- .E DECMIC .B
- VFD *P/_".E"_H_".C"
- DATA C^_".D"_^
- RMT
- .. IFC NE,$NAME$$,6
- ERROVL RMT
- ERRMSG 0,(_TEXT_)
- RMT
- ERRPRS RMT
- ERRMSG 0,( TEXT_)
- RMT
- ... ELSE
- .. IFC NE,^NAME^^,10
- ERROVL RMT
- LOC ERRBASE
- ERRMSG
- LOC *O
- RMT
- ERRPRS RMT
- LOC ERRBASE
- ERRMSG
- LOC *O
- RMT
- ERRMSG HERE
- ... ENDIF
- ENDM ERRMSG
- * PRESET REMOTE BLOCKS.
- ERRMSG RMT
- .A SET 8
- RMT
- ERROVL RMT
- .A SET 10
- CON ERR KLUDGE FOR PFM
- RMT
- ERRPRS RMT
- .A SET 10
- CON ERR KLUDGE FOR PFM
- RMT
- ERROR SPACE 4,15
- ** ERROR - ISSUE ERROR MESSAGE.
- *
- *
- * ERROR PRIMARY,SECONDARY
- *
- * ENTRY *PRIMARY* = PRIMARY MESSAGE ORDINAL.
- * *SECONDARY* = SECONDARY MESSAGE ORDINAL.
- *
- * EXIT THE SPECIFIED ERROR MESSAGE IS ISSUED.
- * (EXPLAIN) = NEW EXPLAIN ENTRY.
- *
- * USES B - 2.
- *
- * CALLS IEM.
- PURGMAC ERROR
- ERROR MACRO PRI,SEC
- IFC EQ,$SEC$$,2
- R= B2,PRI
- SKIP 1
- R= B2,PRI*100B+SEC
- RJ IEM
- ENDM ERROR
- FERROR SPACE 4,20
- ** FERROR - ISSUE FILE ERROR MESSAGE.
- *
- *
- * FERROR NAME,PRIMARY,SECONDARY
- *
- * ENTRY *NAME* = FILE NAME.
- * *PRIMARY* = PRIMARY MESSAGE ORDINAL.
- * *SECONDARY* = SECONDARY MESSAGE ORDINAL.
- * FILE MESSAGES CANNOT CONTAIN BELLS.
- *
- * EXIT SPECIFIED ERROR MESSAGE IS ISSUED.
- * (EXPLAIN) = NEW EXPLAIN ENTRY.
- *
- * USES A - 1.
- * X - 1.
- * B - 2.
- *
- * CALLS IFM.
- PURGMAC FERROR
- FERROR MACRO NAME,PRI,SEC
- IFC EQ,$SEC$$,2
- R= B2,PRI
- SKIP 1
- R= B2,PRI*100B+SEC
- R= A1,NAME
- RJ IFM
- ENDM FERROR
- HEREL SPACE 4,10
- ** HEREL - ASSEMBLE AND LIST REMOTE TEXT.
- *
- *
- * HEREL
- *
- * EXIT REMOTE TEXT IS ASSEMBLED AND LISTED.
- PURGMAC HEREL
- MACRO HEREL,NAME
- LIST G
- ;A HERE
- LIST *
- ENDM HEREL
- MHELP SPACE 4,15
- ** MHELP - ASSEMBLE HELP COMMAND DIRECTORY.
- *
- *
- * MHELP A,B.
- *
- * ENTRY *A* = LONG FORM OF THE COMMAND.
- * *B* = SHORT FORM OF THE COMMAND. IF NULL, NO
- * ENTRY IS MADE.
- *
- * NOTES MHELP ASSEMBLES THE HELP COMMAND DIRECTORY USED BY
- * THE HELP COMMAND. THIS MACRO PLACES THE INFORMATION
- * IN THE REMOTE BLOCK, *HELP*, FOR ASSEMBLY IN THE HELP
- * OVERLAY.
- PURGMAC MHELP
- MHELP MACRO A,B
- LOCAL MH5
- IFEQ MH2,3,6
- MH5 MICRO 1,,$"MH1"$
- HELP RMT
- DATA C$"MH5"$
- RMT
- MH1 MICRO 1,2,$ $
- MH2 SET 0
- . IFNE MH2,2
- MH3 MICRO 1,12,$_A_ $
- MH4 MICRO 1,9,$ $
- IFC NE,$B$$,1
- MH4 MICRO 1,9,$[_B_] $
- . ELSE
- IFC NE,$B$$,3
- MH3 MICRO 1,12,$_A_ $
- MH4 MICRO 1,,$[_B_]$
- SKIP 2
- MH3 MICRO 1,,$_A_$
- MH4 MICRO 1,1,$ $
- . ENDIF
- MH1 MICRO 1,,$"MH1"_"MH3"_"MH4"_$
- MH2 SET MH2+1
- ENDM MHELP
- NOREF MH2
- MH1 MICRO 1,1,$ $
- MH2 SET 0
- OVERLAY SPACE 4,15
- *** OVERLAY - LOAD OVERLAY.
- *
- *
- * OVERLAY NAME,LEVEL,SYSTEM,FWA
- * ENTRY *NAME* = ADDRESS OF FILE NAME IN *L* FORMAT.
- * *LEVEL* = OVERLAY LEVEL.
- * *SYSTEM* IF SPECIFIED, OVERLAY WILL BE LOADED FROM
- * SYSTEM LIBRARY, AND (NAME) = NAME OF
- * OVERLAY.
- * *FWA* IF SPECIFIED = ADDRESS AT WHICH OVERLAY WILL
- * BE LOADED.
- * EXIT (X1) = OVERLAY ENTRY ADDRESS.
- * CALLS OVL=.
- PURGMAC OVERLAY
- OVERLAY MACRO N,L,S,F
- LOCAL A
- A SET 0
- IFC NE,$S$$,1
- A SET 1
- IFC NE,$L$$
- SX6 L
- LX6 6
- SX6 X6+A
- ELSE 1
- SX6 A
- R= X2,F
- IFC NE,$N$X1$,1
- SA1 N
- RJ =XOVL=
- ENDM OVERLAY
- OVLDEF SPACE 4
- ** OVLDEF - DEFINE XEDIT OVERLAY
- *
- *ADDR OVLDEF LEVEL,ADDR
- *
- * ADDR = LOAD ADDRESS IF NOT FWAOVL
- * LEVEL = LEVEL OF OVERLAY
- * TITLE = TITLE OF OVERLAY
- * PRESET= SET IF THIS OVERLAY HAS SPECIAL PRESET CODE.
- * IF SO, PRESET CODE SHOULD BE A SUBROUTINE ENTITLED
- * *PRS* (WILL BE RETURNED JUMPED TO).
- PURGMAC OVLDEF
- MACRO OVLDEF,ADDR,LVL,TEXT,PRESET
- QUAL XEDIT_LVL
- TTL XEDIT_LVL - TEXT
- TITLE
- IFC EQ,$ADDR$$,2
- IDENT XEDIT_LVL,FWAOVL,XEDIT_LVL,LVL,0
- SKIP 1
- IDENT XEDIT_LVL,ADDR,XEDIT_LVL,LVL,0
- *COMMENT XEDIT - TEXT
- IFC EQ,$ADDR$$,2
- ORG FWAOVL
- SKIP 1
- ORG ADDR
- NOREF .A,.B,.F,C.A,C.B,C.C,MH2
- CMD_LVL HERE
- QUAL
- XEDIT_LVL BSS 0 DEFINE PRESET ENTRY POINT
- QUAL *
- SA1 CHARSET
- RJ ICH
- IFC NE,$PRESET$$,1
- RJ PRS
- EQ PRM39
- USE SETCHAR
- CHARSET BSS 0
- USE *
- ENDM OVLDEF
- PARAM SPACE 4,10
- ** PARAM - DEFINE PARAMETER SYMBOL FOR COMMAND MACRO.
- *
- *
- *LABEL PARAM NAME
- *
- * ENTRY *LABEL* = REGULAR LABEL FIELD.
- * *NAME* = NAME FOR COMMAND MACRO. THIS BECOMES
- * *LABEL-PRM*.
- PURGMAC PARAM
- MACRO PARAM,LABEL,NAME
- ;A BSS 0
- ;B EQU ;A-PRM.
- ENDM PARAM
- PREFIX SPACE 4,15
- ** PREFIX - DEFINE PREFIX CHARACTERS.
- *
- *
- * PREFIX CHARS
- *
- * ENTRY *CHARS* = PREFIX CHARACTER TO BE DEFINED.
- * IF ALPHABETIC, MACRO WILL GENERATE BOTH AN
- * UPPER AND LOWER CASE ENTRY.
- * IF THE PARAMETER CONTAINS MORE THAT 1 CHARACTERS, THE
- * MACRO WILL ASSUME THAT THE CHARACTER NEEDS TO BE
- * PRESET AND WILL GENERATE THE PROPER CODE.
- *
- * EXIT PREFIX TABLE IS PUT IN REMOTE BLOCK *PREFIX*.
- PURGMAC PREFIX
- PREFIX MACRO CHARS
- LOCAL A,B
- A BSS 0
- B MICRO 1,,Z_CHARS_Z
- C MICCNT B
- . IFPL C-2
- PREFIX RMT
- VFD 42/A
- CHAR (VFD 18/0),CHARS
- RMT
- HELPSP RMT
- CHAR (VFD 6/0),CHARS
- VFD 30/5H*****
- CHAR (VFD 18/0),(//_CHARS)
- VFD 6/0
- RMT
- . ELSE
- PREFIX RMT
- VFD 42/A,18/1R_CHARS
- IFLE 1R_CHARS,26D,1
- VFD 42/A,12/76B,6/1R_CHARS
- RMT
- HELPSP RMT
- VFD 6/1R_CHARS,30/5H*****,18/1R_CHARS,6/0
- VFD 6/1R_CHARS,30/5H*****,12/76B,6/1R_CHARS,6/0
- RMT
- . ENDIF
- ENDM PREFIX
- SPECIAL SPACE 4,10
- ** SPECIAL - DEFINE SPECIAL COMMANDS (1 CHARACTER).
- *
- *
- * SPECIAL CHARS
- *
- * ENTRY *CHARS* = SPECIAL COMMAND CHARACTER.
- * IF THE PARAMETER CONTAINS MORE THAN 1 CHARACTER, THE
- * MACRO WILL ASSUME THAT THE CHARACTER NEEDS TO BE
- * PRESET AND WILL GENERATE THE PROPER PRESET CODE.
- * A SPECIAL COMMAND CANNOT BE ALPHABETIC.
- PURGMAC SPECIAL
- SPECIAL MACRO CHARS
- LOCAL A,B
- A BSS 0
- B MICRO 1,,Z_CHARS_Z
- C MICCNT B
- . IFPL C-2
- SPECIAL RMT
- VFD 42/A
- CHAR (VFD 18/0),CHARS
- RMT
- HELPSP RMT
- CHAR (VFD 6/0),CHARS
- CHAR (VFD 48/0),(//_CHARS)
- VFD 6/0
- RMT
- . ELSE
- SPECIAL RMT
- VFD 42/A,18/1R_CHARS
- IFLE 1R_CHARS,26D,1
- 1 ERR INCORRECT TO HAVE SPECIAL COMMAND BE ALPHABETIC.
- RMT
- HELPSP RMT
- VFD 6/1R_CHARS,48/1R_CHARS,6/0
- RMT
- . ENDIF
- ENDM SPECIAL
- SPACE 4
- ** INITIALIZE -HELPSP- REMOTE BLOCK.
- *
- HELPSP RMT
- VFD 36/6H*****A,18/1RA,6/0 A POSTFIX
- VFD 36/6H*****W,18/1RW,6/0 W POSTFIX
- RMT
- TITLE FETS AND BUFFERS (CODED AND STRING).
- * FETS
- CFET BSS 0 COPY FET FOR *CFF*
- SFET BSS 0 SCRATCH FET FOR STATUS MACRO
- PFET BSS 0 SCRATCH FET FOR PFM ROUTINES
- FT BSS 0 SCRATCH FET FOR PFM ROUTINES
- CON 1
- VFD 12/,6/4,18/50,6/7,18/BUFB
- CON BUFB FET USED BY *CFF* FOR FAST COPIES
- CON BUFB OUT
- CON BUFB+BUFBL MUST AGREE WITH INCOMING EDIT FILE
- VFD 60/
- VFD 60/
- VFD 60/
- VFD 60/ PFN
- VFD 60/ USER NAME
- VFD 42/ PASSWORD
- VFD 18/ERR ERROR ADDRESS
- VFD 60/ CONTROL WORD
- FFET BSS 0 ADDRESS OF FIRST ACTUAL FET
- * ALL FETS UNTIL LFET MUST BE 7 WORDS LONG
- FTI BSS 0
- INPUT FILEC BUFI,BUFIL,FET=7 INPUT FET
- FTO BSS 0
- OUTPUT FILEC BUFO,BUFOL,FET=7 OUTPUT FET
- FTD BSS 0
- SCRD FILEC BUFD,BUFDL,FET=7 COPY FET
- * RFET FILEC RBUF,BUFRL,ERP,FET=7 FET IN OVERLAY (OVL2)
- E.IN BSS 0
- FTB BSS 0
- SCRB FILEC BUFB,BUFBL,FET=7,EPR INCOMING EDIT FILE
- E.OUT BSS 0
- FTA BSS 0
- SCRA FILEC BUFA,BUFAL,FET=7,EPR OUTGOING EDIT FILE
- LFET BSS 0 ADDRESS OF LAST FET + 7
- * INPUT DEVICE DEFINITIONS.
- I DEVICE INPUT,ON MAIN INPUT DEVICE
- P DEVICE PREVIOUS COMMAND BUFFER
- S DEVICE INPUT,,POP SPECIAL INPUT MODE ESCAPE
- Y DEVICE Y/Z COMMAND BUFFER
- PURGMAC DEVICE VOID USAGE OF MACRO
- * OTHER CODED BUFFERS.
- D.LINE BSSZ 33D DATA LINE BUFFER
- E.LINE BSSZ 33D EDIT LINE BUFFER
- * BUFFERS (STRING)
- VFD 12/2000B,30/0,18/-1 CHAR POINTER AND DELIMITER
- C.STR VFD 2/3,*P/ END OF LINE MARKER
- BSSZ MAXWD-1 COMMAND STRING BUFFER
- VFD 2/3,*P/ END OF LINE MARKER
- DATA 0 LINE WIDTH
- D.STR BSSZ MAXWD DATA STRING BUFFER
- D.STRL EQU *-D.STR DATA STRING BUFFER LENGTH
- VFD 2/3,*P/ END OF LINE MARKER
- DATA 0 LINE WIDTH
- E.STR BSSZ MAXWD EDIT LINE BUFFER
- VFD 2/3,*P/ END OF LINE MARKER
- BSSZ 1 SCRATCH CELL FOR LOCATES
- * NOTE- THIS ARRAY CONTAINS PART OF XEDIT PRESET CODE.
- * CURRENT LINE WIDTH ENDS AT THE LAST NON-BLANK CHARACTER.
- DATA 0 CURRENT LINE WIDTH
- E.SCR BSSZ MAXWD SCRATCH BUFFER (MUST BE AFTER E.STR)
- VFD 2/3,*P/ END OF LINE MARKER
- BSSZ 1 SCRATCH CELL FOR LOCATE
- TITLE STORAGE ALLOCATION.
- * STRING FIELD POINTERS - MAINTAIN ORDER.
- P1LP DATA 0 STRING FIELD PARAMETERS
- P1RP DATA 0 PLEASE MAINTAIN ORDER
- P2LP DATA 0
- P2RP DATA 0
- P3LP DATA 0
- P3RP DATA 0
- * EDIT LINE MODE CONTROL - PLEASE MAINTAIN ORDER.
- E.NMODE DATA 0 EDIT - NEEDED MODE FOR LINE
- E.CMODE DATA 0 EDIT - CURRENT MODE
- E.LMOD DATA 0 EDIT - LINE MODIFICATION FLAG
- * FILE NAME CELLS.
- COPY DATA 0 NAME OF LAST COPY FILE
- IFN DATA 0 CURRENT FILE NAME PARAMETER
- IRFN DATA 0 FILE TO READ FROM IF FS = .FALSE.
- ISFN DATA 0 STARTING FILE NAME (EDITFIL)
- LFN DATA 0 LOGICAL FILE NAME
- * MARGIN CONTROLS.
- IW BSS 0
- RMARG CON 160 DEFAULT RIGHT MARGIN
- LMW CON E.STR-1 * MAINTAIN ORDER OF NEXT 2
- RMW CON E.STR+160 * WINDOW MARGINS
- RTWD DATA 0 VALUE OF RIGHT WINDOW MARGIN
- * MISCELLANEOUS CELLS.
- AS CON 0 0 = NO ASCII, IF *ASC* THEN RESTORE AT END
- BATCH DATA 0 .LT. 0 IF USER IS *BCOT*
- .EQ. 0 IF USER IS *TXOT*
- .GT. 0 IF USER SELECTED *B* OPTION
- CHARSFT BSSZ 1 SHIFT FOR ICH. SET IN PRESET
- COMMAND DATA 0 COMMAND DESCRIPTOR WORD
- C.ON CON I.DEV POINTER TO CURRENT INPUT DEVICE
- DF CON 0 * MAINTAIN ORDER OF *DF* AND *DR*
- DR CON 0 * (DELETE EOF/EOR COUNTERS)
- ERR BSSZ 5 PFM ERROR MESSAGES
- EXPLAIN VFD 12/2000B,*P/EXPLAIN ERROR MESSAGE POINTERS
- EXTA DATA 0 EXIT MODE FLAG
- FS CON 0 .TRUE. (NEG.) IF READING OFF SCRATCH FILES
- GLOBAL DATA -1 GLOBAL CHARACTER FOR STRING SEARCHES
- LNFLAG DATA -1 NEG. - LINE NUMBER MODE, POS - WHERE MODE
- INDEX DATA 0 ADDRESS OF COMMAND DESCRIPTOR WORD
- INITZ DATA 0 NON-ZERO WHEN PRESET IS COMPLETE
- INPCHAR CON -1 INPUT MODE ESCAPE CHARACTER
- INPMODE CON 1 -1 IF IN INPUT MODE
- ITOGGLF DATA -1 * MAINTAIN ORDER OF *ITOGGLF/ITOGGLR*
- ITOGGLR DATA -1 * (PRINT EOR/EOR MESSAGE FLAGS)
- IWHERE CON 1 LINE COUNTER
- MCOUNT DATA 0 COUNT OF SUCCESSFUL LOCATES (PER CMD)
- NOMOD DATA -1 .TRUE. (NEG) IF NO FILE MODS THIS PASS
- NUMS BSSZ NTABS+1 STORAGE FOR PARAMETERS
- NXTLINE CON 0 OPTIONAL LINE NUMBER VALUE (IN CMDS)
- PREFIX CON 1BS1 COMMAND MODIFIER BITS (SEE BELOW)
- PROMPT CHAR (VFD 6/0),QM. TTY SPECIAL INPUT PROMPT
- CHAR (VFD 6/0),QM.
- VFD 6/55B,18/0001B,24/0 SET NO <CR> CONTROL BYTE
- RC DATA -1 .TRUE. (NEG) IF NO DATA READ (RDF/WTF)
- SCOUNT DATA 0 SLASH PREFIX COUNT
- SKPCNT DATA 0 SKIP COUNT FOR *-* COMMAND
- ** SPCP - SPECIFIED PARAMETERS.
- *T 1/ W, 1/ P, 1/ A, 57/ UNUSED
- *
- * W = 1 - WINDOW WAS SPECIFIED (ON A COMMAND).
- * P = 1 - *P* OPTION SPECIFIED (ON *XEDIT* COMMAND).
- * A = 1 - FILE IS DIRECT ACCESS (ONLY VALID IF *P*
- * OPTION SPECIFIED).
- SPCP DATA 0
- TABCHAR DATA -1 * MAINTAIN ORDER OF TABCHAR/TABS
- TABS CON 11D,18,30D * (TABCHAR AND INITIAL TAB SETTINGS)
- BSSZ NTABS-2 * ZERO REST OF TABS + 1 END MARKER
- TLX CON 0 TELEX INTERRUPT FLAG
- TRIM DATA 0 .LT. 0 IF TRIM OPTION SET
- TTYIN CON 0 .NZ. IF NOT *TTY* INPUT FILE
- TSTATUS BSSZ 2 DATA RETURN FROM *TSTATUS*
- UPDATE DATA -1 NEG. IF UPDATING EDIT FILE
- VERIFY DATA -1 * MAINTAIN ORDER OF VERIFY FLAGS
- XVERIFY DATA -1 * .TRUE. (NEGATIVE) IF VERIFYING
- IF DEF,TIMES,1
- TIMING BSSZ 3
- SPACE 4
- * MISCELLANEOUS MICROS.
- PTFT DECMIC PTFT PRIMARY FILE TYPE
- SPACE 4
- ** DEFINITION OF COMMAND MODIFIER BITS (PREFIX WORD).
- *
- * NOTE- THIS WORD IS ZEROED BEFORE CRACKING ANY COMMAND.
- QUAL PREFIX
- PLUS EQU 1 + PREFIX CHARACTER
- PLUS DECMIC PLUS
- A EQU 2 A POSTFIX CHARACTER
- A DECMIC A
- W EQU 3 W POSTFIX CHARACTER
- W DECMIC W
- QUAL *
- SPACE 4
- ** DEFINITION OF SPECIAL BITS USED IN COMMAND DESCRIPTOR.
- *
- QUAL OPTS
- CR EQU 47D COMMAND LEGAL IN CREATION MODE
- F0 EQU 44D NUMBER FIELD FORCE 0 IN INPUT MODE
- LK EQU 46D COMMAND LEGAL IN LOOK MODE
- IN EQU 45D COMMAND LEGAL IN INPUT MODE
- QUAL *
- TITLE TABLES AND MESSAGES.
- ** CHARACTER SET REPLACEMENT TABLE.
- *T 24/AS, 18/64 C, 18/63 C
- *
- * AS = ASCII 6/12 CHARACTER SET.
- * 64 C = 64 CHARACTER SET.
- * 63 C = 63 CHARACTER SET.
- *
- AM. VFD 24/67B,18/67B,18/67B AMPERSAND
- BL. VFD 24/7647B,18/7647B,18/7647B BELL (EXTENDED MODE)
- QM. VFD 24/71B,18/71B,18/71B QUESTION MARK
- SH. VFD 24/60B,18/60B,18/60B SHARP
- UA. VFD 24/7402B,18/76B,18/76B UP ARROW
- * XEDIT MESSAGE TABLE.
- *
- * NOTE- ANY SECONDARY MESSAGES DEFINED WITHIN XEDIT
- * ARE ASSUMED TO BE IN OCTAL.
- * TOTAL NUMBER OF PRIMARY ERROR MESSAGES MUST BE LESS
- * THAN 40B.
- MESSAGE EQU *-1 BASE ADDR OF MESSAGE TABLE
- LOC 1
- PFM. CON ERR KLUDGE FOR PFM ERRORS
- ARG. ERRMSG 1,(ARGUMENT ERROR)
- 1 = INPUT MODE - COMMAND HAS COUNT (F0)
- BFN. ERRMSG 1,(BAD FILE NAME)
- 1 = BAD FILE NAME
- 2 = NO FILE NAME
- 3 = SPECIAL/RESERVED NAME
- BTL. ERRMSG 1,(BAD TEXT LINE ENCOUNTERED)
- CNV. ERRMSG 1,(COMMAND NOT VALID)
- 1 = IN CREATION MODE
- 2 = IN LOOK MODE
- 3 = IN INPUT MODE
- DEL. ERRMSG 1,(DELIMITER)
- EMI. ERRMSG 1,(FILE FUNCTION INCORRECT)
- 1 = NOT ALLOWED TO CHANGE FILE
- 2 = *L* INCORRECT ON DA/MT FILES
- * PLEASE MAINTAIN ORDER OF NEXT TWO
- EOF. ERRMSG 0,(--EOF--)
- EOR. ERRMSG 0,(--EOR--)
- EOI. ERRMSG 2,(END OF FILE)
- FCP. ERRMSG 0,(FILENAM REWRITTEN)
- FCR. ERRMSG 0,(FILENAM CANNOT BE ACCESSED)
- 1 = FILE IS EXECUTE OR APPEND ONLY FILE
- 2 = FILE IS NOT LOCAL TO JOB
- 3 = FILE NOT IN PERM. FILE AREA
- FLC. ERRMSG 0,(FILENAM IS A LOCAL FILE)
- FRP. ERRMSG 0,(FILENAM REPLACED)
- FSV. ERRMSG 0,(FILENAM SAVED)
- ILL. ERRMSG 1,(INCORRECT PARAMETER)
- LFM. ERRMSG 0,(LOCAL FILE ERROR)
- LNNF. ERRMSG 1,(LINE NUMBER NOT FOUND, COMMAND NOT EXECUTED)
- LNTL. ERRMSG 1,(LINE NUMBER TOO LARGE)
- NSC. ERRMSG 1,(NO SUCH COMMAND)
- SNF. ERRMSG 1,(STRING NOT FOUND)
- STK. ERRMSG 1,(COMMAND STACKING ERROR)
- TRUNC. ERRMSG 1,(TRUNCATION AT LINE)
- LOC *O
- ERRBASE BSS 0 SET MESSAGE BASE ADDRESS
- ERRMSG NOTE END OF TABLE
- TITLE COMMAND PARSER - MAIN LOOP.
- NCM SPACE 4,20
- ** NCM - GET NEXT COMMAND.
- *
- * ENTRY NONE.
- *
- * EXIT TO COMMAND PROCESSING ROUTINE AFTER PARSING
- * PARAMETERS AND HANDLING ERRORS.
- * (X1) = COMMAND DESCRIPTOR WORD.
- *
- * USES A - 1, 2, 3, 4, 5, 6, 7.
- * X - ALL.
- * B - 2, 3, 4, 5, 6, 7.
- *
- * CALLS CDD, SCD, VIS.
- *
- * MACROS GETJA, WRITEO.
- NCM BSS 0 ENTRY
- RJ SCD ASSURE CODED MODE AT START OF COMMAND
- IF DEF,TIMES
- SA4 TIMING+1
- GETJA TIMING GET ELAPSED TIME
- SA1 A4
- IX1 X1-X4 ELAPSED TIME
- RJ CDD CONVERT
- WRITEO OUTPUT
- MX6 0 LINE FEED
- WRITEO X2
- ENDIF
- SA1 C.STR-1 COMMAND LINE CONTROL WORD
- SA4 EXPLAIN UPDATE EXPLAIN WORD
- R= X6,M.CODED
- UX1 B7,X1 B7 = CHARACTER POINTER
- SA6 E.NMODE SET MODE NEEDED TO CODED
- LE B7,NCL IF READ REQUIRED
- SA5 A1+B7
- BX6 X6-X6
- SA6 PREFIX RESET PREFIX WORD
- SA2 XVERIFY
- AX4 12
- SB6 X1 B6 = DELIMITER CHARACTER
- BX7 X2
- PX6 B0,X4
- NG X5,NCM22 IF AT END OF LINE (NO SUCH CMD)
- SA6 A4 REPLACE EXPLAIN WORD
- SA2 A5 GET FIRST CHARACTER OF NEW CMD
- SA7 VERIFY SET VERIFY FLAG
- BX7 X7-X7
- SA7 SCOUNT INITIALIZE SLASH COUNT
- NG B6,NCM2 IF NO DELIMETER CHARACTER
- NCM1 NG X2,NCM2 IF END OF LINE REACHED
- SB5 X2
- SA2 A2+B1
- NE B5,B6,NCM1 IF NOT DELIMITER CHARACTER
- SX6 B5+
- MX7 1 SET PSEUDO END OF LINE
- BX6 X6+X7
- SA6 A2-1
- * PARSE PREFIX CHARACTERS.
- NCM2 SA3 PREFIXT-1
- BX6 X5
- SB6 X5 B6 = DELIMITER CHARACTER
- SA6 PREFIXU
- SA7 INDEX CLEAR INDEX (TOPNULL 'P4 BUG)
- NCM3 SA3 A3+B1
- SB3 X3
- NE B3,B6,NCM3 IF NOT THIS PREFIX CHARACTER
- AX3 18
- SB6 X3
- ZR B6,NCM4 IF NOT REALLY PREFIX CHARACTER
- SA5 A5+B1 PREPARE FOR NEXT CHARACTER
- JP B6 PROCESS PREFIX CHARACTER
- * CLOSE PREFIX PARSING.
- NCM4 SB3 2
- SX7 0 CLEAR ASSEMBLY
- * BEGIN PARSING FOR LINE NUMBER.
- NCM5 SX0 X5-1R9-1
- SX2 X5-1R0
- BX0 -X2*X0
- PL X0,NCM6 IF NOT A NUMBER
- LX0 B3,X7 *2
- IX7 X0+X7 *5
- SA5 A5+B1
- LX7 1 *10
- IX7 X7+X2
- EQ NCM5 CHECK NEXT CHARACTER
- * SAVE LINE NUMBER AND PARSE COMMAND.
- NCM6 MX6 1
- SA7 NXTLINE SAVE NEXT LINE
- MX4 26
- MX3 -6
- NG X5,NCM9 IF AT END OF LINE
- LX4 -5 POSITION MASK
- NCM7 BX0 -X3*X5
- SB3 X0+4
- LX1 B3,X4
- PL X1,NCM9 IF NO A-Z
- BX1 X3*X5 CHECK TO SEE IF ASCII
- ZR X1,NCM8 IF UPPER CASE LETTER
- SX1 X1-7600B
- NZ X1,NCM9 IF NOT LOWER CASE LETTER
- NCM8 LX6 6
- BX6 X6+X0
- SA5 A5+1
- PL X5,NCM7 IF NOT AT END OF LINE
- * DETERMINE IF *W* POSTFIX, LEFT JUSTIFY COMMAND.
- NCM9 BX1 -X3*X6 GET LAST CHARACTER
- MX0 1
- SX7 1BS"W"
- SX4 X1-1RW
- ZR X4,NCM10 IF W POSTFIX (W HAS JUSTIFICATION BIT)
- SB3 X1+
- SX7 1BS"A"
- NE B3,B1,NCM11 IF NOT *A* POSTFIX
- NCM10 SA4 PREFIX
- BX6 X3*X6 REMOVE POSTFIX
- BX7 X7+X4
- SA7 A4 REPLACE PREFIX WORD
- NCM11 LX6 6 LEFT JUSTIFY
- PL X6,NCM11 IF NOT LEFT JUSTIFIED
- BX6 -X0*X6 REMOVE JUSTIFICATION BIT
- * SKIP BLANKS AND FIRST COMMA. STOPS ON FIRST NON-BLANK
- * CHARACTER OR ON SECOND COMMA.
- * ASSUMES X0 IS NEGATIVE AT ENTRY.
- NCM12 NG X5,NCM14 IF END OF LINE
- SB3 X5-1R 0 = BLANK, 1 = COMMA
- ZR B3,NCM13 IF BLANK
- NE B3,B1,NCM14 IF NOT COMMA
- PL X0,NCM14 IF SECOND COMMA
- SX0 0 SET COMMA ENCOUNTERED
- NCM13 SA5 A5+B1
- EQ NCM12 CHECK NEXT CHARACTER
- * LOOK UP COMMAND IN COMMAND TABLE.
- NCM14 ZR X6,NCM24 IF NO COMMAND
- SA4 JUMP-1
- SA6 JUMPX PRESET COMMAND TABLE
- NCM14.1 SA4 A4+B1 GET NEXT COMMAND
- IX3 X4-X6
- NG X4,NCM14.1 IF DATA WORD
- NZ X3,NCM14.1 IF NOT THIS ENTRY
- NCM15 SA4 A4+B1
- PL X4,NCM15 IF NOT DATA CELL ASSOCIATED WITH COMMA
- SX0 X4
- * CODE IS REPLACE AFTER CREATION MODE IS EXITED
- NCMA SA3 IWHERE
- EQ NCM16 JUMP TO PRESET TEST
- NCM RMT
- ZR X0,NCM23 IF NO JUMP ADDRESS (NO SUCH COMMAND)
- SA3 UPDATE
- RMT
- SX6 A4 SAVE INSTRUCTION INDEX
- BX3 X3+X4 CHECK LOOK COMMAND PERMISSION NECESSARY
- SA1 INPMODE
- BX7 X4 SAVE COPY OF COMMAND DATA WORD
- LX3 59-/OPTS/LK
- SA6 INDEX
- BX1 -X4*X1 NEG. IF IN INPUT AND COMMAND NOT OK
- LX1 59-/OPTS/IN
- SA7 COMMAND
- NG X1,NCM20 IF NOT LEGAL IN INPUT MODE
- PL X3,NCM21 IF NOT VALID IN LOOK MODE
- UX4 B6,X4 GET ARGUMENT DESCRIPTOR ADDRESS
- ZR B6,PST IF NO ARGUMENTS
- JP B6+PRM. PARSE PARAMETERS
- * CREATION MODE CODE.
- * ENTRY (X3) = IWHERE.
- NCM16 NG X3,NCM18 IF IN CREATION MODE
- SA3 NCM17 GET INSTRUCTION REPLACEMENT WORD
- NO
- BX6 X3
- SA6 NCMA
- RJ VIS VOID INSTRUCTION STACK
- NCM17 BSS 0
- NCM HEREL
- EQ NCMA+1 JUMP INTO REQULAR CODE
- NCM18 ZR X0,NCM23 IF NO SUCH COMMAND
- BX3 -X4*X3
- LX3 59-/OPTS/CR POSITION CREATION LEGAL STATUS
- NG X3,NCM19 IF COMMAND NOT ALLOWED IN CREATION MODE
- SA3 UPDATE
- EQ NCMA+1 PROCESS COMMAND
- * ERROR PROCESSING ROUTINES.
- NCM19 SB2 CNV.*100B+1 SET *NOT VALID* IN CREATION MODE
- EQ NER PROCESS ERROR
- NCM20 SB2 CNV.*100B+3 SET *NOT VALID* IN INPUT MODE
- EQ NER PROCESS ERROR
- NCM21 SB2 CNV.*100B+2 SET *NOT VALID* IN LOOK MODE
- EQ NER PROCESS ERROR
- NCM22 SA1 C.STR-1 SET READ REQUIRED
- PX6 B0,X1
- SA6 A1
- NCM23 SB2 NSC. NO SUCH COMMAND
- EQ NER PROCESS ERROR
- * IF NO COMMAND IS FOUND, CHECK FOR SPECIAL COMMANDS.
- NCM24 NG X5,NCM28 IF END OF LINE (POSSIBLY FINDLN)
- SA4 SPCMDT-1
- BX6 X5
- SA6 SPCMDU
- SB3 X5
- NCM25 SA4 A4+B1
- SB4 X4
- NE B4,B3,NCM25 IF NO MATCH
- AX4 18
- SB4 X4
- ZR X4,NCM23 IF NO SUCH COMMAND (NULL)
- * SKIP BLANKS AND ONE COMMA.
- NCM26 SA5 A5+1 STEP OVER SPECIAL CHARACTER
- NG X5,NCM27 IF END OF LINE
- SB2 X5-1R
- ZR B2,NCM26 IF BLANK
- NE B2,B1,NCM27 IF NOT COMMA
- ZR X4,NCM27 IF SECOND COMMA
- MX4 0
- EQ NCM26 CHECK NEXT CHARACTER
- NCM27 JP B4 PROCESS SPECIAL COMMAND
- * CHECK FOR FINDLN COMMAND, ELSE NO SUCH COMMAND.
- NCM28 SA1 NXTLINE
- SA2 IWHERE
- ZR X1,NCM23 IF NOT TO FIND LINE NUMBER
- SA3 INPMODE
- NG X2,NCM19 IF IN CREATION MODE
- BX6 X1
- MX7 0
- NG X3,NCM20 IF IN INPUT MODE (CANNOT MOVE PTR)
- SA6 NUMS MOVE PARAMETER
- SX6 FLN
- SA7 NXTLINE CLEAR NXTLINE OPTION
- SA6 COMMAND
- EQ PRM.+NONE PROCESS COMMAND
- PRM SPACE 4,20
- ** PRM - COMMAND PARAMETER CRACKER.
- *
- * ENTRY (A5) = ADDRESS OF CURRENT CHARACTER.
- * (X5) = CURRENT CHARACTER.
- * (X7) = COMMAND DESCRIPTOR WORD.
- *
- * EXIT IF NO ERROR, TO *PST* OR *PST7*.
- * IF ERROR, TO *NER* TO PROCESS ERROR.
- *
- * USES A - ALL.
- * X - ALL.
- * B - 2, 3, 4, 5, 6, 7.
- *
- * CALLS GFN, VAL.
- *
- * MACROS ERROR, GET, MEMORY, PARAM, RETURN, WRITEC.
- *
- * NOTES THIS ROUTINE INITIALIZES PARAMETERS FOR THE VARIOUS
- * ROUTINES AND IS ENTERED AT SEVERAL PLACES LABELED
- * AS SUCH.
- PRMA VFD 27/0,10/-0,2/0,1/1,*P/ NUMBER * MASK
- PRMB BSSZ 1 SCRATCH CELL AVAILABLE FOR USE BY PARSER
- PRMC BSS 0
- LOC 0
- DATA 1RL LOCAL FILE
- DATA 1RR REPLACE FILE
- DATA 1RS SAVE FILE
- DATA 1RC COPYBACK FILE
- LOC *O
- PRMCL EQU *-PRMC
- PRM. EQU *-1 BASE ADDRESS
- ** STRING PARAMETERS.
- *
- * CAN BE ONE OF SEVERAL FORMS WHICH ARE-
- * 1. /STRING...STRING/COUNT (COUNT OPTIONAL)
- * 2. /STRING/COUNT (COUNT OPTIONAL)
- * 3. /STRING/STRING/COUNT (COUNT OPTIONAL)
- * 4. COUNT (COUNT OPTIONAL)
- *
- * THE OPTIONS ARE SELECTED BY USING THE MODIFIER FIELD IN THE
- * COMMAND DESCRIPTOR WORD. FOR MOST COMMANDS, THE 18 BIT
- * FIELD CONTAINS ANY DATA NEEDED BY EITHER THE COMMAND
- * PARSER OR THE COMMAND ROUTINE. HOWEVER- IN THE CASE
- * OF ANY COMMAND USING THE STRING AND/OR FILE PARAMETER
- * SPECIFICATION, THE MODIFIER FIELD INFORMATION IS FIXED
- * AND CONTAINS THE FOLLOWING INFORMATION.
- *
- * BIT 16 = FIRST STRING NECESSARY (CAN BE NULL)
- * BIT 15 = SECOND STRING NEEDED (CAN BE NULL)
- * BIT 14 = CHECK FOR SPECIAL ... OR --- IN FIRST STRING
- * BIT 13 = --- OPTION LEGAL
- * BIT 12 = UNUSED (BUT ONCE WAS- CLEAR COMMANDS IF USED)
- * BITS 11-5 = UNUSED.
- * BIT 4 = NO FILE NAME LEGAL.
- * BIT 3 = SPECIAL FILE NAMES LEGAL.
- * BITS 2-0 = POST FILE NAME PARAMETER OPTION.
- *
- * NOTE- ALL STRING PARSES CALL SUBROUTINE *ASF* TO PRESET
- * THE CELLS NEEDED BY *LOC*.
- PRM1 PARAM STRING
- SA1 COMMAND OBTAIN DESCRIPTOR
- BX6 X6-X6 CLEAR CELLS
- SA6 P3RP CLEAR STRING POINTERS
- SA6 A6-B1
- SA6 A6-B1 P2RP
- SA6 A6-B1
- BX7 X1
- SA6 A6-B1 P1RP
- SA6 A6-B1
- SA6 NUMS CLEAR COUNT FIELD
- SA6 PRMB SET POSITIVE LOGIC
- LX7 59-34 MODIFIER BIT 16 AT SIGN BIT
- SA0 B0 SET NO DELIMITER MESSAGE NEEDED
- SB6 X5-1R,
- NG X5,PRM9 IF END OF LINE (NO STRING)
- SA4 PRMA
- ZR B6,PRM9 IF NULL PARAMETER (IE. *,,*)
- SB3 X5 DELIMITER CHARACTER
- SX6 A5+B1 SAVE POINTER TO FIRST CHARACTER
- LX4 B3
- SB5 X6 ADDRESS OF FIRST CHARACTER
- NG X4,PRM9 IF CHARACTER IS 0-9 OR *
- SA6 P1LP
- * PARSE FIRST STRING FIELD.
- PRM2 SA5 A5+B1 SEARCH FOR CLOSING DELIMITER
- NG X5,PRM3 IF END OF LINE FOUND
- SB4 X5
- NE B3,B4,PRM2 IF NOT DELIMITER
- SX6 A5 SET LWA+1 FOR FIELD
- SA5 A5+B1 STEP PAST DELIMITER
- SA6 A6+B1 CLOSING PARAMETER
- SB6 X6
- SA1 COMMAND
- LX4 B1,X7 BIT 15
- SX6 A5 POINTER FOR POSSIBLE SECOND FIELD
- PL X4,PRM6 IF NOT SUPPOSED TO HAVE 2 STRING
- SA6 P3LP SAVE POINTER TO SECOND FIELD
- EQ PRM4 PARSE SECOND STRING
- PRM3 SX6 A5 SAVE POINTER
- SA0 B1 SET DELIMITER MESSAGE NECESSARY
- SA6 A6+B1
- LX4 B1,X7 SHIFT MODIFIER BIT 15 (2 STRINGS)
- NG X4,PRM13 IF 2 STRINGS NEEDED (ARG ERROR)
- EQ PRM6 ONE STRING FIELD PRESENT
- PRM4 SX6 A5
- SA0 B1 SET DELIMITER (JUST IN CASE)
- NG X5,PRM5 IF END OF LINE
- SB4 X5
- SA5 A5+B1
- NE B4,B3,PRM4 IF NOT AT DELIMITER
- SA0 B0 CLEAR DELIMITER MESSAGE REQUIRED
- PRM5 SA6 P3RP
- PRM6 SA1 COMMAND CHECK FOR SPECIAL FIELDS
- SA2 P1LP
- LX1 59-32 MODIFIER BIT 14
- PL X1,PRM9 IF SPECIAL FIELDS NOT USED
- SA3 A2+B1 P1RP
- SX4 1R.
- SB2 X2 LEFT MOST CHARACTER
- LX1 1
- SB3 X3 RIGHT MOST CHARACTER
- PL X1,PRM7 IF *---* FORM NOT ALLOWED
- SX4 1R-
- PRM7 GE B2,B3,PRM8 IF ALL POSITIONS TRIED
- SA1 B2
- SB2 B2+B1
- BX1 X1-X4
- NZ X1,PRM7 IF NOT CHARACTER
- SA1 B2
- SB2 B2+B1
- BX1 X1-X4
- NZ X1,PRM7 IF NOT CHARACTER
- SA1 B2
- SB2 B2+B1
- BX1 X1-X4
- NZ X1,PRM7 IF NOT CHARACTER
- GT B2,B3,PRM8 IF PAST LAST CHARACTER IN STRING
- SA1 P1RP SET UP POINTERS
- SX7 B2-3
- SX6 B2
- SA7 A1 PUT NEW P1RP
- SA6 A1+B1 PUT P2LP
- BX7 X1
- SX6 X4-1R.
- SA7 A6+B1 PUT P2RP
- SA6 PRMB SET ... OR --- FLAG
- EQ PRM9 PARSE NUMBER
- PRM8 SX3 X4-1R-
- NZ X3,PRM9 IF TRIED ... FORM
- SB2 X2 RESET FIRST CHARACTER
- SX4 1R.
- EQ PRM7 TRY ... FORM
- * SKIP BLANKS AND FIRST COMMA AND EXIT TO OBTAIN ONE NUMBER
- PRM9 SX1 A0
- ZR X1,PRM10 IF DELIMITER MESSAGE NOT NEEDED
- ERROR DEL.
- PRM10 RJ ASF ANALYZE STRING FIELDS
- NZ B2,NER IF ERROR ENCOUNTERED
- PRM11 NG X5,PRM.+NUMBER1 IF END OF LINE REACHED
- SB3 X5-1R
- ZR B3,PRM12 IF BLANK
- NE B3,B1,PRM.+NUMBER1 IF NOT COMMA
- NZ B2,PRM.+NUMBER1 IF SECOND COMMA
- SB2 1 SET COMMA ENCOUNTERED
- PRM12 SA5 A5+B1 NEXT CHARACTER
- EQ PRM11 CHECK NEXT CHARACTER
- PRM13 SB2 ARG. SET ARGUMENT ERROR
- EQ NER PROCESS ERROR
- ** NEXT PARAMETER.
- *
- * THIS ROUTINE CHECKS FOR A MINUS SIGN. IF MINUS, IT SETS
- * *NUMS*+1 EQUAL TO -0, ELSE IT SETS *NUMS*+1 = +0, AND THEN
- * EXITS TO OBTAIN ONE NUMBER.
- PRM14 PARAM NEXT
- MX6 0
- SX4 X5-1R-
- SB5 B1 SET ONE NUMBER PARAMETER
- NZ X4,PRM15 IF NOT - SIGN
- SA5 A5+B1 STEP OVER - SIGN
- MX6 60 SET -0
- PRM15 SA6 NUMS+1
- EQ PRM17 OBTAIN NUMBER
- ** NUMERIC PARAMETERS.
- *
- * BITS 17-35 CONTAIN NUMBER OF FIELDS TO PARSE.
- PRM16 PARAM NUMBER
- SA1 COMMAND GET DESCRIPTOR WORD
- AX1 18
- SB5 X1 PARAMETER COUNT
- * ENTRY POINT (B5) = NUMBER OF FIELDS.
- PRM17 SB6 1 SET COUNTER
- PRM18 RJ VAL
- SA6 NUMS-1+B6
- SB6 B6+1
- LE B6,B5,PRM18 IF MORE TO GO
- EQ PST7 END OF PARSE
- ** NUMBER1.
- *
- * CRACKS OFF 1 NUMBER. ALLOWS MODIFIER FIELD TO BE USED FOR
- * OTHER FUNCTIONS.
- PRM19 PARAM NUMBER1
- RJ VAL PARSE NUMBER
- SA6 NUMS
- SA1 INPMODE
- PL X1,PST7 IF NOT IN INPUT MODE
- SA2 COMMAND
- MX7 60 PREPARE -0
- LX2 59-/OPTS/F0
- PL X2,PST7 IF NOT TO FORCE 0
- SB2 ARG.*100B+1 SET PARAMETER NOT ALLOWED IN INPUT MODE
- NZ X6,NER IF USER SPECIFIED A PARAMETER
- SA7 A6 FORCE -0 PARAMETER
- EQ PST7 EXIT TO POST COMMAND PROCESSOR
- EQ PRM17 NOTHING
- ** NUMBER2.
- *
- * CRACKS OFF 2 NUMBERS. ALLOWS MODIFIER FIELD TO BE USED FOR
- * OTHER FUNCTIONS.
- PRM20 PARAM NUMBER2
- SB5 B1+B1 PARAMETER COUNT
- EQ PRM17 PARSE NUMBERS
- ** FILE PARAMETER.
- *
- * PARSES ONE FILE NAME (WITH OPTIONS).
- * EXITS TO SPECIFIED OPTIONAL PARAMETERS.
- PRM21 PARAM ONEFILE
- BX0 X7 COMMAND DESCRIPTOR
- LX0 59-21 SPECIAL NAMES OK BIT
- RJ GFN PARSE FILE NAME
- SA6 IFN
- ZR X1,PRM23 IF NAME LEGAL
- SB2 B6 KLUDGE FOR NOW
- NZ X6,PRM22 IF NAME IS SPECIAL
- SX7 B6-BFN.*100B-2 SEE IF NO FILE NAME
- LX0 -1 *NFN* BIT
- NZ X7,NER IF NOT *NO FILE NAME*
- PRM22 PL X0,NER IF NOT VALID
- PRM23 SA1 COMMAND
- MX2 -3 OBTAIN POST-FILE OPTIONS
- AX1 18
- BX2 -X2*X1
- LX2 -1
- SB3 X2+
- JP PRM24+B3 JUMP TO POST PROCESSING OPTION
- PRM24 PL X2,PST7 IF NOTHING TO FOLLOW
- EQ STRING+PRM. PROCESS STRING FIELD
- EQ PFMTYPE+PRM. PROCESS PFM SPECIFICATIONS
- ** PFMTYPE.
- *
- * PFMTYPE CRACKS OFF THE LEGAL PFM CODES FOR
- * USE IN THE *END*, *FILE*, AND *QUIT* COMMANDS.
- *
- * THE DATA IS PLACED IN NUMS, WITH THE FOLLOWING
- * CONVENTION-
- *
- * BIT 0 = LOCAL OR L USED.
- * BIT 1 = REPLACE OR R USED.
- * BIT 2 = DIRECT OR D USED.
- * BIT 3 = COPY OR C USED.
- *
- * ANY COMBINATION OF ABOVE ARE LEGAL PROVIDING THAT
- * ONLY ONE LETTER MNENOMICS ARE USED. (HOWEVER, NOT
- * ALL COMBINATIONS MADE SENSE).
- PRM25 PARAM PFMTYPE
- BX6 X6-X6 CLEAR ASSEMBLY
- SB3 PRMC GET BASE OF MNEMONICS
- SX4 B1
- PRM26 SB2 PRMCL
- SX0 X5-7600B
- NG X0,PRM27 IF NOT ASCII CHARACTER
- SX5 X5-7600B
- PRM27 SB2 B2-B1
- LT B2,PRM28 IF END OF LIST (END OF PARSE)
- SA1 B3+B2
- BX1 X1-X5
- NZ X1,PRM27 IF NOT THIS ENTRY
- LX0 B2,X4 SHIFT CODE
- SA5 A5+B1 NEXT CHARACTER
- BX6 X6+X0
- PL X5,PRM26 IF MORE TO GO
- PRM28 SA6 NUMS SET CODES
- NG X5,PST IF END OF LINE
- PRM28.1 SA5 A5+1
- PL X5,PRM28.1 IF NOT END OF COMMAND
- EQ PST EXIT
- ** TOGGLE/SET PARAMETERS.
- *
- * VALID CHARACTERS ARE +,- OR NULL.
- * + = NUMS IS EQUAL TO +1.
- * - = NUMS IS EQUAL TO -1.
- * NULL = EQUAL TO +0.
- PRM29 PARAM TOGGLE
- NG X5,PRM30 IF END OF LINE
- SB3 X5-1R+
- ZR B3,PRM32 IF + SIGN
- EQ B3,B1,PRM33 IF - SIGN
- PRM30 SX6 0
- PRM31 SA6 NUMS
- EQ PST7 EXIT
- PRM32 SA5 A5+B1 + SIGN PROCESSING
- SX6 B1
- EQ PRM31 SET UP EXIT
- PRM33 SA5 A5+B1 - SIGN PROCESSING
- SX6 -B1
- EQ PRM31 SET UP EXIT
- ** CHARACTER PARAMETERS.
- *
- * ROUTINE ALLOWS ONE CHARACTER PARAMETER.
- * IF BIT 18 IS SET IN DESCRIPTOR WORD, THE CHARACTER CANNOT
- * BE AN ALPHABETIC.
- *
- * THE CHARACTER IS PLACED IN *NUMS*.
- *
- * NOTE- LOWER CASE LETTERS (IF LEGAL) ARE NOT CONVERTED TO
- * UPPER CASE. XEDIT VIEWS UPPER/LOWER AS DIFFERENT.
- *
- * IF THERE IS NO PARAMETER, *NUMS* IS SET TO -1.
- PRM34 PARAM CHAR
- MX6 -1 SET NO CHARACTER
- NG X5,PRM35 IF NO CHARACTER
- BX6 X5
- LX7 59-18
- SA5 A5+B1 SET TO NEXT CHARACTER
- SB2 ILL. INCORRECT PARAMETER (PRESET)
- PL X7,PRM35 IF ANY CHARACTER IS LEGAL
- ZR X6,PRM35 IF COLON
- SX4 X6-1RZ-1
- NG X4,NER IF A-Z (UPPER CASE)
- SX4 X6-7601B
- NG X4,PRM35 IF NOT LOWER CASE (.LT. 7601B)
- SX4 X4-1RZ
- NG X4,NER IF LOWER CASE
- PRM35 SA6 NUMS SET CHARACTER
- EQ PRM40 CHECK FOR NO TRAILING CHARACTERS
- ** NULL PARAMETER.
- *
- * ROUTINE WILL HANDLE OWN PARAMETER CRACKING, HOWEVER, THIS
- * ROUTINE WILL GIVE THE FIRST CHARACTER ADDRESS AND LAST
- * CHARACTER ADDRESS (+1) IN *NUMS* AND *NUMS+1*.
- * IF *NUMS* IS ZERO, THEN THERE IS NO PARAMETER.
- PRM36 PARAM NULL
- SX6 A5 GET FWA OF PARAMETER
- SA6 NUMS
- NG X5,PRM37 IF NO PARAMETER
- PRM36.1 SA5 A5+B1
- PL X5,PRM36.1 IF NOT AT END OF PARAMETER
- SX6 A5
- SA6 A6+B1 SAVE LWA+1
- EQ PRM.+NONE PROCESS NO PARAMETERS
- PRM37 MX6 0
- SA6 A6 REPLACE POINTER
- EQ PRM.+NONE PROCESS NO PARAMETERS
- ** LOAD OVERLAY AND RE-GET PARAMETER CRACKING SPECIFICATIONS.
- * OVERLAY TO LOAD IS IN THE ROUTINE ADDRESS FIELD.
- * ENTRY (X4) = LOWER 18 BITS CONTAINS OVERLAY NUMBER TO LOAD.
- PRM38 PARAM OVL
- SA2 LOVE LAST OVERLAY LOADED
- SX7 X4+1R0
- BX3 X7-X2
- ZR X3,PRM39 IF OVERLAY ALREADY LOADED
- SX0 X4
- SA7 A2
- .D IFNE DEBUG+FILEOV,0 IF DEBUG MODE OR OVERLAYS FROM SYSTEM
- SA3 LOVA FORM OVERLAY NAME
- BX6 X3+X7
- LX6 24 LEFT JUSTIFY
- SA6 LOVC
- .D ENDIF
- .E IFEQ DEBUG,1 IF DEBUG ON
- WRITEC OUTPUT,LOVC-1
- .E ENDIF
- MEMORY CM,LOVB+X0,R OBTAIN NECESSARY FIELD LENGTH
- .G IFEQ FILEOV,0 IF LOAD FROM LOCAL FILE
- SA1 ACTR FILE NAME CONTAINING OVERLAY
- MX2 42
- BX1 X1*X2
- LX0 6
- OVERLAY X1,X0
- .G ELSE LOAD FROM SYSTEM
- OVERLAY LOVC,X0,S
- .G ENDIF
- SB7 X1 GET ENTRY POINT (PRESET OVERLAY)
- JP B7 ENTER OVERLAY
- PRM39 SA1 COMMAND GET DESCRIPTOR WORD
- AX1 18
- SA4 X1 OBTAIN COMMAND DESCRIPTOR WORD ADDR-1
- EQ NCM15 PROCESS COMMAND
- ** NO PARAMETERS (NONE).
- *
- * THIS ROUTINE ASSURES THAT THE CHARACTER POINTER IS POSITIONED
- * AT AN END OF LINE (PSEUDO OR REAL).
- PRM40 PARAM NONE
- * GO TO *PST7*.
- PST SPACE 4,20
- ** PST - POST COMMAND PROCESSOR.
- *
- * ENTRY (A1) = C.STR-1.
- * (A5) = ADDRESS OF CURRENT CHARACTER.
- * (X5) = CURRENT CHARACTER.
- * (PREFIX) = PREFIX OPTIONS.
- * (COMMAND) = COMMAND DESCRIPTOR.
- *
- * EXIT TO PROCESS COMMAND, OR TO ERROR ROUTINE.
- *
- * USES A - 1, 2, 3, 5, 6.
- * X - 1, 2, 3, 4, 5, 6.
- * B - 2, 4, 6, 7.
- *
- * CALLS ETL, GLN, MPR, RTDA, VRY.
- *
- * MACROS ERROR.
- PST7 NG X5,PST IF END OF LINE
- SB4 X5-1R
- SA5 A5+1
- ZR B4,PST7 IF BLANK
- SB2 ILL. INCORRECT PARAMETER
- EQ NER PROCESS ERROR, EXIT.
- PST SA3 C.STR-1 PACK UP LAST COMMAND (PUT INTO LASTCMD)
- UX3 B6,X3
- SB6 A3+B6 FWA OF COMMAND
- SB7 P.LINE SET LAST PARAMETER
- RJ RTOA PACK LAST COMMAND
- * ENTRY FROM SOME SPECIAL COMMAND PROCESSORS.
- PST1 SB6 B0 PRESET TO *READ REQUIRED*
- LX4 B1,X5 NEG. IF TRUE END OF LINE
- NG X4,PST2 IF ABOVE
- SB6 A5+2-C.STR SET CHARACTER POINTER
- SX6 X5 REMOVE SPECIAL END OF LINE
- SA6 A5
- PST2 SA3 C.STR-1 RESET FOR ENTRY FROM *PST1*
- SA1 COMMAND
- PX6 B6,X3
- SB7 X1 ROUTINE ADDRESS
- SA6 C.STR-1 SAVE POINTER/DELIMITER
- PL X3,PST3 IF NOT TO ECHO LINE
- SA1 P.LINE
- SA3 ETLB SET COMMAND LINE HEADER
- RJ ETL
- PST3 SA1 SCOUNT
- ZR X1,PST4 IF SLASH COUNT ZERO
- RJ MPR ADVANCE POINTER
- PST4 SA1 NXTLINE
- SA2 COMMAND
- ZR X1,PST5 IF NO ADVANCE TO LINE NUMBER
- SA3 INPMODE
- NG X3,NCM20 IF POINTER MOVEMENT NOT ALLOWED, EXIT
- SA3 IWHERE
- NG X3,NCM19 IF IN CREATION MODE, EXIT
- RJ GLN
- NZ X6,PST6 IF LINE NUMBER NOT FOUND
- SA2 COMMAND
- PST5 SB7 X2 (X2) = COMMAND DESCRIPTOR WORD
- BX1 X2
- JP B7 PROCESS COMMAND, EXIT
- * PROCESS LINE NUMBER NOT FOUND.
- PST6 ERROR LNNF. ISSUE MESSAGE
- RJ VRY
- EQ CER1 RETURN TO ERROR CLEANUP
- NER SPACE 4,15
- ** NER - COMMAND PARSER ERROR PROCESSOR.
- *
- * ENTRY (B2) = ORDINAL OF MESSAGE TO PRINT.
- *
- * EXIT (B2) = ORDINAL OF MESSAGE PRINTED.
- *
- * USES A - 0, 5, 6, 7.
- * X - 5, 6, 7.
- * B - NONE.
- *
- * CALLS PST.
- NER SX6 NER2 RE-ENTRY ADDRESS
- NG X5,NER1 IF AT END OF LINE
- NER0 SA5 A5+1
- PL X5,NER0 IF NOT END OF LINE
- NER1 MX7 0 CLEAR NXTLINE FLAG
- SA6 COMMAND SAVE RE-ENTRY
- SA0 B2 SAVE ERROR MESSAGE
- SA7 NXTLINE
- EQ PST FOR PARTIAL PROCESSING, RETURN TO *NER1*
- NER2 SB2 A0 RE-SET ERROR MESSAGE
- EQ CER EXIT
- TITLE PREFIX CHARACTER ROUTINES.
- ** PREFIX CHARACTERS.
- *
- * THE FOLLOWING ROUTINES ARE CALLED TO PROCESS
- * COMMAND PREFIX CHARACTERS.
- X SPACE 4,10
- ** X - TOGGLE VERIFICATION.
- * ^X - ALTERNATE FORM.
- *
- * ENTRY NONE.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 4, 6.
- * B - 4, 6.
- PREFIX X
- SA4 XVERIFY TOGGLE MODE
- BX6 -X4
- SA6 A4-B1
- EQ NCM2 EXIT
- PLUS SPACE 4,10
- ** + - GET DATA INPUT FROM NEW INPUT LINES.
- *
- * ENTRY NONE.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 7.
- * X - 1, 7.
- PREFIX +
- SA1 PREFIX
- SX7 1BS"PLUS"
- BX1 X1+X7
- SA7 A1
- EQ NCM2 EXIT
- SLASH SPACE 4,15
- ** / - SKIP TO A NEW LINE.
- * ENTRY NONE.
- *
- * EXIT (SCOUNT) = (SCOUNT) + 1.
- * TO *NCM2* IF NO ERRORS.
- * TO *NCM19* OR *NER* IF ERRORS.
- *
- * USES A - 1, 7.
- * X - 1, 7.
- * B - 2.
- * NOTES SLASH PREFIX PROCESSED IN *PST*.
- *
- PREFIX /
- SB2 ARG.*100B+1
- SA1 INPMODE
- NG X1,NER IF IN INPUT MODE (POINTER MOTION ILLEGAL)
- SA1 IWHERE
- NG X1,NCM19 IF IN CREATION MODE
- SA1 SCOUNT
- SX7 X1+B1 INCREMENT SLASH COUNT
- SA7 A1
- EQ NCM2 EXIT
- UPARROW SPACE 4,15
- ** UP ARROW - GO TO TOP OF FILE BEFORE PROCESSING.
- *
- * ENTRY NONE.
- *
- * EXIT (SCOUNT) = 0.
- * TO *NCM2* IF NO ERRORS.
- * TO *NCM19* OR *NER* IF ERRORS.
- *
- * USES A - 1, 7.
- * X - 1, 7.
- * B - 2.
- PREFIX UA.
- SB2 ARG.*100B+1
- SA1 INPMODE
- NG X1,NER IF IN INPUT MODE (POINTER MOTION ILLEGAL)
- SA1 IWHERE
- NG X1,NCM19 IF IN CREATION MODE
- BX7 X7-X7
- SA7 SCOUNT ZERO SLASH PREFIX COUNT
- RJ TOP
- EQ NCM2 EXIT
- PREFIXT SPACE 4,10
- PREFIXT BSS 0
- PREFIX HERE ASSEMBLE PREFIX TABLE
- PREFIXU DATA 0 END MARKER
- PURGMAC PREFIX VOID USE OF THIS MACRO
- TITLE SPECIAL COMMAND FORMS.
- ** SPECIAL COMMANDS-
- *
- * THE FOLLOWING COMMANDS PROCESS SPECIAL COMMANDS.
- - SPACE 4,15
- ** - - EXECUTE LAST Y OR Z COMMAND.
- *
- * ENTRY AT *DSH1* TO PROCESS *.* COMMAND.
- *
- * EXIT TO *PST1* IF NO ERRORS.
- * TO *CER* OR *NER* IF ERROR.
- *
- * USES X - 0, 1, 3, 6, 7.
- * A - 0, 1, 3, 6, 7.
- * B - 2.
- *
- * CALLS MPR, STK, STL, VAL.
- SPECIAL (-)
- SA0 Y.DEV SET ADDRESS OF DEVICE TO STACK
- * ENTRY (A0) = ADDRESS OF DEVICE TO STACK.
- DSH1 RJ VAL
- SB2 ILL.
- PL X5,NER IF ARGUMENT AFTER LINE COUNT
- SX7 DSH3
- NG X6,DSH2 IF USED PARAMETER 0
- NZ X6,DSH2 IF SPECIFIED A NUMBER
- SX6 1 SET DEFAULT
- DSH2 SA6 SKPCNT
- SA7 COMMAND SET COMMAND ADDRESS (RE-ENTER)
- EQ PST1 CLOSE COMMAND PROCESSING
- DSH3 SA1 SKPCNT
- RJ STL PROCESS INTERRUPT
- ZR X1,DSH4 IF NOT TO ADVANCE POINTER
- SA3 INPMODE
- SB2 ARG.*100B+1
- NG X3,CER IF NOT VALID IN INPUT MODE
- SA3 IWHERE
- SB2 CNV.*100B+1
- NG X3,CER IF NOT VALID IN CREATION MODE
- RJ MPR
- DSH4 SA1 A0 SET ADDRESS OF DEVICE TO STACK
- RJ STK STACK DEVICES
- SB2 STK.
- EQ CER IF DEVICE IS NOT STACKABLE
- . SPACE 4,10
- ** . - EXECUTE LAST COMMAND.
- *
- * ENTRY NONE.
- *
- * EXIT TO *DSH1*.
- *
- * USES A - 0.
- SPECIAL (.)
- SA0 P.DEV SET ADDRESS OF DEVICE TO STACK
- EQ DSH1 EXIT, EXECUTE LAST COMMAND
- SPCMDT SPACE 4,10
- SPCMDT BSS 0
- SPECIAL HERE ASSEMBLE SPECIAL COMMAND TABLE
- SPCMDU DATA 0 END MARKER
- PURGMAC SPECIAL VOID USAGE OF MACRO
- NCL SPACE 4,40
- ** NCL - OBTAIN NEXT COMMAND LINE AND PUT INTO *C.STR*.
- *
- * NCL READS THE NEXT LINE FROM THE CURRENT INPUT FILE
- * AND PLACES IT INTO C.STR (C.STR-1 IS UPDATED ALSO).
- * IF THERE IS NO FET (IE. THE *.* AND *-* COMMANDS), THE
- * INPUT STACK IS POP-ED AND THE LAST INPUT LINE IS
- * RE-INSTATED AT ITS PREVIOUS POSITION. IF THERE IS A
- * FET, *READC* IS CALLED TO READ IN THE NEXT LINE. IF
- * POSITIONED AT AN EOR,EOF,EOI, THE STACK IS POP-ED IF
- * NOT THE PRIMARY INPUT SOURCE.
- *
- * NDL - OBTAIN NEXT DATA LINE FROM COMMAND LINE AND PUT INTO
- * C.STR.
- *
- * THIS IS A SECOND ENTRY POINT TO *NCL*. SINCE XEDIT ALLOWS
- * THE USER TO INTERMIX COMMANDS AND DATA, EVERY SO OFTEN
- * XEDIT NEEDS MORE DATA (WHICH EXISTS ON THE NEXT COMMAND
- * LINE. THIS ENTRY POINT HANDLES THIS CASE. (DESIGNED TO BE
- * USED WITH *RDL*.)
- *
- * ENTRY NONE.
- *
- * EXIT (X1) = 0 IF DATA HAS BEEN READ.
- * .NE. 0 IF AN EMPTY CR WAS ENCOUNTERED.
- * RETURNS TO CALLER IF ENTERED VIA *NDL*,
- * ELSE RETURNS TO *NCM*, UNLESS IN *INPUT* MODE, THEN
- * RETURNS TO *INP2*.
- * IF END OF INPUT AND NOT TTY INPUT FILE, TO *ABT*.
- *
- * USES A - 1, 2, 3, 4, 5, 6, 7.
- * X - 1, 2, 3, 4, 5, 6, 7.
- * B - 6, 7.
- *
- * CALLS STL, UPL.
- *
- * MACROS PROMPT, READ, READC, WRITEO.
- NDL DATA 0 NEW DATA LINE ENTRY. THIS WORD IS A FLAG.
- * IF (NDL) = 0, THEN ENTERED VIA *NCL*, ELSE VIA *NDL*.
- NCL SA5 C.ON OBTAIN CURRENT INPUT DEVICE
- SA3 X5-1 GET FET ADDRESS
- ZR X3,NCL5 IF NO FET (POP STACK)
- SA1 PROMPT
- SX2 X3 SET FET ADDRESS
- BX6 X1
- SA4 NDL
- SX7 X2-INPUT
- NZ X4,NCL1 IF REQUESTING DATA
- NG X3,NCL5 IF POP IF ASKING FOR COMMAND
- NZ X7,NCL1 IF NOT PRIMARY INPUT
- ZR X6,NCL1 IF NOT TO ISSUE PROMPT
- WRITEO OUTPUT
- NCL1 SA1 TTYIN
- SA3 NCLA
- SA2 BATCH
- BX6 X1+X3
- SA6 A3
- NZ X3,NCL2 IF READ NOT NEEDED
- SA4 NDL
- NG X2,NCL1.1 IF IN BATCH MODE
- NZ X4,NCL1.1 IF ENTERED VIA *NDL*
- PROMPT OFF TURN OFF PROMPT
- NCL1.1 READ INPUT,RECALL
- SA2 BATCH
- NG X2,NCL2 IF IN BATCH MODE
- PROMPT ON TURN ON PROMPT
- NCL2 READC INPUT,X5-34D,33D READ NEW LINE
- SA3 C.STR-1 RESET CHARACTER INDEX
- NZ X1,NCL6 IF HIT END OF SOMETHING
- PX6 B1,X3 RESET CHARACTER INDEX
- SA6 A3
- NCL3 SA1 X5-34D FWA OF STRING
- SB6 C.STR FWA OF STRING
- RJ UPL
- SX1 0 SET SUCCESSFUL READ
- NCL4 SA2 NDL
- ZR X2,NCL8 IF ENTERED VIA NCL
- AX2 30
- BX7 X7-X7
- SA7 TLX IGNORE INTERRUPT IF DATA LINE
- SB7 X2 OBTAIN RETURN ADDRESS
- SA7 A2 CLEAR *NDL* FLAG
- JP B7 RETURN TO CALLER
- * POP INPUT STACK
- NCL5 MX6 1 SET DEVICE IN-ACTIVE
- SA5 X5 GET NEW DEVICE
- SA6 A5 IDLE OLD DEVICE
- SA2 X5+B1 GET OLD C.STR-1 WORD
- BX7 X5
- LX6 X2
- SA7 C.ON CHANGE CURRENT DEVICE POINTER
- SA6 C.STR-1
- EQ NCL3 UNPACK AND EXIT
- * END OF SOMETHING ENCOUNTERED ON INPUT FILE.
- NCL6 SA2 X5-1 GET FET ADDRESS
- SX2 X2-INPUT PRIMARY INPUT FOR CMD OR DATA
- NZ X2,NCL5 IF NOT PRIMARY INPUT FILE
- SA4 TTYIN
- NZ X4,NCL7 IF NOT *TTY* INPUT FILE (ABORT)
- RJ STL EVENTUALLY RETURNS TO *NCL* IF INTERRUPT
- MX6 0 SET READ REQUIRED
- SA6 NCLA (X1) .NE. 0
- EQ NCL4 READ INPUT FILE
- NCL7 SB6 =C* END OF INPUT ENCOUNTERED - ABORTED.*
- EQ ABT ABORT XEDIT
- NCL8 SA2 INPMODE
- NG X2,INP2 IF IN INPUT MODE
- ZR X1,NCM IF NOT EMPTY CARRIAGE RETURN
- SA1 UPDATE
- PL X1,NCM21 IF IN LOOK MODE
- EQ INP1 BEGIN INPUT MODE
- NCLA DATA 0 READ REQ,D FROM INPUT IF ZERO
- TITLE COMMAND TABLE.
- JUMP BSS 0 START OF COMMAND TABLE
- .ADD COMMAND ADD,A,NUMBER1,,ADD,(IN,F0)
- .ALN COMMAND ADDLN,ALN,NUMBER2,-1,PLN,,OVL2
- .ALNS COMMAND ADDLNS,ALNS,NUMBER2,-2,PLN,,OVL2
- .BOTTOM COMMAND BOTTOM,B,NONE,,BTR,(LK)
- .BRIEF COMMAND BRIEF,BR,TOGGLE,(XVERIFY*2+0),SFG,(CR,LK,IN)
- .CHANGE COMMAND CHANGE,C,STRING,340000B,CNG,(IN,F0)
- .CS COMMAND CHANGES,CS,STRING,340000B,CGS,(IN,F0)
- .COPY COMMAND COPY,,ONEFILE,070011B,CPY,(LK,IN,F0),OVL2
- .COPYD COMMAND COPYD,,ONEFILE,070011B,CPY11,,OVL2
- .DBADL COMMAND DBADL,DBL,NUMBER1,-1,PBL,,OVL2
- .DEFTAB COMMAND DEFTAB,DT,CHAR,(TABCHAR*2+0),SCH,(CR,IN,LK)
- .DELETE COMMAND DELETE,D,STRING,070000B,DLT
- .DEL COMMAND DELIMIT,DEL,CHAR,1,DEL,(CR,LK,IN)
- .DEOF COMMAND DEOF,DF,NUMBER1,DF,DRF
- .DEOR COMMAND DEOR,DR,NUMBER1,DR,DRF
- .DLN COMMAND DELETELN,DLN,NONE,0,PLN,,OVL2
- .DLB COMMAND DLBLANKS,DLB,NUMBER1,,DLB,,OVL2
- .EDIT COMMAND EDIT,,NONE,,PEC,(IN)
- .END COMMAND END,E,ONEFILE,000022B,EFQ
- .EXPLAI COMMAND EXPLAIN,,NONE,,EXP,(CR,IN,LK),OVL1
- .FBADL COMMAND FBADL,FBL,NUMBER1,1,PBL,(LK),OVL2
- .FILE COMMAND FILE,F,ONEFILE,000022B,EFQ
- .FINDLL COMMAND FINDLL,FLL,NUMBER1,,FLL,(LK)
- .HELP COMMAND HELP,H,NULL,,HELP,(CR,LK,IN),OVL1
- .INPUT COMMAND INPUT,,CHAR,0,INP,(CR)
- .INSERT COMMAND INSERT,I,NUMBER1,IIB4,IIB,(CR)
- .IB COMMAND INSERTB,IB,NUMBER1,IIB3,IIB,(IN)
- .LISTAB COMMAND LISTAB,LT,NONE,,LTB,(CR,LK,IN),OVL2
- .LOCATE COMMAND LOCATE,L,STRING,260000B,LCT,(LK)
- IF DEF,TIMES,1
- .LOC COMMAND LOC,,STRING,260000B,LCTA,(LK)
- .MODIFY COMMAND MODIFY,M,NONE,0,MOD,(IN)
- .NEXT COMMAND NEXT,N,NEXT,,NXT,(LK)
- .NOBELL COMMAND NOBELLS,NB,NONE,,NBL,(CR,IN,LK),OVL2
- .OCTCHA COMMAND OCTCHANGE,OC,NULL,300000B,OCT,(IN,F0),OVL2
- .PRINT COMMAND PRINT,P,NUMBER1,,PNT,(CR,IN,LK,F0)
- .QMOD COMMAND QMOD,QM,NUMBER1,0,MOD1,(IN,F0)
- .QUIT COMMAND QUIT,Q,ONEFILE,000022B,EFQ
- .READ COMMAND READ,,NULL,,RDP,,OVL2
- .READP COMMAND READP,,NULL,,RDP,,OVL2
- .REPLACE COMMAND REPLACE,R,NUMBER1,,RLP,(IN,F0)
- .RLN COMMAND REPLACELN,RLN,NUMBER2,1,PLN,,OVL2
- .RESTOR COMMAND RESTORE,REST,NONE,,RST
- .RM COMMAND RMARGIN,RM,NUMBER1,,RMA,(CR,IN,LK)
- .STOP COMMAND STOP,,NONE,,ABO,(CR,LK)
- .TABS COMMAND TABS,TAB,NUMBER,NTABS,STB,(CR,LK,IN)
- .TEOF COMMAND TEOF,,TOGGLE,ITOGGLF,TGL,(CR,LK,IN)
- .TEOR COMMAND TEOR,,TOGGLE,ITOGGLR,TGL,(CR,LK,IN)
- .TRIM COMMAND TRIM,,TOGGLE,TRIM,TGL,(CR,LK,IN)
- .TRUNC COMMAND TRUNCATE,TRUNC,NUMBER1,,TRN,(IN,F0)
- .TOP COMMAND TOP,T,NONE,,TTN,(LK)
- .TOPNUL COMMAND TOPNULL,TN,NONE,,TTN
- .VERIFY COMMAND VERIFY,V,TOGGLE,(XVERIFY*2+1),SFG,(CR,LK,IN)
- .WEOF COMMAND WEOF,WF,NONE,34B,WRM,(IN)
- .WEOR COMMAND WEOR,WR,NONE,24B,WRM,(IN)
- .WHERE COMMAND WHERE,W,NONE,,WHR,(CR,IN,LK)
- .WM COMMAND WMARGIN,WM,NUMBER2,,SWN,(CR,IN,LK)
- .Y COMMAND Y,,NULL,,YZP,(CR,LK,IN)
- .YQMOD COMMAND YQMOD,YQM,NUMBER1,0,MOD2,(IN,F0)
- .Z COMMAND Z,,NULL,,YZP,(CR,IN,LK)
- JUMPX DATA 0
- VFD 2/3,58/0 INCORRECT COMMAND MARKER
- SPACE 4
- ** ASSEMBLE DATA NEEDED FOR OVERLAYS.
- * THIS CODE NEEDS TO BE AFTER THE COMMAND DEFINITIONS.
- LOVA VFD 24/0,30/0LXEDIT,6/0 OVERLAY BASE NAME
- LOVB VFD 30/MINFL,30/0 MINIMUM BASE FIELD LENGTH
- C.A SET 1 PREPARE TABLE OF FIELD LENGTHS
- DUP MXOVL,3
- C.D DECMIC C.A
- VFD 30//XEDIT_"C.D"_/LWA,30/0
- C.A SET C.A+1
- .H IFEQ DEBUG,1 IF DEBUG ON
- DATA 10H LOADING
- .H ENDIF
- LOVC BSSZ 1 OVERLAY NAME
- LOVD VFD 6/1,6/,5/,1/1,24/,*P/
- LOVE CON 0 LAST OVERLAY LOADED
- IFEQ FILEOV,3,6
- LOVF CON 0 .NE.0 IF OVERLAY LOADED FROM LIBRARY
- LOVG BSS 0
- .I IFEQ DEBUG,1 IF DEBUG ON
- SCRG FILEC E.SCR,150D,(FET=13D),EPR
- .I ELSE
- SCRG FILEC E.SCR,150D,(FET=13D),(USN=LIBRARY),EPR
- .I ENDIF
- TITLE COMMAND PROCESSORS.
- ** ENTRY CONDITIONS TO ALL COMMAND PROCESSORS -
- *
- * (X1) = (DECA) - INSTRUCTION DESCRIPTER WORD.
- * (INDEX) = ADDRESS OF INSTRUCTION DESCRIPTER WORD.
- ABO SPACE 4,10
- ** ABO - PROCESS ABORT COMMAND.
- *
- * ENTRY NONE.
- *
- * EXIT TO *ABT*.
- *
- * USES A - 2.
- * X - 2.
- * B - 6.
- *
- * MACROS RETURN.
- ABO SA2 SPCP
- LX2 59-58
- PL X2,ABO1 IF *P* NOT SPECIFIED
- RECALL SFET
- SA1 ISFN GET EDIT FILE NAME
- SX6 B1 SET COMPLETE BIT
- BX6 X6+X1
- SA6 X2
- RETURN X2,R RETURN EDIT FILE
- ABO1 SB6 =C* ABORTED*
- EQ ABT ABORT XEDIT
- ADD SPACE 4,15
- ** ADD - ADD TEXT TO END OF LINE(S).
- *
- * ENTRY (NUMS) = NUMBER OF LINES TO ADD.
- *
- * EXIT TO NCM.
- *
- * USES A - 1, 2, 6, 7.
- * X - 1, 2, 3, 4, 6, 7.
- * B - 4, 6, 7.
- *
- * CALLS ITM, RDF, RDL, SAC, SAL, VFY, VRY, WTF.
- *
- * ROUTINE REQUESTS ONE LINE OF DATA, AND ADDS IT TO
- * THE END OF N LINES. THE TRUNCATION MESSAGE IS ISSUED
- * IF THE RESULTANT LENGTH IS GREATER THAN 160 CHARACTERS.
- ADD SA1 NUMS
- SX6 B1
- IX6 X1-X6 DECREMENT TO MAKE TESTING EASIER
- SA6 A1
- RJ SAC SET ASCII PROCESSING
- RJ RDL
- NZ X1,NCM IF NOTHING ON LINE (RETURN)
- EQ ADD2 PROCESS ADD
- ADD1 SA6 A1 REPLACE COUNT
- RJ WTF
- RJ RDF
- ADD2 SA1 E.STR-1
- SA2 D.STR-1
- SX3 X1-160D
- BX3 -X3 NUMBER OF AVAILABLE CHARACTERS
- IX4 X3-X2
- SB7 A1
- PL X4,ADD3 IF NO TRUNCATION
- BX2 X3 TRUNCATE DATA LINE
- ADD3 IX7 X1+X2 GET NEW LENGTH
- SB6 B7+X1 ADDR OF LAST CHAR IN EDIT LINE
- MX6 2 SET END OF LINE
- SB4 X2+B1 INCLUDE END OF LINE
- ADD4 SA6 B6+B4
- SB4 B4-B1
- SA1 A2+B4
- BX6 X1
- NZ B4,ADD4 IF NOT ALL MOVED
- SA7 E.STR-1
- PL X4,ADD5 IF NO TRUNCATION
- RJ ITM ISSUE TRUNCATION MESSAGE
- ADD5 SX7 B1
- SA7 E.LMOD SET MODIFICATIONS MADE
- SA7 NOMOD SET FILE MODIFICATIONS MADE
- RJ VRY VERIFY LINE
- SA1 NUMS
- SX6 B1
- IX6 X1-X6
- NG X6,NCM IF FINISHED
- EQ ADD1 PROCESS NEXT LINE
- BTR SPACE 4,25
- ** BTR - ADVANCE TO BOTTOM OF CURRENT RECORD.
- *
- * ENTRY NONE.
- *
- * EXIT TO VRT.
- *
- * USES A - 1, 2, 3.
- * X - 1, 2, 3.
- *
- * CALLS RDF, WTF.
- *
- * MACROS RECALL.
- *
- * THIS ROUTINE TAKES ASSUMES THAT THE END OF RECORD HAS BEEN
- * ENCOUNTERED WHEN THE FOLLOWING CONDITIONS ARE TRUE.
- * 1. THE FET IS NOT BUSY
- * 2. *IN* IS EQUAL TO *OUT*
- * DUE TO XEDIT,S HABIT OF PASSING OVER NULL RECORD/FILES THESE
- * CONDITIONS WILL LOCATE THE BOTTOM.
- * NOTE- XEDIT WILL TREAT AN EOF AS AN EOR IF THERE IS TEXT
- * IMMEDIATELY BEFORE THE EOF. THIS WAS ASSUMED WITHIN THE
- * OF THE DESIRED FUNCTION OF BOTTOM.
- BTR1 RJ WTF ADVANCE TO NEXT LINE
- RJ RDF
- BTR SA1 E.IN+2 *IN*
- SA2 A1+B1 *OUT*
- IX2 X2-X1
- NZ X2,BTR1 IF *IN* NOT EQUAL TO *OUT* (NOT AT END)
- SA3 E.IN
- LX3 59-0
- NG X3,VRT IF FET IS COMPLETE
- RECALL A3 WAIT FET COMPLETION
- EQ BTR FIND BOTTOM
- CNG/CNS SPACE 4,15
- ** CNG/CNS - PROCESS CHANGE AND CHANGES COMMANDS.
- *
- * ENTRY (NUMS) = IF VIA *CNG*, NUMBER OF LINES.
- * IF VIA *CNS*, NUMBER OF STRINGS.
- *
- * EXIT TO *NCM*.
- * IF STRING NOT FOUND, TO *LCT4*
- *
- * USES A - 0, 1, 4, 6, 7.
- * X - 0, 1, 4, 5, 6, 7.
- * B - 6.
- *
- * CALLS CHS, ITM, RDF, TSL, VRY, WTF.
- CNG SX0 E.SCR+160D SET LWA+1 OF SCRATCH, ENTRY
- EQ CNG1 PROCESS CHANGE
- CGS SX0 E.SCR+160D SET LWA+1 OF SCRATCH, ENTRY
- MX7 1
- BX0 X0+X7 SET STRING MODE
- CNG1 SA0 E.SCR SET FWA OF BUFFER
- RJ CHS CHANGE STRING(S)
- ZR B5,CNG5 IF STRING NOT FOUND
- NZ X5,CNG2 IF NO TRUNCATION
- SA1 P1RP CHECK IF STRING LENGTHS ARE EQUAL
- SA4 P1LP
- IX6 X1-X4
- SA1 P3RP
- SA4 P3LP
- IX1 X1-X4
- IX6 X6-X1
- ZR X6,CNG2 IF STRING LENGTHS ARE EQUAL
- RJ ITM ISSUE TRUNCATION MESSAGE
- CNG2 SA1 E.SCR
- SB6 E.STR-1
- SX7 B1
- * COPY LINE BACK FROM SCRATCH AREA.
- CNG3 BX6 X1
- SB6 B6+B1
- SA1 A1+B1
- SA6 B6
- PL X6,CNG3 IF NOT END OF LINE
- SB6 E.STR-1
- RJ TSL TRIM SPACES OFF LINE
- SA7 NOMOD
- SA7 E.LMOD
- RJ VRY VERIFY THE CHANGE
- BX6 X0
- AX6 59-1 =0 IF REGULAR, =-1 IF STRING MODE
- SA1 NUMS
- IX6 X1-X6 IF STRING, INCREMENT
- SX1 B1
- IX7 X6-X1
- IX6 X7-X1
- NG X6,NCM IF FINISHED
- SA7 A1+
- * ADVANCE POINTER AND CONTINUE.
- CNG4 BX5 X0 SAVE (X0)
- RJ WTF
- RJ RDF
- BX0 X5 RESTORE (X0)
- EQ CNG1 CONTINUE CHANGE
- * PROCESS STRING NOT FOUND.
- CNG5 SA1 NUMS
- PL X1,CNG4 IF NOT 0 OPTION
- EQ LCT4 ISSUE * STRING NOT FOUND.*
- DEL SPACE 4,10
- ** DEL - SET DELIMITER CHARACTER.
- *
- * ENTRY (NUMS) = NEW DELIMITER CHARACTER.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 2, 4, 6.
- * X - 1, 2, 3, 4, 6.
- DEL SA2 NUMS
- MX3 -18
- BX2 -X3*X2 REMOVE EXCESS CHARACTERS (IF -1)
- SA4 C.ON
- SX4 X4-Y.DEV
- ZR X4,DEL1 IF NOT CURRENTLY *Y/Z* LINE
- * NOTE- Y/Z DELIMIT COMMAND TAKES EFFECT
- * OUTSIDE OF *Y/Z* COMMAND STRING.
- SA1 C.STR-1
- BX1 X3*X1
- IX6 X1+X2
- SA6 A1
- DEL1 SA1 I.DEV+1
- BX1 X3*X1
- IX6 X1+X2
- SA6 A1
- SA1 S.DEV+1
- BX1 X3*X1
- IX6 X1+X2
- SA6 A1
- EQ NCM EXIT
- DLT SPACE 4,15
- ** DLT - DELETE LINE(S).
- *
- * ENTRY (NUMS) = COUNT (-0 = NO ADVANCE).
- * STRING FIELDS PARSED AND INITIALIZED.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 6, 7.
- * X - 1, 5, 6, 7.
- * B - 4.
- *
- * CALLS LOC, RDF, VRY, WTF.
- DLT1 SA1 NUMS
- NG X1,LCT4 IF -0 OPTION. (STRING NOT FOUND)
- RJ WTF
- DLT2 RJ RDF
- DLT SB4 E.STR-1 SET FWA SEARCH -1
- RJ LOC
- ZR B5,DLT1 IF STRING NOT IN LINE
- SA1 NUMS
- SX7 B1
- IX6 X1-X7 DECREMENT COUNT
- AX5 X1,B1
- SA6 A1
- SA7 NOMOD SET MODIFICATIONS MADE TO FILE
- RJ VRY VERIFY DELETED LINE
- NZ X5,DLT2 IF MORE TO DELETE
- RJ RDF CREAM EXISTING LINE
- EQ NCM EXIT
- DRF SPACE 4,10
- ** DRF - DELETE RECORD/FILE MARKS.
- *
- * ENTRY (NUMS) = NUMBER TO DELETE.
- * (X1) = ADDRESS OF DELETION COUNT CELL.
- *
- * USES A - 0, 1, 2, 6.
- * X - 1, 2, 6.
- *
- * CALLS RDF, WTF.
- DRF SA2 NUMS
- AX1 18 GET CELL ADDRESS
- SA0 X1 SAVE CELL
- NZ X2,DRF0 IF NOT ZERO
- SX2 1
- DRF0 BX6 X2
- SA6 A0 SET DELETION COUNT
- DRF1 RJ WTF WRITE CURRENT LINE
- RJ RDF READ NEXT
- SA1 A0
- NZ X1,DRF1 IF NOT DELETED
- MX6 0
- SA6 NOMOD SET MODIFICATIONS MADE
- EQ NCM EXIT
- PEC SPACE 4,15
- ** PEC - PROCESS EDIT COMMAND.
- *
- * ENTRY NONE.
- *
- * EXIT (INPMODE) = 1.
- * TO *NCM*.
- *
- * USES A - 6.
- * X - 6.
- *
- * MACROS WRITEC.
- PEC SX6 B1
- SA6 INPMODE CLEAR INPUT MODE FLAG
- WRITEC OUTPUT,(=C* EDIT*)
- EQ NCM EXIT
- EFQ SPACE 4,20
- ** EFQ - END, FILE, AND QUIT PROCESSOR.
- *
- * ENTRY (IFN) = FILE NAME PARAMETER.
- * (NUMS) = OPTIONS.
- *
- * EXIT IF TO TERMINATE XEDIT, TO *EXT*.
- * IF ERRORS, TO *CER* OR *NCM*.
- *
- * USES A - ALL.
- * X - ALL.
- * B - 2, 6, 7.
- *
- * CALLS CFF, PFM=, RDF, TOP.
- *
- * MACROS ERROR, FERROR, READ, RECALL, RENAME,
- * REWIND, STATUS.
- EFQ SA5 IFN GET SPECIFIED NAME
- SX6 B1
- MX7 0
- NZ X5,EFQ0 IF FILE NAME SPECIFIED
- SA5 ISFN USE *EDITFIL*
- EFQ0 SA7 SFET+5 CLEAR FNT/FST INFORMATION
- BX6 X6+X5
- SA7 A7+B1
- SA6 SFET
- RECALL E.IN WAIT ALL QUIET
- STATUS SFET,P OBTAIN INFORMATION
- SA4 SFET+5 GET FNT ENTRY
- SA1 SFET+1
- MX7 -6 SAVE FILE STATUS
- BX7 -X7*X4
- SA7 EFQB
- MX6 -8 ISOLATE PFM ERROR CODE
- MX7 1
- SA3 NUMS GET OPTIONS
- BX1 -X7*X1 CLEAR BIT 59
- LX4 -6 POSITION TO FILE TYPE
- BX6 -X6*X4 OBTAIN FILE TYPE
- AX1 -12 SHIFT DEVICE TYPE
- SX0 X6-PMFT =0 IF D.A. FILE
- ZR X0,EFQ1 IF DIRECT ACCESS FILE
- SX0 X6-QFFT
- ZR X0,EFQ1 IF QUEUE FILE
- SX0 X1-2RMT
- ZR X0,EFQ1 IF *MT* TYPE FILE
- SX0 X1-2RNT
- * (X0) = 0, IF FILE IS D.A., QUEUE, MT OR NT (NEED COPYBACK).
- * (X5) = FILE NAME.
- * (X3) = OPTIONS.
- * (X4) = FNT ENTRY SHIFTED LEFT -6.
- EFQ1 NZ X3,EFQ2 IF HAVE EXIT TYPE
- SX3 1BS0 SET DEFAULT OF LOCAL
- NZ X0,EFQ2 IF NOT DEFAULT OF COPYBACK
- SX3 1BS3 SET DEFAULT OF COPYBACK
- * CLEAR *L* FLAG IF *C* FLAG USED.
- EFQ2 BX6 X3
- SX7 B1
- LX6 0-3
- BX6 X7*X6 GET *C* FLAG
- BX3 -X6*X3 CONDITIONALLY CLEAR *L*
- LX1 X3
- * CHECK MODIFICATIONS ALLOWED TO FILE.
- SX7 50000B/100B
- SB2 EMI.*100B+1
- BX7 X7*X4
- NZ X7,CER IF NOT ALLOWED TO MODIFY FILE, EXIT
- EFQ3 NZ X0,EFQ4 IF NOT DA/MT/NT
- * IF DA/MT/NT MAKE SURE *L* NOT USED.
- SB2 EMI.*100B+2
- LX1 59-0
- NG X1,CER IF *L* USED, EXIT
- * (X3) = EXIT BITS (LOCAL,REPLACE,SAVE,COPYBACK).
- * (X5) = FINAL FILE NAME.
- EFQ4 SA2 NOMOD SET NOMOD TO NOMOD .OR. FS
- SA1 FS IF NOT ON SCRATCH FILE, COPY TO ONE
- SA0 X3 MOVE EXIT BITS TO A0
- BX6 X1*X2 UPDATE NOMOD
- MX7 0
- SA6 A2
- SA7 IWHERE SET =0 TO FORCE COPY IF AT LINE 1
- RJ TOP COPY FILE TO SCRATCH FILE
- SX0 A0 SET STATUS BITS TO X0
- SA4 EFQA-1
- EFQ5 SA4 A4+B1 GET NEXT OPTION
- ZR X4,EFQ10 IF END OF OPTIONS
- UX3,B7 X4
- SB6 X4
- LX1 B7,X0
- PL X1,EFQ5 IF OPTION NOT SPECIFIED
- JP B6 PROCESS OPTION
- * PROCESS PFM OPTIONS.
- EFQ6 SA1 E.IN GET LOCAL NAME
- LX3 18 GET PFM CODE
- SX7 B1
- ERRNZ PTRD-1
- BX6 X5+X7
- BX7 X7+X1 SET COMPLETE
- SA7 PFET SET LOCAL NAME
- SX7 X3
- SA6 PFET+8 SET PERMANENT NAME
- SA0 A6 SAVE FILE NAME ADDRESS
- SX2 A7 SET FET ADDRESS
- RJ PFM= MAKE REQUEST
- SA1 X2
- MX6 -8
- AX1 10
- BX6 -X6*X1 GET PFM ERROR
- ZR X6,EFQ9 IF VERIFY ACTION
- ERROR PFM.,X6 ISSUE PFM ERROR MESSAGE
- EQ EFQ11 END OF COMMAND
- * PROCESS LFM RENAME OPTION.
- EFQ7 SA1 EFQB
- ZR X1,EFQ7.1 IF *AUTO DROP* STATUS
- SX1 X1-NDST
- NZ X1,EFQ8 IF STATUS OTHER THAN *NO AUTO DROP*
- EFQ7.1 SA0 E.IN+6
- BX6 X5
- SA6 A0 SET NEW NAME INTO FET
- RENAME E.IN RENAME SCRATCH FILE
- SA1 X2
- SX7 17BS10
- BX7 X7*X1
- SA7 FS INDICATE NOT READING SCRATCH FILE
- NZ X7,EFQ7.2 IF ERROR IN *RENAME*
- SA1 EFQB GET FILE STATUS
- ZR X1,EFQ9 IF *AUTO DROP* STATUS
- SETFS E.IN,NAD RESTORE *NO AUTO DROP* STATUS
- SA1 X2 CHECK FOR ERRORS
- SX4 17BS10
- BX7 X4*X1
- ZR X7,EFQ9 IF NO ERRORS IN *SETFS*
- EFQ7.2 ERROR LFM.
- EQ EFQ11 END OF COMMAND
- EFQ8 READ E.IN START READ (ASSUMES NAME IN FET)
- SX6 B1
- BX6 X5+X6 SET COMPLETE
- SA6 CFET
- REWIND A6,RECALL RESET COPY FILE
- MX6 0
- SA6 CFET+5 CLEAR JUNK LEFT VIA STATUS
- SA6 A6+B1
- RJ CFF COPY FILE
- REWIND E.IN RESET EDIT FILE
- REWIND CFET,RECALL REWIND COPY FILE
- RECALL E.IN
- SA0 CFET SET FILE NAME POINTER
- * VERIFY ACTION.
- EFQ9 SA1 VERIFY
- SA4 A4 RESTORE THE *EFQ* OPTION WORD
- SX2 A0 SET FET ADDRESS
- PL X1,EFQ5 IF NOT TO VERIFY
- AX4 18
- SA0 A4 SAVE VALUE OF A4
- FERROR X2,X4
- SA4 A0 RESET A4
- EQ EFQ5 GET NEXT OPTION
- * PROCESS END OF COMMAND.
- EFQ10 SA1 INDEX
- SX1 X1-.FILE
- NZ X1,EXT IF EXIT XEDIT
- EFQ11 READ E.IN,RECALL
- RJ RDF
- EQ NCM PROCESS END OF COMMAND
- * TABLE OF *EFQ* OPTIONS.
- * FORMAT IS-
- * 12/2000B+59-BIT NUMBER,6/PFM CODE,24/VERIFY ADDR,18/ROUTINE
- EFQA VFD 12/2000B+59-2,6/1,24/FSV.,18/EFQ6 SAVE
- VFD 12/2000B+59-1,6/6,24/FRP.,18/EFQ6 REPLACE
- VFD 12/2000B+59-0,6/0,24/FLC.,18/EFQ7 LOCAL
- VFD 12/2000B+59-3,6/0,24/FCP.,18/EFQ8 COPYBACK
- DATA 0
- EFQB BSS 1 STORAGE FOR EDIT FILE STATUS
- FLL SPACE 4,15
- ** FLL - FIND LONG LINE PROCESSOR.
- *
- * ENTRY (NUMS) = NUMBER OF LONG LINES TO FIND.
- * (IW) = WIDTH. IGNORE LINES OF LENGTH .LE. WIDTH.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6.
- *
- * CALLS SAC, VFY.
- FLL RJ SAC SET ASCII PROCESSING
- FLL1 SA1 E.STR-1 GET CHARS IN CURRENT LINE
- SA2 IW
- IX1 X2-X1
- PL X1,FLL2 IF LINE TOO SHORT
- RJ VRY VERIFY LONG LINE
- SA1 NUMS
- SX6 B1
- IX6 X1-X6
- AX1 1
- ZR X1,NCM IF COUNT FINISHED, EXIT
- SA6 A1
- FLL2 RJ WTF ADVANCE TO NEXT LINE
- RJ RDF
- EQ FLL1 CHECK NEXT LINE
- FLN SPACE 4,15
- ** FLN - ADVANCE TO SPECIFIED LINE NUMBER.
- *
- * ENTRY (NUMS) = LINE NUMBER.
- *
- * EXIT TO *VRT*.
- *
- * USES A - 1.
- * X - 1, 6.
- *
- * CALLS GLN.
- FLN SA1 NUMS
- SX6 B1
- IX6 X1-X6
- PL X6,FLN1 IF LINE NUMBER SPECIFIED
- SX1 B1+
- FLN1 RJ GLN GET LINE NUMBER
- EQ VRT EXIT, VERIFY LINE
- IIB SPACE 4,15
- ** IIB - *INSERT* AND *INSERT BEFORE* PROCESSOR.
- *
- * ENTRY (NUMS) = NUMBER OF LINES TO INSERT.
- * (X1) = PROCESSOR ADDRESS.
- *
- * EXIT TO *NCM*.
- *
- * USES X - 1, 2, 6, 7.
- * A - 0, 1, 2, 6, 7.
- * B - 7.
- *
- * CALLS RDL, TCD, TLB, WTF.
- *
- * MACROS WRITEC.
- *
- * NOTES A NULL LINE WILL OVERRIDE THE LINE COUNT.
- IIB BSS 0 ENTRY
- AX1 18 GET ROUTINE JUMP ADDRESS
- SA2 NUMS
- SA0 X1 SET JUMP ADDRESS
- SX6 B1
- IX6 X2-X6
- SA6 A2+
- IIB1 RJ RDL GET DATA LINE
- NZ X1,NCM IF A NULL LINE ENCOUNTERED
- RJ TCD TAB CODED DATA LINE
- IIB2 SB7 A0
- JP B7 EXECUTE PROCESSOR
- * *INSERT BEFORE* PROCESSOR.
- IIB3 WRITEC E.OUT,D.LINE PUT LINE JUST RECEIVED
- SA1 IWHERE UPDATE *IWHERE*
- SX6 B1
- IX6 X1+X6
- SA6 A1+
- EQ IIB5 PROCESS NEXT LINE
- * *INSERT* PROCESSOR.
- IIB4 RJ WTF WRITE EXISTING LINE
- * MOVE NEW LINE TO *E.LINE*.
- RJ TLB TRANSFER LINE TO BUFFER
- IIB5 SA1 NUMS
- SX6 B1
- IX6 X1-X6
- BX7 X7-X7
- SA6 A1 DECREMENT LINES LEFT
- SA7 NOMOD SET MODIFICATIONS MADE
- PL X6,IIB1 IF MORE LINES
- EQ NCM EXIT
- INP SPACE 4,15
- ** INP - ENTRY INPUT MODE REQUEST.
- *
- * ENTRY (NUMS) = ESCAPE CHARACTER.
- *
- * EXIT IF ERROR, TO *ABT* OR *CER*.
- * ELSE, TO *PEC*.
- *
- * USES A - 1, 2, 6, 7.
- * X - 1, 2, 6, 7.
- * B - 6, 7.
- *
- * CALLS RDL, RTA, STK, TAB, UPL, WTF.
- *
- * MACROS WRITEC.
- INP SA1 NUMS MOVE INPUT ESCAPE CHARACTER
- SA2 BATCH
- BX6 X1
- SB6 =C+ *INPUT* ESCAPE CHAR. REQUIRED - BATCH MODE.+
- PL X1,INP0 IF CHARACTER SPECIFIED
- NZ X2,ABT IF BATCH MODE, EXIT
- INP0 SA6 INPCHAR SET ESCAPE CHARACTER
- INP1 MX7 59 SET INPUT MODE
- SA7 INPMODE
- WRITEC OUTPUT,(=C* INPUT*)
- INP2 SA1 PREFIX
- SX6 1BS"PLUS"
- .CYB IF DEF,CYBRNET
- BX6 -X6*X1 CLEAR PLUS PREFIX
- .CYB ELSE
- BX6 X6+X1 SET + PREFIX
- .CYB ENDIF
- SA6 A1
- RJ RDL READ DATA LINE
- NZ X1,PEC IF <CR> (RETURN TO EDIT MODE)
- SA1 D.LINE
- SB6 D.STR
- RJ UPL UNPACK TEXT LINE
- SA1 D.STR
- SA2 INPCHAR
- IX2 X2-X1
- SB6 A1-B1
- ZR X2,INP3 IF INPUT MODE ESCAPE CHAR
- MX6 0
- SA6 NOMOD SET MODIFICATIONS MADE
- RJ TAB TAB TEXT LINE
- RJ WTF
- SB7 E.LINE SET DESTINATION
- SB6 D.STR
- RJ RTA PACK LINE INTO EDIT LINE BUFFER
- EQ INP2 PROCESS NEXT LINE
- INP3 SB7 S.LINE PACK COMMAND LINE INTO SPECIAL BUFFER
- SB6 D.STR+1 AND SKIP ESCAPE CHARACTER
- RJ RTA
- SA1 S.DEV
- RJ STK PROCESS ESCAPED COMMANDS
- SB2 STK.
- EQ CER COMMAND STACKING ERROR, EXIT
- LCT SPACE 4,20
- ** LCT - LOCATE SPECIFIED STRING.
- *
- * ENTRY (X5) .NE. 0.
- * (NUMS) = NUMBER OF MATCHES TO FIND.
- * IF -0, THEN DO NOT ADVANCE POINTER.
- * (MCOUNT) = 0.
- * STRING POINTERS ARE INITIALIZED PROPERLY.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 2, 3, 6, 7.
- * X - 1, 2, 3, 5, 6, 7.
- * B - 4.
- *
- * CALLS LOC, RDF, VRY, WTF.
- *
- * MACROS ERROR.
- IF DEF,TIMES
- LCTA BSS 0 TIMING ENTRY
- SX5 0 SET NOT TO CALL LOC
- ENDIF
- LCT BSS 0 NORMAL ENTRY
- SA1 NUMS
- NZ X1,LCT1 IF COUNT IS .NE. 0
- NG X1,LCT1 IF *0* COUNT WAS SPECIFIED
- SX6 B1 RESET COUNT TO 1
- SA6 A1
- LCT1 SB4 E.STR-1 SET FWA-1 FOR SEARCH
- IF DEF,TIMES,1
- ZR X5,LCT1.1 IF IN DEBUGGING MODE
- RJ LOC SEARCH EXISTING LINE FOR STRING
- IF DEF,TIMES,1
- LCT1.1 BSS 0
- ZR B5,LCT3 IF STRING NOT FOUND
- RJ VRY
- SA2 MCOUNT
- SA1 NUMS
- SX6 B1
- IX7 X2+X6 INCREMENT NUMBER OF MATCHES
- IX6 X1-X6 DECREMENT NUMBER OF LINES
- SA7 A2
- AX1 1
- ZR X1,NCM IF FINISHED, EXIT
- SA6 A1
- LCT2 RJ WTF ADVANCE TO NEXT LINE
- RJ RDF
- EQ LCT1 SEARCH NEXT LINE
- * STRING NOT IN LINE. CHECK FOR *0* OPTION.
- LCT3 SA1 NUMS
- NZ X1,LCT2 IF NOT *0* OPTION
- LCT4 ERROR SNF. ENTRY FOR * STRING NOT FOUND.*
- SA3 C.STR-1 SET TO *READ* FOR NEXT CMD
- PX6 B0,X3
- SA6 A3
- EQ NCM EXIT
- MOD SPACE 4,10
- ** MOD - MODIFY LINE(S).
- *
- * ENTRY AT *MOD* FOR *MODIFY* COMMAND.
- * AT *MOD1* FOR *QMOD* COMMAND.
- * AT *MOD2* FOR *YQMOD* COMMAND.
- *
- * USES A - 1, 3, 6, 7.
- * X - 1, 3, 6, 7.
- *
- * CALLS ETL, ITM, MDY, PCN, RDF, RDL, SAC, SCD, VRY, WTF.
- * ENTRY TO PROCESS *MODIFY* COMMAND.
- MOD RJ SCD SET CODED FOR SHIFT
- SX6 1
- SA1 E.LINE
- SA6 NUMS FORCE COUNT TO 1
- SA3 MODA SET SHIFT WORD
- RJ ETL ECHO TEXT LINE
- EQ MOD2 PERFORM MODIFICATION
- * ENTRY FOR *QMOD* COMMAND.
- MOD1 RJ PCN PRINT COLUMN NUMBERS
- * ENTRY FOR *YQMOD* COMMAND.
- MOD2 RJ SAC SET ASCII PROCESSING
- RJ RDL READ DATA LINE
- NZ X1,NCM IF NOTHING THERE, EXIT
- MOD3 RJ MDY MODIFY LINE
- PL B3,MOD4 IF NO TRUNCATION
- RJ ITM
- MOD4 SX7 1
- SA7 NOMOD SET MODIFICATIONS MADE
- SA7 E.LMOD SET LINE MODIFICATIONS MADE
- RJ VRY AND THEN VERIFY IT
- SA1 NUMS
- SX6 B1
- IX6 X1-X6
- AX1 1
- ZR X1,NCM IF FINISHED
- SA6 A1
- RJ WTF
- RJ RDF
- EQ MOD3 PROCESS NEXT LINE
- MODA CON 2L +11 PARAMETER FOR *ETL*
- MOD RMT BATCH PARAMETER DEFINITION
- CON 3L +17
- RMT
- NXT SPACE 4,10
- ** NXT - PROCESS NEXT COMMAND.
- *
- * ENTRY (NUMS) = NUMBER OF LINES TO MOVE.
- * (NUMS+1) = DIRECTION OF MOVE (-0 = BACKWARDS,
- * +0 = FORWARDS).
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6.
- *
- * CALLS MPR, VRT.
- NXT SA1 NUMS
- MX6 0 SET E.NMODE TO CODED
- SA2 A1+B1
- BX1 X1-X2 OBTAIN PROPER DISPLACEMENT
- NZ X1,NXT1 IF NOT ZERO DISPLACEMENT (ASSUME 1)
- SX1 B1 SET *NEXT-1* COMMAND
- NXT1 SA6 E.NMODE
- RJ MPR MOVE THE POINTER
- EQ VRT VERIFY AND RETURN
- PNT SPACE 4,15
- ** PNT - PRINT COMMAND PROCESSOR.
- *
- * ENTRY (NUMS) = NUMBER OF LINES TO PRINT.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 2, 4, 6.
- * X - 1, 2, 4, 6.
- *
- * CALLS RDF, SCD, WTF.
- *
- * MACROS WRITEC.
- PNT SA1 NUMS
- SA2 IWHERE
- SX6 B1
- IX6 X1-X6 DECREMENT BY ONE (MAKE TESTING EASIER)
- NG X2,PNT2 IF IN CREATION MODE
- SA6 NUMS
- RJ SCD SET CODED LINE FORMAT
- PNT1 SA4 IW PRINT LINE
- WRITEC OUTPUT,E.LINE
- SA1 NUMS
- SX6 B1
- IX6 X1-X6 DECREMENT COUNT
- NG X6,NCM IF DONE, EXIT
- SA6 NUMS
- RJ WTF
- RJ RDF
- EQ PNT1 PRINT NEXT LINE
- PNT2 WRITEC OUTPUT,(=C* NULL LINE - IN CREATION MODE*)
- EQ NCM EXIT
- RLP SPACE 4,15
- ** RLP - *REPLACE* PROCESSOR.
- *
- * ENTRY (NUMS) = NUMBER OF LINES TO REPLACE.
- *
- * EXIT TO *NCM*.
- *
- * USES X - 2, 6, 7.
- * A - 2, 6, 7.
- *
- * CALLS RDF, RDL, TCD, TLB, WTF.
- *
- * NOTES A NULL LINE WILL OVERRIDE THE LINE COUNT.
- RLP1 RJ WTF COPY DATA LINE TO EDIT FILE
- * READ EDIT FILE. IF EOI, EXIT TO *NCM*.
- RJ RDF
- RLP BSS 0 ENTRY
- RJ RDL GET DATA LINE
- NZ X1,NCM IF EMPTY <CR> WAS ENCOUNTERED
- RJ TCD TAB CODED DATA LINE
- RJ TLB TRANSFER LINE TO *E.LINE*
- SA2 NUMS DECREMENT LINE COUNT
- SX7 B1
- IX6 X2-X7
- IX2 X6-X7
- BX7 X7-X7
- SA7 NOMOD SET MODIFICATIONS MADE
- SA6 A2+
- PL X2,RLP1 IF LINE COUNT NOT EXHAUSTED
- EQ NCM EXIT
- RMA SPACE 4,15
- ** RMA - PROCESS RIGHT MARGIN COMMAND.
- *
- * ENTRY (NUMS) = NEW VALUE OF MARGIN (0 = RESET TO MAXIMUM).
- *
- * EXIT (IW) = THE VALUE OF THE RIGHT MARGIN.
- * IF NO PARAMETER GIVEN, *MAXWD*.
- * IF WIDTH IS NOT IN RANGE, TO *CER*, ELSE TO *NCM*.
- *
- * USES A - 1, 6.
- * X - 1, 2, 3, 6.
- * B - 2.
- RMA SA1 NUMS
- SX3 X1-MAXWD-1
- NZ X1,RMA1 IF WIDTH SPECIFIED (ELSE DEFAULT TO 160)
- SX1 160D
- RMA1 SX2 X1-MINWD
- BX3 -X3+X2
- LX6 X1
- SB2 ILL.
- NG X3,CER IF WIDTH NOT IN RANGE
- SA6 IW
- EQ NCM EXIT
- SWN SPACE 4,15
- ** SWN - SET WINDOWS.
- *
- * ENTRY (NUMS) = LEFT WINDOW.
- * (NUMS+1) = RIGHT MARGIN.
- *
- * EXIT (LMW) = LEFT WINDOW.
- * (RMW) = RIGHT WINDOW.
- * (RTWD) = RIGHT WINDOW MARGIN.
- * IF ERROR, TO *CER*, ELSE TO *NCM*.
- *
- * USES A - 1, 2, 6, 7.
- * X - 1, 2, 3, 4, 5, 6, 7.
- * B - 2.
- SWN SA1 NUMS
- SA2 A1+B1
- IX3 X2-X1 POSITIVE, IF LEFT .LE. RIGHT
- SX4 X1-1 POSITIVE IF 0 .LT. LEFT
- SX5 X2-161 NEGATIVE IF RIGHT .LE. 160
- BX3 X3+X4
- BX3 -X5+X3
- * (X3) = POSITIVE, IF 0 .LT. LEFT .LE. RIGHT .LE. 160.
- SB2 ARG.
- NG X3,CER IF ARGUMENTS NOT PROPER
- SX7 X2+
- SA7 RTWD
- SX6 X1+E.STR-2 SET FWA -1 OF START
- SX7 X2+E.STR SET LWA+1 FOR SEARCH
- SA6 LMW
- SA7 A6+B1
- EQ NCM EXIT
- RST SPACE 4,15
- ** RST - RESTORE FILE TO PREVIOUS CONDITION.
- *
- * ENTRY NONE.
- *
- * EXIT TO *NCM*.
- * (IWHERE) = 0.
- * (NOMOD) = 73B, INDICATES NO MODIFICATIONS.
- *
- * USES A - 6, 7.
- * X - 6, 7.
- *
- * CALLS TOP.
- RST BX7 X7-X7 SET IWHERE TO 0 (FORCE REWIND)
- MX6 73B SET *NOMOD* TO INDICATE NO MODIFICATIONS
- SA7 IWHERE
- SA6 NOMOD
- RJ TOP RESET FILES
- EQ NCM EXIT
- SCH SPACE 4,10
- ** SCH - SET CHARACTER IN WORD.
- *
- * ENTRY (NUMS) = CHARACTER FOR PLACEMENT.
- * (X1) = ADDRESS TO PLACE CHARACTER.
- *
- * EXIT TO *NCM*
- * ((X1)) = (NUMS).
- *
- * USES A - 2, 6.
- * X - 1, 2, 6.
- SCH AX1 18 SHIFT MODIFIER WORD
- SA2 NUMS
- SX1 X1 REMOVE EXCESS CHARACTERS
- LX1 -1
- BX6 X2
- SA6 X1+ PUT CHARACTER
- EQ NCM EXIT
- SFG SPACE 4,20
- ** SFG - SET FLAG.
- *
- * ENTRY (X1) = COMMAND DESCRIPTOR WORD, FORM IS -
- * 24/,17/ADDR,1/MODE,18/
- * ADDR = ADDRESS OF THE FLAG TO SET.
- * MODE = SET, IF *VERIFY* MODE.
- * CLEAR, IF *BRIEF* MODE.
- * (NUMS) = +- PARAMETER,
- * IF NEGATIVE, SET FLAG TO CONDITION OPPOSITE
- * THAT INDICATED BY *MODE*.
- * IF POSITIVE, SET FLAG TO CONDITION INDICATED
- * BY *MODE*.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 3, 6.
- * X - 1, 3, 6.
- SFG AX1 18
- SX1 X1 ISOLATE PARAMETER
- SA3 NUMS GET +- MODE
- LX1 -1
- BX6 X1-X3 OBTAIN PROPER CONDITION
- SA6 X1 SAVE NEW VALUE
- EQ NCM EXIT
- STB SPACE 4,10
- ** STB - SET TABS.
- *
- * ENTRY (NUMS TO NUMS+NTABS) = TAB SETTINGS DESIRED.
- *
- * EXIT (TABS - TABS+NTABS-1) = IF ALL PARAMETERS ARE VALID
- * NEW TAB SETTINGS.
- * IF PARAMETERS ARE VALID, TO *NCM*, ELSE TO *CER*.
- *
- * USES A - 1, 2, 6, 7.
- * X - 1, 2, 6, 7.
- * B - 2, 5, 6, 7.
- STB SA1 IW
- SB7 160 DEFAULT LINE WIDTH
- ZR X1,STB0 IF USING DEFAULT
- SB7 X1
- STB0 SB6 B0 SET VALUE OF LAST TAB
- SA1 NUMS-1
- MX6 0
- SA6 NUMS+NTABS ASSURE ZERO MARKER
- SB2 ILL. ERROR MESSAGE
- STB1 SA1 A1+B1
- ZR X1,STB2 IF END OF LINE (ALL OK)
- SB5 X1
- GT B5,B7,CER IF TAB IS PAST LINE WIDTH
- LE B5,B6,CER IF TABS IS .LE. LAST TAB
- SB6 B5
- EQ STB1 CHECK NEXT TAB
- STB2 SA2 NUMS-1
- SA6 TABS CLEAR FIRST TAB
- STB3 SA2 A2+B1 GET NEXT TAB
- SA6 A6+B1 ZERO NEXT TAB
- BX7 X2
- SA7 A6-B1 PUT CURRENT TAB
- NZ X2,STB3 IF NOT FINISHED
- EQ NCM TABS SET, EXIT
- TGL SPACE 4,15
- ** TGL - PROCESS TOGGLES.
- *
- * ENTRY (X1) = (DECA), ADDRESS OF WORD TO PROCESS.
- * (NUMS) = *+* PARAMETER.
- * IF (NUMS) .GT. 0, SET FLAG TO ON.
- * IF (NUMS) .LT. 0, SET FLAG TO OFF.
- * IF (NUMS) .EQ. 0, TOGGLE STATE OF FLAG.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 2, 3, 6.
- * X - 1, 2, 3, 6.
- TGL AX1 18 OBTAIN ADDRESS
- SA3 NUMS
- SA2 X1 FLAG TO PROCESS
- NZ X3,TGL1 IF +- SPECIFIED
- LX3 X2 MOVE TOGGLE UP
- TGL1 BX6 -X3 TOGGLE FLAG
- SA6 A2
- EQ NCM EXIT
- TRN SPACE 4,10
- ** TRN - TRUNCATE COMMAND.
- *
- * ENTRY (NUMS) = NUMBER OF LINES TO PROCESS.
- *
- * USES A - 1, 5, 6, 7.
- * X - 1, 2, 5, 6, 7.
- * B - 2, 6.
- *
- * CALLS RDF, SAC, TSL, VRY, WTF.
- TRN BSS 0 ENTRY
- SA5 IW GET DESIRED WIDTH
- RJ SAC SET ASCII MODE
- TRN1 SA1 E.STR-1 GET EXISTING LINE WIDTH
- IX2 X5-X1
- SX7 B1
- PL X2,TRN2 IF LINE ALREADY SHORT
- SB2 X5+1
- MX6 2
- SA7 E.LMOD SET LINE MODIFICATION
- SA6 A1+B2 SET NEW END OF LINE
- SA7 NOMOD SET MODIFICATION MADE TO FILE
- SB6 E.STR-1 SET LINE WIDTH CELL
- RJ TSL TRIM SPACES OFF LINE
- TRN2 RJ VRY VERIFY LINE
- SA1 NUMS
- SX6 B1+
- IX6 X1-X6 DECREMENT COUNT
- AX1 1
- ZR X1,NCM IF FINISHED, EXIT
- SA6 A1+
- RJ WTF
- RJ RDF
- EQ TRN1 RETURN TO PROCESS NEXT LINE
- TTN SPACE 4,10
- ** TTN - TOP AND TOPNULL PROCESSOR.
- *
- * ENTRY (INDEX) = COMMAND TABLE INDEX FOR CURRENT COMMAND.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6.
- *
- * CALLS TOP.
- * REWIND FILES, IF *TN*, *TOP* WILL INSERT A BLANK LINE.
- TTN RJ TOP
- SA1 INDEX
- SA2 NOMOD
- SX1 X1-.TOPNUL POSITIVE, IF *TOPNULL*, MINUS, IF *TOP*
- * HANDLE CASE WHERE (IWHERE) = 1, AND COMMAND IS *TOP*,
- * AND (NOMOD) = FALSE.
- BX6 X1*X2
- SA6 A2
- EQ NCM EXIT
- WHR SPACE 4,15
- ** WHR - PROCESS WHERE COMMAND.
- *
- * ENTRY (IWHERE) = CURRENT LINE COUNT.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1.
- * X - 1, 6.
- *
- * CALLS CDD.
- *
- * MACROS WRITEC, WRITEO.
- WHR SA1 IWHERE
- NG X1,WHR1 IF IN CREATION MODE
- RJ CDD
- MX1 12
- BX6 -X1*X6
- LX6 12 MOVE END OF LINE BYTE
- WRITEO OUTPUT
- EQ NCM EXIT
- WHR1 WRITEC OUTPUT,(=C* 0 - IN CREATION MODE.*)
- EQ NCM EXIT
- WRM SPACE 4,10
- ** WRM - WRITE RECORD MARK.
- *
- * ENTRY (X1) = BITS 18 - 35 CONTAIN DESIRED *CIO* FUNCTION.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 6.
- * X - 1, 2, 6, 7.
- *
- * CALLS =XCIO=.
- WRM SX2 FTA SELECT FET
- AX1 18
- SX7 X1
- MX6 0
- BX7 -X7 SPECIFY AUTO RECALL
- SA6 NOMOD SET MODIFICATION
- RJ =XCIO=
- EQ NCM EXIT
- YZP SPACE 4,15
- ** YZP - Y/Z COMMAND PROCESSOR.
- *
- * ENTRY (NUMS) = IF NO PARAMETER, 0
- * ELSE, FWA OF PARAMETERS.
- * (NUMS+1) = LWA OF PARAMETER.
- *
- * EXIT IF ERROR, TO *CER*, ELSE TO *STK*.
- *
- * USES A - 1, 2, 3, 4, 5, 6, 7.
- * X - 1, 2, 3, 4, 5, 6, 7.
- * B - 6, 7.
- *
- * CALLS RTA, STK.
- YZP SA1 NUMS GET FWA OF PARAMETER
- SA2 A1+B1 GET LWA+1
- SA3 X1 DELIMITER CHARACTER
- ZR X1,YZP2 IF NO PARAMETER
- SA5 INDEX
- SA4 X2 LAST CHARACTER
- SB6 X1+B1 SET FWA OF STRING TO PACK
- SX5 X5-.Z 0 IF *Z* COMMAND
- MX7 1
- NZ X5,YZP1 IF NOT *Z* COMMAND
- BX3 X3+X7 SET TO ECHO COMMANDS
- YZP1 LX6 X3 MOVE DELIMITER/ECHO FLAG
- SB7 Y.LINE
- SA6 Y.DEV+1 SET DELIMITER CHARACTER
- BX7 X7+X4 SET PSEUDO END OF LINE
- SA7 A4
- RJ RTA PACK LINE
- SA1 NUMS+1
- SA1 X1+ GET PSEUDO END OF LINE
- MX7 1
- BX6 -X7*X1 REMOVE PSEUDO END OF LINE
- LX1 1
- NG X1,YZP1.1 IF TRUE END OF LINE
- SA6 A1+ REPLACE ENTRY
- YZP1.1 SA1 Y.DEV
- RJ STK STACK ENTRY. IF NO ERRORS, EXIT.
- SB2 STK.
- EQ CER IF STACKING ERROR, EXIT
- YZP2 SB2 ARG.
- EQ CER PARAMETER ERROR, EXIT
- TITLE SUBROUTINES.
- ABT SPACE 4,15
- ** ABT - ABORT XEDIT.
- *
- * ENTRY (B6) = ADDRESS OF ABORT MESSAGE.
- *
- * EXIT TO *EXT*.
- * (EXTA) = -1, INDICATES ABORT.
- *
- * USES A - 6.
- * X - 6.
- *
- * MACROS WRITEC.
- *
- * NOTES DO NOT *RJ* TO THIS SUBROUTINE.
- ABT SX6 -1 CHANGE EXIT MODE
- SA6 EXTA
- WRITEC OUTPUT,B6 ISSUE MESSAGE
- EQ EXT EXIT XEDIT
- ASF SPACE 4,20
- ** ASF - ANALYZE STRING FIELDS.
- *
- * ENTRY (P1LP - P3RP) = POINTERS TO STRINGS.
- *
- * EXIT STRING DEFINITIONS CHECKED AGAINST BITS IN COMMAND
- * MODIFIER WORD.
- * (LOCA - LOCC) = INITIALIZED FOR USE BY *LOC*.
- * (SPCP) = NEGATIVE IF WINDOW WAS SPECIFIED.
- * (B2) = 0 IF NO ERROR ENCOUNTERED,
- * ELSE, ORDINAL OF ERROR MESSAGE.
- * IF ERROR, TO *NER*.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * X - 0, 1, 2, 3, 4, 6, 7.
- * B - 2, 3, 4, 5, 6, 7.
- *
- * CALLS SAC, VIS.
- *
- * NOTES ROUTINE IS DESIGNED TO BE CALLED IMMEDIATELY AFTER
- * THE STRINGS ARE PARSED VIA *PRM*.
- ASF11 SA1 COMMAND
- SA2 P3RP
- LX1 59-33 MODIFIER 15, 2 STRINGS NEEDED
- PL X1,ASF IF NOT ABOVE
- ZR X2,ASF10 IF NOT 2 STRINGS (ARG ERROR)
- ASF PS ENTRY/EXIT
- SA3 P1LP
- SA2 PREFIX
- ZR X3,ASF9 IF NO STRINGS
- SA1 GLOBAL
- MX6 -18
- LX2 59-/PREFIX/W (NEXT BIT IS -A-)
- BX7 -X6*X1 SET GLOBAL
- LX6 B1,X2
- SX4 B0
- PL X6,ASF1 IF NOT ANCHOR
- MX4 1
- ASF1 LX7 18
- SX1 E.STR-1 SET MINIMUM STARTING-1
- BX6 X6+X2
- PL X6,ASF2 IF NOT WINDOW/ANCHOR
- SA1 LMW GET WINDOW LEFT MARGIN
- ASF2 IX7 X7+X4
- BX7 X1+X7
- SA7 LOCA SAVE FIRST LOCATE PARAMETER WORD
- * INITIALIZE *LOCB* AND *LOCC*.
- *
- * NOTE- LWA+1 FOR SCAN IS SET VERY HIGH. THIS IS DONE FOR
- * TWO REASONS. THE FIRST, THIS ROUTINE IS ALSO CALLED BY
- * *OCTCHANGE*, WHICH MAY USE DOUBLE SIZE BUFFERS, AND THE
- * SECOND IS THAT IT DOES NOT MAKE MUCH DIFFERENCE AS THE
- * LOCATE SUBROUTINE, *LOC*, WILL FORCE LWA+1 TO BECOMES THE
- * EOL CHARACTER OF THE STRING BEING SEARCHED.
- SA1 P1LP
- SB2 E.STR+3*MAXWD 1.SET LWA+1 AVAIL FOR SCAN
- SA3 P2LP
- SB3 B2 2. SET LWA+1 AVAIL FOR SCAN
- MX0 1
- SA4 RMW OBTAIN WINDOW RIGHT MARGIN+1
- SB5 18
- SB6 B0 1. STRING LENGTH
- SB4 X4
- LX6 X1,B5 1. FWA COMPARE
- SB7 B7-B7 2. STRING LENGTH
- LX7 X3,B5 2. FWA COMPARE
- SA4 SPCP RESET WINDOW PARAMETER
- BX1 X7
- BX7 -X0*X4
- SA7 SPCP
- BX7 X1
- SA1 P1LP
- SA4 TRIM
- BX4 X4+X2 NEG. IF WINDOW OR TRIM
- PL X4,ASF3 IF NOT ABOVE
- BX6 X0+X6 1. SET TRIM
- BX7 X0+X7 2. SET TRIM
- ASF3 PL X2,ASF4 IF NOT WINDOW PROCESSING
- SA4 SPCP SET WINDOW PARAMETER
- BX4 X4+X0
- BX2 X7
- BX7 X4
- SA7 SPCP
- BX7 X2
- SB2 B4
- SB3 B4
- ASF4 LX2 /PREFIX/W-/PREFIX/A
- SA4 PRMB GET AND/NOT LOGIC FLAG
- ZR X3,ASF5 IF ONLY ONE STRING
- NZ X4,ASF5 IF *---* LOGIC
- BX6 X0+X6 1. SET TRIM (ALL CHARS SIGNIFICANT)
- ASF5 BX0 X0*X4
- LX0 36-59 POSITION FLAG
- PL X2,ASF6 IF NOT ANCHOR
- SB2 B4 1. RESET RIGHT MARGIN
- ASF6 BX7 X7+X0 2. SET POS/NEG LOGIC FLAG
- SA2 A1+B1
- SA4 A3+B1
- IX1 X2-X1
- IX3 X4-X3
- SB6 X1
- SB7 X3
- SX1 B2
- SX3 B3
- BX6 X6+X1
- BX7 X7+X3
- PX6 B6
- PX7 B7
- SA6 LOCB
- SA7 A6+B1
- SA1 LOCE SET NORMAL SEARCH
- GT B6,ASF7 IF FIRST STRING NOT NULL
- NZ X4,ASF8 IF THERE IS A SECOND STRING
- SA1 LOCF SET NULL SEARCH
- ASF7 BX6 X1
- SA6 LOC+1 CHANGE ENTRY POINT TO *LOC*
- * RJ VIS VOID INSTRUCTION STACK
- RJ SAC SET ASCII PROCESSING
- SB2 B0 SET NO ERROR
- EQ ASF RETURN
- ASF8 GT B7,ASF7 IF SECOND STRING NOT NULL
- EQ ASF10 SET *ARG* ERROR
- ASF9 SA1 LOCD SET FOUND STRING (NO FIELDS)
- SA2 COMMAND
- SB2 B0 SET *ASF* SUCCESSFUL
- BX6 X1
- SA6 LOC+1
- RJ VIS VOID INSTRUCTION STACK
- LX2 59-34 MODIFIER BIT 16, 1 STRING NEEDED
- PL X2,ASF11 IF NOT ABOVE
- ASF10 SB2 ARG. SET ERROR
- EQ ASF RETURN
- BTL SPACE 4,10
- ** BTL - ISSUE *BAD TEXT LINE ENCOUNTERED* MESSAGE.
- *
- * ENTRY NONE.
- *
- * EXIT TO *NCM*.
- *
- * USES B - 2.
- *
- * CALLS IEM.
- BTL SB2 BTL. SET UP ERROR MESSAGE
- RJ IEM ISSUE ERROR MESSAGE
- EQ NCM EXIT
- CER SPACE 4,15
- ** CER - COMMAND ERROR PROCESSOR.
- *
- * ENTRY (B2) = ERROR MESSAGE ORDINAL.
- *
- * EXIT TO *NCM* AFTER POPPING STACK TO MAIN DEVICE AND
- * READING NEXT COMMAND LINE (VIA *NCL*).
- * IF BATCH MODE, TO *ABT*.
- *
- * USES A - 1, 2, 5, 6, 7.
- * X - 1, 2, 5, 6, 7.
- * B - 2, 6, 7.
- *
- * CALLS IEM.
- CER ERROR B2 ISSUE ERROR MESSAGE
- * ENTRY POINT FOR COMMAND ERROR, BUT ISSUED OWN MESSAGE.
- CER1 SA2 BATCH ABORT/ELSE RETURN TO MAIN INPUT
- SB6 =C* BATCH ABORT - COMMAND ERROR.*
- NZ X2,ABT IF BATCH MODE
- SA1 INPMODE
- SB7 -I.DEV SET DEVICE TO CHECK AGAINST
- PL X1,CER2 IF NOT IN INPUT MODE
- SA5 C.ON GET CURRENT DEVICE
- SB7 -Y.DEV
- SB2 X5+B7
- ZR B2,NCL IF *Y/Z* COMMAND DEVICE
- SB7 -S.DEV SET SPECIAL INPUT DEVICE LINE
- CER2 SA5 C.ON POP STACK AND GET NEXT COMMAND LINE
- SB2 X5+B7 COMPARE DEVICES
- MX6 1 PREPARE TO IDLE DEVICE
- ZR B2,NCL IF POPPED TO PROPER DEVICE, EXIT
- SA5 X5 GET NEW DEVICE
- SA6 A5 IDLE OLD DEVICE
- SA2 X5+B1 GET OLD C.STR-1 WORD
- BX7 X5
- LX6 X2
- SA7 C.ON POP STACK
- SA6 C.STR-1
- EQ CER2 CHECK TO SEE IF AT PRIMARY
- CFF SPACE 4,20
- ** CFF - COPY FAST FILE.
- *
- * ENTRY (CFET) LOADED WITH FILE NAME.
- * AT LEAST ONE READ STARTED ON *E.IN*.
- *
- * EXIT FILE COPIED.
- * BOTH FILES *NOT BUSY*.
- *
- * USES A - 1, 2, 3, 6, 7.
- * X - 1, 2, 3, 6, 7.
- *
- * MACROS READ, RECALL, WRITE, WRITEF, WRITER.
- *
- * COPIES INCOMING EDIT FILE STARTING AT CURRENT BUFFER
- * POSITION, TO THE FILE NAME WHICH IS IN *CFET*.
- * NEITHER FILE IS REWOUND BEFORE COPYING.
- * WARNING, THIS ROUTINE ASSUMES THAT THE BUFFER POINTERS
- * FOR THE TWO FILES ARE IDENTICAL - THUS USE ONLY ON *E.IN*
- * AND *CFET*.
- CFF PS ENTRY/EXIT
- SA1 E.IN+2 INITIALIZE OUTPUT FET TO AGREE WITH
- SA2 A1+B1 THE INPUT FET
- BX6 X1
- SA3 A1-B1 GET *FIRST*
- LX7 X2
- SX3 X3 MASK OUT ADDRESS FIELD OF *FIRST*
- SA1 A2+B1 GET *LIMIT*
- SA6 CFET+2
- SX1 X1 MASK OUT ADDRESS FIELD OF *LIMIT*
- SA7 A6+B1
- IX6 X1-X3 BUFFER SIZE (LIMIT-FIRST)
- SA6 CFFA SAVE CALCULATED BUFFER SIZE
- SA3 E.IN CHECK READ FET STATUS
- EQ CFF3 CHECK FOR EOR/EOF/EOI AT ENTRY
- CFF1 SA1 CFET+3 GET WRITE FET OUTPUT POINTER
- BX6 X1
- SA6 E.IN+3 REFLECT WRITE PROCESSING IN READ FET
- READ E.IN RESTART READ FET
- RECALL CFET WAIT FOR *WRITE* TO COMPLETE
- CFF2 SA3 E.IN SET READ FET STATUS
- SA1 E.IN+2
- SA2 CFET+3 INFORM THE TWO FETS ABOUT ACTIVITY
- BX6 X1 IN THE OTHER FET
- LX7 X2
- SA6 A2-B1
- SA7 A1+B1
- CFF3 LX3 59-0
- PL X3,CFF4 IF READ FET BUSY
- LX3 59-4-59+0
- NG X3,CFF6 IF AT EOR/EOF/EOI
- * CALL *CIO* FOR *READ* IF SUFFICIENT SPACE IS IN THE BUFFER.
- IX6 X2-X1 OUT - IN
- ZR X6,CFF3.1 IF BUFFER IS EMPTY
- BX3 X6
- SA1 CFFA GET BUFFER SIZE
- AX3 60 SIGN OF (OUT-IN)
- BX2 X3*X1 BUFFER SIZE IF (OUT.LT.IN), ELSE 0
- IX7 X2+X6 SPACE IN BUFFER
- AX7 7 0 IF .LT. 200B WORDS OF SPACE
- ZR X7,CFF4 IF NOT ENOUGH SPACE
- CFF3.1 READ A3 RESTART THE READ FET
- CFF4 SA3 CFET
- LX3 59-0
- PL X3,CFF5 IF WRITE FET BUSY
- * CALL *CIO* FOR *WRITE* IF SUFFICIENT DATA IS IN THE BUFFER.
- SA1 CFET+2 GET *IN*
- SA2 A1+B1 GET *OUT*
- IX6 X1-X2 IN - OUT
- BX3 X6
- SA1 CFFA GET CALCULATED BUFFER SIZE
- AX3 60 SIGN OF (IN-OUT)
- BX2 X3*X1 BUFFER SIZE IF (IN.LT.OUT), ELSE 0
- IX7 X2+X6 AVAILABLE DATA IN BUFFER
- AX7 7 0 IF .LT. 200B WORDS OF DATA
- ZR X7,CFF5 IF NOT ENOUGH DATA AVAILABLE
- WRITE CFET RESTART THE WRITE FET
- CFF5 RECALL WAIT FOR SOMETHING TO HAPPEN
- EQ CFF2 CONTINUE COPY
- * CHECK EOR/EOF/EOI AND PROCESS ACCORDINGLY
- CFF6 SA1 E.IN+2 UPDATE OUTPUT BUFFER POINTER
- LX3 59-3-59+4
- BX6 X1
- SA6 CFET+2
- NG X3,CFF7 IF NOT EOR
- WRITER CFET
- EQ CFF1 CONTINUE COPY
- CFF7 LX3 59-9-59+3
- NG X3,CFF8 IF EOI
- WRITEF CFET
- EQ CFF1 CONTINUE COPY
- CFF8 RECALL CFET WAIT FOR OUTPUT TO SETTLE
- EQ CFF RETURN
- CFFA CON 0 TEMPORARY STORAGE FOR BUFFER SIZE
- CHS SPACE 4,20
- ** CHS - CHANGE STRING(S).
- *
- * ENTRY (A0) = FWA OF SCRATCH BUFFER.
- * (X0) = LWA+1 OF SCRATCH BUFFER.
- * (SIGN BIT OF X0 = 1 IF *STRING* MODE).
- *
- * EXIT (B5) = 0, IF STRING NOT FOUND.
- * (X5) = 0, IF TRUNCATION OCCURED.
- * NEW CHANGED LINE (IF STRING FOUND) IN SCRATCH BUFFER.
- * THE NEW LINE SHOULD BE RUN THROUGH *TSL*.
- * B5 SHOULD BE TESTED BEFORE X5.
- *
- * USES A - 0, 1, 2, 5, 6.
- * X - 1, 2, 4, 5, 6.
- * B - 2, 3, 4, 5, 6, 7.
- *
- * CALLS LOC.
- CHS15 SX5 0 SET TRUNCATION OCCURED
- CHS16 MX6 2 SET END OF LINE IN SCRATCH BUFFER
- SB5 1 SET STRING FOUND
- SA6 B6
- CHS PS ENTRY/EXIT
- MX6 0
- SB4 E.STR-1 SET FIRST SEARCH ADDR
- SA5 B4+B1
- SA6 CHSB COUNT COUNTER (VOID INFINITE LENGTH)
- RJ LOC SEARCH FOR STRING
- SB6 A0
- SB3 X0
- SA1 LOC+1
- ZR B5,CHS IF STRING NOT FOUND, RETURN
- SB7 X1+ IF C//STR/ FORM, 0
- * COPY TO SCRATCH THAT PORTION OF LINE BEFORE MATCH.
- CHS1 SB2 A5
- SX4 B1
- GE B2,B4,CHS5 IF ALREADY AT START OF MATCH
- CHS2 PL X5,CHS3 IF NOT AT END OF EDIT LINE
- SA5 CHSA SET TO BLANK(SPECIAL CASE)
- CHS3 LT B6,B3,CHS4 IF NOT FULL SCRATCH BUFFER
- SX4 X5-1R
- NZ X4,CHS15 IF TRUNCATION
- CHS4 BX6 X5
- SB2 B2+B1 STEP A5 VALUE
- SA6 B6
- SA5 A5+B1
- SB6 B6+X4 CONDITIONALLY INCREMENT SCRATCH POINTER
- LT B2,B4,CHS2 IF MORE TO COPY
- * COPY TO SCRATCH THE NEW STRING, PREPARE FOR NEXT SEARCH.
- CHS5 SB4 B5-B1 SET TO SKIP MATCHED STRING
- NG X5,CHS6 IF AT END OF EDIT LINE (REMAIN THERE)
- NG X5,CHS14 IF AT END OF LINE
- * RESET TO AFTER MATCHED STRING, NEVER PAST EOL CHARACTER.
- SA5 B5
- CHS6 SA2 P3RP
- SA1 A2-B1 P3LP
- ZR X2,CHS9 IF NO STRING FOR REPLACEMENT
- SB2 X1
- SB5 X2
- GE B2,B5,CHS9 IF NO STRING (NULL)
- SA1 B2
- CHS7 BX6 X1
- SB2 B2+B1
- LT B6,B3,CHS8 IF END OF SCRATCH BUFFER
- SX4 X1-1R
- NZ X4,CHS15 IF TRUNCATION
- CHS8 SA6 B6+
- SB6 B6+X4 CONDITIONALLY INCREMENT SCRATCH POINTER
- SA1 B2
- LT B2,B5,CHS7 IF MORE TO TRANSFER
- * READY TO LOOK FOR NEXT STRING.
- CHS9 SA0 B6 UPDATE A0
- NG X0,CHS13 IF STRING MODE
- CHS10 ZR B7,CHS11 IF C//STR/ OPTION
- RJ LOC CHECK FOR NEXT MATCH
- SB6 A0
- SB3 X0
- SA1 CHSB
- SB7 B1 SET NOT C//STR/ OPTION
- SX6 X1+B1
- AX1 9
- SA6 A1
- NZ X1,CHS10.1 IF IN INFINITE LOOP
- NZ B5,CHS1 IF MATCH FOUND
- CHS10.1 SX4 1 RESET (X4)
- * COPY REMAINDER OF LINE TO SCRATCH.
- CHS11 NG X5,CHS16 IF FINISHED
- LT B6,B3,CHS12 IF END OF SCRATCH BUFFER
- SX4 X5-1R
- NZ X4,CHS15 IF TRUNCATION
- CHS12 BX6 X5
- SA6 B6
- SA5 A5+B1
- SB6 B6+X4
- EQ CHS11 CONTINUE COPY
- * STRING MODE - CHECK TO SEE IF FINISHED.
- CHS13 SA1 NUMS
- SX6 B1
- IX6 X1-X6
- AX1 1
- SA6 A1
- NZ X1,CHS10 IF MORE STRINGS
- EQ CHS11 COPY REST OF LINE
- * CHECK FOR ANY INFINITE LOOPS
- CHS14 SA1 CHSB
- SX6 X1+B1
- SA6 A1
- AX1 9
- ZR X1,CHS6 IF NOT INFINITE
- EQ CHS RETURN
- CHSA DATA 1R SPECIAL CASE HANDLING
- VFD 2/-0,*P/
- CHSB BSS 1 INFINITE LOOP KLUDGE
- ETL SPACE 4,20
- ** ETL - ECHO TEXT LINE.
- *
- * ENTRY (A1) = FWA OF TEXT LINE.
- * (X1) = TEXT.
- * (X3) = PREFIX DEFINITIONS (SEE ETLA FOR EXAMPLE).
- *
- * EXIT DESIRED TEXT LINE ECHOED AFTER INSERTING UP
- * TO NINE LEADING CHARACTERS.
- *
- * USES A - 1, 6, 7.
- * X - 1, 2, 3, 4, 6 ,7.
- * B - 2.
- * E.SCR.
- *
- * MACROS WRITEC.
- ETL1 BX6 -X4*X1 GET END OF LINE BYTE
- LX1 B2 SHIFT WORD
- BX7 -X2*X1
- IX7 X7+X3
- BX3 X2*X1
- SA7 A7+1 SAVE NEXT WORD
- SA1 A1+B1 READ AHEAD TO NEXT
- NZ X6,ETL1 IF NOT END OF LINE
- BX7 X3
- SA7 A7+B1
- SA6 A7+B1 INSURE PROPER END OF LINE BYTE
- WRITEC OUTPUT,E.SCR+1
- ETL PS ENTRY/EXIT
- MX2 1
- SB2 X3 GET SHIFT COUNT-1
- SA7 E.SCR
- AX2 B2 EXTEND MASK
- SB2 B2-59
- BX3 X2*X3 CLEAR SHIFT COUNT
- MX4 -12
- SB2 -B2
- EQ ETL1 WRITE TEXT
- ETLA CHAR (VFD 6/0),QM. DATA LINE PROMPT
- VFD 6/1R ,*P/11
- ETLB CHAR (VFD 6/0),QM. COMMAND LINE PROMPT
- CHAR (VFD 6/0),QM.
- VFD 6/1R ,*P/17
- ETL RMT REMOTE FOR BATCH ORIGIN
- CHAR (VFD 12/1L ),QM.
- VFD 6/1R ,*P/17
- CHAR (VFD 12/1L ),QM.
- CHAR (VFD 6/0),QM.
- VFD 6/1R ,*P/23D
- RMT
- EXT SPACE 4,15
- ** EXT - EXIT XEDIT.
- *
- * ENTRY (EXTA) = EXIT CODE.
- *
- * EXIT PROGRAM TERMINATED.
- *
- * USES A - 0, 1, 2, 4, 5.
- * X - 0, 1, 2, 3, 4, 5, 6.
- *
- * MACROS CSET, DISTC, MESSAGE, RETURN, REWIND, WRITEO, WRITER.
- *
- * NOTES ROUTINE RETURNS SCRATCH FILES (SCRA-SCRG),
- * TURNS OFF ASCII MODE (IF *AS* PARAMETER USED)
- * AND DOES OTHER HOUSEKEEPING.
- EXT SA1 COPY
- ZR X1,EXT1 IF NO COPY FILE
- WRITER FTD,RECALL CLOSE COPY FILE
- REWIND X2
- EXT1 MX0 3
- SA0 FTD SET FIRST FET TO LOOK AT
- LX0 -21D POSITION A-G MASK
- SA5 =0LSCR
- EXT2 SA4 A0 GET FILE NAME
- BX2 X4-X5 COMPARE NAMES
- BX1 -X0*X4 CLEAR A-G BITS
- AX2 18
- ZR X2,EXT3 IF NAME IS *SCR* (NOT ONE OF XEDIT,S)
- BX1 X1-X5
- AX1 18
- NZ X1,EXT3 IF NOT SRCA-SRCG
- RETURN A0
- EXT3 SA0 A0+7 STEP TO NEXT FET
- SX3 A0-LFET
- NG X3,EXT2 IF SCAN NEXT FET
- * CLEAN UP TELEX SPECIAL STATUS.
- SA2 PROMPT
- ZR X2,EXT4 IF DISTC NOT ON
- SX6 B1
- LX6 48 0001 BYTE
- WRITEO OUTPUT
- DISTC OFF
- EXT4 SA1 OUTPUT+2
- SA2 A1+B1
- IX2 X2-X1 COMPARE *IN* AND *OUT*
- ZR X2,EXT5 IF NOTHING IN BUFFER TO FLUSH
- WRITER OUTPUT,R FLUSH BUFFER (WITH RECALL)
- EXT5 SA2 AS
- SX2 X2-3RASC
- NZ X2,EXT6 IF NOT SPECIAL ASCII MODE
- CSET RESTORE RESTORE INITIAL MODE
- EXT6 RJ FNL ISSUE DAYFILE MESSAGE
- MESSAGE (=0),1 CLEAR MESSAGE BUFFER
- SA1 EXTA
- NG X1,EXT7 IF ABORT XEDIT
- ENDRUN END XEDIT
- EXT7 ABORT ABORT XEDIT
- GFN SPACE 4,20
- ** GFN - GET FILE NAME.
- *
- * ENTRY (A5) = ADDRESS OF PRESET CHARACTER.
- * (X5) = PRESET CHARACTER.
- *
- * EXIT (X6) = FILE NAME IF .NE. 0.
- * = 0, IF RESERVED OR BAD (NOT INCLUDING SPECIAL).
- * (A1) = ADDRESS OF SPECIAL NAME ENTRY (IF SPECIAL).
- * 0, THEN NULL.
- * 1, THEN OUTPUT.
- * (X1) = NON-ZERO IF SPECIAL, RESERVED OR BAD NAME.
- * (B4) = 0, IF TOO MANY CHARACTERS IN THE FILE NAME.
- * = 1, IF SPECIAL CHARACTERS IN THE FILE NAME.
- * (B6) = ERROR MESSAGE ORDINAL (IF ERROR).
- * (A5) = ADDRESS OF NEXT NON-BLANK OR SECOND COMMA.
- * (X5) = NEXT NON-BLANK CHARACTER OR SECOND COMMA.
- *
- * USES A - 1, 5.
- * X - 1, 3, 4, 5, 6, 7.
- * B - 4, 6.
- GFN7 NG X5,GFN8 IF AT END OF LINE
- SB4 X5-1R
- ZR B4,GFN8 IF BLANK
- NE B4,B1,GFN3.1 IF SPECIAL CHARACTER
- GFN8 LX6 6
- PL X6,GFN8 IF NOT LEFT JUSTIFIED
- BX7 X7-X7 SET NO COMMA FOUND
- GFN9 SX4 X5-1R
- ZR X4,GFN10 IF BLANK CHARACTER
- SX4 X5-1R,
- NZ X4,GFN11 IF NOT COMMA
- NZ X7,GFN11 IF 2ND COMMA
- SX7 1 SET COMMA ENCOUNTERED
- GFN10 SA5 A5+1
- PL X5,GFN9 IF NOT END OF LINE
- GFN11 MX7 1 REMOVE POSITION BIT
- BX6 -X7*X6
- SB6 B0 INDICATE NO ERROR
- LX6 12 LEFT JUSTIFY NAME
- SA1 GFNA-1 PRESET TO LIST OF RESERVED NAMES
- ZR X6,GFN6 IF NO FILE NAME
- GFN12 SA1 A1+B1
- ZR X1,GFN IF END OF LIST
- BX3 X6-X1
- AX4 B1,X3
- NZ X4,GFN12 IF NOT THIS FILE NAME
- LX3 -1
- AX3 59
- BX6 X3*X6 IF BAD, WILL ZERO - ELSE LEAVE IT ALONE
- SB6 BFN.*100B+3 SET -RESERVED FILE NAME-
- GFN PS ENTRY/EXIT
- BX6 X6-X6 CLEAR ASSEMBLY
- SB6 B0 SET NO ERROR (END OF LINE)
- NG X5,GFN6 IF END OF LINE
- SX6 4000B SET POSITION INDICATOR
- GFN1 ZR X5,GFN4 IF BAD FILE NAME
- SX4 X5-1R9-1
- GFN2 PL X4,GFN3 IF NOT ALPHANUMERIC
- LX6 6
- BX6 X6+X5
- NG X6,GFN3.2 IF TOO MANY CHARACTERS
- SA5 A5+1
- PL X5,GFN1 IF NOT END OF LINE
- EQ GFN7 GET FILE NAME
- GFN3 SX3 X5-7601B
- NG X3,GFN7 IF LESS THAN 7601B
- SX4 X3-1RZ
- PL X4,GFN7 IF .GT. LOWER CASE Z
- SX5 X3+B1 GET LOWER CASE LETTER
- EQ GFN2 TEST CHARACTER
- * BAD FILE NAME PROCESSING.
- GFN3.1 SB4 B1+
- EQ GFN4 PROCESS BAD FILE ERROR
- GFN3.2 SB4 B0+
- GFN4 SB6 BFN.*100B+1 SET -BAD FILE NAME-
- GFN5 SX6 B0 CLEAR FILE NAME
- MX1 1 SET ERROR FLAG
- EQ GFN RETURN
- GFN6 SB6 BFN.*100B+2 SET -NO FILE NAME-
- EQ GFN5 CLEAR FILE NAME
- * RESERVED FILE NAMES.
- GFNA DATA 0LSCRA,0LSCRB,0LSCRC,0LSCRD,5LINPUT
- DATA 0LSCRE,0LSCRF,0LSCRG
- * FILES REQUIRING SPECIAL HANDLING.
- GFNB CON 4LNULL+1
- CON 6LOUTPUT+1
- GFNBL EQU *-GFNB NUMBER OF SPECIAL NAMES
- DATA 0 END MARKER
- GLN SPACE 4,30
- ** GLN - GET LINE NUMBER (ADVANCE TO IT).
- *
- * ENTRY (X1) = LINE NUMBER TO FIND.
- * IF SIGN BIT SET, THEN ASSUMED CALLED FROM *MPR*
- * WHICH IMPLIES-
- * 1. THAT THE VERIFY FLAG IS ALREADY SET UP.
- * 2. THAT X1 CONTAINS THE ABSOLUTE LINE POSITION.
- * 3. THAT THE FILE IS ALREADY REWOUND IF NEEDED.
- *
- * EXIT (X6) = 0 IF LINE NUMBER FOUND.
- *
- * USES A - 1, 2, 6, 7.
- * X - 1, 2, 3, 6, 7.
- *
- * CALLS RDF, TOP, WTF.
- *
- * ROUTINE WILL REWIND THE FILE IF THE LINE NUMBER LIES
- * BEFORE THE CURRENT POINTER POSITION. IF THE USER
- * IS IN *WHERE* MODE, THIS ROUTINE WILL POSITION
- * THE FILE TO THE SPECIFIED LINE.
- *
- * NOTES UNLESS CALLED FROM *MPR*, THIS ROUTINE WILL
- * AUTOMATICALLY CANCEL THE VERIFICATION OF EOR/EOF,S
- * IF THE FILE NEEDS TO BE RESET. THIS IS DONE BY
- * SHIFTING *VERIFY* RIGHT AND THEN CLEARING THE SIGN
- * BIT (VERIFY OFF) - WHEN EXITING *GLN*, BIT 58 IS
- * SHIFTED TO BIT 59 (RESTORING PREVIOUS VERIFICATION).
- *
- GLN9 SA1 VERIFY RESTORE OLD VERIFICATION STATUS
- LX7 B1,X1
- SA7 A1
- GLN PS ENTRY/EXIT
- MX6 1
- BX6 -X6*X1 STRIP OFF SIGN BIT
- MX7 0
- SA6 GLNA SAVE LINE TO FIND
- SA7 GLNB SAVE *NOT REWOUND* FLAG
- ZR X6,GLN IF NO LINE NUMBER TO FIND
- NG X1,GLN7 IF CALLED FROM *MPR*
- SA2 VERIFY
- AX2 60 EXTEND FLAG STATUS
- BX6 X2
- SA6 A2+
- SA1 LNFLAG
- PL X1,GLN7 IF PROCESSING AS IWHERE.
- GLN1 SA1 E.LMOD
- NZ X1,GLN3 IF LINE IS UNPACKED
- SA1 E.LINE GET LINE NUMBER
- BX6 X6-X6 CLEAR ASSEMBLY
- MX7 -6 CHARACTER MASK
- * ASSEMBLE LINE NUMBER FROM PACKED WORD.
- GLN2 LX1 6
- BX2 -X7*X1 GET CHARACTER
- ZR X2,GLN5 IF END OF NUMBER
- SX3 X2-1R9-1 NEGATIVE IF OK
- SX2 X2-1R0 POSITIVE IF OK
- BX1 X7*X1 REMOVE PRESENT CHARACTER
- BX3 -X2*X3
- PL X3,GLN5 IF CHARACTER IS NOT NUMBER
- BX3 X6
- LX6 2 *4
- IX6 X6+X3 *5
- LX6 1 *10
- IX6 X6+X2 ADD NEW CHARACTER
- EQ GLN2 ASSEMBLE NEXT CHARACTER
- * ASSEMBLE LINE FROM STRING.
- GLN3 SA1 E.STR
- BX6 X6-X6 CLEAR ASSEMBLY
- MX7 -10 CHARACTER COUNT
- GLN4 NG X1,GLN5 IF END OF LINE
- SX3 X2-1R9-1
- SX2 X2-1R0
- AX7 1 DECREMENT CHARACTER COUNT
- BX3 -X2*X3 NEGATIVE IF NUMBER
- PL X3,GLN5 IF NOT A NUMBER
- BX3 X6
- LX6 2 *4
- IX6 X6+X3 *5
- SA1 A1+B1 NEXT CHAR.
- LX6 1
- IX6 X6+X2 ADD NEXT NUMBER
- NZ X7,GLN4 IF NOT 10 CHARACTERS
- * CHECK TO SEE IF GOT LINE NUMBER.
- GLN5 SA1 GLNA
- IX6 X6-X1
- PL X6,GLN6 IF ON OR PAST NUMBER
- RJ WTF
- RJ RDF
- EQ GLN1 CHECK NEXT LINE
- GLN6 ZR X6,GLN9 IF FOUND LINE NUMBER
- SA2 GLNB
- NZ X2,GLN9 IF RESET FILE AT LEAST ONCE
- MX6 -1
- SA6 A2
- RJ TOP
- SA1 VERIFY
- MX6 1
- BX6 -X6*X1 CLEAR EOR/EOF VERIFICATION
- SA6 A1
- EQ GLN1 SEARCH FROM TOP OF FILE
- * IF REALLY IN *IWHERE* MODE.
- GLN7 SA1 GLNA
- SA2 IWHERE
- IX6 X2-X1
- PL X6,GLN8 IF AT OR PAST POSITION
- RJ WTF
- RJ RDF
- EQ GLN7 GET NEXT LINE
- GLN8 ZR X6,GLN9 IF FOUND
- RJ TOP RESET AND RE-TRY
- SA1 VERIFY
- MX6 1
- BX6 -X6*X1 CLEAR AUTO VERIFICATION
- SA6 A1
- EQ GLN7 GET NEXT LINE
- GLNA DATA 0 LINE NUMBER TO FIND
- GLNB DATA 0 RESET FILE FLAG
- ICH SPACE 4,10
- ** ICH - INITIALIZE CHARACTERS.
- *
- * ENTRY (A1) = FWA OF PARAMETER LIST.
- * (X1) = FIRST WORD OF PARAMETERS.
- *
- * EXIT CHARACTERS LOADED INTO PROPER CELLS.
- *
- * USES A - 1, 2, 3, 6.
- * X - 1, 2, 3, 6.
- * B - 6, 7.
- ICH1 SA2 CHARSFT OBTAIN SHIFT VALUE
- SB6 X2
- ICH2 SA2 X1 GET REPLACEMENT CHARACTER
- UX1,B7 X1 GET SHIFT COUNT
- AX2 B6
- AX1 18
- SX2 X2 REMOVE EXCESS CHARACTER
- SA3 X1 WORD TO MODIFY
- LX2 B7 SHIFT INTO POSITION
- SA1 A1+B1
- BX6 X3-X2 ADD CHARACTERS
- SA6 A3
- NZ X1,ICH2 IF MORE TO LIST
- ICH PS ENTRY/EXIT
- NZ X1,ICH1 IF THERE IS A TABLE
- EQ ICH RETURN
- IEM SPACE 4,15
- ** IEM - ISSUE EXPLAIN ERROR MESSAGE.
- *
- * ENTRY (B2) = ERROR MESSAGE ORDINAL IN THE FOLLOWING FORMS -
- * FORM 1 - 18/PRIMARY ORDINAL.
- * FORM 2 - 13/PRIMARY ORDINAL,5/SECONDARY ORDINAL.
- *
- * EXIT (EXPLAIN) = UPDATED ERROR MESSAGE ENTRIES.
- * MESSAGE ISSUED.
- *
- * USES A - 1, 4, 6.
- * X - 1, 4, 6.
- * B - 2.
- *
- * MACROS WRITEC.
- IEM PS ENTRY/EXIT
- SA1 EXPLAIN
- SX4 B2
- AX4 6
- LX1 -12 SHIFT EXPLAIN WORD
- NZ X4,IEM1 IF GOTTEN PRIMARY
- SX4 B2
- IEM1 PX6 B2,X1 PUT NEW EXPLAIN ENTRY
- SA6 A1
- SA4 MESSAGE+X4 GET MESSAGE STARTING ADDR
- WRITEC OUTPUT,X4 ISSUE MESSAGE
- EQ IEM RETURN
- IFM SPACE 4,15
- ** IFM - ISSUE FILE MESSAGE.
- *
- * ENTRY (X1) = FILE NAME TO USE (LOWER 18 CAN BE GARBAGE).
- * (B2) = ERROR MESSAGE (SEE *IEM* FOR FORMATS).
- *
- * EXIT (EXPLAIN) = UPDATED EXPLAIN ERROR MESSAGE ENTRIES.
- * MESSAGE ISSUED.
- *
- * USES A - 2, 3, 4, 6.
- * X - 1, 2, 3, 4, 6, 7.
- * B - 3.
- *
- * MACROS WRITEC.
- IFM PS ENTRY/EXIT
- SX4 B2
- AX4 6
- SA2 EXPLAIN
- LX2 -12
- NZ X4,IFM1 IF NOT LONGER FORM
- SX4 B2
- IFM1 SA3 MESSAGE+X4 GET MESSAGE POINTER
- PX6 B2,X2
- SA3 X3 GET FIRST WORD OF MESSAGE
- MX7 6
- BX7 X7*X3 GET UPPER CHARACTER
- MX2 42
- SA6 A2
- SB3 60-12
- ZR X7,IFM2 IF CHARACTER IS 00B (FIRST PART OF 0007B)
- BX6 X7
- LX7 2
- SB3 60-6
- BX7 X7*X6 NEGATIVE IF UPPER CHARACTER = 55B (BLANK)
- NG X7,IFM2 IF BATCH STYLE MESSAGE
- SB3 B0
- IFM2 BX1 X2*X1 REMOVE LOWER 18 BITS
- SX6 B1
- SA4 =01010101010101010101B
- IX6 X1-X6 SPACE FILL FILE NAME
- BX6 X6-X1
- AX6 6
- BX6 X4*X6
- BX7 X6
- SA4 =10H
- LX6 5
- IX7 X6-X7
- BX6 X6+X7
- BX4 X6*X4 MASK BLANKS FOR LOWER BITS
- LX7 B3,X2
- BX3 -X7*X3 REMOVE EXISTING FILE NAME
- BX4 X4*X2 REMOVE LOWER 18 BITS OF BLANKS
- IX4 X4+X1 MERGE BLANKS WITH FILENAME
- LX4 B3 POSITION NAME
- BX6 X4+X3 MERGE INTO MESSAGE
- SA6 A3
- WRITEC OUTPUT,A6 ISSUE MESSAGE
- EQ IFM RETURN
- ITM SPACE 4,15
- ** ITM - ISSUE TRUNCATION MESSAGE.
- *
- * ENTRY (IWHERE) = LINE POSITION.
- *
- * EXIT MESSAGE ISSUED.
- *
- * USES A - 1, 6.
- * X - 1, 6.
- * B - 2.
- *
- * CALLS CDD, IEM.
- ITM PS ENTRY/EXIT
- SA1 IWHERE
- RJ CDD
- SA1 MESSAGE+TRUNC.
- MX6 -12
- BX6 X6*X4 SET EOL BYTE
- SB2 TRUNC.
- SA6 X1+2 PLACE POSITION (CHANGE MESSAGE)
- RJ IEM
- EQ ITM RETURN
- PCN SPACE 4,10
- ** PCN - PRINT COLUMN NUMBERS.
- *
- * ENTRY NONE.
- *
- * EXIT COLUMN NUMBERS PRINTED.
- *
- * MACROS WRITEC.
- PCN PS ENTRY/EXIT
- WRITEC OUTPUT,PCNA
- WRITEC X2,PCNB
- EQ PCN RETURN
- PCNA CON 3H 0,2H 1,2H 2,2H 3,2H 4,2H 5,2L 6
- PCNB BSS 0
- DATA H* 12345678901234567890123456789012345678*
- DATA C*90123456789012345678901234567890*
- PCNAL EQU *-PCNA
- ERD SPACE 4,15
- ** ERD - PROCESS END OF FILE READ.
- *
- * ENTRY AT *ERD*.
- * AT *ERD1*.
- * AT *ERD5*.
- *
- * EXIT TO *TOP*.
- * TO *TOP1.1* IF IN LOOK MODE.
- *
- * USES A - 1, 2, 4, 6, 7.
- * X - 2, 4, 6, 7.
- * B - 6.
- *
- * CALLS RDF.
- *
- * MACROS READ, RECALL, REWIND, WRITER.
- ERD PS ENTRY
- SA1 *-1
- MX7 0
- BX6 X1 COPY ENTRY WORD TO EXIT WORD
- SA7 DF NO MORE DELETES OF EOF-S
- SA6 TOP EXIT WORD
- SA7 DR NO MORE DELETES OF EOR-S
- SA4 UPDATE
- PL X4,TOP1.1 IF IN LOOK MODE
- * ENTRY FROM *TOP*.
- ERD1 SA2 RC
- NZ X2,ERD2 IF NO DATA READ
- WRITER E.OUT
- ERD2 SA4 E.IN
- LX4 59-9
- PL X4,ERD9 IF EOI NOT SET
- REWIND E.OUT
- REWIND E.IN,RECALL
- RECALL E.OUT
- SA1 FS CHECK READ FILE NAME STATUS
- NG X1,ERD4 IF NAME TOP1
- SA4 E.OUT
- SA1 ERDA
- MX2 42
- BX6 X4-X1
- BX6 X2*X6 REMOVE UNWANTED
- NZ X6,ERD3 IF NOT A MATCH
- SA1 A1+1 GET OTHER SCRATCH NAME
- ERD3 BX6 X1
- MX7 60
- SA6 E.IN
- SA7 FS
- REWIND A6,RECALL REWIND FILE TO BE WRITTEN ON
- ERD4 SA1 E.OUT SWITCH FILE NAMES IN FETS
- SA2 E.IN
- BX6 X1
- BX7 X2
- SA6 A2
- SA7 A1
- * ENTRY FROM *TOP*.
- ERD5 SA1 INDEX
- SX6 B1 RESET *IWHERE*
- MX7 60
- SA6 IWHERE
- SA7 NOMOD SET NO MODIFICATIONS
- SX1 X1-.QUIT
- ZR X1,ERD6 IF QUIT COMMAND
- SX1 X1+.QUIT-.END
- ZR X1,ERD6 IF END COMMAND
- SX1 X1+.END-.FILE
- NZ X1,ERD7 IF NOT FILE COMMAND
- ERD6 RECALL E.IN
- EQ TOP EXIT
- ERD7 READ E.IN
- MX6 1
- SA6 RC SET *NO DATA READ* FLAG
- SA1 INDEX
- SB6 X1-.TOPNUL
- ZR B6,ERD8 IF TOPNULL COMMAND
- RJ RDF
- EQ TOP EXIT
- ERD8 SX6 2R
- BX7 X7-X7
- LX6 -12
- SA7 E.LMOD SET NO LINE MODIFICATION
- SA6 E.LINE SET BLANK LINE AS EXISTING
- SA7 E.CMODE SET CURRENT MODE
- EQ TOP EXIT
- * XEDIT SHOULD NEVER JUMP TO HERE.
- ERD9 SB6 =C* XEDIT INTERNAL ERROR (ERD). NOTIFY CONSULTANT.*
- EQ ABT ABORT, EXIT
- ERDA CON 0LSCRA+1
- CON 0LSCRB+1
- ERDB BSS 1
- LOC SPACE 4,15
- ** LOC - LOCATE STRING SPECIFIED.
- *
- * ENTRY (X3) = NUMBER OF CHARACTERS IN LINE.
- * (X4) = EDIT LINE STARTING ADDRESS - 1.
- * (X5) = FIRST CHARACTER OF EDIT LINE.
- * (B4) = DESIRED STARTING ADDRESS - 1 FOR SEARCH
- * (E.STR).
- * (LOCA - LOCC) = PARAMETERS.
- * (SPCP) = NEGATIVE IF WINDOW WAS SPECIFIED.
- *
- * EXIT (B4) = FWA OF MATCH (IN E.STR).
- * (B5) = LWA +1 OF MATCH (IN E.STR).
- * 0, IF STRING NOT FOUND.
- *
- * USES A- 1, 2, 3, 4, 7.
- * X- 1, 2, 3, 4, 6, 7.
- * B- 2, 3, 4, 5, 6, 7.
- *
- * CALLS LST.
- LOC9 SB5 0 SET STRING NOT FOUND
- LOC PS ENTRY/EXIT
- * THERE ARE THREE OPTIONS, EACH SET BY CODE MODIFICATION.
- * THE THREE WORDS ARE GIVEN BELOW.
- LOC RMT
- LOCD SB5 1 THERE ARE NO STRINGS
- EQ LOC EXIT
- LOCE SA4 LOCA NORMAL STRING SEARCH REQUIRED
- SA3 E.STR-1
- LOCF EQ LOC8 NULL STRING ROUTINE
- - VFD *P/0 SPECIAL FLAG (SEE CHS)
- RMT
- BSSZ 1 ALLOCATE SPACE FOR WORD
- SB7 X4+ LEFTMOST STARTING ADDRESS - 1
- SB2 X3+E.STR ADDRESS OF END OF LINE
- SA1 TRIM
- SA2 SPCP
- NG X1,LOC1.1 IF *TRIM* FLAG SET
- PL X2,LOC1.1 IF WINDOW NOT SPECIFIED
- * BLANK FILL LINE OUT TO THE SPECIFIED WINDOW.
- SA2 RTWD SET TO RIGHT WINDOW MARGIN
- ZR X2,LOC1.1 IF WINDOW NOT SPECIFIED
- SB3 X3 SET TO LENGTH OF LINE
- SB6 X2
- GE B3,B6,LOC1.1 IF LINE IS LONGER THAN WINDOW
- SB3 B6-B3
- SB3 B2+B3
- SX6 1R SET TO BLANK
- LOC1 SA6 B2
- SB2 B2+B1
- NE B2,B3,LOC1 IF NOT FILLED TO RIGHT WINDOW
- MX6 2 SET END OF LINE INDICATOR
- SA6 B2
- LOC1.1 SA2 A4+B1 1/TRIM,11/LENGTH,12/,18/COMPARE,18/R.MAR
- AX4 18
- GE B7,B4,LOC1.2 IF LEFT START = MAX(DESIRED,WINDOW)
- SB7 B4
- LOC1.2 UX6,B6 X2 STRING LENGTH, X6 = TRIM FLAG
- SA1 B7 SET STARTING CHARACTER-1 (E.STR)
- AX2 18
- SB3 X6 RIGHT MARGIN (VIA WINDOW/ANCHOR)
- PL X4,LOC2 IF NOT ANCHOR MODE
- SB3 B3+B6 ADD LENGTH OF STRING
- SB3 B3-B1 COMPENSATE FOR EXTRA WORD IN ADDITION
- LOC2 SA2 X2 GET STARTING ADDR OF COMPARE STRING
- GE B2,B3,LOC3 IF RIGHT MARGIN NOT PAST LINE WIDTH
- SB3 B2 RESET TO LINE WIDTH
- LOC3 LX7 X2
- SA7 B2+B1 SET COMPARE (IMMEDIATELY AFTER EOL)
- SB5 B5-B5 SET FAILURE
- SX7 X4 PUT GLOBAL CHARACTER
- ZR B6,LOC4 IF NO STRING
- RJ LST LOCATE STRING
- NZ B7,LOC IF STRING NOT FOUND (FAILURE)
- SB4 A1 SET FIRST CHARACTER OF MATCH
- SB5 A1+B6 SET LWA+1
- SB7 B5-1
- SX4 0 SET NO ANCHOR
- LOC4 SA3 LOCC 1/TRIM,11/LENGTH,30/STARTING,18/MARGIN
- UX6,B6 X3 (X3) = TRIM, (B6) = LENGTH
- AX6 18
- NG X4,LOC5 IF ANCHOR (AND NULL FIRST STRING)
- SB3 X3+ RESET RIGHT MARGIN
- LOC5 SA2 X6
- GE B2,B3,LOC6 IF TO SET TO MINIMUM (MARGIN,LINE WIDTH)
- SB3 B2
- LOC6 ZR B6,LOC IF NO SECOND STRING
- SX4 X7
- LX7 X2
- SA7 B2+B1 SET COMPARE AFTER END OF STRING
- SX7 X4 RESTORE GLOBAL CHARACTER
- SA1 B7+ SET POINTER FOR SECOND STRING
- RJ LST
- LX6 59-18
- SB5 A1+B6 SET ENDING CHARACTER
- NG X6,LOC7 IF NEGATIVE LOGIC
- ZR B7,LOC IF POSITIVE AND FOUND IT
- EQ LOC9 SET FAILURE
- LOC7 NZ B7,LOC IF NEGATIVE AND NOT FOUND
- EQ LOC9 STRING NOT FOUND
- * SEARCHING FOR NULL STRING. FOUND ONLY WHEN AT
- * THE BEGINNING OF A LINE/WINDOW (DEPENDING ON TRIM SET).
- LOC8 SA4 LOCA
- SB7 X4
- SB5 X4+B1 SET LWA+1 OF SEARCH
- SA2 TRIM
- GT B4,B7,LOC9 IF STARTING PAST MINIMUM (FAIL)
- SB4 X4+1 SET FWA OF MATCH
- PL X2,LOC IF NOT TRIM (SUCCESSFUL)
- MX2 2 CHECK FOR EOL
- BX2 X2-X5
- ZR X2,LOC9 IF NOT EOL
- SA1 E.STR-1 GET LINE WIDTH
- SB3 X1+E.STR
- GE B7,B3,LOC9 IF PAST LAST NON-BLANK (FAIL)
- EQ LOC RETURN
- LOC HEREL ASSEMBLE ENTRY OPTIONS
- ** LOCA - LOCC - LOCATE DEFINITION CELLS.
- *
- * FORMAT FOR THE THREE WORDS IS-
- *
- * 1/A,11/ ,12/,18,GLOBAL ,18/L.MARGIN.
- * 1,T,11/L,12/,18,COMPARE ,18/R.MARGIN.
- * 1/T,11/L,12/,18,COMPARE ,18/R.MARGIN.
- *
- * WHERE-
- * *A* = 1 IF ANCHOR IS SET.
- * *T* = 1 IF TRIM SET (ALL CHARS IN STRING SIGNIFICANT).
- * *L* = LENGTH OF ASSOCIATED STRING.
- * *GLOBAL* = THE CHARACTER THAT MATCHES ALL.
- * *COMPARE* = FWA IF ASSOCIATED STRING (IN COMMAND).
- * *RMARGIN* = ADDRESS OF LEFTMOST POSSIBLE STARTING
- * CHARACTER-1.
- * *L.MARGIN* = ADDRESS OF RIGHTMOST POSSIBLE ENDING
- * CHARACTER+1.
- LOCA BSSZ 1 LOCATE ENVIRONMENT WORD
- LOCB BSSZ 1 FIELD ONE DEFINITION
- LOCC BSSZ 1 FIELD TWO DEFINITION
- LST SPACE 4,20
- ** LST - LOCATE STRING IN EDIT LINE.
- *
- * ENTRY (A1) = FWA-1 OF START OF SCAN IN EDIT LINE.
- * (A2) = FWA OF COMPARE STRING IN COMMAND LINE.
- * (X2) = FIRST WORD OF STRING IN COMMAND LINE.
- * (X6) = NEGATIVE IF TRAILING GLOBAL/BLANKS ARE
- * IMPORTANT.
- * (X7) = GLOBAL CHARACTER (MUST NOT BE MASK OF 2).
- * (B3) = LWA+1 AVAILABLE FOR SCANNING (USUALLY EOL).
- * (B6) = LENGTH OF COMPARE STRING.
- * ASSUMES THAT THE FIRST CHARACTER OF THE COMPARE
- * STRING HAS BEEN PLACED AT EOL+1.
- *
- * EXIT (A1) = FWA OF POSSIBLE MATCH.
- * (B6) = LENGTH-1 OF POSSIBLE MATCH.
- * (B7) = 0, IF MATCH.
- * IF (A1)+1 .GE. (B3) AT ENTRY, THEN IF THE COMPARE
- * STRING IS BLANK/GLOBAL AND TRIM IS OFF, THEN THE
- * RESPONSE IS -
- * (B7) = 0 (SUCCESSFUL MATCH).
- * (A1) = (A1) AT ENTRY.
- * (B6) = 0.
- *
- * USES A - 1, 3, 4.
- * X - 1, 3, 4.
- * B - 6, 7.
- LST4 SA1 A1+B1 MOVE START OF STRING POINTER
- BX3 X1-X2
- ZR X3,LST6 IF MATCH
- IX3 X2-X7
- ZR X3,LST6 IF FIRST COMPARE IS GLOBAL
- LST5 SA1 A1+B1 MOVE START OF STRING POINTER
- IX3 X1-X2
- NZ X3,LST5 IF NOT A MATCH
- LST6 SB7 A1-B3 DETERMINE LENGTH OF EDIT LEFT
- SB7 -B7
- LT B7,B6,LST8 IF NOT ENOUGH SPACE LEFT FOR MATCH
- SB7 B6-1
- LST7 ZR B7,LST IF END OF STRING (MATCH)
- SA3 A1+B7
- SA4 A2+B7
- SB7 B7-B1
- IX3 X3-X4
- ZR X3,LST7 IF MATCH (TRY NEXT)
- NG X7,LST4 IF GLOBAL NOT USED (IN STACK)
- IX4 X4-X7
- ZR X4,LST7 IF COMPARE IS GLOBAL
- EQ LST4 CONTINUE
- LST8 NG X6,LST2 IF TRAILING CHARACTERS SIGNIFICANT
- SX4 B7-1
- NG X4,LST3 IF PAST LWA AVAILABLE
- SB6 B6-B1 DECREASE COMPARE STRING
- SA4 A2+B6
- SX3 X4-1R
- ZR X3,LST6 IF LAST COMPARE IS BLANK (REMOVE IT)
- IX3 X4-X7
- ZR X3,LST6 IF LAST COMPARE IS GLOBAL (REMOVE IT)
- LST PS ENTRY/EXIT
- SB7 A1-B3 CHECK A1 VS B3
- SB7 B7+B1
- LT B7,LST4 IF STARTING NOT PAST LAST CHARACTER
- NG X6,LST2 IF TRIM (FAILURE)
- SA1 A1+B1 CHANGE POINTER
- SB7 B0 SET SUCCESSFUL
- LST1 LE B6,LST IF COMPARE IS ALL BLANKS/GLOBAL
- SB6 B6-B1
- SA4 A2+B6
- SX3 X4-1R
- ZR X3,LST1 IF COMPARE IS BLANK
- IX3 X4-X7
- ZR X3,LST1 IF COMPARE IS GLOBAL
- LST2 SB7 B1 SET STRING NOT FOUND
- EQ LST BEGIN SCANNING
- LST3 SA1 B3-B1
- EQ LST+1 RESTART SCAN AT END OF LINE
- MDY SPACE 4,15
- ** MDY - PROCESS MODIFY DIRECTIVES.
- *
- * ENTRY (E.STR) = ORIGINAL LINE (UNPACKED).
- * (D.STR) = DIRECTIVES LINE (UNPACKED).
- *
- * EXIT (B3) = NEGATIVE, IF TRUNCATION ENCOUNTERED.
- * (E.STR) = NEW TEXT LINE.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6, 7.
- * B - 2, 3, 4, 6.
- * E.SCR.
- *
- * CALLS TSL.
- MDY5 SX6 1R SET BLANK CHARACTER
- MDY6 GT B3,B4,MDY1 IF AT END OF BUFFER
- SA6 B3
- SB3 B3+B1 SET TO NEXT PLACE TO SAVE
- MDY7 SA2 A2+B2 GET NEXT *E.STR* CHARACTER
- NO
- PL X2,MDY8 IF NOT AT END OF LINE
- SX6 1R
- SB2 B0 SET TO NOT ESCAPE END OF LIE
- BX2 X2+X6 GET END LINE (WITH BLANK)
- MDY8 SA1 A1+B1 GET NEXT DIRECTIVES CHARACTER
- SX6 X2 MOVE CURRENT TEXT CHAR
- SX7 X1-1R
- ZR X7,MDY6 IF SPACE DIRECTIVE
- NG X1,MDY16 IF END OF DIRECTIVE LINE
- CHAR (SX7 X1-0),SH.
- ZR X7,MDY7 IF SHARP (DELETE TEXT CHAR)
- CHAR (SX7 X1-0),AM.
- ZR X7,MDY5 IF AMPERSAND (SET TEXT TO BLANK)
- BX6 X1
- SB6 X1+B5 B5 = -UP ARROW
- NZ B6,MDY6 IF CHARACTER (REPLACE TEXT)
- MDY9 SA1 A1+B1 GET NEXT DIRECTIVES
- CHAR (SX3 X1-0),SH.
- BX6 X1
- SX7 B6+B1 SET NUMBER OF CHARACTERS SCANNED
- NG X1,MDY10 IF END OF DIRECTIVES
- SB6 B6+B1 INCREMENT COUNT OF CHARACTERS SCANNED
- ZR X3,MDY11 IF SHARP
- GT B3,B4,MDY2 IF PAST 160 CHARACTERS
- SA6 B3
- SB3 B3+B1
- EQ MDY9 LOOP
- MDY10 SX6 1R
- NZ B6,MDY14 IF SOMETHING WAS AFTER THE UPARROW
- SX7 X7+B1 INCREMENT CHARACTER COUNT
- SA2 A2-B2 RESET CHARACTER POINTER
- EQ MDY12 ELSE INSERT ONE SPACE
- MDY11 SX7 B6+B1
- NE B6,B1,MDY14 IF NOT (UP ARROW)(SHARP)
- SX7 B1 RESET COPY COUNTER
- MDY12 GT B3,B4,MDY4 IF POSSIBLE TRUNCATION
- SA6 B3
- SB3 B3+B1
- MDY13 SA2 A2+B2 GET NEXT E.STR CHARACTER
- PL X2,MDY14 IF NOT END OF LINE
- SB2 B0
- SX6 1R
- BX2 X2+X6
- MDY14 SX6 X2
- SX7 X7-1
- MDY15 PL X7,MDY12 IF MORE TO MOVE
- PL X1,MDY8 IF MORE DIRECTIVES
- * END OF DIRECTIVES, COPY REST OF TEXT.
- MDY16 NG X2,MDY19 IF END OF TEXT
- GT B3,B4,MDY3 IF END OF BUFFER
- SX6 X2+
- SA6 B3
- SB3 B3+B1
- MDY17 SA2 A2+B1 GET NEXT TEXT
- SX6 X2
- EQ MDY16 CONTINUE COPY
- * SET TRUNCATION FLAG AND CLEANUP.
- MDY18 SB2 -1
- * SET END OF LINE AND COPY BACK TO *E.STR*.
- MDY19 MX6 2
- NO
- SA6 B3+ SA6/SA1 *MUST* BE IN THIS ORDER
- SB6 E.STR
- SA1 E.SCR
- MDY20 BX6 X1
- SB6 B6+B1
- SA1 A1+B1
- SA6 B6-B1
- PL X6,MDY20 IF NOT FINISHED
- SB6 E.STR-1 SET LINE WIDTH CELL
- SB3 B2 MOVE TRUNCATION FLAG
- RJ TSL TRIM ANY TRAILING SPACES
- MDY PS ENTRY/EXIT
- CHAR (SB5 -0),UA.
- SB2 B1 SET NOT AT END OF TEXT LINE
- SB3 E.SCR SET NEXT SAVE CHAR ADDR
- SB4 E.SCR+159 SET LWA
- SA1 D.STR-1
- SA2 E.STR-1
- EQ MDY7 BEGIN LOOP
- * HANDLE SPECIAL CASES OF FULL BUFFER, ADDING CHARACTERS.
- MDY1 SX7 X6-1R
- ZR X7,MDY7 IF SPACE (NO TRUNCATION)
- EQ MDY18 TRUNCATE
- MDY2 SX7 X6-1R
- ZR X7,MDY9 IF SPACE (NO TRUNCATION)
- EQ MDY18 TRUNCATE
- MDY3 SX7 X6-1R
- ZR X7,MDY17 IF SPACE (NO TRUNCATION)
- EQ MDY18 TRUNCATE
- MDY4 SX7 X6-1R
- ZR X7,MDY13 IF SPACE (NO TRUNCATION)
- EQ MDY18 TRUNCATE
- MPR SPACE 4,15
- ** MPR - MOVE POINTER.
- *
- * ENTRY (X1) = NUMBER OF LINES TO MOVE.
- *
- * EXIT IF (X1) IS NEGATIVE AT ENTRY, THE FILE IS REWOUND.
- *
- * USES A - 1, 3, 4, 6, 7.
- * X - 1, 2, 3, 4, 6, 7.
- *
- * CALLS GLN, TOP.
- *
- * NOTES IF (X1) = -0 AT ENTRY, THIS ROUTINE WILL FORCE A COPY
- * TO THE NEXT SCRATCH FILE AND RETURN THE POINTER
- * TO THE CURRENT POINTER POSITION.
- MPR1 SA1 GLNA RETRIEVE DESIRED LINE FROM HOLDING
- RJ GLN ADVANCE TO LINE
- MPR PS ENTRY/EXIT
- SA3 IWHERE
- SA4 VERIFY
- MX2 1
- IX6 X3+X1 GET DESIRED *IWHERE* VALUE
- BX7 X2*X1 GET DIRECTION OF MOVE
- SX3 B1
- IX3 X6-X3
- PL X3,MPR0 IF MOVING TO A LEGAL POSITION
- SX6 B1 SET DESIRED TO 1
- MPR0 IX6 X6+X2 SET SIGN BIT (*MPR* FLAG)
- AX4 60 EXTEND STATUS OF VERIFY
- SA6 GLNA HOLD DESIRED POSITION
- BX7 -X7*X4 SET TEMPORARY VERIFICATION STATUS
- SA7 A4 RESET VERIFICATION FLAG
- PL X1,MPR1 IF FORWARD MOTION
- RJ TOP
- EQ MPR1 MOVE TO DESIRED POSITION
- RDF SPACE 4,30
- ** RDF - READ EDIT FILE LINE.
- *
- * ENTRY LINE CONTROL (*E.NMODE*, ETC) SET.
- *
- * EXIT LINE READ INTO *E,LINE*.
- * IF *E.NMODE* = ASCII, THEN THE LINE IS UNPACKED
- * TO *E.STR*.
- * THIS ROUTINE USUALLY EXITS NORMALLY. IF THE ROUTINE
- * ENCOUNTERS THE END OF INFORMATION, THE ROUTINE EXITS
- * TO *NCM*, UNLESS PRESETTING, THEN TO *RDF2*.
- * IF IN CREATION MODE, THIS ROUTINE RETURNS WITHOUT
- * READING.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * X - 1, 2, 3, 4, 6, 7.
- * B - 2, 4, 6, 7.
- *
- * CALLS CIO=, ERO, RTB, STL, UPL, VIS.
- *
- * MACROS READ, READC, WRITEC.
- *
- * NOTES FILE MARKS WILL BE RETAINED ACROSS THE FILE UNLESS
- * THE CORRESPONDING COUNTER IS SET (DF/DR).
- * IN ADDITION, IF IN VERIFY MODE (AND TOGGLE SET), THE
- * MESSAGE --EOR--/--EOF-- WILL BE PRINTED.
- * AFTER EACH TEXT LINE IS READ, *TLX* (TELEX INTERRUPT)
- * IS CHECKED. IF SET, ROUTINE EXITS TO *NCM*.
- RDF11 SA1 TLX
- ZR X1,RDF IF NO INTERRUPT
- RJ STL PROCESS INTERRUPT
- RDF PS ENTRY/EXIT
- * FIRST WORD OF ROUTINE IS REPLACED WHEN OUT
- * OF CREATION MODE.
- SA1 IWHERE PREPARE FOR CREATION MODE CHECK
- EQ RDF1 CHECK CREATION MODE
- RDF RMT NORMAL CODE FOLLOWS
- SB0 0 TEMPORARY
- SB0 0
- RMT
- READC E.IN,E.LINE,33D
- SB4 X1+B1
- NG B4,RDF9 IF AT EOI
- * WORD IS REPLACED IF TO VERIFY EOR/EOF.
- RDFA NE B4,B1,RDF3 IF EOR/EOF
- SB7 E.LINE
- RJ RTB TRIM OFF TRAILING BLANKS
- SA1 E.NMODE GET NEEDED MODE
- MX6 0
- SA3 IW
- SA6 A1+B1 SET CURRENT MODE TO CODED
- SA6 A6+B1 SET NO MODIFICATIONS
- SA6 RC SET DATA READ
- ZR X1,RDF11 IF CODED MODE DESIRED
- SA1 E.LINE CONVERT TO ASCII
- SB6 E.STR
- RJ UPL
- SA6 E.STR-1 SET NUMBER OF CHARS IN LINE
- SX7 B1 SET CURRENT MODE TO ASCII
- SA7 E.CMODE SET CURRENT MODE OF LINE
- EQ RDF11 CHECK FOR INTERRUPT
- * CREATION MODE CHECK.
- RDF1 NG X1,RDF IF IN CREATION MODE
- SA2 INITZ
- ZR X2,RDF2 IF INITIALIZING (CREATION MODE POSSIBLE)
- SA1 RDFG CHANGE INSTRUCTIONS
- BX6 X1
- SA6 RDF+1 CHANGE CREATION MODE CHECKER
- RJ VIS VOID INSTRUCTION STACK
- RDF2 BSS 0
- RDFG BSS 0
- RDF HEREL
- JP RDF+2 CONTINUE PROCESSING
- * EOF/EOR ENCOUNTERED.
- RDF3 SB7 B6-E.LINE
- NZ B7,BTL IF ENCOUNTERED NON-TEXT LINE
- ZR B4,RDF3.1 IF EOF
- SB4 B1+ SET (B4) = EOR TYPE
- RDF3.1 SA1 ITOGGLF+B4
- SA2 VERIFY
- BX6 X1*X2
- PL X6,RDF4 IF NO VERIFICATION
- SA3 RDFE
- SX6 B4
- BX7 X3
- SA7 RDFA RESET CODE AT RDFA
- SA6 RDFB
- RJ VIS VOID INSTRUCTION STACK
- RDF4 SA4 UPDATE
- PL X4,RDF6 IF IN LOOK MODE
- SA3 DF+B4 DELETION COUNT
- SA4 RDFC+B4
- ZR X3,RDF5 IF NOT DELETING RECORD MARK
- SX6 B1+
- IX6 X3-X6
- SA6 A3 REPLACE COUNTER
- EQ RDF6 READ, DELETE RECORD MARK
- RDF5 SX2 E.OUT
- MX6 1
- BX7 -X4 SET FUNCTION AND AUTO-RECALL
- SA6 RC SET NO DATA READ
- RJ CIO=
- RDF6 READ E.IN
- EQ RDF2 RESTART ROUTINE
- * VERIFY EOR/EOF.
- RDF7 SA1 RDFB
- MX6 1
- SX7 B4
- PX7 B6,X7
- SA7 RDFD SAVE B4
- NG X1,RDF8 IF NOTHING TO VERIFY
- SB4 EOF.+X1
- SA3 EXPLAIN
- SA4 MESSAGE+B4 GET MESSAGE POINTER
- AX3 12
- SA6 A1 CLEAR MESSAGE FLAG
- PX7 B4,X3
- SA7 A3 REPLACE EXPLAIN WORD
- WRITEC OUTPUT,X4
- RDF8 SA1 RDFF RESET INSTRUCTION WORD
- SA2 RDFD RETRIEVE STATUS OF B4
- BX6 X1
- SB4 X2
- UX2,B6 X2 RETRIEVE *B6*
- SA6 RDFA
- RJ VIS VOID INSTRUCTION STACK
- JP RDFA CONTINUE AND VOID STACK
- * EOI ENCOUNTERED.
- RDF9 BX6 X6-X6
- MX7 1
- SA6 DF DELETE NO MORE EOF,S
- SA7 RDFB SET NO VERIFICATION NECESSARY
- SA6 DR DELETE NO MORE EOR,S
- SA1 INITZ
- ZR X1,/PRESET/PRF1 IF PRESETTING XEDIT
- SA4 EXPLAIN
- SB2 EOI.
- AX4 12
- SA3 MESSAGE+B2
- PX6 B2,X4
- SA6 A4
- WRITEC OUTPUT,X3 ISSUE *END OF FILE* MESSAGE
- SA1 IWHERE
- AX1 1 ZERO IF CREATION MODE OR IWHERE = 1
- ZR X1,RDF10 IF NO FILE
- RJ ERD PROCESS END OF FILE
- EQ NCM EXIT
- * EOI AND NOTHING IN FILE.
- RDF10 SB6 =C* YOU DELETED THE ENTIRE FILE.*
- EQ ABT ABORT XEDIT
- RDFB DATA -1 EOF/EOR ENCOUNTERED (LEVEL NUMBER)
- RDFC CON 34B,24B CIO CODES FOR WRITEF/WRITER
- RDFD BSSZ 1 STORAGE FOR B4 WHEN VERIFYING
- RDFE EQ RDF7 CODE TO CAUSE EOR/EOF MESSAGE ON RE-ENTRY
- RDFF NE B4,B1,RDF3 IF EOR/EOF (EXACT IMAGE OF *RDFA*)
- SB7 E.LINE
- RDL SPACE 4,30
- * RDL - READ DATA LINE INTO *D.LINE*.
- *
- * ENTRY NONE.
- *
- * EXIT (X1) = READC X1 REGESTER CONVENTION AS FOLLOWS -
- * (X1) = 0 FOR TRANSFER COMPLETE.
- * (X1) = -1 IF EOF DETECTED ON FILE.
- * (X1) = -2 IF EOI DETECTED ON FILE.
- * (X1) = ADDRESS PLUS ONE OF LAST WORD TRANSFERED TO
- * WORKING BUFFER, IF EOR WAS DETECTED ON FILE
- * BEFORE TRANSFER WAS COMPLETE.
- * IF (X1) .NE. 0, THEN *D.LINE* IS NOT CHANGED.
- * TO *ABT* IF FATAL ERROR.
- * IF (X1) = 0, THEN THE FOLLOWING IS ALSO DONE -
- * IF *E.NMODE* = 1 (ASCII), THEN THE DATA LINE IS
- * UNPACKED TO *D.STR*, AND THE DATA LINE WIDTH IS
- * ENTERED INTO *D.STR*.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * X - 1, 2, 3, 4, 6, 7.
- * B - 2, 3, 5, 6, 7.
- *
- * CALLS NDL, RTB, RTOA, UPL.
- *
- * MACROS READ, READC.
- RDL8 SX7 2R SET BLANK LINE AS LINE
- LX7 -12
- SA7 D.LINE
- RDL9 SA2 A2
- PX6 B0,X2
- SA6 A2 *C.STR*-1
- MX1 0 SET SUCCESSFUL READ
- * CHECK DESIRED MODE OF LINE.
- RDL10 SA2 E.NMODE
- ZR X2,RDL IF CODED
- SA1 D.LINE
- SB6 D.STR
- RJ UPL UNPACK DATA LINE
- MX1 0 SET SUCCESSFUL READ
- SA6 D.STR-1 SET LENGTH
- RDL PS ENTRY/EXIT
- SA1 PREFIX
- SA2 C.STR-1
- LX1 59-/PREFIX/PLUS
- UX3 B3,X2
- .CYB IF DEF,CYBRNET
- PL X1,RDL4 IF + PREFIX GET DATA FROM COMMAND
- .CYB ELSE
- NG X1,RDL4 IF + PREFIX (READ REQUIRED)
- .CYB ENDIF
- LE B3,RDL3 IF POINTER FLAG IS READ
- SA4 A2+B3 GET NEXT CHARACTER FROM COMMAND LINE
- SB4 X2 DELIMITER
- NG X4,RDL8 IF AT END OF LINE
- SB6 A2+B3 GET FIRST CHARACTER
- SB7 D.LINE SET DESTINATION FOR RTOA
- RDL1 SB5 X4
- EQ B5,B4,RDL2 IF FOUND DELIMITER
- SB3 B3+B1
- SA4 A2+B3 GET NEXT CHARACTER
- PL X4,RDL1 IF NOT AT END OF LINE
- SB3 -B1 SET POSITION
- RDL2 MX6 1
- SB2 A4 SET END OF DATA LINE ADDRESS
- BX6 X6+X4
- SB3 B3+B1 SET NEXT AVAILABLE CHARACTER
- SA6 A4 SET PSEUDO END OF LINE
- PX7 B3,X2
- SA7 A2 REPLACE CHARACTER POINTER
- RJ RTOA PACK DATA LINE TO D.LINE
- ZR B3,RDL9 IF AT REAL END OF LINE
- SA2 B2
- MX1 0 SET READ SUCCESSFUL
- SX6 X2 CLEAR PSEUDO END LINE
- SA6 A2
- EQ RDL10 CHECK MODE OF LINE
- * READ REQUIRED FROM COMMAND LINE SOURCE.
- RDL3 RJ NDL
- ZR X1,RDL+1 IF NOT <CR>, RETRY READ
- EQ RDL ELSE RETURN
- * READ REQUIRED FROM PRIMARY INPUT SOURCE.
- RDL4 SA1 NCLA
- SA3 TTYIN
- BX6 X1+X3
- SA6 A1 REPLACE READ REQ,D FLAG
- NZ X1,RDL6 IF READ NOT NEEDED
- RDL5 READ INPUT,RECALL
- RDL6 READC INPUT,D.LINE,33D READ DATA
- ZR X1,RDL7 IF SUCCESSFUL
- SA2 TTYIN
- SB6 =C* BATCH MODE ABORT. END OF RECORD ENCOUNTERED.*
- SA3 TLX
- MX6 0
- SA6 A3 CLEAR INTERRUPT STATUS
- NZ X2,ABT IF NOT *TTY* INPUT FILE
- NZ X3,RDL5 IF INTERRUPTED
- EQ RDL RETURN
- RDL7 SB7 D.LINE
- RJ RTB TRIM TRAILING BLANKS
- BX7 X7-X7
- MX1 0 SET SUCCESSFUL READ
- SA7 TLX IGNORE INTERRUPTS
- EQ RDL10 CHECK MODE OF LINE
- RTA SPACE 4,10
- ** RTA - CONVERT 160K1 TO C FORMAT (MAX 33 WORDS).
- *
- * ENTRY (B6) = INCOMING STRING ADDRESS.
- * (B7) = OUTGOING STRING ADDRESS.
- *
- * EXIT STRING IS CONVERTED.
- *
- * USES A - 1, 6.
- * X - 1, 2, 6, 7.
- * B - 4, 6, 7.
- RTA PS ENTRY/EXIT
- RTOA EQU RTA
- SB4 6 SHIFT VALUE
- BX6 X6-X6 CLEAR ASSEMBLY
- MX7 1 POSITION INDICATOR
- SX1 B0+ INITIALIZE FOR POSSIBLE BLANK LINE
- EQ RTA2 BEGIN CONVERSION
- RTA1 LX7 6 SHIFT POSITION
- BX6 X6+X1 MERGE CHARACTERS
- PL X7,RTA2 IF NOT FULL WORD
- SA6 B7
- SB7 B7+1
- BX6 X6-X6 CLEAR ASSEMBLY
- RTA2 BX2 X1
- SA1 B6 GET NEXT CHARACTER
- NG X1,RTA4 IF END OF BUFFER REACHED
- RTA3 LX6 6
- SB6 B6+1
- AX2 B4,X1
- ZR X2,RTA1 IF NO ASCII ESCAPE CHARACTER
- LX7 6
- LX6 6
- PL X7,RTA1 IF ASCII CAN FIT INTO THIS WORD
- LX6 -6 SHIFT ASSEMBLY BACK
- LX1 -7
- BX6 X6+X2
- LX7 6
- AX1 60-7 REMOVE ASCII ESCAPE
- SA6 B7 SAVE WORD
- SB7 B7+B1
- BX6 X1
- EQ RTA2 LOOP, PROCESS NEXT WORD
- RTA4 SB6 B6-1 RESET CHARACTER POINTER
- ZR X2,RTA6 IF LAST CHARACTER WAS A COLON
- RTA5 SA1 =40004000400040004000B
- SA6 B7
- BX2 X1*X7
- NZ X2,RTA7 IF ON BYTE BOUNDRY
- RTA6 SX1 1R
- EQ RTA3 BLANK FILL TO BYTE BOUNDARY
- RTA7 NG X7,RTA IF WORD IS FULL, RETURN
- RTA8 LX7 12
- LX6 12
- PL X7,RTA8 IF NOT LEFT JUSTIFIED
- SA6 B7
- ZR X6,RTA IF ASSURE A ZERO WORD, RETURN
- BX6 X6-X6
- SA6 A6+B1
- EQ RTA RETURN
- RTB SPACE 4,15
- ** RTB - REMOVE TRAILING BLANKS FROM A CODED LINE.
- *
- * ENTRY (B6) = LWA+1 OF CODED LINE.
- * (B7) = FWA OF CODED LINE.
- *
- * EXIT UNSIGNIFICANT BLANKS REMOVED FROM LINE.
- *
- * USES A - 1, 2, 3, 6, 7.
- * X - 1, 2, 3, 4, 6, 7.
- * B - 3, 5, 6.
- *
- * CALLS RTA, UPL.
- *
- * NOTES THIS ROUTINE IS DESIGNED TO BE CALLED IMMEDIATELY
- * FOLLOWING A CALL TO *RDC*. THE ONLY PRESET NEEDED
- * IN THAT CASE IS TO SET B7. B6 IS SET VIA *RDC*.
- RTB7 SA1 B6-B1 GET NEXT WORD
- SB6 A1
- LT B6,B7,RTB5 IF BEGINNING OF LINE
- RTB8 BSS 0
- BX6 -X2-X1 111111 WHERE BLANK
- BX4 X3*X6 100000 WHERE POSSIBLE BLANK
- BX6 -X3*X6 011111 WHERE POSSIBLE BLANK
- LX4 -5 000001 WHERE POSSIBLE BLANK
- IX6 X4+X6 100000 WHERE BLANK
- BX6 X3*X6 100000 ONLY WHERE BLANK
- ZR X6,RTB5 IF NO BLANKS
- SX4 B3
- IX4 X1-X4 FIND LEFT MOST BIT
- BX4 X1-X4 REMOVE EXCESS UPPER BITS
- AX4 1 POSITION MASK
- BX4 X3*X4 100000 ONLY WHERE RIGHT 00B
- BX6 X6+X4 MERGE BLANKS AND 00B
- BX4 X6-X3 40 WHERE NOT (BLANK.OR.RIGHT 00)
- LX4 -1
- IX6 X4-X7 FIND LEFT MOST BIT
- BX4 X4-X6 REMOVE EXCESS UPPER BITS
- AX4 5 POSITION MASK
- BX6 -X4*X1 REMOVE CHARACTERS FROM WORD
- IX1 X6-X1 COMPARE INITIAL AND FINAL
- ZR X1,RTB4 IF NO CHANGE
- SA6 A1 REPLACE WORD
- SB3 B0 SET ZERO SEARCH OFF
- NG X4,RTB7 IF THIS WORD ENTIRELY ZEROED
- BX7 X4 CHECK LAST CHARACTER FOR 00B
- AX7 6
- BX4 X7-X4 77 AT LAST CHAR REMOVED
- SA3 =00770077007700770077B
- BX7 X4*X3
- NZ X7,RTB9 IF LAST CHAR REMOVED IS ODD-ADD BLANK
- LX4 6
- BX7 X6*X4 =0 IF LAST CHARACTER IS 00B
- NZ X7,RTB IF NEXT TO LAST NOT 00B
- BX3 X4 ADD 2 BLANKS
- LX4 -6
- LX3 -12
- BX4 X4+X3
- RTB9 BX2 X4*X2 ADD 1 OR 2 BLANKS
- IX6 X6+X2
- SA6 A1
- RTB PS ENTRY/EXIT
- SA1 B6-B1
- NZ X1,RTB0 IF WORD CONTAINS DATA
- SB6 B6-B1
- * CHECK FOR AUTOMATIC TRUNCATION TO 160 CHARACTERS.
- RTB0 SX7 B6-B7
- SB3 B1 SET CHECK FOR TRAILING 00,S
- SX7 X7-16D
- NG X7,RTB3 IF .LT. 16 WORDS SIGNIFICANT NO TRUNCATE
- SA2 AS
- SX6 2R PREPARE BLANKS
- ZR X2,RTB2 IF NOT IN ASCII MODE (TRUNCATE)
- SA2 =74747474747474747474B
- SA3 =01010101010101010101B
- SB5 B6-1
- * SEARCH FOR 74/76 CODES.
- RTB1 SA1 B5 GET CURRENT WORD
- BX4 -X1*X3 ISOLATE COMPLEMENT OF LOWER BIT
- BX7 X2*X1 GET UPPER 4 BITS
- LX4 2
- SB5 B5-B1
- IX4 X4+X7
- BX4 X4*X3
- NZ X4,RTB6 IF WORD CONTAINS ASCII
- GE B5,B7,RTB1 IF MORE TO CHECK
- RTB2 LX6 -12 ASSURE TRUNCATION BUT HANDLE COLON
- SA6 B7+16D
- SB6 A6+B1 RESET LWA+1 POINTER
- RTB3 SA2 =10H
- SA3 =40404040404040404040B
- SX7 B1
- EQ RTB7 REMOVE TRAILING BLANKS
- RTB4 NZ X4,RTB IF TRAILING ZEROS LOOKED FOR AND FOUND
- * HERE IF NO BLANKS FOUND IN WORD.
- RTB5 NZ B3,RTB IF NO CHANGES MADE
- SX6 2R PLACE BLANK IN LAST WORD. JUST IN CASE
- LX6 -12 OF POSSIBLE 00B CHARACTER IN CURRENT WORD
- SA6 A1+B1
- EQ RTB RETURN
- * PROCESS TRUNCATION WHEN UNPACK NECESSARY.
- RTB6 SA1 B7 SET FIRST WORD
- SB6 E.SCR SET TO SCRATCH AREA
- SB3 B7 SAVE FWA OF CODED BUFFER
- RJ UPL
- SB6 E.SCR
- SB7 B3
- RJ RTA RE-PACK TRUNCATED LINE
- EQ RTB RETURN
- SAC SPACE 4,15
- ** SAC - SET ASCII MODE LINE AND READS.
- *
- * ENTRY NONE.
- *
- * EXIT LINE IN *E.STR* BUFFER,
- * *E.NMODE* SET TO ASCII.
- *
- * USES A - 1, 6, 7.
- * X - 1, 6, 7.
- * B - 6.
- *
- * CALLS UPL.
- SAC PS ENTRY/EXIT
- SA1 E.CMODE
- SX6 B1
- BX1 X1-X6
- SA6 A1-B1 SET E.NMODE TO ASCII
- ZR X1,SAC IF LINE ALREADY UNPACKED
- MX7 0
- SA6 A1 SET CURRENT MODE TO ASCII
- SA7 A1+B1 SET NO LINE MODIFICATIONS
- * UNPACK LINE.
- SA1 E.LINE
- SB6 E.STR
- RJ UPL UNPACK LINE
- SA6 E.STR-1 SET NUMBER OF CHARACTERS IN LINE
- EQ SAC RETURN
- SCD SPACE 4,10
- ** SCD - SET CODED LINE.
- *
- * ENTRY NONE.
- *
- * EXIT CURRENT LINE IN *E.LINE*.
- * *E.CMODE* SET TO CODED.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6.
- * B - 6, 7.
- *
- * CALLS RTA.
- SCD PS ENTRY/EXIT
- SA1 E.CMODE
- MX6 0
- SA2 A1+B1 GET E.LMOD
- SA6 A1-B1 SET E.NMODE TO CODED
- SA6 A1 SET CURRENT MODE TO CODED
- ZR X2,SCD IF NO LINE MODIFICATIONS
- SA6 A1+B1 SET NO MODIFICATIONS
- SB6 E.STR
- SB7 E.LINE
- RJ RTA PACK LINE
- EQ SCD RETURN
- STL SPACE 4,15
- ** STL - PROCESS TLX INTERRUPTS.
- *
- * ENTRY NONE.
- *
- * EXIT RETURNS TO CALLER IF NO TLX INTERRUPT SENSED,
- * ELSE REWINDS THE OUTPUT BUFFER AND EXITS TO *CER1* TO
- * POP THE INPUT STACK.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6.
- *
- * MACROS DISTC, RECALL.
- STL PS ENTRY/EXIT
- MX6 0
- SA2 TLX
- ZR X2,STL IF NO INTERRUPT, RETURN
- SA6 A2
- DISTC ON,TLX
- RECALL OUTPUT
- SA1 =XOUTPUT+1
- MX6 -18
- BX6 -X6*X1
- SA6 A1+1 IN=OUT=FIRST
- SA6 A6+1
- EQ CER1 GET NEXT INPUT LINE, EXIT
- STK SPACE 4,15
- ** STK - STACK INPUT DEVICES.
- *
- * ENTRY (A1) = NEW DEVICE ADDRESS (EG. *I.DEV*).
- *
- * EXIT RETURNS IF DEVICE IS NOT AVAILABLE (USUALLY BUSY),
- * ELSE, ROUTINE EXITS TO NCM TO PROCESS THE NEW DEVICE.
- *
- * USES A - 1, 3, 4, 6, 7.
- * X - 1, 3, 4, 6, 7.
- * B- 7.
- *
- * CALLS UPL.
- *
- * NOTES THIS ROUTINE ASSUMES THAT .LINE FOR THE DEVICE HAS
- * BEEN PRE-LOADED WITH THE SPECIFIED COMMAND LINE.
- STK PS ENTRY/EXIT
- SA3 C.STR-1 MOVE TO DEVICE WORD
- SA4 C.ON GET POINTER TO CURRENT DEVICE
- BX6 X3
- SA6 X4+1
- * UNSTACK ANYTHING THAT CAN BE SAFELY REMOVED.
- STK1 SA3 X4+B1 GET CHARACTER POINTER WORD
- SX6 X4-I.DEV
- UX7,B7 X3 B7 .LE. 0, IF READY TO READ NEXT LINE
- ZR X6,STK2 IF ON PRIMARY INPUT DEVICE
- GT B7,STK2 IF DEVICE NOT AT END OF LINE
- SA3 X4-1 OBTAIN FET POINTER FOR DEVICE
- BX6 X3
- AX3 60 EXTEND *CMDPOP* FLAG
- BX6 -X3*X6 0, IF OK TO POP DEVICE
- NZ X6,STK2 IF (FET) .AND. (.NOT. *CMDPOP*)
- * POP STACK AND RE-TEST.
- MX6 1
- SA4 X4 GET NEW DEVICE
- SA6 A4 IDLE OLD DEVICE
- SA2 X4+B1 GET NEW C.STR-1 WORD
- BX7 X4
- LX6 X2
- SA7 C.ON RESET ACTIVE DEVICE POINTER
- SA6 C.STR-1 RESET CHARACTER POINTER
- EQ STK1 UNSTACK
- * PUSH NEW ENTRY ONTO STACK.
- STK2 SA1 A1
- SX6 A1
- BX7 X4
- SA4 A1+B1 NEW DELIMITER WORD
- PL X1,STK IF REQUESTED DEVICE IS STILL ACTIVE
- SA6 C.ON RESET C.ON
- SA7 A1 PUT STACK ENTRY
- PX6 B1,X4 RESET CHARACTER POINTER
- SA6 C.STR-1
- SA1 A1-34D SET FWA OF CODED LINE
- SB6 C.STR
- RJ UPL UNPACK LINE
- EQ NCM PROCESS NEW LINE, EXIT
- TAB SPACE 4,20
- ** TAB - TAB INPUT LINE ACCORDING TO TAB SETTINGS.
- *
- * ENTRY (B6) = FWA-1 OF TEXT LINE.
- *
- * EXIT LINE TABBED.
- * TRAILING SPACES ARE NOT DELETED.
- * (X7) = 0 IF NO TRUNCATION.
- *
- * USES A - 1, 3, 4, 6, 7.
- * X - 1, 2, 3, 4, 6, 7.
- * B - 3, 4, 5, 7.
- * E.SCR.
- *
- * CALLS TSL.
- TAB1 SA1 A1+1 GET NEXT
- SA6 B3
- SB3 B3+B1
- LT B3,B4,TAB2 IF NOT 160 CHARACTERS WORTH
- SX7 X6-1R
- NZ X5,TAB5 IF NOT BLANK (TRUNCATE)
- SB3 B4+
- TAB2 BX6 X1
- IX2 X1-X3
- NZ X2,TAB1 IF NOT TAB CHARACTER
- TAB3 ZR X4,TAB1 IF END OF TABS
- SB5 X4+E.SCR-1
- SA4 A4+B1
- LT B5,B3,TAB3 IF PAST EXISTING TAB
- SA1 A1+B1
- LE B5,B3,TAB2 IF CURRENTLY POINTING AT TAB
- TAB4 SA7 B3 BLANK TO TAB POSITION
- SB3 B3+B1
- LT B3,B5,TAB4 IF NOT AT TAB POSITION
- PL X1,TAB2 IF MORE DATA
- SX7 0 SET NO TRUNCATION
- TAB5 MX6 2
- SA1 E.SCR PREPARE TO COPY BACK
- SA6 B3
- TAB6 BX6 X1
- SB7 B7+B1
- SA1 A1+B1
- SA6 B7-B1
- PL X6,TAB6 IF MORE
- RJ TSL TRIM TRAILING SPACES
- TAB PS ENTRY/EXIT
- SA3 TABCHAR
- SX7 B0 SET NO TRUNCATION
- SB7 B6+B1
- NG X3,TAB IF NO TAB CHARACTER IS DEFINED
- SA4 A3+B1
- SA1 B6+B1 SET FIRST CHARACTER IN LINE
- SB3 E.SCR
- SX7 1R
- SB4 E.SCR+160D
- EQ TAB2 PROCESS TABS
- TCD SPACE 4,15
- ** TCD - TABULATE CODED DATA LINE.
- *
- * ENTRY (D.LINE) = DATA LINE.
- *
- * EXIT (C.LINE) = TABBED LINE.
- *
- * USES A - 1, 3.
- * X - 1, 3.
- * B - 6, 7.
- * E.SCR.
- *
- * CALLS RTA, TAB, UPL.
- TCD PS ENTRY/EXIT
- SA3 TABCHAR
- NG X3,TCD IF NO TAB CHARACTER
- SA1 D.LINE
- SB6 D.STR
- RJ UPL
- SB6 D.STR-1
- RJ TAB TABULATE
- SB7 D.LINE
- SB6 D.STR
- RJ RTA REPACK LINE
- EQ TCD RETURN
- TLB SPACE 4,10
- ** TLB - TRANSFER DATA LINE TO *E.LINE* BUFFER.
- *
- * EXIT LINE TRANSFERRED FROM *D.LINE* TO *E.LINE*.
- *
- * USES X - 1, 2, 6, 7.
- * A - 1, 6, 7.
- * B - 5, 6.
- TLB SUBR ENTRY/EXIT
- SB5 B0
- SB6 D.LINE
- MX2 -12
- SB7 E.LINE
- TLB1 SA1 B6+B5
- LX7 X1
- BX6 -X2*X1
- SA7 B7+B5
- SB5 B5+B1
- NZ X6,TLB1 IF NOT END OF LINE
- SA6 E.CMODE SET CURRENT MODE TO CODED
- SA6 A6+1 SET NO LINE MODIFICATIONS
- EQ TLBX RETURN
- TOP SPACE 4,15
- ** TOP - MOVE POINTER TO TOP OF FILE.
- *
- * ENTRY AT *TOP*.
- * AT *TOP1.1* FROM *ERD*.
- *
- * EXIT TO *ERD1* IF EOI ENCOUNTERED.
- * TO *ERD5* IF END OF FILE.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * X - 0, 1, 2, 3, 4, 6, 7.
- * B - 6, 7.
- *
- * CALLS CFF, ERD, WTF.
- *
- * MACROS READ, RECALL, REWIND, WRITEF, WRITER, WRITEW.
- TOP PS ENTRY/EXIT
- SA2 IWHERE LINE COUNT
- SA3 INDEX SUBSCRIPT OF LAST CONNAND
- SX3 X3-.TOPNUL
- ZR X3,TOP1 IF TOPNULL COMMAND
- SX6 B1
- IX2 X2-X6
- ZR X2,TOP IF ALREADY AT TOP, RETURN
- TOP1 SA1 NOMOD
- PL X1,TOP2 IF THERE WERE MODS. READ REST OF FILE
- * ENTRY FROM *ERD*.
- TOP1.1 REWIND FTA,RECALL
- REWIND FTB,RECALL
- EQ ERD5 PROCESS END OF FILE
- TOP2 RECALL E.IN
- RECALL E.OUT
- RJ WTF WRITE CURRENT LINE
- EQ TOP6 TRANSFER FILE
- TOP3 READ E.IN RESTART READ
- TOP4 RECALL WAIT FOR CIO TO DO SOMETHING
- EQ TOP6 TRANSFER FILE
- TOP5 WRITEW E.OUT,B6,B7 WRITE BUFFER
- SX7 X0 MOVE E.IN(OUT) POINTER
- MX6 0
- SA7 E.IN+3 UPDATE OUT
- SA6 RC SET DATA READ
- TOP6 SA1 E.IN+2 IN
- SA2 A1+B1 OUT
- SX0 X1
- IX6 X1-X2 IN-OUT (CONSECUTIVE WORDS IN BUFFER)
- PL X6,TOP7 IF (IN-OUT) IS LARGEST BLOCK
- SA3 A2+B1 LIMIT
- SA4 A1-B1 FIRST
- IX6 X3-X2 LIMIT-OUT
- SX0 X4
- TOP7 SB6 X2 SET STARTING ADDRESS
- SB7 X6 SET WORD COUNT
- NZ B7,TOP5 IF WORDS TO TRANSFER
- SA4 E.IN
- LX4 59-0
- PL X4,TOP4 IF FILE BUSY
- SA1 E.IN+2
- SA2 A1+B1 RECHECK POINTERS
- BX1 X1-X2
- NZ X1,TOP6 IF CIO JUST FINISHED
- LX4 0-3
- NG X4,TOP8 IF EOF OR EOI
- WRITER E.OUT FLUSH BUFFER
- EQ TOP9 READ FILE
- TOP8 LX4 3-4
- PL X4,TOP3 IF FULL BUFFER
- LX4 4-9
- NG X4,ERD1 IF AT EOI
- WRITEF E.OUT FLUSH BUFFER
- TOP9 READ E.IN BEGIN READ OF NEXT SECTION OF FILE
- RECALL E.OUT WAIT FOR WRITE FET TO SETTLE
- SA1 X2
- MX7 1
- SA7 RC SET NO DATA READ
- BX6 X1 MOVE FILE NAME TO *CFET*
- SA6 CFET
- RJ CFF COPY REMAINDER OF FILE
- EQ ERD1 PROCESS EOI ENCOUNTERED
- TSL SPACE 4,15
- ** TSL - TRIM SPACES OFF LINE (STRING BUFFER).
- *
- * ENTRY (A6) = FWA OF END OF LINE CHARACTER.
- * (X6) = MASK OF 2.
- *
- * EXIT LINE TRIMMED.
- * (E.STR-1) = NEW LINE LENGTH.
- *
- * USES A - 1, 6.
- * X - 1, 6.
- * B - 2.
- TSL1 SB2 B2-B1 POSITION BACK TO NEXT CHARACTER
- LE B2,B6,TSL2 IF AT START OF LINE -1
- SA1 B2
- SX1 X1-1R
- ZR X1,TSL1 IF CHARACTER WAS A BLANK
- TSL2 SA6 B2+B1 PUT NEW END CHARACTER
- SX6 B2-B6 GET NEW LENGTH
- SA6 B6+ SET NEW LENGTH
- TSL PS ENTRY/EXIT
- SB2 A6
- EQ TSL1 PROCESS TRIM
- UPL SPACE 4,30
- ** UPL - UNPACK LINE TO ASCII BUFFER.
- *
- * ENTRY (A1) = FWA OF CODED LINE.
- * (X1) = FIRST WORD OF CODED LINE.
- * (B6) = FWA STRING BUFFER.
- *
- * EXIT (X6) = COUNT OF SIGNIFICANT CHARACTERS.
- * (B5) = FWA OF BUFFER (NULL LINE IF (B5) = (B6)).
- * (B6) = ADDRESS OF END OF LINE MARKER.
- * (B7) = IF .GT. 0, THEN LWA OF BUFFER.
- * IF (B7) = (B6), THEN BUFFER IS FULL.
- * IF (B7) = 0 AND (B2) .LT. 0, THEN 3 OR MORE TRAILING
- * BLANKS WERE REMOVED.
- * LINE UNPACKED WITH ASCII ESCAPE CHARACTERS INCLUDED
- * IN WORDS WHERE NEEDED.
- * END OF LINE TERMINATOR (MASK OF 1) AFTER LAST
- * NON-BLANK CHARACTER (OR AT END OF BUFFER - (B7)).
- *
- * USES A - 1, 2, 6.
- * X - 0, 1, 2, 3, 4, 6, 7.
- * B - 2, 5, 6, 7.
- *
- * NOTES LINES ARE ASSUMED TO BE 160 CHARACTERS LONG.
- * ASCII MODE WILL BE USED IF (UPLA) = 2B,
- * NORMAL MODE IS USED IF (UPLA) = 100B.
- * TRAILING SPACES ARE NOT CONSIDERED SIGNIFICANT.
- * TRAILING 00B CHARACTERS (COLON/64 CHARACTER SET) ARE
- * SIGNIFICANT ONLY IF THERE IS A NON-00B CHARACTER
- * FOLLOWING THEM IN THE CODED LINE. THIS AGREES WITH
- * THE DEFINITION OF THE END OF LINE BYTE.
- UPL1 SX7 X7-76B TEST FOR ASCII
- ZR X7,UPL6 IF ASCII
- UPL2 SA6 B6 SAVE ASSEMBLY
- SB6 B6+B1
- GE B6,B7,UPL8 IF SAVED LAST CHARACTER
- UPL3 LX1 6 GET NEXT CHARACTER
- BX6 -X2*X1
- SB2 B2-B1 DECREMENT COUNT
- BX7 X6+X0 IF ESCAPE = 76B
- UPL4 PL B2,UPL1 IF NOT LAST CHARACTER OF WORD
- ZR X4,UPL10 IF END OF LINE REACHED
- UPL5 SA1 A1+B1 GET NEXT WORD
- SB2 9 RESET CHARACTER POSITION
- BX4 -X3*X1 0, IF END OF LINE
- NZ X7,UPL1 IF NOT PROCESSING ASCII
- EQ UPL2 IF ON SECOND PART OF ASCII
- * PROCESS ASCII CHARACTER.
- UPL6 LX1 6 GET NEXT CHARACTER
- SB2 B2-B1 DECREMENT COUNT
- BX7 -X2*X1
- LX6 6 SHIFT ESCAPE OVER
- IX6 X6+X7 FORM ASCII WORD
- MX7 0 SET ON SECOND PART OF ASCII
- PL B2,UPL2 IF NEW WORD NOT NEEDED
- EQ UPL4 GET NEXT WORD
- * END OF BUFFER REACHED.
- * DETERMINE SIGNIFICANCE OF LAST CHARACTER.
- UPL7 MX6 2
- SA6 B6 SET LAST CHARACTER
- EQ UPL13 FINISH UNPACK OPERATION
- UPL8 NZ X6,UPL10 IF LAST CHARACTER .NE. 0
- NZ X4,UPL7 IF MORE FOLLOWS, LAST 0 IS COLON
- UPL9 LX1 6 SEE IF MORE CHARACTERS FOLLOW
- BX6 -X2*X1
- SB2 B2-1
- NZ X6,UPL7 IF CHARACTER FOLLOWS, 0 IS COLON
- PL B2,UPL9 IF MORE IN WORD, ELSE LAST IS NOT COLON
- * END OF LINE REACHED. TRIM 00B AND BLANKS.
- UPL10 SB6 B6-B1 SKIP TRAILING ZEROS
- SA1 B6 GET LAST CHARACTER
- LT B6,B5,UPL12 IF PAST START OF BUFFER
- ZR X1,UPL10 IF 00B CHARACTER
- SB7 B0 SET POSSIBLE BLANKS TRIMMED
- SB2 B6-B1
- UPL11 SX1 X1-1R SKIP TRAILING BLANKS
- NZ X1,UPL12 IF NOT BLANK
- SB6 B6-B1
- SA1 B6
- GE B6,B5,UPL11 IF NOT PAST START OF BUFFER
- UPL12 SB6 B6+1 PUT MARK AFTER LAST NON-BLANK
- MX6 2
- SA6 B6
- UPL13 SX6 B6-B5 GET CHARACTER COUNT
- NZ B7,UPL IF NOT CHECKING TRAILING BLANKS
- SB2 B6-B2
- UPL PS ENTRY/EXIT
- SA2 UPLA
- MX3 -12 END OF LINE MASK
- SB5 B6 MARK FIRST CHARACTER POSITION
- SX0 X2 SET MODE OF UNPACK
- MX2 -6 CHARACTER MASK
- BX4 -X3*X1 TEST FOR END OF LINE
- SB2 9 SET CHARACTER POSITION
- SB7 B6+MAXWD SET LWA+1
- EQ UPL3 PROCESS UNPACK
- UPLA CON 100B SET NO ASCII (RESET IN PRESET IF NEEDED)
- VAL SPACE 4,15
- ** VAL - EVALUATE NUMERIC STRING.
- *
- * ENTRY (A5) = FWA OF NUMERIC STRING.
- * (X5) = FIRST WORD OF NUMERIC STRING.
- *
- * EXIT (A5) = LWA+1 OF NUMERIC STRING.
- * (X5) = ((A5)).
- * (X6) = NUMBER EVALUATED.
- * = -0, IF NUMBER 0 WAS SPECIFIED.
- *
- * USES A - 5.
- * X - 3, 4, 5, 6, 7.
- * B - 2, 3, 4.
- *
- * NOTES THIS ROUTINE CONVERTS AN ASTERISK (*) TO 2**30 - 1.
- *
- VAL1 SX4 X5-1R9-1
- SX3 X5-1R0
- BX4 -X3*X4
- PL X4,VAL2 IF NOT A NUMBER
- LX4 B2,X6 *4
- IX4 X6+X4 *5
- SA5 A5+B1 NEXT CHARACTER
- LX4 1 *10
- SX7 X7+B1 SET CHARACTER ENCOUNTERED FLAG
- IX6 X4+X3
- PL X5,VAL1 IF NOT END OF LINE
- VAL2 ZR X7,VAL3 IF NO NUMBERS ENCOUNTERED
- NZ X6,VAL4 IF NOT JUST 0 USED
- MX6 60 SET -0 FLAG
- EQ VAL4 END OF NUMBERS
- VAL3 SX7 X5-1R*
- NZ X7,VAL4 IF NOT *
- SA5 A5+1 STEP OVER *
- MX6 -30
- BX6 -X6 SET * EQUIVALENT
- VAL4 SB4 X5-1R
- ZR B4,VAL5 IF BLANK
- NE B4,B1,VAL IF NOT COMMA
- NZ B3,VAL IF SECOND COMMA
- VAL5 SA5 A5+B1
- SB3 B3+B4 SET COMMA FLAG
- PL X5,VAL4 IF NOT END OF LINE
- VAL PS ENTRY/EXIT
- BX6 X6-X6 CLEAR ASSEMBLY
- SB2 B1+B1
- MX7 0 CLEAR CHARACTER ENCOUNTERED
- SB3 B0 SET NO COMMA
- PL X5,VAL1 IF NOT END OF LINE
- EQ VAL RETURN
- VIS SPACE 4,10
- ** VIS - VOID INSTRUCTION STACK.
- *
- * *VIS* SHOULD BE CALLED IMMEDIATELY AFTER ALL INSTRUCTION
- * MODIFICATIONS TO VOID THE INSTRUCTION STACK.
- VIS SUBR ENTRY/EXIT
- EQ VIS RETURN
- VRT SPACE 4,10
- ** VRT - VERIFY LINE AND RETURN TO *NCM*.
- *
- * ENTRY NONE.
- *
- * EXIT TO *NCM*.
- *
- * CALLS VRY.
- *
- * NOTES DO NOT RETURN JUMP TO THIS ROUTINE.
- VRT RJ VRY VERIFY LINE
- EQ NCM EXIT
- VRY SPACE 4,15
- ** VRY - VERIFY XEDIT OPERATIONS.
- *
- * ENTRY NONE.
- *
- * EXIT CURRENT LINE WRITTEN OF *VERIFY* TRUE.
- * THE LINE IS PACKED IF NEEDED AND HOUSEKEEPING DONE.
- *
- * USES A - 1, 4, 6.
- * X - 1, 4, 6.
- * B - 6, 7.
- *
- * CALLS RTA.
- *
- * MACROS WRITEC.
- VRY1 WRITEC OUTPUT,E.LINE
- VRY PS ENTRY/EXIT
- SA4 VERIFY
- PL X4,VRY IF NOT IN *VERIFY* MODE
- SA1 E.LMOD
- ZR X1,VRY1 IF NO MODIFICATIONS OR PACKED
- SA1 A1-1
- ZR X1,VRY1 IF CODED FORMAT
- SB6 E.STR RE-PACK LINE
- SB7 E.LINE
- MX6 0 SET LMOD TO NO LINE MOD
- SA6 A1+B1 E.LMOD
- RJ RTOA
- EQ VRY1 WRITE LINE
- WTF SPACE 4,15
- ** WTF - WRITE EDIT LINE.
- *
- * ENTRY (IWHERE) = IF CREATION MODE, .LE. ZERO.
- * ELSE, LINE COUNT.
- *
- * EXIT (IWHERE) = IF CREATION MODE, 1.
- * IF UPDATING, (IWHERE) + 1.
- *
- * USES A - 1, 2, 3, 6, 7.
- * X - 1, 2, 3, 6, 7.
- * B - 6, 7.
- *
- * CALLS RTOA, VIS.
- *
- * MACROS WRITEC
- WTF2 WRITEC E.OUT,E.LINE
- WTF3 SA3 IWHERE BUMP IWHERE
- SX7 B1
- IX7 X3+X7
- SA7 A3
- WTF PS ENTRY/EXIT
- SA1 UPDATE
- PL X1,WTF3 IF NOT UPDATING FILE.
- * WORD IS REPLACED AFTER FIRST ENTRY.
- WTFA SA1 WTFB
- EQ WTF1 PRESET CODE
- * NORMAL CODE FOLLOWS.
- WTF RMT
- SA1 E.LMOD
- ZR X1,WTF2 IF NO MODIFICATION
- RMT
- SA1 A1-B1
- ZR X1,WTF2 IF IN CODED MODE
- SB6 E.STR
- SB7 E.LINE
- RJ RTOA RE-PACK LINE
- MX6 0
- SA6 E.LMOD SET NO MODIFICATIONS
- EQ WTF2 WRITE LINE
- * PRESET CODE.
- WTF1 SA2 IWHERE
- BX6 X1
- SX7 B1
- SA6 WTFA REPLACE PRESET JUMP
- RJ VIS VOID INSTRUCTION STACK
- PL X2,WTF+1 IF NOT CREATION MODE
- SA7 A2 SET IWHERE = 1
- MX6 0
- SA7 NOMOD SET MODIFICATIONS MADE
- SA6 RC SET DATA READ
- EQ WTF RETURN (NO LINE TO WRITE OUT)
- WTFB BSS 0
- WTF HEREL
- TITLE SPECIAL PURPOSE SUBROUTINES.
- LCB SPACE 4,25
- ** LCB - LOAD CIRCULAR BUFFER.
- *
- * ENTRY (A2) = ADDRESS OF OUT.
- * (A3) = ADDRESS OF FIRST.
- * (A4) = RETURN ADDRESS.
- * (B4) = OUT.
- *
- * EXIT TO RETURN ADDRESS -1 IF CONTINUATION READ.
- * TO RETURN ADDRESS IF EOR/EOF.
- * (X1) = LAST WORD ADDRESS OF WORKING BUFFER.
- * = -1 IF EOF.
- * = -2 IF EOI.
- *
- * MACROS READ, RECALL.
- *
- * NOTES ROUTINE IS COPIED FROM COMCRDW.
- * REQUEST READ IF BUFFER IS EMPTY, NOT BUSY AND NOT
- * EOR/EOF. IF BUFFER IS BUSY, RECALL AND RETURN.
- * MODIFIED TO RETURN EOI STATUS IF FET UNDER
- * INVESTIGATION HAS A ZERO FILENAME. (ASSUMES OPTIONS
- * SUCH AS I=0 USED).
- LCB= SA1 A3-B1 CHECK BUFFER STATUS
- SX6 B4 STORE OUT
- LX1 59-0
- SA6 A2
- NG X1,LCB2 IF BUFFER NOT BUSY
- SX6 -2 PREPARE EOI STATUS
- ZR X1,LCB8 IF NO FILE NAME (EG. L=0 USED)
- RECALL
- LCB1 SB2 A4-B1 CONTINUE READ
- JP B2 RETURN
- LCB2 SA1 A2-B1 RE-READ IN
- SB3 X1
- NE B3,B4,LCB1 IF BUFFER NOT EMPTY
- SA1 A3-B1 CHECK BUFFER STATUS
- LX1 59-4
- NG X1,LCB3 IF EOR/EOF/EOI
- READ A3-B1 XEDIT ONLY USES READ FUNCTION
- SB2 A4-B1
- JP B2 RETURN
- LCB3 LX6 B1,X1
- SA1 A3 SET IN = OUT = FIRST
- SX7 X1
- SA7 A1+B1
- SX1 -B1 SET EOF RESPONCE
- SB2 A4 SET RETURN ADDRESS
- NG X6,LCB4 IF EOF
- MX2 -4
- SX1 B6
- LX6 -14+4
- BX2 -X2*X6
- SB3 X2+
- EQ B3,B1,LCB6 IF LEVEL 1
- LCB4 SX2 A3-B1 RESET (X2)
- SA7 A7+B1
- NG X1,LCB7 IF EOF/EOI
- LCB5 JP B2 RETURN
- LCB6 SA7 A7+B1 STORE OUT
- READ A3-B1,R RESTART TELETYPE READ
- SB2 A4-B1
- JP B2 RETURN
- LCB7 LX6 3-9
- PL X6,LCB5 IF NOT EOI
- LX1 1 SET -2 RESPONSE
- JP B2 RETURN
- LCB8 SB2 A4
- BX1 X6 MOVE EOI STATUS
- JP B2 RETURN
- RDX SPACE 4,20
- ** RDX - READ EXIT.
- *
- * ENTRY (A2) = ADDRESS OF OUT.
- * (A3) = ADDRESS OF FIRST.
- * (A4) = RETURN ADDRESS.
- * (X3) = FIRST.
- * (B3) = IN.
- * (B4) = OUT.
- * (B5) = LIMIT.
- *
- * EXIT TO RETURN ADDRESS.
- *
- * MACROS READ.
- *
- * NOTES ROUTINE COPIED FROM COMCRDW.
- * EXIT FROM READ SUBROUTINE TO CALLER.
- * IF CIRCULAR BUFFER IS BUSY, OR EOR/EOF IS SENSED, NO
- * ACTION IS TAKEN. OTHERWISE, THE WORD COUNT REMAINING
- * IN THE BUFFER IS CHECKED AND A READ FUNCTION ISSUED.
- * IF NECESSARY.
- RDX= SA1 A3-B1 CHECK BUFFER STATUS
- SX6 B4
- LX1 59
- SA6 A2 STORE OUT
- SX2 A3-B1 RESET (X2)
- PL X1,RDX1 IF BUFFER BUSY
- LX1 -4
- NG X1,RDX1 IF EOR/EOF/EOI SET
- SA1 A2-B1 REREAD IN
- SB3 X1
- * IF BUFFER IS NOT BUSY, CHECK SIZE AND ISSUE READ.
- SX6 B3-B4 (IN-OUT)
- SB2 X3 (LIMIT-FIRST)
- LX3 X6,B1 2*(IN-OUT)
- SX7 B5-B2
- AX6 60 SIGN OF (IN-OUT)
- BX4 X6-X7 INVERT BUFFER IF OUT >= IN
- IX6 X4-X3 BUFFER SIZE - 2*(IN-OUT)
- AX7 9
- NG X6,RDX1 IF BUFFER THRESHOLD NOT REACHED
- ZR X7,RDX1 IF BUFFER NOT BIG ENOUGH TO READ AHEAD
- READ X2 READ FILE
- RDX1 SX1 B0 RESPONSE =0
- SB2 A4
- JP B2 RETURN
- SPACE 4
- * COMMON DECKS NEEDED GLOBALLY.
- *CALL COMCCDD
- *CALL COMCCFD
- *CALL COMCCIO
- *CALL COMCCPM
- *CALL COMCCUA
- *CALL COMCEDT
- *CALL COMCLFM
- *CALL COMCOVL
- *CALL COMCPFM
- *CALL COMCRDC
- *CALL COMCSYS
- *CALL COMCWTC
- *CALL COMCWTO
- *CALL COMCWTW
- *CALL COMCZTB
- SPACE 4
- IF -DEF,ACCTE,3
- TITLE PRESET AND BUFFER ALLOCATION.
- QUAL$ BSS 0 COMMON DECK QUAL DONE BY XEDIT
- QUAL PRESET
- ** NOTE- PRESET RESIDES IN TWO LOCATIONS. THE MAJOR AREA
- * RESIDES IN THE OUTGOING EDIT FILE BUFFER. THE OTHER
- * SECTION DEALS ONLY WITH THE LAST MINUTE DETAILS WHICH
- * COULD BE WIPED OUT BY USING THE EDIT FILES. THIS CODE
- * RESIDES IN THE D.STR ARRAY.
- PRF SPACE 4,20
- ** PRF - PRESET EDIT FILE.
- *
- * ENTRY AT *PRF*, IF FILE IS LOCAL.
- * AT *PRF3*, IF *C* PARAMETER USED.
- * AT *PRF4*, IF *P* PARAMETER USED.
- * (D.STR) = EDIT FILE NAME.
- *
- * EXIT TO *NCM* TO PROCESS COMMANDS.
- * TO *ABT* IF FATAL ERROR.
- *
- * USES A - 1, 2, 3, 4, 5, 6, 7.
- * X - 1, 2, 3, 4, 5, 6, 7.
- * B - 3, 6, 7.
- *
- * CALLS GFN, RDF, RDL, RTA, SFN, STF STK, UPL.
- *
- * MACROS ATTACH, DISTC, GET, READ, RECALL, RENAME,
- * REWIND, STATUS, WRITEC.
- ORG D.STR FILE PRESET
- PRF EQ PRF8 PROCESS LOCAL FILE
- * BAD FILE READ.
- PRF1 REWIND E.IN,RECALL
- READ X2,RECALL
- READ X2,RECALL
- SA1 X2
- LX1 59-9 POSITION EOI BIT
- SX4 PRFB * FILE NOT XEDIT-ABLE.
- PL X1,PRF6 IF ABOVE
- SA1 E.IN+2 CHECK IN POINTER
- SX1 X1-BUFB
- NZ X1,PRF6 IF DATA ON FILE
- PRF2 BSS 0
- IF DEF,CYBRNET,2
- WRITEC OUTPUT,PRFC * EMPTY FILE/CREATION MODE ASSUMED
- SKIP 2
- SX4 PRFC * EMPTY OR FILE NOT FOUND.
- EQ PRF6 CREATE FILE
- * ENTER IF *C* PARAMETER SPECIFIED (CREATION MODE).
- PRF3 SA1 UPDATE
- SB6 PRFE * UPDATE/CREATION MODE CONFLICT.*
- PL X1,ABT IF ABOVE
- REWIND E.IN,RECALL
- REWIND E.OUT,RECALL REWIND SCRATCH FILES
- SA1 PRFA PUT NAME INTO FET
- SX7 1031B NOT BUSY, EOI ENCOUNTERED
- SX6 -B1
- BX7 X7+X1
- SA6 IWHERE SET CREATION MODE FLAG
- SA7 E.IN
- SA6 RC SET NO DATA READ
- SA6 FS SET NOT READING OFF EDIT FILE
- EQ PRF10 COMPLETE INITIALIZATION
- * ENTER IF *P* PARAMETER SPECIFIED.
- PRF4 SA1 PRFA OLSCRB
- SA2 IFN
- MX7 59
- BX7 -X7+X1 SET *NOT BUSY*
- SA7 FS SET READING OFF SCRATCH FILE
- LX6 X2
- SA7 FT
- SA6 FT+8
- GET FT
- SA3 X2
- SX1 36000B LOAD MASK
- BX6 X1*X3
- ZR X6,PRF5 IF FILE GOTTEN
- SA1 UPDATE
- PL X1,PRF4.1 IF IN LOOK MODE
- ATTACH X2,,,,W
- EQ PRF4.2 CHECK FOR ERROR
- PRF4.1 ATTACH X2,,,,R
- PRF4.2 SA3 X2
- SX1 36000B
- BX6 X1*X3
- SX4 ERR SET ERROR MESSAGE TO PFM
- NZ X6,PRF6 IF ABOVE
- MX7 1 SET *ATTACH* BIT
- LX7 57-59
- SA7 SPCP
- SA1 FT+8
- MX6 42 RENAME FOR D.A. EXIT PROBLEMS
- SX7 B0
- BX1 X6*X1
- SA7 FS SET READING OFF PRIMARY FILE
- RENAME FT,X1
- PRF5 SA1 FT GET NAME
- MX6 42
- SX7 B1
- BX2 X6*X1 CLEAR LOWER BITS
- IX7 X2+X7 SET COMPLETE
- RECALL E.IN
- SA7 E.IN PUT NEW FILENAM INTO FET
- SA1 SPCP SET *P* AS SPECIFIED PARAMETER
- MX7 1
- LX7 58-59
- BX7 X1+X7
- SA7 A1
- EQ PRF9 SET UP FILE FOR EDITING
- * PROCESS EDITFIL ERROR.
- * (X4) = ADDRESS OF ERROR MESSAGE.
- PRF6 WRITEC OUTPUT,X4 ISSUE MESSAGE
- SA1 PRFF
- SX6 X1-1 DECREMENT RETRY COUNT
- SA6 A1+
- ZR X1,PRF13 IF EXCEEDED RETRY LIMIT
- PRF7 WRITEC OUTPUT,PRFH * NAME EDIT FILE
- RJ RDL READ A LINE (NOTE- PRELIX + INITIALLY SET)
- NZ X1,PRF7 IF HIT A CARRIAGE RETURN
- SA1 D.LINE
- SB6 E.STR *E.STR* USED AS SCRATCH
- RJ UPL
- SA5 E.STR
- RJ GFN GET SPECIFIED EDITFIL NAME
- SX4 =C* RESERVED FILE NAME.*
- SB6 B6-303B
- ZR B6,PRF7.1 IF RESERVED FILE NAME
- SX4 PRFL
- NZ B4,PRF7.1 IF SPECIAL CHARACTERS
- SX4 PRFM
- PRF7.1 NZ X1,PRF6 IF FILE NAME ERROR
- SA6 IFN
- NG X5,PRF8 IF END OF LINE
- MX3 -6 EXTRACT LOWER CASE PART OF CHARACTER
- BX5 -X3*X5
- SX4 X5-1RC
- ZR X4,PRF3 IF *C* USED
- SX4 X5-1RP
- ZR X4,PRF4 IF *P* USED
- * NO PARAMETER USED
- PRF8 SA1 IFN PUT EDIT NAME INTO FET
- MX7 59D
- BX7 -X7+X1 SET FET *NOT BUSY*
- RECALL E.IN
- MX6 0
- SA7 E.IN SET NAME INTO FET
- SA6 FS SET READING OFF EDIT FILE
- RJ STF SET TERMINAL FILE
- NZ X6,PRF9 IF EDITFIL NOT TYPE *TT*
- SA1 E.IN
- MX6 42
- BX1 X6*X1
- RJ SFN SPACE FILE NAME
- SX4 =C* FILENAM CANNOT BE ASSIGNED TO THE TERMINAL.*
- LX6 -6
- SA6 X4 INSERT FILE NAME INTO MESSAGE
- EQ PRF6 PROCESS EDITFIL ERROR
- PRF9 REWIND E.IN,RECALL REWIND BOTH SCRATCH FILES
- REWIND E.OUT,RECALL
- BX7 X7-X7
- SA7 E.IN+5 INITIALIZE STATUS RESPONCE CELLS
- SA7 A7+B1
- STATUS E.IN,P
- SA1 E.IN+5 GET FNT ENTRY OF EDITFIL
- ZR X1,PRF2 IF FILE NOT THERE
- BX6 X1
- LX1 59-14D EXECUTE ONLY FLAG
- SX4 PRFJ * CANNOT EDIT EXECUTE ONLY FILES
- NG X1,PRF6 IF ABOVE
- READ E.IN
- MX6 1
- SA6 RC SET DAT READ
- RJ RDF READ INITIAL LINE
- PRF10 SA1 IFN MOVE FILE NAME
- BX7 X1
- SA7 IRFN
- SA7 ISFN
- SA7 INITZ SET INITIALIZATION COMPLETE
- PRF10.1 SA1 JOPR
- * EQ PRF11 (DB PARAMETER SPECIFIED)
- MX2 -12
- LX1 0-24
- BX1 -X2*X1 ISOLATE ORIGIN TYPE
- SX1 X1-TXOT
- NZ X1,PRF11 IF NOT TELEX ORIGIN
- DISTC ON,TLX
- * PROCESS *FR* PARAMETER.
- PRF11 SA1 PRFG
- ZR X1,NCM IF *FR* NOT USED
- SA1 E.LINE
- SB6 E.STR
- RJ UPL
- SA1 E.STR-1
- SB6 A1+1
- * LOCATE FIRST CHARACTER AFTER 2 CONSECUTIVE BLANKS.
- PRF12 SA1 A1+B1
- SB3 A1-B6
- NG X1,NCM IF END OF LINE REACHED, EXIT
- SX2 X1-1R
- ZR X2,PRF12 IF CHARACTER WAS A BLANK
- SB6 A1+B1
- LE B3,B1,PRF12 IF NOT AT LEAST 2 CONSECUTIVE BLANKS
- SB6 B6-B1 SET TO FIRST CHARACTER
- SB7 P.LINE
- RJ RTA PACK COMMAND LINE
- SA1 P.DEV SET COMMAND TO PREVIOUS COMMAND
- RJ STK STACK DEVICES AND EXIT TO NCM
- .J IFEQ DEBUG,1 IF DEBUG ON
- WRITEC OUTPUT,PRFK
- .J ENDIF
- EQ NCM EXIT, PROCESS COMMANDS
- * BATCH MODE - RETRY COUNT ABORT.
- PRF13 SB6 PRFI * BATCH MODE - RETRY COUNT EXCEEDED.
- EQ ABT ABORT XEDIT
- PRFA DATA 0LSCRB
- PRFB DATA C* FILE NOT XEDIT-ABLE.*
- IF DEF,CYBRNET,2
- PRFC DATA C* EMPTY FILE/ CREATION MODE ASSUMED.*
- SKIP 1
- PRFC DATA C* EMPTY OR FILE NOT FOUND.*
- PRFE DATA C* LOOK/CREATION MODE CONFLICT.*
- PRFF CON -1 RETRY COUNT. STOP WHEN 0 (SET IN PRESET)
- PRFG DATA 0 .NE. 0 IF *FR* USED
- PRFH DATA 10HNAME EDIT
- VFD 24/4HFILE,12/0001B,24/
- PRFI DATA C* BATCH ABORT - RETRY COUNT EXCEEDED.*
- PRFJ DATA C* CANNOT EDIT EXECUTE ONLY FILES.*
- PRFK DATA C+ *FR* COMMAND STACKING ERROR.+
- PRFL DATA C* INCORRECT CHARACTERS IN FILE NAME.*
- PRFM DATA C* TOO MANY CHARACTERS IN FILE NAME.*
- ERRPL *-D.STR-D.STRL-1 IF PRF OVERFLOWS SCRATCH ARRAY
- ORG * RESET ORIGIN
- QUAL *
- SPACE 4
- * XEDIT BUFFERS.
- USE BUFFERS FLUSH LITERALS
- BUFA EQU * OUTGOING EDIT FILE
- BUFB EQU BUFA+BUFAL INCOMING EDIT FILE
- BUFI EQU BUFB+BUFBL PRIMARY INPUT FILE
- BUFO EQU BUFI+BUFIL OUTPUT FILE
- MINFL EQU BUFO+BUFOL+1 MINIMUM FL FOR XEDIT
- BUFC EQU MINFL ALTERNATE INPUT FILE
- BUFD EQU BUFC+BUFCL COPY/READ FILE
- MAXFL EQU BUFD+BUFDL MAX FL FOR MAIN PROGRAM
- RFL= EQU MINFL+1 INITIAL FIELD LENGTH
- FWAOVL EQU MAXFL+2 MINIMUM OVERLAY FIELD LENGTH
- PRS SPACE 4,15
- ** PRS - PRESET XEDIT AND BEGIN EXECUTION.
- *
- * ENTRY NONE.
- *
- * EXIT TO *PRF*.
- *
- * USES A - ALL.
- * X - ALL.
- * B - 1, 2, 3, 4, 5, 6.
- *
- * CALLS ARG, ICH, UPL, VIS.
- *
- * MACROS ABORT, CSET, GETFNT, GETJA, MEMORY, MESSAGE,
- * MOVE, OPEN, TSTATUS, WRITE, WRITEC.
- XEDIT SB1 1 ENTRY
- QUAL PRESET
- IF DEF,TIMING,1
- GETJA TIMING
- MEMORY CM,,RECALL,RFL=
- SA1 PRSS GET TOOLNAME FOR *FNL* CALL
- RJ INT STORE INITIAL *CUA* VARIABLES
- BX6 X6-X6 CLEAR BUFFER CONTROL WORD
- SA6 PRSI
- SA1 B1+B1
- MX0 42
- BX2 X0*X1
- NZ X2,PRS2 IF FILE NAME PRESENT
- PRS1 GETFNT PRSA
- SA1 PRSI+1 GET FILE NAME
- BX2 X0*X1
- NZ X2,PRS2 IF FILE FOUND
- SA3 PRSI
- NG X3,PRS1 IF FILE NOT FOUND
- SA2 PRSB =0LTAPE1
- PRS2 SX7 B1
- SA3 ACTR
- BX7 X2
- SB4 X3-1 SET NUMBER OF PARAMETERS
- SA7 IFN PUT INCOMING NAME
- LE B4,PRS4 IF 1 PARAMETER OR LESS
- SA4 3
- SB5 PRSC
- RJ ARG PROCESS ARGUMENT TABLE
- RJ VIS VOID INSTRUCTION STACK
- ZR X1,PRS4 IF NO ERRORS
- SA0 PRSD C* ERROR IN XEDIT ARGUMENTS.*
- * PRESET ERROR ROUTINE - (A0) = ADDRESS OF MESSAGE.
- PRS3 RJ FNL ISSUE ACCOUNTING MESSAGE
- MESSAGE A0 ISSUE MESSAGE TO DAYFILE
- ABORT
- * IF *NH* PARAMETER, (PRS4) = EQ PRS5.
- *
- PRS4 WRITEC OUTPUT,PRSN XEDIT HEADER MESSAGE
- * CHECK FOR FILE NAME CONFLICTS
- PRS5 SA0 PRSF * FILE NAME CONFLICT.*
- SB2 FFET-7
- SB3 LFET-7
- PRS6 SB2 B2+7 STEP TO NEXT OUTSIDE FET ADDRESS
- GE B2,B3,PRS8 IF LOOPED THROUGH ALL FILES
- SA1 B2+
- SB4 B2+7
- PRS7 SA2 B4 GET INNER LOOP FET NAME
- BX3 X1-X2
- SB4 B4+7
- ZR X2,PRS7.1 IF NO FILE THERE (L=0)
- ZR X3,PRS3 IF FILE NAMES COMPARE (ERROR)
- PRS7.1 LE B4,B3,PRS7 IF NOT FINISHED WITH INNER LOOP FET
- EQ PRS6 CHECK NEXT FILE NAME FROM FET-S
- * PRESET INPUT AND OUTPUT FETS.
- PRS8 SA1 OUTPUT SET UP RA+2 WITH FILE TO BE FLUSHED
- MX2 42
- SX6 A1
- BX2 X1*X2
- BX6 X2+X6
- MX7 0
- SA6 B1+B1
- SA7 A6+B1
- OPEN INPUT,READNR,RECALL
- SA1 OUTPUT
- ZR X1,PRS9 IF NO NAME PRESENT
- OPEN OUTPUT,ALTERNR,RECALL
- WRITE OUTPUT,* HANDLE OPEN BUG
- * DETERMINE ASCII/CHARACTER SET/ORIGIN CODES.
- PRS9 GETJO PRSR
- SA2 BATCH
- SA1 PRSR
- SX6 X1-TXOT
- BX6 X6+X2 0, IF *TXOT*, ELSE BATCH
- SA6 A2
- SA1 CSMR CHARACTER SET MODE
- SB2 18D 64 CHARACTER SET OFFSET
- NG X1,PRS10 IF 64 CHARACTER SET
- SB2 B0 63 CHARACTER SET OFFSET
- PRS10 SA5 AS
- ZR X6,PRS11 IF TXOT AND *B* PARAMETER NOT USED
- BX6 X6-X6 SET NO ASCII
- ZR X5,PRS14 IF NO ASCII DESIRED
- MX6 1 SET ASCII FLAG FOR *PRS14*
- SB2 36D SET 64/ASCII
- EQ PRS14 PRESET CHARACTERS
- PRS11 TSTATUS TSTATUS
- SA1 TSTATUS
- MX3 -6
- AX1 3*6
- PRS11.1 BX6 -X3*X1 DETERMINE IF TERM TYPE HAS A *D*
- LX1 -6
- ZR X6,PRS11.1 IF NOT CHARACTER
- + SX4 X6-1RD
- NZ X4,PRS12 IF NOT ...D TERMINAL TYPE
- SB2 B0 SET OLD CHARACTER SET
- SA6 A5 TURN ON ASCII FLAG (NON ZERO)
- EQ PRS14 PRESET CHARACTERS
- PRS12 SA1 A1+B1
- SX2 4
- BX6 X2*X1
- NZ X6,PRS13 IF ASCII FLAG SET
- ZR X5,PRS14 IF ASCII NOT REQUIRED
- CSET ASCII
- SX6 3RASC SET SPECIAL ASCII FLAG
- PRS13 SA6 A5 SET ASCII FLAG
- SB2 36 SET 64/ASCII
- * PRESET CHARACTERS DEPENDENT ON CHARACTER SET.
- PRS14 SX7 B1+B1
- SA1 CHARSET
- ZR X6,PRS14.1 IF ASCII NOT ON
- SA7 UPLA SET UNPACKS TO ASCII MODE
- PRS14.1 SX6 B2 SAVE SHIFT VALUE
- MX7 0
- SA6 CHARSFT
- SA7 CCDR+8 PLACE END OF LINE
- RJ ICH INITIALIZE CHARACTERS
- * MOVE COMMAND IMAGE TO *C.STR* AND ANALYZE.
- SA1 CCDR
- SB6 C.STR SET STRING DESTINATION
- RJ UPL
- MOVE 9,CCDR,I.LINE MOVE COMMAND IMAGE
- SA1 C.STR-1
- MX7 1
- SB2 B1 SET CHARACTER POINTER
- SA7 C.STR SET DEFAULT END OF LINE
- SA7 C.STR+80 ALLOW ONLY 80 CHAR ON COMMAND
- PRS15 SB2 B2+B1 INCREMENT POINTER
- SA2 A1+B2
- NG X2,PRS20 IF END OF LINE
- SX3 X2-1R.
- ZR X3,PRS16 IF .
- SX3 X2-1R)
- NZ X3,PRS15 IF NOT )
- PRS16 SA2 A2+B1 GET DELIMITER CHARACTER
- SB2 B2+2 SET POINTER TO CHARACTER AFTER DELIMITER
- BX4 X2
- NG X2,PRS20 IF END OF LINE
- SX3 X2-1R
- ZR X3,PRS20 IF BLANK (ASSUME IGNORE REST OF COMMAND)
- SX6 B1
- AX4 6
- .CYB IF DEF,CYBRNET
- + SX7 1R^ UP ARROW INVALID DELIMITER CHARACTER
- ZR X4,PRS16.1 IF CHARACTER NOT ASCII
- SX7 7402B SET FOR ASCII UP ARROW
- SX6 7601B SET LOWER CASE A
- .CYB ELSE
- ZR X4,PRS16.1 IF CHARACTER IS NOT ASCII
- SX6 7601B SET LOWER CASE A
- .CYB ENDIF
- PRS16.1 IX3 X2-X6 NEGATIVE IF NOT ALPHABETIC
- SX6 X6+26D
- IX4 X2-X6 POSITIVE IF NOT ALPHABETIC
- BX3 -X3*X4 NEGATIVE IF DELIMITER IS ALPHABETIC
- .CYB IF DEF,CYBRNET
- NG X3,PRS17 IF DELIMITER IS ALPHA USE ;
- IX6 X7-X2 UP ARROW CHECK
- ZR X6,PRS17 IF YES THEN USE ;
- SX7 X2-1R/-1 POSITIVE IF DELIMITER ABOVE /
- SX6 X2-1R0 NEGATIVE IF BELOW 0
- BX6 X7-X6 POSITIVE IFF BOTH SIGNS SAME
- PL X6,PRS18 IF NOT +,-,*, OR / USE DELIMITER
- PRS17 SX2 1R; USE SEMI-COLON
- SB2 B2-1 MOVE POINTER BACK
- PRS18 PX6 B2,X2 FORM C.STR WORD
- .CYB ELSE
- NG X3,PRS19 IF INCORRECT DELIMITER CHARACTER
- PX6 B2,X2 FORM C.STR WORD
- .CYB ENDIF
- SA6 A1 PUT C.STR-1
- MX2 -18
- ECHO 4,P=(I.DEV,S.DEV)
- SA1 P+1 SET DELIMITERS IN OTHER DEVICES
- BX1 X2*X1
- IX7 X1+X6
- SA7 A1
- EQ PRS20 CHECK INPUT AND OUTPUT FILES
- * INCORRECT DELIMITER CHARACTER.
- PRS19 SA1 BATCH
- SA0 PRSG * INCORRECT DELIMITER CHARACTER.*
- NZ X1,PRS3 IF BATCH MODE
- WRITEC OUTPUT,A0 ISSUE MESSAGE TO TERMINAL
- PRS20 SA1 INPUT+1 CHECK INPUT/OUTPUT = *TT*
- SA2 OUTPUT+1
- MX6 1
- BX1 -X6*X1
- BX2 -X6*X2
- AX1 48
- AX2 48
- SX7 X1-2RTT
- SX2 X2-2RTT
- IX2 X2+X7
- MX6 0
- ZR X2,PRS21 IF BOTH ARE *TT*
- SA6 PROMPT CLEAR ISSUING OF SPECIAL PROMPT
- SA7 TTYIN SET STATUS OF INPUT FET
- MOVE 2,PRSM,PRFH CHANGE *NAME EDIT FILE* MESSAGE
- SX7 B1 IF EITHER NOT *TT*, ALLOW ONE RETRY
- SA7 PRFF
- PRS21 SA1 BATCH
- ZR X1,PRS22 IF TELEX ORIGIN
- MOVE PRSHL,PRSH,MESSAGE+1 MOVE BATCH ERROR MESSAGES
- MOVE 2,PRSO,ETLA CHANGE BATCH ECHO STATUS
- MOVE 1,PRSP,MODA CHANGE BATCH MODIFY SHIFT
- PRS22 EQ PRF PRESET FILE
- PRSA VFD 38/0LDUMMY,1/1,3/,18/1 DUMMY GETFNT FET
- VFD 36/,6/10B,18/PRSI
- BSS 6
- VFD 12/1+2*1+1,6/,18/1S"PTFT",2/,1/1,1/,1/,1/,18/PRSI
- BSS 4
- PRSB DATA 0LTAPE1
- PRSC BSS 0 ARGUMENT TABLE
- AS ARG -ACTR,AS
- B ARG -PRSR,BATCH
- C ARG -PRSJ,PRF
- DB ARG -PRSL,PRF10.1
- FR ARG -ACTR,PRFG
- I ARG INPUT,INPUT
- L ARG OUTPUT,OUTPUT
- LK ARG -PRSZ,UPDATE
- NH ARG -PRSQ,PRS4
- P ARG -PRSK,PRF
- ARG
- PRSD DATA C* ERROR IN XEDIT ARGUMENTS.*
- PRSF DATA C* FILE NAME CONFLICT.*
- PRSG DATA C* INCORRECT DELIMITER CHARACTER.*
- PRSH BSS 0 BATCH ERROR MESSAGE TABLE
- ERRPRS HERE
- PRSHL EQU *-PRSH
- PRSI BSS 1+2*1+1
- PRSJ EQ PRF3 *C* PARAMETER
- PRSK EQ PRF4 *P* PARAMETER
- PRSL EQ PRF11 *DB* PARAMETER
- PRSM DATA C* NAME EDIT FILE*
- PRSN DATA C* "VERSION"*
- PRSO BSS 0
- ETL HEREL ECHO HEADER WORDS
- PRSP BSS 0
- MOD HEREL ECHO MODIFY WORD
- PRSQ EQ PRS5 *NH* PARAMETER
- PRSR DATA 100B PSEUDO BATCH
- PRSZ DATA 0 SET LOOK MODE
- PRSS VFD 60/PRST ADDRESS OF TOOLNAME
- PRST VFD 60/0HXEDIT TOOLNAME FOR *CUA* MESSAGE
- USE SETCHAR
- DATA 0 SET END MARKER
- USE *
- SPACE 4
- * COMMON DECKS NEEDED IN PRESET.
- *CALL COMCARG
- *CALL COMCDXB
- *CALL COMCMVE
- QUAL *
- *CALL COMCSFN
- *CALL COMCSTF
- SPACE 4
- .MH2 EQU MH2
- OVLDEF 1,(USER INFORMATION ROUTINES)
- SPACE 4
- ** DEFINE ALTERNATE CHARACTER REPLACEMENTS.
- *T 24/AS, 18/64 C, 18/63 C
- *
- * AS = ASCII 6/12 CHARACTER SET.
- * 64 C = 64 CHARACTER SET.
- * 63 C = 63 CHARACTER SET.
- AM. VFD 24/67B,18/67B,18/67B AMPERSAND
- FN. VFD 24/2RTH,18/2RTH,18/2RTH END OF HELP FILE NAME
- QM. VFD 24/71B,18/71B,18/71B QUESTION MARK
- SH. VFD 24/60B,18/60B,18/60B SHARP
- UA. VFD 24/7402B,18/76B,18/76B UP ARROW
- SPACE 4
- MH2 SET .MH2
- TITLE MACROS LOCAL TO OVERLAY.
- ENDHELP SPACE 4,10
- ** ENDHELP - CLOSE EXPLAIN ENTRY.
- *
- *
- * ENDHELP
- *
- * ENTRY (A) = A MICRO CONTAINING THE NAME OF THE
- * EXPLAIN ENTRY.
- *
- * EXIT A SYMBOL IS EQUATED TO THE LENGTH OF THE MESSAGE.
- *
- * NOTES THIS MACRO IS TO BE USED END AN EXPLAIN ENTRY.
- PURGMAC ENDHELP
- ENDHELP MACRO
- "A"_L EQU *-"A"_A
- ENDM ENDHELP
- EXPP SPACE 4,15
- ** EXPP - DEFINE PRIMARY EXPLAIN ENTRY.
- *
- *
- * EXPP NAME
- *
- * ENTRY *NAME* = NAME OF ERROR MESSAGE.
- *
- * NOTES MACRO INITIALIZES THE DEFINITION FOR THE MESSAGE
- * TEXT. THE *ENDHELP* MACRO IS USED TO CLOSE THE
- * DEFINITION. THE TABLE FORMATS ARE PLACED IN AN
- * UNLABELED REMOTE BLOCK.
- PURGMAC EXPP
- EXPP MACRO NAME
- NAME_A BSS 0
- A MICRO 1,, NAME
- RMT
- ORG TMSG+NAME-1
- VFD 12/2000B+NAME_L
- IF DEF,NAME_S,1
- VFD 30/NAME_S
- VFD *P/NAME_A
- ORG *
- RMT
- ENDM EXPP
- EXPS SPACE 4,10
- ** EXPS - DEFINE SECONDARY EXPLAIN ENTRY TEXT.
- *
- *
- * EXPS NAME,LEVEL
- *
- * ENTRY *NAME* = NAME OF ERROR MESSAGE.
- * *LEVEL* = LEVEL FOR MESSAGE (1-31).
- *
- * NOTES MACRO SERVES SAME PURPOSE AS *EXPP*.
- PURGMAC EXPS
- EXPS MACRO NAME,LEVEL
- IF -DEF,NAME_S,1
- NAME_S BSS 32D
- NAME_LEVEL_A BSS 0
- A MICRO 1,, NAME_LEVEL
- RMT
- ORG NAME_S+LEVEL_B
- VFD 12/2000B+NAME_LEVEL_L,*P/NAME_LEVEL_A
- ORG *
- RMT
- ENDM EXPS
- EXPLAIN SPACE 4,20
- ** EXP - PROCESS EXPLAIN COMMAND.
- *
- * ENTRY (EXPLAIN) = EXPLAIN ERROR MESSAGE POINTERS.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 0, 1, 4, 6.
- * X - 0, 1, 2, 4, 5, 6, 7.
- * B - 2, 3, 7.
- *
- * MACROS WRITEC, WRITEO, WRITEW.
- *
- * NOTES EXPLAIN ISSUES A MORE DETAILED STATEMENT CONCERNING
- * THE LAST 4 XEDIT MESSAGES. EACH TIME THE EXPLAIN
- * COMMAND IS USED, XEDIT WILL GIVE THE LAST ENTRY, AND
- * REMOVE IT FROM THE STACK (THUS THE NEXT EXPLAIN WILL
- * ISSUE THE ENTRY FOR THE PREVIOUS MESSAGE.) THIS
- * COMMAND WILL WORK ONLY FOR THE LAST NON-EXPLAIN
- * COMMAND.
- EXP SA1 EXPLAIN ENTRY
- LX1 12 POSITION LAST ENTRY
- UX1 B7,X1 (B7) = EXPLAIN ENTRY
- MX7 -24
- LX1 12
- BX6 X7*X1 REMOVE THIS EXPLAIN ENTRY
- SA6 A1 REPLACE STACK
- LE B7,NCM IF NO ENTRY ON STACK, EXIT
- SX0 B7 ........PS/.........P
- LX0 -6 S........P/P.........
- SX2 X0 = PRIMARY IF THERE IS A SECONDARY
- NZ X2,EXP0 IF THERE IS A SECONDARY
- SX0 B7 /.........P
- EXP0 BX2 X7*X0 S........./..........
- LX2 6 .........S/..........
- SA1 TMSG-1+X0 GET PRIMARY MESSAGE INDEX
- ZR X1,EXP2 IF NO ENTRY FOR THIS ERROR
- SA0 X1 SET MESSAGE ADDRESS
- UX3,B2 X1 GET MESSAGE LENGTH
- ZR X2,EXP1 IF NO SUB-INDEX
- AX1 18
- ZR X1,EXP1 IF NO SUB-TABLE
- SB3 X1
- SA1 X2+B3 GET SUB-INDEX MESSAGE TABLE ENTRY
- ZR X1,EXP1 IF NO ENTRY
- UX3 B2,X1 SET LENGTH
- SA0 X1 SET ADDRESS
- EXP1 SX5 B2 SAVE LENGTH
- MX6 0
- WRITEO OUTPUT ISSUES LINE FEED
- WRITEC X2,EXPA * EXPLANATION OF-
- SA4 MESSAGE+X0
- WRITEC X2,X4 ECHO OFFENDING ERROR MESSAGE
- WRITEW X2,A0,X5 ISSUE EXPLANATION
- EQ NCM EXIT
- * NO EXPLAIN ENTRY FOUND.
- EXP2 WRITEC OUTPUT,EXPB
- SA4 MESSAGE+X0
- WRITEC X2,X4
- EQ NCM EXIT
- EXPA DATA C* EXPLANATION OF-*
- EXPB DATA C* NO ENTRY FOUND FOR*
- TMSG BSSZ 40B
- SPACE 4
- ** EXPLAIN ENTRY DEFINITIONS.
- EXPP ARG.
- DATA C* USUALLY MEANS THE USE OF AN EMPTY STRING IN THE*
- DATA C* FIRST STRING OF A CHANGE OR LOCATE COMMAND.*
- ENDHELP
- EXPP BFN.
- DATA C* FILE NAME WAS NOT OF PROPER FORM OR IT WAS A*
- DATA C* FILE NAME WHICH IS RESERVED BY XEDIT.*
- ENDHELP
- EXPP BTL.
- DATA C* THE EDIT FILE CONTAINS AT LEAST ONE LINE OF *
- DATA C* DATA THAT IS NOT IN A FORM XEDIT CAN UNDERSTAND.*
- ENDHELP
- EXPP CNV.
- DATA C* DURING CERTAIN MODES WITHIN XEDIT, SOME COMMANDS*
- DATA C* ARE DISABLED.*
- ENDHELP
- EXPP DEL.
- DATA C* MISSING STRING DELIMITER IN THE STRING FIELD OF*
- DATA C* A COMMAND. A DELIMITER IS ASSUMED AFTER THE LAST*
- DATA C* NONBLANK CHARACTER OF THE COMMAND LINE.*
- ENDHELP
- EXPP EMI.
- DATA C* SPECIFIED IF DEFAULT FILE FUNCTION IS INCORRECT*
- DATA C* ON SPECIFIED OR DEFAULT FILE.*
- ENDHELP
- EXPP EOF.
- DATA C* AN END OF FILE MARK HAS BEEN READ FROM THE EDIT*
- DATA C* FILE, AND, UNLESS A DEOF COMMAND WAS BEING*
- DATA C* PROCESSED, IT HAS BEEN RETAINED.*
- ENDHELP
- EXPP EOR.
- DATA C* AN END OF RECORD MARK HAS BEEN READ FROM THE EDIT*
- DATA C* FILE, AND, UNLESS A DEOR COMMAND WAS BEING*
- DATA C* PROCESSED, IT HAS BEEN RETAINED.*
- ENDHELP
- EXPP EOI.
- DATA C* THE EDITOR HAS GONE PAST THE LAST LINE OF THE FILE*
- DATA C* WHILE TRYING TO COMPLETE PROCESSING OF THE LAST*
- DATA C* COMMAND. PROCESSING OF THAT COMMAND IS STOPPED AND*
- DATA C* THE POINTER IS MOVED TO THE TOP OF THE FILE.*
- ENDHELP
- EXPP FCP.
- DATA C* THE SPECIFIED FILE HAS BEEN REWOUND AND RE-COPIED.*
- DATA C* THIS IS THE DEFAULT ACTION FOR THE END, FILE, AND*
- DATA C* QUIT COMMANDS IF THE FILE IS EITHER DIRECT ACCESS*
- DATA C* OR A MAGNETIC TAPE FILE.*
- ENDHELP
- EXPP FCR.
- DATA C* THE SPECIFIED FILE IS EITHER AN EXECUTE OR APPEND*
- DATA C* ONLY FILE; OR IS EITHER NOT A LOCAL FILE, OR A*
- DATA C* PERMANENT FILE DEPENDING ON THE SPECIFIED COMMAND*
- DATA C* OPTION.*
- ENDHELP
- EXPP FLC.
- DATA C* THE SPECIFIED FILE HAS BEEN MADE A LOCAL FILE.*
- DATA C* FOR THE END, FILE, AND QUIT COMMANDS, THIS*
- DATA C* FUNCTION IS DEFAULT FOR INDIRECT ACCESS FILES.*
- ENDHELP
- EXPP FRP.
- DATA C* THE PERMANENT FILE COPY HAS BEEN REPLACED.*
- ENDHELP
- EXPP FSV.
- DATA C* A PERMANENT FILE COPY HAS BEEN SAVED.*
- ENDHELP
- EXPP ILL.
- DATA C* USUALLY MEANS A NONNUMERIC CHARACTER IN A NUMERIC*
- DATA C* FIELD OR EXTRA INFORMATION IN A COMMAND.*
- ENDHELP
- EXPP LFM.
- DATA C+ THE SYSTEM LOCAL FILE PROCESSOR HAS DETECTED AN+
- DATA C* ERROR. PLEASE REPORT THE PROBLEM, ALONG WITH AS*
- DATA C* MUCH INFORMATION AS POSSIBLE REGARDING THIS XEDIT*
- DATA C* RUN, TO A CONSULTANT.*
- ENDHELP
- EXPP LNNF.
- DATA C* THE SPECIFIED LINE NUMBER COULD NOT BE LOCATED.*
- ENDHELP
- EXPP LNTL.
- DATA C* IN THE ALN, ALNS, OR RLN COMMAND, THE LINE*
- DATA C* NUMBER BECAME GREATER THAN 99999.*
- ENDHELP
- EXPP NSC.
- DATA C* THE COMMAND IS INCORRECT OR AN IMPROPER SEPARATOR*
- DATA C* WAS USED AFTER THE COMMAND.*
- ENDHELP
- EXPP PFM.
- DATA C* ERROR IN PERMANENT FILE OPERATION.*
- ENDHELP
- EXPP SNF.
- DATA C* IF A 0 IS USED FOR THE REPEAT COUNT ON ANY STRING*
- DATA C* SEARCH COMMAND, AND THE STRING IS NOT IN THE*
- DATA C* CURRENT LINE, XEDIT ISSUES THE ABOVE MESSAGE*
- DATA C* AND DOES NOT ADVANCE THE POINTER. (ALSO, ANY*
- DATA C* REMAINING COMMANDS ON A DELIMITED COMMAND*
- DATA C* LINE ARE IGNORED. IN ADDITION, THE 0 IS USED*
- DATA C* IF USING THE INPUT MODE ECSAPE CHARACTER.*
- ENDHELP
- EXPP STK.
- DATA C* AN ATTEMPT WAS MADE TO RECURRSIVELY USE AN INPUT*
- DATA C* SOURCE. AN EXAMPLE OF THIS IS-*
- DATA C* Y/PRINT/Y-WHERE-*
- DATA C* IN THE EXAMPLE, THE Y/Z COMMAND ATTEMPTS TO CALL*
- DATA C* ANOTHER Y/Z COMMAND, WHICH IS INCORRECT.*
- ENDHELP
- EXPP TRUNC.
- DATA C* AS A RESULT OF A COMMAND, THE LINE WHOSE POSITION*
- DATA C* IS GIVEN HAS BEEN TRUNCATED TO 160 CHARACTERS.*
- DATA C* THIS ACTION OCCURS AUTOMATICALLY WHENEVER A LINE*
- DATA C* IS EXTENDED WITHIN XEDIT TO INCLUDE MORE THAN*
- DATA C* 160 CHARACTERS.*
- ENDHELP
- SPACE 4
- ** ARGUMENT ERROR SECONDARY EXPLANATIONS.
- EXPS ARG.,1 F0 CONFLICT IN INPUT MODE
- DATA C+ WHILE USING THE COMMAND ESCAPE CHARACTER OF+
- DATA C+ *INPUT* MODE TO ENTER COMMANDS, THE MOVEMENT OF+
- DATA C* THE POINTER IS DISALLOWED. FOR THIS REASON, XEDIT*
- DATA C* FORBIDS USERS FROM ENTERING ANY REPEAT COUNT ON*
- DATA C+ ANY COMMANDS (FOR EXAMPLE - THE *LOCATE* OR +
- DATA C+ *CHANGE* COMMANDS). ALSO VOIDED ARE ANY PREFIX+
- DATA C* CHARACTERS WHICH POSITION THE POINTER.*
- ENDHELP
- SPACE 4
- ** BAD FILE NAME SECONDARY EXPLANATIONS.
- EXPS BFN.,1 BAD FILE NAME
- DATA C* THE FILE NAME ENTERED CONTAINS EITHER INCORRECT*
- DATA C* CHARACTERS, OR IS TOO LONG.*
- ENDHELP
- EXPS BFN.,2 NO FILE NAME
- DATA C* THE COMMAND IS MISSING A REQUIRED FILE NAME.*
- ENDHELP
- EXPS BFN.,3 RESERVED FILE NAME
- DATA C* THE FILE NAME ENTERED IS ONE WHICH IS RESERVED BY*
- DATA C* XEDIT. A PARTIAL LIST INCLUDES- INPUT, OUTPUT,*
- DATA C* SCRA, SCRB, ... SCRF, SCRG AND (FOR COPY AND*
- DATA C* COPYD COMMANDS) THE EDIT FILE NAME.*
- ENDHELP
- SPACE 4
- ** COMMAND NOT VALID SECONDARY EXPLANATIONS.
- EXPS CNV.,1
- DATA C* WHILE CREATING A FILE UNDER XEDIT, VARIOUS COM-*
- DATA C* MANDS ARE DISABLED AS THEY ATTEMPT TO REFERENCE*
- DATA C* OR MODIFY PARTS OF THE FILE WHICH DO NOT EXIST.*
- DATA C* CREATION MODE IS AUTOMATICALLY EXITED UPON ENTRY*
- DATA C* OF THE FIRST TEXT LINE (USE THE INSERT OR INPUT*
- DATA C* COMMANDS).*
- ENDHELP
- EXPS CNV.,3
- DATA C* WHILE USING THE INPUT MODE COMMAND ESCAPE OPTION,*
- DATA C* ANY COMMAND WHICH MOVES THE POINTER IS NOT ALLOWED.*
- DATA C* THE COMMAND SPECIFIED IS THUS INCORRECT.*
- ENDHELP
- SPACE 4
- ** EMI - FILE FUNCTION INCORRECT SECONDARY EXPLANATIONS.
- EXPS EMI.,1
- DATA C* THE SPECIFIED FILE CANNOT BE UPDATED. THIS CAN*
- DATA C* RESULT IF THE FILE IS LOCK OR NOT IN WRITE MODE.*
- ENDHELP
- EXPS EMI.,2
- DATA C+ THE *L* PARAMETER IS INCORRECT ON DIRECT ACCESS+
- DATA C* OR MAGNETIC TAPE FILES.*
- ENDHELP
- SPACE 4
- ** FILE CANNOT BE ACCESSED SECONDARY EXPLANATIONS.
- *
- EXPS FCR.,1
- DATA C* THE FILE IS AN EXECUTE OR APPEND ONLY FILE THUS*
- DATA C* IS NOT ACCESSABLE.*
- ENDHELP
- EXPS FCR.,2
- DATA C* THE FILE IS NOT PRESENTLY LOCAL TO THE JOB. ALSO,*
- DATA C* WHEN IF THE FILE IS DIRECT ACCESS (AND CURRENTLY*
- DATA C* ATTACHED) THE FILE CANNOT BE ACCESS FROM THE*
- DATA C* PERMANENT FILE AREA.*
- ENDHELP
- EXPS FCR.,3
- DATA C* THE FILE IS NOT OBTAINABLE FROM THE PERMANENT*
- DATA C* FILE AREA.*
- ENDHELP
- SPACE 4
- ** PFM SECONDARY EXPLANATIONS.
- EXPS PFM.,1 (FILE) BUSY.
- DATA C* DIRECT ACCESS FILE IS ATTACHED ELSEWHERE IN WRITE*
- DATA C* MODE.*
- ENDHELP
- EXPS PFM.,2 (FILE) NOT FOUND.
- DATA C* SPECIFIED FILE COULD NOT BE FOUND.*
- ENDHELP
- EXPS PFM.,4 (FILE) NOT ON MASS STORAGE.
- DATA C* SPECIFIED FILE DOES NOT RESIDE ON A MASS STORAGE*
- DATA C* DEVICE.*
- ENDHELP
- EXPS PFM.,5 (FILE) ALREADY PERMANENT.
- DATA C* THERE IS ALREADY A FILE EITHER SAVED OR DEFINED*
- DATA C* UNDER THE DESIRED NAME. TRY USING THE RENAME*
- DATA C* PARAMETER.*
- ENDHELP
- EXPS PFM.,10 USER ACCESS NOT VALID
- DATA C* USER IN NOT VALIDATED TO SAVE FILES AND/OR TO*
- DATA C* ACCESS A REMOVABLE DEVICE.*
- ENDHELP
- EXPS PFM.,12 FILE TOO LONG.
- DATA C* THE SPECIFIED FILE IS TOO LONG TO BE SAVED OR*
- DATA C* REPLACED.*
- ENDHELP
- EXPS PFM.,16 PF UTILITY ACTIVE.
- DATA C* DUE TO ACTIVITY WITHIN THE SYSTEM, THE SPECIFIED*
- DATA C* PERMANENT FILE OPERATION CANNOT BE DONE AT THE*
- DATA C* PRESENT TIME. THE OPERATION SHOULD BE RETRIED*
- ENDHELP
- EXPS PFM.,20 CATALOG OVERFLOW - FILES.
- DATA C* YOU HAVE EXCEEDED YOUR VALIDATED LIMIT FOR THE*
- DATA C* MAXIMUM NUMBER OF PERMANENT FILES.*
- ENDHELP
- EXPS PFM.,21 CATALOG OVERFLOW - SIZE.
- DATA C* THE CUMULATIVE SIZE OF THE INDIRECT ACCESS FILES*
- DATA C* IN YOUR CATALOG HAVE EXCEEDED YOUR VALIDATION*
- DATA C* LIMIT.*
- ENDHELP
- EXPS PFM.,23 I/O SEQUENCE ERROR.
- DATA C* PLEASE NOTIFY A CONSULTANT OF THIS ERROR,*
- DATA C* ENCLOSING (IF POSSIBLE) A HARD COPY OF YOUR*
- DATA C* SESSION. PLEASE RETRY YOUR COMMAND.*
- ENDHELP
- EXPS PFM.,30 TRACK LIMIT
- DATA C* PERMANET FILE DEVICE HAS RUN OUT OF TRACKS. PLEASE*
- DATA C* NOTIFY CONSULTANT AS SOON AS POSSIBLE.*
- ENDHELP
- EXPS PFM.,31 FILE LENGTH ERROR
- DATA C* ERROR IN PERMANENT FILE. NOTIFY CONSULTANT AS SOON*
- DATA C* AS POSSIBLE. PLEASE DO NOT USE THE SPECIFIED FILE.*
- ENDHELP
- EXPS PFM.,33 DIRECT ACCESS FILE ERROR
- DATA C* ERROR IN SYSTEM DIRECT ACCESS FILE DEFINITION.*
- DATA C* PLEASE NOTIFY CONSULTANT AS SOON AS POSSIBLE.*
- ENDHELP
- EXPS PFM.,34 REPLACE ERROR
- DATA C* NOTIFY CONSULTANT.*
- ENDHELP
- EXPS PFM.,35 PFM ABORTED
- DATA C* PERMANENT FILE MANAGER ABORTED. RETRY OPERATION.*
- ENDHELP
- HELP SPACE 4,30
- ** HELP - PROCESS XEDIT HELP COMMAND.
- *
- * ENTRY (IN - IN+80) = COMMAND LINE.
- * (LSEP) = SUBSCRIPT OF SEPARATOR.
- *
- * EXIT HELP ENTRY LISTED.
- *
- * USES A - 1, 2, 3, 5, 6, 7.
- * X - ALL.
- * B - 2, 3.
- *
- * CALLS HTI.
- *
- * MACROS CSET, GET, OPEN, READ, READW, RECALL, REWIND,
- * STATUS, WRITEC, WRITER, WRITEW.
- *
- * NOTES HELP PICKS THE COMMAND OFF THE ARGUMENT OF THE HELP
- * COMMAND. IF NO COMMAND IS SPECIFIED, A LISTING OF ALL XEDIT
- * COMMANDS AND COMMAND ABBREVIATIONS AND PREFIX CHARACTERS IS
- * GIVEN. IF A COMMAND OR PREFIX CHARACTER IS SPECIFIED ON THE
- * HELP COMMAND, IT IS COMPARED WITH THOSE IN THE XEDIT COMMAND
- * TABLE AND THE UNABBREVIATED FORM IS SELECTED. XEDITI FILE
- * IS THEN GOTTEN FROM THE LIBRARY IF IT IS NOT ALREADY LOCAL.
- * THE FILE IS THEN SEARCHED FOR A MATCHING COMMAND AND THE
- * COMMAND ENTRY IS PRINTED OUT. NOTE - PAGEINATION LINES ARE
- * FLAGGED WITH A *>*. THE LINE BEFORE EACH COMMAND ENTRY IS
- * FLAGGED WITH A *-* IN COLUMN 35.
- HELP SA1 NUMS RESTORE A5 POINTER
- SA2 A1+B1
- MX7 1
- ZR X1,HLP21 IF NO PARAMETER
- SA2 X2
- SA5 X1
- NG X5,HLP21 IF NO PARAMETER
- BX6 X7+X2
- SA6 A2
- SA1 A5+B1 CHECK NEXT CHARACTER
- PL X1,HLP0 IF NOT END OF LINE
- MX1 0 CLEAR CHARACTER
- HLP0 SX4 X5-1R0
- SX3 X5-1R+
- SX2 X5 MOVE CHARACTER
- LX2 6
- BX2 X2+X1
- SB2 X2
- BX3 -X4*X3 NEG. IF NUMBER
- SA2 HLPA
- NG X3,HLP11 IF A NUMBER
- SB3 X2
- HLP1 EQ B3,B2,HLP12 IF SPECIAL CHARACTER
- SA2 A2+B1
- SB3 X2
- NZ X2,HLP1 IF NOT END OF LIST
- MX6 1 PREPARE TO PARSE COMMAND
- MX4 26
- MX3 -6
- LX4 -5 PREPARE CHARACTER MASK
- HLP2 BX0 -X3*X5 REMOVE ASCII
- SB3 X0+4
- LX1 B3,X4 SHIFT MASK
- PL X1,HLP4 IF NOT A-Z
- BX1 X3*X5
- ZR X1,HLP3 IF NOT ASCII CHARACTER
- SX1 X1-7600B
- NZ X1,HLP4 IF NOT LOWER CASE A-Z
- * MERGE CHARACTERS.
- HLP3 LX6 6
- BX6 X6+X0
- SA5 A5+1
- PL X5,HLP2 IF MORE CHARACTERS
- * CHECK FOR LEGAL PARAMETER.
- HLP4 BX1 -X3*X6 ISOLATE LAST CHARACTER OF COMMAND
- MX0 1
- SX4 X1-1RW
- ZR X4,HLP5 IF *W* POSTFIX
- SX4 X1-1RA
- NZ X4,HLP6 IF NOT *A* POSTFIX
- HLP5 BX6 X3*X6 REMOVE POSTFIX
- HLP6 LX6 6
- PL X6,HLP6 IF NOT LEFT JUSTIFIED
- BX6 -X0*X6 REMOVE POSITION BIT
- SA1 JUMP SEARCH COMMAND TABLE
- SA6 JUMPX SET NAME AT END
- HLP7 BX3 X1-X6
- SA1 A1+B1
- NZ X3,HLP7 IF NOT A MATCH
- NG X3,HLP7 IF COMPARED A INFORMATION WORD
- NG X1,HLP9 IF PRESENTLY ON AN INFORMATION WORD
- HLP8 BX6 X1
- SA1 A1+B1
- PL X1,HLP8 IF NOT AT AN INFORMATION WORD
- HLP9 SX1 X1
- ZR X1,HLP10 IF COMMAND NOT IN TABLE
- EQ HLP13 PROCESS COMMAND
- HLP10 SA6 HLPF
- WRITEC OUTPUT,HLPE
- EQ NCM CONTINUE
- * PROCESS NUMERIC PARAMETER.
- HLP11 SX6 1R$
- LX6 -6
- EQ HLP13 PROCESS COMMAND
- * PROCESS SPECIAL COMMAND.
- HLP12 MX3 42
- BX6 X2*X3 ISOLATE SEARCH PATTERN:
- EQ HLP13 PROCESS COMMAND.
- HLP13 SA1 NUMS+1
- SA2 X1
- SX7 X2
- LX2 1
- NG X2,HLP13.1 IF REAL EOL
- SA7 A2
- HLP13.1 SA2 HLPK
- SA6 HLPH COMMAND TO SEARCH FOR
- SA6 A2
- NZ X2,HLP14 IF XEDITI ALREADY GOTTEN
- STATUS XEDITI
- SA1 XEDITI
- SX3 7776B
- BX3 X3*X1
- NZ X3,HLP14 IF FILE GOTTEN
- GET XEDITI,,,,,,IP
- HLP14 OPEN XEDITI,READNR,RECALL
- REWIND XEDITI,R
- READ XEDITI
- SA5 HLPH COMMAND TO SEARCH FOR
- LX6 X5,B1
- SB2 B1+B1
- BX7 X6+X5
- LX4 X7,B2
- SA3 HLPI =10HHHHHHHHHHH
- BX6 X4+X7
- LX7 -2
- BX4 X6+X7
- BX3 X3*X4 BIT 3 OF CHAR SET IF CHAR NOT ZERO
- AX7 X3,B1
- BX0 X5 MASK
- BX4 X7+X3
- LX7 X4,B2
- BX6 X4+X7
- AX7 X4,B2
- BX0 X6+X7 COMMAND MASK
- HLP15 MX6 0
- SA6 E.SCR+3
- READC XEDITI,E.SCR,8
- ZR X1,HLP16 IF NO EOF/EOR
- RECALL X2
- WRITEC OUTPUT,HLPG
- EQ NCM EXIT
- HLP16 SA1 HLPJ
- ZR X1,HLP17 IF HELP ENTRY EXPECTED
- SA1 E.SCR+3
- SA3 =6L -
- BX6 X1-X3
- LX6 6*6 SHIFT CHARACTER AFTER - TO CHARACTER 9
- AX6 6 PROCESS CBR/CCR DIFFERENCE
- SA6 HLPJ SET HELP ENTRY EXPECTED IF - IN COL 35
- EQ HLP15 READ NEXT LINE
- HLP17 SA1 E.SCR
- ZR X1,HLP15 IF BLANK LINE
- BX2 X1
- LX2 2*6
- SX2 X2-2R
- ZR X2,HLP15 IF LINE BEGINS WITH 2 BLANKS
- AX1 54
- SX6 X1-1R>-777700B
- ZR X6,HLP15 IF PAGINATION
- SA6 HLPJ CLEAR HELP ENTRY EXPECTED FLAG
- SA1 A1
- BX3 X1-X5 CHECK FOR COMMAND MATCH
- BX6 X0*X3
- NZ X6,HLP15 IF NO MATCH
- BX7 X0
- AX7 6
- BX7 -X0*X7 MASK FOR NEXT CHARACTER
- * NO COMMAND IS .GE. 9 CHARACTERS IN LENGTH.
- SA2 =10H
- BX2 X1-X2 COMPARE WITH BLANK
- BX3 X7*X1
- BX2 X7*X2
- ZR X3,HLP17.1 IF NEXT CHARACTER IS 00B
- NZ X2,HLP15 IF NEXT CHARACTOR IS NOT BLANK (55B)
- HLP17.1 SA1 CSMR
- PL X1,HLP18 IF 63 CHARACTER SET
- SA2 BATCH
- NZ X2,HLP18 IF BATCH MODE
- SA1 AS
- ZR X1,HLP18 IF ALREADY IN NORMAL CHARACTER SET MODE
- CSET NORMAL
- * A MATCH IS FOUND IN THE XEDIT HELP FILE. LIST ENTRY.
- HLP18 WRITEC OUTPUT,E.SCR
- RJ HTI CHECK FOR INTERRUPT
- HLP19 READC XEDITI,E.SCR
- NZ X1,HLP20 IF EOF/EOR
- SA1 E.SCR+3
- SA2 =6L -
- BX3 X1-X2
- LX3 6*6
- AX3 6 REMOVE CHARACTOR 36
- ZR X3,HLP20 IF END OF ENTRY
- SA1 E.SCR
- AX1 54
- SB2 X1-1R>-777700B
- ZR B2,HLP19 IF PAGEINATION
- EQ HLP18 WRITE NEXT LINE
- HLP20 RECALL XEDITI
- EQ HLP23 EXIT
- HLP21 SA1 CSMR
- PL X1,HLP22 IF 63 CHARACTER SET
- SA2 BATCH
- NZ X2,HLP22 IF BATCH MODE
- SA1 AS
- ZR X1,HLP22 IF ALREADY IN NORMAL MODE
- CSET NORMAL
- HLP22 BSS 0
- WRITEW OUTPUT,HLPC,HLPD
- HLP23 RJ HTI CHECK FOR INTERRUPT
- SA1 CSMR
- PL X1,NCM IF 63 CHARACTER SET, EXIT
- SA2 BATCH
- NZ X2,NCM IF IN BATCH MODE
- SA1 AS
- ZR X1,NCM IF TERMINAL WAS IN NORMAL MODE
- WRITER OUTPUT,RECALL
- CSET ASCII
- EQ NCM RETURN
- HLPA BSS 0
- HELPSP HERE ASSEMBLY SPECIAL FORMS
- DATA 0
- D OPSYN DATA
- HLPC BSS 0
- D C*THE FOLLOWING IS A LIST OF ALL XEDIT COMMANDS AND IN BRACKETS,*
- D C*THEIR ABBREVIATIONS.*
- D C* *
- MHELP (.)
- MHELP (-)
- HELP HERE
- DATA C$"MH1"$ ASSEMBLE LAST LINE
- D C* *
- D C*ANY COMMAND MAY BE PREFIXED BY ANY NUMBER OR COMBINATION OF *
- D 30HTHE PREFIX CHARACTERS - *X*, *
- VFD 30/5H/*, *
- CHAR (VFD 6/0),UA.
- VFD 24/4H*, O
- DATA C-R *+*.-
- D C* *
- D C*A COMPLETE WRITEUP ON XEDIT IS AVAILABLE ON THE LIBRARY FILE*
- VFD 30/5H#XEDI
- CHAR (VFD 12/0),FN.
- VFD 18/3H.#
- D C* *
- D C*INFORMATION FOR A SPECIFIC COMMAND OR PREFIX CHARACTER MAY BE*
- D C*OBTAINED BY ENTERING THE COMMAND -*
- VFD 24/4H
- CHAR (VFD 6/0),QM.
- CHAR (VFD 6/0),QM.
- VFD 24/4H HEL
- DATA 10HP,CMD -
- VFD 42/7HOR-
- CHAR (VFD 6/0),QM.
- CHAR (VFD 6/0),QM.
- VFD 6/1R
- DATA C*H,CMD*
- D C*WHERE CMD IS THE PREFIX OR POSTFIX CHARACTER OR THE COMMAND*
- D C*TO BE EXPLAINED.*
- HLPD EQU *-HLPC
- HLPE DATA H*COMMAND NOT FOUND -*
- HLPF DATA C*COMMAND *
- HLPG DATA H*NO HELP ENTRY FOUND FOR -*
- HLPH DATA C*COMMAND *
- HLPI DATA 10HHHHHHHHHHH
- HLPJ DATA 0 HELP ENTRY EXPECTED FLAG
- HLPK DATA 0 IF ZERO, GET XEDITI FILE
- SPACE 4,20
- ** HTI - *HELP* COMMAND TELEX INTERRUPT PROCESSOR.
- *
- * ENTRY NONE.
- *
- * EXIT RETURNS TO CALLER IF NO TLX INTERRUPT SENSED,
- * ELSE REWINDS THE OUTPUT BUFFER, RESETS THE
- * CHARACTER SET AND EXITS TO *CER1* TO POP THE
- * INPUT STACK.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6.
- *
- * MACROS CSET, DISTC, RECALL.
- HTI PS ENTRY/EXIT.
- MX6 0
- SA2 TLX
- ZR X2,HTI IF NO INTERRUPT, RETURN
- SA6 A2
- DISTC ON,A2
- RECALL OUTPUT
- SA1 =XOUTPUT+1
- MX6 -18
- BX6 -X6*X1
- SA6 A1+B1 IN=OUT=FIRST
- SA6 A6+B1
- SA2 BATCH
- NZ X2,CER1 IF IN BATCH
- SA2 AS
- ZR X2,CER1 IF ALREADY IN NORMAL CHAR SET MODE
- CSET RESTORE
- EQ CER1 EXIT, POP INPUT STACK
- XEDITI BSS 0
- CHAR= 24D,XEDI,FN. -TI- OR -64-
- XEDI FILEB XBUF,1001B,FET=12,USN=LIBRARY,EPR
- USE BUFFERS
- XBUFL EQU 1001B
- XBUF EQU * XEDITI BUFFER
- LWA EQU XBUF+XBUFL+17B
- USE SETCHAR
- DATA 0 SET END OF CHARACTER PRESET
- USE *
- HERE ASSEMBLE THE DEFERRED EXPLAIN ENTRY DATA
- OVLDEF 2,(LOW USAGE COMMANDS)
- TITLE LOCAL FETS AND STORAGE.
- ** FETS.
- RFET FILEC RBUF,BUFRL,EPR,FET=7
- TITLE COMMAND PROCESSORS.
- CPY SPACE 4,15
- ** CPY - COPY/COPYD PROCESSORS.
- *
- * ENTRY (COPY) = NAME OF LAST COPY FILE.
- *
- * EXIT TO *NCM*, COPY COMPLETE.
- *
- * USES A - 0, 1, 2, 3, 4, 5, 6.
- * X - ALL.
- *
- * CALLS LOC, RDF, VFY, WTF.
- *
- * MACROS REWIND, WRITEC, WRITER.
- CPY11 MX6 0 SET NOMOD WHEN USING COPYD
- SA6 NOMOD
- CPY SA5 IFN
- SA3 ISFN
- SB2 BFN.*100B+3 * RESERVED FILE NAME *
- SA2 COPY
- BX3 X5-X3
- ZR X3,CER IF COPY TO EDIT FILE
- BX0 X2-X5 =0 IF COPY TO SAME FILE
- LX6 X5
- SX7 B1
- SA6 A2 SAVE COPY FILE NAME
- BX5 X5+X7 MERGE COMPLETE BIT
- ZR X0,CPY1 IF CONSECUTIVE COPIES
- ZR X2,CPY1 IF NO PREVIOUS COPY FILE
- WRITER FTD,RECALL
- REWIND FTD,RECALL
- CPY1 SA0 FTD SET FET ADDRESS
- SA1 GFNB
- * DETERMINE IF THE FILE NAME IS A SPECIAL ONE.
- CPY2 BX2 X1-X5
- AX2 17
- ZR X2,CPY10 IF SPECIAL NAME
- SA1 A1+B1
- NZ X1,CPY2 IF MORE IN LIST
- BX6 X5
- ZR X0,CPY3 IF CONSECUTIVE COPIES
- SA6 FTD PUT NAME INTO FET
- REWIND A6,RECALL
- * PREPARE FOR A COPY OPERATION.
- CPY3 SA1 INDEX
- SX5 X1-.COPY =0 IF NOT TO DELETE
- CPY4 RJ LOC ATTEMPT TO LOCATE LINE
- ZR B5,CPY8 IF NOT FOUND
- SX1 A0-OUTPUT
- ZR X1,CPY5 IF OUTPUT (IF VERIFY = DUPLICATE LINES)
- RJ VRY VERIFY LOCATE
- CPY5 WRITEC A0,E.LINE PLACE LINE
- SA1 NUMS
- SX6 B1
- IX6 X1-X6
- AX1 1
- ZR X1,CPY9 IF COUNT FINISHED
- SA6 A1
- CPY6 NZ X5,CPY7 IF *COPYD* COMMAND
- RJ WTF
- CPY7 RJ RDF
- EQ CPY4 PROCESS NEXT LINE
- * LINE IS NOT FOUND.
- CPY8 SA1 NUMS
- NG X1,LCT4 IF STRING NOT FOUND
- WRITEC A0,E.LINE
- EQ CPY6 COPY LINE
- * CLEANUP FROM COMMAND.
- CPY9 ZR X5,NCM IF NOT COPYD
- RJ RDF CREAM EXISTING LINE
- EQ NCM EXIT
- * PROCESS SPECIAL FILES.
- CPY10 SA3 A1+CPYA-GFNB
- SA4 X3 GET ACTUAL NAME TO USE
- AX3 18
- BX6 X4
- SA0 X3 SET FET TO USE
- SA6 FTD
- EQ CPY3 PERFORM COPY
- * TABLE OF SPECIAL FILE OPERATIONS.
- * VFD 42/FET ADDR,18/FILE NAME
- CPYA VFD 42/FTD,18/=0 *NULL* FILE
- VFD 42/OUTPUT,18/=0 *OUTPUT* FILE
- A SET *-CPYA
- BSSZ GFNBL-A SCRATCH REST (WILL EXPLODE IF USED)
- DLB SPACE 4,10
- ** DLB - DELETE LEADING BLANKS.
- *
- * ENTRY (NUMS) = NUMBER OF LINES TO PROCESS.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 6, 7.
- * X - 1, 5, 6, 7.
- * B - 2, 3.
- *
- * CALLS RDF, SAC, WTF.
- DLB SA1 NUMS
- SX6 B1
- IX6 X1-X6
- + SA6 A1
- MX5 -0 SET NO MODIFICATIONS
- RJ SAC SET ASCII PROCESSING
- DLB1 SA1 E.STR-1
- SB3 -1R
- SX7 -1 RESET CHARACTER COUNTER
- DLB2 SA1 A1+B1 SEARCH FOR FIRST NON-BLANK
- SB2 B3+X1
- NG X1,DLB6 IF END OF LINE (ALL BLANKS)
- ZR B2,DLB2 IF CHARACTER IS A BLANK
- SX6 A1-E.STR
- ZR X6,DLB4 IF NO LEADING BLANKS
- DLB3 BX6 X1 REPACK CHARACTERS
- SX7 X7+B1 INCREMENT CHARACTER COUNT
- SA6 E.STR+X7
- SA1 A1+B1
- PL X6,DLB3 IF NOT AT END OF LINE
- SX6 B1
- MX5 0 SET MODIFICATIONS MADE TO FILE
- SA7 E.STR-1 SET NUMBER OF CHARACTERS IN LINE
- SA6 E.LMOD SET MODIFICATION MADE TO LINE
- * CHECK FOR MORE LINES TO PROCESS.
- DLB4 SA1 NUMS
- SX6 B1+
- IX6 X1-X6
- SA6 A1
- NG X6,DLB5 IF FINISHED
- RJ WTF
- RJ RDF
- EQ DLB1 PROCESS NEXT LINE
- DLB5 SA1 NOMOD UPDATE MODIFICATION STATUS
- BX6 X5*X1
- SA6 A1
- EQ NCM EXIT
- * PROCESS TOTALLY BLANK LINE.
- DLB6 MX5 0 SET MODIFICATION TO FILE
- RJ RDF READ NEXT LINE
- SA1 NUMS
- SX6 B1+
- IX6 X1-X6
- NG X6,DLB5 IF FINISHED
- SA6 A1
- EQ DLB1 PROCESS NEXT LINE
- LTB SPACE 4,15
- ** LTB - LIST TAB SETTINGS.
- *
- * ENTRY (TABS) = TAB SETTINGS.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1, 2, 5, 6, 7.
- * X - 1, 2, 3, 4, 5, 6, 7.
- * B - 4, 5, 6, 7.
- *
- * CALLS CDD.
- *
- * MACROS WRITEC.
- LTB BSS 0
- SB1 1
- SA5 TABS
- SB6 LTBA+1
- SB7 B0
- LTB1 SA1 A5+B7 PUT CURRENT TABS INTO MESSAGE
- MX5 0
- ZR X1,LTB2 IF END OF TABS
- RJ CDD CONSTRUCT MESSAGE
- LX4 60-6
- BX5 X4
- SB7 B7+B1
- SA1 A5+B7
- ZR X1,LTB2 IF END OF TABS
- RJ CDD
- SB4 6*4
- SB4 B4-B2
- LX6 B4,X6
- MX7 6*6
- BX5 X7*X5
- BX6 -X7*X6
- BX6 X6+X5
- SA6 B6
- SB6 B6+B1
- SB5 8
- SB7 B7+B1
- LT B7,B5,LTB1 IF NOT FINISHED WITH TABS
- MX5 0
- LTB2 BX7 X5
- SA7 B6
- MX7 0
- SA7 B6+B1 PUT EOL AFTER LAST TAB
- SA1 TABCHAR PUT CURRENT TAB CHARACTER INTO MESSAGE
- PL X1,LTB3 IF TAB CHARACTER IS DEFINED
- SX1 1R
- LTB3 LX1 7*6
- MX6 6
- SA2 LTBA
- LX6 7*6+6
- BX7 -X6*X2 PUT LOWER PART OF CHARACTER
- BX7 X7+X1
- LX6 6
- BX3 X6*X1
- NZ X3,LTB4 IF NOT ASCII CHARACTER
- SX1 1R
- LX1 8*6 POSITION
- LTB4 BX7 -X6*X7
- BX7 X7+X1
- SA7 A2
- WRITEC OUTPUT,LTBA
- EQ NCM EXIT
- LTBA DATA 10H TABS
- BSSZ NTABS/2+2
- NBL SPACE 4
- ** NBL - CHANGE ERROR MESSAGES TO CONTAIN NO BELLS.
- *
- * ENTRY NONE.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 1.
- * X - 1.
- *
- * MACROS MOVE.
- *
- * NOTES THIS COMMAND SWITCHES THE ERROR MESSAGES ISSUED TO A
- * TIME SHARING TERMINAL TO THOSE CONTAINING NO BELLS.
- * THIS COMMAND FROM A BATCH JOB FUNCTIONS AS A NO-OP.
- NBL SA1 BATCH
- NZ X1,NCM IF BATCH ORIGIN
- MOVE NBLAL,NBLA,MESSAGE+1 SWITCH MESSAGES
- EQ NCM EXIT
- NBLA BSS 0 TABLE OF ERROR MESSAGES
- ERROVL HERE
- NBLAL EQU *-NBLA
- OCT SPACE 4,20
- ** OCT - PROCESS OCTCHANGE COMMAND.
- *
- * ENTRY (NUMS) = FWA OF PARAMETERS.
- * (NUMS+1) = LWA OF PARAMETERS.
- *
- * EXIT TO *NCM*, IF CHANGE COMPLETE.
- * TO *CER*, IF ARGUMENT ERROR.
- * TO *LCT4*, IF STRING NOT FOUND.
- *
- * USES A - 0, 1, 5, 6, 7.
- * X - ALL.
- * B - 4, 6, 7.
- *
- * CALLS ASF, CHS, RCP, RDF, RTA, RTR, SCP, VAL,
- * VRY, WTF.
- *
- * MACROS MOVE.
- *
- * NOTES *OCT* PROCESSES ONLY A SUBSET OF CHANGE OPTIONS.
- OCT BX7 X7-X7 CLEAR CELLS
- MX6 0
- SA6 P1LP
- SA7 P2RP
- SA6 A6+B1
- SA7 A7+B1
- SA6 A6+B1
- SA7 A7+B1
- RJ SCP SET COMMAND PAREMETERS
- ZR X1,OCT12 IF NO PARAMETERS
- SX6 D.STR+1
- SB6 B0 SET FIRST PASS
- MX1 1 SET POSITION
- SA7 D.STR SET FWA OF CREATED STRING -1
- SA6 P1LP SET FIRST STRING POINTER
- BX7 X7-X7 CLEAR ASSEMBLY
- * CONVERT OCTAL DIGITS.
- OCT1 NG X5,OCT2 IF END OF PARAMETERS/LINE
- SX4 X5-1R0
- SX3 X5-1R7-1
- LX7 3
- BX3 -X4*X3 NEGATIVE IF OCTAL NUMBER
- PL X3,OCT2 IF NOT A NUMBER
- BX7 X7+X4 MERGE
- SA5 A5+B1
- LX1 30 UPDATE POSITION
- PL X1,OCT1 IF ON FIRST POSITION
- SA7 A7+B1 SAVE ASSEMBLY
- BX7 X7-X7
- EQ OCT1 LOOP
- OCT2 PL X1,OCT12 IF ON SECOND HALF (ERROR)
- SX6 A7+B1 GET LWA+1 FOR STRING
- SA6 A6+B1 SAVE ADDRESS
- * SKIP TRAILING BLANKS/ONE COMMA.
- OCT3 SB4 X5-1R
- ZR B4,OCT4 IF BLANK
- NE B4,B1,OCT5 IF NOT COMMA
- NZ X7,OCT5 IF NOT FIRST COMMA
- OCT4 SX7 B4+X7 UPDATE COMMA STATUS
- SA5 A5+B1
- EQ OCT3 PROCESS NEXT CHARACTER
- * CHECK WHICH FIELD.
- OCT5 BX7 X7-X7 RESET ASSEMBLY
- SB6 B6+B1
- NE B6,B1,OCT6 IF ON SECOND FIELD
- SX6 A7+B1
- SA6 P3LP SET SECOND POINTER
- EQ OCT1 PARSE SECOND STRING
- OCT6 RJ VAL GET REPETITION COUNT
- SA6 NUMS SAVE COUNT
- PL X5,OCT12 IF NOT END OF COMMAND
- RJ ASF GET STRING PARAMETERS
- NZ B2,OCT12 IF ERROR IN ANALYSIS
- RJ RCP RESET COMMAND PARAMETERS
- SX6 M.CODED
- SA6 E.NMODE SET BACK TO CODED
- * BEGIN TO OCTCHANGE.
- OCT7 SB7 9
- SA1 E.LINE BREAK LINE INTO 6 BIT PARTS
- MX3 -12
- SX6 B1 SET SOMETHING IN X6
- MX2 -6
- BX4 -X3*X1 GET END OF LINE BYTE
- SA6 E.STR-1
- SA0 OCBUF SET FWA OF SCRATCH BUFFER
- OCT8 LX1 6
- BX6 -X2*X1
- SB7 B7-B1
- SA6 A6+B1
- PL B7,OCT8 IF MORE IN WORD
- ZR X4,OCT9 IF END OF LINE
- SB7 9 RESET CHARACTER COUNT
- SA1 A1+B1
- BX4 -X3*X1
- EQ OCT8 BREAK UP NEXT WORD
- OCT9 SA1 A6-B1
- MX6 2
- OCT9.1 SA1 A1-B1
- ZR X1,OCT9.1 IF LAST NON-BLANK NOT FOUND
- SA6 A1+B1
- SX7 A6-E.STR SET NUMBER OF CHARACTERS IN LINE
- SA7 E.STR-1
- SX0 OCBUF+320D SET LWA+1 OF BUFFER
- RJ CHS CHANGE STRING(S)
- ZR B5,OCT13 IF STRING NOT FOUND
- * COPY NEW LINE BACK INTO *E.STR*.
- SA1 OCBUF
- MX7 0
- SA6 E.STR-1
- SA7 NOMOD SET MODIFICATIONS MADE
- OCT10 BX6 X1
- SA1 A1+B1
- SA6 A6+1
- PL X6,OCT10 IF MORE
- SB6 E.STR
- SB7 E.STR REPACK TO SAME (RTA DOES NOT CHECK LENGTH)
- RJ RTA REPACK LINE
- SB7 E.STR
- RJ RTB TRIM LINE
- MOVE 33D,E.STR,E.LINE
- RJ VRY
- SA1 NUMS
- SX6 B1
- IX6 X1-X6
- AX1 1
- ZR X1,NCM IF CHANGE COMPLETE, EXIT
- SA6 A1
- OCT11 RJ WTF
- RJ RDF ADVANCE TO NEXT
- EQ OCT7 PROCESS NEXT OCTCHANGE
- OCT12 SB2 ARG.
- RJ RCP RESET END OF LINE
- EQ CER PROCESS ERROR
- * PROCESS STRING NOT FOUND.
- OCT13 SA1 NUMS
- PL X1,OCT11 IF NOT 0 OPTION
- EQ LCT4 EXIT, STRING NOT FOUND
- PBL SPACE 4,15
- ** PBL - PROCESS BAD LINE COMMANDS.
- *
- * ENTRY (X1) = COMMAND DESCRIPTOR WORD. MODIFIER FIELD IS -
- * -1 FOR DELETE BAD LINE (DBADL).
- * +1 FOR FIND BAD LINE (FBADL).
- * (NUMS) = NUMBER OF LINES TO PROCESS.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 3, 4, 5, 6.
- *
- * CALLS RDF, SCD, VRY, WTF.
- *
- PBL AX1 18
- SX5 X1 X5 = COMMAND TYPE
- RJ SCD SET CODED LINE
- PBL1 SA1 E.LINE
- MX2 -6
- LX1 6
- BX3 -X2*X1 GET FIRST CHARACTER
- SX4 X3-1R9-1 NEGATIVE, IF OK
- SX3 X3-1R0 POSITIVE, IF OK
- BX3 -X3*X4 NEGATIVE, IF OK
- NG X3,PBL3 IF LINE NUMBER AT START
- RJ VRY
- PL X5,PBL2 IF FBADL COMMAND
- RJ RDF CREAM EXISTING LINE
- MX6 0 SET MODIFICATIONS MADE
- SA6 NOMOD
- PBL2 SA1 NUMS
- SX6 B1+
- IX6 X1-X6
- AX1 1
- ZR X1,NCM IF FINISHED, EXIT
- SA6 A1+
- NG X5,PBL1 IF DBADL COMMAND
- PBL3 RJ WTF
- RJ RDF
- EQ PBL1 PROCESS FBADL
- PLN SPACE 4,20
- ** PLN - PROCESS LINE NUMBER COMMANDS.
- *
- * ENTRY (X1) = COMMAND DESCRIPTOR WORD.
- * COMMAND MODIFIER (BITS 35-18) CONTAINS THE FUNCTION.
- * =-2, ADDLNS.
- * =-1, ADDLN.
- * = 0, DELETELN.
- * = 1, REPLACELN.
- * EXIT TO *CER*, IF ERROR.
- *
- * USES A - 1, 2, 3, 6, 7.
- * X - ALL.
- * B - 2, 5, 6, 7.
- *
- * CALLS CDD, RDF, TOP, WTF.
- PLN AX1 18
- SX5 X1
- SX7 30 DEFAULT BIT COUNT
- SA7 PLNB
- MX6 30 DEFAULT CHARACTER SIZE
- SB2 X1+B1
- PL B2,PLN0 IF NOT ADDLNS
- MX6 36 LENGTHEN CHARACTER MASK
- PLN0 SA6 PLNA
- RJ TOP REWIND FILES
- SA1 NUMS
- MX7 0
- BX6 X1
- SA2 A1+B1
- NZ X6,PLN0.1 IF STARTING LINE NUMBER NOT ZERO
- SX6 B1 SET TO DEFAULT
- PLN0.1 SA7 NOMOD SET MODIFICATIONS FLAG
- SA6 A1+
- BX7 X2
- NZ X7,PLN0.2 IF STEP IS NOT ZERO
- SX7 B1
- PLN0.2 SA7 A2
- NG X5,PLN6 IF NOT TO DELETE LINE NUMBER
- * REMOVE LINE NUMBER.
- PLN1 SA1 E.LINE REMOVE LINE NUMBERS
- SA2 =40404040404040404040B
- BX3 X2*X1 4X IF BIT 5 IS SET
- SB5 60-5
- LX4 B5,X3 000001 IF BIT 5 WAS SET
- IX4 X3-X4 011111 IF BIT 5 WAS SET
- BX4 X4+X3 111111 IF BIT 5 WAS SET
- SA3 =05050505050505050505B
- BX6 X4-X1 COMPLEMENT CHARS .GE. 40B
- IX6 X6+X3 1XXXXX IF A NUMBER
- BX3 X2*X6 100000 IF A NUMBER
- LX4 B5,X3 000001 IF A NUMBER
- IX4 X3-X4 011111 IF A NUMBER
- BX4 X4+X3 111111 IF A NUMBER
- MX6 1
- PL X4,PLN9 IF NO LINE NUMBER
- PLN2 AX6 6 EXTEND MASK
- BX7 -X4*X6
- ZR X6,PLN3 IF ALL WORD IS NUMBERS
- ZR X7,PLN2 IF NOT FINISHED WITH MASK
- PLN3 LX4 B1,X6 MASK OFF EXTRA BIT
- BX4 X6*X4
- CX0 X4
- SB7 X0 SHIFT TO LEFT JUSTIFY WORD
- MX3 -12 END OF LINE CHECKER
- BX0 -X3*X1 0, IF THIS IS LAST WORD IN LINE
- BX6 -X4*X1 REMOVE LINE NUMBER
- LX6 B7 LEFT JUSTIFY REMAINING
- LX4 B7 POSITION MASK
- PLN4 ZR X0,PLN5 IF LAST WORD OF LINE
- SA1 A1+B1
- BX0 -X3*X1
- LX1 B7
- BX2 X4*X1
- IX7 X2+X6
- BX6 -X4*X1
- SA7 A1-B1
- EQ PLN4 PROCESS NEXT WORD IN LINE
- PLN5 SA6 A1+
- PLN6 ZR X5,PLN9 IF NOT ADDING LINE NUMBERS
- SA1 NUMS GET BASE
- SA2 A1+B1 INCREMENT
- IX6 X1+X2
- SA6 A1+
- RJ CDD
- SA3 PLNB
- SA2 PLNA
- SB7 X3+
- GE B7,B2,PLN6.2 IF LINE NUMBER FITS WITHIN FIELD
- PLN6.1 ZR X2,PLN10 IF MASK ALREADY MAXIMUM SIZE
- SB7 B7+6 INCREMENT FIELD SIZE
- SX7 B7
- SA7 A3
- AX2 6 EXTEND MASK
- BX7 X2
- SA7 A2+
- LT B7,B2,PLN6.1 IF STILL LARGER THAN FIELD
- PLN6.2 SA3 =66666666B BLANK .EOR. 0000
- BX3 -X2*X3 TRIM MASK TO FIELD SIZE
- LX3 B2 JUSTIFY MASK
- CX4 X2 DETERMINE SIZE
- SB6 E.LINE SET FWA
- BX6 X6-X3
- SB5 B7-60D
- SB7 X4-60D
- SA1 B6+ GET FIRST WORD
- AX6 B5
- SB5 B6+33D SET LWA+1
- MX3 -12 END OF LINE BYTE MASK
- BX6 X2*X6 REMOVE EXCESS
- PLN7 BX4 -X3*X1
- AX1 B7
- BX7 -X2*X1
- IX7 X7+X6
- BX6 X2*X1
- SA1 B6+B1
- SA7 B6
- SB6 B6+B1
- ZR X4,PLN8 IF END OF LINE FOUND
- LT B6,B5,PLN7 IF NOT END OF BUFFER
- PLN8 SA6 B6+
- PLN9 RJ WTF STEP TO NEXT LINE
- RJ RDF
- PL X5,PLN1 IF TO DELETE LINE NUMBERS
- EQ PLN6 ADD NEW LINE NUMBERS
- PLN10 BX7 X7-X7 RESTORE FILE
- MX6 -1 SET NO MODS
- SA7 IWHERE
- SA6 NOMOD
- RJ TOP
- SB2 LNTL. LINE NUMBER TOO LARGE
- EQ CER EXIT
- PLNA DATA 0 MASK STORAGE
- PLNB DATA 0 FIELD SIZE STORAGE
- RDP SPACE 4,20
- ** RDP - READ/READP PROCESSOR.
- *
- * ENTRY (NUMS) = FWA OF PARAMETERS.
- * (NUMS+1) = LWA OF PARAMETERS.
- *
- * EXIT TO *NCM*.
- *
- * USES A - 0, 1, 2, 3, 4, 6, 7.
- * X - 0, 1, 2, 3, 4, 6, 7.
- * B - 2, 5, 6, 7.
- *
- * CALLS GAF, GFN, MPR, RCP, RTB, SCP, WTF.
- *
- * MACROS FERROR, READ, READC, RECALL, RETURN, REWIND,
- * STATUS, WRITER.
- *
- * NOTES READ/READP READS ALTERNATE FILES INTO EDIT FILE.
- RDP SA4 INDEX
- SA0 X4-.READP
- RJ SCP SET COMMAND PARAMETERS
- SB2 BFN.*100B+2 NO FILE NAME
- ZR X1,CER IF NO PARAMETERS
- MX6 0
- SA6 NOMOD SET MODIFICATIONS MADE
- * GET NEXT FILE NAME AND CONTINUE.
- RDP1 RJ GFN
- SB5 B6-BFN.*100B-2
- SA3 COPY
- ZR B5,RDP12 IF ENCOUNTERED END OF LIST
- BX7 X3-X6 =7 IF USING COPY FILE
- BX4 X6
- NZ X1,RDP11 IF ERROR IN FILE NAME
- SA6 IFN SAVE NAME
- SA2 E.IN
- BX2 X2-X6
- AX2 18
- ZR X2,RDP13 IF WANT TO READ CURRENT EDIT FILE
- NZ X7,RDP2 IF NOT READING COPY FILE
- SA7 A3 CLEAR COPY FILE NAME
- WRITER FTD,RECALL
- RDP2 SB2 A0
- NZ B2,RDP3 IF FILES ARE LOCAL
- SA4 =0LSCRF
- RJ GAF GET OR ATTACH FILE
- NZ X6,RDP10 IF FILE NOT OBTAINED
- SA4 =0LSCRF
- * FILE OBTAINED, CHECK READ ACCESS.
- * (X4) = LOCAL FILE NAME.
- RDP3 MX6 0
- SX7 B1
- SA6 SFET+5 CLEAR FNT/FST INFORMATION
- BX7 X7+X4
- SA6 A6+B1
- SA7 RFET
- SA7 SFET
- STATUS A7,P
- SB6 FCR.*100B+2
- SA1 SFET+5
- ZR X1,RDP10 IF FILE NOT FOUND
- SX2 240000B
- SB6 FCR.*100B+1
- BX2 X2*X1
- NZ X2,RDP10 IF NOT ALLOWED TO READ FILE
- REWIND RFET,RECALL
- RDP4 READ RFET
- RDP5 RECALL RFET
- RDP6 SA1 RFET+2 SEE IF ANY MORE DATA ON FILE
- SA2 A1+B1
- BX1 X1-X2
- NZ X1,RDP7 IF THERE IS DATA ON FILE
- SA1 RFET
- LX1 59-0
- PL X1,RDP5 IF FET BUSY
- LX1 0-4
- PL X1,RDP4 IF NOT END OF SOMETHING
- LX1 4-3
- NG X1,RDP9 IF NOT EOR ON FILE
- READ RFET,RECALL
- SA1 RFET+2 LOOK AHEAD FOR NEXT NON-NULL RECORD
- SA2 A1+B1
- BX1 X1-X2
- ZR X1,RDP9 IF EMPTY RECORD/FILE OR EOI FOUND
- RJ WTF
- WRITER E.OUT,RECALL
- EQ RDP8 READ LINE
- RDP7 RJ WTF
- RDP8 READC RFET,E.LINE,33D READ NEXT LINE
- NZ X1,BTL IF BAD TEXT LINE FOUND
- SB7 E.LINE
- RJ RTB CLEAN UP LINE JUST READ
- EQ RDP6 PROCESS LINE
- * PROCESS END OF FILE READ.
- RDP9 REWIND RFET,RECALL
- SB2 A0
- NZ B2,RDP1 IF NOT *READP*
- RETURN RFET,RECALL
- EQ RDP1 PROCESS NEXT FILE
- * PROCESS ERROR AND PROPER TERMINATION.
- RDP10 FERROR IFN,B6
- EQ RDP12 FINISH PROCESS
- RDP11 ERROR B6
- RDP12 RJ RCP RESET LINE PARAMETERS
- EQ NCM EXIT
- * PROCESS READ REQUEST ON CURRENT EDIT FILE.
- RDP13 MX1 60 SET -0
- RJ MPR COPY EDIT FILE TO SCRATCH
- SA4 IFN RELOAD FILE NAME
- EQ RDP2 PROCESS COPY
- TITLE SUBROUTINE LOCAL TO OVERLAY.
- GAF SPACE 4,15
- ** GAF - GET/ATTACH FILE.
- *
- * ENTRY (X4) = SCRATCH NAME.
- * (X6) = PERMANENT FILE NAME.
- *
- * EXIT (X6) = 0, IF FILE OBTAINED.
- * (B6) = ERROR ORDINAL IF (X6) .NE. 0.
- *
- * USES A - 3, 6, 7.
- * X - 1, 3, 6, 7.
- * B - 6.
- *
- * MACROS ATTACH, GET.
- GAF PS ENTRY/EXIT
- SA6 PFET+8 SET PERM. NAME
- MX7 -1
- BX7 -X7+X4
- SA7 PFET SET LOCAL NAME
- GET A7
- SA3 X2
- SX1 36000B
- BX6 X1*X3
- ZR X6,GAF IF GOTTEN, RETURN
- ATTACH X2,,,,R ATTACH IN READ MODE
- SA3 X2
- SX1 36000B
- BX6 X1*X3
- SB6 FCR.*100B+3 SET ERROR ORDINAL
- EQ GAF RETURN
- RCP SPACE 4,15
- ** RCP - RESET COMMAND PARAMETERS.
- *
- * ENTRY (NUMS+1) = ADDRESS OF WORD CONTAINING LWA+1
- * OF COMMAND LINE.
- *
- * EXIT END OF COMMAND FLAG RESET IF NEEDED.
- *
- * USES A - 1, 2, 6.
- * X - 1, 2, 6.
- *
- * NOTES SINCE *SCP* SETS (NUMS+1) = 0 IF THERE
- * ARE NO PARAMETERS, THIS ROUTINE CAN BE CALLED
- * IF THIS IS TRUE (WILL LOSE UPPER BITS OF WORD 0).
- RCP PS ENTRY/EXIT
- SA1 NUMS+1
- SA2 X1
- SX6 X2
- LX2 1
- NG X2,RCP IF REAL EOL, RETURN
- SA6 A2
- EQ RCP RETURN
- SCP SPACE 4,15
- ** SCP - SET COMMAND PARAMETERS.
- *
- * ENTRY (NUMS) = FWA OF PARAMETERS.
- * (NUMS+1) = LWA+1 OF PARAMETERS.
- *
- * EXIT (A5) = IF PARAMETERS ARE PRESENT, FWA OF PARAMETERS.
- * (X5) = FIRST WORD OF PARAMETERS.
- * (X1) = IF NO PARAMETERS, 0.
- * END OF PARAMETERS SET IN LAST WORD OF PARAMETERS.
- *
- * USES A - 1, 2, 5, 6.
- * X - 1, 2, 5, 6, 7.
- SCP1 SX6 0
- SA6 NUMS+1
- SCP PS ENTRY/EXIT
- SA1 NUMS
- SA2 A1+B1
- MX7 1
- ZR X1,SCP1 IF NO PARAMETERS
- SA2 X2
- SA5 X1
- BX6 X7+X2 SET END OF STRING
- SA6 A2
- EQ SCP RETURN
- TITLE LOCAL COMMON DECKS AND BUFFERS.
- ** COMMON DECKS.
- *
- *CALL COMCMVE
- USE SETCHAR
- DATA 0 SET END OF CHARACTER PRESET
- USE *
- BUFFERS SPACE 4
- ** BUFFERS.
- *
- USE BUFFERS
- .A MAX MAXWD*2+1,BUFRL
- OCBUF BSS 0
- RBUF BSS 0
- BSSZ .A+1
- LWA EQU *+17B SET OVERLAY LWA
- END
cdc/nos2.source/opl871/xedit.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator