*DECK TDRDWR
          IDENT  TDRDWR 
          TITLE  TDRDWR - I/O INTERFACE FOR TERMINAL DUMP ANALYZER. 
  
          MACHINE  ANY,I
          COMMENT  I/O INTERFACE FOR TDA. 
          SST 
          B1=1
          SPACE  4
**        ***************************************************** 
*         * TDRDWR - I/O INTERFACE FOR TERMINAL DUMP ANALYZER * 
*         ***************************************************** 
* 
* 
  
  
*         MACE I/O ROUTINES.
  
          SPACE  4,10 
**        TDFET - SET FILE NAMES IN FETS. 
* 
*         PROC TDFET; 
*         TDFET(LFN1,LFN2,LFN3,LFN4); 
* 
*         LFN1 = LFN FOR COMPILER TABLE FILE (DEFAULT = TDFILE).
*         LFN2 = LFN FOR CORE IMAGE DUMP (SHOULD ALWAYS = ZZZZZ4P). 
*         LFN3 = LFN FOR DUMP OUTPUT (DEFAULT = OUTPUT).
*         LFN4 = LFN FOR DIRECTIVES FILE (DEFAULT = INPUT). 
  
  
          ENTRY  TDFET
 TDFET    EQ     *+1S17      ENTRY / EXIT 
          SB1    1
          SA2    A1+B1
          MX7    42 
          SA1    X1          1ST LFN
          SA3    A2+B1
          SX5    B1 
          SA2    X2          2ND LFN
          BX6    X7*X1
          BX6    X6+X5
          SA6    FA 
          BX6    X7*X2
          BX6    X6+X5
          SA6    FB 
          SA4    A3+B1
          SA3    X3          3RD LFN
          BX6    X7*X3
          BX6    X6+X5
          SA6    FC 
          SA4    X4          4TH LFN
          BX6    X7*X4
          BX6    X6+X5
          SA6    FD 
          EQ     TDFET       RETURN 
          SPACE  4,10 
**        TDREAD - ISSUE READ FUNCTION. 
* 
*         PROC TDREAD;
*         TDREAD(LFN);
* 
*         LFN = FILE NAME.
  
  
          ENTRY  TDREAD 
 TDREAD   EQ     *+1S17      ENTRY / EXIT 
          RJ     SETFET 
          SA2    A0+B1       SET BUFFER EMPTY 
          SX6    X2 
          SA6    A2+B1
          SA6    A6+B1
          READ   A0          ISSUE READ 
          EQ     TDREAD      RETURN 
          SPACE  4,10 
**        TDREADW - READ INTO WORKING BUFFER. 
* 
*         FUNC TDREADW; 
*         STAT=TDREADW(LFN,WSA,N);
* 
*         LFN  = FILE NAME. 
*         WSA  = WORKING STORAGE FWA. 
*         N    = WORKING STORAGE LENGTH.
*         STAT = 0 - EOR NOT REACHED. 
*             > 0 - EOR REACHED BEFORE XFER COMPLETE. 
*             < 0 - EOF/EOI REACHED.
  
  
          ENTRY  TDREADW
 TDREADW  EQ     *+1S17      ENTRY / EXIT 
          RJ     SETFET 
          SA2    A1+B1       (B6) = WSA 
          SA3    A2+B1       (B7) = WORD COUNT
          SA3    X3 
          SB6    X2 
          SB7    X3 
          READW  A0,B6,B7    FILL WORKING BUFFER
          SX6    X1          RETURN STATUS
          EQ     TDREADW     RETURN 
          EJECT 
**        TDREADH - READ HOLLERITH CARD INTO WORKING BUFFER 
* 
*         FUNC   TDREADH; 
*         RL = TDREADH(LFN,WSA,N);
* 
*         LFN  = FILE NAME. 
*         WSA  = WORKING STORAGE FWA. 
*         N    = WORKING STORAGE LENGTH.
*         RL   = 0 - EOR SEEN NO INPUT
*              < 0 - EOF/EOI REACHED
*              > 0 - NUMBER OF CHARACTERS READ
* 
  
          ENTRY  TDREADH
 TDREADH  EQ     *+1S17            ENTRY / EXIT 
          RJ     SETFET 
          SA2    A1+B1
          SA3    A2+B1
          SA3    X3 
          SB6    X2                B6=WSA 
          SB7    X3                B7 = WORD COUNT
          SX6    X2 
          READH  A0,B6,B7 
          SX6    X1 
          EQ     TDREADH
          SPACE  4,10 
**        TDRET - RETURN FILE.
* 
*         PROC TDRET; 
*         TDRET(LFN); 
* 
*         LFN = FILE NAME.
  
  
          ENTRY  TDRET
 TDRET    EQ     *+1S17      ENTRY / EXIT 
          RJ     SETFET 
          RETURN  A0         ISSUE RETURN 
          EQ     TDRET       RETURN 
          SPACE  4,10 
