*DECK C$TDUMP 
          IDENT  C$TDUMP
          TITLE  C$TDUMP - WRITE TERMINATION DUMP FILE
          COMMENT  WRITE TERMINATION DUMP FILE
**        C.ITDMP - INITIALIZE TERMINATION DUMP 
* 
*         INPUT 
*                B3 - MAIN PROGRAM ENTRY POINT
*                B4 - ADDRESS OF PROGRAM NAME 
* 
*         DOES
*         CALLS REPRIEVE
          SPACE  4
          ENTRY C.ITDMP 
 C.ITDMP  DATA   0
          SA2    MAIN 
          NZ     X2,C.ITDMP  JP IF ALREADY INITIALIZED
          SX6    B3 
          SA6    A2 
          SA0    A1          SAVE A1
          SX7    B4 
          SA7    NAME 
          SB2    =YDBUG.FN
          PL     B2,C.ITDMP  RETURN IF INTERACTIVE DEBUG, NO RECALL 
          RECOVR C.TDUMP,177B 
          SA1    A0          RESTORE A1 
          EQ     C.ITDMP
          EJECT 
**        CDTDUMP - WRITE TERMINAL DUMP FILE
* 
*         CALLED BY REPRIEVE
* 
*         DOES - ALONG WITH C.SNAP WRITES TERMINATION DUMP FILE 
*                AS FOLLOWS:  
*                FOR EACH SNAP
*                WORD 1 - 42/0,18/LENGTH OF SNAP DUMP LITERAL 
*                WORD 2-4 - SNAP DUMP LITERAL 
*                WORD 5 - IF NO PARAGRAPH TRACE ONE OF THE FOLLOWING: 
*                         60/0 - NO I/O DONE IN PROGRAM YET 
*                         1/0,59/LINE OF LAST I/O STATEMENT 
*                         IF PARAGRAPH TRACE
*                         24/0,18/LENGTH,18/PTR 
*                IF PARAGRAPH TRACE PRESENT:  
*                WORD 6-((LENGTH*3)+5) - PARAGRAPH NAMES
*                WORD ((LENGTH*3)+6) - 60/LAST LINE EXECUTED
* 
*                FOR REGULAR TERMINATION DUMP 
*                SAME AS ABOVE EXCEPT AS FOLLOWS: 
*                WORD 1 HAS ALL ZEROES
*                WORD 5-BECOMES WORD 2 ETC. 
* 
*                FOR EACH MAIN PROGRAM: 
*                WORD 1 - 2/1,4/0,18/LENGTH,18/PROGRAM FWA,18/DUMP FWA
*                WORD 2-4 PROGRAM NAME
*                WORD 5-(LENGTH+4) - CORE IMAGE 
* 
*                FOR EACH SUB-PROGRAM SAME AS MAIN EXCEPT 
*                WORD 1 - 2/2,4/0,18/LENGTH,18/PROGRAM FWA,18/DUMP FWA
*                FOR EACH COMMON BLOCK: 
*                WORD 1 - 2/3,22/BLOCK NUMBER,18/LENGTH,18/FWA
*                WORD 2-(LENGTH+1) - CORE IMAGE OF COMMON BLOCK 
* 
*                LAST WORD (OF EACH DUMP) A WORD OF ZEROES
* 
*         DOES NOT NEED TO SAVE ANY REGISTERS 
          SPACE  4
          ENTRY  C.TDUMP
 C.TDUMP  DATA   0
          SA1    C.SNAPD
          NZ     X1,SNAPOPN  JUMP IF A SNAP DUMP
          FETCH  ZZZZZ4P,OC,X5
          SX5    X5-#OPE# 
          ZR     X5,OPENED
          OPENM  ZZZZZ4P,OUTPUT,R 
 OPENED   MX7    0
          SA7    PROGHD 
          PUTP   ZZZZZ4P,PROGHD,10,,,0   NO SNAP LITERAL
 SNAPOPN  BSS    0
          SB1    1
          SB2    =YC.TRLEN
          NG     B2,NOTRACE  NO PARAGRAPH TRACE 
          SA1    =YC.TRLEN
          ZR     X1,NOTRACE  NO PARAGRAPH TRACE 
          BX2    X1 
          LX2    1
          IX1    X1+X2       3*NUMBER OF ENTRIES
          SX6    10 
          IX3    X6*X1
          IX6    X3+X6       RL 
          SA6    SAVERL 
          SA2    =YC.TRPTR
          LX1    18 
          BX7    X1+X2
          SA7    PROGHD 
          PUTP   ZZZZZ4P,PROGHD,10      HEADER
          SA1    SAVERL 
          SX1    X1-10
          PUTP   ZZZZZ4P,=YC.TRWSA,X1           PARAGRAPH NAMES 
 LSTLINE  PUTP   ZZZZZ4P,=YC.LINE,10,,,,TERM   LAST PRGM LINE EXECUTED
          EQ     TDUMP00
 NOTRACE  BSS    0
          SA3    =XC.IOSTK   PICK UP IOSTACK POINTER
          SX2    A3+B1       (X2) = ADDRESS OF TOP OF I/O STACK 
          IX2    X2-X3
          SA1    X3-1        PICK UP RETURN ADDRESS OF LAST I/O STMT
          NZ     X2,LSTIOAC  JUMP IF NOT POINTING TO TOP OF STACK 
          SA1    X3          (X1) = RETURN ADRESS OF LAST I/O STMT
          ZR     X1,LSTIOLN  JUMP TO WRITE ZERO TO DUMP *NO I/O DONE* 
 LSTIOAC  SA1    X1-1        PICK UP LINE NO OF LAST I/O STATEMENT
 LSTIOLN  SX6    X1          X6 = LAST I/O STATEMENT LINE 
          SA6    PROGHD 
          PUTP   ZZZZZ4P,PROGHD,10,,,,TERM  LAST I/O OR 0 LINE TO DUMP
 TDUMP00  BSS    0
          SA1 MAIN
          ZR     X1,TDUMP4   IF NO C.ITDMP DONE 
          SX7    X1-1 
          SA4    X7          PROGRAM HEADER 
          SX6    X4          DUMP END ADDRESS 
          LX7    18 
          AX4    30 
          IX3    X6-X4       NUMBER OF WORDS TO DUMP
          SX2    X3+4 
          SX6    10 
          IX6    X6*X2
          SA6    SAVERL 
          LX3    36 
          BX7    X7+X3
          BX7    X7+X4
          MX3    1
          LX3    59 
          BX7    X7+X3       INDICATE MAIN PROGRAM FOLLOWS
          SA7    PROGHD 
          SA1    NAME        MAIN PROGRAM NAME
          SA1    X1 
          BX7    X1 
          SA7    A7+B1
          SA1    A1+B1
          BX7    X1 
          SA7    A7+B1
          SA1    A1+B1
          BX7    X1 
          SA7    A7+B1
          PUTP   ZZZZZ4P,PROGHD,40,,,0  PROGRAM HEADER
          SA3    SAVERL 
          SX1    40 
          IX3    X3-X1
          SA1    PROGHD 
          SX2    X1          ADDRESS TO DUMP
          PUTP   ZZZZZ4P,X2,X3,,,,TERM  PROGRAM CORE IMAGE
