IDENT SUBMIT,FETS
ABS
ENTRY SUBMIT
ENTRY RFL=
ENTRY SSJ=
SYSCOM B1
SST
*COMMENT SUBMIT - ENTER JOB IN INPUT QUEUE.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
TITLE SUBMIT - ENTER JOB IN INPUT QUEUE.
SPACE 4,10
*** SUBMIT - ENTER JOB IN INPUT QUEUE.
* G. R. MANSFIELD. 70/10/29.
SPACE 4,10
*** SUBMIT PLACES THE REQUESTED FILE IN THE REQUESTED
* INPUT QUEUE.
SPACE 4,25
*** CALL.
*
* SUBMIT (LFN,Q)C
* OR
* SUBMIT (LFN,Q,NR)C
*
* LFN SOURCE FILE NAME.
* Q INPUT QUEUE TYPE.
* B OR BC = BATCH.
* N OR NO = BATCH, WITH OUTPUT NOT TO BE PRINTED.
* E=UN OR RB=UN = REMOTE BATCH, WITH OUTPUT TO BE SENT
* TO THE SPECIFIED USER NAME. IF OMITTED, *UN*
* DEFAULTS TO THE USER NAME ASSOCIATED WITH THE
* SUBMITTING JOB.
* TO = BATCH, WITH OUTPUT TO BE SENT TO THE WAIT QUEUE.
* NR IF SPECIFIED, NO FILES ARE REWOUND UNLESS
* EXPLICITLY DONE WITH /REWIND DIRECTIVES.
* C ESCAPE CHARACTER FOR REFORMAT.
*
* ASSUMED -
* Q=B OR BC, IF SUBMITTED FROM NON-*IAOT* JOB.
* Q=N OR NO, IF SUBMITTED FROM *IAOT* JOB.
* LFN=NO DEFAULT (HOWEVER, *IAF* WILL EDIT THE COMMAND TO
* INSERT THE PRIMARY FILE NAME IF *SUBMIT.* IS ENTERED
* IN RESPONSE TO A COMMAND LINE PROMPT).
* C=/
SPACE 4,35
*** DAYFILE MESSAGES.
*
* * CONFLICTING PARAMETERS.* = INPUT QUEUE TYPE SPECIFIED MORE
* THAN ONCE.
*
* * INCORRECT QUEUE SPECIFIED.* = QUEUE TYPE SPECIFIED NOT A
* CORRECT TYPE FOR *SUBMIT*.
*
* * NO READ FILE FOUND- LFN .* = LFN ON /READ DIRECTIVE COULD
* NOT BE FOUND.
*
* * NO SOURCE FILE SPECIFIED.* = NO SOURCE FILE NAME GIVEN.
*
* * READ FILE BUSY- LFN .* = LFN ON /READ DIRECTIVE WAS BUSY.
*
* * SUBMIT COMPLETE. JSN IS XXXX.* = THE JOB WAS
* SUBMITTED WITH THE JSN XXXX.
*
* * SUBMIT FILE EMPTY.* = EOR/EOF FOUND ON FIRST READ OF SUBMIT
* FILE.
*
* * TOO MANY ARGUMENTS.* = TOO MANY ARGUMENTS WERE PRESENT ON
* THE COMMAND.
*
* * USER COMMAND HAS NOT BEEN EXECUTED.* = A */USER* DIRECTIVE
* HAS BEEN SPECIFIED, BUT THE CALLING JOB HAS NEVER EXECUTED
* A *USER* COMMAND.
*
* * USER DIRECTIVE INCORRECT.* = A */USER* DIRECTIVE COULD
* NOT BE PROCESSED, EITHER BECAUSE THE CALLING JOB HAS NEVER
* ISSUED A *USER* COMMAND, OR BECAUSE THE DIRECTIVE DID NOT
* FOLLOW BOTH A *JOB* DIRECTIVE AND A *JOB* COMMAND.
SPACE 4,10
*CALL COMCCMD
*CALL COMCMAC
*CALL COMSDSP
*CALL COMSIOQ
*CALL COMSMLS
*CALL COMSPFM
*CALL COMSSFM
*CALL COMSSSD
SPACE 4,10
**** ASSEMBLY CONSTANTS.
BUFL EQU 320D WORKING BUFFER
IBUFL EQU 2001B INPUT FILE BUFFER
FBUFL EQU 2001B
RBUFL EQU 2001B READ FILE BUFFER
SBUFL EQU 100B *SFM* BUFFER LENGTH
TBUFL EQU BUFL/10+1 NO LINE TERMINATOR DATA BUFFER LENGTH
WBUFL EQU 1
****
TITLE COMMON DATA.
DATA SPACE 4,10
** COMMON DATA.
ORG 110B
FETS BSS 0
I BSS 0
INPUT FILEB IBUF,IBUFL,(FET=8)
F BSS 0
SCR FILEB FBUF,FBUFL,(FET=8)
R BSS 0
TAPE1 FILEB RBUF,RBUFL,(FET=8)
RR BSS 0
PFMFIL FILEB RBUF,RBUFL,EPR,(FET=13B)
W BSS 0
SCR2 FILEB WBUF,WBUFL
ALVL CON 0 FILE ACCESS LEVEL
EORBIT CON 0 BIT59=EOR BIT, BIT47=/READ ACTIVE BIT
FLAGS CON 0 BIT59=NOSEQ, BIT47=TRANS, BIT35=NOPACK
NRFLG DATA 2RNR NO REWIND FLAG
IPTR CON 0 INPUT FET *IN* POINTER
IPTR2 CON 0 READ FILE FET *IN* POINTER
LCNT CON 1 LINE COUNTER
OPTR CON 0 INPUT FET OUT POINTER
OPTR2 CON 0 READ FILE FET OUT POINTER
RJ CON 0 RETURN JUMP ADDRESS
RJ2 CON 0 READ FILE ORIGINAL RETURN JUMP ADDRESS
USRF CON 0 A */USER* DIRECTIVE HAS BEEN PROCESSED
TFUN SPACE 4,10
** TFUN - FAMILY NAME AND USER NAME TABLE FOR *DSP*.
*
*T W0 42/ FAMILY NAME,18/0
*T,W1 42/ USER NAME,18/0
TFUN BSSZ 2
TDSP SPACE 4,10
* TDSP - *DSP* PARAMETER BLOCK.
TDSP VFD 42/0LSCR,18/0
VFD 24/0,12/0LIN,6/0,18/FRFN+FREB+FRDC+FRCS
BSSZ DPBL-*+TDSP
VFD 42/0,18/EFNV
BSSZ EPBL-*+TDSP
TITLE MAIN PROGRAM.
SUBMIT SPACE 4,100
** SUBMIT - MAIN PROGRAM
*
* THE ESCAPE CODE (*C* PARAMETER) IS A UNIQUE CHARACTER
* THAT ENABLES THE SUBMIT PROCESSOR TO RECOGNIZE SPECIAL
* DIRECTIVES THAT AFFECT THE FINAL FORMAT OF THE
* SUBMIT FILE. DEFAULT CHARACTER IS /.
*
* FUNCTIONS
*
* 1. READS FIRST UNIT RECORD AND CHECKS FOR *C*JOB
* A. IF THE FIRST DIRECTIVE IS NOT *C*JOB THE
* INPUT FILE IS COPIED AS IS TO BECOME THE
* ACTUAL SUBMIT FILE.
*
* B. IF THE FIRST DIRECTIVE IS *C*JOB THE INPUT
* FILE WILL BE REFORMATTED TO BECOME THE
* SUBMIT FILE.
* NOTE REFORMATTING IS ACCOMPLISHED BY PLACING
* SUBMIT DIRECTIVES IN THE INPUT FILE.
* 2. SETS QUEUE FOR EVENTUAL DISPOSAL OF OUTPUT
* 3. SUBMIT FILE IS PASSED TO THE SYSTEM *ROUTE* MACRO
* 4. MESSAGE IS ISSUED TO DAYFILE/INTERACTIVE TERMINAL
*
*
* HOW DIRECTIVES INFLUENCE THE SUBMIT FILE.
*
* 1. MODES EDITING IS DONE UNDER TWO MODES
* A. NON-TRANSPARENT EACH LINE OF THE INPUT FILE IS
* EXAMINED FOR DIRECTIVES. DEFAULT
* MODE WITH *C*JOB DIRECTIVE.
* DIRECTIVE FORMAT *C*NOTRANS
*
* B. TRANSPARENT ONLY GROUPS OF DIRECTIVES AT
* THE BEGINNING OF EACH RECORD MAY
* BE EXAMINED.
* DIRECTIVE FORMAT *C*TRANS
*
* 2. OPTIONS EACH DIRECTIVE ENABLES THE USER TO
* DICTATE SOME ASPECT OF THE FINAL FORMAT OF
* THE SUBMIT FILE.
*
* DIRECTIVE FORMAT *C*CHARGE
* REPLACES THE DIRECTIVE WITH A *CHARGE*
* COMMAND USING THE CURRENTLY ACTIVE
* CHARGE AND PROJECT NUMBER IF THE CHARGE
* AND PROJECT NUMBERS HAVE BEEN VALIDATED.
* IF NO CHARGE NUMBER IS IN EFFECT OR IF
* THE CURRENT CHARGE AND PROJECT NUMBERS
* HAVE NOT BEEN VALIDATED NO ACTION IS
* TAKEN.
*
* DIRECTIVE FORMAT *C*EOR
* END OF RECORD IS WRITTEN ON SUBMIT FILE
*
* DIRECTIVE FORMAT *C*EOF
* END OF FILE IS WRITTEN ON SUBMIT FILE
*
* DIRECTIVE FORMAT *C*EC=A
* CHANGES ESCAPE CHARACTER FROM *C* TO A.
*
* DIRECTIVE FORMAT *C*NOSEQ
* WILL AFFECT FORMAT ONLY UNDER NON-TRANS-
* PARENT MODE. NO ATTEMPT WILL BE MADE TO
* STRIP LINE NUMBERS FROM INPUT FILE LINES.
*
* DIRECTIVE FORMAT *C*SEQ
* WILL AFFECT FORMAT ONLY UNDER NON-TRANS-
* PARENT MODE. LINE NUMBERS WILL BE
* STRIPPED OFF INPUT FILE LINES. DEFAULT
* WITH *C*JOB DIRECTIVE.
*
* DIRECTIVE FORMAT *C*REWIND,FILENAME
* REWINDS ONE OF USER S LOCAL FILES
*
* DIRECTIVE FORMAT *C*READ,FILENAME
* COPIES USER,S LOCAL FILE TO SUBMIT FILE.
* EDITING IS DONE ON THE FILE AS THOUGH IT
* WERE SOURCE CODE OF THE INPUT FILE.
*
* DIRECTIVE FORMAT *C*PACK
* DEFAULT WHEN *C*JOB DIRECTIVE IS DETECTED.
* ALL EOR MARKS ARE REMOVED FROM A FILE.
* ALL EOF MARKS REMOVED FROM A MULTI-FILE
* FILE. AN EOF MARK WILL BE WRITTEN TO THE
* SUBMIT FILE ONLY WHEN EOI IS ENCOUNTERED
* IN THE INPUT FILE. EDITING STOPS AT THAT
* POINT.
*
* DIRECTIVE FORMAT *C*NOPACK
* INTERNAL FILE STRUCTURES ARE PRESERVED
* INTACT. EACH INTERNAL EOR OR EOF MARK IS
* COPIED TO THE SUBMIT FILE. FILES COPIED
* WITH *C*READ HAVE EOF AND EOI MARKS
* CONVERTED TO EOR MARKS. WHEN EOI IS
* ENCOUNTERED ON THE INPUT FILE AN EOF IS
* WRITTEN TO THE SUBMIT FILE AND EDITING
* STOPS.
*
* DIRECTIVE FORMAT *C*USER
* READS *VALIDUS* FILE FOR THE PASSWORD OF
* THE USER NAME CURRENTLY IN EFFECT AND
* REPLACES THE DIRECTIVE WITH A *USER*
* DIRECTIVE USING THE CURRENT USER NAME
* AND PASSWORD.
SUBMIT BSS 0 ENTRY
SB1 1
MX6 0 SET NO READ FILE YET
SA6 RR
RJ PRS
RETURN F,R
SA2 NRFLG
ZR X2,SBM0 IF NO REWIND
REWIND I
SBM0 READ I
READS I,BUF,BUFL READ FIRST LINE
SX0 =C* SUBMIT FILE EMPTY.*
NZ X1,ABT IF EOR/EOF
SA1 BUF SKIP SEQUENCE NUMBERS
RJ SSN
RJ CSF CHECK SPECIAL FORMAT
SA1 F+1 ASSIGN FILE TO INPUT DEVICE
MX0 -48
BX6 -X0*X1
SX1 2RIN
MX0 1 FILE ACCESS LEVEL BIT
LX0 39-59
LX1 59-11
BX7 X6+X1
BX7 X0+X7 MERGE ACCESS LEVEL BIT
SA7 A1
SA1 F+CFAL GET ACCESS LEVEL FIELD
MX0 -3
LX0 36
SA2 ALVL
BX1 X0*X1 CLEAR OLD ACCESS LEVEL
LX2 36
BX6 X1+X2 MERGE NEW ACCESS LEVEL
SA6 A1
REQUEST F,U,N REQUEST EQUIPMENT WITH NO DAYFILE MESSAGE
SX6 B2-JOB
NZ X6,SBM1 IF NOT JOB IDENTIFIER
RJ RFM REFORMAT
EQ SBM2
SBM1 RJ CPF COPY FILE
SBM2 RECALL F
SA1 USRF
NZ X1,SBM3 IF */USER* SPECIFIED
SX6 B0+
SA6 TDSP+7 CLEAR *NO VALIDATE* BIT
SBM3 ROUTE TDSP,RECALL
CLOCK SBMA BUILD OUTPUT MESSAGE FOR TERMINAL
SA1 TDSP
SA2 =0LOUTPUT
MX3 24
BX6 X3*X1
SA1 SBMB+2
LX3 24
BX1 -X3*X1
LX6 24
BX6 X1+X6
SA6 SBMB+2
SX3 B1
BX6 X2+X3
SA6 F
WRITEW F,SBMA,5
MESSAGE SBMB,3,R SEND JSN MESSAGE
MX0 -6
SA1 FWPR
AX1 24
BX3 -X0*X1
SX6 X3-IAOT
NZ X6,SBM5 IF NOT INTERACTIVE JOB
MESSAGE NOFIL+2,1 CLEAR CONTROL POINT MESSAGE
WRITER F
SBM5 ENDRUN
SBMA BSS 1
SBMB DATA C* SUBMIT COMPLETE. JSN IS XXXX.*
TITLE SUBROUTINES.
ABT SPACE 4,10
** ABT - ABORT JOB.
*
* ENTRY (X0) = MESSAGE ADDRESS.
ABT BSS 0
MESSAGE X0,,R
ABORT
CPF SPACE 4,10
** CPF - COPY INPUT FILE TO SUBMIT FILE.
*
* USES X - 0, 1, 5.
* B - 1, 6.
CPF SUBR ENTRY/EXIT
WRITES F,BUF,BUFL
EQ CPF2
CPF1 READ I
RECALL F
CPF2 READW I,BUF,BUFL
SX0 X1
SX5 B6-BUF
WRITEW F,BUF,X5
NG X0,CPF4 IF EOF/EOI
NZ X0,CPF3 IF EOR
EQ CPF2
CPF3 WRITER F
NG X0,CPFX IF EOI
EQ CPF1
CPF4 SX0 X0+B1
NG X0,CPF5 IF EOI
WRITEF F
EQ CPF1
CPF5 NZ X5,CPF3 IF DATA IN BUFFER
EQ CPFX RETURN
CSF SPACE 4,15
** CSF - CHECK SPECIAL FORMAT.
*
* ENTRY (A1) = ADDRESS OF FIRST CHARACTER.
* (X1) = FIRST CHARACTER.
*
* EXIT (B2) = 0 IF NOT SPECIAL FORMAT.
* = ADDRESS OF PROCESSOR OTHERWISE.
*
* USES X - 2, 3, 4, 5, 6, 7.
* B - 2, 5, 7.
* A - 2, 3, 5.
CSF7 BX7 X3-X6
BX4 X2*X7
MX2 48D
BX7 -X2*X7
SA3 A3+1
SA5 A5+1
ZR X4,CSF4 IF MATCH FOUND
NZ X3,CSF1 IF NOT END OF TABLE
CSF SUBR ENTRY/EXIT
SA5 TCCFL
SA3 TCCF
CSF1 BX6 X6-X6 CLEAR ASSEMBLY
SA2 A1 FIRST CHARACTER
MX4 48D
BX4 -X4*X5
SB7 X4 SAVE SHIFT COUNT PER CC FORMAT
SB2 B0 CLEAR RESPONSE
CSF2 LX6 6 ADVANCE ASSEMBLY
BX6 X6+X2
LX5 1 SHIFT CHARACTER COUNT
SA2 A2+B1 NEXT CHARACTER
NG X5,CSF2 LOOP FOR X5 CHARACTERS
SB5 A3-TCCFR
PL B5,CSF3 IF /EC=,/READ,/REWIND
SX2 X2-1R
ZR X2,CSF3 IF BLANK
SA3 A3+1
SA5 A5+1
ZR X3,CSFX IF END OF LINE
EQ CSF1 LOOP
CSF3 LX6 B7,X6
SX4 59D
SX2 B7
IX4 X4-X2
SB7 X4
MX2 1
AX2 B7,X2
EQ CSF7 CHECK FOR DIRECTIVE FORMAT
CSF4 SB5 A3-1-TCCFR TEST FOR /READ
NZ B5,CSF5 IF NOT /READ
SA3 EORBIT TEST READ ACTIVE BIT
LX3 12D
NG X3,CSF6 IF READ ALREADY ACTIVE (DISREGARD /READ)
CSF5 SB2 X7+ SET PROCESSOR ADDRESS
CSF6 SA1 LCNT DECREMENT COUNT OF COMMANDS
SX6 X1-1
SA6 A1
EQ CSFX RETURN
NLT SPACE 4,10
** NLT - WRITE NO LINE TERMINATOR DATA TO BUFFER.
*
* ENTRY (X1) = STATUS FROM *READS*.
* (B6) = LWA+1 OF DATA TRANSFERRED ON *READS*.
*
* EXIT (X1) = SAME AS ENTRY.
*
* USES A - 2, 3, 7.
* B - 4, 5, 7.
* X - 0, 1, 2, 3, 7.
NLT SUBR ENTRY/EXIT
SB7 B6-BUF
ZR B7,NLTX IF NO DATA TRANSFERRED
SB7 BUF SET CHARACTER BUFFER ADDRESS
SB4 TBUF SET WORD BUFFER ADDRESS
NLT1 SB5 10 INITIALIZE NUMBER OF CHARACTERS IN WORD
SX7 B0+ CLEAR CHARACTER BUFFER WORD
NLT2 SA2 B7+ MERGE NEXT CHARACTER
LX7 6
SB7 B7+B1 INCREMENT CHARACTER BUFFER ADDRESS
BX7 X7+X2
EQ B7,B6,NLT3 IF ALL CHARACTERS PROCESSED
SB5 B5-B1 DECREMENT CHARACTERS IN WORD
NZ B5,NLT2 IF NOT END OF WORD
SA7 B4 STORE WORD
SB4 B4+B1 INCREMENT WORD BUFFER ADDRESS
EQ NLT1 PROCESS NEXT 10 CHARACTERS
NLT3 SA7 B4 STORE LAST WORD
SB4 B4+B1 SET NUMBER OF WORDS
SB7 B4-TBUF
BX0 X1 SAVE READ STATUS
WRITEW F,TBUF,B7 WRITE DATA WITH NO TERMINATOR
SA2 FLAGS CHECK PACK MODE
SA3 I CHECK EOI STATUS
LX2 59-35
LX3 59-9
PL X2,NLT4 IF PACK MODE
PL X3,NLT4 IF NOT EOI
WRITEF F FLUSH BUFFER IF EOI IN NOPACK MODE
NLT4 BX1 X0 RESTORE READ STATUS
EQ NLTX RETURN
RFM SPACE 4,40
** RFM - REFORMAT FILE.
* *RFM* PROCESSES THE INPUT FILE WHENEVER A *C*JOB
* DIRECTIVE IS DETECTED AS THE FIRST UNIT RECORD OF
* THE FILE.
* PROCESSING IS DONE IN ONE OF TWO MODES
* 1. NONTRANSPARENT MODE
* AFTER *C*JOB DIRECTIVE OR *C*NOTRANS*
* DIRECTIVE EACH UNIT RECORD OF THE INPUT FILE IS
* CHECKED FOR SPECIAL SUBMIT DIRECTIVES
* A. *C*TRANS FOUND
* EDITING REVERTS IMMEDIATELY TO TRANSPARENT
* MODE. (SEE BELOW).
* B. OTHER DIRECTIVES
* THE DIRECTIVE APPEARANCE IS MARKED AND
* IT TAKES EFFECT WITH THE NEXT UNIT RECORD
* C. TEXT LINE
* TEXT LINES ARE EDITED ACCORDING TO THE
* CURRENT SETTING OF THE SUBMIT CONTROL
* OPTIONS.
* D. EOR/EOF/EOI
* SEE COMMENTS IN SUBROUTINE *SUBEO*.
*
* 2. TRANSPARENT MODE
* AFTER *C*TRANS DIRECTIVE HAS BEEN
* PROCESSED THE FIRST UNIT RECORD IS EXAMINED
* A. TEXT
* THE WHOLE RECORD IS TRANSFERED TO THE
* SUBMIT FILE AS IS
* B. *C*NOTRANS FOUND
* PROCESSING REVERTS IMMEDIATELY TO
* NON-TRANSPARENT MODE. (SEE ABOVE).
* C. SUBMIT CONTROL OPTION
* THE CONTROL OPTION OCCURENCE IS MARKED
* EVEN IF IT MAY NOT INFLUENCE THE EDITING
* UNDER THIS MODE. IF MODE REVERTS TO NON-
* TRANSPARENT, ALL OPTIONS USED UNDER
* TRANSPARENT MODE WILL TAKE EFFECT.
* D. EOR/EOF/EOI
* SEE COMMENTS IN SUBROUTINE *SUBEO*.
RFM SUBR ENTRY/EXIT
* PROCESS NONTRANSPARENT MODE
PNM BSS 0 NOTRANS
EQ PNM2 SKIP ADDITIONAL READ
PNM1 READ I,R
RECALL F
PNM2 SA1 I+3 SAVE OUTPTR(I)
SA2 I+2 SAVE INPUT FET *IN* POINTER
BX6 X1
LX7 X2
SA6 OPTR
SA7 IPTR
READS I,BUF,BUFL READ UNIT RECORD
ZR X1,PNM2.1 IF NO EOR/EOF/EOI
SB7 B6-BUF
ZR B7,PNM2.0 IF END OF RECORD
SA2 FLAGS CHECK TRANS MODE BIT
LX2 59-47
PL X2,PNM2.0 IF TRANS NOT SET
SA2 OPTR RESTORE POINTERS FOR TRANS DATA
SA3 IPTR
BX6 X2
LX7 X3
SA6 I+3
SA7 I+2
EQ PTM6 SWITCH TO TRANS MODE
PNM2.0 RJ NLT WRITE NO LINE TERMINATOR DATA TO BUFFER
SX0 B0 INPUT FILE
SX7 B0 NO WRITE REMAINDER
SX5 RFMX RETURN ADDRESS FOR EOI
RJ SUBEO PROCESS EOF/EOR
EQ PNM1 PROCESS NEXT RECORD
PNM2.1 SA1 LCNT INCREMENT LINE COUNT
SX6 X1+B1
SA6 A1
SA1 BUF SET BEGINNING ADDRESS
RJ CSF CHECK SPECIAL FORMAT
NZ B2,PNM3 IF SPECIAL FORMAT
RJ SSN STRIP SEQUENCE NUMBER
SB6 A1 SAVE BEGINNING ADDRESS AFTER STRIPPING
SB3 B2 SAVE BEGINNING ADDRESS BEFORE STRIPPING
RJ CSF CHECK SPECIAL FORMAT
ZR B2,PNM4 IF NOT SPECIAL FORMAT
PNM3 SX7 PNM2 SAVE RETURN ADDRESS
SA7 RJ
JP B2
PNM4 SA2 FLAGS TEST TRANS BIT
LX2 12D
PL X2,PNM5 TRANS NOT SET
SA1 OPTR RESTORE *IN* AND *OUT* POINTERS
SA2 IPTR
BX6 X1
LX7 X2
SA6 I+3
SA7 I+2
EQ PTM6 SWITCH TO TRANS MODE
PNM5 SB2 BUF+BUFL
SA2 FLAGS TEST NOSEQ BIT
PL X2,PNM6 STRIP SEQUENCE NUMBERS
SB6 B3 NO SEQUENCE NUMBER STRIPPING
PNM6 SB7 B2-B6 CALCULATE WRITE LENGTH
WRITES F,B6,B7
EQ PNM2 LOOP TO NEXT RECORD
* PROCESS TRANSPARENT MODE
PTM BSS 0
PTM1 READ I
RECALL F
PTM2 SA1 I+3 SAVE OUTPTR(I)
BX6 X1
SA6 OPTR
SA1 X6 CHECK FOR END OF LINE BYTE
MX7 -12
BX7 -X7*X1
NZ X7,PTM5 IF NOT A POSSIBLE SPECIAL FORMAT DIRECTIVE
READS I,BUF,BUFL READ UNIT RECORD FROM INPUT FILE
ZR X1,PTM3 IF NO EOR/EOF
SX0 B0 INPUT FILE
SX7 B0 NO RECORD REMAINDER
SX5 RFMX RETURN ADDRESS FOR EOI
RJ SUBEO PROCESS TERMINATION CONDITION
EQ PTM1 PROCESS NEXT RECORD
PTM3 SA1 LCNT INCREMENT LINE COUNT
SX6 X1+B1
SA6 A1
SA1 BUF SET BEGINNING ADDRESS
RJ CSF CHECK SPECIAL FORMAT WITH NO SEQ NO STRIP
NZ B2,PTM4 IF SPECIAL FORMAT
RJ SSN STRIP SEQUENCE NUMBER
SB6 A1 SAVE BEGINNING ADDRESS AFTER STRIPPING
SB3 B2 SAVE BEGINNING ADDRESS BEFORE STRIPPING
RJ CSF CHECK SPECIAL FORMAT
ZR B2,PTM5 IF NOT SPECIAL FORMAT
PTM4 SX7 PTM2 SAVE RETURN ADDRESS
SA7 RJ
JP B2
PTM5 SA2 FLAGS TEST FOR TRANS BIT SET
LX2 12D
SA3 OPTR RESTORE OUT POINTER
BX6 X3
SA6 I+3
PL X2,PNM2 IF NOT SET, SWITCH TO NONTRANSPARENT MODE
PTM6 READW I,BUF,BUFL
RJ SUBUFS SET TRANSFER TO BUF
ZR X1,PTM7 IF NO EOR/EOF
SX0 B0 INPUT FILE
SX7 B1 PROCESS INCOMPLETE RECORD
SX5 RFMX RETURN ADDRESS FOR EOI
RJ SUBEO PROCESS TERMINATION CONDITION
EQ PTM1 PROCESS NEXT RECORD
PTM7 WRITEW F,BUF,BUFL
RJ SUBUFR CLEAR TRANSFER TO BUF
EQ PTM6 LOOP
SUBEO SPACE 4,40
** SUBEO PROCESS FILE TERMINATION CONDITION.
*
* ENTRY (I) = FILE FET ADDRESS.
* (X1) = EOR/EOF/EOI STATUS FROM READW OR READS
* (X0) IF 0 - FILE IS INPUT FILE
* 1 - FILE FROM /READ,....
* (X5) = ALTERNATE RETURN ADDRESS
* (X7) = 0 IF ENTIRE RECORD.
* = 1 IF PARTIAL RECORD POSSIBLE.
*
* EXIT THE ROUTINE WILL RETURN VIA REGULAR LINKAGE WHEN
* EOR/EOF ON INPUT FILE
* EOR ON READ FILE
* THE ROUTINE WILL RETURN TO THE ALTERNATE RETURN
* ADDRESS WHEN
* EOI ON INPUT FILE
* EOF ON READ FILE
*
*
* THIS ROUTINE PROCESSES A TERMINAL CONDITION FOR A FILE
* AS FOLLOWS
* 1. END-OF-INFORMATION
* A. INPUT FILE
* THE REFORMATTING ROUTINE IS TERMINATED BUT
* THE SUBMIT BUFFER F IS FLUSHED IF NOT
* EMPTY WITH A WRITEF MACRO.
* 2. END OF FILE
* A. INPUT FILE
* IF THE PACK CONTROL OPTION IS
* IN EFFECT THE FILE MARK IS IGNORED.
* ELSE A FILE MARK IS WRITTEN TO THE OUTPUT
* FILE F
* B. READ FILE
* READING FROM FILE IS TERMINATED, EDITING
* WILL BE THE SAME AS IF EOR WAS DETECTED.
* 3. END OF RECORD
* A. INPUT FILE
* B. READ FILE
* IF THE PACK OPTION IS IN EFFECT THE RECORD
* MARK IS IGNORED, ELSE A RECORD MARK IS
* WRITTEN TO THE OUTPUT FILE F.
SUBEO SUBR ENTRY/EXIT
SA2 FLAGS PACK/NOPAK
LX2 59-35
* SEPARATE EOR FROM EOF.
PL X1,SUB6 IF EOR
NZ X0,SUB4 IF EOF ON READ FILE
* END OF FILE.
SA4 SUBTR
BX0 X2
ZR X4,SUB1 IF BUFFER EMPTY
WRITEW F,BUF,X4
RJ SUBUFR CLEAR TRANSFER COUNT
SUB1 SA3 I CHECK EOI STATUS
LX3 59-9
PL X0,SUB2 IF PACK MODE
NG X3,SUB3 IF EOI/INPUT/NOPACK
WRITEF F EOF/NOPACK, FLUSH FILE
EQ SUBEOX REGULAR RETURN
SUB2 PL X3,SUBEOX IF NOT EOI
WRITEF F ON EOI,FLUSH OUTPUT BUFFER
SUB3 SB7 X5 SET ALTERNATE RETURN ADDRESS
JP B7
* READ FILE EOF OR EOI.
SUB4 ZR X7,SUB5 IF NO PARTIAL RECORD READ
SA4 SUBTR
ZR X4,SUB5 IF NO DATA
BX0 X2
WRITEW F,BUF,X4 WRITE LAST AMOUNT OF DATA
RJ SUBUFR CLEAR TRANSFER COUNT
BX2 X0
SX0 B0 SET EOF
EQ SUB8
SUB5 SA3 F+2 *IN*
SX0 B0 X0 SET TO EOF
SA4 A3+B1 OUT
BX6 X3-X4 IN-OUT
ZR X6,SUB9 IF OUTPUT BUFFER EMPTY
EQ SUB8 READ FILE TERMINATED WITH EOR
* END OF RECORD.
SUB6 ZR X7,SUB7 IF NO PARTIAL RECORD READ
BX0 X2
SA4 SUBTR
ZR X4,SUB6.1 IF NO DATA
WRITEW F,BUF,X1-BUF
RJ SUBUFR CLEAR TRANSFER TO BUF
BX2 X0
SUB6.1 SX1 B1 FORCE EOR FLAG
* PROCESS READ FILE EOR OR EOF.
SUB7 SX0 X1+ RESTORE EOR/EOF FLAG
SUB8 PL X2,SUB9 IF PACK MODE
WRITER F NOPACK PRESERVES THE RECORD MARK
SUB9 ZR X0,SUB3 IF EOF ON READ FILE
EQ SUBEOX EOR
SUBUFS SPACE 4,10
** SUBUFS - SET NUMBER OF WORDS TRANSFERRED TO BUF FROM I.
*
* ENTRY (B6) = LWA+1 OF DATA TRANSFERRED.
*
* EXIT (SUBTR) = NUMBER OF WORDS TRANSFERRED.
*
* USES A - 6.
* X - 4, 6.
SUBUFS SUBR ENTRY/EXIT
SX4 B6
SX6 BUF
IX6 X4-X6
SA6 SUBTR
EQ SUBUFSX RETURN
SUBUFR SPACE 4,10
** SUBUFR - RESET TRANSFER CELL TO ZERO.
*
* EXIT (SUBTR) = 0.
*
* USES A - 6.
* X - 6.
SUBUFR SUBR ENTRY/EXIT
SX6 B0+
SA6 SUBTR
EQ SUBUFRX RETURN
SUBTR BSSZ 1
TITLE SPECIAL DIRECTIVE PROCESSORS.
CHARGE SPACE 4,10
** CHARGE - PROCESS CHARGE.
*
* USES A - 1, 2.
* X - 1, 2.
* B - 2, 5.
*
* CALLS SNM.
*
* MACROS GETCN, WRITEC.
CHARGE BSS 0
SA1 CHGA
NZ X1,CHG1 IF NOT FIRST *CHARGE* DIRECTIVE
GETCN CHGA GET CHARGE INFORMATION
SA1 CHGA READ CHARGE NUMBER
SB5 CHGB SET COMMAND TEMPLATE ADDRESS
SB2 1R#
RJ SNM SET CHARGE NUMBER
SA1 CHGA+1 READ FIRST PART OF PROJECT NUMBER
SB2 1R<
RJ SNM SET PROJECT NUMBER
SA1 CHGA+2 READ SECOND PART OF PROJECT NUMBER
SB2 1R>
RJ SNM SET PROJECT NUMBER
CHG1 SA1 CHGA+3
PL X1,CHG2 IF CHARGE NOT VALIDATED
WRITEC F,CHGB WRITE COMMAND TO SUBMIT FILE
CHG2 SA2 RJ SET RETURN ADDRESS
SB2 X2
JP B2 RETURN
CHGA BSSZ 4 *GETCN* BLOCK
CHGB DATA C/$CHARGE,##########,<<<<<<<<<<>>>>>>>>>>./
JOB SPACE 4,10
** JOB - PROCESS JOB.
JOB BSS 0
WRITER F,R
SA2 RJ
SB2 X2
JP B2
EOR SPACE 4,10
** EOR - PROCESS EOR.
EOR BSS 0
WRITER F,R
SA2 RJ
SB2 X2
JP B2
EOF SPACE 4,10
** EOF - PROCESS EOF.
EOF BSS 0
WRITEF F,R
SA2 RJ
SB2 X2
JP B2
SEQ SPACE 4,10
** SEQ - PROCESS SEQ.
SEQ BSS 0
SA1 FLAGS
MX2 1
BX6 -X2*X1
SA6 FLAGS
SA2 RJ
SB2 X2
JP B2
NOSEQ SPACE 4,10
** NOSEQ - PROCESS NOSEQ.
NOSEQ BSS 0
SA1 FLAGS
MX2 1
BX6 X2+X1
SA6 FLAGS
SA2 RJ
SB2 X2
JP B2
TRANS SPACE 4,10
** TRANS - PROCESS TRANS.
TRANS BSS 0
SA1 FLAGS
LX1 12D
MX2 1
BX6 X2+X1
LX6 48D
SA6 FLAGS
SA2 RJ
SB2 X2
JP B2
NOTRANS SPACE 4,10
** NOTRANS - PROCESS NOTRANS.
NOTRANS BSS 0
SA1 FLAGS
LX1 12D
MX2 1
BX6 -X2*X1
LX6 48D
SA6 FLAGS
SA2 RJ
SB2 X2
JP B2
NOPACK SPACE 4,10
** NOPACK - PROCESS NOPACK.
NOPACK BSS 0
SA1 FLAGS
LX1 24D
MX2 1
BX6 X2+X1
LX6 36D
SA6 FLAGS
SA2 RJ
SB2 X2
JP B2
PACK SPACE 4,10
** PACK - PROCESS PACK.
PACK BSS 0
SA1 FLAGS
LX1 24D
MX2 1
BX6 -X2*X1
LX6 36D
SA6 FLAGS
SA2 RJ
SB2 X2
JP B2
REWIND SPACE 4,10
** REWIND - REWIND FILE.
*
* USES A - 1, 2, 6.
* B - 2.
* X - 1, 2, 3, 6.
*
* CALLS GLF, SFN.
REWIND BSS 0
RJ GLF GET LOCAL FILE NEME
NZ X4,RWD6 IF INCORRECT SEPARATOR, PUT OUT AS DATA
NZ B2,RWD1 IF VALID CHARACTERS IN FILEMAME
SA2 =0LTAPE1 SET DEFAULT FILENAME IN FET
BX6 X2
SA1 EORBIT TEST READ ACTIVE BIT
LX1 12D
PL X1,RWD3 NOT ACTIVE
EQ RWD6 ACTIVE,PUT OUT AS DATA
RWD1 RJ SFN SHIFT FILENAME, TEST FOR SUBMIT FILENAME
ZR X2,RWD6 IF EQUAL,PUT OUT AS DATA
RWD2 SA1 EORBIT TEST FOR READ ACTIVE
LX1 12D
PL X1,RWD3 READ NOT ACTIVE
SA1 R TEST FOR READ FILENAME
MX3 42D
BX2 X3*X1
BX2 X2-X6
ZR X2,RWD6 IF EQUAL,PUT OUT AS DATA
RWD3 SX1 1
IX6 X6+X1
SA6 W STORE FILENAME IN FET
REWIND W,R REWIND FILE
SA1 RJ GET RETURN ADDRESS
SB2 X1
JP B2 RETURN
RWD6 SA1 RJ TEST RETURN ADDRESS = TO NONTRANS
PARENT MODE ROUTINE
SX2 PNM2
BX2 X1-X2
ZR X2,PNM4 RETURN TO NONTRANSPARENT MODE ROUTINE
SX2 PTM2
BX2 X1-X2
ZR X2,PTM5
SX2 RTM1
BX2 X1-X2
ZR X2,RTM5
EQ RNM3
USER SPACE 4,10
** USER - PROCESS USER.
*
* USES X - 0, 1, 2, 6.
* A - 1, 2, 6.
* B - 2, 5.
*
* CALLS SNM.
*
* MACROS ABORT, MESSAGE, RECALL, SYSTEM, WRITEC.
USER BSS 0 ENTRY
SA1 PFPB+2
MX0 42
BX5 X0*X1
NZ X5,USE2 IF *USER* COMMAND HAS BEEN EXECUTED
MESSAGE (=C* USER COMMAND HAS NOT BEEN EXECUTED.*),,R
USE1 MESSAGE (=C* USER DIRECTIVE INCORRECT.*),,R
ABORT
USE2 SA2 LCNT CHECK LINE COUNT
SX6 X2-1
NZ X6,USE1 IF MORE THAN ONE COMMAND PROCESSED
SA2 USRF
NZ X2,USE1 IF USER DIRECTIVE ALREADY PROCESSED
SX6 B1 SET */USER* FLAG
SA6 A2
SYSTEM SFM,R,USEC,RSDF*100B GET FAMILY ORDINAL TABLE
SA1 SBUF+0 GET SYSTEM DEFAULT FAMILY NAME
SA2 PFPB+0 CHECK FOR DEFAULT FAMILY
SB5 USEB SET ADDRESS OF DEFAULT FAMILY TEMPLATE
BX2 X1-X2
BX2 X0*X2
ZR X2,USE3 IF CURRENT FAMILY IS THE DEFAULT FAMILY
SB5 USEA SET ADDRESS OF ALTERNATE FAMILY TEMPLATE
SA1 PFPB+0 SET FAMILY NAME IN *USER* COMMAND
BX1 X0*X1
SB2 1R#
RJ SNM SET NAME IN MESSAGE
USE3 SB2 1R* SET USER NAME IN *USER* COMMAND
BX1 X5
RJ SNM SET NAME IN MESSAGE
USE4 WRITEC F,B5
RECALL F
SA2 RJ
SB2 X2
JP B2 RETURN
* *USER* COMMAND TEMPLATES.
USEA DATA C/$USER,*******,,#######./ ALTERNATE FAMILY TEMPLATE
USEB DATA C/$USER,*******,./ DEFAULT FAMILY TEMPLATE
USEC VFD 12/RFDF,12/0,12/SBUFL,6/0,18/SBUF *RSDF* CONTROL WORD
CON 0 END OF CONTROL WORDS
GLF SPACE 4,10
** GLF - GET LOCAL FILE NAME.
*
* ENTRY (A2) = ADDRESS OF NEXT CHARACTER IN STRING BUFFER.
*
* EXIT (X4) .NE. 0 IF INCORRECT SEPARATOR.
* (B2) = NUMBER OF CHARACTERS IN NAME.
*
* USES A - 1.
* X - 1, 3, 4, 5, 6.
* B - 2.
GLF SUBR ENTRY/EXIT
SA1 A2 TEST FOR , OR BLANK SEPARATOR
SX4 1R,
BX4 X1-X4
ZR X4,GLF2
SX4 1R
BX4 X1-X4
NZ X4,GLFX IF INCORRECT SEPARATOR
GLF2 SA1 A2+1 GET LOCAL FILENAME
SB2 B0 SET BUFFER INDEX
MX5 7 SET FILENAME CHARACTER LIMIT
SX3 1R
BX6 X6-X6 CLEAR ASSEMBLY
GLF1 BX4 X1-X3 TEST FOR BLANK
ZR X4,GLFX IF BLANK
LX6 6
BX6 X6+X1 PLANT CHARACTER
LX5 1 SHIFT CHARACTER COUNT
SB2 B2+B1 INCREMENT CHARACTER INDEX
SA1 A1+B1 GET NEXT CHARACTER
NG X5,GLF1 IF NOT 7 CHARACTERS
BX4 X1-X3 TEST FOR BLANK
EQ GLFX RETURN
SFN SPACE 4,10
** SFN - SHIFT AND TEST FILE NAME.
*
* ENTRY (B2) = NUMBER OF CHARACTERS IN NAME.
*
* EXIT (X2) = 0 IF NAME SAME AS SUBMIT FILE NAME.
*
* USES A - 2.
* X - 2, 3, 4.
* B - 2.
SFN SUBR ENTRY/EXIT
SX4 B2 SHIFT FILENAME + TEST FOR SUBMIT FILENAME
SX3 10D GENERATE SHIFT COUNT
IX4 X3-X4
BX3 X4
LX4 2
LX3 1
IX4 X4+X3
SB2 X4
LX6 B2,X6
SA2 I TEST READ FILENAME SAME AS SUBMIT FILE NAME
MX3 42D
BX2 X3*X2
BX2 X2-X6
EQ SFNX RETURN
READ SPACE 4,10
** READ - READ AND COPY LOCAL FILE.
*
* USES A - 1, 2, 6.
* X - 0, 1, 2, 3, 4, 6.
* B - 3.
*
* CALLS GLF, RNM, RTM, SFN.
*
* MACROS ATTACH, GET, RECALL, RETURN, REWIND, SETFAL, STATUS.
READ BSS 0
RJ GLF GET LOCAL FILENAME
NZ X4,READ13 IF INCORRECT SEPARATOR, PUT OUT AS DATA
READ1 NZ B2,READ2 IF VALID CHARACTERS IN FILENAME
SA2 =0LTAPE1 SET DEFAULT FILENAME IN FET
BX6 X2
EQ READ3
READ2 RJ SFN SHIFT FILENAME + TEST FOR SUBMIT FILENAME
ZR X2,READ13 IF EQUAL, PUT OUT AS DATA
READ3 SX1 1
IX6 X6+X1
SA6 R STORE FILENAME IN FET
SA6 RR
READ4 SA1 RJ STORE ORIGINAL RETURN JUMP
BX6 X1
SA6 RJ2
SA1 EORBIT SET READ ACTIVE BIT
MX2 1
LX1 12D
BX6 X1+X2
LX6 48D
SA6 EORBIT
SA1 RR+1 SET ACCESS LEVEL PROCESSING BIT
MX6 1
LX6 39-59
BX6 X1+X6
SA6 A1
STATUS RR
SA1 RR
MX3 60-7
BX4 -X3*X1
SX3 X4-1
NZ X3,READ8 IF FILE LOCAL
GET RR
SB3 B0
READ5 SA1 RR CHECK *PFM* ERROR STATUS
MX3 60-4
AX1 10
BX6 -X3*X1
ZR X6,READ10 IF FILE OBTAINED
SX3 X6-1
ZR X3,READ6 IF FILE BUSY
NE B3,B0,READ7 IF BOTH *GET* AND *ATTACH* FAILED
SA1 R
BX6 X1
SA6 RR RESET LFN AND STATUS
ATTACH RR,,,,,,,,NF
SB3 B1 SET *ATTACH* FLAG
EQ READ5 CHECK *PFM* ERROR STATUS
READ6 SA1 R * READ FILE BUSY - LFN*
MX3 42
BX6 X3*X1
SA6 BSFIL+2 SET FILE NAME IN MESSAGE
SX0 BSFIL
EQ ABT ABORT
READ7 SA1 R * NO READ FILE FOUND - LFN*
MX3 42
BX6 X3*X1
SA6 NOFIL+2 SET FILE NAME IN MESSAGE
SX0 NOFIL
EQ ABT ABORT
READ8 SA1 NRFLG
ZR X1,READ9 IF NO REWIND
REWIND RR,R
READ9 MX6 0
SA6 RR SET *LOCAL FILE* FLAG
* CHECK ACCESS LEVEL OF READ FILE.
READ10 SA1 RR+CFAL GET ACCESS LEVEL OF READ FILE
MX6 -3
LX1 -36
BX6 -X6*X1
SA1 ALVL GET ACCESS LEVEL OF SUBMIT FILE
IX1 X1-X6
PL X1,READ10.1 IF READ FILE LEVEL .LE. SUBMIT FILE LEVEL
SA6 A1+
RECALL F
SETFAL F,ALVL SET SUBMIT FILE LEVEL TO READ FILE LEVEL
* CALL APPROPRIATE READ PROCESSOR.
READ10.1 SA1 FLAGS TEST FOR TRANS BIT ON
LX1 12D
NG X1,RTM TRANS
EQ RNM NOTRANS
READ11 SA1 EORBIT SET READ ACTIVE BIT INACTIVE
MX2 1
LX1 12D
BX6 -X1*X2
LX6 48D
SA6 EORBIT
SA1 RR
ZR X1,READ12 READ FILE NOT ATTACHED BY SUBMIT
RETURN RR,R
MX6 0
SA6 RR CLEAR RETURN FLAG
READ12 SA2 RJ2 RESTORE ORIGINAL RETURN ADDRESS
SB2 X2
JP B2 RETURN
READ13 SA1 RJ TEST RETURN ADDRESS = TO NONTRANSPARENT
SX2 PNM2 MODE ROUTINE
BX2 X1-X2
ZR X2,PNM4 RETURN TO NONTRANSPARENT MODE ROUTINE
EQ PTM5 RETURN TO TRANSPARENT MODE ROUTINE
RNM SPACE 4,10
** RNM - PROCESS NONTRANSPARENT READ MODE.
*
* USES A - 1, 2, 3, 6, 7.
* X - 0, 1, 2, 3, 5, 6, 7.
* B - 2, 3, 6, 7.
*
* CALLS CSF, NLT, SSN, SUBEO.
*
* MACROS READ, READS, RECALL, WRITES.
RNM BSS 0 ENTRY
RNM0 READ R,R READ NEXT BUFFER LOAD
RECALL F
RNM1 SA1 R+3 SAVE OUTPTR(R)
SA2 R+2 SAVE READ FILE FET *IN* POINTER
BX6 X1
LX7 X2
SA6 OPTR2
SA7 IPTR2
READS R,BUF,BUFL READ UNIT RECORD
ZR X1,RNM1.1 IF NO EOR/EOF/EOI
SB7 B6-BUF
ZR B7,RNM1.0 IF END OF RECORD
SA2 FLAGS CHECK TRANS MODE BIT
LX2 59-47
PL X2,RNM1.0 IF TRANS NOT SET
SA2 OPTR2 RESTORE POINTERS FOR TRANS DATA
SA3 IPTR2
BX6 X2
LX7 X3
SA6 R+3
SA7 R+2
EQ RTM6 SWITCH TO TRANS MODE
RNM1.0 RJ NLT WRITE NO LINE TERMINATOR DATA TO BUFFER
SX0 B1 READ FILE
BX7 X7-X7 SET NO PARTIAL RECORD
SX5 READ11 RETURN ADDRESS ON EOF
RJ SUBEO
EQ RNM0 READ NEXT BUFFER LOAD
RNM1.1 SA1 LCNT INCREMENT LINE COUNT
SX6 X1+B1
SA6 A1
SA1 BUF SET STARTING ADDRESS
RJ CSF CHECK SPECIAL FORMAT
NZ B2,RNM2 IF SPECIAL FORMAT
RJ SSN STRIP SEQUENCE NUMBER
SB6 A1 SAVE BEGINNING ADDRESS AFTER STRIPPING
SB3 B2 SAVE BEGINNING ADDRESS BEFORE STRIPPING
RJ CSF CHECK SPECIAL FORMAT AFTER STRIPPING
ZR B2,RNM3 IF NOT SPECIAL FORMAT
RNM2 SX7 RNM1 SAVE RETURN ADDRESS
SA7 RJ
JP B2 PROCESS SPECIAL FORMAT
RNM3 SA2 FLAGS TEST TRANS BIT
LX2 12D
PL X2,RNM4 TRANS NOT SET
SA1 OPTR2 RESTORE *IN* AND *OUT* POINTERS
SA2 IPTR2
BX6 X1
LX7 X2
SA6 R+3
SA7 R+2
EQ RTM6 SWITCH TO TRANS MODE
RNM4 SB2 BUF+BUFL
SA2 FLAGS TEST NOSEQ BIT
PL X2,RNM5 STRIP SEQUENCE NUMBERS
SB6 B3 NO SEQUENCE NUMBER STRIPPING
RNM5 SB7 B2-B6 CALCULATE WRITE LENGTH
WRITES F,B6,B7
EQ RNM1 LOOP TO NEXT RECORD
RTM SPACE 4,10
** RTM - PROCESS TRANSPARENT READ MODE.
*
* USES A - 1, 2, 3, 6, 7.
* B - 3, 6.
* X - 0, 1, 2, 3, 5, 6, 7.
*
* CALLS CSF, SSN, SUBEO, SUBUFR, SUBUFS.
*
* MACROS READ, READS, READW, RECALL, WRITEW.
RTM BSS 0 ENTRY
RTM0 READ R,R READ NEXT BUFFER LOAD
RECALL F
RTM1 SA1 R+3 SAVE OUTPTR(R)
BX6 X1
SA6 OPTR2
SA1 X6 CHECK FOR END OF LINE BYTE
MX7 -12
BX7 -X7*X1
NZ X7,RTM5 IF NOT A POSSIBLE SPECIAL FORMAT DIRECTIVE
READS R,BUF,BUFL READ UNIT RECORD FROM READ FILE
ZR X1,RTM2 IF NO EOF/EOI
SX0 B1 READ FILE
SX7 B0 NO PARTIAL RECORD
SX5 READ11 RETURN ADDRESS ON EOF
RJ SUBEO
EQ RTM0 READ NEXT BUFFER LOAD
RTM2 SA1 LCNT INCREMENT LINE COUNT
SX6 X1+B1
SA6 A1
SA1 BUF SET STARTING ADDRESS
RJ CSF CHECK SPECIAL FORMAT (BEFORE STRIPPING)
NZ B2,RTM4 IF SPECIAL FORMAT
RJ SSN STRIP SEQUENCE NUMBER
SB6 A1 SAVE BEGINNING ADDRESS AFTER STRIPPING
SB3 B2 SAVE BEGINNING ADDRESS BEFORE STRIPPING
RJ CSF CHECK SPECIAL FORMAT (AFTER STRIPPING)
ZR B2,RTM5 IF NOT SPECIAL FORMAT
RTM4 SX7 RTM1 SAVE RETURN ADDRESS
SA7 RJ
JP B2 PROCESS SPECIAL FORMAT
RTM5 SA2 FLAGS TEST FOR TRANS BIT SET
LX2 12D
SA3 OPTR2 RESTORE OUT POINTER
BX6 X3
SA6 R+3
PL X2,RNM1 IF NOT SET, SWITCH TO NON-TRANSPARENT MODE
RTM6 READW R,BUF,BUFL
RJ SUBUFS SET BUF LENGTH
ZR X1,RTM7 IF NO EOR/EOF/EOI
SX0 B1 READ FILE
SX7 B1 PARTIAL RECORD
SX5 READ11 SET RETURN ON EOI OR EOF
RJ SUBEO
EQ RTM0 READ NEXT BUFFER LOAD
RTM7 WRITEW F,BUF,BUFL
RJ SUBUFR RESET BUF LENGTH TO 0
EQ RTM6 LOOP
ESCAPE SPACE 4,10
** ESCAPE - PROCESS NEW ESCAPE CODE.
ESCAPE BSS 0
SA1 A2 PICK UP NEW ESCAPE CODE
LX1 54D
SA2 TCCF
MX3 -54
ESCAPE1 BX2 -X3*X2
IX7 X2+X1 PLANT NEW ESCAPE CODE
SA7 A2
SA2 A2+B1
NZ X2,ESCAPE1
SA2 RJ
SB2 X2
JP B2 RETURN
TITLE TABLES.
TCCF SPACE 4,10
** TCCF - TABLE OF DIRECTIVE FORMATS.
TCCF BSS 0
CON 4L/JOB+JOB
CON 7L/CHARGE+CHARGE
CON 4L/EOF+EOF
CON 4L/EOR+EOR
CON 6L/NOSEQ+NOSEQ
CON 4L/SEQ+SEQ
CON 6L/TRANS+TRANS
CON 8L/NOTRANS+NOTRANS
CON 7L/NOPACK+NOPACK
CON 5L/PACK+PACK
CON 5L/USER+USER
TCCFR CON 5L/READ+READ
TCCFW CON 7L/REWIND+REWIND
TCCFE CON 4L/EC=+ESCAPE
CON 0
NOFIL DATA 20H NO READ FILE FOUND-
DATA 0
BSFIL DATA 20H READ FILE BUSY-
DATA 0
SPACE 4,10
TCCFL DATA 74000000000000000044B /JOB LENGTH
DATA 77400000000000000022B /CHARGE LENGTH
DATA 74000000000000000044B /EOF LENGTH
DATA 74000000000000000044B /EOR LENGTH
DATA 77000000000000000030B /NOSEQ LENGTH
DATA 74000000000000000044B /SEQ LENGTH
DATA 77000000000000000030B /TRANS LENGTH
DATA 77600000000000000014B /NOTRANS LENGTH
DATA 77400000000000000022B /NOPACK LENGTH
DATA 76000000000000000036B /PACK LENGTH
DATA 76000000000000000036B /USER LENGTH
DATA 76000000000000000036B /READ LENGTH
DATA 77400000000000000022B /REWIND LENGTH
DATA 74000000000000000044B /EC= LENGTH
CON 0
TITLE COMMON DECKS.
* COMMON DECKS.
*CALL COMCCIO
*CALL COMCCPM
*CALL COMCLFM
*CALL COMCPFM
*CALL COMCRDS
*CALL COMCRDW
*CALL COMCSNM
*CALL COMCSFM
*CALL COMCSSN
*CALL COMCSYS
*CALL COMCWTC
*CALL COMCWTS
*CALL COMCWTW
*CALL COMSPFM
*CALL COMSPRD
*CALL COMSSSJ
SSJB SPACE 4,10
* SPECIAL SYSTEM JOB PARAMETER AREA.
SSJ= EQU 0
PFPB SPACE 4,10
* PERMANENT FILE PARAMETER BLOCK.
PFPB BSSZ 3
TITLE BUFFERS.
* BUFFERS.
USE //
SEG
BUF SPACE 4,10
BUF EQU *
IBUF EQU BUF+BUFL
FBUF EQU IBUF+IBUFL
RBUF EQU FBUF+FBUFL
SBUF EQU RBUF+RBUFL
TBUF EQU SBUF+SBUFL
WBUF EQU TBUF+TBUFL
RFL= EQU WBUF+WBUFL
PRS TITLE PRESET.
PRS SPACE 4,10
** PRS - PRESET PROGRAM.
ORG BUF
PRS SUBR ENTRY/EXIT
GETPFP PFPB GET PERMANENT FILE PARAMETERS
SX6 RBUF SET *PFM* ERROR MESSAGE ADDRESS
SA6 RR+CFPW
RJ SCC SET CONTROL CHARACTER
SA1 FWPR
MX2 -6
AX1 24
BX2 -X2*X1
SX6 X2-IAOT
SB7 B0 INITIALIZE QUEUE FLAG
NZ X6,PRS1 IF NOT INTERACTIVE
SA1 TPAR+PRSF CHANGE DEFAULT QUEUE
BX6 X1
SA6 PRSE
PRS1 SA1 ACTR CHECK ARGUMENT COUNT
SA4 ARGR
MX0 42
SB4 X1
NZ B4,PRS2 IF ARGUMENTS PRESENT
PRS1.1 SX0 PRSA * NO SOURCE FILE SPECIFIED.*
EQ ABT ABORT JOB
PRS2 SX2 B1 SET SOURCE FILE NAME
BX4 X0*X4
ZR X4,PRS1.1 IF EMPTY FILE NAME
SX0 PRSC * TOO MANY ARGUMENTS.*
SB3 B4-4
GT B3,ABT IF TOO MANY ARGUMENTS
BX6 X4+X2
SB4 B4-B1
SA6 I
PRS2.1 ZR B4,PRS4 IF END OF ARGUMENTS
SA1 TPAR
SA4 A4+1 CHECK QUEUE TYPE
MX0 12
BX6 X0*X4
PRS3 BX2 X0*X1
BX2 X6-X2
ZR X2,PRS3.1 IF MATCH FOUND
SA1 A1+1
NZ X1,PRS3 IF NOT END OF TABLE
LX6 12
SX7 X6-2RNR
SB4 B4-B1
SA7 NRFLG SET NO REWIND FLAG
ZR X7,PRS3.2 IF *NR* OPTION
SX0 PRSB * INCORRECT QUEUE SPECIFIED.*
ZR X6,PRS2.1 IF NO PARAMETER PRESENT
EQ ABT ABORT JOB
PRS3.1 SX0 PRSD * CONFLICTING PARAMETERS.*
NZ B7,ABT IF QUEUE ALREADY SELECTED
SB7 B1
SB4 B4-B1
BX7 X1
MX0 -6
SA7 PRSE
LX1 59-18 CHECK FOR REMOTE QUEUE
BX7 -X0*X4
PL X1,PRS2.1 IF NOT REMOTE QUEUE
MX6 24 SET TID FIELD
LX6 24
SA6 TDSP+2
SX7 X7-1R=
NZ X7,PRS2.1 IF NOT *=* SEPARATOR
SA4 A4+B1 GET USER NAME
MX0 42
BX7 X0*X4
SB4 B4-B1
SA7 TFUN+1
SX0 -TFUN RESET TID FIELD
BX6 X6*X0
SA6 A6
EQ PRS2.1 GET NEXT ARGUMENT
PRS3.2 SX0 PRSC * TOO MANY ARGUMENTS.*
NZ B4,ABT IF ANOTHER ARGUMENT
* SAVE FILE ACCESS LEVEL.
PRS4 SA1 I+1 SET BIT TO RETURN FILE ACCESS LEVEL
MX0 1
LX0 39-59
BX6 X0+X1
SA6 A1
STATUS I,P
SA1 I+CFAL GET ACCESS LEVEL
MX0 -3
LX1 -36
BX6 -X0*X1
SA6 ALVL
SA1 PRSE SET ORIGIN TYPE
ZR X1,PRSX IF NO QUEUE GIVEN AND NOT *IAOT*
MX0 -18
BX3 -X0*X1
SA2 TDSP+1
SX6 FRCS CLEAR PRESET CENTRAL SITE BIT
BX4 -X6*X2
BX7 X4+X3 ADD NEW FLAG BITS
SA7 A2 SET FLAGS
MX0 -12
AX1 36
BX4 -X0*X1
ZR X4,PRSX IF NO DISPOSITION CODE CHANGE
LX0 35-11
BX2 X0*X7
LX4 24
BX7 X2+X4
SA7 A7+ SET DISPOSITION CODE
EQ PRSX RETURN
PRSA DATA C* NO SOURCE FILE SPECIFIED.*
PRSB DATA C* INCORRECT QUEUE SPECIFIED.*
PRSC DATA C* TOO MANY ARGUMENTS.*
PRSD DATA C* CONFLICTING PARAMETERS.*
PRSE CON 0
TPAR SPACE 4,10
** TPAR - PARAMETER CONVERSION TABLE.
*
*T 12/KEYWORD,12/DISP CODE,17/0,1/R,18/FLAGS
*
* R - SET IF REMOTE BATCH TYPE KEYWORD.
* FLAGS - FLAGS TO PRESET IN *DSP* CALL.
TPAR BSS 0
LOC 0
PRSF VFD 12/0LN,12/0LNO,17/0,1/0,18/FRCS
VFD 12/0LB,12/0,17/0,1/0,18/FRCS
VFD 12/0LE,12/0,17/0,1/1,18/FRTI
VFD 12/0LNO,12/0LNO,17/0,1/0,18/FRCS
VFD 12/0LBC,12/0,17/0,1/0,18/FRCS
VFD 12/0LRB,12/0,17/0,1/1,18/FRTI
VFD 12/0LTO,12/0LTO,17/0,1/0,18/FRCS
CON 0 END OF TABLE
LOC *O
PRSG BSSZ 1 *DISSJ* PARAMETER
PRSH BSS 1 USER NAME
SCC SPACE 4,10
** SCC - SET CONTROL CHARACTER.
*
* EXIT CONTROL CHARACTER REPLACED IN *TCCF*.
*
* USES X - 1, 2, 3, 6, 7.
* A - 1, 7.
SCC SUBR ENTRY/EXIT
MX2 -6 SCAN DIRECTIVE
SA1 CCDR
MX3 1
SCC1 LX1 6
BX6 -X2*X1
SX7 X6-1R)
ZR X6,SCCX IF END OF LINE
SX6 X6-1R.
ZR X7,SCC2 IF *)*
ZR X6,SCC2 IF *.*
LX3 6
PL X3,SCC1 LOOP TO END OF WORD
SA1 A1+B1
EQ SCC1
SCC2 LX3 6
PL X3,SCC3 IF NOT END OF WORD
SA1 A1+B1
SCC3 LX1 6
BX6 -X2*X1
SX7 X6-1R
ZR X6,SCCX IF END OF LINE
ZR X7,SCCX IF * *
LX6 54
SA1 TCCF
MX2 -54
SCC4 BX1 -X2*X1 REPLACE CONTROL CHARACTER IN TABLE
IX7 X1+X6
SA7 A1
SA1 A1+B1 GET NEXT TABLE ENTRY
NZ X1,SCC4 IF NOT END OF TABLE
EQ SCCX RETURN
SPACE 4
END