**        TDREW - REWIND FILE.
* 
*         PROC TDREW; 
*         TDREW(LFN); 
* 
*         LFN = FILE NAME.
  
  
          ENTRY  TDREW
 TDREW    EQ     *+1S17      ENTRY / EXIT 
          RJ     SETFET 
          REWIND  A0         ISSUE REWIND 
          EQ     TDREW       RETURN 
          SPACE  4,10 
**        TDSKIPF - SKIP FILE FORWARD N RECORDS.
* 
*         PROC TDSKIPF; 
*         TDSKIPF(LFN,N); 
* 
*         LFN  = FILE NAME. 
*         N    = NUMBER OF RECORDS TO SKIP. 
  
  
          ENTRY  TDSKIPF
 TDSKIPF  EQ     *+1S17      ENTRY / EXIT 
          RJ     SETFET 
          SA2    A0+B1       SET BUFFER EMPTY 
          SX6    X2 
          SA6    A2+B1
          SA6    A6+B1
          SA4    A1+B1       (X4) = SKIP COUNT
          SA4    X4 
          SKIPF  A0,X4,RCL   ISSUE SKIPF WITH RECALL
          EQ     TDSKIPF     RETURN 
          SPACE  4,10 
**        TDWRITH - WRITE FROM WORKING STORAGE. 
* 
*         PROC TDWRITH; 
*         TDWRITH(LFN,WSA,N); 
* 
*         LFN  = FILE NAME. 
*         WSA  = WORKING STORAGE FWA. 
*         N    = WORKING STORAGE LENGTH.
  
  
          ENTRY  TDWRITH
 TDWRITH  EQ     *+1S17      ENTRY / EXIT 
          RJ     SETFET 
          SA2    A1+B1       (B6) = WSA 
          SA3    A2+B1       (B7) = WORD COUNT
          SA3    X3 
          SB6    X2 
          SB7    X3 
          WRITEH  A0,B6,B7   EMPTY WORKING BUFFER, DELETING SPACES
          EQ     TDWRITH     RETURN 
          SPACE  4,10 
**        TDWRITR - WRITE END RECORD. 
* 
*         PROC TDWRITR(LFN);
*         TDWRITR(LFN); 
* 
*         LFN = FILE NAME.
  
  
          ENTRY  TDWRITR
 TDWRITR  EQ     *+1S17      ENTRY / EXIT 
          RJ     SETFET 
          WRITER  A0         ISSUE END RECORD WRITE 
          EQ     TDWRITR     RETURN 
          SPACE  4,10 
*         SETFET - LOCATE PROPER FET. 
* 
*         ENTRY  1ST ARG IN A1 CALLING SEQUENCE = LFN.
* 
*         EXIT   (X5) = LFN.
*                (B1) = 1.
*                (A0) = FET ADDRESS.
* 
*         USES   X - 2, 3, 4, 6, 7. 
*                B - NONE.
*                A - 2, 3, 4, 5.
  
  
 SETFET   EQ     *+1S17      ENTRY / EXIT 
          SB1    1
          SA5    X1          (X5) = LFN 
          MX6    42 
          SA2    FA          (X2) = 1ST FET 
          SA3    FB          (X3) = 2ND FET 
          BX5    X6*X5
          BX2    X6*X2
          SA4    FC          (X4) = 3RD FET 
          BX3    X6*X3
          BX4    X6*X4
          SA0    A2          SET FOR 1ST FET
          IX7    X5-X2
          ZR     X7,SETFET   RETURN IF 1ST FET
          IX7    X5-X3
          SA0    A3                SET FOR 2ND FET
          ZR     X7,SETFET         RETURN IF 2ND FET
          IX7    X5-X4
          SA0    A4                SET FOR 3RD FET
          ZR     X7,SETFET         RETURN IF 3RD FET
          SA0    FD                SET FOR 4TH FET
          EQ     SETFET      RETURN 
          SPACE  4,10 
*         FETS AND BUFFERS. 
  
 BUFALTH  EQU    1001B
 BUFBLTH  EQU    1001B
 BUFCLTH  EQU    1001B
 BUFDLTH  EQU    1001B
 FA       FILEB  BUFA,BUFALTH 
 FB       FILEB  BUFB,BUFBLTH 
 FC       FILEC  BUFC,BUFCLTH 
 BUFA     BSS    BUFALTH
 BUFB     BSS    BUFBLTH
 BUFC     BSS    BUFCLTH
 BUFD     EQU    BUFB 
 FD       FILEC  BUFD,BUFDLTH 
  
          END 
