1
0
mirror of https://github.com/PDP-10/stacken.git synced 2026-03-08 03:29:27 +00:00
Files
Lars Brinkhoff 6e18f5ebef Extract files from tape images.
Some tapes could not be extracted.
2021-01-29 10:47:33 +01:00

517 lines
16 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE BATLOG - GALAXY-10 Batch controller log file handler
SUBTTL C.D.O'Toole, D.P.Mastrovito /CDO/DPM 12-SEP-85
;
;
; COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION
; 1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1986,1987.
; ALL RIGHTS RESERVED.
;
;
; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED
; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE
; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS
; SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR
; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO
; AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
;
; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE
; WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT
; BY DIGITAL EQUIPMENT CORPORATION.
;
; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY
; DIGITAL.
SEARCH BATMAC ;BATCON SYMBOLS
SEARCH GLXMAC ;GALAXY SYMBOLS
SEARCH QSRMAC ;QUASAR SYMBOLS
SEARCH ORNMAC ;ORION SYMBOLS
PROLOG (BATLOG) ;SET UP
%%.BAT==:%%.BAT ;FORCE VERSION INTO SYMBOL TABLE
TOPS10 <IF1,<PRINTX [Assembling GALAXY-10 BATLOG]>>
TOPS20 <IF1,<PRINTX [Assembling GALAXY-20 BATLOG]>>
GLOB <G$STRM,G$TIME,G$TMTX>
SUBTTL Table of contents
; TABLE OF CONTENTS FOR BATLOG
;
;
; SECTION PAGE
; 1. Table of contents......................................... 2
; 2. L$HEAD - Log file header.................................. 3
; 3. L$OUTC - Put a character in the log file.................. 4
; 4. L$OPEN - Open a log file.................................. 5
; 5. OPNERR - Log file open error routine...................... 6
; 6. L$IOER - Log file I/O error routine....................... 7
; 7. Log file disposition...................................... 8
; 8. NEWLOG - Generate a new log file name..................... 9
; 9. L$PLOG - Put a character in the log file with formatting.. 10
; 10. L$CHKP - Checkpoint the log file.......................... 11
; 11. Copy text into log file with special time stamps.......... 12
; 12. Miscellaneous routines.................................... 13
; 13. End....................................................... 14
SUBTTL L$HEAD - Log file header
; Put a header at the top of the log file
;
L$HEAD::PUSHJ P,HDRPAG ;SET UP THE HEADER PAGE
GETLIM S2,.JQLIM(R),UNIQ ;GET UNIQUE VALUE
MOVEI P1,[ASCIZ/No/] ;ASSUME NO
CAIE S2,%EQUNO ;IS IT UNIQUE
MOVEI P1,[ASCIZ/Yes/] ;YES, SAY SO
MOVEI P2,[ASCIZ/No/] ;ASSUME NOT RESTARTABLE
GETLIM S2,.JQLIM(R),REST ;GET RESTART FIELD
SKIPN S1,.JBCRQ(R) ;ANY CHECKPOINT INFO
SKIPA ;NO..CHECK VALUE NOW
TXNN S1,<BA.ORQ!BA.URQ!BA.CHK> ;WAS IT REQ OR CHKPNT
CAIE S2,%EQRNO ;CHECK IF RESTARTABLE
MOVEI P2,[ASCIZ/Yes/] ;RESTARTABLE.. SAY YES
MOVEI T4,[ASCIZ/Log/] ;DEFAULT TO LOG
GETLIM S1,.JQLIM(R),OUTP ;GET OUPUT VALUE
CAIN S1,%EQOLE ;/OUT:ERROR
MOVEI T4,[ASCIZ/Error/] ;YES
CAIN S1,%EQONL ;/OUT:Nolog
MOVEI T4,[ASCIZ/Nolog/] ;YES
GETLIM S1,.JQLIM(R),TIME ;GET TIME LIMIT
PUSHJ P,B$STIM## ;CONVERT TO READABLE TEXT
GETLIM S1,.JQLIM(R),BLOG ;GET LOG OPTIONS FOR WRITING
MOVEI S2,[ASCIZ/Append/] ;DEFAULT IS APPEND
CAIN S1,%BAPND ;APPEND..
JRST HEAD.1 ;YES
CAIN S1,%BSCDE ;SUPERSEDE
MOVEI S2,[ASCIZ/Supersede/] ;SET TO SUPERSEDE
CAIN S1,%BSPOL ;OR CREATE IN SPOOL AREA
MOVEI S2,[ASCIZ/Spool /] ;SET SPOOL
HEAD.1: GETLIM S1,.JQLIM(R),OINT ;OPERATOR INTERVENTION FIELD
MOVEI P4,[ASCIZ/Yes/] ;ALLOWED..DEFAULT
CAIE S1,.OPINY ;YES
MOVEI P4,[ASCIZ/No/] ;NOT ALLOWED
MOVEI P3,[ITEXT (<Default>)] ;ASSUME NO CORE LIMIT
SKIPE G$CORE## ;CORE LIMITS ENFORCED ?
MOVEI P3,[ITEXT (<^D/.JQLIM+1(R),LHMASK/ pages>)] ;YES
$TEXT (L$PHDR,< ^H/[-1]/
BATCON Version ^V/[%%.BAT]/ GLXLIB Version ^V/[GLXVRS]/
^R/.JQJBB(R)/ in stream ^D/G$STRM(S)/
OUTPUT: ^T/(T4)/^T/TAB4/TIME-LIMIT: ^T/G$TMTX/
UNIQUE: ^T/(P1)/^T/TAB4/BATCH-LOG: ^T/(S2)/
RESTART: ^T/(P2)/^T/TAB4/ASSISTANCE: ^T/(P4)/
CORE: ^I/(P3)/^T/TAB3/SEQUENCE: ^D/.JQJBB+JIB.SQ(R),JB.SEQ/
>)
MOVEI T1,[ITEXT (<>)] ;ASSUME NOT /DISPOSE:RENAME FOR CTL
MOVEI T2,[ITEXT (<>)] ;ASSUME NOT /DISPOSE:RENAME FOR LOG
TOPS10 < ;TOPS-10 ONLY
MOVX S1,FP.REN ;GET RENAMED BIT
TDNE S1,.JQCFP+.FPINF(R) ;IS IT LIT FOR CTL ?
MOVEI T1,[ITEXT (< (^W/.JQCFP+.FPONM(R)/.^W/.JQCFP+.FPOXT(R)/)>)]
TDNE S1,.JQLFP+.FPINF(R) ;IS IT LIT FOR LOG ?
MOVEI T2,[ITEXT (< (^W/.JQLFP+.FPONM(R)/.^W/.JQLFP+.FPOXT(R)/)>)]
> ;END OF TOPS-10 CONDITIONAL
TXNN F,FL.KST ;KSYS STREAM?
$TEXT (L$PHDR,<
Control file: ^F/.JQCFD(R)/^I/(T1)/^A>)
$TEXT (L$PHDR,<
Log file: ^F/.JQLFD(R)/^I/(T2)/
>)
PUSHJ P,U$LOGH## ;APPEND ANY SPECIAL CUSTOMER TEXT
$RETT ;RETURN
TAB3: ASCIZ/ / ;3 TABS
TAB4: ASCIZ/ / ;4 TABS
; Set up the log file header page
;
HDRPAG: $CALL M%GPAG ;GET A PAGE
MOVEM S1,.JLHDR(R) ;REMEMBER IT
HRLI S1,(POINT 7) ;MAKE A BYTE POINTER
MOVEM S1,G$TPTR## ;SAVE IT
MOVEI S1,<PAGSIZ*5>-1 ;COMPUTE CHARACTER COUNT
MOVEM S1,G$TCTR## ;SAVE IT
POPJ P, ;RETURN
; Store a character in the log file header page
;
L$PHDR::SOSLE G$TCTR## ;COUNT
IDPB S1,G$TPTR## ;SAVE CHARACTER
$RETT ;Return
SUBTTL L$OUTC - Put a character in the log file
L$OUTC::TXNN R,RL.NLG ;LOG FILE AVAILABLE ?
SKIPN .JLIFN(R) ;IS LOG FILE OPENED ?
$RETT ;NOPE
PUSH P,S1 ;SAVE S1
PUSH P,S2 ;SAVE S2
MOVE S2,S1 ;COPY CHARACTER
MOVE S1,.JLIFN(R) ;GET THE IFN
$CALL F%OBYT ;OUTPUT CHARACTER
SKIPT ;OUTPUT ERROR?
MOVEM S1,.JLECD(R) ;SAVE ERROR CODE
POP P,S2 ;RESTORE S2
POP P,S1 ;RESTORE S1
SKIPF ;ANY ERRORS ?
$RETT ;NO
TXO R,RL.NLG ;MARK LOG FILE UNAVAILABLE
TXZ R,RL.OPR!RL.DIA ;CLEAR SOME FLAGS
$RETF ;RETURN FALSE
SUBTTL L$OPEN - Open a log file
L$OPEN::MOVEI S1,.JQLFD(R) ;GET LOG FILE DESCRIPTOR BLOCK
MOVEM S1,FOB.FD+.JLFOB(R) ;STORE IT
MOVEI S1,7 ;7 BIT BYTES
MOVEM S1,FOB.CW+.JLFOB(R) ;STORE CONTROL WORD
MOVE S1,.JQLFP+.FPINF(R) ;GET FILE PARAMETERS
TXNE S1,FP.SPL ;IS THE SPOOL BIT ON ?
JRST OPEN.1 ;YES - SKIP IN BEHALF STUFF
TOPS10 < ;TOPS-10 ONLY
MOVEI S1,.JLFAB(R) ;POINT TO FILE ATTRIBUTE BLOCK
MOVEM S1,FOB.AB+.JLFOB(R) ;SAVE
MOVEI S1,3 ;THREE WORDS
MOVEM S1,.JLFAB+0(R) ;SAVE IN FAB
MOVE S1,[10,,.FIACT] ;10 WORDS,,ACCOUNT STRING
MOVEI S2,.JQACT(R) ;POINT TO STRING
DMOVEM S1,.JLFAB+1(R) ;SAVE
MOVE S1,.JQPPN(R) ;GET USER'S PPN IN BEHALF
MOVEI S2,0 ;FOR CONSISTANCY
> ;END OF TOPS-10 CONDITIONAL
TOPS20 < ;TOPS-20 ONLY
HRROI S1,.JQNAM(R) ;GET POINTER TO USER'S NAME
HRROI S2,.JQCON(R) ;GET POINTER TO CONNECTED DIRECTORY
> ;END OF TOPS-20 CONDITIONAL
MOVEM S1,FOB.US+.JLFOB(R) ;SAVE PPN OR USER NAME POINTER
MOVEM S2,FOB.CD+.JLFOB(R) ;SAVE CONNECTED DIRECTORY (TOPS20 ONLY)
MOVX S1,FOB.SZ ;GET FILE OPEN BLOCK SIZE
MOVX T1,EQ.PRV ;LOAD PRIVILEGE FLAG
TDNE T1,.JQJBB+JIB.SQ(R) ;WAS IT SET ?
OPEN.1: MOVX S1,FOB.MZ ;USE MINIMUM SIZE BLOCK
MOVEI S2,.JLFOB(R) ;POINT TO THE FILE OPEN BLOCK
MOVX T1,<$CALL F%AOPN> ;ASSUME /BATLOG:APPEND
SKIPE T2,.JBCRQ(R) ;BATCH JOB RESTARTED ?
JRST OPEN.2 ;YES - ALWAYS APPEND TO EXISTING FILE
GETLIM T2,.JQLIM(R),BLOG ;GET VALUE OF /BATLOG
CAIN T2,%BSCDE ;WAS IT SUPERCEDE ?
MOVX T1,<$CALL F%OOPN> ;YES - DO A SUPERCEDING OPEN
OPEN.2: XCT T1 ;OPEN THE LOG FILE
JUMPF OPNERR ;LOG FILE ERROR
MOVEM S1,.JLIFN(R) ;SAVE IFN
TOPS10 < ;TOPS-10 ONLY
MOVX S2,-1 ;WE WANT THE EXACT FD
$CALL F%FD ;GET IT
MOVE S2,.FDSTR(S1) ;GET THE STRUCTURE NAME
SKIPF ;SHOULD NEVER HAPPEN BUT...
MOVEM S2,.JQLFD+.FDSTR(R) ;SET IT
> ;END OF TOPS-10 CONDITIONAL
TOPS20 < ;TOPS-20 ONLY
MOVX S2,FI.CHN ;LOAD A FUNCTION CODE
$CALL F%INFO ;GET THE CHANNEL NUMBER
HRROI S2,.JQACT(R) ;POINT TO THE ACCOUNT STRING
SACTF ;SET THE ACCOUNT FOR THE USER
JFCL ;IGNORE ERRORS
> ;END OF TOPS-20 CONDITIONAL
OPEN.3: MOVE S1,.JLIFN(R) ;GET THE IFN
MOVX S2,FI.SIZ ;LOAD FUNCTION CODE
$CALL F%INFO ;GET FILE SIZE
MOVEI T1,[ITEXT (<>)] ;ASSUME FILE IS EMPTY
SKIPE S1 ;FILE ALREADY EXIST ?
MOVEI T1,[ITEXT (<^M^L^A>)] ;SEPARATE DATA FROM PREVIOUS STREAM
$TEXT (L$OUTC,<^I/(T1)/^T/@.JLHDR(R)/^A>) ;WRITE LOG FILE HEADER
MOVE S1,.JLHDR(R) ;GET HEADER PAGE ADDRESS
$CALL M%RPAG ;DESTROY THE PAGE
TOPS10 < ;TOPS-10 ONLY
MOVE T2,.JQLFD+.FDSTR(R) ;GET THE LOG FILE DEVICE
CAMN T2,[SIXBIT/NUL/] ;IS IT NUL: ?
> ;END OF TOPS-10 CONDITIONAL
TOPS20 < ;TOPS-20 ONLY
MOVE T2,.JQLFD+.FDFIL(R) ;GET THE LOG FILE DEVICE
AND T2,[-1,,777400] ;WAS IT NUL: ?
CAMN T2,[ASCII /NUL:/] ;IS IT "NUL"?
> ;END OF TOPS-20 CONDITIONAL
TXO F,FL.NUL ;YES - REMEMBER IT
MOVE S1,.JLIFN(R) ;GET THE IFN BACK
$RETT ;AND RETURN
SUBTTL OPNERR - Log file open error routine
OPNERR: TXOE F,FL.LFE ;BEEN HERE BEFORE ?
JRST OPNE.1 ;YES - ONCE IS ENOUGH
$WTO (<Batch error>,<^R/.JQJBB(R)/^I/OPNTXT/>,.JQOBJ(R),<$WTNOD(.JQLOC(R))>)
$IDHDR (BATLOE,<? Batch log file error - ^I/LOGERR/^A>)
PUSHJ P,L$GENL ;GENERATE A NEW LOG FILE NAME
MOVX S1,FP.DEL!FP.SPL ;GET DELETE AND SPOOL BITS
IORM S1,.JQLFP+.FPINF(R) ;STORE IN FLAG WORD
PUSHJ P,L$OPEN ;TRY TO OPEN THE TEMPORARY LOG FILE
$IDENT (BATTLF,<[A temporary log file ^F/.JQLFD(R)/ will be created printed and deleted]>)
MOVX S1,%EQOLG ;FORCE /OUTPUT:LOG
STOLIM S1,.JQLIM(R),OUTP ;STORE NEW VALUE
JRST OPNE.2 ;GO TO COMMON ENDING
OPNE.1: $WTO (<Batch error>,<^R/.JQJBB(R)/^I/FNDLMS/>,.JQOBJ(R),<$WTNOD(.JQLOC(R))>)
OPNE.2: TXZ R,RL.OPR!RL.DIA ;CLEAR SOME POSSIBLE FLAGS
TXO R,RL.JIE ;MARK JOB IN ERROR
PJRST CLOSJB## ;DISMISS THE JOB
OPNTXT: ITEXT (<^M^J^I/LOGERR/
A temporary log file will be created, printed and
deleted for this user. The job will be canceled.>)
FNDLMS: ITEXT (<
Log error recovery failed
^I/LOGERR/>)
LOGERR:: ITEXT (<^E/[-1]/ for ^F/.JQLFD(R)/>)
SUBTTL L$IOER - Log file I/O error routine
; This routine is called whenever log file error checking occurs
;
L$IOER::$WTO (<Batch error>,<^R/.JQJBB(R)/^I/LOETXT/>,.JQOBJ(R),<$WTNOD(.JQLOC(R))>)
JRST CLOSJB## ;DISMISS THE JOB
LOETXT: ITEXT (<
Log file output error for ^F/.JQLFD(R)/; ^E/.JLECD(R)/>)
SUBTTL Log file disposition
; Delete an unopened log file
;
L$DLET::MOVEI S1,FOB.SZ ;GET FOB SIZE
MOVEI S2,.JLFOB(R) ;GET FOB ADDRESS
$CALL F%DEL ;DELETE THE FILE
JUMPT .POPJ ;RETURN UNLESS AN ERROR OCCURED
$WTO (<Batch error>,<^R/.JQJBB(R)/^I/DELTXT/>,.JQOBJ(R),<$WTNOD(.JQLOC(R))>)
POPJ P, ;RETURN
DELTXT: ITEXT (<^M^J
Cannot delete log file ^F/.JQLFD(R)/; ^E/[-1]/>)
; Reset and close log file
;
L$RREL::SKIPA S2,[F%RREL] ;RESET/CLOSE ROUTINE
; Close log file
;
L$CLOS::MOVX S2,F%REL ;CLOSE ROUTINE
CLOS.1: SKIPN S1,.JLIFN(R) ;WAS THE FILE OPENED ?
$RETT ;NO - JUST RETURN
$CALL (S2) ;CLOSE THE FILE
SETZM .JLIFN(R) ;MARK IFN CLOSED
SKIPT ;ERRORS CLOSING CHANNEL OR JFN ?
$WTO (<Batch error>,<^R/.JQJBB(R)/^I/CLSTXT/>,.JQOBJ(R),<$WTNOD(.JQLOC(R))>)
$RETT ;RETURN
CLSTXT: ITEXT (<
Errors closing ^F/.JQLFD(R)/>)
SUBTTL L$GENL - Generate a new log file name
L$GENL::
TOPS10 <MSTIME S1,> ;GET LOTS OF PRECISION
TOPS20 <$CALL I%NOW> ;GET CURRENT UDT
AND S1,[000707,,070707] ;MAKE IT NUMERIC
TDO S1,[SIXBIT/B00000/] ;TURN ON SOME BITS
TOPS10 < ;TOPS-10 ONLY
MOVEM S1,.JQLFD+.FDNAM(R) ;SAVE FILE NAME
MOVSI S1,'LOG' ;GET EXTENSION
MOVEM S1,.JQLFD+.FDEXT(R) ;SAVE IT
MOVE S2,[%LDQUS] ;GET QUEUE STRUCTURE
GETTAB S2, ;FROM THE MONITOR
MOVSI S2,'SSL' ;DEFAULT
MOVEM S2,.JQLFD+.FDSTR(R) ;STORE IT
MOVE S2,G$SPLD## ;GET PPN OF SPOOLED FILE AREA
MOVEM S2,.JQLFD+.FDPPN(R) ;STORE IT
SETZM .JQLFD+.FDPAT(R) ;TERMINATE PATH
MOVX S2,FDMSIZ ;GET FD LENGTH
STORE S2,.JQLFD+.FDLEN(R),FD.LEN ;SAVE IT
POPJ P, ;RETURN
> ;END OF TOPS-10 CONDITIONAL
TOPS20 < ;TOPS-20 ONLY
HRLI S2,(POINT 7,0) ;MAKE A BYTE POINTER
HRRI S2,.JQLFD+1(R) ;TO BUILD THE FILE SPEC
MOVEM S2,G$TPTR## ;SAVE IT
$TEXT (FILNAM,<PS:[SPOOL]^W/S1/.LOG^0>) ;STORE B?????
HRRZ S2,G$TPTR## ;GET LAST ADDRESS IN THE FILESPEC
SUBI S2,.JQLFD-1(R) ;ADJUST THE LENGTH OF THE BLOCK
STORE S2,.JQLFD(R),FD.LEN ;STORE IT
POPJ P, ;RETURN
> ;END OF TOPS-20 CONDITIONAL
; Character storage for TOPS-20 L$GENL
;
FILNAM: IDPB S1,G$TPTR## ;STORE THE BYTE
$RETT ;RETURN
SUBTTL L$PLOG - Put a character in the log file with formatting
; This routine will convert control characters to up-arrow format
; and handle overprinting
;
L$PLOG::CAIL S1," " ;A CONTROL CHARACTER ?
JRST PLOG.1 ;NO - JUST OUTPUT IT NORMALLY
CAXG S1,.CHCRT ;CODES .CHTAB - .CHCRT ARE IMAGE OUTPUT
CAXGE S1,.CHTAB ;LINE PRINTERS KNOW ABOUT THOSE
SKIPA ;NOT ONE OF THOSE
JRST PLOG.1 ;JUST OUTPUT THE CHARACTER
HRLM S1,(P) ;SAVE CHARACTER
MOVEI S1,"^" ;GET AN UP-ARROW
PUSHJ P,PLOG.1 ;LOG IT
HLRZ S1,(P) ;GET THE CHARACTER
MOVEI S1,100(S1) ;MAKE IT READABLE ASCII
PUSHJ P,PLOG.1 ;OUTPUT IT
HLRZ S1,(P) ;GET THE ORIGINAL AGAIN
POPJ P, ;RETURN
PLOG.1: TXZN F,FL.CFP ;WAS LAST CHARACTER A <CR> ?
JRST PLOG.2 ;NO - JUST LOG IT
CAXG S1,.CHFFD ;CHECK FOR <CR> NOT FOLLOWED BY EOL
CAXGE S1,.CHLFD ;SAME CHECK AS BELOW FOR TIME STAMP
SKIPA ;NOT VERTICAL MOTION
JRST PLOG.3 ;OUTPUT THE MOTION CHARACTER
PUSH P,S1 ;SAVE CHARACTER
MOVX S1,.CHTAB ;GET A <TAB>
PUSHJ P,L$OUTC ;LOG IT
PUSHJ P,L$OUTC ;AGAIN
POP P,S1 ;RESTORE CHARACTER
JRST PLOG.3 ;ONWARD
PLOG.2: CAIG S1,.CHFFD ;WAS IT A VERTICAL
CAIGE S1,.CHLFD ; MOTION CHARACTER ?
JRST PLOG.3 ;NOPE
PUSH P,S1 ;SAVE CHARACTER
MOVEI S1,.CHCRT ;GET <CR>
PUSHJ P,L$OUTC ;LOG IT
POP P,S1 ;RESTORE CHARACTER
PUSHJ P,L$OUTC ;OUTPUT THE CHARACTER
$RETT ;AND RETURN
PLOG.3: SKIPE .JLTIM(R) ;NEED A TIME STAMP
PUSHJ P,L$LSTP ;YES, DO IT
CAIN S1,.CHCRT ;IS THIS A CARRAIGE RETURN
TXO F,FL.CFP ;YES - MARK FOR OVERPRINTING
PUSHJ P,L$OUTC ;OUTPUT THE CHARACTER
CAXG S1,.CHFFD ;CHECK IF IT WAS VERTICAL PAPER MOTION
CAXGE S1,.CHLFD ;THOSE CAUSE A TIME STAMP
$RETT ;NO MOTION..RETURN
SETOM .JLTIM(R) ;NEXT LINE NEEDS A TIME STAMP
$RETT ;RETURN
SUBTTL L$CHKP - Checkpoint the log file
L$CHKP::SKIPN S1,.JLIFN(R) ;IS LOG FILE OPEN ?
POPJ P, ;NO - IGNORE REQUEST
$CALL F%CHKP ;CHECKPOINT THE FILE
SKIPF ;CAN'T
$RETT ;RETURN
MOVEM S1,.JLECD(R) ;SAVE ERROR CODE
$WTO (<Batch error>,<^R/.JQJBB(R)/^I/CHKTXT/>,.JQOBJ(R),<$WTNOD(.JQLOC(R))>)
TXO R,RL.NLG ;NO LOG FILE AVAILABLE
$RETF ;RETURN FALSE
CHKTXT: ITEXT (<
Log file checkpoint failure.
^I/LOGERR/
Job canceled.>)
SUBTTL Copy text into log file with special time stamps
; This routine will copy any text into the log file and stamp each line.
; Call: MOVE S1,$IDENT instruction to stamp line
; MOVE S2,byte pointer to or address of text
; PUSHJ P,L$COPY
;
L$COPY::$SAVE <P1,P2> ;SAVE SOME ACS
DMOVE P1,S1 ;COPY $IDENT AND BYTE POINTER
HLRE S1,P2 ;GET LH
CAIE S1,0 ;JUST ADDRESS OF TEXT ?
CAMN S1,[-1] ;OR TOPS-20 JUNK (-1,,ADDR) ?
HRLI P2,(POINT 7) ;MAKE IT A BYTE POINTER
COPY.1: MOVE S2,P2 ;GET BYTE POINTER
ILDB S1,S2 ;LOOK AT NEXT CHARACTER
JUMPE S1,.POPJ ;NO STAMP IF NO MORE CHARACTERS
XCT P1 ;STAMP LINE
COPY.2: ILDB S1,P2 ;GET A CHARACTER
JUMPE S1,.POPJ ;DONE ?
CAIG S1,.CHFFD ;CHECK FOR <LF>, <VT>
CAIGE S1,.CHLFD ; OR <FF>
SKIPA ;NOT EOL
JRST COPY.1 ;STAMP LINE
CAIG S1,"Z"+40 ;ONLY ALLOW
CAIGE S1," " ; PRINTING CHARACTERS
JRST COPY.2 ;LOOP FOR MORE
PUSHJ P,L$OUTC ;LOG IT
JRST COPY.2 ;LOOP FOR MORE
SUBTTL Miscellaneous routines
; Add time stamp and line identifier
;
L$LSTP::SETZM .JLTIM(R) ;CLEAR TIME STAMP NEEDED FLAG
TXNE J,JL.UML ;JOB AT MONITOR LEVEL ?
$TEXT (L$OUTC,<^T/G$TIME/ MONITR ^A>)
TXNN J,JL.UML ;JOB AT USER LEVEL ?
$TEXT (L$OUTC,<^T/G$TIME/ USER ^A>)
POPJ P, ;RETURN
; Add a CRLF
;
L$CRLF::MOVX S1,.CHCRT ;THE CARRIAGE RETURN
PUSHJ P,L$PLOG ;OUTPUT IT
MOVX S1,.CHLFD ;AND THE LINE FEED
PJRST L$PLOG ;AND EXIT THROUGH PUTLOG
; Add a TAB
;
L$LTAB::MOVX S1,.CHTAB ;AND ANOTHER ONE
PJRST L$PLOG ;OUTPUT THE PERIOD
SUBTTL End
END