mirror of
https://github.com/PDP-10/stacken.git
synced 2026-02-28 17:09:15 +00:00
1149 lines
40 KiB
Plaintext
1149 lines
40 KiB
Plaintext
TITLE LNKLOG - LOG/ERROR MODULE FOR LINK
|
||
SUBTTL D.M.NIXON/DMN/JLd/JNG/DZN/PY/PAH/JBS/HD/RJF 5-Feb-88
|
||
|
||
|
||
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1973,1986,1988.
|
||
; 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 LNKPAR,LNKLOW,OVRPAR,MACTEN,UUOSYM,SCNMAC
|
||
IFN TOPS20,<SEARCH MONSYM> ;[2257]
|
||
SALL
|
||
|
||
ENTRY LNKLOG
|
||
EXTERN .TYOCH,LNKSCN,LNKERR
|
||
|
||
|
||
CUSTVR==0 ;CUSTOMER VERSION
|
||
DECVER==6 ;DEC VERSION
|
||
DECMVR==0 ;DEC MINOR VERSION
|
||
DECEVR==2417 ;DEC EDIT VERSION
|
||
|
||
|
||
SEGMENT
|
||
SUBTTL REVISION HISTORY
|
||
|
||
|
||
;START OF VERSION 1A
|
||
;64 MAKE LNK999 BE USEFUL
|
||
;71 MAKE CONTINUE MESSAGE STANDARD FORM
|
||
;103 SAVE BOTH HALVES OF FL ON EDITED LOOKUP ERROR
|
||
|
||
;START OF VERSION 2
|
||
;135 ADD OVERLAY CAPABILITY
|
||
;146 (12860) MAKE S%E ENTER ERRORS FATAL (S%F)
|
||
|
||
;START OF VERSION 2B
|
||
;277 Don't clobber stack contents on editable error
|
||
;420 Always output a "[" when expected to.
|
||
;434 Don't clear OFFSET and OSCANF when doing an edit.
|
||
|
||
;START OF VERSION 2C
|
||
;464 Make .TEBLK internal for LNKLOG.
|
||
;473 Delete all .TMP files before exiting on a fatal error.
|
||
;557 Clean up the listing for release.
|
||
|
||
;START OF VERSION 3A
|
||
;560 Release on both TOPS-10 and TOPS-20 as LINK version 3A(560)
|
||
|
||
;START OF VERSION 4
|
||
;564 Make LINK assemble with MACRO 52.
|
||
;605 Use OUTSTR's to TTY whenever possible.
|
||
;625 Support .EB (Print blank line in log)
|
||
;634 Never delete input file on a fatal error.
|
||
;637 Always print the continuation error message in batch jobs.
|
||
;650 Use VM on TOPS-10 if available.
|
||
;657 Setup IO.EMG before deleting temp files on an error.
|
||
;731 SEARCH MACTEN,UUOSYM
|
||
;765 Release on both TOPS-10 and TOPS-20 as LINK version 4(765)
|
||
|
||
;START OF VERSION 4A.
|
||
;1144 Support .EN (no message specified with .ETC.).
|
||
;1174 Label and clean up all error messages. Remove most of edit 1144. Support
|
||
; .ETC. codes RTN, NLN, XCT, BKL, DAT and NOP. Support S%C. Clean up the
|
||
; listing.
|
||
;1202 Make S%E severity on code I messages work after edit 1174.
|
||
;1212 Make indexed LRE messages 7 and 10 consistent with others, fix missing
|
||
; space in LRE messages.
|
||
;1217 Clean up the listings for release.
|
||
;1220 Release on both TOPS-10 and TOPS-20 as version 4A(1220).
|
||
;START OF VERSION 4B.
|
||
;1301 Use bits for verbosity, Don't always print prefix or tabs.
|
||
;1311 Fix problem with edit 1301.
|
||
;1331 Fix BKL to check more carefully for log file.
|
||
;START OF VERSION 5
|
||
;1400 Use OVRPAR.MAC.
|
||
|
||
;Start of Version 5.1
|
||
|
||
;1535 Invoke LNKMAP after fatal error if /MAP:ERR seen.
|
||
;2005 Get severity and level from stack if S%D used in MS.
|
||
;2026 Update copyright and cleanup listings for release.
|
||
|
||
;Start of Version 6
|
||
;2216 Type long symbols correctly.
|
||
;2257 Add generic JSYS error subroutine.
|
||
;2300 Don't get ERSTR definition from MONSYM.
|
||
;2301 Type TOPS-20 native errors and filespecs.
|
||
;2304 Change label name in JSERR.
|
||
;2323 Type case-sensitive symbols.
|
||
;2325 Add to and fix up TOPS-20 editible message table.
|
||
;2330 Put TOPS-20 editable messages in a TOPS-20 conditional.
|
||
;2351 Fix E$$UMF routine to print JSYS names.
|
||
;2403 New corporate Copywrite statement.
|
||
;2417 Update Copywrite statement to 1988.
|
||
SUBTTL DISPATCH TABLES FOR MESSAGE CLASSES
|
||
|
||
;DISPATCH TABLE FOR MAIN MESSAGE TYPE. THE MESSAGE TYPE IS SPECIFIED IN THE
|
||
;FIRST ARGUMENT TO THE .ERR. MACRO.
|
||
|
||
DEFINE XXX(TYPE)<
|
||
EXP ER.'TYPE
|
||
>
|
||
|
||
XALL
|
||
TYPTAB: ERRTYPE
|
||
|
||
|
||
;DISPATCH TABLE FOR CONTINUATION MESSAGE TYPE. THE CONTINUATION TYPE IS
|
||
;SPECIFIED IN THE FIRST ARGUMENT TO THE .ETC. MACRO.
|
||
|
||
DEFINE XXX(TYPE)<
|
||
..CTRL==1 ;;[1217] ASSUME CONTROL ONLY
|
||
IFDIF <TYPE><JMP>,<IFDIF <TYPE><RTN>,<..CTRL==0>> ;;[1217] COMPILE WITH MACRO 53(1020)
|
||
IFN ..CTRL,<
|
||
XWD 1B18,ER'TYPE ;FLOW OF CONTROL ONLY
|
||
>
|
||
IFE ..CTRL,<
|
||
EXP ER'TYPE ;PRINT TEXT
|
||
>
|
||
>
|
||
|
||
ER.TAB: ETCTYPE
|
||
ERLEN==.-ER.TAB
|
||
SALL
|
||
IF1,<PURGE ERSTR> ;[2300] So value does not come from MONSYM
|
||
|
||
SUBTTL ENTRY FROM ERRUUO AND MESSAGE DISPATCH
|
||
|
||
|
||
IFN FTSINGLE,<
|
||
%%UUO:: PORTAL LNKLOG ;ENTRY FROM UUO
|
||
>
|
||
|
||
LNKLOG: MOVEM P1,SAVEAC+P1 ;SAVE P1
|
||
MOVE P1,[T2,,SAVEAC+T2]
|
||
BLT P1,SAVEAC+T4 ;AND REST OF ACCS
|
||
MOVE P1,@UUOTRAP ;GET FIRST ERROR ARG
|
||
JUMPGE P1,@TYPTAB(T1) ;GO TO REQUIRED FUNCTION
|
||
MOVE P1,@P1 ;GET A VALID ARG
|
||
JUMPL P1,.-1 ;EVENTUALLY
|
||
JRST @TYPTAB(T1) ;[1174] ROUTINES RETURN TO ERRFIN BELOW
|
||
|
||
ERRFIN: SKIPGE PRTMSG ;[1174] DID WE PRINT ANYTHING AT ALL?
|
||
JRST ERRET ;[1174] NO--NO LINE TO FINISH OFF THEN
|
||
MOVE T1,VERLVL ;[1174] DID USER REQUEST LONG MESSAGE?
|
||
TXNN T1,M%C ;[1301] OR CONTINUATION PART OF MESSAGE?
|
||
JRST ERRFN0 ;NO
|
||
LDB T1,VERPTR ;GET VERBOSITY LEVEL POSSIBLE
|
||
CAIL T1,V%L ;POSSIBLE TO HAVE MORE
|
||
JRST LNKERR## ;GO TO LONG ERROR MODULE
|
||
ER.FIN:: ;RETURN HERE, IN OTHER SEGMENT
|
||
ERRFN0: LDB T2,SEVPTR ;GET SEVERITY
|
||
CAMGE T2,SEVLVL ;[1174] SUPPRESS ] IF MESSAGE FORCED TO FATAL
|
||
CAIL T2,S%W ;WAS IT
|
||
JRST ERRFN2 ;NO, DID NOT TYPE MESSAGE
|
||
PUSHJ P,TTYOUT ;[1301] MESSAGE TYPED ON TTY?
|
||
PUSHJ P,ERRFN1 ;[1301] YES, TYPE "]"
|
||
ERRFN2: OUTVIA .TCRLF## ;[1301] END WITH CR-LF
|
||
JRST ERRET ;[1301]
|
||
|
||
ERRFN1: MOVEI T1," " ;[1301] GET THE SPACE
|
||
SKIPL TABCHR ;[1301] SPACE INSERTED AFTER "["
|
||
PUSHJ P,.TCHAR## ;[1301] YES, PUT SPACE BEFORE "]"
|
||
MOVEI T1,"]" ;[1301] INFO ENDS WITH "]"
|
||
PJRST .TCHAR## ;[1301] OUTPUT THE BRACKET
|
||
|
||
; ..
|
||
; ..
|
||
|
||
;HERE WHEN THE MESSAGE HAS BEEN TYPED. SHOULD WE CONTINUE?
|
||
|
||
ERRET: LDB T1,SEVPTR ;GET ERROR SEVERITY
|
||
CAML T1,SEVLVL ;OK TO CONTINUE?
|
||
CAXN T1,S%C ;[1174] ..
|
||
SKIPA ;[1174] YES--RETURN TO CALLER
|
||
JRST ERXIT ;[1174] NO--GO EXIT
|
||
HRRZS LOGSUB ;CLEAR FLAG
|
||
CAIN T1,S%E ;[1174] DO WE NEED TO EDIT THIS ERROR FIRST
|
||
JRST EDITER ;YES, FATAL IF WE DON'T
|
||
MOVE P1,SAVEAC+P1 ;RESTORE P1
|
||
SKIPG T1,LOGTTY ;NEED TO RESTORE LOG SUB?
|
||
JRST RPOPJ1 ;NO
|
||
PUSHJ P,.TYOCH ;YES,
|
||
SETZM LOGTTY ;[605] BACK TO 0
|
||
RPOPJ1: AOS UUOTRAP
|
||
RPOPJ: JRST .RPOPJ## ;RETUTN TO CPOPJ
|
||
|
||
|
||
;HERE TO "EDIT" THE ERRONEOUS FILE SPECIFICATION. THIS OCCURS WHEN A MESSAGE OF
|
||
;SEVERITY S%E IS PRINTED UNDER TIMESHARING. STORE THE STILL PENDING LIST OF SCAN
|
||
;BLOCKS IN F.EDIT, AND RETURN TO THE LNKSCN FOR THE CORRECTION LINE.
|
||
|
||
EDITER: MOVEI T2,1 ;GET A WORD TO HOLD FL
|
||
PUSHJ P,DY.GET##
|
||
MOVEM FL,(T1) ;SO WE CAN RESTORE LATER
|
||
HRL T1,F.INZR ;GET THIS FILE SPEC
|
||
MOVSM T1,F.EDIT ;STORE IT
|
||
SETZM F.INZR ;CLEAR ALL TRACES
|
||
SETZM F.NXZR ;SO SCAN THINKS ITS A NEW LINE
|
||
HRROI T1,EDTMES ;[1301] GET THE PREFIX WITH TAB
|
||
SKIPL TABCHR ;[1301] /MESSAGE:NOPREF?
|
||
HRROI T1,EDTMS1 ;[1301] YES, GET PREFIX WITHOUT TAB
|
||
.XERR. ;[1301] WARN USER WHAT TO EXPECT
|
||
JRST LNKSCN ;NO
|
||
PUSHJ P,.TYOCH ;YES,
|
||
SETZM LOGTTY ;[605] BACK TO 0
|
||
JRST LNKSCN ;SCAN NEW LINE
|
||
|
||
EDTMES: .ASCIZ <[ Please retype the incorrect parts of the file specification]
|
||
>
|
||
EDTMS1: .ASCIZ <[ Please retype the incorrect parts of the file specification ]
|
||
> ;[1301]
|
||
;HERE WHEN LOG FILE GETS ERROR
|
||
;FINISH ORIGINAL MESSAGE THEN OUTPUT LOG ERROR MESSAGE
|
||
|
||
REPEAT 0,< ;NOT YET WORKING
|
||
ERRLOG: POP P,T1 ;GET RETURN OFF STACK
|
||
PUSH P,UUOTRAP ;SAVE REAL RETURN ADDRESS
|
||
PUSH P,T1 ;STACK RETURN
|
||
MOVEI T1,E$$OEL-1 ;[1174] FAKE RETURN
|
||
HRRM T1,UUOTRAP ;SO WE CAN TYPE 2ND MESSAGE
|
||
POPJ P, ;IF NOTHING MORE IMPORTANT OCCURS
|
||
|
||
E$$OEL::PUSH P,[RC] ;CHANNNEL #
|
||
.ERR. (ST,0,V%L,L%W,S%W,OEL,<Output error on log file, file closed, load continuing>)
|
||
POP P,T1 ;GET ORIGINAL RETURN
|
||
JRSTF @T1 ;RETURN
|
||
>;END OF REPEAT 0
|
||
SUBTTL FATAL ERROR FINAL CLEAN-UP AND EXIT
|
||
|
||
|
||
;HERE IF FATAL NON-CONTINUABLE (E.G., NOT EDITABLE) ERROR OCCURS, AFTER PRINTING
|
||
;THE MESSAGE. CLOSE THE LOG FILE AND DELETE ALL OF LINK'S .TMP FILES. IF WE'RE
|
||
;UNDER BATCH, FORCE OUT THE LONG MESSAGE IF APPLICABLE. OTHERWISE, MERELY GIVE
|
||
;THE USER A HINT THAT THE LONG MESSAGE MAY BE TYPED IF DESIRED.
|
||
|
||
ERXIT:
|
||
MOVE T1,MAPSW ;[1535] /MAP:ERROR?
|
||
CAIN T1,$MAPER ;[1535] IF SO DO IT NOW
|
||
PUSHJ P,LNKMAP## ;[1535]
|
||
MOVEI T1,FINMES ;TELL USER WE CLOSED FILE
|
||
SKIPE LOGSUB ;BUT ONLY ON LOG FILE
|
||
PUSHJ P,.TSTRG##
|
||
RELEASE RC, ;CLOSE LOG FILE
|
||
RELEASE DC, ;[634] CLOSE REL FILE (DON'T DELETE)
|
||
PUSH P,P1 ;SAVE A PERM AC
|
||
MOVSI P1,-20 ;SETUP TO SCAN ALL CHANNELS
|
||
ERXIT1: HRRZ T1,P1 ;GET THIS CHANNEL NUMBER
|
||
DEVCHR T1, ;FIND OUT ABOUT THE ASSOCIATED DEV
|
||
JUMPE T1,ERXIT2 ;FORGET IT IF NONE
|
||
MOVE T1,IO.PTR(P1) ;SOMETHING THERE, GET IO BLOCK
|
||
HRRZM T1,IO.EMG ;[657] USE SAME BLOCK IN DVDEL.
|
||
HLRZ T1,I.EXT(T1) ;GET THE FILE EXTENSION
|
||
CAIE T1,'TMP' ;ONLY DELETE .TMP FILES
|
||
JRST ERXIT2 ;NOT USER'S INPUT REL FILE ETC.
|
||
HRRZ T1,P1 ;GOT ONE! GET I/O CHANNEL
|
||
PUSHJ P,DVDEL.## ;DELETE IT
|
||
JFCL ;IGNORE FAILURE
|
||
ERXIT2: AOBJN P1,ERXIT1 ;LOOP OVER ALL CHANNELS
|
||
POP P,P1 ;RESTORE PERM AC
|
||
MOVEI T1,M%C ;[1301] GET CONTINUATION BIT
|
||
LDB T2,VERPTR ;AND POSSIBLE MESSAGE VERBOSITY
|
||
TDNN T1,VERLVL ;[1301] NOT WANT LONG MESSAGES?
|
||
CAIGE T2,V%L ;OR NOTHING MORE
|
||
EXIT
|
||
MOVEM T1,VERLVL ;FAKE /VER:LONG
|
||
SETZM LOGSUB ;FORGET LOG DEVICE
|
||
SETZM LOGTTY
|
||
MOVE T1,HIORGN ;[650] SEE WHO CALLED
|
||
HRRZ T1,.JBHNM(T1) ;[650]
|
||
CAIN T1,'999' ;[650] SOME FLAVOR OF XXX999?
|
||
EXIT ;GIVE UP, GETSEG WILL FAIL ETC.
|
||
MOVE T1,TTYSUB ;MAKE SURE WE POINT TO TTY
|
||
PUSHJ P,.TYOCH##
|
||
CLRBFI ;[637] CLEAR JUNK
|
||
SKIPE BATCH ;[637] CAN USER TYPE CONTINUE?
|
||
JRST LNKERR## ;[637] NO, GIVE HIM THE MESSAGE FOR FREE
|
||
HRROI T1,[ASCIZ \[ Type CONTINUE for more information]\] ;[1311]
|
||
SKIPL TABCHR ;[1311] WITH TAB OR WITHOUT?
|
||
HRROI T1,[ASCIZ \[ Type CONTINUE for more information ]\] ;[1311]
|
||
.XERR. ;[1311] OUTPUT MESSAGE
|
||
EXIT 1, ;MONRET
|
||
JRST LNKERR## ;SO CONTINUE WILL GET REST OF TEXT
|
||
|
||
FINMES: .ASCIZ < [End of log file]
|
||
>
|
||
SUBTTL MAIN ERROR MESSAGE SUBROUTINES
|
||
|
||
|
||
;ENTRY POINT FOR ASCII STRING
|
||
;CALLED BY
|
||
; ERRUUO ER%MS
|
||
; ARGS
|
||
|
||
ER.MS: SETOM ERCHAN ;[1202] SIGNAL NO CHANNEL INVOLVED
|
||
LDB T1,SEVPTR ;[2005] GET THE SEVERITY
|
||
JUMPN T1,ER.MS1 ;[2005] IT HAS ONE
|
||
POP P,T1 ;[2005] IT'S ON THE STACK (S%D)
|
||
DPB T1,SEVPTR ;[2005] PUT IT IN AS THE SEVERITY
|
||
CAIN T1,S%C ;[2005] IS IT FATAL BUT CONTINUE?
|
||
MOVEI T1,L%F ;[2005] YES, TYPE AS FATAL
|
||
DPB T1,LVLPTR ;[2005] STORE THE LEVEL
|
||
ER.MS1: PUSHJ P,CHKLVL ;[2005] OUTPUT %,? OR TIME STAMP ETC
|
||
JRST ERRNXT ;[1174] NOTHING TO OUTPUT
|
||
HRRZ T1,P1 ;ADDRESS OF MESSAGE STRING
|
||
OUTVIA .TSTRG## ;OUTPUT MESSAGE
|
||
JRST ERRNXT ;[1174] GO PROCESS .ETC. WORDS
|
||
|
||
|
||
;HERE FOR LOOKUP/ENTER/RENAME ERROR
|
||
|
||
;CALLED BY
|
||
; PUSH P,[CHAN#]
|
||
; ERRUUO ER%LRE
|
||
; ARGS
|
||
|
||
ER.LRE: POP P,ERCHAN ;[1174] RESCUE CHANNEL FROM STACK
|
||
MOVE T4,ERCHAN ;[1174] GET CHANNEL
|
||
MOVE T2,IO.PTR(T4) ;GET I/O BLOCK
|
||
HRRE T2,I.EXT(T2) ;GET ERROR CODE
|
||
IFN TOPS20,<
|
||
CAME T2,[-1] ;[2301] MINUS ONE IS SPECIAL
|
||
JUMPL T2,ERLREN ;[2301] ALL OTHER NEGATIVE IS TOPS-20 STYLE
|
||
>;[2301] IFN TOPS20
|
||
TXNE P1,F%SEV ;[2301] DO WE HAVE SEVERITY?
|
||
JRST ERLRE2 ;[2301] YES
|
||
CAILE T2,LRELEN ;IN RANGE?
|
||
MOVEI T2,LRELEN ;NO, USE DEFAULT VALUE
|
||
HLRZ T3,LRETAB(T2) ;PICKUP LVL FOR THIS MESSAGE
|
||
TLNE T4,(%ENT) ;ENTER HAS SPECIAL MESSAGES
|
||
SKIPLE T2 ;CHANGE IF 0 OR -1
|
||
CAIA ;NOT SPECIAL
|
||
HLRZ T3,ENTAB(T2) ;GET RIGHT MESSAGE
|
||
DPB T3,SLPTR ;[1144] STORE SEVERITY AND LEVEL
|
||
LDB T3,SEVPTR ;GET SEVERITY
|
||
TXNE T4,%ENT ;IF ENTER UUO
|
||
CAIE T3,S%E ;AND MARKED AS EDITABLE
|
||
JRST ERLRE2 ;NO
|
||
TXO P1,F%SEV ;[1144] MARK AS FATAL
|
||
IFN TOPS20,<
|
||
JRST ERLRE2 ;[2301] CONTINUE
|
||
|
||
;[2301] Here if TOPS-20 style error. If input file, check the
|
||
;[2301] table of editable TOPS-20 messages. Get the JSYS text
|
||
;[2301] for later printout.
|
||
|
||
ERLREN: TXO P1,F%LVL ;[2301] Always type TOPS-20 messages
|
||
TXNE P1,F%SEV ;[2301] DO WE HAVE SEVERITY?
|
||
JRST ERLREJ ;[2301] YES
|
||
TXNE T4,%ENT ;[2301] Output file?
|
||
JRST ERLREF ;[2301] Yes, it's fatal
|
||
HRRZS T2 ;[2301] Want RH only
|
||
HRLZI T3,T20SIZ ;[2301] Minus count of editable errors
|
||
ERLRE1: CAMN T2,T20TAB(T3) ;[2301] Is this editable?
|
||
JRST ERLREE ;[2301] Yes, set it as such
|
||
AOBJN T3,ERLRE1 ;[2301] No, do them all
|
||
ERLREF: TXO P1,F%SEV ;[2301] Mark it as fatal
|
||
JRST ERLREJ ;[2301] Continue
|
||
ERLREE: MOVX T3,S%E ;[2301] Get severity as editable
|
||
DPB T3,SEVPTR ;[2301] And set it
|
||
ERLREJ: HRROI T1,ERRJSY ;[2301] Point to buffer
|
||
HRLI T2,.FHSLF ;[2301] This process
|
||
HRLZI T3,-ERRLEN ;[2301] Length of buffer
|
||
ERSTR% ;[2301] Get text for the error
|
||
ERJMP E$$UIE ;[2304] Catch errors within an error
|
||
PJRST E$$UIE ;[2304] Error if string too long
|
||
>;[2301] IFN TOPS20 ;[2301]
|
||
|
||
ERLRE2: PUSHJ P,CHKLVL ;[1202] OUTPUT TIME ETC
|
||
JRST ERRNXT ;[1174] NOTHING TO DO
|
||
HRRZ T1,P1 ;ADDRESS OF MESSAGE
|
||
OUTVIA .TSTRG## ;OUTPUT ON TTY AND/OR LOG
|
||
OUTVIA .TSPAC## ;[1212] PRINT SPACE BETWEEN FAILURE AND REASON
|
||
MOVE T4,ERCHAN ;[1202] RESTORE CHAN PLUS FLAGS
|
||
IFE FTSINGLE,<
|
||
JUMPE T4,ERGSEG ;GETSEG ERROR IF CHAN# 0
|
||
>
|
||
|
||
;NOW TYPE APPROPRIATE MESSAGE FOR ERROR CODE
|
||
|
||
HRR P1,IO.PTR(T4) ;GET POINTER TO I/O BLOCK
|
||
HRRE T2,I.EXT(P1) ;GET ERROR CODE
|
||
IFN TOPS20,<
|
||
CAME T2,[-1] ;[2301] MINUS ONE IS SPECIAL
|
||
JUMPL T2,ERFNOS ;[2301] ALL OTHER NEGATIVE IS TOPS-20 STYLE
|
||
>;[2301] IFN TOPS20
|
||
CAILE T2,LRELEN ;DO WE KNOW ABOUT IT?
|
||
PUSHJ P,ERLDEF ;NO SETUP DEFAULT
|
||
SKIPGE T1,T2 ;BUT IF NEGATIVE
|
||
ANDI T1,<BYTE (7) 0,0,0,177,177 (1) 1>
|
||
IORM T1,ERRCOD ;STORE TABLE INDEX
|
||
HRRZ T1,LRETAB(T2) ;GET MESSAGE
|
||
TLNE T4,(%ENT) ;SPECIAL IF ENTER
|
||
SKIPLE T2 ;AND 0 OR -1
|
||
CAIA
|
||
HRRZ T1,ENTAB(T2) ;GET RIGHT MESSAGE
|
||
OUTVIA .TSTRG## ;OUTPUT IT
|
||
ERFNOS: HRRZ T1,P1 ;[2301] POINT TO SCAN BLOCK
|
||
ERFSPC: OUTVIA .TEBLK ;OUTPUT LOOKUP BLOCK
|
||
IFN TOPS20,< ;[2301]
|
||
MOVE T2,IO.CHN ;[2301] Get back the channel
|
||
SKIPN T1,CHAN.JF(T2) ;[2301] Get the JFN
|
||
JRST ERRNXT ;[2301] No JFN
|
||
SETZM CHAN.JF(T2) ;[2301] Zero it
|
||
RLJFN% ;[2301] Return the JFN
|
||
ERNAM (RLJFN%) ;[2301] Should not fail
|
||
>;[2301] IFN TOPS20
|
||
JRST ERRNXT ;[2301] See if more to do
|
||
IFE FTSINGLE,<
|
||
ERGSEG: HRRZ T2,SEGBLK+2 ;GET ERROR CODE
|
||
CAILE T2,LRELEN ;RANGE CHECK
|
||
PUSHJ P,ERLDEF ;NO SETUP DEFAULT
|
||
HRRZ T1,LRETAB(T2) ;GET MESSAGE
|
||
OUTVIA .TSTRG##
|
||
HRRZI T1,SEGBLK ;POINT TO GETSEG BLOCK
|
||
OUTVIA .TSBLK ;OUTPUT SEGMENT BLOCK
|
||
JRST ERRFIN
|
||
>;END IFE FTSINGLE
|
||
|
||
ERLDEF: PUSH P,T2 ;SAVE ERROR CODE
|
||
MOVEI T1,"("
|
||
OUTVIA .TCHAR##
|
||
POP P,T1
|
||
OUTVIA .TOCTW
|
||
MOVEI T2,LRELEN ;USE DEFAULT
|
||
POPJ P,
|
||
;INIT/OPEN ERROR
|
||
;CALLED BY
|
||
; PUSH P,[CHAN#]
|
||
; ERRUUO ER%I
|
||
; ARGS
|
||
|
||
ER.I: POP P,ERCHAN ;[1174] RESCUE CHANNEL FROM STACK
|
||
PUSHJ P,CHKLVL ;OUTPUT % OR ?
|
||
JRST ERRNXT ;[1174] NOTHING TO DO
|
||
HRRZ T1,P1 ;GET MESSAGE
|
||
OUTVIA .TSTRG##
|
||
MOVE T4,ERCHAN ;[1202] GET CHANNEL
|
||
HRRZ T4,IO.PTR(T4) ;GET IO POINTER
|
||
MOVE T1,I.DEV(T4)
|
||
SETZM I.DEV(T4) ;DELETE IT INCASE TRYING TO RECOVER
|
||
OUTVIA .TSIXN## ;DEVICE
|
||
OUTVIA .TCOLN##
|
||
JRST ERRFIN ;RETURN OR EXIT
|
||
;STATUS CHECK ERRORS
|
||
;CALLED BY
|
||
; PUSH P,[CHAN#]
|
||
; ERRUUO ER%ST
|
||
; ARGS
|
||
|
||
ER.ST: POP P,ERCHAN ;[1174] RESCUE CHANNEL FROM STACK
|
||
PUSHJ P,CHKLVL ;OUTPUT % OR ?
|
||
PJRST ERRNXT ;[1174] NOTHING TO DO
|
||
HRRZ T1,P1 ;GET MESSAGE
|
||
OUTVIA .TSTRG##
|
||
MOVX T1," " ;[1144] SEPARATE MESSAGE FROM REST
|
||
OUTVIA .TCHAR## ;[1144] ..
|
||
MOVEI T1,[ASCIZ \Status \] ;[1144]
|
||
OUTVIA .TSTRG##
|
||
HRLZ T1,ERCHAN ;[1174] GET CHANNEL FOR GETSTS
|
||
LSH T1,5 ;PUT IN AC FIELD
|
||
IOR T1,[GETSTS T1] ;FORM INST
|
||
XCT T1 ;DO IT
|
||
HRRZ T1,T1
|
||
OUTVIA .TOEP## ;(XXXXXX)
|
||
MOVEI T1,[ASCIZ \ for file \] ;[1144]
|
||
OUTVIA .TSTRG##
|
||
MOVE T4,ERCHAN ;[1202] GET CHANNEL NUMBER
|
||
HRRZ T1,IO.PTR(T4) ;GET IO POINTER
|
||
JRST ERFSPC ;REST OF FILE SPEC
|
||
SUBTTL CONTINUATION OF FIRST LINE DISPATCH
|
||
|
||
|
||
;HERE AFTER PROCESSING AN .ETC. FUNCTION. IF THERE ARE NO MORE LEFT, RETURN VIA
|
||
;ERRFIN. OTHERWISE, PROCESS THE NEXT .ETC. FUNCTION ONLY IF THE FIRST LINE OF
|
||
;THE MESSAGE SHOULD BE PRINTED OR IF THE .ETC. REPRESENTS FLOW-OF-CONTROL RATHER
|
||
;THAN TEXT.
|
||
|
||
ERRNXT: TXNN P1,.EC ;MORE TO DO?
|
||
JRST ERRFIN ;NO, END LINE
|
||
LDB T1,VSPTR ;[1144] GET VERBOSITY AND SEVERITY
|
||
AOS UUOTRAP ;ADVANCE RETURN POINTER
|
||
MOVE P1,@UUOTRAP ;GET ADDRESS OF OUTPUT INFO
|
||
DPB T1,VSPTR ;[1144] STORE VERBOSITY AND SEVERITY AGAIN
|
||
SKIPLE PRTMSG ;[1174] ARE WE SUPPOSED TO PRINT FIRST LINE?
|
||
JRST ERRNX1 ;[1174] YES--GO STRAIGHT TO IT
|
||
LDB T1,LVLPTR ;[1174] NO--ONLY PROCESS CONTROL .ETC. WORDS
|
||
SKIPL ER.TAB(T1) ;[1174] ONE THAT PRINTS TEXT?
|
||
JRST ERRNXT ;[1174] NO--IGNORE IT AND GET NEXT
|
||
ERRNX1: HRRZ T1,P1 ;[1174] GET VALUE
|
||
TXNN P1,.EP ;ONLY A POINTER?
|
||
JRST .+4 ;NO, ALL SET
|
||
CAIG T1,P1 ;IS IT ONE OF THE SAVED ONES?
|
||
SKIPA T1,SAVEAC(T1) ;YES, GET FROM SAVED SET
|
||
MOVE T1,(T1) ;NO, GET REAL VALUE
|
||
LDB T2,LVLPTR ;[1174] GET .ETC. TYPE CODE
|
||
JRST @ER.TAB(T2) ;DO CORRECT FUNCTION
|
||
|
||
|
||
;PRINT ASCII TEXT IN ASCIZ FORMAT.
|
||
|
||
ERSTR: OUTVIA .TSTRG##
|
||
JRST ERRNXT ;SEE IF MORE
|
||
|
||
|
||
;PRINT A SIXBIT WORD WITHOUT TRAILING SPACES.
|
||
|
||
ERSBX: OUTVIA .TSYMB ;[2216] Output potentially long symbol
|
||
JRST ERRNXT
|
||
|
||
|
||
;PRINT AN OCTAL FULL WORD WITHOUT LEADING ZEROS.
|
||
|
||
EROCT: OUTVIA .TOCTW##
|
||
JRST ERRNXT
|
||
;PRINT A SIGNED DECIMAL VALUE.
|
||
|
||
ERDEC: OUTVIA .TDECW##
|
||
JRST ERRNXT
|
||
|
||
|
||
;PRINT A FILE SPECIFICATION. THE ARGUMENT IS LINK'S INTERNAL CHANNEL NUMBER.
|
||
|
||
ERFSP: HRR P1,IO.PTR(P1) ;GET ADDRESS
|
||
HRRZ T1,P1 ;PTR IN T1
|
||
OUTVIA .TEBLK
|
||
JRST ERRNXT
|
||
|
||
|
||
;PRINT A SINGLE ASCII CHARACTER.
|
||
|
||
ERASC: OUTVIA .TCHAR##
|
||
JRST ERRNXT
|
||
|
||
|
||
;MEMORY SIZE ARGUMENT. PRINT MEMORY SIZE IN K FOR KA'S, PAGES FOR ALL OTHERS.
|
||
|
||
ERCOR: ADD. T1,.PGSIZ ;[1174] ROUND UP TO MONITOR'S PAGE SIZE
|
||
ANDCM. T1,.PGSIZ ;[1174] ..
|
||
OUTVIA .TCORW## ;[1174] .TOUTS HAS THE SMARTS
|
||
JRST ERRNXT ;[1174] DONE
|
||
|
||
|
||
;JUMP TO A CONTINUATION LIST OF .ETC. MACROS. CONTROL RETURNS FROM LNKLOG TO THE
|
||
;INSTRUCTIONS AFTER THE CONTINUATION LIST, NOT THE OLD LIST. WE ALSO SAVE THE
|
||
;ADDRESS OF THE CURRENT .ETC. WORD SO RTN BELOW CAN USE IT.
|
||
|
||
ERJMP: HRRZ T2,UUOTRAP ;[1174] GET ADDRESS OF CURRENT .ETC.
|
||
MOVEM T2,RTNPC ;[1174] SAVE IN CASE RTN NEEDS IT
|
||
SUBI T1,1 ;[1174] LOOK LIKE WE JUST PROCESSED PREVIOUS WORD
|
||
HRRM T1,UUOTRAP ;[1174] ..
|
||
TXO P1,.EC ;[1174] IMPLIED CONTINUATION FOR JMP'S
|
||
JRST ERRNXT ;[1174]
|
||
|
||
|
||
;RETURN FROM PREVIOUS JUMP. NOTE THAT THE .EC FLAG OF THE JUMP THAT GOT US HERE
|
||
;CONTROLS WHETHER THERE ARE ANY MORE .ETC. WORDS, NOT THE .EC FLAG OF THE RTN
|
||
;FUNCTION.
|
||
|
||
ERRTN: ADD T1,RTNPC ;[1174] FOR CPOPJ1, ETC.
|
||
HRRM T1,UUOTRAP ;[1174] LOOK LIKE WE JUST PROCESSED LAST JMP
|
||
LDB T2,VSPTR ;[1174] SAVE ORIGINAL VERBOSITY, SEVERITY
|
||
MOVE P1,(T1) ;[1174] FINISH LOOKING LIKE THE JMP
|
||
DPB T2,VSPTR ;[1174] RESTORE ORIGINAL VERBOSITY AND SEVERITY
|
||
JRST ERRNXT ;[1174] DONE
|
||
;PRINT A NEW LINE. THIS PRINTS A CRLF FOLLOWED BY THE RIGHT INDENTATION FOR THE
|
||
;DESTINATION. FOR A REAL LOG FILE, THIS INCLUDES THE TIME STAMP PLUS LEVEL,
|
||
;SEVERITY AND MESSAGE PREFIX. FOR A REAL TERMINAL, THIS INCLUDES A TAB FOR NOW,
|
||
;BUT SHOULD OPTIONALLY BE 2 SPACES IF LINK EVER LOOKS AT THE JOB'S MESSAGE BITS.
|
||
|
||
ERNLN: MOVEI T1,[ASCIZ /
|
||
/] ;[1174] INDENT PAST TIME STAMP IN LOG FILE
|
||
SKIPE LOGSUB ;[1174] REAL LOG FILE?
|
||
PUSHJ P,.TSTRG## ;[1174] YES--PRINT IT TO JUST LOG FILE
|
||
SKIPN LOGTTY ;[1174] NOW, OUTPUT GOING TO TERMINAL?
|
||
SKIPG LOGSUB ;[1174] ..
|
||
SKIPA ;[1174] YES
|
||
JRST ERRNXT ;[1174] NO--DONE
|
||
SKIPL LOGTTY ;[1174] TERMINAL A LOG FILE?
|
||
JRST ERNLN1 ;[1174] NO--DO IT THE HARD WAY
|
||
PUSHJ P,ERNLN2 ;[1301] PRINT CRLF AND INDENTATION
|
||
JRST ERRNXT ;[1174] DONE
|
||
|
||
ERNLN1: MOVE T1,TTYSUB ;[1174] NEW LINE ON TERMINAL--SET TO JUST TERMINAL
|
||
PUSHJ P,.TYOCH## ;[1174] ..
|
||
PUSH P,T1 ;[1174] SAVE LOG FILE ROUTINE
|
||
PUSHJ P,ERNLN2 ;[1301] PRINT CRLF AND INDENTATION
|
||
POP P,T1 ;[1174] RESTORE LOG FILE ROUTINE
|
||
PUSHJ P,.TYOCH## ;[1174] ..
|
||
JRST ERRNXT ;[1174] DONE
|
||
|
||
ERNLN2: MOVEI T1,[ASCIZ /
|
||
/] ;[1301] ASSUME A TAB
|
||
SKIPL TABCHR ;[1301] PREFIX SUPPRESSED?
|
||
MOVEI T1,[ASCIZ /
|
||
/] ;[1301] YES, USE 2 SPACES
|
||
PJRST .TSTRG## ;[1301] SEND NEW LINE AND INDENTATION
|
||
|
||
;RELATIVE POINTER TO TRIPLET(S) IN LS AREA.
|
||
|
||
IFN .NWBLK,<
|
||
ERLSP: SUB T1,LW.LS ;CONVERT TO OFFSET FROM LS.LB
|
||
JUMPL T1,[HALT] ;ALREADY PAGED OUT
|
||
ADD T1,LS.LB ;CONVERT TO PHYSICAL ADDRESS
|
||
HRR P1,T1 ;USE RH(P1) AS PHYSICAL POINTER
|
||
MOVE T1,1(P1) ;GET 1ST 6 CHARS
|
||
OUTVIA .TSIXN## ;TYPE THEM
|
||
SKIPL T1,(P1) ;WAS THIS A PRIMARY TRIPLET?
|
||
HALT ;NO, ERROR
|
||
TXNN T1,PT.EXT ;EXTENDED TRIPLET?
|
||
JRST ERRNXT ;NO, FINISHED
|
||
ERLSP1: ADDI P1,3 ;POINT TO NEXT TRIPLET
|
||
SKIPL T1,(P1) ;SECONDARY?
|
||
TXNE T1,<-1B17>&<^-S.TTL> ;AND STILL IN NAME TRIPLETS?
|
||
JRST ERRNXT ;NO, QUIT
|
||
MOVE T1,1(P1) ;GET 1ST SIX CHARS
|
||
OUTVIA .TSIXN## ;TYPE THEM
|
||
SKIPN T1,2(P1) ;ANY MORE?
|
||
JRST ERRNXT ;NO, QUIT
|
||
OUTVIA .TSIXN## ;YES, TYPE THEM TOO
|
||
JRST ERLSP1 ;LOOP FOR ALL SECONDARY TRIPLETS
|
||
> ;END IFN .NWBLK
|
||
;EXECUTE AN INSTRUCTION. THIS IS USEFUL WHEN THE SET-UP PERFORMED BY LNKLOG IS
|
||
;DESIRED, BUT A COMPLEX MESSAGE IS NEEDED.
|
||
|
||
ERXCT: XCT (T1) ;[1174] EXECUTE THE INSTRUCTION
|
||
JRST ERRNXT ;[1174] NON-SKIP--CONTINUE NORMAL FLOW
|
||
AOS UUOTRAP ;[1174] SKIP--SKIP NEXT .ETC.
|
||
JRST ERRNXT ;[1174] DONE
|
||
|
||
|
||
;BLANK LINE IN THE LOG FILE. THIS IS USEFUL FOR SEPARATING SECTIONS OF THE LOG
|
||
;FILE, AS BETWEEN OVERLAY LINKS.
|
||
|
||
ERBKL: SKIPN LOGSUB ;[1331] LOG FILE?
|
||
JRST ERRNXT ;[1331] NO
|
||
SKIPN LOGTTY ;[1331] NOT TO TERMINAL?
|
||
PUSHJ P,.TCRLF## ;[1174] YES--SEND A CRLF
|
||
JRST ERRNXT ;[1174] DONE
|
||
|
||
|
||
;PRINT TODAY'S DATE.
|
||
|
||
ERDAT: OUTVIA .TDATN## ;[1174] PRINTS TODAY'S DATE
|
||
JRST ERRNXT ;[1174] DONE
|
||
|
||
|
||
;NO OPERATION. THIS FUNCTION IS GOOD FOR NOTHING.
|
||
|
||
ERNOP: JRST ERRNXT ;[1174] DONE
|
||
SUBTTL USEFUL SUBROUTINES
|
||
|
||
|
||
;CHKLVL CHECKS TO SEE IF THE CURRENT MESSAGE SHOULD GO TO LOG FILE, THE
|
||
;TERMINAL, OR BOTH. IF THE MESSAGE IS DESTINED TO THE LOG FILE, A TIME STAMP IS
|
||
;PRINTED, AND IF THE MESSAGE IS DESTINED FOR THE TERMINAL THEN THE PROPER ERROR
|
||
;CHARACTER ("?", "%" OR "[") PLUS THE LNK??? PREFIX IS PRINTED.
|
||
;
|
||
;CALL:
|
||
; LOGSUB/ NON-ZERO IF REAL NON-CONTROLLING TERMINAL LOG FILE
|
||
; LOGTTY/ -1 IF LOG FILE IS THE CONTROLLING TERMINAL
|
||
;SKIP RETURNS IF FIRST LINE MESSAGE SHOULD REALLY BE PRINTED SOMEWHERE, WITH:
|
||
; LOGSUB/ <-1,,NON-ZERO> IF BOTH LOG AND TERMINAL OUTPUT REQUIRED
|
||
; LOGTTY/ <0,,NON-ZERO> IF TERMINAL BUT NOT LOG FILE OUTPUT REQUIRED
|
||
; PRTMSG/ -1: PRINT NOTHING; 0: ONLY PREFIX; 1: PRINT FIRST LINE TEXT
|
||
; P1/ <ADDRESS OF FIRST LINE TEXT>
|
||
|
||
CHKLVL: SKIPGE T1,ERCHAN ;[1202] I/O ERROR?
|
||
JRST CHKLV1 ;[1202] NO--SKIP EDITABLE TEST
|
||
HRRZS T1 ;[1202] CLEAR FLAGS IN LH
|
||
LDB T2,SEVPTR ;[1202] GET SEVERITY
|
||
CAXN T2,S%E ;[1202] EDITABLE?
|
||
CAXN T1,DC ;[1202] AND NOT INPUT REL FILE CHANNEL?
|
||
JRST CHKLV1 ;[1202] YES--LEAVE EDITABLE
|
||
MOVX T2,S%F ;[1202] NO--NOT EDITABLE FOR NOW, MAKE FATAL
|
||
DPB T2,SEVPTR ;[1202] STORE SEVERITY BACK
|
||
CHKLV1: LDB T1,LVLPTR ;[1202] GET LIST LEVEL
|
||
CAMGE T1,LOGLVL ;ABOVE CUTOFF?
|
||
JRST CHKLV2 ;NO, TRY TTY ONLY
|
||
SKIPE LOGTTY ;YES, THEN IS LOG = TTY?
|
||
JRST [MOVEI T1,1 ;[1174] POSITIVE FOR FIRST LINE
|
||
MOVEM T1,PRTMSG ;[1174] ..
|
||
JRST CHKLV4] ;OUTPUT [, % OR ? AND CODE
|
||
SKIPN LOGSUB ;DO WE REALLY HAVE A LOG DEVICE?
|
||
JRST CHKLV2 ;NO, JUST TRY TTY
|
||
|
||
;HERE FOR A REAL NON-CONTROLLING TERMINAL LOG FILE. PRINT THE TIME STAMP IN THE
|
||
;LOG FILE ONLY. THEN SEE IF THE TERMINAL SHOULD SEE THE MESSAGE TOO. IF SO,
|
||
;PRINT THE PREFIX THERE AND CAUSE THE OUTVIA MACRO TO PRINT ALL TEXT TO BOTH.
|
||
|
||
MOVEI T1,1 ;[1174] MARK THAT WE SHOULD PRINT THE MESSAGE
|
||
MOVEM T1,PRTMSG ;[1174] ..
|
||
PUSHJ P,TSTAMP ;PUT TIME STAMP ON LOG FILE
|
||
LDB T1,LVLPTR ;GET LEVEL AGAIN
|
||
CAMGE T1,ERRLVL ;ABOVE ERROR CUTOFF?
|
||
JRST CHKLV5 ;NO, NOT TO TTY
|
||
MOVE T1,TTYSUB ;POINT TO TTY LINE BUFFER
|
||
PUSHJ P,.TYOCH ;SWAP WITH LOG
|
||
PUSH P,T1 ;SAVE IT
|
||
PUSHJ P,SEVTST ;USE TTY TO OUTPUT [, % OR ?
|
||
POP P,T1 ;GET OUTPUT ROUTINE BACK
|
||
PUSHJ P,.TYOCH ;AS IT WAS
|
||
HRROS LOGSUB ;SIGNAL TO BOTH DEVICES
|
||
JRST CHKLV5 ;NOW FOR REST OF MESSAGE
|
||
;HERE WHEN THERE IS NO REAL LOG FILE, OR THE MESSAGE TO IT IS CUT OFF DUE TO
|
||
;/LOGLEVEL:. CHECK FOR TERMINAL OUTPUT. IF THE MESSAGE SHOULD GO THERE, CHECK
|
||
;FOR THE SPECIAL CASE OF THE TERMINAL BEING THE LOG FILE (TO PREVENT TIME STAMPS
|
||
;ON THE TERMINAL) THEN PRINT THE ERROR CHARACTER AND THE MESSAGE PREFIX.
|
||
;OTHERWISE, GIVE NON-SKIP RETURN SINCE NOTHING SHOULD GET PRINTED. NOTE THAT THE
|
||
;PREFIX MUST END WITH A TAB SO THAT MESSAGES WITH IMBEDDED TABS LOOK THE SAME ON
|
||
;THE TERMINAL AND IN THE LOG FILE.
|
||
|
||
|
||
CHKLV2: LDB T1,LVLPTR ;GET ERROR LEVEL
|
||
CAMGE T1,ERRLVL ;TO GO TO TTY?
|
||
JRST [SETOM PRTMSG ;[1174] NO--REMEMBER NOTHING TO DO
|
||
JRST CHKLV6] ;[1174] GO RETURN
|
||
MOVEI T1,1 ;[1174] YES--THEN REMEMBER SOMETHING TO PRINT
|
||
MOVEM T1,PRTMSG ;[1174] ..
|
||
SKIPE LOGTTY ;LOG = TTY?
|
||
JRST CHKLV4 ;YES, JUST PRINT CODE AND RETURN
|
||
HRRZ T1,LOWSUB ;[1174] SET FOR TTY OUTPUT ONLY
|
||
PUSHJ P,.TYOCH ;GET OLD RETURN
|
||
HRRZM T1,LOGTTY ;STORE OLD RETURN
|
||
|
||
;HERE WHEN LOG FILE IS THE USER'S TERMINAL.
|
||
|
||
CHKLV4: PUSHJ P,SEVTST ;OUTPUT [, % OR ?
|
||
|
||
;HERE TO PRINT THE MESSAGE PREFIX TO POTENTIALLY BOTH THE USER'S TERMINAL AND
|
||
;THE LOG FILE.
|
||
|
||
CHKLV5: MOVE T1,(P1) ;[1174] GET MESSAGE PREFIX
|
||
MOVEM T1,ERRCOD ;SAVE IN CASE LONG MESSAGE REQUIRED LATER
|
||
MOVEI T1,ERRCOD ;[1301] GET THE PREFIX
|
||
PUSHJ P,LOGOUT ;[1301] PRINTING ON LOG FILE?
|
||
PUSHJ P,.TSTRG## ;[1301] YES, OUTPUT PREFIX
|
||
MOVE T1,VERLVL ;[1301] GET THE VERSION LEVEL
|
||
TXNN T1,M%P ;[1301] PRINT THE PREFIX?
|
||
JRST CHKLV7 ;[1301] NO
|
||
MOVEI T1,ERRCOD ;[1301] GET THE PREFIX
|
||
PUSHJ P,TTYOUT ;[1301] PRINTING ON TTY?
|
||
PUSHJ P,.TSTRG## ;[1301] YES
|
||
CHKLV7: MOVE T1,VERLVL ;[1301] GET THE VERBOSITY
|
||
TXNN T1,M%F ;[1301] IS FIRST LINE WANTED?
|
||
JRST [SETZM PRTMSG ;[1301] NO--NO FIRST LINE MSG
|
||
JRST CHKLV6] ;[1301] GO RETURN
|
||
MOVX T1,.CHTAB ;[1301] GET A TAB
|
||
PUSHJ P,LOGOUT ;[1301] PRINTING TO LOG FILE?
|
||
PUSHJ P,.TCHAR## ;[1301] YES, OUTPUT TAB
|
||
MOVE T1,VERLVL ;[1311] GET THE VERBOSITY BACK
|
||
TXNN T1,M%P ;[1301] PREFIX WANTED?
|
||
SKIPA T1,[" "] ;[1301] NO, GET A SPACE
|
||
MOVX T1,.CHTAB ;[1301] YES, GET A TAB
|
||
PUSHJ P,TTYOUT ;[1301] PRINTING TO TERMINAL?
|
||
PUSHJ P,.TCHAR## ;[1301] YES, OUTPUT TAB OR SPACE
|
||
CHKLV6: ADDI P1,1 ;[1174] POINT TO BEGINNING OF FIRST LINE TEXT
|
||
SKIPLE PRTMSG ;[1174] SHOULD FIRST LINE BE PRINTED?
|
||
CPOPJ1: AOS (P) ;[1174] YES--SKIP RETURN
|
||
CPOPJ: POPJ P, ;[1174] NO--NON-SKIP RETURN
|
||
;SEVTST PRINTS THE PROPER ERROR CHARACTER [, % OR ? BASED ON THE MESSAGE'S
|
||
;ASSIGNED SEVERITY AND THE USER'S /SEVERITY: SWITCH. IF THE MESSAGE IS FATAL,
|
||
;CLEAR TYPE-AHEAD FIRST. FINALLY, PRINT THE FIRST PART OF THE MESSAGE PREFIX.
|
||
;SEVTST ASSUMES THAT IT WILL ONLY PRINT TO THE USER'S TERMINAL.
|
||
|
||
SEVTST: LDB T2,SEVPTR ;GET SEVERITY
|
||
MOVEI T1,"[" ;ASSUME INFO
|
||
CAIL T2,S%W ;IS IT A WARNING?
|
||
MOVEI T1,"%" ;YES, OR WORSE
|
||
CAML T2,SEVLVL ;IS IT FATAL?
|
||
MOVEI T1,"?" ;YES,
|
||
SETZM TABCHR ;[1301] CLEAR TAB CHARACTER FLAG
|
||
CAIN T1,"[" ;IF MORE THAN INFO
|
||
JRST SEVTS1 ;NO
|
||
CLEARO ;CLEAR ^O
|
||
SEVTS1: PUSHJ P,.TCHAR## ;TYPE CHARACTER
|
||
MOVE T1,VERLVL ;[1301] GET VERBOSITY FLAGS
|
||
TXNN T1,M%P ;[1301] PREFIX WANTED?
|
||
POPJ P, ;[1301] NO
|
||
SETOM TABCHR ;[1301] YES, SET FLAG NEGATIVE
|
||
MOVEI T1,[ASCIZ \LNK\]
|
||
PJRST .TSTRG##
|
||
TTYCHK::SKIPL LOGSUB ;ANY NEED TO DO IT?
|
||
POPJ P, ;NO
|
||
PUSH P,T1 ;SAVE ENTRY TO .TOUTS
|
||
XCT @-1(P) ;PUT IN LOG FILE
|
||
TTYSET: MOVE T1,TTYSUB ;GET TTY LINE BUFFER SUB
|
||
PUSHJ P,.TYOCH ;INITIALIZE FOR IT
|
||
EXCH T1,(P) ;SWAP OUT SUB FOR ENTRY PTR
|
||
XCT @-1(P) ;GO TO .TOUTS
|
||
POP P,T1 ;RESTORE OUTSUB
|
||
AOS (P) ;SKIP OVER XCT'ED INST
|
||
PJRST .TYOCH ;RESET AND RETURN
|
||
TTYOUT::SKIPE LOGTTY ;[1301] OUTPUT TO TTY AS LOGFILE?
|
||
POPJ P, ;[1301] YES, JUST OUTPUT
|
||
SKIPLE LOGSUB ;[1301] OUTPUT TO TTY?
|
||
JRST CPOPJ1 ;[1301] NO, DON'T OUTPUT
|
||
PUSH P,T1 ;[1301] SAVE ENTRY TO .TOUTS
|
||
JRST TTYSET ;[1301] OUTPUT TO TERMINAL
|
||
|
||
LOGOUT::SKIPN LOGTTY ;[1301] OUTPUT TO TTY AS LOGFILE?
|
||
SKIPN LOGSUB ;[1301] OR NOT TO LOG FILE?
|
||
JRST CPOPJ1 ;[1301] YES, DON'T OUTPUT AS LOG
|
||
PUSH P,T1 ;[1301] SAVE ENTRY TO .TOUTS
|
||
XCT @-1(P) ;[1301] OUTPUT TO LOG FILE
|
||
POP P,T1 ;[1301] RESTORE T1
|
||
JRST CPOPJ1 ;[1301] RETURN
|
||
|
||
TSTAMP: PUSHJ P,.TTIMN## ;STANDARD TIME OUTPUT
|
||
PUSHJ P,.TSPAC## ;SPACE
|
||
PUSHJ P,.TSPAC## ;[1174] ANOTHER SPACE
|
||
LDB T1,LVLPTR ;GET PRINT LEVEL
|
||
MOVEI T2," " ;FILLER CHAR IF 1 DIGIT
|
||
PUSHJ P,.TDEC2## ;OUTPUT IT
|
||
PUSHJ P,.TSPAC##
|
||
PUSHJ P,.TSPAC## ;[1174] ANOTHER SPACE
|
||
LDB T1,SEVPTR ;ERR LEVEL
|
||
MOVEI T2," "
|
||
PUSHJ P,.TDEC2##
|
||
MOVEI T1,[ASCIZ / /];[1174] FINISH WITH 3 SPACES
|
||
PJRST .TSTRG## ;[1174] ..
|
||
VERPTR: POINTR P1,F%VER ;[1144] VERBOSITY LEVEL
|
||
SEVPTR: POINTR P1,F%SEV ;[1144] SEVERITY LEVEL
|
||
LVLPTR: POINTR P1,F%LVL ;[1144] OUTPUT MESSAGE LEVEL
|
||
|
||
VSPTR: POINTR P1,<F%VER!F%SEV>;[1144] VERBOSITY AND SEVERITY
|
||
SLPTR: POINTR P1,<F%SEV!F%LVL>;[1144] SEVERITY AND MESSAGE LEVEL
|
||
SUBTTL EXTENSIONS TO SCAN'S .TOUTS SUBROUTINES
|
||
|
||
|
||
;.TEBLK --TYPE LOOKUP/ENTER/RENAME BLOCK (NOT SAME AS .TFBLK##)
|
||
;CALL: MOVEI T1,ADDR OF BLOCK
|
||
; PUSHJ P,.TEBLK
|
||
;USES T1-4
|
||
|
||
.TEBLK::MOVE T4,T1 ;SAVE ARGUMENT
|
||
IFN TOPS20,<
|
||
MOVE T1,I.CHN(T4) ;[2301] GET THE CHANNEL
|
||
LSH T1,-27 ;[2301] AS AN INDEX
|
||
SKIPN T2,CHAN.JF(T1) ;[2301] IS THERE A JFN?
|
||
JRST TEBLK1 ;[2301] NO, PRINT IT FROM THE BLOCK
|
||
PUSH P,T4 ;[2301] SAVE THE POINTER IN CASE ERROR
|
||
HRROI T1,FILBLK ;[2301] POINT TO THE FILE BLOCK
|
||
SETZB T3,T4 ;[2301] WANT DEFAULTS
|
||
JFNS% ;[2301] GET THE FILESPEC
|
||
ERJMP TEBLK0 ;[2301] DIDN'T WORK
|
||
POP P,T4 ;[2301] FIX UP THE STACK
|
||
MOVEI T1,FILBLK ;[2301] GET THE BLOCK
|
||
PJRST .TSTRG## ;[2301] OUTPUT THE BLOCK
|
||
TEBLK0: POP P,T4 ;[2301] RESTORE THE POINTER
|
||
TEBLK1:
|
||
>;[2301] IFN TOPS20
|
||
MOVE T1,I.DEV(T4) ;DEVICE
|
||
PUSHJ P,.TSIXN##
|
||
PUSHJ P,.TCOLN##
|
||
MOVE T1,I.NAM(T4) ;NAME
|
||
PUSHJ P,.TSIXN##
|
||
HLLZ T1,I.EXT(T4) ;EXTENSION
|
||
MOVE T2,I.SCN(T4) ;GET MOD WORD
|
||
TXNE T2,FX.NUL ;TEST FOR NULL EXTENSION (NO DOT)
|
||
JUMPE T1,TEBLK2 ;NO EXT
|
||
TRO T1,'.'
|
||
ROT T1,-6 ;PUT IN LEADING PLACE
|
||
PUSHJ P,.TSIXN##
|
||
TEBLK2: MOVEI T1,I.PPN(T4) ;POINTER TO PPN OR SFD
|
||
IFN LN.DRB,< ;ENABLED FOR SFD'S?
|
||
MOVE T2,(T1) ;GET UFD
|
||
TLNE T2,-1 ;0,,+ IS A PNTR
|
||
PJRST .TDIRB## ;NO, JUST [PPN]
|
||
MOVE T1,(T1) ;GET 0,,SFDARG
|
||
ADD T1,[1,,2] ;POINT TO SFDDIR
|
||
>
|
||
PJRST .TDIRB## ;OUTPUT DIRECTORY
|
||
;.TSBLK --TYPE GETSEG BLOCK (NOT SAME AS .TFBLK##)
|
||
;CALL: MOVEI T1,ADDR OF BLOCK
|
||
; PUSHJ P,.TSBLK
|
||
;USES T1-4
|
||
|
||
.TSBLK: MOVE T4,T1 ;SAVE ARGUMENT
|
||
MOVE T1,0(T4) ;DEVICE
|
||
PUSHJ P,.TSIXN##
|
||
PUSHJ P,.TCOLN##
|
||
MOVE T1,1(T4) ;NAME
|
||
PUSHJ P,.TSIXN##
|
||
HLLZ T1,2(T4) ;EXTENSION
|
||
TRO T1,'.'
|
||
ROT T1,-6 ;PUT IN LEADING PLACE
|
||
PUSHJ P,.TSIXN##
|
||
MOVEI T1,4(T4) ;PPN
|
||
PJRST .TDIRB## ;OUTPUT DIRECTORY
|
||
|
||
;[2216] .TSYMB --Type potentially long symbol
|
||
.TSYMB::PUSH P,P2 ;[2323] Get an upper/lower flag
|
||
SETZ P2, ;[2323] In upper case mode
|
||
TLNE T1,770000 ;[2216] Long symbol?
|
||
PJRST TSYMB1 ;[2216] No
|
||
PUSH P,P1 ;[2216] Yes, get a save AC
|
||
HLRZ P1,T1 ;[2216] Get the count
|
||
MOVNS P1 ;[2216] Negate it
|
||
HRLZ P1,P1 ;[2216] Put it in left half
|
||
HRR P1,T1 ;[2216] -Length,,pointer
|
||
TSYMBL: MOVE T1,(P1) ;[2216] Get the next word
|
||
PUSHJ P,.TULCS ;[2323] Type it
|
||
AOBJN P1,TSYMBL ;[2216] Do the entire symbol
|
||
POP P,P1 ;[2216] Done, restore AC
|
||
POP P,P2 ;[2323] Restore the AC used as flag
|
||
POPJ P, ;[2216] Return
|
||
|
||
TSYMB1: PUSHJ P,.TULCS ;[2323] Type the short symbol
|
||
POP P,P2 ;[2323] Restore the AC
|
||
POPJ P, ;[2323] Done
|
||
|
||
;Here to type an upper/lower case sixbit word
|
||
.TULCS::MOVE T2,T1 ;[2323] Move argument
|
||
TULC1: JUMPE T2,CPOPJ ;[2323] Loop until only blanks left
|
||
MOVEI T1,0 ;[2323] Clear next character
|
||
LSHC T1,6 ;[2323] Get next character
|
||
CAIN T1,'/' ;[2323] Upper case shift?
|
||
JRST TULCU ;[2323] Yes
|
||
CAIN T1,'\' ;[2323] Lower case shift?
|
||
JRST TULCL ;[2323] Yes
|
||
ADDI T1," "-' ' ;[2323] Convert to ASCII
|
||
JUMPE P2,TULC2 ;[2323] Don't convert if in upper case mode
|
||
CAIL T1,"A" ;[2323] Is it below A?
|
||
CAILE T1,"Z" ;[2323] Or above Z?
|
||
CAIA ;[2323] Not alphabetic, don't convert
|
||
ADDI T1,"a"-"A" ;[2323] Alphabetic, convert to lower case
|
||
TULC2: PUSHJ P,.TCHAR## ;[2323] Type it
|
||
JRST TULC1 ;[2323] ..
|
||
|
||
TULCL: SETO P2, ;[2323] Lower case
|
||
JRST TULC1 ;[2323] Continue
|
||
|
||
TULCU: SETZ P2, ;[2323] Upper case
|
||
JRST TULC1 ;[2323] Continue
|
||
|
||
SUBTTL COMMON .ERR. SUBROUTINES
|
||
|
||
|
||
.ERFEE::ASCIZ \FEE\
|
||
.ASCIZ <ENTER error> ;[1212]
|
||
.ERFLE::ASCIZ \FLE\
|
||
.ASCIZ <LOOKUP error> ;[1212]
|
||
.ERFRE::ASCIZ \FRE\
|
||
.ASCIZ <RENAME error> ;[1212]
|
||
.ERGSE::ASCIZ \GSE\
|
||
.ASCIZ <GETSEG error> ;[1212]
|
||
.ERNED::ASCIZ \NED\
|
||
.ASCIZ <Non-existent device >
|
||
.EROFD::ASCIZ \OFD\
|
||
.ASCIZ <OPEN failure for device >
|
||
.EREIF::ASCIZ \EIF\
|
||
.ASCIZ <Error for input file >
|
||
.ERCNW::ASCIZ \CNW\
|
||
.ASCIZ <Code not yet written at >
|
||
SUBTTL DEFERRED SEVERITY AND LEVEL TABLE FOR INDEXED FILE ERRORS
|
||
|
||
|
||
.ERR. (,0,V%L,L%F,S%F,,<(2) directory full >)
|
||
ENTAB: .ERR. (,0,V%L,L%F,S%F,,<(0) Illegal file name >)
|
||
LRETAB: .ERR. (,0,V%L,L%F,S%E,,<(0) file was not found >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(1) no directory for project-programmer number >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(2) protection failure >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(3) file was being modified >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(4) rename file name already exists >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(5) illegal sequence of UUOs >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(6) bad UFD or bad RIB >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(7) not a saved file >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(10) not enough memory >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(11) device not available >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(12) no such device >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(13) not two reloc reg. capability >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(14) no room or quota exceeded >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(15) write lock error >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(16) not enough monitor table space >)
|
||
.ERR. (,0,V%L,L%I,S%I,,<(17) partial allocation only >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(20) block not free on allocation >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(21) can't supersede (enter) an existing directory >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(22) can't delete (rename) a non-empty directory >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(23) SFD not found >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(24) search list empty >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(25) SFD nested too deeply >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(26) no-create on for specified SFD path >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(27) segment not on swap space >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(30) can't update file >)
|
||
.ERR. (,0,V%L,L%F,S%E,,<(31) low segment overlaps high segment >)
|
||
.ERR. (,0,V%L,L%F,S%F,,<(32) RUN not allowed when not logged in >) ;[1174]
|
||
.ERR. (,0,V%L,L%F,S%F,,<(33) file still has outstanding ENQ/DEQ locks >) ;[1174]
|
||
.ERR. (,0,V%L,L%F,S%F,,<(34) bad EXE file directory format >) ;[1174]
|
||
.ERR. (,0,V%L,L%F,S%F,,<(35) EXE format files must have .EXE extension >) ;[1174]
|
||
.ERR. (,0,V%L,L%F,S%F,,<(36) EXE file directory is too big >) ;[1174]
|
||
.ERR. (,0,V%L,L%F,S%F,,<(37) network capability exceeded for TSK: >) ;[1174]
|
||
.ERR. (,0,V%L,L%F,S%F,,<(40) task is not available >) ;[1174]
|
||
.ERR. (,0,V%L,L%F,S%F,,<(41) undefined network node for TSK: >) ;[1174]
|
||
|
||
LRELEN==:.-LRETAB ;[1174] **MUST** AGREE WITH LNKERR
|
||
LREDEF: .ERR. (,0,V%L,L%F,S%F,,<) Unknown cause >)
|
||
|
||
IFN TOPS20,< ;[2330]
|
||
;[2301] Table of editable TOPS-20 messages. These come only from the
|
||
;[2301] GTJFN% and OPENF% monitor calls (Except DESX8 which is forced)
|
||
;[2301] and are only for input files.
|
||
|
||
T20TAB: GJFX4 ;[2301] Invalid character in filename
|
||
GJFX16 ;[2301] No such device
|
||
GJFX17 ;[2301] No such directory name
|
||
GJFX19 ;[2325] No such file type
|
||
GJFX18 ;[2301] No such filename
|
||
GJFX24 ;[2301] File not found
|
||
GJFX28 ;[2301] Device is not on-line
|
||
GJFX31 ;[2325] Invalid wildcard designator
|
||
GJFX34 ;[2301] Invalid character "?" in filename
|
||
GJFX35 ;[2301] Directory access priviledges required
|
||
DESX8 ;[2301] File is not on disk
|
||
DESX9 ;[2301] Invalid operation for this device
|
||
STRX09 ;[2301] Prior structure mount required
|
||
GFDBX3 ;[2301] List access required
|
||
OPNX2 ;[2301] File does not exist
|
||
OPNX3 ;[2301] Read access required
|
||
OPNX8 ;[2301] Device is not on line
|
||
OPNX9 ;[2301] Invalid simultaneous access
|
||
OPNX12 ;[2301] List access required
|
||
OPNX13 ;[2301] Invalid access requested
|
||
T20SIZ=T20TAB-.
|
||
>;[2330] IFN TOPS20
|
||
SUBTTL COMMON .ETC. SUBROUTINES
|
||
|
||
|
||
;PRINT 'DETECTED IN MODULE [SYMBOL] FROM FILE [FILE]' IF WE'RE CURRENTLY LOADING
|
||
;A MODULE. CALLED FROM ALL ERROR MESSAGES THAT POTENTIALLY PERTAIN TO A
|
||
;PATICULAR MODULE.
|
||
|
||
.ETIMF::.ETC. (XCT,.EC,,,,<[TRNN FL,R.LOD]>) ;[1174]
|
||
.ETC. (RTN) ;[1174] NO MODULE, MAYBE A SWITCH
|
||
.ETC. (NLN,.EC) ;[1174]
|
||
.ETC. (STR,.EC,,,,,<Detected in module >) ;[1174]
|
||
.ETC. (SBX,.EC!.EP,,,,PRGNAM) ;[1174]
|
||
.ETC. (STR,.EC,,,,,< from file >) ;[1174]
|
||
.ETC. (FSP,.EC,,,,DC) ;[1174]
|
||
.ETC. (RTN) ;[1174]
|
||
|
||
IFN .NWBLK,<
|
||
.ETNMF::.ETC. (XCT,.EC,,,,<[TRNN FL,R.LOD]>) ;[1174]
|
||
.ETC. (RTN) ;[1174] NO MODULE, MAYBE A SWITCH
|
||
.ETC. (NLN,.EC) ;[1174]
|
||
.ETC. (STR,.EC,,,,,<Error detected in module >) ;[1174]
|
||
.ETC. (LSP,.EC!.EP,,,,NAMPTR) ;[1174]
|
||
.ETC. (STR,.EC,,,,,< from file >) ;[1174]
|
||
.ETC. (FSP,.EC,,,,DC) ;[1174]
|
||
.ETC. (RTN) ;[1174]
|
||
> ;[1174] END OF IFN .NWBLK
|
||
|
||
|
||
IFN FTOVERLAY,<
|
||
;PRINT ' LINK NUMBER n[, NAME x]'.
|
||
|
||
.ETLNN::.ETC. (STR,.EC,,,,,< link number >) ;[1174]
|
||
.ETC. (DEC,.EC!.EP,,,,CS+CS.NUM) ;[1400]
|
||
.ETC. (XCT,.EC,,,,<[SKIPN CS+CS.LNM]>) ;[1400]
|
||
.ETC. (RTN) ;[1174] DON'T PRINT NAME IF NONE
|
||
.ETC. (STR,.EC,,,,,< name >) ;[1174]
|
||
.ETC. (SBX,.EC!.EP,,,,CS+CS.LNM) ;[1400]
|
||
.ETC. (RTN)
|
||
>
|
||
;PRINT SYMBOLS WITH VALUES. THIS IS CALLED FROM VARIOUS PLACES, SUCH AS /ENTRY,
|
||
;/REQUEST, /UNDEFINED. THIS IS A LOOP THAT PRINTS ALL APPLICABLE SYMBOLS UNTIL
|
||
;DONE.
|
||
;
|
||
;CALL:
|
||
; W1/ SIXBIT SYMBOL NAME
|
||
; W2/ OCTAL SYMBOL VALUE
|
||
; NXTGLB/ <PUSHJ P,LOCN>, WHERE LOCN IS NEXT SYMBOL ROUTINE
|
||
;W3 IS SAVED AND CAN BE USED FOR DATA. THE ROUTINE REFERENCED IN NXTGLB SHOULD
|
||
;GIVE A NON-SKIP RETURN IF THERE ARE NO MORE SYMBOLS. OTHERWISE, IT SHOULD GIVE
|
||
;A SKIP RETURN WITH W1-W3 SET UP AS ABOVE.
|
||
|
||
.ETSAV::.ETC. (NLN,.EC) ;[1174] NEW LINE FOR NEXT SYMBOL
|
||
.ETC. (SBX,.EC!.EP,,,,W1) ;[1174] PRINT SYMBOL NAME
|
||
.ETC. (ASC,.EC,,,,.CHTAB) ;[1174]
|
||
.ETC. (OCT,.EC!.EP,,,,W2) ;[1174] PRINT SYMBOL VALUE
|
||
.ETC. (XCT,.EC,,,,NXTGLB) ;[1174] FETCH NEXT SYMBOL
|
||
.ETC. (JMP,.EC,,,,.ETDON) ;[1174] NO MORE LEFT
|
||
.ETC. (JMP,.EC,,,,.ETSAV) ;[1174] LOOP FOR THIS ONE
|
||
.ETDON::.ETC. (NOP) ;[1174] DONE
|
||
POPJ P, ;[1174] ALL DONE
|
||
SUBTTL GENERIC JSYS ERROR HANDLER
|
||
|
||
IFN TOPS20,< ;[2257]
|
||
|
||
;
|
||
; Subroutine to put last TOPS-20 process error string into a buffer.
|
||
; Output the buffer with the following line during error processing:
|
||
;
|
||
; .ETC. (STR,,,,,ERRJSY)
|
||
;
|
||
; Used ACs: none
|
||
;
|
||
JSERR:: SPUSH <T1,T2,T3> ;[2257] SAVE ACS FOR A MOMENT
|
||
HRROI T1,ERRJSY ;[2257] POINT TO BUFFER FOR ERSTR% STRING
|
||
MOVX T2,<.FHSLF,,-1> ;[2257] GET OUR PROCESS,,LAST ERROR
|
||
HRLZI T3,-ERRLEN ;[2257] LENGTH OF ERSTR% BUFFER
|
||
ERSTR% ;[2257] GET TEXT FOR THE ERROR
|
||
ERJMP E$$UIE ;[2304] CATCH ERRORS WITHIN AN ERROR
|
||
PJRST E$$UIE ;[2304] ERROR IF STRING TOO LONG
|
||
SPOP <T3,T2,T1> ;[2257] RESTORE ACS
|
||
POPJ P, ;[2257] DO USER'S ERROR HANDLING ROUTINE
|
||
|
||
E$$UIE: .ERR. (MS,,V%L,L%F,S%F,UIE,<Unexpected internal error during error processing>) ;[2304]
|
||
|
||
|
||
;
|
||
; Generic JSYS error routine. Call when all has failed and it's time
|
||
; to die because of a JSYS error.
|
||
;
|
||
; Call: P2/ sixbit% JSYS name (6 chrs. max)
|
||
; Return: never (fatal error)
|
||
;
|
||
; Used ACs: P1
|
||
;
|
||
E$$UMF::PUSHJ P,JSERR ;[2257] SETUP ERROR TEXT BUFFER
|
||
PUSH P,P1 ;[2257] SAVE P1 BEFORE USING (DON'T RESTORE)
|
||
MOVE P1,-1(P) ;[2257] GET PC OF FAILING JSYS
|
||
TXZ P1,^-<37,,-1> ;[2257] CLEAN OUT FLAG BITS
|
||
SUBI P1,2 ;[2257] GO BACK TO JSYS ADDR
|
||
.ERR. (MS,.EC,V%L,L%F,S%F,UMF,<Unexpected monitor call failure for >)
|
||
.ETC. (SBX,.EC!.EP,,,,P2) ;[2351]
|
||
.ETC. (STR,.EC,,,,,< at PC >) ;[2257]
|
||
.ETC. (OCT,.EC!.EP,,,,P1) ;[2257]
|
||
.ETC. (NLN,.EC) ;[2257] NEW LINE FOR NEXT SYMBOL
|
||
.ETC. (STR,,,,,ERRJSY) ;[2257] TYPE ERSTR% TEXT
|
||
> ;[2257] END IFN TOPS20
|
||
|
||
LOGLIT: END
|