*      SEARCH SUBPROGRAM LIST 
          SA1    FDLLIST
          ZR     X1,TDUMP1
          MX6    0
 TDUMP0   SA6    INDEX
          SX4    #ENTLEN
          IX6    X4*X6
          SA3    FDLLIST
          SX3    X3 
          IX5    X3+X6
          SA3    X5 
          ZR    X3,TDUMP1    END OF LIST
          SA2    X5+#PADDR
          ZR     X2,TDUMP01  SUBPROGRAM NOT LOADED
          SX1    X2-1        PROGRAM HEADER ADDRESS 
          BX7    X1 
          LX7    18 
          SA4    X1 
          SX6    X4          DUMP END   ADDRESS 
          AX4    30          DUMP START ADDRESS 
          IX3    X6-X4
          SX2    X3+4 
          SX6    10 
          IX6    X6*X2
          SA6    SAVERL 
          LX3    36          DUMP LENGTH
          BX7    X7+X3
          BX7    X7+X4
          MX3    1
          BX7    X7+X3       INDICATE SUB-PROGRAM FOLLOWS 
          SA7    PROGHD 
          SA1    X5+#PNAME   PROGRAM NAME 
          BX7    X1 
          SA7    A7+B1
          SA1    A1+B1
          BX7    X1 
          SA7    A7+B1
          SA1    A1+B1
          BX7    X1 
          SA7    A7+B1
          PUTP   ZZZZZ4P,PROGHD,40,,,0  PROGRAM HEADER
          SA3    SAVERL 
          SX3    X3-40
          SA1    PROGHD 
          SX2    X1 
          PUTP   ZZZZZ4P,X2,X3,,,,TERM  PROGRAM CORE IMAGE
 TDUMP01  SA1    INDEX
          SX6    X1+B1
          EQ     TDUMP0 
*      COMMON BLOCKS
 TDUMP1   SA1    COMBLK 
          ZR     X1,TDUMP3
          SB2    X1          LIST ADDRESS 
          AX1    30 
 TDUMP2   SX6    X1-1 
          SA6    NBLOCKS
          SX1    B2+X6       BLOCK HEADER 
          SA3    X1 
          MX6    1
          AX6    1
          BX6    X6+X3
          SA6    A3          INDICATE COMMON BLOCK FOLLOWS
          PUTP   ZZZZZ4P,X1,10,,,0       HEADER 
          SA1    NBLOCKS
          SA2    COMBLK 
          SB2    X2 
          SA3    X1+B2
          MX6    1
          AX6    1
          BX6    -X6*X3 
          SA6    A3          CLEAR BLOCK HEADERS 58TH-59TH BITS 
          SA1    X1+B2
          SX3    X1          FWA BLOCK
          AX1    18 
          SX1    X1 
          SX6    10 
          IX2    X6*X1
          PUTP   ZZZZZ4P,X3,X2,,,,TERM  BLOCK 
          SA2    COMBLK 
          SB2    X2 
          SA1    NBLOCKS
          NZ     X1,TDUMP2
 TDUMP3   MX7    0
          SA7    PROGHD 
          PUTP   ZZZZZ4P,PROGHD,10,,,0,TERM     WORD OF ZEROES
          SA1    C.SNAPD
          NZ     X1,C.TDUMP  DO NOT CLOSE 4P IF SNAP DUMP 
          CLOSEM ZZZZZ4P
          SB2    B0 
          EQ     C.TDUMP
  
 TDUMP4   SA1    TDUMPA 
          NZ     X1,C.TDUMP  IF MESSAGE ALREADY ISSUED
          MX6    -1 
          SA6    A1          SET FLAG SO ONLY 1 MESSAGE 
          MESSAGE (=C* TDF NOT SPECIFIED - SNAP DUMP IGNORED.*),,RCL
          EQ     C.TDUMP     RETURN 
  
 TDUMPA   DATA   0           .NE. 0 AFTER MESSAGE ISSUED
          SPACE  4
          USE    /C.CMBLK/
 COMBLK   BSS    1
          USE    *
          USE    /C.FDLCM/
 FDLLIST  BSS    1
          USE    *
 INDEX    BSS   1 
 MAIN     DATA   0
 NAME     BSS    1
 NBLOCKS  BSS     1 
 PROGHD   BSS    4
 SAVERL   BSS    1
          ENTRY  C.SNAPD
 C.SNAPD  DATA   0
 #ENTLEN  EQU    6
 #PADDR   EQU    4
 #PNAME   EQU    0
          ENTRY  ZZZZZ4P
 ZZZZZ4P  FILE   LFN=ZZZZZ4P,FO=SQ,BT=C,RT=U,MRL=777777B,BFS=513
          END 
