cdc:nos2.source:opl871:libedit
Table of Contents
LIBEDIT
Table Of Contents
- [00009] LIBEDIT - LIBRARY EDITING PROGRAM.
- [00011] LIBRARY EDITING PROGRAM.
- [00174] INPUT DIRECTIVES.
- [00340] TABLE STRUCTURE.
- [00463] MACRO DEFINITIONS.
- [00471] CALL - SUBROUTINE CALL.
- [00497] ADDWRD - ADD WORD TO MANAGED TABLE.
- [00508] TABLE - DEFINE MANAGED TABLE POINTERS.
- [00531] SEARCH - SEARCH FOR ENTRY IN MANAGED TABLE.
- [00551] READW - REDEFINE READ WORDS MACRO TO USE CONTROL WORDS.
- [00563] WRCW - WRITE WORKING STORAGE WITH CONTROL WORDS.
- [00576] LIBRARY EDITING PROGRAM.
- [00866] DIRECTIVE CARD PROCESSING.
- [00867] RDC - READ DIRECTIVES.
- [01009] RET - RETURN FOR PROCESSING DUPLICATE FIELD.
- [01059] ERR - ERROR DETECTED IN DIRECTIVE SCAN.
- [01122] LST - LIST DIRECTIVE.
- [01599] SUBROUTINES.
- [01600] ABT - ABORT JOB.
- [01611] ADD - ADD WORD(S) TO MANAGED TABLE.
- [01701] AFN - ASSEMBLE FILE NAME.
- [01751] APN - ASSEMBLE PROGRAM NAME.
- [01835] BID - BUILD IMPLIED DELETE TABLE.
- [02005] CAP - COPY ADDED PROGRAMS.
- [02061] CCM - COPY COMMENT ONTO FILE *NEW*.
- [02260] CFN - CONVERT FILE NAME.
- [02291] CIT - CHECK IGNORE TABLE.
- [02354] COB - CLEAR OUTPUT BUFFER.
- [02371] CNO - COPY *NEW* TO *OLD*.
- [02432] CNR - CHECK NO REPLACE TABLE.
- [02460] CPL - COPY USER LIBRARY.
- [02517] CPP - COPY SPECIFIED PROGRAM(S).
- [02698] CPY - COPY RECORD TO FILE NEW.
- [02835] CRR - CHECK RECORDS REPLACED.
- [03042] C6S - CONVERT 6 DIGITS WITH LEADING ZERO SUPPRESSION.
- [03075] DIS - DISPLAY MESSAGE.
- [03098] EPN - ENTER PROGRAM NAME IN NEW PROGRAM TABLE.
- [03115] GUL - GENERATE USER LIBRARY (*LIBGEN* CALL).
- [03167] ILO - INTERPRET LIST OPTIONS.
- [03209] LIT - LIST IGNORE TABLE.
- [03308] - LIST ONE LINE.
- [03397] MSG - SEND DAYFILE MESSAGE.
- [03432] IDT - ISSUE INCORRECT DEVICE MESSAGE.
- [03475] OCC - OUTPUT COMMENT DIRECTIVE.
- [03534] ODP - OUTPUT DELETED PROGRAM.
- [03569] OIC - OUTPUT INSERT DIRECTIVE.
- [03690] ORW - OUTPUT RECORDS WRITTEN ON FILE *NEW*.
- [03738] OSB - OUTPUT STRING BUFFER.
- [03784] OZR - OUTPUT ZERO LENGTH RECORD.
- [03812] RCF - READ ALL CORRECTION FILES.
- [03951] RFN - REPLACE FILE NAME.
- [03982] RNP - RENAME PROGRAM.
- [04025] RWF - REWIND ALL FILES.
- [04083] RWS - REWIND SEQUENTIAL FILES.
- [04128] SMT - SEARCH MANAGED TABLE.
- [04170] STB - SET TITLE BUFFER.
- [04219] SUL - SKIP USER LIBRARY.
- [04268] SUM - SET *ULIB* MODE.
- [04307] VFY - CALL VFYLIB TO VERIFY *OLD* AND *NEW*.
- [04346] WPD - WRITE PROGRAM DIRECTORY.
- [04430] BUFFERS.
- [04584] RDA - READ DATA.
- [04659] WDA - WRITE DATA WITH CONTROL WORDS.
- [04724] RCW - RESTORE CONTROL WORD WRITE.
- [04753] CVD - CHECK DEVICE TYPE.
Source Code
- LIBEDIT.txt
- IDENT LIBEDIT,LIBEDIT,LIBEDIT
- ABS
- ENTRY LIBEDIT
- ENTRY SSM=
- ENTRY MFL=
- SYSCOM B1
- *COMMENT LIBEDIT - LIBRARY EDITING PROGRAM.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- TITLE LIBEDIT - LIBRARY EDITING PROGRAM.
- SPACE 4
- *** LIBEDIT - LIBRARY EDITING PROGRAM.
- * D. A. CAHLANDER. 69/02/13.
- * P. D. HAAS. 73/07/29.
- SPACE 4,10
- *** LIBEDIT PROVIDES EDITING AND REPLACEMENT OF RECORDS ON
- * A BINARY FILE BY RECORDS FROM ONE OR MORE SECONDARY FILES.
- SPACE 4
- *** COMMAND CALL -
- *
- * LIBEDIT(P1,P2,P3,P4,.....,PN)
- *
- * WHERE PARAMETER KEYWORDS ARE ORDER INDEPENDENT,
- * AND ARE ONE OR MORE OF THE FOLLOWING -
- *
- * I OMITTED, USE *INPUT* FOR INPUT DIRECTIVES FILE.
- * I , USE *INPUT* FOR INPUT DIRECTIVES FILE.
- * I=0 , NO INPUT DIRECTIVE FILE IS TO BE USED.
- * I=FN , USE *FN* FOR INPUT DIRECTIVES FILE.
- *
- * P OMITTED, USE *OLD* FOR OLD FILE.
- * P , USE *OLD* FOR OLD FILE.
- * P=0 , NO OLD FILE TO BE USED.
- * P=FN , USE *FN* FOR OLD FILE.
- *
- * N OMITTED, USE *NEW* FOR NEW FILE.
- * N , USE *NEW* FOR NEW FILE.
- * N=FN , USE *FN* FOR NEW FILE.
- *
- * B OMITTED, USE *LGO* FOR CORRECTION FILE.
- * B , USE *LGO* FOR CORRECTION FILE.
- * B=0 , NO CORRECTION FILE TO BE USED.
- * B=FN , USE *FN* FOR CORRECTION FILE.
- *
- * L OMITTED, USE *OUTPUT* FOR LISTING FILE.
- * L , USE *OUTPUT* FOR LISTING FILE.
- * L=0 , NO LISTING FILE TO BE WRITTEN.
- * L=FN , USE *FN* FOR LISTING FILE.
- *
- * LO=E , LIST PROCESSING ERRORS.
- * LO=C , LIST INPUT DIRECTIVES.
- * LO=M , LIST MODIFICATIONS MADE.
- * LO=N , LIST RECORDS WRITTEN TO NEW FILE.
- * LO=F , FULL LIST INCLUDING PROCESSING ERRORS, INPUT
- * DIRECTIVES, MODIFICATIONS MADE AND RECORDS
- * WRITTEN TO NEW FILE.
- * (NOTE - ANY COMBINATION MAY BE SPECIFIED FOR *LO*.)
- *
- * LO OMITTED ---
- * LO=EM , TIME SHARING JOB, LISTING FILE ASSIGNED
- * TO EQUIPMENT *TT*.
- * LO=ECF , ALL OTHER CASES.
- *
- * U OMITTED, NO USER LIBRARY TO BE GENERATED.
- * U , GENERATE USER LIBRARY *ULIB* ON FILE *NEW*.
- * U=0 , NO USER LIBRARY TO BE GENERATED.
- * U=LN , GENERATE USER LIBRARY *LN* ON FILE *NEW*.
- * (NOTE - *LIBGEN* IS CALLED TO GENERATE USER LIBRARY.)
- *
- * NX OMITTED, PASS *NX=0* TO *LIBGEN*.
- * NX , PASS *NX=1* TO *LIBGEN*.
- * NX=0 , PASS *NX=0* TO *LIBGEN*.
- * NX=N , PASS *NX=N* TO *LIBGEN*.
- *
- * C OMITTED, DO NOT RECOPY NEW FILE TO OLD FILE.
- * C , RECOPY NEW FILE TO OLD FILE AFTER EDITING.
- *
- * D , SAME AS *NA* (INCLUDED FOR UPWARD COMPATABILITY).
- *
- * V OMITTED, DO NOT VERIFY OLD FILE AGAINST NEW FILE.
- * V , VERIFY NEW FILE AGAINST NEW FILE.
- * (NOTE - *VFYLIB* IS CALLED TO PERFORM THE VERIFY.)
- *
- * NA OMITTED, ABORT ON DIRECTIVE ERRORS.
- * NA , DO NOT ABORT ON DIRECTIVE ERRORS.
- * (NOTE - TIME SHARING JOBS WITH DIRECTIVE INPUT FILE
- * ASSIGNED TO *TT* SET *NA* AUTOMATICALLY.)
- *
- * NI OMITTED, INSERT NEW RECORDS FROM CORRECTION FILE AT EOF.
- * NI , DO NOT INSERT NEW RECORDS AT EOF.
- * (NOTE - ONLY THOSE RECORDS NOT RERERENCED BY ANY DIRECTIVE
- * ARE ADDED AT EOF. ANY DIRECTIVE SUCH AS *INSERT
- * *NOREP, OR *IGNORE TAKES PRECEDENCE.
- *
- * NR OMITTED, REWIND *OLD* AND *NEW* BEFORE AND AFTER EDITING.
- * NR , DO NOT REWIND *OLD* OR *NEW* FILES.
- *
- * Z OMITTED, NO DIRECTIVE INPUT ON COMMAND.
- * Z , GET DIRECTIVE INPUT FROM COMMAND.
- * (NOTE - *Z* PARAMETER WILL OVERRIDE *I* PARAMETER.)
- *
- *
- * SINCE THE *U* AND *V* OPTIONS ARE PERFORMED BY LOADING
- * DIFFERENT UTILITIES, IF BOTH ARE SPECIFIED, *U* WILL
- * TAKE PRECEDENCE.
- SPACE 4,10
- *** DAYFILE MESSAGES.
- *
- * * DIRECTIVE ERRORS.* = A *LIBEDIT* DIRECTIVE HAS INCORRECT
- * SYNTAX.
- *
- * * EDITING COMPLETE.* = INFORMATIVE MESSAGE INDICATING THAT
- * THE LIBRARY EDITING HAS COMPLETED.
- *
- * * FILE NAME CONFLICT.* = THE SAME FILE NAME HAS BEEN
- * SPECIFIED FOR MORE THAN ONE PARAMETER.
- *
- * * FILENAM NOT DECLARED NRANDOM.* = AN EOF WAS ENCOUNTERED
- * ON THE NONRANDOM FILE, FILENAM.
- *
- * * INCORRECT DEVICE TYPE - LFN.* = A NON-MASS STORAGE FILE WAS
- * INCORRECTLY SPECIFIED AS EITHER THE OLD FILE OR THE
- * CORRECTION FILE.
- *
- * * LIBEDIT ARGUMENT ERROR(S).* = THE *LIBEDIT* COMMAND
- * CONTAINS AN INCORRECT PARAMETER.
- *
- * * LIST OPTION ERROR.* = AN INCORRECT OPTION WAS SPECIFIED
- * FOR THE *LO* PARAMETER.
- *
- * * N DIRECTIVE ERRORS.* = *LIBEDIT* COULD NOT INTERPRET
- * N NUMBER OF DIRECTIVES.
- *
- * * N RECORDS NOT REPLACED.* = AN INFORMATIVE MESSAGE.
- * *LIBEDIT* ENCOUNTERED N NUMBER OF RECORDS ON A
- * REPLACEMENT FILE THAT WERE NOT NAMED IN THE DIRECTIVES
- * AND DID NOT REPLACE OLD FILE RECORDS.
- *
- * * NO NEW FILE.* = N=0 WAS INCORRECTLY SPECIFIED FOR THE
- * *N* PARAMETER.
- *
- * * OVERLAPPING INSERT OR DELETE.* = *LIBEDIT* ENCOUNTERED AN
- * OVERLAP IN THE RECORD NAMES SPECIFIED IN THE
- * DIRECTIVES.
- *
- * * RENAME NOT ALLOWED FOR PROC OR TEXT RECORD.* = ATTEMPT TO
- * RENAME A PROC OR TEXT TYPE RECORD WAS NOT ALLOWED.
- *
- * * REQUIRED FL EXCEEDS VALIDATED LIMIT.* = THE JOB FIELD
- * LENGTH REQUIRED FOR *LIBEDIT* IS GREATER THAN THE
- * MAXIMUM FOR WHICH THE USER IS VALIDATED.
- *
- SPACE 4
- **** ASSEMBLY CONSTANTS.
- BUFL EQU 4020B MINIMUM BUFFER REQUIRED
- DCBL EQU 16 DIRECTIVE BUFFER LENGTH
- INPL EQU 2010B *INPUT* *CIO* BUFFER LENGTH
- LGOL EQU 10021B *LGO* *CIO* BUFFER LENGTH
- NEWL EQU 20041B *NEW* *CIO* BUFFER LENGTH
- OLDL EQU 20041B *OLD* *CIO* BUFFER LENGTH
- OUTL EQU 4020B *OUTPUT* *CIO* BUFFER LENGTH
- SBUFL EQU 4020B *SCR* BUFFER LENGTH
- TTYL EQU 301B *TTYOUT* *CIO* BUFFER LENGTH
- TWIDE EQU 80+1 WIDTH LIMIT FOR TERMINAL OUTPUT
- ODEBL EQU 16
- ****
- * SPECIAL ENTRY POINT.
- SSM= EQU 0 SUPPRESS DUMPS OF FIELD LENGTH
- TITLE INPUT DIRECTIVES.
- *** INPUT DIRECTIVES.
- *
- * ON ALL DIRECTIVE DESCRIPTIONS, THE PARAMETERS ARE -
- * FN FILE NAME.
- * NAME RECORD NAME.
- * N NUMERIC PARAMETER.
- * ABCD ALPHANUMERIC PARAMETER.
- * TYPE LIBRARY TYPE - (MAY BE ONE OF THE FOLLOWING)
- * *ABS* ABSOLUTE PROGRAM.
- * *CAP* FAST DYNAMIC LOAD CAPSULES.
- * *OPL* OLD PROGRAM LIBRARY.
- * *OPLC* OLD PROGRAM LIBRARY COMMON DECK.
- * *OPLD* OPL DIRECTORY.
- * *OVL* SCOPE CPU OVERLAY PROGRAM.
- * *PP* PERIPHERAL PROCESSOR PROGRAM.
- * *PPL* 16-BIT PERIPHERAL PROCESSOR PROGRAM.
- * *PPU* 7600 PPU PROGRAM.
- * *PROC* PROCEDURE TYPE RECORD.
- * *REL* RELOCATABLE CPU PROGRAM.
- * *TEXT* UNRECOGNIZED AS A PROGRAM.
- * *ULIB* USER LIBRARY.
- *
- *
- * FOR THOSE DIRECTIVES REQUIRING RECORD NAME(S), THE
- * FOLLOWING CONVENTIONS ARE USED -
- *
- * RID RECORD IDENTIFIER
- * TYPE/NAME RECORD *NAME* OF TYPE *TYPE*.
- * NAME RECORD *NAME*, USING DEFAULT TYPE.
- * * EOF (USED ONLY WITH *BEFORE).
- *
- * GID RECORD GROUP IDENTIFIER
- * TYPE/NAME RECORD *NAME* OF TYPE *TYPE*.
- * NAME RECORD *NAME*, USING DEFAULT TYPE.
- * TYPE1/NAME1- GROUP OF RECORDS STARTING WITH
- * TYPE2/NAME2 *RID1* AND ENDING WITH *RID2*.
- * TYPE/NAME1- GROUP OF *TYPE* RECORDS STARTING WITH
- * NAME2 *NAME1* AND ENDING WITH *NAME2*.
- * NAME1-NAME2 GROUP OF DEFAULT TYPE RECORDS STARTING
- * WITH *NAME1* AND ENDING WITH *NAME2*.
- * TYPE/NAME-* ALL *TYPE* RECORDS STARTING WITH *NAME*
- * NAME-* ALL DEFAULT TYPE RECORDS STARTING
- * WITH *NAME*.
- * TYPE/* ALL RECORDS OF THE SPECIFIED *TYPE*.
- * * ALL DEFAULT TYPE RECORDS.
- * 0 ZERO LENGTH RECORD (USED ONLY
- * WITH *INSERT).
- *
- *
- * DIRECTIVES -
- *
- * *AFTER RID,GID1,GID2,....GIDN
- * *A RID,GID1,GID2,...,GIDN
- * *INSERT RID,GID1,GID2,...,GIDN
- * *I RID,GID1,GID2,...,GIDN
- * INSERT *GID1* THROUGH *GID2* FROM CURRENT CORRECTION
- * FILE AFTER *RID* ON FILE *NEW*.
- * (NOTE - ANY RECORDS ON *OLD* WITH SAME NAME ARE DELETED.)
- *
- * *BEFORE RID,GID1,GID2,...,GIDN
- * *B RID,GID1,GID2,...,GIDN
- * INSERT *GID1* THROUGH *GID2* FROM CURRENT CORRECTION
- * FILE BEFORE *RID* ON FILE *NEW*.
- * (NOTE - ANY RECORDS ON *OLD* WITH SAME NAME ARE DELETED.)
- *
- * *DELETE GID1,GID2,...,GIDN
- * *D GID1,GID2,...,GIDN
- * DELETE *GID1* THROUGH *GIDN*.
- *
- * *NAME TYPE
- * *TYPE TYPE
- * CHANGE DEFAULT RECORD TYPE TO *TYPE*.
- *
- * *ADD LIB,GID1,GID2,...,GIDN.
- * ADD *GID1* THROUGH *GIDN* AT END OF LIBRARY *LIB*.
- * *LIB* CAN BE ANY OF THE FOLLOWING -
- * 1. *DDS* DEADSTART LIBRARY.
- * 2. *MOV* MONITOR OVERLAY.
- * 3. *RPL* RESIDENT PERIPHERAL OVERLAY.
- * 4. *RSL* RESIDENT *SCOPE* LIBRARY.
- * 5. *SLD* *SCOPE* LIBRARY DIRECTORY.
- * 6. ANY NAME FROM *LIB1* TO *LIB9999*.
- * (A LIBRARY IS DEFINED AS A GROUP OF RECORDS
- * TERMINATED BY A ZERO-LENGTH RECORD.)
- *
- * *IGNORE GID1,GID2,...,GIDN
- * IGNORE *GID1* THROUGH *GIDN* WHEN READING CORRECTION
- * FILE(S). THESE RECORDS ARE NOT REPLACED.
- *
- * *RENAME RID1,RID2
- * CHANGE THE NAME OF *RID1* TO *RID2*.
- *
- * *REPLACE GID1,GID2,...GIDN
- * REPLACE ONLY *GID1* THROUGH *GIDN* WHEN READING CORRECTION
- * FILE. THE REST OF THE RECORDS ARE IGNORED.
- *
- * *LIBGEN UN
- * CALL *LIBGEN* AT END OF EDITING TO GENERATE USER LIBRARY
- * *UN* ON FILE *NEW*. IF *UN* IS OMITTED,
- * USE *UN* = *ULIB*.
- * (OVERRIDES *U* PARAMETER IF *UN* IS SPECIFIED).
- *
- * *OLD FN
- * USE *FN* AS OLD FILE (OVERRIDES *P* PARAMETER).
- *
- * *NEW FN
- * USE *FN* AS NEW FILE (OVERRIDES *N* PARAMETER).
- *
- * *LGO FN1,FN2,...,FNN
- * *FILE FN1,FN2,...,FNN
- * ADD *FN1* THROUGH *FNN* TO LIST OF CORRECTION FILES.
- *
- * *NOREP FN1,FN2,...,FNN
- * DO NOT REPLACE RECORDS FROM FILES *FN1* THROUGH *FNN*.
- *
- * *REWIND FN1,FN2,...,FNN
- * REWIND *FN1* THROUGH *FN2* BEFORE AND AFTER EDITING.
- *
- * *BUILD ABCD
- * BUILD AN *OPLD* INDEX AT THE END OF FILE *NEW*.
- * THE NAME GIVEN TO THIS RECORD IS *ABCD*.
- *
- * *COMMENT RID,ABCD
- * ADDS 70 CHARACTER COMMENT *ABCD* TO THE 7700
- * TABLE OF *RID* FROM *OLD* OR CORRECTION FILE.
- *
- * *DATE RID,ABCD
- * ADDS THE CURRENT DATE AND 70 CHARACTER COMMENT *ABCD*
- * TO THE 7700 TABLE OF *RID* FROM *OLD* OR CORRECTION FILE.
- *
- * *LIST FN,ABCD
- * CHANGES LISTING FILE TO *FN*, AND LIST OPTIONS TO *ABCD*
- * (SEE *LO* PARAMETER). IF EITHER PARAMETER IS OMITTED,
- * IT IS NOT CHANGED (OVERRIDES *L* AND *LO* PARAMETERS).
- *
- * *COPY
- * COPY *NEW* TO *OLD* AFTER EDITING
- * (EQUIVALENT TO *C* COMMAND PARAMETER).
- *
- * *DEBUG
- * IGNORE SUBSEQUENT DIRECTIVE ERRORS (EQUIVALENT TO
- * *NA* PARAMETER, SET AUTOMATICALLY IF OUTPUT ASSIGNED
- * TO EQUIPMENT *TT*.
- *
- * *NOINS
- * DO NOT INSERT UNREPLACEABLE RECORDS AT EOF.
- * (EQUIVALENT TO *NI* PARAMETER.)
- *
- * *NOREW
- * DO NOT REWIND *OLD* OR *NEW * FILES.
- * (EQUIVALENT TO *NR* PARAMETER)
- *
- * *VERIFY
- * *VFYLIB
- * VERIFY *NEW* AGAINST *OLD* AFTER EDITING.
- * (EQUIVALENT TO *V* PARAMETER, USES *VFYLIB*.)
- *
- * */ TEXT
- * COMMENT CARD, *TEXT* IS COPIED TO LISTING FILE.
- *
- *
- *
- * CARDS WITHOUT AN *** IN COLUMN 1 ARE TREATED AS A CONTINUATION
- * OF THE PREVIOUS CARD. IF NO CARD PRECEEDS THIS CARD,
- * (*BEFORE *,LIB/PN) IS ASSUMED.
- TITLE TABLE STRUCTURE.
- ** TABLE STRUCTURE.
- * ALL TABLES ARE VARIABLE LENGTH, MANAGED TABLES. POINTERS
- * TO THE TABLE ABC ARE
- * P.ABC = FWA OF TABLE ABC.
- * L.ABC = LENGTH OF TABLE ABC.
- * N.ABC = NUMBER OF WORDS/ENTRY.
- * D.ABC = NUMBER OF WORDS THE LENGTH OF TABLE IS
- * INCREASED IF TABLE IS FULL.
- *
- * FNT - NAME TABLE.
- * 42/FILE,18/RANDOM
- * 1. FILE = FILE NAME LEFT JUSTIFIED
- * 2. RANDOM = 0 IF FILE IS RANDOM.
- * RANDOM = CURRENT POSITION IF FILE IS NON RANDOM.
- *
- * PNT - PROGRAM NAME TABLE.
- *
- * 42/PROGRAM,18/TYPE
- * 42/FILE,18/0
- * 60/POSITION
- * 1. PROGRAM = PROGRAM NAME LEFT JUSTIFIED.
- * 2. TYPE = PROGRAM TYPE.
- * 0 = *TEXT*
- * 1 = *PP*
- * 3 = *REL* RELOCATABLE
- * 4 = *OVL* OVERLAY
- * 5 = *ULIB* USER LIBRARY
- * 6 = *OPL* OLD PROGRAM LIBRARY
- * 7 = *OPLC* OLD PROGRAM LIBRARY COMMON DECK
- * 8 = *OPLD* OPL DIRECTORY
- * 9 = *ABS* ABSOLUTE PROGRAM
- * 10 = *PPU* 7600 PPU PROGRAM
- * 14 = *CAP* FAST DYNAMIC LOAD CAPSULE
- * 16 = *PROC* PROCEDURE TYPE RECORD
- * 20 = *PPL* 16-BIT PP PROGRAM
- * 3. FILE = CORRECTION FILE NAME.
- * 4. POSITION = RANDOM INDEX.
- *
- * DPT - DELETE PROGRAM TABLE.
- *
- * 42/PROGRAM1,6/IP,12/TYPE
- * 42/PROGRAM2,6/0,12/TYPE
- * 1. PROGRAM1 = START OF DELETE.
- * 2. PROGRAM2 = END OF DELETE.
- * 3. IP = 0, IF DELETE NOT IN PROGRESS.
- * = 1, IF DELETE IN PROGRESS.
- *
- * IDT - IMPLIED DELETE TABLE.
- *
- * 42/PROGRAM, 18/TYPE
- * 42/FILE,18/0
- * 1. PROGRAM = PROGRAM DELETED IF PRESENT.
- * 2. TYPE = PROGRAM TYPE.
- * 3. FILE = CORRECTION FILE NAME.
- *
- * PIT - PROGRAM IGNORE TABLE.
- *
- * 42/FILE,18/0
- * 42/PROGRAM1,18/TYPE1
- * 42/PROGRAM2,18/TYPE2
- * 1. FILE = FILE NAME LEFT JUSTIFIED.
- * 2. PROGRAM1 = START OF IGNORE.
- * 3. PROGRAM2 = END OF IGNORE.
- *
- *
- * RFT - REWIND FILE TABLE.
- *
- * 42/FILE,18/0
- * 1. FILE = FILE NAME LEFT JUSTIFIED.
- *
- *
- * IPT - INSERT PROGRAM TABLE.
- *
- * 42/PROG1,1/BEFORE,17/TYPE1
- * 42/FILE,18/0
- * 42/PROG2,18/TYPE2
- * 42/PROG3,18/TYPE3
- * 1. PROG1 = PROGRAM NAME ON FILE *OLD*.
- * PROG1 = LIBRARY NUMBER OF FILE *OLD*.
- * 2. BEFORE = 0 IF INSERT AFTER PROG1.
- * BEFORE = 1 IF INSERT BEFORE PROG1.
- * 3. FILE = CORRECTION FILE NAME.
- * 4. PROG2 = PROGRAM NAME FOR START OF INSERT.
- * 5. PROG3 = PROGRAM NAME FOR END OF INSERT.
- *
- *
- * CDT - COMMENT AND DATE TABLE.
- *
- * 42/PROGRAM,1/DATE,17/TYPE
- * 60/COMMENT TEXT
- * 60/COMMENT TEXT
- * 60/COMMENT TEXT
- * 60/COMMENT TEXT
- * 60/COMMENT TEXT
- * 60/COMMENT TEXT
- * 60/COMMENT TEXT
- * 1. PROGRAM = PROGRAM NAME ON FILE *NEW*.
- * 2. DATE = 1 IF DATE IS INSERTED IN 7700 TABLE.
- * 3. COMMENT TEXT = 70-CHARACTERS OF TEXT.
- *
- *
- * NRT - NO REPLACE TABLE.
- *
- * 42/FILE,18/0
- * 1. FILE = FILE NAME LEFT JUSTIFIED.
- *
- *
- * NPT - NEW PROGRAM TABLE.
- *
- * 42/PROGRAM,18/TYPE
- * 60/POSITION
- * 1. PROGRAM = PROGRAM NAME.
- * 2. TYPE = PROGRAM TYPE.
- * 3. POSITION = RANDOM FILE INDEX.
- *
- *
- * RNT - RENAME TABLE.
- *
- * 42/PROG1,18/TYPE1
- * 42/PROG2,18/TYPE2
- * 1. PROG1 = OLD PROGRAM NAME.
- * 2. PROG2 = NEW PROGRAM NAME.
- TITLE MACRO DEFINITIONS.
- * MACROS.
- *CALL COMCMAC
- *CALL COMCCMD
- *CALL COMSSRT
- *CALL COMSTCM
- SPACE 4
- ** CALL - SUBROUTINE CALL.
- * THIS MACRO SETS UP A STANDARD CALLING SEQUENCE.
- * CALL SUB,P1,P2,P3,P4,P5,P6
- * ENTRY SUB = SUBROUTINE NAME.
- * PI = ADDRESS OF I-TH PARAMETER.
- * PARAMETER ADDRESSES ARE PASSED IN B-REGISTERS (AS IN FORTRAN)
- * WITH THE FIRST PARAMETER ADDRESS IN B2, SECOND IN B3, ETC.
- CALL MACRO SUB,P1,P2,P3,P4,P5,P6
- IFC NE,$P1$$,1
- R= B2,P1
- IFC NE,$P2$$,1
- R= B3,P2
- IFC NE,$P3$$,1
- R= B4,P3
- IFC NE,$P4$$,1
- R= B5,P4
- IFC NE,$P5$$,1
- R= B6,P5
- IFC NE,$P6$$,1
- R= B7,P6
- ENDIF
- RJ SUB
- ENDM
- SPACE 4
- ** ADDWRD - ADD WORD TO MANAGED TABLE.
- * THIS MACRO SETS UP A CALL TO ADD AN ENTRY TO A MANAGED TABLE:
- * ADDWRD TABLE,ENTRY
- * ENTRY TABLE = NAME OF MANAGED TABLE.
- * ENTRY = ADDRESS OF ENTRY.
- ADDWRD MACRO TABLE,ENTRY
- CALL ADD,P.TABLE,ENTRY
- ENDM
- SPACE 4
- ** TABLE - DEFINE MANAGED TABLE POINTERS.
- * MANAGED TABLES HAVE 4 POINTERS ASSOCIATED WITH THEM:
- * (P.NAME) = FWA OF MANAGED TABLE.
- * (L.NAME) = LENGTH OF MANAGED TABLE.
- * (N.NAME) = NUMBER OF WORDS IN AN ENTRY.
- * (D.NAME) = NUMBER OF WORDS TABLE LENGTH IS INCREASED AT
- * A TIME.
- * TABLE NAME,WORD,DELTA
- * ENTRY NAME = NAME OF TABLE.
- * WORD = NUMBER OF WORDS/ENTRY.
- * DELTA = SIZE OF TABLE INCREASE (NUMBER OF ENTRIES).
- TABLE MACRO NAME,WORD,DELTA
- LOCAL NW,DW
- NW SET WORD 1
- DW SET DELTA 4
- P.NAME VFD 42D/0L_NAME,18D/BUF
- L.NAME VFD 60D/0
- N.NAME VFD 60D/NW
- D.NAME VFD 60D/NW*DW
- ENDM
- SPACE 4
- ** SEARCH - SEARCH FOR ENTRY IN MANAGED TABLE.
- * THIS MACRO SETS UP A CALL TO SEARCH FOR AN ENTRY
- * IN A MANAGED TABLE
- * SEARCH TABLE,ENTRY,MASK,INDEX,RETURN
- * ENTRY TABLE = NAME OF MANAGED TABLE.
- * ENTRY = ADDRESS OF ENTRY.
- * MASK = ADDRESS OF SEARCH MASK.
- * INDEX = INDEX INTO TABLE.
- * RETURN = ADDRESS OF RETURN PARAMETER.
- SEARCH MACRO TABLE,ENTRY,MASK,INDEX,RETURN
- SB2 P.TABLE
- SB3 ENTRY
- SB4 MASK =77777777777777777777B
- SB5 INDEX B0
- SB6 RETURN SMTA
- RJ SMT
- ENDM
- READW SPACE 4
- ** READW - REDEFINE READ WORDS MACRO TO USE CONTROL WORDS.
- PURGMAC READW
- READW MACRO F,S,N
- R= B6,S
- R= B7,N
- R= X2,F
- RJ RDA
- ENDM
- WRCW SPACE 4
- ** WRCW - WRITE WORKING STORAGE WITH CONTROL WORDS.
- WRCW MACRO F,S,N,E
- R= B6,S
- R= B7,N
- R= X2,F
- RJ WDA
- IFC NE,*E**,2
- + NZ B7,*+1
- - RJ WDA
- ENDM
- TITLE
- ** LIBEDIT - LIBRARY EDITING PROGRAM.
- *
- * 1. FILE INPUT IS READ TO DETERMINE DIRECTIVES.
- * 2. ALL FILES WITH REWIND SELECTED ARE REWOUND.
- * 3. ALL CORRECTION FILES ARE READ TO DETERMINE PROGRAM
- * NAMES AND BUILD AN INDEX.
- * 4. CORRECTION FILES WITH REWIND SELECTED ARE REWOUND.
- * 5. FILE OLD IS READ.
- * 6. INSERT BEFORE IS CHECKED.
- * 7. IMPLIED DELETE IS CHECKED.
- * 8. REPLACEMENT IS CHECKED.
- * 9. INSERT AFTER IS CHECKED.
- * 10. FILE NEW IS WRITTEN.
- * 11. REPEAT STEPS 5.-11.
- * 12. COPY ADDED PROGRAMS ONTO *NEW*, IF APPLICABLE.
- * 13. REWIND ALL FILES WITH REWIND SELECTED.
- * 14. CALL *VFYLIB* IF VERIFY REQUESTED.
- * 15. CALL *LIBGEN* IF USER LIBRARY REQUESTED.
- ORG 104B
- LIBEDIT BSS 0 ENTRY
- SB1 1 (B1) = CONSTANT ONE
- RJ PRS PRESET
- RJ RDC READ DIRECTIVES
- CALL RWF REWIND ALL FILES
- CALL RCF READ ALL CORRECTION FILES
- CALL RWS REWIND SEQUENTIAL CORRECTION FILES
- CALL BID BUILD IMPLIED DELETE TABLE
- SA2 CCPY
- SA1 P SET *OLD* IN HEADER
- NZ X2,LIB0 IF *C* OPTION
- SA2 CULB
- SA1 N SET *NEW* IN HEADER
- ZR X2,LIB0 IF NO *U* OPTION
- SA1 GULF SET *NEW* IN HEADER
- LIB0 MX0 42
- BX6 X0*X1
- SA6 LIBF+3
- SB6 B0+
- CALL STB,LIBF SET TITLE OF PAGE
- SB6 B1
- CALL STB,LIBG
- WRITECW N,* SET FILE STATUS
- SA4 N+4
- AX4 18
- SX6 X4 SET SECTOR WORD COUNT
- SA1 OLD
- SA6 N-1
- ZR X1,LIB19 IF NO FILE *OLD*
- OPEN A1,READNR,R
- SA1 P+1 CHECK DEVICE TYPE
- RJ CVD
- ZR X7,IDT IF INCORRECT DEVICE
- READCW P,17B
- LIB1 READW P,WSA,WSAL
- BX6 X1 SET EOR INDICATOR
- SA6 LIBA
- PL X1,LIB2 IF NOT EOF ON FILE *OLD*
- SB5 WSA
- EQ B5,B6,LIB19 IF NO DATA READ
- EQ LIB2.1 PROCESS DATA
- LIB2 SA1 LIBA CHECK EOR INDICATOR
- NG X1,LIB19 IF EOF ON FILE OLD
- LIB2.1 SB6 WSA
- SB7 X1+
- EQ B6,B7,LIB17 IF 0-LENGTH RECORD
- SA1 P-LWP LWA+1 OF DATA TRANSFERED FROM OLD FILE
- SX2 WSA
- RJ SRT SET RECORD TYPE
- SA6 LIBB
- SA6 LIBH
- MX0 -18 CREATE -TYPE/*- PSEUDO-ENTRY
- SX7 1R*
- BX6 -X0*X6 EXTRACT RECORD TYPE
- LX7 54
- BX7 X7+X6 MERGE TYPE AND -*-
- SA7 LIBB+2
- SX3 X6-ODRT
- SA2 CULB
- BX4 X3+X2
- ZR X4,LIB19 IF OPLD AND NOT *ULIB* MODE
- ZR X2,LIB2.3 IF NOT *ULIB* MODE
- SA1 LIBA
- ZR X3,LIB2.2 IF OPLD
- SX4 X6-ULRT
- NZ X4,LIB2.3 IF NOT *ULIB* RECORD
- LIB2.2 NZ X1,LIB1 IF END OF RECORD
- READW P,WSA,WSAL
- EQ LIB2.2 SKIP RECORD
- * CHECK INSERT BEFORE.
- LIB2.3 SA1 LIBB SET SEARCH NAME
- MX6 1
- LX6 18
- BX6 X6+X1
- SA6 A1+B1
- LIB3 SEARCH IPT,(LIBB+1)
- ZR X6,LIB4 IF NO MORE INSERT BEFORE
- SA1 P.IPT SET IPT INDEX
- SX1 X1
- IX6 X6-X1
- * INSERT PROGRAMS BEFORE SPECIFIED PROGRAM.
- CALL CPP,X6
- EQ LIB3 CHECK FOR ANOTHER INSERT
- * CHECK FOR DELETE.
- LIB4 SEARCH DPT,LIBN,LIBP SEARCH FOR DELETE IN PROGRESS
- NZ X6,LIB6 IF DELETE IN PROGRESS
- SEARCH DPT,LIBB
- NZ X6,LIB5 IF START OF DELETE
- SEARCH DPT,LIBB+2 CHECK FOR -TYPE/*-
- SX7 X6
- BX6 X6-X6
- NZ X7,LIB6 IF DELETING ALL OF THIS TYPE
- SEARCH IDT,LIBB
- ZR X6,LIB9 IF PROGRAM IS NOT INSERTED
- SX6 B0
- EQ LIB6 ISSUE OUTPUT MESSAGE
- LIB5 SA1 X6+B1 CHECK FOR /*DELETE NAME-*/ FORM
- SA2 LIBB+2
- BX7 X1-X2
- NZ X7,LIB5.1 IF NORMAL DELETE RANGE
- BX7 X1
- SA7 X6 UPDATE *DPT*
- BX6 X6-X6
- EQ LIB6 CONTINUE PROCESSING
- LIB5.1 SA1 LIBP SET START OF DELETE
- SA2 X6
- BX7 -X1*X2
- SA3 LIBN
- BX7 X3+X7
- SA7 X6
- LIB6 SA6 LIBC SET DPT ADDRESS
- CALL ODP,LIBB OUTPUT DELETED PROGRAM
- * SKIP RECORD FROM FILE *OLD*.
- CALL DIS,LIBB,(=H*SKIPPING *)
- SA1 LIBA
- LIB7 NZ X1,LIB8 IF EOR OR EOF
- READW OLD,WSA,WSAL
- EQ LIB7 LOOP TO END OF RECORD
- LIB8 CALL SUL,LIBB,LIBA
- SA1 LIBC CHECK FOR END OF DELETE
- ZR X1,LIB16 IF IMPLIED DELETE
- SA2 X1+B1
- SA3 LIBB
- BX6 X2-X3
- NZ X6,LIB16 IF NOT END OF DELETE
- SX6 7777B DELETE FLAG
- SA6 X1 CLEAR DPT ENTRY
- SA6 X1+B1
- EQ LIB16 CHECK INSERT AFTER
- * CHECK FOR REPLACEMENT.
- LIB9 SEARCH PNT,LIBB
- ZR X6,LIB12 IF NO REPLACEMENT
- SA1 P.PNT
- SX1 X1
- IX6 X6-X1
- SA6 LIBE
- CALL CNR,X6 CHECK FOR NO REPLACE
- NZ X6,LIB9 IF NO REPLACE
- CALL DIS,LIBB,(=H*REPLACING *)
- SA1 LIBE
- CALL CPY,X1 COPY REPLACEMENT RECORD
- CALL ORW,(=8HREPLACED),LGO
- SA1 LIBA
- NZ X1,LIB11 IF EOR ON PREVIOUS READ
- LIB10 READW OLD,WSA,WSAL SKIP RECORD ON *OLD*
- LIB11 ZR X1,LIB10 IF NOT EOR
- CALL SUL,LIBB,LIBA
- EQ LIB16 CHECK INSERT AFTER
- * COPY FROM *OLD* TO *NEW*.
- LIB12 CALL DIS,LIBB,(=H*COPYING *)
- CALL CCM,WSA,LIBB
- SB6 X6
- SA1 LIBA CHECK FOR EOR
- NZ X1,LIB14 IF EOR/EOF/EOI
- LIB13 SB7 WSA+WSAL
- WRCW N,B6,B7-B6
- READW OLD,WSA,WSAL
- SB6 WSA
- ZR X1,LIB13 IF NOT EOR/EOF/EOI
- LIB14 SA1 P-LWP LWA + 1 OF DATA TRANSFERED
- SB7 X1
- WRCW N,B6,B7-B6,R WRITE LAST PORTION OF RECORD
- SA1 N-2
- NG X1,LIB15 IF *WRITECW* NOT DISABLED
- RJ RCW
- LIB15 ADDWRD NPT,NIND
- CALL ORW,(=1H ),OLD
- CALL CPL,LIBB,LIBA
- * CHECK INSERT AFTER.
- LIB16 SEARCH IPT,LIBB
- ZR X6,LIB2 IF NO INSERT
- SA1 P.IPT SET IPT INDEX
- SX1 X1
- IX6 X6-X1
- * INSERT PROGRAMS AFTER SPECIFIED PROGRAM.
- CALL CPP,X6
- EQ LIB16 LOOP
- * PROCESS ZERO LENGTH RECORD.
- LIB17 SEARCH IPT,LIBI
- ZR X6,LIB18 IF NO ADD
- SA1 P.IPT SET IPT INDEX
- SX1 X1
- IX6 X6-X1
- CALL CPP,X6
- EQ LIB17 LOOP
- LIB18 SB2 =0 ENTER ZERO LENGTH RECORD NAME AND TYPE
- RJ EPN
- ADDWRD NPT,NIND
- WRCW N,B0,B0 WRITE ZERO LENGTH RECORD
- SA1 LIBI INCREMENT LIBRARY NUMBER
- SX6 B1
- LX6 42
- IX6 X6+X1
- SA6 A1
- CALL OZR,(=1H ),OLD,(=2H00)
- JP LIB1 READ NEXT RECORD
- * CHECK INSERT BEFORE EOF.
- LIB19 SEARCH IPT,LIBD,(=77777777777777400000B)
- ZR X6,LIB20 IF NO INSERT
- SA1 P.IPT SET IPT INDEX
- SX1 X1
- IX6 X6-X1
- * INSERT PROGRAM(S) BEFORE EOF.
- CALL CPP,X6
- EQ LIB19 CHECK FOR ANOTHER INSERT
- * PROCESS EOF ON FILE OLD.
- LIB20 RJ CAP COPY ADDED PROGRAMS
- SB2 LIBH
- SA1 LIBA GET EOR INDICATOR
- RJ WPD WRITE PROGRAM DIRECTORY
- CALL RWF REWIND FILES
- CALL CRR CHECK RECORDS REPLACED
- CALL CNO COPY NEW TO OLD
- MESSAGE (=C* EDITING COMPLETE.*),,R
- RETURN S RETURN SCRATCH FILE
- SA1 OUTPUT+2 CLOSE OUT FILE *OUTPUT*
- SA2 A1+B1
- BX6 X1-X2
- ZR X6,LIB21 IF NO OUTPUT
- WRITER OUTPUT,R
- LIB21 RJ GUL GENERATE USER LIBRARY
- RJ VFY VERIFY *OLD* AND *NEW*
- ENDRUN
- LIBA DATA 0 EOR INDICATOR
- LIBB DATA 0 PROGRAM NAME
- DATA 0 PROGRAM NAME WITH INSERT BEFORE SET
- BSSZ 1 TYPE/* PSUEDO-ENTRY
- LIBC DATA 0 ADDRESS OF DPT ENTRY
- LIBD VFD 42/1L*,1/1,17/
- LIBE DATA 0 PROGRAM NAME TABLE INDEX
- LIBF DATA C* RECORDS WRITTEN ON FILE XXX*
- LIBG DATA H* RECORD TYPE FILE *
- DATA C* DATE COMMENT*
- LIBH DATA 0 OPL DIRECTORY NAME
- LIBI DATA 1S42 LIBRARY NUMBER
- LIBN VFD 42/0,6/1,12/0 DELETE IN PROGRESS FLAG
- LIBP VFD 42/0,6/77B,12/0 DELETE IN PROGRESS MASK
- TITLE DIRECTIVE CARD PROCESSING.
- ** RDC - READ DIRECTIVES.
- RDC SUBR ENTRY/EXIT
- SA1 INPUT CHECK FOR NO INPUT FILE
- SA2 CZOP CHECK FOR *Z* OPTION
- NZ X2,RDC1 IF *Z* OPTION SELECTED
- ZR X1,RDC12 IF NO INPUT FILE
- SA1 TTYI
- NZ X1,RDC0.1 IF NOT TTY INPUT
- WRITEC TTYOUT,(=C*ENTER DIRECTIVES -*)
- RDC0.1 READ I
- RDC1 READH I,DCB,DCBL
- SB2 DCB UNPACK DIRECTIVE COMMAND BUFFER
- SB3 DCB+DCBL
- SB4 DSB
- MX0 54
- NZ X1,RDC12 IF END-OF-RECORD
- RDC2 SB5 B4+10
- SA1 B2
- RDC3 LX1 6
- BX6 -X0*X1
- SA6 B4
- SB4 B4+B1
- NE B4,B5,RDC3 LOOP FOR 10 CHARACTERS
- SB2 B2+B1
- SX6 B0
- NE B2,B3,RDC2 LOOP FOR END OF BUFFER
- SB4 DSB SUPPRESS TRAILING BLANKS
- RDC4 SA6 B5
- EQ B4,B5,RDC5 IF START OF BUFFER
- SB5 B5-B1
- SA1 B5
- SX6 X1-1R
- ZR X6,RDC4 IF CHARACTER IS * *
- * ASSEMBLE DIRECTIVE AND GO TO DIRECTIVE PROCESSOR.
- RDC5 SX6 DSB SET COLUMN POINTER AT COLUMN 1
- SA6 RDCA
- SA1 X6 CHECK COLUMN 1
- SA3 A1+B1 CHECK COLUMN 2
- SX2 X1-1R*
- NZ X2,RDC11 IF NOT *** IN COLUMN 1
- SX6 X3-1R/
- ZR X6,LST IF COMMENT TEXT
- CALL AFN,RDCA,RDCB
- SA1 RDCA IGNORE TRAILING BLANKS
- SA2 X1
- + SA2 A2+B1
- SX6 X2-1R
- ZR X6,*-1 LOOP
- SX6 A2-B1
- SA6 B2
- SA1 RDCC SEARCH FOR LEGAL DIRECTIVE
- SA2 RDCB
- RDC6 ZR X1,RDC14 IF DIRECTIVE INCORRECT
- MX0 42
- BX6 X1-X2
- BX6 X0*X6
- SX7 X1
- LX7 30
- SA1 A1+B1
- NZ X6,RDC6 LOOP
- SA7 SDA SET DIRECTIVE ADDRESS
- LX7 30
- SX6 X7+COPY
- ZR X6,COPY IF *COPY DIRECTIVE
- SX6 X7+DEBUG
- ZR X6,DEBUG IF *DEBUG DIRECTIVE
- SX6 X7+VFYLIB
- ZR X6,VFYLIB IF *VFYLIB DIRECTIVE
- SX6 X7+LSTDR
- ZR X6,LSTDR IF *LIST DIRECTIVE
- SX6 X7+NOREW
- ZR X6,NOREW IF *NOREW DIRECTIVE
- SX6 X7+NOINS
- ZR X6,NOINS IF *NOINS DIRECTIVE
- SX6 X7+LIBGEN
- ZR X6,LIBGEN IF *LIBGEN DIRECTIVE
- ** PROCESS DIRECTIVE.
- RDC7 SA1 RDCA CHECK SERARATOR CHARACTER
- SA2 X1
- SB5 X2+B1
- SA1 =20000000000005000000B
- LX7 X1,B5
- NG X7,ERR9 IF CHARACTER = EOL */* *-*
- SA3 SDA
- RDC8 PL X3,RDC9 IF LIBRARY/PROGRAM TO BE ASSEMBLED
- CALL AFN,RDCA,RDCD
- SA3 SDA
- BX3 -X3
- AX3 30
- SB7 X3
- EQ RDC10 CHECK FILE NAME
- RDC9 CALL APN,RDCA,RDCD
- SA3 SDA
- AX3 30
- SB7 X3
- RDC10 MX0 42 CHECK FILE NAME
- SA1 RDCD
- BX1 X0*X1
- SX7 =C* REQUIRED PARAMETER(S) NOT SPECIFIED.*
- ZR X1,ERR IF FILE NAME = 0
- SA1 RDCA
- SA2 X1+ (X2) = CHARACTER
- SB5 X2-1R, (B5) = CHARACTER - *,*
- JP B7 GO TO DIRECTIVE PROCESSOR.
- * PROCESS DIRECTIVE CONTINUATION.
- RDC11 SX6 DSB-1 SET STRING BUFFER POINTER
- SA6 RDCA
- SA3 SDA
- EQ RDC8 CHECK DIRECTIVE FORMAT
- * END OF DIRECTIVES. CHECK FOR ERRORS.
- RDC12 RETURN TTYOUT
- RJ SUM SET *ULIB* MODE
- SA1 TTYI
- SA2 RDCF
- ZR X1,RDCX IF TTY INPUT
- ZR X2,RDCX IF NO DIRECTIVE ERRORS
- MESSAGE (=C* DIRECTIVE ERRORS.*),3
- SA1 CDOP
- NZ X1,RDCX IF DEBUG OPTION ON
- RJ ABT ABORT
- RDC14 SX7 =C* UNRECOGNIZED KEYWORD IN DIRECTIVE.*
- EQ ERR LIST ERROR MESSAGE
- SPACE 4
- ** SET NEW DIRECTIVE ADDRESS.
- * RJ SDA TO SET NEW ADDRESS. LIBRARY/PROGRAM WILL
- * BE ASSEMBLED.
- SDA EQ INS5 PROCESS NEXT FIELD
- SPACE 4
- ** RET - RETURN FOR PROCESSING DUPLICATE FIELD.
- RET SA1 RDCA CHECK SEPARATOR CHARACTER
- SA2 X1
- ZR X2,LST IF END-OF-LINE
- SB5 X2-1R
- ZR B5,LST IF CHARACTER = * *
- EQ RDC7 IF MORE PARAMETERS
- RDCA VFD 60/DSB DIRECTIVE STRING BUFFER POINTER
- RDCB DATA 0 DIRECTIVE
- RDCC VFD 42/0LAFTER,18/INSERT
- VFD 42/0LA,18/INSERT
- VFD 42/0LADD,18/-ADP
- VFD 42/0LBEFORE,18/BEFORE
- VFD 42/0LB,18/BEFORE
- VFD 42/0LBUILD,18/BUILD
- VFD 42/0LCOMMENT,18/COMMENT
- VFD 42/0LCOPY,18/-COPY
- VFD 42/0LDATE,18/DATE
- VFD 42/0LDEBUG,18/-DEBUG
- VFD 42/0LDELETE,18/DELETE
- VFD 42/0LD,18/DELETE
- VFD 42/0LFILE,18/-FILE
- VFD 42/0LIGNORE,18/IGNORE
- VFD 42/0LINSERT,18/INSERT
- VFD 42/0LI,18/INSERT
- VFD 42/0LLIBGEN,18/-LIBGEN
- VFD 42/0LLIST,18/-LSTDR
- VFD 42/0LLGO,18/-FILE
- VFD 42/0LNAME,18/-NAME
- VFD 42/0LNEW,18/-NEWF
- VFD 42/0LNOINS,18/-NOINS
- VFD 42/0LNOREP,18/-NOREP
- VFD 42/0LNOREW,18/-NOREW
- VFD 42/0LOLD,18/-OLDF
- VFD 42/0LRENAME,18/RENAME
- VFD 42/0LREPLACE,18/REPLACE
- VFD 42/0LREWIND,18/-REWIND
- VFD 42/0LTYPE,18/-NAME
- VFD 42/0LVERIFY,18/-VFYLIB
- VFD 42/0LVFYLIB,18/-VFYLIB
- VFD 60/0
- RDCD DATA 0 ASSEMBLED NAME
- RDCE DATA 0LTEXT DEFAULT RECORD TYPE
- RDCF DATA 0 DIRECTIVE ERROR COUNT
- SPACE 4
- ** ERR - ERROR DETECTED IN DIRECTIVE SCAN.
- *
- * ENTRY (X7) = 0 IF NO EXTRA ERROR MESSAGE TO BE ISSUED.
- * (X7) = ADDRESS OF EXPLANATORY ERROR MESSAGE.
- ERR SA1 TTYI
- SA7 ERRB SAVE ERROR MESSAGE ADDRESS
- ZR X1,ERR2 IF TTY INPUT
- SA1 =10H ERROR*
- BX6 X1
- SA6 OUTPUTB
- CALL LOL LIST ONE LINE
- WRITEC OUTPUT,(=C* *)
- SA1 RDCF INCREMENT ERROR COUNT
- SX6 X1+B1
- SA6 A1
- SA1 ERRB
- ERR1 ZR X1,RDC1 IF NO ERROR MESSAGE TO BE ISSUED
- WRITEC OUTPUT,X1
- EQ RDC1 READ NEXT DIRECTIVE
- ERR2 SX2 1R BLANK FILL LINE
- SB6 OUTPUTB+1
- SB7 OUTPUTB+DCBL+1
- SA1 B6
- MX0 54
- ERR3 BX6 X1
- SA6 A1
- EQ B6,B7,ERR5 IF END OF LINE
- SA1 B6
- SB6 B6+B1
- SB5 10D
- ERR4 ZR B5,ERR3 IF END OF WORD
- LX0 6
- LX2 6
- BX6 -X0*X1
- SB5 B5-B1
- NZ X6,ERR4 IF CHARACTER .NE. 00
- BX1 X1+X2
- EQ ERR4 LOOP
- ERR5 WRITEW TTYOUT,ERRA,ERRAL
- WRITEH TTYOUT,OUTPUTB+1,DCBL
- SA1 ERRB
- ZR X1,ERR1 IF NO EXPLANATORY MESSAGE
- WRITEC TTYOUT,X1
- WRITEC TTYOUT,ERRC
- SA1 TTYO
- ZR X1,RDC1 IF TTY OUTPUT
- SA1 ERRB
- EQ ERR1 ISSUE EXPLANATION
- ERR9 SX7 =C* -- UNRECOGNIZED SEPARATOR CHARACTER.*
- EQ ERR ISSUE ERROR MESSAGE
- ERRA DATA 22HINCORRECT DIRECTIVE -
- ERRAL EQU *-ERRA
- ERRB CON 0
- ERRC DATA C* (CORRECTED DIRECTIVE MAY BE RE-ENTERED...)*
- SPACE 4
- ** LST - LIST DIRECTIVE.
- *
- * USES A - 1, 6.
- * X - 1, 2, 6.
- LST SA1 =10H
- BX6 X1
- SA6 OUTPUTB
- SA1 LIST
- SX2 4B
- BX1 X1*X2
- ZR X1,RDC1 IF DIRECTIVE LIST OPTION OFF
- CALL LOL LIST ONE LINE
- EQ RDC1 LOOP TO READ NEXT DIRECTIVE
- SPACE 4
- ** *ADD LIB,LIB1/PN1
- *
- * ADD PROGRAM(S) AT END OF SPECIFIED LIBRARY.
- * ENTRY (X2) = SEPARATOR CHARACTER.
- ADP SA1 RDCD CHECK LIBRARY NAME
- SA3 ADPA
- MX0 42
- ADP1 BX3 X3-X1
- BX6 -X0*X3
- ZR X6,ADP3 IF NO MATCH ON LIBRARY NAME
- BX7 X0*X3
- SA3 A3+B1
- NZ X7,ADP1 IF NOT FOUND
- ADP2 LX6 42 SET LIBRARY NUMBER
- SA6 A1
- EQ INSERT PROCESS INSERT
- ADP3 MX0 18
- BX7 X0*X3
- NZ X7,ADP4 IF NOT *LIBN..N*
- BX5 -X0*X1
- LX5 18
- SB7 B1+ SET DECIMAL BASE
- RJ DXB CONVERT DECIMAL TO BINARY
- SA2 RDCA RESTORE SEPARATOR CHARACTER
- SA2 X2+ (X2) = CHARACTER
- ZR X4,ADP2 IF CORRECT CONVERSION
- ADP4 SX7 =C* UNRECOGNIZED LIBRARY NAME.*
- EQ ERR ISSUE ERROR MESSAGE
- ADPA BSS 0
- CON 0LDDS+1
- CON 0LIDS+2
- CON 0LMOV+3
- CON 0LRPL+4
- CON 0LRSL+5
- CON 0LSLD+6
- ADPB CON 0LLIB
- SPACE 4
- ** *BEFORE LIB1/PN1,LIB2/PN2-LIB3/PN3,LIB4/PN4
- *
- * INSERT PROGRAM(S) BEFORE SPECIFIED PROGRAM.
- * ENTRY (X2) = SEPARATOR CHARACTER.
- BEFORE MX6 1 SET INSERT BEFORE FLAG
- LX6 18
- EQ INS1
- SPACE 4
- ** *BUILD PN
- *
- * BUILD A DIRECTORY OF FILE *NEW* WITH NAME *PN*.
- BUILD SA1 RDCD
- BX6 X1
- SA6 NPLN
- EQ LST
- SPACE 4
- ** *COMMENT LIB/PN COMMENT
- *
- * ADD A 70-CHARACTER COMMENT TO THE 7700 TABLE OF THE
- * SPECIFIED RECORD.
- COMMENT SX6 B0
- COM1 SA1 RDCD SET PROGRAM NAME
- SB5 X2-1R CHECK SEPARATOR
- ZR B5,COM2 IF CHARACTER = * *
- SB5 X2-1R,
- ZR B5,COM2 IF CHARACTER = *,*
- NZ X2,ERR9 IF NOT EOL
- COM2 BX6 X6+X1
- SA1 RDCA
- SA2 X1+B1
- SA6 COMA
- SB2 COMA
- SB3 COMA+7
- COM3 SX6 B0 ASSEMBLE COMMENT
- SB7 60
- SB2 B2+B1
- COM4 SB7 B7-6
- LX6 6
- BX6 X6+X2
- ZR X2,COM6 IF END-OF-LINE
- LX6 6
- SA2 A2+B1
- SB7 B7-6
- NZ X2,COM5 IF NOT END-OF-LINE
- SX2 1R
- COM5 BX6 X6+X2
- SA2 A2+B1
- NZ B7,COM4 LOOP FOR 1 WORD
- COM6 LX6 X6,B7 STORE 10-CHARACTERS OF COMMENT
- SA6 B2
- NE B2,B3,COM3 LOOP FOR 7 WORDS
- ADDWRD CDT,COMA
- EQ LST LIST DIRECTIVE
- COMA VFD 42/,1/,17/ 42/PROGRAM,1/DATE,17/TYPE
- DATA 0 420/COMMENT
- DATA 0
- DATA 0
- DATA 0
- DATA 0
- DATA 0
- DATA 0
- SPACE 4
- ** *COPY
- *
- * COPY FILE *NEW* TO FILE *OLD* AFTER EDITING.
- COPY SX6 B1 SET COPY FLAG
- SA6 CCPY
- EQ LST
- SPACE 4
- ** *DATE LIB/PN COMMENT
- *
- * ADD A 70-CHARACTER COMMENT AND THE DATE TO THE 7700
- * TABLE OF THE SPECIFIED PROGRAM.
- DATE MX6 1 SET DATE FLAG
- LX6 18
- EQ COM1 GO ASSEMBLE COMMENT
- DEBUG SPACE 4,10
- ** *DEBUG
- *
- * IGNORE SUBSEQUENT DIRECTIVE ERRORS.
- DEBUG SX6 B1+ SET DEBUG FLAG
- SA6 CDOP
- EQ LST LIST DIRECTIVE
- SPACE 4
- ** *DELETE LIB1/PN1,LIB2/PN2-LIB3/PN3
- *
- * DELETE SELECTED PROGRAM(S) FROM FILE *OLD*.
- * ENTRY (X2) = SEPARATOR CHARACTER.
- DELETE SB5 X2-1R-
- SA1 RDCD SET DELETE START AND STOP
- BX6 X1
- SA6 DELA
- SA6 A6+B1
- NZ B5,DEL1 IF NO CONTINUATION FIELD
- * ASSEMBLE SECOND FIELD
- CALL APN,RDCA,(DELA+1)
- DEL1 ADDWRD DPT,DELA
- EQ RET RETURN
- DELA VFD 42/,6/,12/ 42/PROGRAM,6/IP,12/TYPE
- VFD 42/,6/,12/ 42/PROGRAM,6/0,12/TYPE
- SPACE 4
- ** *FILE FN,FN,FN
- *
- * DECLARE ADDITIONAL CORRECTION FILES.
- FILE SA1 RDCD
- BX6 X1
- SA6 LGO.
- SEARCH FNT,RDCD,FILA
- NZ X6,RET IF FILE IN FNT
- ADDWRD FNT,RDCD
- EQ RET RETURN
- FILA DATA 77777777777777000000B
- SPACE 4
- ** *IGNORE LIB/PN
- * *IGNORE LIB1/PN1-LIB2/PN2
- *
- * IGNORE PROGRAM(S) WHEN CORRECTION FILE IS READ.
- * ENTRY (X2) = SEPARATOR CHARACTER.
- IGNORE SA1 LGO. SET CORRECTION FILE NAME
- SA3 RDCD SET PROGRAM NAME
- BX6 X1
- LX7 X3
- SA6 IGNA
- SA7 A6+B1
- SA7 A7+B1
- SB5 X2-1R- CHECK FOR CONTINUATION FIELD
- NZ B5,IGN1 IF NO CONTINUATION FIELD
- * ASSEMBLE SECOND FIELD.
- CALL APN,RDCA,(IGNA+2)
- IGN1 ADDWRD PIT,IGNA
- EQ RET RETURN
- IGNA VFD 42/,18/ 42/FILE,18/
- VFD 42/,18/ 42/PROGRAM,18/TYPE
- VFD 42/,18/ 42/PROGRAM,18/TYPE
- SPACE 4
- ** *INSERT LIB1/PN1,LIB2/PN2,LIB3/PN3
- *
- * INSERT PROGRAMS AFTER SPECIFIED PROGRAM.
- * ENTRY (X2) = SEPARATOR CHARACTER.
- INSERT SX6 B0 SET INSERT AFTER FLAG
- INS1 SB5 X2-1R,
- ZR B5,INS2 IF SEPARATOR = *,*
- SB5 X2-1R
- NZ B5,ERR9 IF SEPARATOR NOT * * OR *,*
- INS2 SA1 RDCA CHECK FOR SECOND FIELD
- SA3 X1+1
- SX7 =C* RECORD(S) TO BE INSERTED NOT SPECIFIED.*
- ZR X3,ERR IF NO SECOND FIELD
- SA3 RDCD SET INSERT POINT
- BX6 X6+X3
- SA6 INSA
- * ASSEMBLE PROGRAM NAME OF START.
- CALL APN,RDCA,(INSA+2)
- INS3 SB5 X2-1R-
- SA1 INSA+2
- SA4 LGO. SET FILE NAME
- LX7 X4
- SA7 A1-B1
- BX6 X1
- SA6 A1+B1
- NZ B5,INS4 IF NO CONTINUATION FIELD
- * PROCESS CONTINUATION FIELD
- CALL APN,RDCA,(INSA+3)
- INS4 ADDWRD IPT,INSA
- RJ SDA SET DIRECTIVE ADDRESS AND READ NEXT FIELD
- * PROCESS NEXT FIELD.
- INS5 SA3 RDCD
- BX6 X3
- SA6 INSA+2
- EQ INS3 LOOP TO END OF CARD
- INSA VFD 42/1L*,1/1,17/ 42/PROG1,1/BEFORE,17/TYPE1
- VFD 42/,18/ 42/FILE,18/
- VFD 42/,18/ 42/PROG2,18/TYPE2
- VFD 42/,18/ 42/PROG3,18/TYPE3
- LIBGEN SPACE 4,10
- ** *LIBGEN UN
- *
- * SET *ULIB* MODE, CALLING *LIBGEN* AFTER EDITING
- * TO GENERATE A USER LIBRARY *UN* ON FILE *NEW*.
- * IF *UN* IS OMITTED, *UN* = *ULIB* IS USED.
- LIBGEN SA1 RDCA
- SA2 X1+
- ZR X2,LIBG2 IF EOL
- SB5 X2+1
- SA2 =20000000000005000000B
- LX7 X2,B5
- NG X7,ERR9 IF ERROR
- SB2 RDCA
- SB3 RDCD
- RJ AFN ASSEMBLE *UN* NAME
- SA1 RDCD
- MX0 42
- BX6 X0*X1
- ZR X1,LIBG2 IF NULL *UN* NAME
- LIBG1 SA6 CULB
- EQ LST LIST DIRECTIVE
- LIBG2 SA1 LIBGA
- BX6 X1
- EQ LIBG1 LIST DIRECTIVE
- LIBGA VFD 24/4LULIB,36/0 DEFAULT USER LIBRARY NAME
- LSTDR SPACE 4,10
- ** *LIST LFN,OPT
- *
- * DECLARE LISTING FILE AND LIST OPTIONS.
- LSTDR SA1 RDCA CHECK SEPARATOR CHARACTER
- SA2 X1
- SB5 X2+B1
- SA2 =20000000000005000000B
- LX7 X2,B5
- NG X7,ERR9 IF ERROR
- SB2 RDCA
- SB3 RDCD
- RJ AFN ASSEMBLE LIST FILE NAME
- MX0 42
- SA1 RDCD
- BX6 X1*X0
- ZR X6,LSTDR1 IF FILE NAME NULL
- SA1 FLST+/FLST/OUTPUT
- RJ RFN REPLACE FILE NAME
- LSTDR1 SA1 RDCA
- SA2 X1+
- ZR X2,LST IF EOL
- SB2 RDCA
- SB3 RDCD
- RJ AFN ASSEMBLE LIST OPTIONS
- SA2 RDCD
- SA1 LIST
- MX0 42
- BX1 X2*X0
- ZR X1,LST IF LIST OPTIONS NULL
- RJ ILO INTERPRET LIST OPTIONS
- SX7 =C* UNRECOGNIZED LIST OPTION(S).*
- NZ X1,ERR IF ERRORS
- EQ LST LIST DIRECTIVE
- SPACE 4
- ** *NAME LIB
- *
- * SET DEFAULT LIBRARY NAME.
- NAME SA1 RDCD CHECK LIBRARY NAME
- SA2 NAMA
- NAM1 ZR X2,NAM2 IF INCORRECT LIBRARY
- BX6 X1-X2
- SA2 A2+B1
- NZ X6,NAM1 IF NOT FOUND
- BX6 X1
- SA6 RDCE
- EQ LST LIST LINE
- NAM2 SX7 =C* UNRECOGNIZED RECORD TYPE.*
- EQ ERR ISSUE ERROR MESSAGE
- NAMA BSS 0
- .E ECHO ,RT=("RTMIC")
- .A IFC NE,/RT//
- DATA L/RT/
- .A ELSE
- DATA 1
- .A ENDIF
- .E ENDD
- DATA 0
- NEWF SPACE 4,10
- ** *NEW FN
- *
- * CHANGE/SPECIFY NAME OF *NEW* FILE.
- NEWF SA1 FLST+/FLST/NEW
- NEW1 SA2 RDCD GET FILE NAME
- BX6 X2
- RJ RFN REPLACE FILE NAME
- EQ LST LIST DIRECTIVE
- NOINS SPACE 4,10
- ** *NOINS
- *
- * SET NO INSERT OF NEW RECORDS.
- NOINS SX6 B1+
- SA6 CADD SET NO INSERT AT EOF
- EQ LST LIST DIRECTIVE
- NOREP SPACE 4,10
- ** *NOREP FN,FN,FN
- *
- * DO NOT REPLACE RECORDS FROM FILE *FN*.
- NOREP SEARCH NRT,RDCD
- NZ X6,RET IF FILE IN NRT
- ADDWRD NRT,RDCD
- EQ RET RETURN
- NOREW SPACE 4,10
- ** *NOREW
- *
- * SET NO REWIND OF FILES.
- NOREW SX6 B1+
- SA6 CREW SET NO REWIND FLAG
- EQ LST LIST DIRECTIVE
- OLDF SPACE 4,10
- ** *OLD FN
- *
- * CHANGE/SPECIFY NAME OF OLD FILE.
- OLDF SA1 FLST+/FLST/OLD
- EQ NEW1 PROCESS FILE NAME
- SPACE 4
- ** *RENAME LIB1/PN1,PN2
- *
- * CHANGE THE NAME OF PROGRAM *PN1* TO *PN2*.
- * ENTRY (B5) = (SEPARATOR CHARACTER - *,*).
- RENAME SA3 RDCD SET REPLACE NAME
- BX6 X3
- SA6 RENA
- ZR B5,REN1 IF SEPARATOR = *,*
- SB5 X2-1R
- NZ B5,ERR9 IF SEPARATOR NOT *,* OR * *
- REN1 SEARCH RNT,A6
- SX7 =C* RECORD ALREADY RENAMED.*
- NZ X6,ERR IF NAME IN RNT
- CALL AFN,RDCA,(RENA+1)
- MX0 42
- SA3 RENA
- SA4 A3+B1
- BX6 -X0*X3
- BX6 X4+X6
- SA6 A4
- ADDWRD RNT,RENA
- EQ LST LIST LINE
- RENA VFD 42/,18/ 42/PRG1,18/LIB1
- VFD 42/,18/ 42/PRG1,18/LIB1
- SPACE 4
- ** *REPLACE LIB1/PN1,LIB2/PN2-LIB3/PN3
- *
- * REPLACE PROGRAM(S) FROM FILE *OLD* WITH PROGRAMS FROM
- * THE CURRENT CORRECTION FILE.
- * ENTRY (X2) = SEPARATOR CHARACTER.
- REPLACE SA3 RDCD SET REPLACE NAME
- BX6 X3
- SA6 INSA
- SEARCH NRT,(LGO.)
- NZ X6,REP1 IF FILE IN NRT
- SB3 LGO.
- ADDWRD NRT,B3
- REP1 SA1 RDCA
- SA2 X1
- EQ INS5 ASSEMBLE AS INSERT
- SPACE 4
- ** *REWIND FN,FN,FN
- *
- * REWIND FN BEFORE AND AFTER EDITING.
- REWIND SEARCH RFT,RDCD
- NZ X6,RET IF IN RFT TABLE
- ADDWRD RFT,RDCD
- EQ RET
- VFYLIB SPACE 4,10
- ** *VFYLIB
- *
- * CALL *VFYLIB* AFTER EDITING.
- VFYLIB SX6 B1+ SET *VFYLIB* FLAG
- SA6 CVFY
- EQ LST LIST DIRECTIVE
- TITLE SUBROUTINES.
- ** ABT - ABORT JOB.
- ABT SUBR ENTRY/EXIT
- SA1 OUTPUT+2 CLOSE OUT FILE *OUTPUT*
- SA2 A1+B1
- BX6 X1-X2
- ZR X6,ABT1 IF NO OUTPUT
- WRITER OUTPUT,R
- ABT1 ABORT
- SPACE 4
- ** ADD - ADD WORD(S) TO MANAGED TABLE.
- *
- * ENTRY (B2) = ADDRESS OF TABLE POINTER.
- * (B3) = FWA OF ENTRY.
- ADD SUBR ENTRY/EXIT
- ADD1 SA1 B2 SET TABLE ADDRESS
- SA2 B2+B1
- SA3 A2+B1
- SA4 A3+B1
- SA5 A4+B1
- IX7 X2-X5
- SB6 X1
- SX6 B6+X7
- SB7 X4 (B7) = NUMBER OF WORDS TO MOVE
- ZR X6,ADD3 IF NO ROOM FOR ENTRY
- SA1 B3 STORE ENTRY
- ADD2 BX7 X1
- SA7 B6+X2
- SX2 X2+B1
- SA1 A1+B1
- SX3 X3-1
- NZ X3,ADD2 LOOP FOR ENTIRE ENTRY
- BX7 X2
- SA7 A2
- EQ ADDX RETURN
- * NO ROOM FOR ENTRY. MOVE OTHER TABLES UP TO MAKE ROOM FOR
- * ENTRY.
- ADD3 SA1 P.BUF
- SA2 L.BUF
- IX6 X2-X4
- PL X6,ADD4 IF ENOUGH FL
- SX6 B0 CLEAR STATUS WORD
- SA6 ADDA
- MX6 29
- SA6 A6+B1
- MEMORY CM,ADDA,R
- MEMORY CM,ADDB,R
- SA1 ADDA GET PRESENT FL
- AX1 30
- SA2 A1+B1 GET MAXIMUM FL
- AX2 30
- SX6 X1+1000B ADD INCREMENT
- IX2 X2-X6
- PL X2,ADD3.1 IF NOT BEYOND MAXIMUM FL
- MESSAGE (=C* REQUIRED FL EXCEEDS VALIDATED LIMIT.*)
- CALL ABT ABORT JOB
- ADD3.1 LX6 30 BUILD STATUS WORD
- SA6 FL
- MEMORY CM,FL,R REQUEST ADDITIONAL FL
- SA2 L.BUF UPDATE SPARE BUFFER LENGTH
- SX6 X2+1000B
- SA6 A2
- EQ ADD3 TRY AGAIN
- ADD4 SB5 X1 (B5) = LWA OF MOVE
- SB6 X5 (B6) = FWA OF MOVE
- SA6 A2
- SB4 A1
- ADD5 SA1 B4 INCREMENT TABLE POINTERS
- SB4 B4-4
- IX7 X1+X4
- SA7 A1
- NE B4,B2,ADD5 LOOP
- SA2 B5
- EQ B5,B6,ADD1 JUMP IF NO DATA TO MOVE
- + SA1 A2-B1 MOVE TABLES
- SA2 A1-B1
- SB5 B5-2
- BX6 X1
- LX7 X2
- SA6 A1+B7
- SA7 A2+B7
- NE B5,B6,*-2
- SX7 B0 CLEAR NEW AREA
- SB7 B6+B7
- + SA7 B6
- SB6 B6+B1
- NE B6,B7,*
- EQ ADD1 MAKE ENTRY
- ADDA CON 0
- ADDB VFD 30/-1,30/0
- ERRNZ ADDB-ADDA-1
- AFN SPACE 4,14
- ** AFN - ASSEMBLE FILE NAME.
- *
- * CHARACTER MASK:
- * EOL = 2000 0000 0000 0000 0000
- * *-* = 0000 0000 0000 0400 0000
- * */* = 0000 0000 0000 0100 0000
- * * * = 0000 0000 0000 0002 0000
- * *,* = 0000 0000 0000 0001 0000
- * ENTRY (B2) = ADDRESS OF STRING BUFFER POINTER.
- * (B3) = ADDRESS TO STORE FILE NAME.
- * EXIT (B2) = ADDRESS OF UPDATED STRING BUFFER POINTER.
- *
- * USES A - 1, 2, 6.
- * X - 0, 1, 2, 6, 7.
- * B - 4, 5, 7.
- AFN SUBR ENTRY/EXIT
- SA1 B2
- SB4 X1+B1
- SB7 60
- SX6 B0
- AFN1 SA1 B4 READ CHARACTER
- SB5 X1+B1
- SA2 =20000000000005030000B
- LX2 X2,B5
- NG X2,AFN2 IF CHARACTER = EOL */* *,* *-*
- LX6 6
- BX6 X6+X1
- SB4 B4+B1
- SB7 B7-6
- EQ AFN1 LOOP FOR NEXT CHARACTER
- AFN2 LX2 X6,B7 STORE FILE NAME
- MX0 42
- BX6 X0*X2
- BX2 -X0*X2
- SX7 =C* FILE NAME TOO LONG.*
- NZ X2,ERR IF FILE NAME, DIRECTIVE .GT. 7 CHARACTERS
- SA6 B3
- AX6 42 CHECK FOR FILE NAME (*)
- SX6 X6-1L*
- NZ X6,AFN3 IF NOT MAIN CORRECTION FILE
- SA1 LGO
- BX6 X0*X1
- SA6 A6
- AFN3 SX6 B4 STORE STRING POINTER
- SA6 B2
- EQ AFNX RETURN
- APN SPACE 4,10
- ** APN - ASSEMBLE PROGRAM NAME.
- *
- * ASSEMBLE ENTRY OF TYPE *LIB/PN,*
- * ENTRY (B2) = ADDRESS OF STRING BUFFER POINTER.
- * (B3) = ADDRESS TO RETURN ENTRY.
- * EXIT (X2) = SEPARATOR CHARACTER
- *
- * USES A - 1, 2, 6, 7.
- * X - 0, 1, 2, 6, 7.
- * B - 4, 5, 7.
- APN SUBR ENTRY/EXIT
- SA1 B2
- SB4 X1+B1 (B4) = STRING BUFFER POINTER
- SA1 RDCE SET DEFAULT LIBRARY
- BX7 X1
- SA7 APNA
- SX6 B0
- SB7 60
- * ASSEMBLE FIRST ENTRY.
- APN1 SA2 B4
- SB5 X2-1R/
- ZR B5,APN2 IF CHARACTER = */*
- SA1 =20000000000004030000B
- SB5 X2+B1
- LX1 X1,B5
- NG X1,APN4 IF CHARACTER = EOL *-* * * *,*
- LX6 6
- SB7 B7-6
- IX6 X6+X2
- SB4 B4+B1
- EQ APN1 LOOP
- * CHARACTER = */* SET LIBRARY NAME. ASSEMBLE PROGRAM NAME.
- APN2 LX6 X6,B7
- SA6 APNA
- SX6 B0
- SB7 60
- SB4 B4+B1
- APN3 SA2 B4
- SB5 X2-1R/
- ZR B5,ERR9 IF CHARACTER = */*
- SA1 =20000000000004030000B
- SB5 X2+B1
- LX1 X1,B5
- NG X1,APN4 IF CHARACTER = EOL *-* * * *,*
- LX6 6
- IX6 X6+X2
- SB7 B7-6
- SB4 B4+B1
- EQ APN3 LOOP
- * CHARACTER = EOL *-* * * *,*. STORE PROGRAM NAME.
- APN4 SA1 APNA CHECK LIBRARY TYPE
- SA2 NAMA
- APN5 ZR X2,NAM2 IF INCORRECT LIBRARY
- BX7 X1-X2
- SA2 A2+B1
- NZ X7,APN5 IF NOT FOUND
- BX7 X1 SET DEFAULT TYPE
- SA7 RDCE
- MX0 42 SET PROGRAM AND LIBRARY NAMES
- LX2 X6,B7
- BX6 X0*X2
- BX2 -X0*X2
- SX7 =C* FILE NAME TOO LONG.*
- NZ X2,ERR IF FILE NAME .GT. 7 CHARACTERS
- SX7 A2-NAMA-1
- BX7 X6+X7
- SA7 B3
- SA2 B4
- SX6 B4
- SA6 B2
- SX6 X2
- EQ APNX RETURN
- APNA DATA 0 LIBRARY NAME
- SPACE 4
- ** BID - BUILD IMPLIED DELETE TABLE.
- *
- * THE INSERT PROGRAM TABLE IS SCANNED TO DETERMINE WHICH
- * PROGRAMS ARE TO BE INSERTED. EACH PROGRAM TO BE INSERTED
- * IS ADDED TO THE IMPLIED DELETE TABLE.
- BID SUBR ENTRY/EXIT
- CALL LIT LIST IGNORE TABLE
- SA6 BIDE SET ERROR COUNT
- SX6 B0 SET IPT INDEX
- SA6 BIDA
- BID1 SA1 P.IPT
- SA2 L.IPT
- SA3 BIDA
- BX6 X2-X3
- ZR X6,BID8 IF END OF INSERT PROGRAM TABLE
- SB6 X1
- SB6 B6+X3 (B6) = IPT ADDRESS
- SA4 B6+B1 SET IPT ENTRY
- SA5 A4+B1
- BX6 X4
- LX7 X5
- SA6 BIDB
- SA7 A6+B1
- AX7 42
- SX7 X7-1L0
- ZR X7,BID6 IF ZERO-LENGTH RECORD INSERT
- SA4 A5+B1
- BX6 X4
- SA6 A7+B1
- SB7 B0 SEARCH PNT FOR START OF INSERT
- SA1 P.PNT
- SA2 L.PNT
- SB5 X1
- SB6 X2
- SA5 BIDB
- MX0 42
- BID2 EQ B6,B7,BID5 IF END OF PNT
- SB7 B7+B1
- SA1 B5+B7 CHECK FILE NAME
- SB7 B7+2
- BX6 X1-X5
- BX6 X0*X6
- NZ X6,BID2 IF FILE NAME NOT FOUND
- SA4 BIDB+1 CHECK PROGRAM NAME
- BX6 X4
- AX6 42
- SX1 X6-1L*
- SB7 B7-3
- ZR X1,BID7 IF ENTIRE FILE INSERT
- BID3 EQ B6,B7,BID5 IF END OF PNT
- SA1 B5+B7
- SA2 A1+B1
- BX6 X2-X5
- BX6 X0*X6
- NZ X6,BID5 IF END OF FILE
- SB7 B7+3
- BX6 X1-X4
- NZ X6,BID3 IF FIRST PROGRAM NOT FOUND
- * FIRST PROGRAM FOUND, MAKE ENTRIES IN IMPLIED DELETE TABLE.
- SX6 B7-3
- BID4 SA6 BIDC
- SA1 P.PNT
- SB5 X1
- SA2 B5+X6
- SA3 A2+B1
- BX6 X2
- LX7 X3
- SA6 BIDD
- SA7 A6+B1
- ADDWRD IDT,A6
- SA1 P.PNT
- SA2 L.PNT
- SA3 BIDC
- SB5 X1
- SB6 X2
- SB7 X3
- SA5 BIDB CHECK FILE
- SA4 BIDB+2 CHECK FOR LAST PROGRAM
- MX0 42
- SA1 B5+B7
- BX6 X1-X4
- ZR X6,BID6 IF LAST PROGRAM FOUND
- SB7 B7+3
- BX6 X4
- AX6 42
- SX1 X6-1L*
- ZR X1,BID7 IF ADD FULL FILE
- SB4 B5+B7 CHECK FILE OF NEXT ENTRY IN THE PNT
- SA1 B4+B1
- EQ B6,B7,BID5 IF END OF PNT
- BX6 X1-X5
- BX7 X0*X6
- SX6 B7
- ZR X7,BID4 IF FILE CONTINUES
- * AN ERROR HAS BEEN DETECTED. OUTPUT INCORRECT DIRECTIVE.
- BID5 CALL OIC,BIDA
- SA1 BIDE INCREMENT ERROR COUNT
- SX6 X1+B1
- SA6 A1
- * END OF INSERT SCAN. LOOP FOR NEXT INSERT CARD.
- BID6 SA1 BIDA
- SX6 X1+4
- SA6 A1
- EQ BID1 LOOP
- * ADD ENTIRE FILE TO IDT.
- BID7 EQ B6,B7,BID6 IF END OF PNT
- SA1 B5+B7 SET IDT ENTRY
- SA2 A1+B1
- SA5 BIDB
- SA4 A5+B1
- BX6 X1
- LX7 X2
- SA6 BIDD
- SA7 A6+B1
- MX0 42
- BX6 X5-X2
- BX6 X0*X6
- NZ X6,BID6 IF END OF FILE
- BX6 X4-X1
- BX6 -X0*X6
- SB7 B7+3
- NZ X6,BID7 IF NOT CORRECT PROGRAM TYPE
- SX7 B7
- SA7 BIDC
- ADDWRD IDT,A6 ADD ENTRY TO IDT
- SA1 P.PNT
- SA2 L.PNT
- SA3 BIDC
- SB5 X1
- SB6 X2
- SB7 X3
- EQ BID7 LOOP
- * CHECK ERROR COUNT.
- BID8 SA1 BIDE
- ZR X1,BIDX IF NO ERRORS
- SA1 TTYI
- ZR X1,BIDX IF TTY INPUT
- CALL C6S,BIDE,BIDF
- CALL MSG,BIDF,(=C* DIRECTIVE ERROR(S).*)
- SA1 CDOP CHECK *NA* OPTION
- NZ X1,BIDX IF NO ABORT
- CALL ABT ABORT JOB
- *
- BIDA DATA 0 INSERT PROGRAM TABLE INDEX
- BIDB VFD 42/,18/ IPT ENTRY - 42/FILE,18/0
- VFD 42/,18/ 42/PROG1,18/LIB1
- VFD 42/,18/ 42/PROG2,18/LIB2
- BIDC DATA 0 PROGRAM NAME TABLE INDEX
- BIDD VFD 42/,18/ IDT ENTRY - 42/PROG,18/LIB
- VFD 42/,18/ 42/FILE,18/POSITION
- BIDE DATA 0 ERROR COUNT
- BIDF DATA 0 ERROR COUNT (DISPLAY CODE)
- CAP SPACE 4,10
- ** CAP - COPY ADDED PROGRAMS.
- *
- * COPY NEW RECORDS (THOSE NOT ON FILE *OLD*) ONTO
- * THE END OF FILE *NEW* (JUST BEFORE EOF).
- *
- * ENTRY (CADD) = 0 IF RECORDS TO BE INSERTED AT EOF.
- *
- * EXIT RECORDS WRITTEN TO FILE *NEW*.
- *
- * USES A - 1, 2, 3, 4, 6.
- * X - 1, 2, 3, 4, 6.
- * B - 2, 3, 6, 7.
- *
- * CALLS CPY, DIS, ORW.
- *
- * MACROS SEARCH.
- CAP SUBR ENTRY/EXIT
- SA1 CADD
- NZ X1,CAPX IF NO INSERT AT EOF
- SX6 B0+
- SA6 CAPA
- CAP1 SA1 P.PNT
- SA2 L.PNT
- SA3 CAPA
- SB6 X2
- SB7 X3
- CAP2 EQ B6,B7,CAPX IF END OF ADD
- SA4 X1+B7 CHECK PNT ENTRY
- SB7 B7+3
- ZR X4,CAP2 IF RECORD REPLACED
- SX6 B7
- SA6 A3
- BX6 X4
- SA1 A4+B1
- SA6 CAPB
- BX6 X1
- SA6 A6+B1
- SEARCH NRT,(A4+B1),(=77777777777777000000B)
- NZ X6,CAP1 IF FILE A NO REPLACE FILE
- SB2 CAPB
- SB3 =H* ADDING*
- RJ DIS
- SA1 CAPA
- SB2 X1-3
- RJ CPY COPY NEW RECORD
- SB2 =5HADDED
- SB3 CAPB+1
- RJ ORW
- EQ CAP1 GET NEXT RECORD
- CAPA BSS 1 PNT INDEX
- CAPB BSS 2 PNT ENTRY
- SPACE 4
- ** CCM - COPY COMMENT ONTO FILE *NEW*.
- *
- * ENTRY (B2) = ADDRESS OF WORKING STORAGE.
- * (B3) = ADDRESS OF PROGRAM NAME.
- *
- * EXIT (X6) = ADDRESS OF TEXT FWA.
- *
- * USES X - 0, 1, 2, 3, 5, 6, 7.
- * A - 1, 2, 3, 5, 6, 7.
- * B - 2, 3, 4, 5, 6, 7.
- *
- * CALLS COB, CPT, EPN, RNP.
- *
- * MACROS CALL, SEARCH, WRITE, WRITECW.
- CCM SUBR ENTRY/EXIT
- SX6 B2 SAVE WORKING STORAGE ADDRESS
- SA6 CCMA
- SA1 B3 SET PROGRAM NAME
- BX6 X1
- SA6 CCMC
- CALL COB CLEAR OUTPUT BUFFER
- SA1 CCMC
- MX0 42
- BX6 X0*X1
- SA6 OUTPUTB+1
- SA2 X1+NAMA
- BX6 X2
- SA6 A6+B1
- SX6 B0 CLEAR COMMENT/DATE BUFFER
- SA6 OUTPUTB+4
- SB7 7
- CCM1 SA6 A6+B1
- SB7 B7-B1
- NZ B7,CCM1 IF NOT END OF BUFFER
- SEARCH CDT,B3,(=77777777777777377777B)
- SA1 CCMA
- ZR X6,CCM14 IF NO COMMENT OR DATE
- SA2 CCMC CHECK RECORD TYPE
- SB3 X2
- ERRNZ TXRT CODE ASSUMES VALUE
- SB2 X2-PRRT+TXRT CHECK FOR TYPE *PROC*
- ZR B3,CCM14 IF TYPE *TEXT*
- ZR B2,CCM14 IF TYPE *PROC*
- SB6 X1
- SB5 X6
- SB3 5 COPY WORDS 3 - 7 OF 7700 TABLE
- SB2 2
- CCM2 SB2 B2+B1
- SA1 B6+B2
- BX6 X1
- SA6 CCMB+B2
- SB3 B3-B1
- NZ B3,CCM2 IF MORE WORDS TO COPY
- SA1 B5+B1 COPY COMMENT
- SX2 -7
- CCM3 BX6 X1
- SA6 A6+B1
- MX7 -12
- BX7 -X7*X1
- ZR X7,CCM4 IF END OF DATA
- SA1 A1+B1
- SX2 X2+B1
- NZ X2,CCM3 IF NOT END OF TABLE
- CCM4 BX6 X6-X6 SET TO CLEAR COMMENT FIELD
- SB3 CCMB+CCMBL-1 LWA OF COMMENT FIELD
- CCM5 SB2 A6 CHECK FOR END OF COMMENT FIELD
- GE B2,B3,CCM6 IF AT END OF COMMENT FIELD
- SA6 A6+B1
- EQ CCM5 LOOP TO END OF PREFIX TABLE
- CCM6 SA1 DATE. COPY DATE
- BX6 X1
- SA6 CCMB+2
- SA1 B6 CHECK FOR 7700 TABLE
- MX0 6
- BX1 X1-X0
- AX1 36
- SB3 X1+B1 SET 7700 TABLE LENGTH
- SB4 X1
- AX1 12
- NZ X1,CCM7 IF NO 7700 TABLE
- SB6 B6+B3 SET TEXT ADDRESS
- SA2 A1+B1 SET PROGRAM NAME
- SA1 B5
- LX1 42
- NG X1,CCM7 IF DATE FLAG SET
- SA1 A2+B1 SET OLD DATE
- SX6 B0
- SA6 CCMB+2
- BX6 X1
- LE B4,B1,CCM7 IF 1 WORD 7700 TABLE
- SA6 A6+
- CCM7 SX6 B6+ SAVE TEXT FWA
- SA6 CCMA
- SB7 X4-OPRT CHECK FOR OPL/OPLC RECORD TYPE
- ZR B7,CCM8 IF OPL
- NE B7,B1,CCM9 IF NOT OPLC
- ERRNZ OPRT+1-OCRT CODE ASSUMES VALUE
- CCM8 SA1 B6-B1
- BX6 X1
- SA6 CCMB+16B
- CCM9 SX6 B0
- SX6 B0 CLEAR COMMENT
- SA6 B5
- SB7 7
- CCM10 SA6 A6+B1
- SB7 B7-B1
- NZ B7,CCM10 IF NOT END OF COMMENT FIELD
- CALL RNP,CCMC,(CCMB+1)
- MX0 42 SET NAME IN 7700 TABLE
- BX6 X0*X6
- SA6 CCMB+1
- CALL EPN,CCMC ENTER PROGRAM NAME
- WRITECW N,R
- WRITE X2,*
- SA1 SC
- BX6 X6-X6
- LX1 30
- SA6 N-2 DISABLE CONTROL WORD WRITE
- BX7 X1
- SA7 N+6 STORE SECTOR COUNT
- WRITEW NEW,CCMB,CCMBL WRITE 17-WORD 7700 TABLE
- SB6 CCMB+10B COPY COMMENT TO OUTPUT
- SA1 CCMB+2 COPY DATE FIRST
- MX2 -12
- SB7 CCMB+16B
- SB5 OUTPUTB+4
- CCM11 BX6 X1
- SA1 B6
- SB6 B6+B1
- SA6 B5
- BX3 -X2*X6
- ZR X3,CCM12 IF END OF DATA
- SB5 B5+B1
- NE B6,B7,CCM11 IF NOT END OF DATA
- CCM12 EQ B6,B7,CCM13 IF END OF BUFFER
- SX6 B0
- SB5 B5+B1
- SA6 B5
- SB6 B6+B1
- EQ CCM12 CONTINUE TO END OF BUFFER
- CCM13 SA1 CCMA
- SX6 X1
- EQ CCMX RETURN
- CCM14 SA1 CCMA
- SA2 X1 CHECK FOR 7700 TABLE
- MX0 6
- BX2 X2-X0
- AX2 48
- NZ X2,CCM15 IF NO 7700 TABLE
- CALL RNP,CCMC CHECK FOR RENAME
- SA5 CCMA
- SB2 CCMC
- BX6 X0*X6 STORE NAME IN PREFIX TABLE
- SA6 X5+B1
- RJ EPN ENTER PROGRAM NAME
- SA3 OUTPUTB+3
- BX6 X3 SET (A6) FOR *CPT* CALL
- SA1 X5
- SA6 A3
- RJ CPT COPY PREFIX TABLE
- BX6 X5
- EQ CCMX RETURN
- CCM15 SB2 CCMC
- RJ RNP CHECK FOR RENAME
- SA2 CCMC
- SA5 CCMA
- SB2 X2
- ERRNZ TXRT CODE ASSUMES VALUE
- NE B2,B1,CCM16 IF NOT TYPE *PP*
- ERRNZ TXRT+1-PPRT CODE ASSUMES VALUE
- MX0 18
- CCM16 SB4 B2+TXRT-PRRT CHECK FOR TYPE *PROC*
- ZR B2,CCM17 IF TYPE *TEXT*
- ZR B4,CCM17 IF TYPE *PROC*
- SA3 X5
- BX6 X0*X6
- BX3 -X0*X3
- BX6 X3+X6
- SA6 X5
- CCM17 SB2 A2
- RJ EPN ENTER PROGRAM NAME
- BX6 X5
- EQ CCMX RETURN
- CCMA DATA 0 ADDRESS OF WORKING STORAGE
- CCMB DATA 77000016000000000000B
- BSSZ 16B
- CCMBL EQU *-CCMB
- CCMC DATA 0 PROGRAM NAME AND TYPE
- CFN SPACE 4,10
- ** CFN - CONVERT FILE NAME.
- *
- * CONVERT LEFT JUSTIFIED FILE NAME INTO A STRING IN
- * THE STRING BUFFER.
- * ENTRY (B2) = ADDRESS OF FILE NAME.
- *
- * USES A - 1, 2, 6.
- * X - 0, 1, 2, 5, 6.
- * B - 6.
- CFN SUBR ENTRY/EXIT
- SA1 B2
- MX0 42
- SA2 SBP
- BX5 X0*X1
- NZ X5,CFN1 IF NOT ZERO FILE NAME
- SX5 3R(0)
- BX5 -X0*X5
- LX5 -18
- CFN1 SB6 X2
- MX0 54
- + LX5 6
- BX6 -X0*X5
- SA6 B6
- SB6 B6+B1
- NZ X6,*-1
- SX6 B6-B1
- SA6 A2
- EQ CFNX RETURN
- CIT SPACE 4,15
- ** CIT - CHECK IGNORE TABLE.
- *
- * SEARCH THE PROGRAM IGNORE TABLE FOR CURRENT FILE.
- * CHECK FOR IGNORING, START OF IGNORE, OR END OF IGNORE.
- * DELETE ENTRY IN IGNORE TABLE ON END OF IGNORE.
- * ENTRY (B2) = ADDRESS OF FILE NAME.
- * (B3) = ADDRESS OF PROGRAM NAME.
- * EXIT (X6) = 0 IF PROGRAM IS IGNORED.
- *
- * USES A - 1, 2, 3, 4, 5.
- * X - 1, 2, 3, 4, 5, 6, 7.
- * B - 6, 7.
- CIT SUBR ENTRY/EXIT
- SX6 B1 CLEAR IGNORE PROGRAM FLAG
- SA1 P.PIT CHECK FILE NAME IN IGNORE TABLE
- SA2 L.PIT
- SB6 X1
- SB7 X2+B6
- SA4 B2 (X4) = FILE NAME
- SA5 B3 (X5) = PROGRAM NAME
- CIT1 EQ B6,B7,CITX IF END OF IGNORE TABLE
- SA1 B6
- BX7 X1-X4
- SB6 B6+3
- NZ X7,CIT1 LOOP IF FILE IS NOT CURRENT FILE
- SA2 A1+B1 CHECK PROGRAM NAME
- SA3 A2+B1
- SX1 1R* BUILD TYPE/*
- SX7 X5 PROPOGATE TYPE
- LX1 54
- BX1 X7+X1
- ZR X2,CIT3 IF IGNORE-ALL IN PROGRESS
- BX7 X5-X2
- BX1 X2-X1
- ZR X7,CIT4 IF TYPE/NAME MATCHES TABLE
- ZR X1,CIT2 IF TABLE ENTRY IS THIS TYPE/*
- AX1 18
- NZ X1,CIT1 IF TABLE ENTRY NOT ANOTHER TYPE/*
- BX7 X5-X3 CHECK END OF IGNORE GROUP
- NZ X7,CIT1 IF NOT END
- CIT2 SX6 B0 SET IGNORE PROGRAM FLAG
- BX7 X5-X3
- NZ X7,CIT1 IF NOT END OF IGNORE
- SA7 A1 CLEAR IGNORE ENTRY
- SA7 A7+1
- SA7 A3
- EQ CIT1 LOOP
- * CHECK FOR IGNORING ALL RECORDS OF ANOTHER TYPE.
- CIT3 BX7 X1-X3
- ZR X7,CIT2 IF IGNORING ALL OF THIS TYPE
- AX7 18
- NZ X7,CIT2 IF NOT IGNORING ALL OF DIFFERENT TYPE
- JP CIT1 LOOP
- * SET IGNORE-ALL FLAG.
- CIT4 SA7 A2
- JP CIT2 GO IGNORE THIS RECORD
- SPACE 4
- ** COB - CLEAR OUTPUT BUFFER.
- *
- * USES X - 1, 6.
- * A - 1, 6.
- * B - 6, 7.
- COB SUBR ENTRY/EXIT
- SA1 =1H
- SB6 OUTPUTB
- SB7 OUTPUTB+DCBL+1
- BX6 X1
- COB1 SA6 B6
- SB6 B6+B1
- NE B6,B7,COB1 LOOP TO END OF BUFFER
- EQ COBX RETURN
- CNO SPACE 4,15
- ** CNO - COPY *NEW* TO *OLD*.
- *
- * PERFORMS *C* OR *COPY OPTION.
- *
- * USES X - 1, 2, 3, 6, 7.
- * A - 1, 3, 6, 7.
- * B - 6, 7.
- *
- * CALLS DIS, SRT.
- *
- * MACROS READCW, READW, REWIND, WRCW, WRITECW.
- CNO SUBR ENTRY/EXIT
- SA1 CCPY CHECK COPY FLAG
- ZR X1,CNO IF NO COPY
- READCW N,17B
- SA3 P+4
- MX7 60
- AX3 18
- SA7 N-2 SET FIRST READ FLAG
- SA7 P-2
- SX6 X3 STORE PRU SIZE
- SA6 A7+B1
- WRITECW A6+B1,* SET FILE STATUS
- CNO1 READW NEW,WSB,WSBL
- NG X1,CNO4 IF EOF
- SB6 WSB
- SB7 X1
- EQ B6,B7,CNO3 IF NO DATA
- BX6 X1
- SA6 CNOA
- SA1 X2-LWP LWA+1 OF DATA TRANSFERED
- SX2 WSB
- RJ SRT SET RECORD TYPE
- SA6 CNOB
- CALL DIS,CNOB,(=H*RECOPYING *)
- SA1 CNOA
- NZ X1,CNO3 IF EOR
- CN02 WRCW P,WSB,WSBL
- READW NEW,WSB,WSBL
- ZR X1,CN02 IF NOT EOR
- NG X1,CNO4 IF EOF
- CNO3 WRCW P,WSB,X1-WSB,R
- EQ CNO1 LOOP TO EOF
- CNO4 SX6 X1+2
- ZR X6,CNO5 IF *EOI*
- MX7 4
- LX7 4+48
- SA7 WDAA+1 SET LEVEL 17 EOR
- WRCW P,0,0
- CNO5 WRITECW P,R FLUSH BUFFER
- REWIND OLD
- REWIND NEW
- EQ CNOX RETURN
- CNOA DATA 0 EOR INDICATOR
- CNOB DATA 0 PROGRAM NAME
- SPACE 4
- ** CNR - CHECK NO REPLACE TABLE.
- *
- * ENTRY (B2) = PROGRAM NAME TABLE INDEX.
- * EXIT (X6) " 0 IF PROGRAM IS IN A NO REPLACE FILE.
- * (X6) = 0 IF PROGRAM IS NOT IN A NO REPLACE FILE.
- *
- * USES A - 1, 2, 6, 7.
- * X - 1, 2, 6, 7.
- * B - 4, 6.
- CNR SUBR ENTRY/EXIT
- SA1 P.PNT
- SB4 B2+X1
- SX6 B2
- SA6 CNRA
- SEARCH NRT,(B4+B1),(=77777777777777000000B)
- ZR X6,CNRX IF NOT IN NO REPLACE TABLE
- SA1 P.PNT DELETE PROGRAM FROM PNT
- SA2 CNRA
- SB6 X1
- SX7 B0
- SA7 B6+X2
- EQ CNRX RETURN
- CNRA DATA 0 PROGRAM NAME TABLE INDEX
- SPACE 4,15
- ** CPL - COPY USER LIBRARY.
- *
- * ENTRY (B2) = ADDRESS OF PROGRAM TYPE.
- * (B3) = ADDRESS TO RETURN STATUS OF NEXT READ.
- * USES A - 1, 2, 6.
- * X - 1, 2, 5, 6, 7.
- * B - 6, 7.
- *
- * CALLS SRT.
- *
- * MACROS READW,WRCW.
- CPL4 READW P,WSA,WSAL
- CPL5 SA2 CPLA
- BX6 X1 RETURN RECORD STATUS
- SA6 X2
- CPL SUBR ENTRY/EXIT
- SA1 B2
- SX6 B3
- SX7 X1-ULRT
- SA6 CPLA
- NZ X7,CPL4 IF NOT *ULIB*
- SX6 0
- SA6 CPLB
- CPL1 READW P,WSA,WSAL
- NG X1,CPL5 IF EOF
- SB6 WSA
- SB7 X1
- EQ B6,B7,CPL3 IF ZERO LENGTH RECORD
- BX5 X1
- SA1 X2-LWP LWA+1 OF DATA TRANSFERED
- SX2 WSA
- RJ SRT SET RECORD TYPE
- SA6 CPLB
- * COPY FROM *OLD* TO *NEW*.
- BX7 X5
- SA2 A6-B1
- BX1 X5
- SA7 X2
- NZ X5,CPL3 IF EOR ON PREVIOUS READ
- CPL2 WRCW N,WSA,WSAL
- READW OLD,WSA,WSAL
- ZR X1,CPL2 IF NOT EOR
- CPL3 WRCW N,WSA,X1-WSA,R
- SA2 CPLB
- SB7 X2-ODRT
- NZ B7,CPL1 LOOP TO END OF USER LIBRARY
- EQ CPL4
- CPLA BSSZ 2
- CPLB EQU CPLA+1
- SPACE 4
- ** CPP - COPY SPECIFIED PROGRAM(S).
- *
- * COPY RECORDS FROM FILE TO *NEW*.
- * ENTRY (B2) = IPT INDEX.
- *
- * USES A - 1, 2, 3, 4, 5, 6, 7.
- * X - ALL.
- * B - 2, 3, 4, 5, 6, 7.
- *
- * CALLS CPY, DIS, OIC, ORW.
- *
- * MACROS CALL, MESSAGE, WRCW.
- CPP SUBR ENTRY/EXIT
- SA1 P.IPT
- SX6 B2
- SA6 CPPA
- SX5 B2+X1
- SA5 X5+B1 SET FILE NAME
- SA2 A5+B1 SET FIRST PROGRAM
- SA3 A2+B1 SET LAST PROGRAM
- BX6 X5
- LX7 X2
- SA6 CPPB
- SA7 A6+B1
- BX6 X3
- SA6 A7+B1
- * CHECK FOR 0-LENGTH RECORD INSERT.
- AX2 42
- SX2 X2-1L0
- ZR X2,CPP4 IF 0-LENGTH RECORD
- * SEARCH PNT FOR START OF INSERT
- SB7 B0
- SA1 P.PNT
- SA2 L.PNT
- SB5 X1
- ZR X2,CPP2 IF EMPTY PNT
- SB6 X2
- MX0 42
- SB4 3
- SB3 B5+B7
- SA1 B3+B1 CHECK FILE NAME
- + EQ B6,B7,CPP2 IF END OF PNT
- BX6 X1-X5
- SB7 B7+B4
- BX6 X0*X6
- SA1 A1+B4
- NZ X6,*-1 IF FILE NAME NOT FOUND
- SB7 B7-B4
- SA4 A5+B1 CHECK PROGRAM NAME
- BX6 X4
- AX6 42
- SX1 X6-1L*
- ZR X1,CPP3 IF ENTIRE FILE INSERT
- + EQ B6,B7,CPP2 IF END OF PNT
- SA1 B5+B7
- SA2 A1+B1
- BX6 X2-X5
- BX6 X0*X6
- NZ X6,CPP2 IF END OF FILE
- SB7 B7+B4
- BX6 X1-X4
- NZ X6,*-2 LOOP FOR FIRST PROGRAM
- SX6 B7-B4 SET PNT INDEX
- SA6 CPPC
- * FIRST PROGRAM FOUND, START COPY.
- CPP1 SA1 CPPC
- SA2 P.PNT
- IX3 X1+X2
- CALL DIS,X3,(=H*INSERTING *)
- SA1 CPPC
- CALL CPY,X1
- CALL ORW,(=8HINSERTED),CPPB
- SA1 P.PNT CHECK FOR END OF COPY
- SA2 L.PNT
- SA3 CPPC
- SB5 X1
- SB6 X2
- SB4 3
- SA5 CPPB CHECK FILE
- SA1 A5+B1 CHECK PROGRAM NAME
- SA4 A1+B1
- MX0 42
- SB7 X3+B4
- BX6 X1-X4
- ZR X6,CPP5 IF LAST PROGRAM FOUND RETURN
- BX6 X4
- AX6 42
- SX1 X6-1L*
- ZR X1,CPP3 IF ADD FULL FILE
- SB2 B5+B7 CHECK FILE OF NEXT ENTRY IN THE PNT
- SA1 B2+B1
- EQ B6,B7,CPP2 IF END OF PNT
- BX6 X1-X5
- SX7 B7
- SA7 CPPC
- SA1 B2 SET CURRENT PROGRAM NAME
- BX7 X1
- SA7 A5+B1
- BX6 X0*X6
- ZR X6,CPP1 IF FILE CONTINUES
- * AN ERROR HAS BEEN DETECTED. SEND MESSAGE AND ABORT.
- CPP2 CALL OIC,CPPA OUTPUT INSERT DIRECTIVE
- SA1 TTYI
- ZR X1,CPP5 IF TERMINAL INPUT
- MESSAGE (=C*OVERLAPPING INSERT OR DELETE.*)
- SA1 CDOP CHECK *NA* OPTION
- NZ X1,CPP5 RETURN IF NO ABORT
- CALL ABT ABORT JOB
- * ADD ENTIRE FILE TO FILE NEW.
- CPP3 EQ B6,B7,CPP5 RETURN IF END OF PNT
- SX6 B7
- SA2 B5+B7 CHECK PROGRAM TYPE
- SA6 CPPC
- SA5 CPPB CHECK FILE NAME
- SA4 A5+B1
- SA1 A2+B1
- BX7 X1-X5
- BX7 X0*X7
- NZ X7,CPP5 RETURN IF END OF FILE
- BX7 X2-X4
- BX7 -X0*X7
- SB7 B7+B4
- NZ X7,CPP3 IF NOT CORRECT PROGRAM TYPE
- ZR X2,CPP3 IF PROGRAM ALREADY INSERTED
- SA1 P.PNT
- IX3 X6+X1
- CALL DIS,X3,(=H*INSERTING *)
- SA1 CPPC
- CALL CPY,X1 COPY RECORD
- CALL ORW,(=8HINSERTED),CPPB
- SA1 P.PNT
- SA2 L.PNT
- SA3 CPPC
- SB5 X1
- SB6 X2
- SB4 3
- MX0 42
- SB7 X3+B4
- EQ CPP3 LOOP
- * WRITE 0-LENGTH RECORD.
- CPP4 SB2 =0 ENTER ZERO LENGTH RECORD
- RJ EPN
- ADDWRD NPT,NIND
- WRCW N,B0,B0 WRITE ZERO LENGTH RECORD
- CALL OZR,(=8HINSERTED),(=1H ),(=2H00)
- * CLEAR IPT ENTRY.
- CPP5 SA1 P.IPT
- SA2 CPPA
- SB5 X1
- SX6 B0
- SA6 B5+X2
- SA6 A6+B1
- SA6 A6+B1
- SA6 A6+B1
- EQ CPPX RETURN
- CPPA DATA 0 INSERT PROGRAM TABLE INDEX
- CPPB VFD 42/,18/ FILE NAME
- VFD 42/,18/ FIRST PROGRAM
- VFD 42/,18/ LAST PROGRAM
- CPPC DATA 0 PROGRAM NAME TABLE INDEX
- SPACE 4
- ** CPY - COPY RECORD TO FILE NEW.
- *
- * ENTRY (B2) = PNT INDEX.
- *
- * USES A - 1, 2, 3, 4, 5, 6, 7.
- * X - 1, 2, 3, 4, 5, 6, 7.
- * B - 2, 4, 5, 6.
- *
- * CALLS ABT, CCM, COB, MSG, RCW, SFN.
- *
- * MACROS BKSP, CALL, READ, READCW, READW, RECALL, WRCW.
- CPY SUBR ENTRY/EXIT
- CALL COB CLEAR OUTPUT BUFFER
- SX6 B2
- SA1 P.PNT SET PROGRAM NAME
- SA4 B2+X1
- ZR X4,CPY IF PROGRAM ALREADY REPLACED
- SA6 CPYA
- SA5 A4+B1
- BX6 X4
- LX7 X5
- SA6 CPYB
- SA7 LGO
- SA7 A6+B1
- SA4 A5+B1 SET RANDOM ADDRESS
- BX6 X4
- SX7 B0
- SA6 S+6
- SA7 CW
- * COPY RECORD.
- READ S READ FILE *S*
- READW S,WSB,WSBL
- NG X1,CPY11 IF END OF FILE
- SX6 X1
- SA6 CPYD
- CALL CCM,WSB,CPYB
- SA1 CPYB
- SB2 X1
- ERRNZ TXRT CODE ASSUMES VALUE
- NZ B2,CPY1 IF NOT TEXT
- SA3 WSB CHECK FIRST WORD OF TEXT RECORD
- MX7 6
- BX7 X3-X7
- AX7 48
- ZR X7,CPY1 IF 7700 TABLE PRESENT
- SA1 X6 REMOVE BLANKS FROM RECORD NAME
- RJ SFN GENERATE MASK OF BLANKS
- BX7 X7*X1 REMOVE BLANKS
- SX6 A1 RESTORE X6
- SA7 A1
- CPY1 SA3 SC
- SA1 CPYD
- BX7 X3 SET RANDOM ADDRESS
- SB6 X6
- SA7 NIND+1
- NZ X1,CPY3 IF EOR SENSED
- SB7 WSB+WSBL
- WRCW N,B6,B7-B6
- CPY2 READW S,WSB,WSBL
- SB6 WSB
- NZ X1,CPY3 IF EOR SENSED
- WRCW N,B6,WSBL
- EQ CPY2 CONTINUE READ
- CPY3 SB7 X1
- WRCW N,B6,B7-B6,R
- SA1 CPYB CHECK PROGRAM TYPE
- SB4 X1-ULRT
- NZ B4,CPY9 IF NOT USER LIBRARY
- * COPY USER LIBRARY.
- SX6 1
- SA6 CW SET CONTROL WORD READ FLAG
- READCW S,17B
- CPY4 READW S,WSB,WSBL
- PL X1,CPY5 IF NOT EOF
- BKSP S,R
- EQ CPY9 CLEAR PROGRAM NAME
- CPY5 SB6 WSB
- SB7 X1
- EQ B6,B7,CPY8 IF 0-LENGTH RECORD
- SX6 X1
- SA6 CPYD
- SA1 X2-LWP LWA+1 OF DATA TRANSFERED
- SX2 WSB
- RJ SRT SET RECORD TYPE
- SA6 CPYB
- SA1 CPYD
- EQ CPY7 CHECK FOR EOR
- CPY6 WRCW N,WSB,WSBL
- READW S,WSB,WSBL
- CPY7 ZR X1,CPY6 IF NOT EOR
- CPY8 WRCW N,WSB,X1-WSB,R
- SA2 CPYB
- SX6 X2-ODRT
- NZ X6,CPY4 IF NOT END OF USER LIBRARY
- RECALL S
- SA3 S+2
- BX7 X3 SET BUFFER EMPTY
- SA7 A3+B1
- * CLEAR PROGRAM NAME.
- CPY9 SA1 N-2
- NG X1,CPY10 IF CONTROL WORD WRITE ENABLED
- RJ RCW
- CPY10 ADDWRD NPT,NIND WRITE NEW INDEX
- SA1 P.PNT CLEAR PROGRAM NAME
- SA2 CPYA
- SB5 X1
- SX6 B0
- SA6 B5+X2
- SX7 B1
- SA7 CW
- EQ CPYX RETURN
- * END OF FILE DETECTED. ABORT JOB.
- CPY11 CALL MSG,(CPYB+1),(=C* NOT DECLARED NRANDOM.*)
- SA1 CDOP CHECK *NA* OPTION
- NZ X1,CPY9 IF NO ABORT
- CALL ABT
- CPYA DATA 0 PNT INDEX
- CPYB VFD 42/,18/ PROGRAM NAME
- VFD 42/,18/ FILE AND POSITION
- CPYD DATA 0 EOR INDICATION
- CRR SPACE 4,10
- ** CRR - CHECK RECORDS REPLACED.
- *
- * USES A - ALL.
- * X - ALL.
- * B - 2, 3, 6, 7.
- *
- * CALLS ABT, CFN, COB, C6S, MST, LOL, OCC, OIC, OSB, STB.
- *
- * MACROS CALL, SEARCH.
- CRR SUBR ENTRY/EXIT
- CALL STB,CRRC SET TITLE BUFFER
- SB6 B0+
- CALL STB,CRRD
- SB6 B1
- SX6 B0
- SA6 CRRA
- CRR1 SA1 P.PNT CHECK PROGRAM NAME TABLE
- SA2 L.PNT
- SA3 CRRA
- SB6 X2
- SB7 X3
- CRR2 EQ B6,B7,CRR3 IF END OF PNT
- SA4 X1+B7 CHECK PNT ENTRY
- SB7 B7+3
- ZR X4,CRR2 IF PROGRAM REPLACED
- SX6 B7
- SA6 A3
- SEARCH NRT,(A4+B1),(=77777777777777000000B)
- NZ X6,CRR1 IF FILE IN NO REPLACE TABLE
- SA1 CRRB INCREMENT ERROR COUNT
- SX6 X1+B1
- SA6 A1
- CALL COB CLEAR OUTPUT BUFFER
- SA1 CRRA OUTPUT RECORD, TYPE, AND FILE
- SA2 P.PNT
- SB6 X1-3
- SA1 B6+X2
- SA2 A1+B1
- MX0 42
- BX6 X0*X1
- BX7 X0*X2
- SA6 OUTPUTB+1
- SA3 X1+NAMA
- BX6 X3
- SA6 A6+B1
- SA7 A6+B1
- CALL LOL LIST ONE LINE
- EQ CRR1 LOOP TO END OF PNT
- * CHECK DELETE PROGRAM TABLE.
- CRR3 SB6 B0+ SET TITLE
- CALL STB,CRRF
- SB6 B1+
- CALL STB,CRRG
- SX6 B0
- SA6 CRRA
- * OUTPUT ERROR MESSAGE.
- SA1 CRRB
- BX6 X1
- SA6 CRRB+2
- ZR X1,CRR4 IF NO ERRORS
- CALL C6S,CRRB,CRRA
- CALL MSG,CRRA,(=C* RECORD(S) NOT REPLACED.*)
- SX6 B0
- SA6 CRRA
- SA6 CRRB
- CRR4 CALL COB CLEAR OUTPUT BUFFER
- SA1 P.DPT
- SA2 L.DPT
- SA3 CRRA
- SB6 X2
- SB7 X3
- SX0 7777B DELETE FLAG
- CRR5 EQ B6,B7,CRR7 IF END OF DPT
- SA4 X1+B7
- BX5 X0-X4 COMPARE WITH DELETE FLAG
- SB7 B7+2
- ZR X5,CRR5 IF PROGRAM DELETED
- MX5 -12 CHECK FOR -TYPE/*-
- LX4 12
- BX5 -X5*X4
- LX4 -12
- SX5 X5-1R**100B
- ZR X5,CRR5 IF -TYPE/*- ENTRY
- SA1 CRRB INCREMENT ERROR COUNT
- SX6 X1+B1
- SA6 A1
- SA5 A4+B1 SET DELETE ENTRY
- SA1 LIBP ISOLATE RECORD NAME
- BX6 -X1*X4
- MX0 -12 ISOLATE RECORD TYPE
- BX4 -X0*X4
- LX7 X5
- SA6 CRRE
- SA7 A6+B1
- SX6 B7
- SA6 A3
- SA1 =10H*DELETE
- BX7 X1
- SA7 OUTPUTB+1
- CALL CFN,(X4+OICD)
- CALL CFN,CRRE OUTPUT PROGRAM NAME
- SA1 CRRE CHECK FOR END OF DELETE
- SA2 A1+B1
- BX6 X1-X2
- ZR X6,CRR6 IF FIRST PROGRAM = LAST PROGRAM
- CALL CFN,(=1L-)
- SA2 CRRE+1 OUTPUT LIBRARY NAME
- CALL CFN,(X2+OICD)
- CALL CFN,(CRRE+1)
- CRR6 CALL OSB OUTPUT STRING BUFFER
- EQ CRR4 LOOP TO END OF DPT
- ** CHECK INSERT PROGRAM TABLE.
- CRR7 SA1 CRRB SAVE ERROR COUNT
- SA2 A1+B1
- IX6 X1+X2
- SA6 A2
- SX6 B0
- SA6 A1
- SA6 CRRA
- CRR8 SA1 P.IPT
- SA2 L.IPT
- SA3 CRRA
- SB6 X2
- SB7 X3
- CRR9 EQ B6,B7,CRR10 IF END OF INSERT PROGRAM TABLE
- SA4 X1+B7
- SB7 B7+4
- ZR X4,CRR9 IF PROGRAMS INSERTED
- SX6 B7
- SA6 A3
- SX6 X6-4
- SA6 CRRH
- CALL OIC,A6 OUTPUT INSERT DIRECIVE
- SA2 CRRB INCREMENT ERROR COUNT
- SX6 X2+B1
- SA6 A2
- EQ CRR8 LOOP TO END OF IPT
- ** CHECK COMMENT/DATE TABLE.
- CRR10 SA1 CRRB SAVE ERROR COUNT
- SA2 A1+B1
- IX6 X1+X2
- SA6 A2
- SX6 B0
- SA6 A1
- SA6 CRRA
- CRR11 SA1 P.CDT
- SA2 L.CDT
- SA3 CRRA
- SB6 X2
- SB7 X3
- CRR12 EQ B6,B7,CRR13 IF END OF COMMENT/DATE TABLE
- SA4 X1+B7 CHECK ENTRY
- SB7 B7+8
- ZR X4,CRR12 IF COMMENT PROCESSED
- SX6 B7
- SA6 A3
- CALL OCC,(B7-8) OUTPUT COMMENT DIRECTIVE
- SA2 CRRB
- SX6 X2+B1
- SA6 A2
- EQ CRR11 LOOP TO END OF CDT
- ** OUTPUT ERROR MESSAGE.
- CRR13 SA1 CRRB
- SA2 A1+B1
- IX6 X1+X2
- SA6 A1
- SA3 A2+B1
- IX3 X6+X3
- ZR X3,CRRX IF NO ERRORS
- ZR X6,CRR14 IF ALL DIRECTIVES PROCESSED
- SA1 TTYI
- ZR X1,CRRX IF TTY INPUT
- CALL C6S,CRRB,CRRA
- CALL MSG,CRRA,(=C* DIRECTIVE ERROR(S).*)
- CRR14 SA1 CDOP CHECK D OPTION
- NZ X1,CRRX IF NO ABORT
- CALL ABT ABORT JOB
- CRRA DATA 0 TABLE INDEX
- CRRB DATA 0 ERROR COUNT
- DATA 0
- DATA 0
- CRRC DATA C* ERROR DIRECTORY - RECORDS NOT REPLACED.*
- CRRD DATA C* RECORD TYPE FILE*
- CRRE VFD 42/,18/ DPT ENTRY - 42/PROG1,18/LIB1
- VFD 42/,18/ 42/PROG2,18/LIB2
- CRRF DATA C* ERROR DIRECTORY - DIRECTIVES NOT PERFORMED.*
- CRRG DATA C* *
- CRRH DATA 0 INSERT PROGRAM TABLE INDEX
- SPACE 4
- ** C6S - CONVERT 6 DIGITS WITH LEADING ZERO SUPPRESSION.
- *
- * ENTRY (B2) = ADDRESS OF RIGHT JUSTIFIED NUMBER.
- * (B3) = ADDRESS TO STORE RESULT.
- *
- * USES X - 0, 1, 2, 3, 4, 5, 6.
- * A - 1, 2, 3, 6.
- * B - 2, 7.
- C6S SUBR ENTRY/EXIT
- SA2 =0.1000000001P48
- SA3 =10.0P0
- SA4 =1H
- SB6 6
- SB5 1R0-1R
- SA1 B2
- SB2 18
- PX1 X1
- BX6 X4
- C6S1 DX4 X1*X2
- FX1 X1*X2
- SB7 X1
- LX6 54
- SB2 B2+B6
- FX5 X4*X3 CALCULATE REMAINDER DIGIT
- SX0 X5+B5
- IX6 X0+X6
- NZ B7,C6S1 IF NOT ENTIRE NUMBER
- LX6 X6,B2 POSITION NUMBER
- SA6 B3
- EQ C6SX RETURN
- SPACE 4
- ** DIS - DISPLAY MESSAGE.
- *
- * ENTRY (B2) = ADDRESS OF PROGRAM NAME.
- * (B3) = ADDRESS OF MESSAGE.
- *
- * USES A - 1, 2, 6, 7.
- * X - 0, 1, 2, 6, 7.
- DIS SUBR ENTRY/EXIT
- SA1 B2
- SA2 B3
- MX0 42
- BX6 X2
- BX7 X0*X1
- SA6 DISA
- SA7 A6+B1
- MESSAGE A6,1
- EQ DISX RETURN
- DISA BSS 2
- SPACE 4
- ** EPN - ENTER PROGRAM NAME IN NEW PROGRAM TABLE.
- *
- * ENTRY (B2) = ADDRESS OF PROGRAM NAME AND TYPE.
- *
- * USES A - 1, 6, 7.
- * X - 1, 6, 7.
- EPN SUBR ENTRY/EXIT
- SA1 B2
- BX6 X1
- SA6 NIND
- SA1 SC
- LX7 X1 SET RELATIVE SECTOR ADDRESS
- SA7 A6+B1
- EQ EPNX RETURN
- GUL SPACE 4,15
- ** GUL - GENERATE USER LIBRARY (*LIBGEN* CALL).
- *
- * SET UP CALLING PARAMETERS AND CALL *LIBGEN*
- * PROGRAM (OVERLAYING PRESENT *LIBEDIT* ROUTINE)
- * TO GENERATE USER LIBRARY.
- *
- * ENTRY (GULC) THRU (GULJ) SET UP FOR CALL.
- *
- * EXIT TO *LIBGEN*.
- *
- * MACROS MESSAGE, OVERLAY, RECALL, SETLOF.
- GUL SUBR ENTRY/EXIT
- SA1 CULB
- ZR X1,GULX IF NO *U* OPTION
- RECALL OUTPUT
- MESSAGE (=C* LIBGEN*),1
- RECALL S
- RECALL OLD
- RECALL NEW
- SA1 GULC MOVE PARAMETERS TO ARGR
- BX6 X1
- SA6 ARGR
- GUL2 ZR X6,GUL3 IF END OF MOVE
- SA1 A1+B1
- BX6 X1
- SA6 A6+1
- EQ GUL2 MOVE NEXT ARGUMENT
- GUL3 SX7 A6-ARGR
- SA2 FL
- SA7 ACTR SET NUMBER OF PARAMETERS
- LX2 30
- SA0 X2+
- SETLOF =0 CLEAR LIST OF FILES POINTER
- OVERLAY GULA,,SYSTEM
- PS
- GULA VFD 36/6LLIBGEN,24/0
- GULC VFD 42/0LF,18/1R=
- GULD VFD 42/0LZZZZZG2,18/0
- VFD 42/0LP,18/1R=
- GULF VFD 42/0LNEW,18/0
- VFD 42/0LN,18/1R=
- GULH VFD 42/0LULIB,18/0
- VFD 42/0LNX,18/1R=
- GULJ VFD 42/0L0,18/0
- CON 0 END OF ARGUMENTS FOR *LIBGEN*
- ILO SPACE 4,10
- ** ILO - INTERPRET LIST OPTIONS.
- *
- * ENTRY (A1) = ADDRESS OF OPTION WORD.
- * (X1) = LIST OPTIONS.
- *
- * EXIT ((A1)) = INTERPRETTED LIST OPTIONS.
- * (X1) = 0 IF NO ERROR.
- *
- * USES X - 0, 1, 2, 3, 4, 6.
- * A - 2, 6.
- ILO4 SA6 A1+ SET LIST OPTIONS
- ILO SUBR ENTRY/EXIT
- SX6 B0+ INITIALIZE INTERPRETTED LIST OPTIONS
- MX0 6
- ILO1 SA2 ILOA-1
- BX4 X0*X1
- ILO2 SA2 A2+B1
- ZR X2,ILO3 IF END OF OPTIONS
- BX2 X4-X2
- BX3 X0*X2
- NZ X3,ILO2 IF NO MATCH
- SX3 X2
- BX6 X3+X6
- BX1 -X0*X1
- ZR X1,ILO4 IF ALL OPTIONS PROCESSED
- LX1 6
- EQ ILO1 PROCESS NEXT OPTION
- ILO3 SX1 B1+ SET ERROR
- EQ ILOX RETURN
- ILOA CON 1LF+17B FULL
- CON 1LC+4B DIRECTIVES
- CON 1LM+2B SHORT
- CON 1LE+1B ERRORS
- CON 1LN+10B RECORDS WRITTEN
- CON 0
- LIT SPACE 4,15
- ** LIT - LIST IGNORE TABLE.
- *
- * EXIT (X6) = ERROR COUNT.
- *
- * USES A - 1, 2, 3, 6, 7.
- * X - 1, 2, 3, 6, 7.
- * B - 2.
- *
- * CALLS CFN, COB, LOL, OSB.
- *
- * MACROS CALL, WRITEC.
- LIT SUBR ENTRY/EXIT
- LIT1 SA1 P.PIT
- SA2 L.PIT
- SA3 LITA PIT INDEX
- BX6 X2-X3
- NZ X6,LIT2 IF NOT END OF TABLE
- SA1 LITB ERROR COUNT
- BX6 X1
- EQ LITX RETURN
- LIT2 IX1 X1+X3
- SA2 X1
- NZ X2,LIT4 IF ENTRY NOT PROCESSED
- LIT3 SA3 LITA ADVANCE PIT INDEX
- SX6 X3+3
- SA6 LITA
- EQ LIT1 LOOP
- * LIST UNPROCESSED ENTRY.
- LIT4 BX6 X2 COPY IPT ENTRY
- SA1 A2+B1
- SA6 LITC
- BX7 X1
- SA2 A1+B1
- SA7 A6+B1
- BX6 X2
- SA6 A7+B1
- SX1 1R*
- LX1 54
- ZR X7,LIT5 IF START OF IGNORE FOUND
- BX6 X6-X1
- AX6 18
- NZ X6,LIT6 IF NOT IGNORE ALL OF TYPE
- LIT5 BX7 X7-X1
- AX7 18
- ZR X7,LIT3 IF IGNORE TO END OF FILE
- LIT6 CALL COB CLEAR OUTPUT BUFFER
- WRITEC OUTPUT,(=C* *)
- SA1 =H/ *ERROR* DIRECTIVE CANNOT BE PERFORMED./
- SB2 4
- BX6 X1
- SA6 OUTPUTB
- LIT7 SA1 A1+B1
- SB2 B2-B1
- BX6 X1
- SA6 A6+B1
- NZ B2,LIT7 IF NOT 4 WORDS
- CALL LOL LIST ONE LINE
- CALL COB CLEAR OUTPUT BUFFER
- SA2 =5H*FILE LIST FILE NAME
- BX6 X2
- SA6 OUTPUTB+1
- CALL CFN,LITC OUTPUT FILE NAME
- CALL OSB OUTPUT STRING BUFFER
- SA2 =7H*IGNORE OUTPUT IGNORE CARD
- SA1 LITC+1
- BX6 X2
- SA6 OUTPUTB+1
- NZ X1,LIT8 IF IGNORE NOT STARTED
- CALL CFN,(=6LTEXT/,)
- EQ LIT9 OUTPUT PROGRAM NAME
- LIT8 CALL CFN,X1+OICD
- CALL CFN,LITC+1 OUTPUT PROGRAM NAME
- SA1 LITC+1 CHECK SINGLE IGNORE
- SA2 A1+B1
- BX6 X1-X2
- ZR X6,LIT10 IF FIRST PROGRAM = LAST PROGRAM
- LIT9 CALL CFN,(=1L-)
- SA2 LITC+2 OUTPUT LIBRARY NAME
- CALL CFN,X2+OICD
- CALL CFN,LITC+2
- LIT10 CALL OSB OUTPUT STRING BUFFER
- SA1 LITB ADVANCE ERROR COUNT
- SX6 X1+B1
- SA6 A1
- EQ LIT3 LOOP
- LITA CON 0 PIT INDEX
- LITB CON 0 ERROR COUNT
- LITC VFD 42/,18/ PIT ETRY - 42/FILE,18/
- VFD 42/,18/ 42/PROG1,18/LIB1
- VFD 42/,18/ 42/PROG2,18/LIB2
- LOL SPACE 4,20
- ** LOL - LIST ONE LINE.
- *
- * ENTRY (OUTPUTB) = LINE TO BE WRITTEN.
- * (LINE) = LINE NUMBER.
- * (BRFM) = 1 IF BRIEF MODE SET (NO TITLE).
- * (PAGE) = PAGE NUMBER.
- * (LL) = PAGE LINE LIMIT.
- * (PD) = PRINT DENSITY FORMAT CONTROL.
- * (PDFLG) = 1 IF FORMAT CONTROL NOT WRITTEN.
- *
- * EXIT LINE AND PAGE NUMBER UPDATED.
- *
- * USES A - 1, 2, 3, 6.
- * X - 0, 1, 2, 3, 6.
- * B - 2, 5, 6, 7.
- *
- * CALLS C6S.
- *
- * MACROS CALL, WRITEC, WRITEH.
- LOL SUBR ENTRY/EXIT
- SA1 LINE CHECK LINE NUMBER
- SX6 X1+B1
- SA6 A1
- SA3 A1+B1 GET LINE LIMIT
- ERRNZ LL-LINE-1 CODE DEPENDS ON CONSECUTIVE LOCATIONS
- IX6 X6-X3
- NG X6,LOL1 IF NOT END OF PAGE
- SX6 B0 RESET LINE COUNT
- SA6 A1
- SA3 TTYO
- NZ X3,LOL0 IF NOT TTY OUTPUT
- SA1 BRFM
- NZ X1,LOL1 IF BRIEF MODE SET
- WRITEH OUTPUT,TITA,TITAL TITLE LINE
- WRITEH OUTPUT,TITE,TITEL SUBTITLE
- WRITEC OUTPUT,(=C* *)
- EQ LOL1 CONTINUE
- LOL0 SA2 PAGE
- SX6 X2+B1
- SA6 A2
- CALL C6S,PAGE,LOLA
- SA1 TITD INSERT PAGE NUMBER
- LX6 36
- MX0 24
- BX1 X0*X1
- BX6 -X0*X6
- BX6 X6+X1
- SA6 A1
- SA3 PDFLG FLAG THAT FORMAT CONTROL WAS WRITTEN
- BX7 X7-X7
- SA7 A3
- WRITEW O,A3-B1,X3 CONDITIONALLY WRITE FORMAT EFFECTOR
- ERRNZ PDFLG-PD-1 CODE DEPENDS ON CONSECUTIVE LOCATIONS
- WRITEC OUTPUT,(=C*1*)
- WRITEH OUTPUT,TITA,TITE-TITA WRITE TITLE LINE
- WRITEC OUTPUT,(=C* *)
- WRITEH OUTPUT,TITE,TITF-TITE WRITE SUBTITLE LINE
- WRITEC OUTPUT,(=C* *)
- SX6 5 RESET LINE COUNT
- SA6 LINE
- LOL1 SX2 1R BLANK FILL LINE
- SB6 OUTPUTB
- SB7 OUTPUTB+DCBL+1
- SA1 B6
- MX0 54
- LOL2 BX6 X1
- SA6 A1
- EQ B6,B7,LOL4 IF END-OF-LINE
- SA1 B6
- SB6 B6+B1
- SB5 10
- LOL3 ZR B5,LOL2 IF END-OF-WORD
- LX0 6
- LX2 6
- BX6 -X0*X1
- SB5 B5-B1
- NZ X6,LOL3 IF CHARACTER .NE. 00
- BX1 X1+X2
- EQ LOL3 LOOP
- LOL4 WRITEH OUTPUT,OUTPUTB,DCBL+1
- EQ LOLX RETURN
- LOLA VFD 60/ PAGE NUMBER (DISPLAY CODE)
- MSG SPACE 4,10
- ** MSG - SEND DAYFILE MESSAGE.
- *
- * ENTRY (B2) = ADDRESS OF PROGRAM NAME.
- * (B3) = ADDRESS OF MESSAGE.
- *
- * USES A - 1, 2, 6.
- * X - 0, 1, 2, 3, 4, 6.
- *
- * MACROS MESSAGE.
- MSG SUBR ENTRY/EXIT
- MX0 42
- SA1 B3
- SA2 B2
- BX3 X0*X2
- BX1 -X0*X1
- BX6 X3+X1
- MX0 6
- SA6 B3
- SX4 1R
- LX0 24
- LX4 18
- BX1 X0*X6
- NZ X1,MSG2 IF NO BLANKS
- MSG1 IX6 X6+X4 BLANK FILL FILE NAME
- LX0 6
- LX4 6
- BX1 X0*X6
- ZR X1,MSG1
- SA6 B3
- MSG2 MESSAGE B3,,R SEND MESSAGE TO DAYFILE
- EQ MSGX RETURN
- IDT SPACE 4
- ** IDT - ISSUE INCORRECT DEVICE MESSAGE.
- *
- * ENTRY (A1) = FET ADDRESS + 1.
- * (X7) = 0.
- *
- * EXIT TO ABT.
- *
- * USES A - 1, 7.
- * B - 4.
- * X - 0, 1, 2, 3, 4, 6, 7.
- *
- * CALLS MSG=.
- IDT MX0 42
- SA1 A1-B1 READ FILE NAME
- MX3 26+10
- BX6 X0*X1
- MX2 6
- LX3 59 POSITION LEGAL CHARACTER MASK
- BX1 X1-X1
- MX0 -6
- IDT1 LX7 6
- BX7 X7+X1 ASSEMBLE FILE NAME
- LX6 6
- BX1 -X0*X6
- SB4 X1 FIND END OF FILE NAME
- LX4 B4,X3
- NG X4,IDT1 IF NOT END OF NAME
- LX7 6
- SX1 1R. ADD *.* TO FILE NAME
- BX7 X7+X1
- + LX7 6 LEFT JUSTIFY ASSEMBLY
- BX6 X2*X7
- ZR X6,* IF NOT LEFT JUSTIFIED
- SA7 IDTB
- MESSAGE IDTA
- CALL ABT
- IDTA DATA 30H UNKNOWN DEVICE TYPE -- LFN =
- IDTB CON 0
- SPACE 4
- ** OCC - OUTPUT COMMENT DIRECTIVE.
- *
- * ENTRY (B2) = INDEX IN COMMENT/DATE TABLE.
- * USES A - 1, 5, 6.
- * X - 0, 1, 5, 6, 7.
- * B - 4, 6, 7.
- *
- * CALLS CFN, OSB.
- *
- * MACROS CALL.
- OCC SUBR ENTRY/EXIT
- SA1 P.CDT
- SX6 X1+B2
- SA6 OCCA
- SA2 =1H
- BX6 X2
- SA6 OUTPUTB
- SA1 X1+B2 SET *DATE OR *COMMENT
- LX1 60-17
- SX7 B1
- BX6 X7*X1
- SA2 OCCB+X6
- BX6 X2
- SA6 A6+B1
- AX1 -17+60 OUTPUT LIBRARY NAME
- CALL CFN,(X1+OICD)
- SA1 OCCA OUTPUT PROGRAM NAME
- CALL CFN,X1
- CALL CFN,(=1L ) OUTPUT BLANK
- SA1 OCCA OUTPUT COMMENT
- SB6 X1
- MX0 54
- SB7 B6+8
- SA1 SBP SET STRING BUFFER POINTER
- SB4 X1
- OCC1 SB6 B6+B1 DISASSEMBLE COMMENT INTO STRING BUFFER
- EQ B6,B7,OCC3 IF END OF COMMENT
- SA5 B6
- SB5 B4+10
- OCC2 EQ B4,B5,OCC1 IF END OF WORD
- LX5 6
- BX6 -X0*X5
- SA6 B4
- SB4 B4+B1
- NZ X6,OCC2 IF NOT END OF COMMENT
- OCC3 SX6 B0 SET END OF BUFFER
- SA6 B4
- SX7 B4
- SA7 A1
- CALL OSB OUTPUT STRING BUFFER
- EQ OCCX RETURN
- OCCA VFD 60/ COMMENT ADDRESS
- OCCB DATA 10H*COMMENT
- DATA 10H*DATE
- SPACE 4
- ** ODP - OUTPUT DELETED PROGRAM.
- *
- * ENTRY (B2) = ADDRESS OF PROGRAM NAME.
- *
- * USES A - 1, 2, 6, 7.
- * X - 0, 1, 2, 3, 6, 7.
- * B - 2.
- *
- * CALLS COB, ORW.
- *
- * MACROS CALL.
- ODP SUBR ENTRY/EXIT
- CALL COB CLEAR OUTPUT BUFFER
- MX0 42
- SA1 B2 SET PROGRAM NAME
- SA2 X1+NAMA
- BX1 X0*X1
- SX3 1R) ADD *)* AT END OF NAME
- MX0 54
- + LX3 54
- LX0 54
- BX7 -X0*X1
- BX6 X1+X3
- NZ X7,*-1 LOOP FOR END OF NAME
- SA6 OUTPUTB+1
- LX7 X2
- SA7 A6+B1
- SB2 =9HDELETED-(
- CALL ORW,B2,OLD
- EQ ODPX RETURN
- OIC SPACE 4,15
- ODPL BSS 0
- SPACE 4
- ** OIC - OUTPUT INSERT DIRECTIVE.
- *
- * OUTPUT AN INSERT DIRECTIVE THAT CAN NOT BE FOLLOWED.
- *
- * ENTRY (B2) = ADDRESS OF INSERT PROGRAM TABLE INDEX.
- *
- * USES A - 1, 2, 3, 4, 5, 6, 7.
- * X - ALL.
- * B - 2, 5, 6, 7.
- *
- * CALLS CFN, LOL.
- *
- * MACROS CALL.
- OIC SUBR ENTRY/EXIT
- SA2 B2
- SA1 P.IPT
- SB6 X1
- SA4 B6+X2
- SA5 A4+B1
- BX6 X4
- LX7 X5
- SA6 OICA
- SA7 A6+B1
- SA4 A5+B1
- SA5 A4+B1
- BX6 X4
- LX7 X5
- SA6 A7+B1
- SB6 OICB *DIRECTIVE CAN NOT BE PERFORMED.*
- SB7 OICB+OICBL
- SB5 OUTPUTB
- SA7 A6+B1
- SB5 B6-B5
- + SA1 B6
- BX6 X1
- SA6 B6-B5
- SB6 B6+B1
- NE B6,B7,*-1
- CALL LOL LIST ONE LINE
- SA1 =10H
- BX6 X1
- SA6 OUTPUTB
- SA1 =10H*FILE
- BX6 X1
- SA6 A6+B1
- SB2 OICA+1 CONVERT FILE NAME
- CALL CFN,B2
- CALL OSB OUTPUT STRING BUFFER
- SA1 OICA CHECK FOR *REPLACE* *INSERT* OR *BEFORE*
- SA3 OICA+2
- BX7 X1-X3
- SA2 =10H*REPLACE
- SX6 B1
- BX3 X1
- LX1 60-17
- ZR X7,OIC1 IF *REPLACE*
- BX6 X6*X1
- SA2 OICC+X6
- MX0 6
- BX6 X0*X3
- NZ X6,OIC1 IF *INSERT* OR *BEFORE*
- SA2 =10H*ADD
- BX6 X2
- SA6 OUTPUTB+1
- CALL CFN,ADPB OUTPUT *LIB* PREFIX
- BX1 X3 CONVERT LIBRARY NAME
- AX1 42
- RJ CDD CONVERT LIBRARY NUMBER TO DISPLAY
- SB2 B2-B1 OUTPUT CONVERTED LIBRARY NUMBER
- MX6 1
- AX6 B2
- BX6 X6*X4
- SA6 OICE
- CALL CFN,OICE
- EQ OIC2
- OIC1 BX6 X2
- SA6 OUTPUTB+1
- AX1 -17+60 OUTPUT LIBRARY NAME
- CALL CFN,(X1+OICD)
- CALL CFN,OICA OUTPUT PROGRAM NAME
- OIC2 CALL CFN,(=1L,)
- SA1 OICA+2 OUTPUT FIRST PROGRAM NAME
- CALL CFN,(X1+OICD)
- CALL CFN,(OICA+2)
- SA1 OICA+2 OUTPUT LAST PROGRAM NAME
- SA2 A1+B1
- BX6 X1-X2
- ZR X6,OIC3 IF FIRST PROGRAM = LAST PROGRAM
- CALL CFN,(=1L-)
- SA2 OICA+3
- CALL CFN,(X2+OICD)
- CALL CFN,(OICA+3)
- OIC3 CALL OSB OUTPUT STRING BUFFER
- EQ OICX RETURN
- OICA VFD 42/,1/,17/ IPT ENTRY - 42/PROG1,1/BEFORE,17/LIB1
- VFD 42/,18/ 42/FILE,18/0
- VFD 42/,18/ 42/PROG2,18/LIB2
- VFD 42/,18/ 42/PROG3,18/LIB3
- OICB DATA H/ *ERROR* - *DIRECTIVE CAN NOT BE PERFORMED./
- OICBL EQU *-OICB
- OICC DATA 0H*INSERT
- DATA 0H*BEFORE
- OICD BSS 0
- .E ECHO ,RT=("RTMIC")
- .A IFC NE,/RT//
- DATA L.RT/.
- .A ELSE
- DATA 0
- .A ENDIF
- .E ENDD
- OICE BSS 1
- SPACE 4
- ** ORW - OUTPUT RECORDS WRITTEN ON FILE *NEW*.
- *
- * ENTRY (B2) = ADDRESS OF *INSERT*, *DELETED*, *REPLACED*,
- * OR * *.
- * (B3) = ADDRESS OF FILE NAME.
- *
- * USES A - 1, 2, 3, 6, 7.
- * X - 0, 1, 2, 3, 6, 7.
- * B - 2.
- *
- * CALLS LOL.
- ORW SUBR ENTRY/EXIT
- SA1 LIST
- SX2 10B+2B
- BX1 X2*X1
- ZR X1,ORWX IF LIST OPTION IS OFF
- SA2 B2 SET STATUS AND FILE NAME
- SX6 10B
- BX1 X6*X1
- NZ X1,ORW1 IF FULL LIST OPTION ON
- SA3 =1H
- BX6 X2-X3
- NZ X6,ORW1 IF COMMENT MESSAGE
- SA3 OUTPUTB+1 CHECK FOR RENAME
- MX0 60-12
- BX6 -X0*X3
- SX7 X6-2R*
- NZ X7,ORWX IF NO RENAME
- ORW1 SA3 B3
- BX6 X2
- MX0 42
- LX6 54
- BX7 X0*X3
- SA6 OUTPUTB
- SA7 OUTPUTB+3
- SA1 TTYO
- NZ X1,ORW3 IF NOT TTY OUTPUT
- BX6 X6-X6
- SB2 DCBL-5
- SA6 OUTPUTB+5
- ORW2 SA6 A6+B1 CLEAR COMMENT FIELD
- SB2 B2-B1
- NZ B2,ORW2 IF NOT END OF BUFFER
- ORW3 RJ LOL LIST ONE LINE
- EQ ORWX RETURN
- SPACE 4
- ** OSB - OUTPUT STRING BUFFER.
- *
- * ENTRY (OUTPUTB) = STRING BUFFER.
- *
- * USES X - 1, 6.
- * A - 1, 6.
- * B - 4, 5, 6, 7.
- *
- * CALLS LOL.
- *
- * MACROS CALL.
- OSB SUBR ENTRY/EXIT
- SX6 DSB RESET STRING BUFFER POINTER
- SA6 SBP
- SB6 OUTPUTB+2
- SB7 OUTPUTB+DCBL
- SA1 DSB
- SB4 10
- SX6 B0
- SB5 B4
- EQ OSB2
- OSB1 SA6 B6 STORE WORD
- SB6 B6+B1
- SB5 B4
- SX6 B0
- OSB2 ZR B5,OSB1 IF END OF WORD
- LX6 6
- BX6 X6+X1
- SA1 A1+B1
- SB5 B5-B1
- NZ X1,OSB2 IF NOT END OF STRING BUFFER
- SA1 A1-B1
- SX1 1R
- NZ B5,OSB2 IF NOT END OF WORD
- SA1 =10H
- SA6 B6
- BX6 X1
- OSB3 SB6 B6+B1 BLANK FILL WORKING STORAGE
- SA6 B6
- NE B6,B7,OSB3
- CALL LOL
- EQ OSBX RETURN
- OZR SPACE 4,15
- ** OZR - OUTPUT ZERO LENGTH RECORD.
- *
- * ENTRY (B2) = ADDRESS OF STATUS.
- * (B3) = ADDRESS OF FILE NAME.
- * (B4) = ADDRESS OF PROGRAM NAME.
- *
- * USES A - 1, 6.
- * X - 1, 2, 6.
- *
- * CALLS COB, LOL, ORW.
- *
- * MACROS CALL.
- OZR SUBR ENTRY/EXIT
- CALL COB CLEAR OUTPUT BUFFER
- SA1 B4
- BX6 X1 SET PROGRAM NAME
- SA6 OUTPUTB+1
- CALL ORW,B2,B3 OUTPUT RECORD WRITTEN
- CALL COB CLEAR OUTPUT BUFFER
- SA1 LIST CHECK LIST OPTION
- SX2 10B
- BX1 X2*X1
- ZR X1,OZR IF FULL LIST OPTION OFF
- CALL LOL LIST ONE LINE
- EQ OZRX RETURN
- SPACE 4
- ** RCF - READ ALL CORRECTION FILES.
- *
- * READ CORRECTION FILES, IGNORING RECORDS IN THE IGNORE TABLE.
- * MAKE ENTRYS IN THE PROGRAM NAME TABLE.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * X - 0, 1, 2, 3, 4, 6, 7.
- * B - 2, 3, 6, 7.
- *
- * CALLS CIT, CVD, DIS, SRT.
- *
- * MACROS ADDWRD, BKSP, CALL, OPEN, READCW, READW, REWIND, WRCW,
- * WRITECW.
- RCF11 WRITECW S,R FLUSH BUFFER
- REWIND X2,R
- SX7 1 INITIALIZE SECTOR COUNT
- SA7 SC
- RCF SUBR ENTRY/EXIT
- OPEN S,WRITE,R
- WRITECW S,* SET FILE STATUS
- SA3 S+4
- BX6 X6-X6
- AX3 18 EXTRACT PRU SIZE
- SA6 RCFA
- SX7 X3+
- SA7 S-1
- RCF1 SX6 B0 CLEAR PROGRAM TYPE
- SA6 RCFE
- SA1 P.FNT DO LOOP TO READ CORRECTION FILE
- SA2 L.FNT
- SA3 RCFA
- SB2 X2
- SB3 X3
- EQ B2,B3,RCF11 IF END OF TABLE
- SA4 X1+B3 READ FILE NAME
- MX0 42
- BX6 X4
- SA6 RCFC+1
- BX6 X0*X4
- SX7 17B SET NAME IN FET
- BX7 X6+X7
- SA6 RCFB
- SA7 LGO
- OPEN A7,READ,R
- SA1 LGO+1 CHECK VALID DEVICE
- RJ CVD
- ZR X7,IDT IF CONTROL WORD I/O NOT SUPPORTED
- READCW LGO,17B
- RCF2 SA1 SC
- BX7 X1 STORE RANDOM ADDRESS
- SA7 RCFC+2
- READW LGO,WSB,WSBL READ 1 SECTOR
- PL X1,RCF4 IF NOT EOF
- RCF3 BKSP LGO,R
- SA1 RCFA INCREMENT FILE INDEX
- SX6 X1+B1
- SA6 A1
- EQ RCF1 LOOP TO READ NEXT FILE
- RCF4 BX6 X1 SET EOR INDICATOR
- SA6 RCFD
- SB7 X1
- SB6 WSB
- EQ B6,B7,RCF2 IF 0-LENGTH RECORD
- * CHECK PROGRAM TYPE, CHECK IGNORE TABLE, AND MAKE
- * ENTRY INTO THE PROGRAM NAME TABLE.
- SA1 X2-LWP LWA+1 OF DATA TRANSFERED
- SX2 WSB FWA OF BUFFER
- RJ SRT SET RECORD TYPE
- SA6 RCFC
- CALL DIS,RCFC,(=H*READING *)
- * COPY REST OF RECORD.
- SA1 RCFD
- NZ X1,RCF6 IF EOR READ
- RCF5 WRCW S,WSB,WSBL
- READW LGO,WSB,WSBL
- ZR X1,RCF5 IF NOT EOR READ
- SA1 LGO-LWP LWA + 1 OF DATA TRANSFERED
- RCF6 WRCW S,WSB,X1-WSB,R
- CALL CIT,RCFB,RCFC
- SA1 RCFC GET RECORD TYPE
- NZ X6,RCF7 IF NOT IGNORED
- SB7 X1-ULRT
- ZR B7,RCF8 IF TYPE *ULIB*
- JP RCF2 READ NEXT RECORD
- RCF7 SX6 X1-ODRT
- ZR X6,RCF2 IF RECORD IS *OPLD*
- SA2 CULB
- ZR X2,RCF7.1 IF NOT *ULIB* MODE
- SX6 X1-ULRT
- ZR X6,RCF2 IF *ULIB* SKIP RECORD
- RCF7.1 ADDWRD PNT,RCFC
- SA1 RCFC CHECK PROGRAM TYPE
- SB7 X1-ULRT
- NZ B7,RCF2 IF NOT TYPE *ULIB*
- * COPY USER LIBRARY.
- RCF8 READW LGO,WSB,WSBL
- NG X1,RCF3 IF EOF
- SB6 WSB
- SB7 X1
- EQ B6,B7,RCF10 IF 0-LENGTH RECORD
- BX6 X1 SET EOR INDICATOR
- SA6 RCFD
- SA1 X2-LWP LWA+1 OF DATA TRANSFERED
- SX2 WSB
- RJ SRT SET RECORD TYPE
- SA6 RCFE
- SA1 RCFD
- NZ X1,RCF10 IF EOR
- RCF9 WRCW S,WSB,WSBL
- READW LGO,WSB,WSBL
- ZR X1,RCF9 IF NOT EOR
- RCF10 WRCW S,WSB,X1-WSB,R
- SA2 RCFE
- SX6 X2-ODRT
- NZ X6,RCF8 IF NOT OPLD
- EQ RCF2 READ NEXT RECORD
- RCFA DATA 0 INDEX IN FNT
- RCFB VFD 42/,18/ CURRENT FILE NAME
- RCFC VFD 42/,18/ 42/PROGRAM,18/TYPE
- VFD 42/,18/ 42/FILE,18/ADDRESS
- VFD 60/ 60/POSITION
- RCFD DATA 0 EOR INDICATOR
- RCFE DATA 0 USER LIBRARY RECORD NAME
- RFN SPACE 4,10
- ** RFN - REPLACE FILE NAME.
- *
- * ENTRY (A1) = ADDRESS OF ENTRY IN LIST OF FILES.
- * (X1) = CONTENTS OF ENTRY IN LIST OF FILES.
- * (X6) = NEW FILE NAME.
- *
- * EXIT FILE NAME CHANGED.
- *
- * USES A - 3, 6.
- * X - 0, 1, 2, 3, 6.
- RFN SUBR ENTRY/EXIT
- MX0 -18
- BX1 -X0*X1 EXTRACT ADDRESS OF FET
- SA3 X1 READ FET+0
- BX2 X0*X6
- SX6 1R0
- LX6 -6
- BX6 X6-X2
- ZR X6,RFN1 IF FILE NAME = *0*
- BX6 X2
- ZR X6,RFN1 IF NO NEW FILE NAME
- BX3 -X0*X3
- BX6 X3+X6
- RFN1 SA6 A3
- BX6 X0*X6
- BX6 X6+X1
- SA6 A1
- EQ RFNX RETURN
- RNP SPACE 4,10
- ** RNP - RENAME PROGRAM.
- * ENTRY (B2) = ADDRESS OF PROGRAM NAME.
- * EXIT (X6) = NEW PROGRAM NAME AND TYPE.
- *
- * USES A - 1, 2, 3, 6.
- * X - 0, 1, 2, 3, 6.
- * B - 2, 3, 4.
- *
- * MACROS MESSAGE, SEARCH.
- RNP SUBR ENTRY/EXIT
- SX6 B2 SAVE PROGRAM NAME ADDRESS
- MX0 42
- SA6 RNPA
- SEARCH RNT,X6
- SA1 RNPA
- SB2 X6
- SA2 X1
- BX6 X2
- ZR B2,RNPX IF NO RENAME
- SA2 RNPA CHECK RECORD TYPE
- SA3 X2
- SB3 X3
- ERRNZ TXRT CODE ASSUMES VALUE
- SB4 B3+TXRT-PRRT CHECK FOR TYPE *PROC*
- ZR B3,RNP1 IF TYPE *TEXT*
- NZ B4,RNP2 IF NOT TYPE *PROC*
- RNP1 MESSAGE (=C* RENAME NOT ALLOWED FOR PROC OR TEXT RECORD.*)
- EQ RNPX RETURN
- RNP2 SA2 B2+B1
- BX6 X0*X2
- SX3 2R*
- BX6 X6+X3
- SA6 OUTPUTB+1
- BX6 X2
- SA6 X1
- EQ RNPX RETURN
- RNPA DATA 0 ADDRESS OF PROGRAM NAME
- SPACE 4
- ** RWF - REWIND ALL FILES.
- *
- * REWIND ALL RANDOM FILES ALONG WITH THE FILES IN THE RFT.
- *
- * USES X - 0, 1, 2, 3, 6.
- * A - 1, 2, 3, 6.
- * B - 6, 7.
- *
- * MACROS EVICT, REWIND.
- RWF SUBR ENTRY/EXIT
- EVICT S,R
- SA1 P.FNT
- SA2 L.FNT
- SB6 X1
- SB7 X2+B6
- RWF1 EQ B6,B7,RWF2 IF END OF TABLE
- SA1 B6 CHECK IF FILE IS RANDOM
- MX0 42
- SX6 3
- BX2 -X0*X1
- BX1 X0*X1
- SB6 B6+B1
- BX6 X6+X1
- NZ X2,RWF1 LOOP IF FILE IS NON-RANDOM
- SA6 LGO
- REWIND A6,R
- EQ RWF1
- RWF2 SA1 P.RFT REWIND FILES IN THE REWIND FILE TABLE
- SA2 L.RFT
- SB6 X1
- SB7 X2+B6
- RWF3 EQ B6,B7,RWF4 IF END OF TABLE
- SA1 B6
- SX6 3
- SB6 B6+B1
- BX6 X6+X1
- SA6 LGO
- REWIND A6,R
- EQ RWF3 LOOP
- RWF4 SA1 CREW CHECK FOR NO REWIND OPTION
- ZR X1,RWF5 IF NO REWIND
- SX1 B1
- RWF5 SX6 B1
- BX6 X6-X1
- SA2 CVFY
- SA3 CCPY
- BX6 X6+X2
- BX6 X6+X3
- ZR X6,RWFX IF V AND C NOT SET AND R SET
- REWIND OLD,R
- REWIND NEW,R
- EQ RWFX RETURN
- SPACE 4
- ** RWS - REWIND SEQUENTIAL FILES.
- *
- * REWIND SEQUENTIAL CORRECTION FILES THAT HAVE REWIND SELECTED.
- *
- * USES X - 0, 1, 2, 3, 6, 7.
- * A - 1, 2, 3, 6.
- * B - 6, 7.
- *
- * MACROS REWIND, SEARCH.
- RWS SUBR ENTRY/EXIT
- SX6 B0
- SA6 RWSA
- RWS1 SA1 P.FNT
- SA2 L.FNT
- SA3 RWSA
- SB6 X1
- SB7 B6+X2
- SB6 B6+X3
- SX6 X3+B1
- EQ B6,B7,RWSX IF END OF FNT
- SA6 A3
- SA1 B6 READ FILE NAME
- MX0 42
- BX6 -X0*X1
- ZR X6,RWS1 IF FILE IS RANDOM
- SEARCH RFT,B6,(=77777777777777000000B)
- ZR X6,RWS1 IF FILE IS NOT IN RFT
- SA1 P.FNT REWIND FILE
- SA3 RWSA
- IX2 X1+X3
- MX0 42
- SA2 X2-1
- BX6 X0*X2
- SX7 B1
- IX6 X6+X7
- SA6 A2
- SA6 LGO
- REWIND A6,R
- EQ RWS1
- RWSA DATA 0 FNT INDEX
- SPACE 4
- ** SMT - SEARCH MANAGED TABLE.
- *
- * ENTRY (B2) = ADDRESS OF TABLE POINTER.
- * (B3) = ADDRESS OF ENTRY.
- * (B4) = ADDRESS OF MASK.
- * (B5) = INDEX INTO TABLE.
- * EXIT (B6) = ADDRESS OF ADDRESS OF ENTRY IF FOUND.
- * (B6) = ADDRESS OF 0 IF NOT FOUND.
- * (X6) = ADDRESS OF ENTRY IF FOUND
- * (X6) = 0 IF NOT FOUND
- *
- * USES A - 1, 2, 3, 4, 5, 6.
- * X - 1, 2, 3, 4, 5, 6.
- * B - 2, 3, 7.
- SMT SUBR ENTRY/EXIT
- SA1 B2 SET TABLE POINTER
- SA2 A1+B1 SET TABLE LENGTH
- SA3 A2+B1 SET NUMBER OF WORDS/ENTRY
- SA4 B3 (X4) = ENTRY
- SB2 X1 (B2) = FWA TABLE
- SB7 X2+B2 (B7) = LWA TABLE
- SB3 X3 (B3) = WORDS/ENTRY
- SA5 B4 (X5) = MASK
- SMT1 EQ B2,B7,SMT2 IF END OF TABLE
- SA1 B2+B5
- BX6 X4-X1
- BX6 X5*X6
- SB2 B2+B3
- NZ X6,SMT1 IF NOT FOUND
- SX6 B2-B3 SET ENTRY ADDRESS
- SA6 B6
- EQ SMTX RETURN
- SMT2 SX6 B0 SET NOT FOUND
- SA6 B6
- EQ SMTX RETURN
- SMTA VFD 60/0
- SPACE 4
- ** STB - SET TITLE BUFFER.
- *
- * ENTRY (B2) = ADDRESS OF TITLE.
- * (B6) = 0 IF TITLE.
- * = 1 IF SUBTITLE.
- *
- * USES A - 1, 2, 6.
- * X - 0, 1, 2, 6.
- * B - 2, 6, 7.
- STB SUBR ENTRY/EXIT
- NZ B6,STB0 IF SUBTITLE
- SB6 TITA
- SB7 TITB
- EQ STB1 SET TITLE BUFFER
- STB0 SB6 TITE
- SB7 TITF
- STB1 SX1 1R
- MX0 54
- SX6 99999 FORCE PAGE EJECT
- SA6 LINE
- SA2 B2 COPY TITLE OR SUBTITLE
- BX6 X2
- BX7 -X0*X2
- SB2 B2+B1
- ZR X7,STB2 IF END OF TITLE
- SA6 B6
- SB6 B6+B1
- NE B6,B7,STB1 IF NOT END OF TITLE BUFFER
- EQ STBX RETURN
- * ADD TRAILING BLANKS.
- STB2 BX6 X6+X1
- LX1 6
- LX0 6
- BX7 -X0*X2
- ZR X7,STB2 LOOP
- SA6 B6
- SA1 =1H BLANK FILL REMAINING WORDS
- BX6 X1
- SB6 B6+B1
- STB3 EQ B6,B7,STBX IF END OF BUFFER
- SA6 B6
- SB6 B6+B1
- EQ STB3
- SPACE 4
- ** SUL - SKIP USER LIBRARY.
- *
- * ENTRY (B2) = ADDRESS OF CURRENT PROGRAM TYPE.
- * (B3) = ADDRESS TO RETURN EOR INDICATOR.
- *
- * USES A - 1, 2, 6, 7.
- * X - 1, 2, 5, 6, 7.
- * B - 6, 7.
- *
- * CALLS SRT.
- *
- * MACROS READW.
- SUL SUBR ENTRY/EXIT
- SA1 B2 CHECK IF USER LIBRARY
- SX7 B3
- SX6 X1-ULRT
- SA7 SULA
- NZ X6,SUL4 IF NOT USER LIBRARY
- SUL1 READW P,WSA,WSAL
- NG X1,SUL5 IF EOF
- SB6 WSA
- SB7 X1
- EQ B6,B7,SUL1 IF 0-LENGTH RECORD
- BX5 X1
- SA1 X2-LWP LWA+1 OF DATA TRANSFERED
- SX2 WSA
- RJ SRT SET RECORD TYPE
- SA6 SULB
- SA1 SULA
- BX7 X5 STORE EOR INDICATOR
- SA7 X1
- NZ X5,SUL3 IF EOR ON PREVIOUS READ
- SUL2 READW OLD,WSA,WSAL
- SUL3 ZR X1,SUL2 IF NOT EOR
- SA2 SULB
- SB7 X2-ODRT
- NZ B7,SUL1 LOOP TO END OF USER LIBRARY
- SUL4 READW P,WSA,WSAL
- SUL5 SA2 SULA STORE EOR INDICATOR
- BX6 X1
- SA6 X2
- EQ SULX RETURN
- SULA DATA 0 ADDRESS TO RETURN EOR INDICATOR
- SULB DATA 0 PROGRAM NAME
- SUM SPACE 4,10
- ** SUM - SET *ULIB* MODE.
- *
- * ENTRY (CULB) = *ULIB* MODE FLAG.
- *
- * EXIT ROUTINE PRESET FOR CALLING *LIBGEN*.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * X - 0, 1, 2, 3, 4, 6, 7.
- SUM SUBR ENTRY/EXIT
- SA4 CULB
- ZR X4,SUMX IF *U* NOT SPECIFIED
- MX0 42
- SA1 CCPY
- ZR X1,SUM1 IF NO RECOPY
- SA2 NEW
- BX6 X0*X2
- SA6 GULD SET F=NEW
- SA2 OLD
- BX6 X0*X2
- SA6 GULF SET P=OLD
- EQ SUM2 SET N=CULB
- SUM1 SA2 SUMA
- SA3 NEW
- BX6 X2*X0
- BX7 X0*X3
- BX3 -X0*X3
- BX6 X6+X3
- SA6 A3+ SET NEW FILE NAME
- SA7 GULF SET P=NEW
- SUM2 BX6 X4*X0
- SA6 GULH SET N=CULB
- EQ SUMX RETURN
- SUMA VFD 42/7LZZZZZG2,18/0
- SUM SPACE 4,10
- ** VFY - CALL VFYLIB TO VERIFY *OLD* AND *NEW*.
- *
- * ENTRY (CVFY) = 1 VERIFY REQUESTED.
- *
- * EXIT TO *VFYLIB*.
- *
- * MACROS MESSAGE, OVERLAY, RECALL, SETLOF.
- VFY SUBR ENTRY/EXIT
- SA1 CVFY
- ZR X1,VFY IF NO VERIFY
- RECALL OUTPUT WAIT FOR END OF OUTPUT
- MESSAGE (=C* VFYLIB*),1
- RECALL S
- RECALL OLD
- RECALL NEW
- SA1 OLD SET *VFYLIB* PARAMETERS
- MX0 42
- BX6 X0*X1
- SA6 2
- SA1 NEW
- BX6 X0*X1
- SA6 A6+B1
- SA1 OUTPUT
- BX6 X0*X1
- SA6 A6+B1
- SX6 3 SET PARAMETER COUNT
- SA6 ACTR
- SA2 FL
- LX2 30
- SA0 X2 SET (A0) = FL FOR *VFYLIB*
- SETLOF =0 CLEAR LIST OF FILES POINTER
- OVERLAY VFYA,,SYSTEM
- PS 0
- VFYA CON 0LVFYLIB
- SPACE 4,15
- ** WPD - WRITE PROGRAM DIRECTORY.
- *
- * ENTRY (X1) = OLD FILE EOI STATUS INDICATOR.
- * (B2) = ADDRESS OF OPL DIRECTORY NAME.
- *
- * USES A - 1, 2, 5, 6, 7.
- * X - 0, 1, 2, 5, 6, 7.
- * B - 2, 6, 7.
- *
- * CALLS CCM, EPN, ORW, OZR.
- *
- * MACROS ADDWRD, CALL, FILINFO, WRCW, WRITE,
- * WRITECW, WRITEF, WRITER, WRITEW.
- WPD SUBR ENTRY/EXIT
- SA5 NPLN
- NZ X5,WPD1 IF BUILD
- SA5 FLST+/FLST/NEW SET UP *FILINFO* BLOCK
- MX0 42
- BX5 X0*X5
- SX6 50001B
- BX6 X5+X6
- SA6 WPDD
- FILINFO WPDD
- SA2 WPDD+1 *FILINFO* STATUS WORD
- SA5 B2
- LX2 59-24
- NG X2,WPD0 IF NEW FILE IS ON MAGNETIC TAPE
- SX6 X5-ODRT
- ZR X6,WPD1 IF LAST RECORD TYPE *OPLD*
- WPD0 SB7 B0
- SX6 X1+2 CHECK FOR EOI ON OLD FILE
- MX7 4
- BX5 X5-X5 CLEAR DIRECTORY TEXT
- ZR X6,WPD1 IF EOI ON OLD FILE
- LX7 4+48
- SA7 WDAA+1 SET LEVEL 17 EOR
- WRCW N,B0,B7
- SX7 0
- SA7 WDAA+1 RESET CONTROL WORD
- CALL OZR,(=1H ),OLD,(=7H**EOF**)
- WPD1 WRITECW N,R
- ZR X5,WPD IF NO DIRECTORY
- MX0 42
- BX6 X0*X5 STORE NAME IN 7700 TABLE
- SA6 WPDA+1
- SX7 ODRT
- BX7 X6+X7
- SB2 WPDC
- SA7 B2
- SA1 DATE.
- BX6 X1
- SA6 A6+B1
- CALL EPN,B2
- ADDWRD NPT,NIND
- SA1 L.NPT SET 7000 TABLE LENGTH
- MX6 3
- BX6 X6+X1
- SA6 WPDB
- WRITE N,*
- CALL CCM,WPDA,WPDC
- SB6 X6 WRITE 7000 TABLE
- SB7 WPDB+1
- WRITEW NEW,B6,B7-B6
- SA1 P.NPT
- SA2 L.NPT
- WRITEW NEW,X1,X2
- WRITER NEW
- WRITEF X2
- CALL ORW,(=5HADDED),(=5H*****)
- CALL OZR,(=1H ),OLD,(=7H**EOF**)
- EQ WPDX RETURN
- WPDA DATA 77000016000000000000B
- BSSZ 16B
- WPDB DATA 70000000000000000000B
- WPDC VFD 42/,18/ 42/PROGRAM,18/TYPE
- BSS 1
- WPDD BSS 5 *FILINFO* PARAMETER BLOCK
- SPACE 4
- TITLE BUFFERS.
- ** DATA AND FILE ENVIRONMENT TABLES.
- * INDEX TAGS FOR WORDS PRECEEDING EACH FET.
- LWP EQU 3 LWA+1 OF DATA TRANSFERED.
- WRB EQU 2 WORDS REMAINING IN BLOCK.
- ERF EQU 1 EOR FLAG.
- CW CON 1 CONTROL WORD READ FLAG
- SC CON 1 SECTOR COUNT
- CON 0 LWA+1 OF DATA TRANSFERED
- CON -0 WORDS REMAINING IN BLOCK (OLD)
- CON 0 EOR FLAG
- P BSS 0
- OLD FILEB OLDB,OLDL,(FET=10),(WSA=WSA,WSAL)
- ORG P+11B
- VFD 36/,6/ODEBL,18/PODEB POINTER TO *OD* EXT. BUFFER
- ORG P+10
- CON 0 LWA+1 OF DATA TRANSFERED
- CON -0 WORDS REMAINING IN BLOCK (NEW)
- CON 0 EOR FLAG
- N BSS 0
- NEW RFILEB NEWB,NEWL,(FET=10)
- ORG N+11B
- VFD 36/,6/ODEBL,18/NODEB POINTER TO *OD* EXT. BUFFER
- ORG N+10
- CON 0 LWA+1 OF DATA TRANSFERED
- CON -0
- CON 0
- S BSS 0
- ZZZZZG1 RFILEB SBUF,SBUFL
- CON 0 LWA+1 OF DATA TRANSFERED
- CON -0
- CON 0
- LGO RFILEB LGOB,LGOL,(WSA=WSB,WSBL)
- O BSS 0
- OUTPUT FILEC OUTB,OUTL,(WSA=OUTPUTB,DCBL+1),(FET=10)
- I BSS 0
- INPUT FILEC INPB,INPL,(WSA=DCB,DCBL),(FET=10)
- TTYOUT BSS 0
- ZZZZZG0 FILEC TTYB,TTYL,(FET=10)
- * OPTICAL DISK EXTENSION BUFFERS.
- PODEB BSSZ ODEBL *OLD*
- NODEB BSSZ ODEBL *NEW*
- * FILE LIST.
- FLST CON FLSTL
- LOC 1
- QUAL FLST
- TTYOUT VFD 42/0LZZZZZG0,18///TTYOUT
- INPUT VFD 42/0LINPUT,18///INPUT
- OUTPUT VFD 42/0LOUTPUT,18///OUTPUT
- OLD VFD 42/0LOLD,18///OLD
- NEW VFD 42/0LNEW,18///NEW
- LGO VFD 42/0LLGO,18///LGO
- QUAL *
- LOC *O
- CON 0
- FLSTL EQU *-FLST
- DATE. DATA 0 CURRENT DATE
- LGO. DATA 0LLGO CORRECTION FILE NAME
- LIST VFD 56/0 LIST OPTIONS
- VFD 1/1 FULL LIST
- VFD 1/1 LIST DIRECTIVES
- VFD 1/1 LIST MODIFICATIONS MADE
- VFD 1/1 LIST ERRORS
- BRFM DATA 0 BRIEF MODE FLAG
- CADD DATA 0 NO INSERT AT EOF FLAG
- CREW DATA 0 NO REWIND FLAG
- CVFY DATA 0 VERIFY FLAG
- CCPY DATA 0 COPY FLAG
- CDOP DATA 0 IGNORE ERROR FLAG
- CZOP DATA 0 *Z* OPTION FLAG
- CULB DATA 0 USER LIBRARY OPTION
- FL DATA 0 FIELD LENGTH
- TTYI DATA 1 NON-TTY INPUT FLAG
- TTYO DATA 1 NON-TTY OUTPUT FLAG
- SBP VFD 60/DSB STRING BUFFER POINTER
- LINE CON 99999 LINE COUNT
- LL CON 0 PAGE LINE LIMIT
- PD CON 0 PRINT DENSITY FORMAT CONTROL
- PDFLG CON 1 FORMAT CONTROL NOT WRITTEN FLAG
- PAGE DATA 0 PAGE NUMBER COUNT
- NIND VFD 42/,18/ 42/PROGRAM,18/TYPE
- CON 0 RANDOM ADDRESS
- NPLN DATA 0 NEW PROGRAM LIBRARY NAME
- TITA DATA H* LIBEDIT DIRECTIVES. *
- DATA H* *
- TITAL EQU *-TITA
- TITB DATA H* 01/20/69.*
- TITC DATA H* 00.00.00.*
- DATA H* *
- TITD DATA H*PAGE *
- TITE DATA H* *
- DATA H* *
- DATA H* *
- TITEL EQU *-TITE
- TITF BSS 0
- SPACE 4
- ** TABLE POINTERS.
- TABLE BSS 0
- TABLE CDT,8 COMMENT/DATE TABLE
- TABLE DPT,2 DELETE PROGRAM TABLE
- TABLE FNT FILE NAME TABLE
- TABLE IDT,2 IMPLIED DELETE TABLE
- TABLE IPT,4 INSERT PROGRAM TABLE
- TABLE NPT,2,40B NEW PROGRAM TABLE
- TABLE NRT NO REPLACE TABLE
- TABLE PIT,3 PROGRAM IGNORE TABLE
- TABLE PNT,3,40B PROGRAM NAME TABLE
- TABLE RFT REWIND FILE TABLE
- TABLE RNT,2 RENAME TABLE
- TABLE BUF UNUSED STORAGE TABLE
- RDA SPACE 4
- ** RDA - READ DATA.
- *
- * PROCESSES CALLS TO READ WORDS (RDW=).
- * DEBLOCKS DATA IF CONTROL WORD READS.
- *
- * ENTRY (X2) = FET ADDRESS.
- * (B6) = FWA OF WORKING STORAGE BUFFER.
- * (B7) = LENGTH OF TRANSFER REQUESTED.
- *
- * EXIT (X1) = STATUS RETURNED FROM RDW=.
- * (X2-LWP) = LWA+1 OF DATA TRANSFERED.
- * (B6) = LWA+1 OF DATA TRANSFERED.
- *
- * USES A - 1, 3, 6, 7.
- * X - 1, 3, 4, 6, 7.
- * B - 5, 6, 7.
- *
- * CALLS RDW=.
- RDA5 SX6 B5-B7 UPDATE WORDS REMAINING
- SA6 A1
- RDA6 RJ RDW= READ WORDS
- RDA7 SX6 B6 LWA+1 OF DATA TRANSFERED
- SA6 X2-LWP
- RDA SUBR ENTRY/EXIT
- SA1 CW CHECK IF CONTROL WORDS LEGAL
- ZR X1,RDA6 IF CONTROL WORD READS NOT LEGAL
- RDA1 SA1 X2-WRB GET NUMBER OF WORDS BEFORE CONTROL WORD
- SB5 X1+
- PL X1,RDA2 IF NOT FIRST READ
- SX7 B7+ SET WORDS NEEDED
- SA7 RDAA
- JP RDA4
- RDA2 GE B5,B7,RDA5 IF ENOUGH DATA TO FILL BUFFER
- SA3 X2-ERF CHECK EOR FLAG
- PL X3,RDA3 IF NOT EOR ON FILE
- MX6 1 SET NEW READ FLAG
- SB7 B5+B1 SET WORDS TO READ
- SA6 A3
- SA6 A1
- RJ RDW= READ WORDS
- SX1 B6-B1 SET EOR INDICATION
- SB6 B6-B1 BACK UP LWA TO ALLOW FOR CONTROL WORD
- JP RDA7 RETURN
- RDA3 SX6 B7-B5 SAVE ADDITIONAL WORDS NEEDED
- SA6 RDAA
- SB7 B5+B1 SET WORDS TO TRANSFER
- RJ RDW= READ WORDS
- SB6 B6-1 BACK UP OVER LAST CONTROL WORD
- RDA4 SB7 B1 READ CONTROL WORD
- RJ RDW=
- NG X1,RDA7 IF EOF/EOI
- SB6 B6-B1 BACK UP WORKING BUFFER
- SA1 B6 CONTROL WORD
- SX7 5
- SX4 X1+4 ROUND UP
- AX1 36 EXTRACT BLOCK SIZE
- SX3 X1
- IX7 X4/X7 WORDS IN BLOCK
- IX6 X7-X3 SAVE EOR FLAG
- SA7 X2-WRB WORD COUNT
- SA6 X2-ERF EOR FLAG
- SA1 RDAA RESET WORDS NEEDED
- SB7 X1
- JP RDA1 LOOP
- RDAA CON 0
- WDA SPACE 4
- ** WDA - WRITE DATA WITH CONTROL WORDS.
- *
- * ENTRY (B6) = FWA OF WORKING STORAGE.
- * (B7) = WORD COUNT.
- * (X2) = FET ADDRESS.
- *
- * EXIT (B7) = 0 IF FULL PRU WRITTEN.
- *
- * USES A - 1, 3, 4, 5, 6, 7.
- * B - 4, 6, 7.
- * X - 1, 3, 4, 5, 6, 7.
- *
- * MACROS WRITER, WRITEW.
- WDA3 SA3 SC
- SA1 X2-1
- SX7 B1+ UPDATE SECTOR COUNT
- IX7 X3+X7
- SB4 X1
- SA7 A3 STORE RANDOM ADDRESS
- BX6 X1
- ZR B7,WDA2 IF ZERO LENGTH RECORD
- SX3 5
- SX7 B7-B4
- PL X7,WDA4 IF \ ONE PRU
- SX1 B7
- WDA4 IX4 X1*X3 FORM PRU BYTE COUNT
- SA7 WDAA
- LX6 36 POSITION BLOCK SIZE
- SA5 X1+B6
- BX6 X6+X4 FORM HEADER CONTROL WORD
- SX7 B0
- SA6 B6-B1
- SA7 A5 STORE TRAILER CONTROL WORD
- WRITEW X2,A6,X1+2
- SB6 A5 SET ADDRESS OF NEXT BLOCK
- SA3 WDAA
- BX6 X5 RESTORE CELL DESTROYED BY CONTROL WORD
- SB7 X3
- SA6 A5
- GE B7,B1,WDA3 IF AT LEAST ONE MORE WORD IN BUFFER
- WDA SUBR ENTRY/EXIT
- SA4 X2-2
- NG X4,WDA3 IF CONTROL WORD WRITE ENABLED
- ZR B7,WDA1 IF ZERO LENGTH RECORD
- WRITEW X2,B6,B7
- SB7 B0+
- JP WDA
- WDA1 WRITER X2,R FLUSH BUFFER
- SB7 1
- JP WDA
- WDA2 LX6 36 POSITION BLOCK SIZE
- SA6 WDAA
- WRITEW X2,A6,2 WRITE ZERO LENGTH RECORD
- SB7 1
- JP WDA
- WDAA CON 0
- CON 0
- RCW SPACE 4
- ** RCW - RESTORE CONTROL WORD WRITE.
- *
- * ENTRY NONE.
- *
- * EXIT NONE.
- *
- * USES A - 1, 6, 7.
- * B - NONE.
- * X - 1, 6, 7.
- *
- * MACROS RECALL, WRITECW, WRITER.
- RCW SUBR ENTRY/EXIT
- RECALL N
- SA1 N+2 CHECK BUFFER EMPTY
- SA3 A1+B1
- IX3 X3-X1
- ZR X3,RCW1 IF BUFFER EMPTY
- WRITER X2,R FLUSH BUFFER
- RCW1 WRITECW X2,* SET FILE STATUS
- SA1 N+6
- MX7 60
- AX1 30
- SA7 N-2 ENABLE CONTROL WORD WRITE
- BX6 X1
- SA6 SC RESET SECTOR COUNT
- EQ RCWX RETURN
- CVD SPACE 4
- ** CVD - CHECK DEVICE TYPE.
- *
- * ENTRY (X1) = (FET+1).
- *
- * EXIT (X7) = 0 IF CONTROL WORD READ/WRITE NOT SUPPORTED ON
- * DEVICE.
- *
- * USES X - 0,1,2,6,7.
- * A - 2.
- * B - NONE.
- *
- * CALLS NONE.
- CVD2 LX1 12 CHECK *TT*
- BX6 -X0*X1
- SX7 X6-2RTT
- CVD SUBR ENTRY/EXIT
- MX0 -12
- PL X1,CVD2 IF ALLOCATABLE
- LX1 12
- SA2 CVDA SEARCH DEVICE TABLE
- SX7 0 ASSUME NO FIND
- CVD1 ZR X2,CVDX IF NOT FOUND
- BX6 X1-X2
- AX2 12
- BX6 X2*X6
- SA2 A2+B1
- NZ X6,CVD1 IF NOT MATCH
- SX7 1 INDICATE CONTROL WORD POSSIBLE
- EQ CVDX RETURN
- CVDA VFD 36/,12/7703B,12/4002B
- VFD 36/,12/7703B,12/4102B
- VFD 36/,12/7777B,12/2RMT+4000B
- VFD 36/,12/7777B,12/2RNT+4000B
- VFD 36/,12/7777B,12/2RCT+4000B
- VFD 36/,12/7777B,12/2RAT+4000B
- CON 0
- SPACE 4,10
- ** COMMON DECKS.
- *CALL COMCCDD
- WRIF$ EQU 1 SELECT *REISSUE CURRENT WRITE*
- *CALL COMCCIO
- *CALL COMCCPM
- *CALL COMCCPT
- *CALL COMCDXB
- *CALL COMCLFM
- *CALL COMCOVL
- *CALL COMCRDH
- *CALL COMCRDW
- *CALL COMCSFN
- *CALL COMCSRT
- *CALL COMCSYS
- *CALL COMCWTC
- *CALL COMCWTH
- *CALL COMCWTW
- BUFFERS SPACE 4,10
- ** BUFFERS.
- USE BUFFERS
- OUTPUTB BSS 0 OUTPUT WORKING BUFFER
- DCB EQU OUTPUTB+1 DIRECTIVE COMMAND BUFFER
- DSB EQU DCB+DCBL DIRECTIVE STRING BUFFER
- WSA EQU DSB+10*DCBL+2 WORKING STORAGE (OLD)
- WSAL EQU 4000B
- WSB EQU WSA+WSAL+1 WORKING STORAGE (LGO/NEW)
- WSBL EQU 4000B
- INPB EQU WSB+WSBL INPUT BUFFER
- OUTB EQU INPB+INPL OUTPUT BUFFER
- TTYB EQU OUTB+OUTL
- OLDB EQU TTYB+TTYL OLD BUFFER
- NEWB EQU OLDB+OLDL NEW BUFFER
- LGOB EQU NEWB+NEWL LGO BUFFER
- SBUF EQU LGOB+LGOL SCRATCH BUFFER
- BUF EQU SBUF+SBUFL START OF MANAGED TABLES
- MFL= EQU 200000B+BUF+BUFL+5 MINIMUM FIELD LENGTH
- PRS TITLE LIBEDIT - PRESET.
- *** PRS - PRESET PROGRAM.
- *
- * ENTRY (A0) = FIELD LENGTH.
- * (ARGR) = ARGUMENT LIST.
- * (ACTR) = ARGUMENT COUNT.
- *
- * EXIT (FL) = A0.
- * (DATE.) = CURRENT DATE.
- * (TITC) = CURRENT TIME.
- * (FLST) = UPDATED FILE LIST.
- * (LL) = LINE LIMIT.
- * (PD) = PRINT DENSITY.
- * ALL COMMAND PARAMETERS PROCESSED.
- PRS SUBR ENTRY/EXIT
- DATE DATE. SET CURRENT DATE
- SB5 6
- SA3 DATE.
- LX6 B5,X3
- SA6 TITB
- SA6 A3
- CLOCK TITC GET CURRENT TIME
- SA3 TITC
- LX6 B5,X3
- SA6 A3
- MEMORY CM,FL,R SET AVAILABLE TABLE SPACE
- SA1 FL
- LX1 30
- SX6 X1-BUF
- SA6 L.BUF
- * PROCESS COMMAND PARAMETERS.
- SA1 ACTR ARGUMENT COUNT
- SB5 ARGA ARGUMENT TABLE
- SA4 ARGR FIRST ARGUMENT
- SB4 X1+
- RJ ARG PROCESS COMMAND PARAMETERS
- SX7 =C* LIBEDIT ARGUMENT ERROR(S).*
- NZ X1,PRS13 IF ERROR IN PARAMETERS
- * SET FILE NAMES IN LIST AND FET-S.
- SB5 B0+
- SB6 FLSTL-2
- PRS1 SA1 PAR+B5
- ZR X1,PRS2 IF NOT SPECIFIED
- BX6 X1
- SA1 FLST+/FLST/INPUT+B5
- RJ RFN REPLACE FILE NAME
- PRS2 SB5 B5+B1
- LT B5,B6,PRS1 IF NOT FINISHED
- * CHECK FILE NAME CONFLICT.
- SA1 FLST+/FLST/TTYOUT
- MX0 42
- BX3 X1*X0
- ZR X3,PRS5 IF NO FILE NAME
- SA2 A1+1
- SX7 =C* FILE NAME CONFLICT.*
- PRS3 ZR X2,PRS5 IF END OF LIST
- BX4 X2*X0
- ZR X4,PRS4 IF NO FILE NAME
- BX5 X4-X3
- ZR X5,PRS13 IF FILE NAME CONFLICT
- PRS4 SA2 A2+B1 NEXT FILE NAME
- EQ PRS3 LOOP FOR ALL FILES
- PRS5 SA1 A1+1
- NZ X1,PRS3 IF NOT YET END OF LIST
- * PROCESS REQUIRED FILES.
- SETLOF PRSB SET LIST OF FILES
- SA1 FLST+/FLST/NEW
- BX6 X0*X1
- SX7 =C* NO NEW FILE.*
- ZR X6,PRS13 IF NO NEW FILE
- SA6 GULF SET INPUT FILE FOR *LIBGEN*
- * DETERMINE ASSIGNMENT OF INPUT AND OUTPUT.
- SX2 I CHECK FOR TERMINAL INPUT FILE
- RJ STF
- SA6 TTYI
- NZ X6,PRS6 IF NOT TTY INPUT
- RETURN TTYOUT,R ASSIGN *TTYOUT* TO TERMINAL
- SA1 =2LTT
- MX7 -12
- SA2 TTYOUT+1
- BX6 -X7*X2
- BX6 X6+X1
- SA6 A2+
- REQUEST TTYOUT,U
- WRITE TTYOUT,*
- PRS6 SX2 O CHECK FOR TTY OUTPUT FILE
- RJ STF
- SA6 TTYO
- * PROCESS *LO* AND SET LIST OPTIONS.
- SA1 FLST+/FLST/OUTPUT
- BX4 X0*X1
- NZ X4,PRS7 IF LIST FILE DEFINED
- BX7 X7-X7 CLEAR LIST OPTIONS
- SA7 LIST
- PRS7 NZ X6,PRS8 IF NOT TTY OUTPUT
- * CHECK TERMINAL TABLE FOR *BRIEF* MODE.
- TSTATUS PRSA
- SA1 PRSA+1
- SX6 40B
- BX6 X6*X1
- SA6 BRFM
- * CHECK LIST OPTIONS.
- PRS8 SA1 LIST
- BX1 X0*X1
- ZR X1,PRS9 IF NO LIST OPTIONS SPECIFIED
- RJ ILO INTERPRET LIST OPTIONS
- SX7 =C* LIST OPTION ERROR.*
- NZ X1,PRS13 IF LIST OPTION ERROR
- EQ PRS10 PROCESS *Z*
- PRS9 SA1 TTYO
- NZ X1,PRS10 IF NOT TTY OUTPUT
- SX7 3 SET TTY *LO* DEFAULT OPTIONS
- SA7 LIST
- PRS10 SA1 CZOP
- ZR X1,PRS11 IF *Z* PARAMETER NOT SELECTED
- BX6 X1
- SA6 TTYI
- SX2 INPUT INPUT FILE FET
- RJ ZAP *Z* ARGUMENT PROCESSOR
- PRS11 SA1 LGO SET CORRECTION FILE NAME
- MX0 42
- BX6 X0*X1
- SA6 LGO.
- ZR X6,PRS12 IF NO CORRECTION FILE
- ADDWRD FNT,A6
- PRS12 OPEN NEW,WRITE,R INITIALIZE *NEW* FILE
- WRITE OUTPUT,* PRESET *WRITE* FUNCTION IN FET
- GETPP SBUF,LL,PD GET PAGE SIZE PARAMETERS
- EQ PRSX RETURN
- PRS13 MESSAGE X7,3 ISSUE ERROR MESSAGE
- RJ ABT ABORT PROGRAM
- PRSA BSS 2 *TLX* (TSTATUS) RESPONSE BLOCK
- PRSB VFD 12/0,18/FLST,30/0 FILE LIST POINTER FOR *SETLOF*
- * ARGUMENT TABLE.
- ARGA BSS 0
- I ARG FLST+/FLST/INPUT,PAR,400B
- L ARG FLST+/FLST/OUTPUT,PAR+1,400B
- P ARG FLST+/FLST/OLD,PAR+2,400B
- N ARG FLST+/FLST/NEW,PAR+3,400B
- B ARG FLST+/FLST/LGO,PAR+4,400B
- LO ARG ARGB,LIST,400B
- C ARG -*,CCPY RECOPY
- D ARG -*,CDOP NO ABORT (DEBUG), EQUIVALENT TO *NA*
- V ARG -*,CVFY VFYLIB
- Z ARG -*,CZOP INPUT DIRECTIVES ON COMMAND
- NA ARG -*,CDOP NO ABORT (DEBUG)
- NI ARG -*,CADD NO INSERT AT EOF
- NR ARG -*,CREW NO REWIND
- U ARG LIBGA,CULB USER LIBRARY OPTION
- NX ARG ARGC,GULJ,400B NO CROSSREF ULIB
- CON 0
- ARGB CON 1LF FULL LISTING
- ARGC CON 1L1 NO CROSS REFERENCE ULIB
- PAR BSSZ FLSTL-2 PARAMETER BUFFER
- SPACE 4,10
- ** PRESET COMMON DECKS.
- *CALL COMCARG
- *CALL COMCSTF
- *CALL COMCUSB
- *CALL COMCWTS
- *CALL COMCZAP
- SPACE 4,10
- END LIBEDIT
cdc/nos2.source/opl871/libedit.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator