.TITLE TRACE ; ; ; ENTRY POINT: TRACE ; TRACER -- RESTART DATA BASE HANDLER ; ; ; AUTHOR: P.GANDHI ; ; ; DATED: OCT 1978 ; ; ; FUNCTION: 1. TO TRACE THE ERROR PATH ; 2. TO RESTART DBH ; ; ; ; CALLING SEQ: ; CALL TRACE(OPT,LUN,TSKNM) ; WHERE ; OPT = 1 FOR SAVE STATUS FOR RESTART ; 2 FOR PRINT ABORT MESSAGE AND TRACE ; 3 FOR TRACE ONLY ; ; LUN IS LOGICAL UNIT FOR MESSAGE. ; ; TSKNM ONLY APPLICABLE IN OPT =2 ; .MCALL QIOW$S,MOUT$S ; TRACE:: MOV R5,SAV5 ; SAVE R5 CMP @2(R5),#2 BLT TRC1 BEQ TRC2 BR TRC3 ; ; TRC1: MOV (SP),ENTRPT ; SAVE ENTRY POINT MOV SP,STKPTR ; AND STACK POINTER MOV $NAMC,NAMC ; SAVE TRACE BACK CHAIN PTR MOV $SEQC,SEQC ; SAVE SEQ NUMBER RTS PC ; ; TRC2: MOV 6(R5),R3 MOV (R3),PAR1 MOV 2(R3),PAR1+2 MOVB @10(R5),R3 MOV R3,PAR1+4 MOUT$S #STR1,#PAR1 MOV SAV5,R5 ; RESTORE R5 ; TRC3: MOV $SEQC,STMTNO MOV $NAMC,R3 MOV #INMSG1,PAR2 ; ADDRESS OF "IN " STRING ; NEXT: MOV 4(R3),SUBNAM ; SUBROUTINE NAME IN R50 MOV 6(R3),SUBNAM+2 MOV R3,SAV3 MOV #ATMSG1,ATADR ; PRETEND "AT" MOV #2,ATSZ ; WHICH IS 2 BYTES LONG TST STMTNO BPL 10$ NEG STMTNO ; MAKE # PLUS MOV #ATMSG2,ATADR ; IT IS "AT OR AFTER" MOV #11.,ATSZ ; THIS IS 11 BYTES LONG 10$: MOUT$S #STR2,#PAR2,,,USBUF,#MSGBUF,#40. QIOW$S #IO.WVB,@4(R5),#1,,,,<#MSGBUF,#40.,#40> MOV #" ,MSGBUF+18. MOV #" ,MSGBUF+20. MOV #" ,MSGBUF+22. MOV #" ,MSGBUF+24. MOV #INMSG2,PAR2 MOV SAV3,R3 MOV 2(R3),STMTNO ; NEXT STMT NUMBER MOV (R3),R3 ; NEXT BLOCK # BNE NEXT RETURN ; ; SET STACK POINTER FOR RESTART (ALSO $NAMC AND $SEQC) ; AND JUMP BACK IN DBHTRF. ; TRACER::MOV STKPTR,SP MOV ENTRPT,(SP) MOV NAMC,$NAMC MOV SEQC,$SEQC RETURN SAV3: .BLKW 1 SAV5: .BLKW 1 STR1: .WORD MSG1SZ,MSG1 STR2: .WORD MSG2SZ,MSG2 PAR1: .BLKW 2 ;PROGRAM NAME .WORD 0 ;I/O STATUS IF SO PAR2: .WORD INMSG1 SUBNAM: .BLKW 2 ; SUBROUTINE NAME IN R50 ATSZ: .WORD 2 ; SIZE OF FOLLOWING MSG ATADR: .WORD ATMSG1 STMTNO: .BLKW 1 ; STATEMENT NUMBER MSGBUF: .BLKB 40. INMSG1: .ASCII /IN / INMSG2: .ASCII /FROM/ ATMSG1: .ASCII /AT/ ATMSG2: .ASCII /AT OR AFTER/ MSG1: .ASCII /FATAL ERROR TASK ***%2R*** ABORTED, IF IO STATUS:%D/ MSG1SZ=.-MSG1 MSG2: .ASCIZ /%4A %2R %VA %D/ MSG2SZ=.-MSG2 .EVEN ; .PSECT RSTCOM,GBL,OVR,D,RW ENTRPT: .BLKW 1 ; ENTRY POINT FOR RESTART OF HANDLER STKPTR: .BLKW 1 ; STACK POINTER FOR RESTART NAMC: .BLKW 1 ; TRACE BACK CHAIN PTR SEQC: .BLKW 1 ; SEQUENCE NUMBER .END