         PROC  &P,1,&OUTPUT=YES,&INPUT=YES                              MTI00010
MTIO3    NAME                                                           MTI00020
MTIO     NAME                                                           MTI00030
         LCL   &FB,&N1,&N2,&N3,&N4,&N5                                  MTI00040
         GBL   &M$D                                                     MTI00050
&N1      SET   1*('&OUTPUT'='YES')                                      MTI00060
&N2      SET   'T'                                                      MTI00070
&N3      SET   ('&OUTPUT'='YES')**('&INPUT'='YES')                      MTI00080
&N4      SET   1*('&INPUT'='YES')                                       MTI00090
&N5      SET 16                                                         MTI00100
&FB      SET   17                                                       MTI00110
&FB      SET   &FB+64*('&OUTPUT'='YES')+32*('&INPUT'='YES')             MTI00120
DD$&N2.&N1.&N3.&N4   CSECT                                              MTI00130
         DO    (&N1=1)**(&N3=1)**(&N4=1)                                MTI00140
DD$T100  EQU   *                                                        MTI00150
DD$T001  EQU   *                                                        MTI00160
DD$T101  EQU   *                                                        MTI00170
         ENTRY DD$T100                                                  MTI00180
         ENTRY DD$T001                                                  MTI00190
         ENTRY DD$T101                                                  MTI00200
         ENDO                                                           MTI00210
         DO    0                                                        MTI00230
*   REGISTER UTILIZATION:                                               MTI00240
*        RF$ _ COVER REGISTER FOR I/O PROCESSOR/SAT PROCESSOR           MTI00250
*        R1$ _ POINTS TO DTF/CCB                                        MTI00260
*        DC$ _ COVER FOR PARTITION                                      MTI00270
*        RE$ _ RETURN ADDR TO CALLING PROG/LINKAGE TO SAT PROCESSOR     MTI00280
*        RD$ _ REGISTER SAVE AREA ADDRESS                               MTI00290
         ENDO                                                           MTI00300
         USING *,RF$                                                    MTI00310
         USING DM$DSCT,1                                                MTI00320
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  *  MTI00330
*                                                                    *  MTI00340
*   THE FOLLOWING PROGRAMS ARE THE SOLE PROPERTY OF SPERRY           *  MTI00350
*                                                                    *  MTI00360
* UNIVAC CONTAINING ITS PROPRIETARY, CONFIDENTIAL INFORMATION        *  MTI00370
*                                                                    *  MTI00380
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  *  MTI00390
         DO    '&M$D'=''                                                MTI00400
&M$D     SET   0                                                        MTI00410
R0$      EQU   0                                                        MTI00420
R1$      EQU   1                                                        MTI00430
D2$      EQU   2                                                        MTI00440
D3$      EQU   3                                                        MTI00450
D4$      EQU   4                                                        MTI00460
D5$      EQU   5                                                        MTI00470
D6$      EQU   6                                                        MTI00480
D7$      EQU   7                                                        MTI00490
D8$      EQU   8                                                        MTI00500
D9$      EQU   9                                                        MTI00510
DA$      EQU   10                                                       MTI00520
DB$      EQU   11                                                       MTI00530
DC$      EQU   12                                                       MTI00540
RD$      EQU   13                                                       MTI00550
RE$      EQU   14                                                       MTI00560
RF$      EQU   15                                                       MTI00570
         ENDO                                                           MTI00580
*  COMMON IOCS PROCESSOR                                                MTI00590
         B     DT$IO                                                    MTI00600
         DC    Y(&N5)                   PROCESSOR TYPE CODE             MTI00610
         DC    Y(&FB)                   PROCESSOR FACILITIES BYTES      MTI00620
DT$ERADR DC    A(DT$ERRTN-DD$&N2.&N1.&N3.&N4)                           MTI00630
DT$IO    EQU   *                                                        MTI00640
         ST    RD$,DC$SAVR              STORE REG 13                    MTI00650
         CLI   DC$SAV,X'F0'             SAVAREA SPECIFIED ?             MTI00660
         BE    DT$C1                    NO,DT$C1                        MTI00670
         L     RD$,DC$SAV               YES,LOAD SAVAREA ADDRESS        MTI00680
DT$C1    STM   RE$,DC$,12(RD$)          STORE USER REGS.                MTI00690
         L     14,DT$ERADR               STORE ERR ADR(FOR SHARED CODE) MTI00691
         AR    14,15                                                    MTI00692
         ST    14,DC$ERCD                                               MTI00693
         L     12,DC$PADDR         LOAD TCA ADDRESS                     MTI00700
         TM    DC$MFLG,X'80'       FILE OPEN ?                          MTI00710
         BO    DT$C10                   YES, CONTINUE                   MTI00720
         OI    DC$ERFLG,X'02'      SET INVALID MACRO SEQ FLAG           MTI00730
         MVI   DC$ERCD,X'13'       SET FILE NOT OPEN ERROR CODE         MTI00740
         BAL   14,DT$ERRTN         EXIT WITH ERROR                      MTI00750
DT$C10   MVC   DC$FCS(1),DC$REQS   SAVE FUNCTION CODE                   MTI00760
         MVI   DD$IDLOC,X'00'           CLEAR OPCODE SAVE FIELD         MTI00775
         NI    DC$ERFLG,X'80'           CLEAR ERROR FLAG 1              MTI00780
         CLI   DC$DTF,X'10'             VALID DTF TYPE CODE ?           MTI00790
         BE    DT$C2                    YES, CONTINUE                   MTI00800
         OI    DC$ERFLG,X'40'           SET INVALID DTF FLAG            MTI00810
         MVI   DC$ERCD,X'15'            SET INVALID DTF CODE            MTI00820
         BAL   14,DT$ERRTN              LINK TO ERROR ROUTINE           MTI00830
DT$C2    TM    DC$FG1,X'80'             OPTIONAL FILE?                  MTI00840
         BNO   DT$C2A                   NO,                             MTI00850
         DO    '&OUTPUT'='YES'                                          MTI00860
         TM    DC$FG3,X'80'             OUTPUT FILE?                    MTI00870
         BO    DT$EXIT                                                  MTI00880
         ENDO                                                           MTI00890
         DO    '&INPUT'='YES'                                           MTI00900
         TM    DC$FG3,X'40'             INPUT FILE                      MTI00910
         BO    DT$EOF1                  YES,EXIT TO EOF ROUTINE         MTI00920
         ENDO                                                           MTI00930
         B     DT$ERR                                                   MTI00940
DT$C2A   TM    DC$REQS,X'40'            CNTRL                           MTI00950
         BO    DT$CTL3                  YES                             MTI00960
         DO    '&INPUT'='YES'                                           MTI00970
         CLI   DC$REQS,X'10'            GET ?                           MTI00980
         BE    DT$GETT                                                  MTI00990
         ENDO                                                           MTI01000
         DO    '&OUTPUT'='YES'                                          MTI01010
         CLI   DC$REQS,X'20'            PUT ?                           MTI01020
         BE    DT$PUTT                                                  MTI01030
         DO    '&OUTPUT'='YES'                                          MTI01040
         CLI   DC$REQS,X'82'            TRUNC ?                         MTI01050
         BE    DT$TRUNC                 YES                             MTI01060
         ENDO                                                           MTI01070
         ENDO                                                           MTI01080
         DO    '&INPUT'='YES'                                           MTI01090
         CLI   DC$REQS,X'80'            RELSE ?                         MTI01100
         BE    DT$RELSE           YES                                   MTI01110
         ENDO                                                           MTI01120
         CLI   DC$REQS,X'84'            FEOV ISSUED ?                   MTI01130
         BE    DT$FEOV                  YES                             MTI01140
DT$ERR   OI    DC$ERFLG,X'02'           SET INVALID MACRO FLAG          MTI01150
DT$ERR1  MVI   DC$ERCD,X'14'            SET INVALID MACRO/MACRO SEQ     MTI01160
         MVC   DC$REQS(1),DC$FCS        RESTORE FUNCTION CODE           MTI01170
DT$ERR2  BAL   14,DT$ERRTN              LINK TO ERROR ROUTINE           MTI01180
DT$EXIT  LM    RE$,DC$,12(RD$)          RESTORE USER REGS               MTI01190
         L     RD$,DC$SAVR                                              MTI01200
         BR    RE$                      RETURN                          MTI01210
DT$RW1A  NI    DC$FG4,X'FD'       CLEAR READ REQUIRED                   MTI01240
DT$RW1   XC    DS$CUR(4),DS$CUR         RESET BUFFER POINTERS           MTI01250
         BAL   2,DT$WAIT                PUT-IOA2/WORKA;GET-IOA2+WORKA   MTI01251
         BAL   11,DT$EXCP               EXCP:NEXT BLK:PUT-ALL,GET=WORKA MTI01254
         NI    DC$MFLG,X'DF'            CLEAR WAIT=YES BIT              MTI01260
         BAL   DB$,DT$SWAP              NO,SWAP I/O BUFFERS             MTI01270
         XC    DD$HIEOD(4),DD$HIEOD     RESET CUR DISP.(READ BWD)       MTI01290
         NI    DC$FG5,X'6F'             CLEAR FLAGS                     MTI01300
         DO    '&OUTPUT'='YES'                                          MTI01310
         TM    DD$IDLOC,X'07'           CNTRL ?(ONLY FOR OUTPUT FILES)  MTI01320
         BO    DT$CTL3C                 YES,LAST BLK WRITTEN,DO CNTRL   MTI01330
         TM    DC$RFM+1,X'01'      INTERNAL PUT REQUIRED?               MTI01340
         BO    DT$PUTT                  YES,CONTINUE                    MTI01350
         ENDO                                                           MTI01360
         B     DT$EXIT            EXIT                                  MTI01370
         DO    '&OUTPUT'='YES'                                          MTI01380
DT$PUTT  NI    DC$RFM+1,X'FE'           CLEAR INT. PUT FLAG             MTI01390
         TM    DC$FG3,X'80'               PUT PERMITTED ?               MTI01420
         BNO   DT$ERR                   NO,EXIT-INV IMP MACRO ERROR     MTI01430
         TM    DC$FG5,X'40'             EOF SET?                        MTI01450
         BZ    DT$PT1                   NO                              MTI01460
DT$SPERR MVI   DC$ERCD,X'41'            ERROR-FILE SPACE EXHAUSTED      MTI01470
         B     DT$ERR2                                                  MTI01480
DT$PT1   OI    DC$FG6,X'02'             SET BUFFER ACTIVE               MTI01490
         TM    DC$FG4,X'40'             IOA2 SPECD?                     MTI01491
         BO    DT$PT2A                  YES                             MTI01500
         BAL   2,DT$WAIT                WAIT:ALL IOA1                   MTI01580
DT$PT2A  TM    DC$R+1,X'08'              EOT SENSED BY OPEN?            MTI01590
         BO    DT$FEOVP                  YES,NO DATA WRITE              MTI01591
         OI    DC$FG5,X'01'             SET PUT ISSUED                  MTI01600
DT$PT3   BAL   11,DT$RCP                LINK TO RECORD PROCESSOR        MTI01610
DT$PT4   TM    DC$FG5,X'80'             END OF BUFFER SET ?             MTI01620
         BZ    DT$EXIT                  NO,EXIT TO USER                 MTI01630
DT$PT40  NI    DC$RFM+1,X'FD'           CLEAR BUF ACTIVE FLAG           MTI01660
         TM    DC$FG4,X'C0'             WORKA/IOAREA2 SPECIFIED ?       MTI01670
         BNZ   DT$RW1              YES, EXIT TO WRITE BLOCK             MTI01680
DT$PT70  OI    DC$MFLG,X'20'            SET WAIT=YES FLAG               MTI01690
         B     DT$RW1                                                   MTI01700
         ENDO                                                           MTI01710
         DO    '&INPUT'='YES'                                           MTI01720
DT$GETT  EQU   *                                                        MTI01730
         TM    DC$FG3,X'40'               GET PERMITTED ?               MTI01740
         BNO   DT$ERR                   NO,EXIT-INV IMP MACRO ERROR     MTI01750
DT$GETA  TM    DC$FG6,X'40'             EOV SET FROM SAT?               MTI01760
         BO    DT$FEOV                  BRANCH TO EOF/EOV PROCESSING    MTI01770
         OI    DC$FG5,X'02'             SET GET ISSUED                  MTI01780
         TM    DC$FG4,X'02'             READ REQUIRED ?                 MTI01790
         BNO   DT$GT1                   NO                            S MTI01800
DT$GT0B  XC    DS$CUR(4),DS$CUR         CLEAR BUFFER POINTERS           MTI01810
         XC    DD$HIEOD(4),DD$HIEOD     RESET CUR DISP.(READ BWD)       MTI01820
         BAL   2,DT$WAIT                WAIT:ONLY IOA2+NONWORKA         MTI01840
         BAL   11,DT$EXCP               EXCP:1ST-ALL,REST-ALL NONWORKA  MTI01841
         NI    DC$FG5,X'7F'        CLEAR END OF BUFFER FLAG             MTI01850
         NI    DC$FG4,X'FD'             CLEAR READ REQUIRED             MTI01860
         BAL   11,DT$SWAP               SWAP IOA1/IOA2                  MTI01870
DT$GT1   TM    DC$FG4,X'40'             IOA2 SPECIFIED?                 MTI01880
         BNO   DT$GT1A                  NO                              MTI01890
         TM    DC$FG6,X'04'             READ REQUIRED  FOR IOA2?        MTI01900
         BNO   DT$GT2                   NO                              MTI01910
         NI    DC$FG6,X'FB'             CLEAR FLAG                      MTI01920
         NI    DC$MFLG,X'DF'            CLEAR WAIT=YES                  MTI01930
         BAL   11,DT$EXCP               EXCP:ONLY 1 TIME-ALL IOA2       MTI01940
         BAL   11,DT$SWAP               SWAP IOA1/IOA2                  MTI01950
         B     DT$GT2                                                   MTI01960
DT$GT1A  BAL   2,DT$WAIT                ISSUE WAIT ONLY-ALL IOA1        MTI01970
DT$GT2   BAL   11,DT$RCP                LINK TO RECORD PROCESSOR        MTI02010
         TM    DC$FG5,X'80'             END OF BUFFER                   MTI02020
         BNO   DT$EXIT             NO, EXIT                             MTI02030
         TM    DC$FG4,X'80'             WORKA SPEC ?                    MTI02040
         BO    DT$RW1A                  YES,ISSUE READ                  MTI02050
DT$RDWT  OI    DC$FG4,X'02'             SET READ REQUIRED               MTI02060
         B     DT$EXIT             EXIT                                 MTI02070
DT$EOF1  NI    DC$FG4,X'FC'             CLEAR SEQ READ/WAIT REQD'       MTI02080
         L     14,DS$EOFA               LOAD EOF ADDRESS                MTI02090
         ST    14,16(,13)               STORE IN SAVE AREA              MTI02100
         LM    14,12,12(13)             RESTORE USER REGISTERS          MTI02110
         L     RD$,DC$SAVR              USER REGISTERS                  MTI02120
         BR    RF$                 EXIT TO EOF ROUTINE                  MTI02130
         ENDO                                                           MTI02140
DT$SWAP  XC    DC$A1(4),DC$A2           SWAP                            MTI02150
         XC    DC$A2(4),DC$A1             I/O BUFFER                    MTI02160
         XC    DC$A1(4),DC$A2                 ADDRESSES                 MTI02170
         BR    DB$                      RETURN                          MTI02180
DT$FEOVP NI    DC$FG6,X'FD'             CLEAR BUFFER ACTIVE             MTI02181
DT$FEOV  OI    DC$ERRF+3,X'20'          SET EOV                         MTI02190
         CLC   DC$PUB(1),DC$PUB+1       LAST VOLUME ACTIVE ?            MTI02200
         BNE   DT$FEOVS                 NO, SWAP VOLUMES                MTI02210
         TM    DC$FG5,X'40'             EOF ALREADY SET?                MTI02220
         BO    DT$ERR                   YES,INP.MACRO ERROR             MTI02230
         OI    DC$ERRF+3,X'40'          SET EOF                         MTI02240
         OI    DC$FG5,X'40'             SET EOF                         MTI02250
         DO    '&INPUT'='YES'                                           MTI02260
         TM    DC$FG3,X'40'             INPUT?                          MTI02270
         BO    DT$EOF1                  YES,EXIT TO EOF PROCESSING      MTI02280
         ENDO                                                           MTI02290
         DO    '&OUTPUT'='YES'                                          MTI02291
         CLI   DC$REQS,X'84'            FEOV ISSUED?                    MTI02300
         BE    DT$EXIT                  YES,EXIT                        MTI02301
         TM    DC$FG4,X'40'             IF PUT,IOA2 SPECD.?             MTI02302
         BO    DT$SPERR                 YES,NO SPACE,LAST BLK.NOT WRTN. MTI02303
         TM    DC$FG6,X'01'             INTL. PUT(WORKA+VARBLK)?        MTI02304
         BO    DT$SPERR                 YES,NO SPACE,WORKA REC NOT WRTN MTI02305
         ENDO                                                           MTI02306
         B     DT$EXIT                  NO,RETURN TO USER               MTI02307
DT$FEOVS CLI   DC$REQS,X'84'            FEOV ISSUED?                    MTI02310
         BE    DT$FEOVV                 YES,NO BUFFER SWAP              MTI02320
         BAL   11,DT$SWAP               SAVE 2ND BUF. FOR NEXT VOL      MTI02330
DT$FEOVV LM    14,12,12(13)             STORE USER REGS                 MTI02340
         L     13,DC$SAVR              *                                MTI02350
         LA    0,C'V'                  LOAD EOV CONSTANT                MTI02360
         SVC   39                       CALL CLOSE                      MTI02370
         L     15,DC$IOCS              RESTORE COVER                    MTI02380
         LA    14,DT$FEOV1         LOAD RETURN                          MTI02390
         SVC   40                       CALL FEOV                       MTI02400
DT$FEOV1 SVC   38                       CALL OPEN                       MTI02410
         L     15,DC$IOCS              RESTORE COVER                    MTI02420
         ST    13,DC$SAVR               STORE R13                       MTI02430
         CLI   DC$SAV,X'F0'            SAVEAREA SPECD. IN DTF?          MTI02440
         BE    DT$FEOV2                NO                               MTI02450
         L     13,DC$SAV               IF YES,RESTORE R13               MTI02460
DT$FEOV2 EQU   *                                                        MTI02470
         STM   1,12,24(13)              STORE  USER'S REG.              MTI02480
         CLI   DC$REQS,X'84'            FEOV ISSUED?                    MTI02490
         BE    DT$EXIT                  YES,EXIT TO USER                MTI02500
         BAL   11,DT$SWAP               RESTORE BUF FOR WRITE           MTI02510
         DO    ('&OUTPUT'='YES')**('&INPUT'='YES')                      MTI02520
         TM    DC$FG3,X'80'             OUTPUT?                         MTI02530
         BZ    DT$GT0B                  NO,INPUT;CONTINUE PROCESSING    MTI02540
         ENDO                                                           MTI02550
         DO    '&OUTPUT'='YES'                                          MTI02560
         TM    DC$R+1,X'08'              EOT SENSED IN OPEN             MTI02561
         BO    DT$FEOV3                  YES,PROCESS FIRST RECORD       MTI02562
         TM    DC$FG4,X'40'             IOA2 SPECIFIED?                 MTI02570
         BO    DT$RW1                   YES,WRITE SAVED BLOCK           MTI02580
         TM    DC$FG4,X'80'             IF IOA1 ONLY,WORKA SPECIFIED?   MTI02590
         BZ    DT$EXIT                  NO,EXIT TO USER                 MTI02600
DT$FEOV3 NI    DC$R+1,X'F7'              CLEAR EOT BIT                  MTI02601
         B     DT$PUTT                                                  MTI02610
         ENDO                                                           MTI02630
         DO    ('&OUTPUT'='YES'=0)**('&INPUT'='YES')                    MTI02640
         B     DT$GT0B             EXIT TO GET                          MTI02650
         ENDO                                                           MTI02660
*    RECORD PROCESSING ROUTINE                                          MTI02670
DT$RCP   L     D3$,DC$A1                LOAD CURRENT I/O BUFFER ADDR    MTI02680
         L     4,20(,13)                LOAD WORK AREA ADDRESS          MTI02690
         LH    5,DC$PBKS                LOAD MAXM. BLOCK SIZE           MTI02700
         DO    '&INPUT'='YES'                                           MTI02710
         CLI   DC$REQS,X'10'            GET?                            MTI02720
         BNE   DT$RCP00                 NO                              MTI02730
         S     5,DC$PCA4                CALC EFF. BKSZ                  MTI02740
         TM    DC$RFM,X'0A'             VARIABLE?  **LENCHK PROCESSING  MTI02750
         BNM   DT$RCPB                  NO                              MTI02760
         TM    DC$TFG1,X'80'            ASCII?                          MTI02770
         BZ    DT$RCPA                  NO,EBCDIC                       MTI02780
         LA    9,4                      IF ASCII,BUFOFF=4?              MTI02790
         CH    9,DC$BUFOF               *                               MTI02800
         BNE   DT$RCPB                  NO,LENCHK PROCESSING IGNORED    MTI02810
         BAL   9,DT$VASC                IF 4,CONVERT BKSZ INTO BINARY   MTI02820
         CR    5,8                      ACTUAL BKSZ=BKSZ IN HEADER?     MTI02830
         BE    DT$RCPB                  YES                             MTI02840
         TM    DC$TFG1,X'20'            LENCHK SPECIFIED?               MTI02850
         BZ    DT$RCPB                  NO                              MTI02860
         MVI   DC$ERCD,X'25'            WRONG LENGTH ERROR              MTI02870
         MVI   DC$ERRF+3,X'10'           *                              MTI02880
         BAL   14,DT$ERRTN              LINK TO ERROR ROUTINE           MTI02890
DT$RCPA  LH    5,0(3)                   FOR EBCDIC BKSZ FROM BLK HEADER MTI02900
DT$RCPB  STH   5,DD$HIEOD+2             STORE EFF.BKSZ FOR RD.BWD       MTI02910
         ENDO                                                           MTI02920
DT$RCP00 AH    3,DC$BUFOF               SET BKSZ OFFSET FOR ALL CASES   MTI02930
         TM    DC$RFM,X'14'             FIXED RECORDS?                  MTI02940
         BNM   DT$VBL              NO                                   MTI02950
DT$RCP20 CLI   DC$REQS,X'10'            GET ?                           MTI02960
         BNE   DT$RCP21                 NO                              MTI02970
         LH    7,DC$REC                 CALC REC/BLK                    MTI02980
         ST    7,DC$BBB                 *                               MTI02990
         XR    6,6                      *                               MTI03000
         LR    7,5                      *                               MTI03010
         D     6,DC$BBB                 *                               MTI03020
         LTR   6,6                      BKSZ MULT RCSZ ?                MTI03030
         BNZ   DT$RCP8                  NO                              MTI03040
DT$RCP21 LH    6,DC$REC                 LOAD RCSZ                       MTI03050
         LR    7,6                      LOAD RCSZ FOR VALIDITY CHECK    MTI03060
         AH    D3$,DS$CUR               ADD CURREN BUF.DISP. TO POINT   MTI03070
DT$RCP1  AH    3,DS$LST                 ADD SIZE OF LAST R/W            MTI03080
DT$RCP2  LTR   7,7                      RCSZ > ZERO ?                   MTI03090
         BNP   DT$RCP8                  NO, INVALID RCSZ                MTI03100
         SH    7,DC$PBKS          VALID BKSZ ?                          MTI03110
         BNP   DT$RCP2A                 YES                             MTI03120
DT$RCP8  MVI   DC$ERRF+3,X'80'          SET INVALID RECSIZE FLAG        MTI03130
         MVI   DC$ERCD,X'18'            SET INVALID RECSIZE CODE        MTI03140
         BAL   14,DT$ERRTN              LINK TO ERROR ROUTINE           MTI03150
DT$RCP2A LH    7,DS$CUR                 UPDATE CURRENT BUFFER           MTI03160
         AH    D7$,DS$LST                  DISPLACEMENT BY SIZE         MTI03170
         STH   D7$,DS$CUR                     OF LAST R/W               MTI03180
         STH   D6$,DS$LST               UPDATE LAST R/W WITH CUR RCSZ   MTI03190
DT$RCP3  LH    D7$,DS$CUR               CALCULATE BYTES                 MTI03200
DT$RCP11 AH    7,DS$LST                 ADD CURRENT R/W SIZE            MTI03210
DT$RCP7  AH    7,DC$BUFOF               BKSZ OFFSET FOR VALIDITY TESTS  MTI03220
         LR    0,7                      SAVE VARIABLE BLOCK SIZE        MTI03230
DT$RCP5  CLI   DC$REQS,X'20'            PUT ?                           MTI03240
         BNE   DT$RCP5X                 NO                              MTI03250
         CH    7,DC$PBKS                ACCUM BKSZ>MAX BKSZ ?           MTI03260
         BH    DT$RCP5X                 YES                             MTI03270
         STH   7,DC$SUBF                SET EFFECTIVE BLOCK SIZE        MTI03280
DT$RCP5X SR    5,7                      CALC BUFFER POS.                MTI03290
         BH    DT$RCP4                  POSITIVE                        MTI03300
         BL    DT$RCP10                 LOW                             MTI03310
         CLI   DC$REQS,X'10'           GET ISSUED ?                     MTI03320
         BE    DT$RCP51                YES, SET END OF BUFFER           MTI03330
         TM    DC$RFM,X'08'       VARBLK ?                              MTI03340
         BO    DT$RCP50           YES, BYPASS SET END OF BUFFER         MTI03350
DT$RCP51 OI    DC$FG5,X'80'            SET END OF BUFFER FLAG           MTI03360
DT$RCP50 EQU   *                                                        MTI03370
         B     DT$RCP4                                                  MTI03380
DT$RCP10 TM    DC$RFM,X'08'       VARBLK ?                              MTI03390
         BNO   DT$RCP8            NO, ERROR                             MTI03400
         TM    DC$FG4,X'80'       WORKA SPECIFIED ?                     MTI03410
         BNO   DT$RCP8            NO, ERROR                             MTI03420
         OI    DC$FG5,X'80'             SET END OF BUFFER               MTI03430
         OI    DC$RFM+1,X'01'           SET INTERNAL PUT REQUIRED       MTI03440
         BR    11                       EXIT                            MTI03450
DT$RCP4  TM    DC$RFM,X'06'        UNBLOCKED FORMAT ?                   MTI03460
         BZ    DT$RCP4A            NO                                   MTI03470
         OI    DC$FG5,X'80'        YES, SET END OF BUFFER               MTI03480
DT$RCP4A TM    DC$FG4,X'80'        WORKA SPECIFIED ?                    MTI03490
         BNO   DT$RCP6                  NO                              MTI03500
         DO    '&INPUT'='YES'                                           MTI03510
         BAL   10,DT$BWD                LINK TO BWD RCP RTN(WORKA)      MTI03520
         ENDO                                                           MTI03530
         BAL   2,DT$RMVE                YES, MOVE RECORD                MTI03540
DT$RCP6  TM    DC$FG4,X'10'             IOREG SPECIFIED ?               MTI03550
         BNO   DT$RCP12                 NO                              MTI03560
         LH    7,DS$IRG                 LOAD IOREG DISPLACEMENT         MTI03570
         LA    14,DT$RCP12                                              MTI03580
         L     3,DC$A1             LOAD CURRENT I/O BUFFER ADDR         MTI03590
         AH    3,DS$CUR           ADD CURRENT BUFFER DISPLACEMENT       MTI03600
         CLI   DC$REQS,X'10'       GET ?                                MTI03610
         BE    DT$RCP15            YES                                  MTI03620
         AH    3,DS$LST                 ADD SIZE LAST REC               MTI03630
DT$RCP15 TM    DC$FG5,X'80'             END OF BUFFER ?                 MTI03640
         BNO   DT$RCP17                 NO                              MTI03650
         CLI   DC$REQS,X'20'       PUT ?                                MTI03660
         BNE   DT$RCP17            NO                                   MTI03670
DT$RCP18 L     3,DC$A2             LOAD IOA2 ADDRESS                    MTI03680
DT$RCP17 AH    3,DC$BUFOF               ADD BKSZ OFFSET FOR IOREG       MTI03690
         DO    '&INPUT'='YES'                                           MTI03700
         BAL   10,DT$BWD                LINK TO BWD RCP RTN(IOREG)      MTI03710
         ENDO                                                           MTI03720
DT$RCP16 CLI   DS$IRG,X'10'             R13 SPECIFIED FOR IOREG ?       MTI03730
         BNE   DT$RCP60                 NO                              MTI03740
         ST    3,DC$SAVR                YES, SET R13 FOR IOREG          MTI03750
         BR    14                                                       MTI03760
DT$RCP60 ST    3,0(7,13)                STORE IOREG IN SAVE AREA        MTI03770
         BR    14                                                       MTI03780
DT$RCP12 CLI   DC$REQS,X'20'            PUT ?                           MTI03790
         BNER  DB$                      NO,EXIT                         MTI03800
         TM    DC$RFM,X'0A'             VARIABLE ?                      MTI03810
         BNMR  11                       NO, RETURN                      MTI03820
         L     3,DC$A1                  SET BKSZ FOR VARIABLE BLK       MTI03830
         LA    9,4                      FOR VARIABLE PUT,IF BUFOF=0(FOR MTI03840
         CH    9,DC$BUFOF                ASCII ONLY),DO NOT INSERT BLK. MTI03850
         BNE   DT$RCP9                    LENGTH IN BLK(NO BLK. HEADER) MTI03860
         STH   0,0(,3)                                                  MTI03870
         BAL   9,DT$VASC                VAR ASCII RTN-BKSZ OUTPUT       MTI03880
DT$RCP9  TM    DC$FG4,X'08'             VARBLD SPECIFIED ?              MTI03890
         BNOR  DB$                      NO,EXIT                         MTI03900
         CLI   DC$VBL,X'10'             R13 SPECIFIED FOR VARBLD ?      MTI03910
         BNE   DT$RCP70                 NO                              MTI03920
         ST    5,DC$SAVR                YES, SET R13 FOR VARBLD         MTI03930
         BR    11                       RETURN                          MTI03940
DT$RCP70 LH    7,DC$VBL                 LOAD VARBLD REG DISPLACEMENT    MTI03950
         ST    D5$,0(D7$,RD$)           STORE BYTES REM. IN USER REG    MTI03960
         BR    DB$                      EXIT                            MTI03970
DT$VBL   CLI   DC$RFM,X'01'             UNDEFINED RECORD FORMAT ?       MTI03980
         BE    DT$UNDEF            YES                                  MTI03990
DT$V1    AH    D3$,DS$CUR               ADD CURRENT BUF DISPLACEMENT    MTI04000
         AH    3,DS$LST                 ADD SIZE OF LAST R/W            MTI04010
         CLI   DC$REQS,X'10'            GET?                            MTI04020
         BNE   DT$VPT1                  NO                              MTI04030
DT$VPT2A BAL   9,DT$VASC                VAR ASCII RTN-RCSZ,IN/OUT,IOREG MTI04040
         LR    6,8                      LOAD RCSZ(FROM SUBRTN) IN R6    MTI04050
         B     DT$VPT3                  EXIT                            MTI04060
DT$VPT1  TM    DC$FG4,X'80'        WORKA SPECIFIED                      MTI04070
         BNO   DT$VPT2A            NO                                   MTI04080
DT$VPT2  MVC   DS$NOTED(2),0(4)         LOAD RCSZ FROM WORKAREA         MTI04090
         LH    6,DS$NOTED               *                               MTI04100
DT$VPT3  XC    DS$NOTED(2),DS$NOTED     CLEAR RCSZ HOLD AREA            MTI04110
         LTR   6,6                      RCSZ=0?                         MTI04120
         BZ    DT$RCP8                  YES, ERROR                      MTI04130
         LH    7,DC$BUFOF               SET RCSZ FOR                    MTI04140
         AR    7,6                  VALIDITY CHECK                      MTI04150
         B     DT$RCP2                                                  MTI04160
DT$UNDEF OC    DC$REC(2),DC$REC         RECSIZE REG SPECIFIED ?         MTI04170
         BZ    DT$UERR                  NO, ERROR                       MTI04180
         LA    7,DC$SAVR           PRE-LOAD R13 SAVEAREA ADR            MTI04190
         CLI   DC$REC,X'10'        R13 SPEC FOR RCSZ REG ?              MTI04200
         BE    DT$UND2             YES,R13 ALREADY LOADED               MTI04210
         LH    7,DC$REC            NO,LOAD RCSZ REG DISPL.              MTI04220
DT$UND1  AR    7,13                LOAD RCSZ REG DISPLACEMENT           MTI04230
DT$UND2  CLI   DC$REQS,X'10'       GET ISSUED?                          MTI04240
         BNE   DT$UND3             NO,THEN PUT ASSUMED                  MTI04250
         ST    5,0(,7)             IF YES,RETURN BKSZ TO USER           MTI04260
DT$UND3  L     5,0(,7)             LOAD USER SPECIFIED BKSZ THIS BLOCK  MTI04270
DT$UND4  LR    6,5                 LOAD REGISTERS FOR                   MTI04280
         LR    7,5                   BLOCK SIZE VALIDATION              MTI04290
         B     DT$RCP2                                                  MTI04300
DT$UERR  MVI   DC$ERCD,X'50'            SET INVALID RCSZ REG ERROR      MTI04310
         BAL   14,DT$ERRTN              LINK TO ERROR ROUTINE           MTI04320
DT$RMVE  BCTR  D6$,0                    DECREMENT RCSZ BY 1             MTI04330
         LR    D7$,D6$             LOAD 7 WITH RCSZ-1                   MTI04340
         CLI   DC$REQS,X'20'            PUT ?                           MTI04350
         BE    DT$RMV1                  YES                             MTI04360
         XR    D3$,D4$                  NO,SWAP                         MTI04370
         XR    D4$,D3$                       I/O BUFFER AND             MTI04380
         XR    D3$,D4$                          WORKAREA ADDRESSES      MTI04390
DT$RMV1  LR    8,3                      SAVE BUFF(PUT)/ WORKA(GET) ADR  MTI04400
         SR    6,6                      CLEAR R6                        MTI04410
         D     6,DT$256                DIV RCSZ-1 BY 256                MTI04420
         LTR   7,7                     QUOTIENT$                        MTI04430
         BZ    DT$RMV3             NO                                   MTI04440
DT$RMV2  MVC   0(256,D3$),0(D4$)        MOVE 256 BYTES                  MTI04450
         LA    D3$,256(,D3$)            INCREMENT I/O BUFFER AND        MTI04460
         LA    D4$,256(,D4$)                WORKAREA POINTERS BY 256    MTI04470
         BCT   7,DT$RMV2               ALL BLOCKS MOVED ?               MTI04480
DT$RMV3  EX    6,DT$MOVE               YES,MOVE REMAINDER               MTI04490
         LR    3,8                      RESTORE R3 FOR ASCII CONVERT    MTI04500
         BAL   9,DT$VASC                VAR ASCII RTN-RCSZ,IN/OUT,WORKA MTI04510
         BR    D2$                      RETURN                          MTI04520
DT$MOVE  MVC   0(0,D3$),0(D4$)          MOVE REMAINDER                  MTI04530
DT$256   DC    F'256'                   CONSTANT FOR DIVIDE             MTI04540
         DO    '&OUTPUT'='YES'                                          MTI04550
DT$TRUNC TM    DC$FG3,X'80'        OUTPUT FILE ?                        MTI04560
         BNO   DT$ERR              NO, EXIT WITH ERROR                  MTI04570
         TM    DC$FG6,X'02'        BUFFER ACTIVE?                       MTI04580
         BZ    DT$EXIT             NO,IGNORE TRUNC                      MTI04590
         TM    DC$FG4,X'10'       IOREG SPECIFIED ?                     MTI04600
         BNO   DT$TRNC1           NO                                    MTI04610
         LH    7,DS$IRG           LOAD IOREG DISPLACEMENT               MTI04620
         BAL   14,DT$RCP18         LINK TO IOREG                        MTI04630
DT$TRNC1 LH    5,DC$PBKS                RESET VARBLD(AVL.BKSZ)          MTI04640
         SH    5,DC$BUFOF                 FOR NEXT PUT                  MTI04650
         BAL   11,DT$RCP9               LINK TO VARBLD                  MTI04660
         MVI   DC$REQS,X'20'            SET TO PUT                      MTI04670
         MVI   DC$FCS,X'20'             SET FN.CODE FOR PUT ALSO        MTI04680
         B     DT$PT40                  PREPARE FOR WAIT AND/OR WRITE   MTI04690
         ENDO                                                           MTI04730
         DO    '&INPUT'='YES'                                           MTI04740
DT$RELSE TM    DC$FG3,X'40'             INPUT FILE ?                    MTI04750
         BNO   DT$ERR              NO, EXIT WITH ERROR                  MTI04760
         OC    DS$CUR(4),DS$CUR         END OF BUFFER?                  MTI04761
         BZ    DT$EXIT                  YES ,IGNORE RLSE                MTI04762
         TM    DC$FG4,X'10'       IOREG SPECIFIED ?                     MTI04770
         BNO   DT$RELS1           NO                                    MTI04780
         LH    7,DS$IRG           LOAD IOREG DISPLACEMENT               MTI04790
         BAL   14,DT$RCP18         LINK TO IOREG                        MTI04800
DT$RELS1 MVI   DC$REQS,X'10'      SET FOR GET                           MTI04810
         MVI   DC$FCS,X'10'             SET FN.CODE FOR GET ALSO        MTI04820
         B     DT$RW1A                  DO WAIT AND/OR READ             MTI04821
         ENDO                                                           MTI04830
DT$CTL3  EQU   *                                                        MTI04840
         DO    ('&OUTPUT'='YES')**('&INPUT'='YES')                      MTI04860
         TM    DC$FG3,X'80'             OUTPUT FILE?                    MTI04870
         BZ    DT$CTL3B                 NO,INPUT ASSUMED                MTI04880
         ENDO                                                           MTI04882
         DO    '&OUTPUT'='YES'                                          MTI04884
         MVC   DD$IDLOC(1),DC$CCW       SAVE OPCODE (FOR OUTPUT CASE)   MTI04886
         TM    DC$FG6,X'02'             IF OUTPUT,BUFFER ACTIVE?        MTI04890
         BO    DT$TRUNC                 YES,WRITE BLK.THEN DO CNTRL     MTI04900
DT$CTL3C MVC   DC$CCW(1),DD$IDLOC       RESTORE OPCODE                  MTI04901
         MVI   DC$REQS,X'40'            SET CODE FOR CNTRL              MTI04902
         MVI   DC$FCS,X'40'             *                               MTI04903
         ENDO                                                           MTI04904
         DO    ('&OUTPUT'='YES')**('&INPUT'='YES')                      MTI04905
         B     DT$CTL3A                 IF NO,JUST DO CNTRL             MTI04910
         ENDO                                                           MTI04920
         DO    '&INPUT'='YES'                                           MTI04925
DT$CTL3B OI    DC$FG4,X'02'             SET READ REQD.FOR INPUT         MTI04930
         ENDO                                                           MTI04935
DT$CTL3A LA    11,DT$EXIT               LOAD EXIT ADDRESS               MTI04940
DT$ISSUE LA    2,DT$EXCP                SET WAIT & EXCP                 MTI04950
DT$WAIT  TM    DC$MFLG,X'40'            WAIT REQUIRED?                  MTI04960
         BZR   2                        NO,RETURN OR DO EXCP            MTI04970
         MVI   DC$REQS,X'86'            YES,SET WAIT CODE               MTI04980
         DO    '&INPUT'='YES'                                           MTI04990
         LR    9,11                     *SAVE RETURN ADR                MTI05000
         BAL   11,DT$SWAP               *WAIT ON PREVIOUS BLK.(D.BUFR)  MTI05010
         ENDO                                                           MTI05020
         LA    15,DT$SAT                *SAT ADDRESS                    MTI05030
         BALR  14,15                    *                               MTI05040
         L     15,16(13)                *                               MTI05050
         DO    '&INPUT'='YES'                                           MTI05060
         BAL   11,DT$SWAP               *I/O ON CURRENT BUFFER(D.BFR.)  MTI05070
         LR    11,9                     *RESTORE RETURN ADR             MTI05080
         ENDO                                                           MTI05090
         MVC   DC$REQS(1),DC$FCS        RESTORE FUNCTION CODE           MTI05100
         MVC   DC$ERRF(2),DC$ERFLG      SET FILENAME.C BYTES            MTI05110
         MVC   DC$ERRF+2(1),DC$SB       *                               MTI05120
         MVI   DC$ERRF+3,0              *                               MTI05130
         B     DT$EXWT                  BRANCH TO EXCP-WAIT CMN TEST    MTI05140
DT$EXCP  XC    DC$PBKS(2),DC$SUBF       STORE BKSZ                      MTI05280
         XC    DC$SUBF(2),DC$PBKS                                       MTI05290
         XC    DC$PBKS(2),DC$SUBF                                       MTI05300
         LA    15,DT$SAT                *SAT ADDRESS                    MTI05310
         BALR  14,15                    LINK TO SAT                     MTI05320
         L     15,16(13)                RESTORE I/O COVER               MTI05330
         XC    DC$PBKS(2),DC$SUBF                                       MTI05340
         XC    DC$SUBF(2),DC$PBKS                                       MTI05350
         XC    DC$PBKS(2),DC$SUBF                                       MTI05360
         MVC   DC$REQS(1),DC$FCS        RESTORE FUNCTION CODE           MTI05370
         LR    2,11                     LOAD R2 FOR CMN RTN EXIT        MTI05380
DT$EXWT  TM    DC$FG6,X'40'             EOV SENSED?                     MTI05390
         DO    ('&OUTPUT'='YES')**('&INPUT'='YES'=0)                    MTI05391
         BO    DT$FEOVP                 YES                             MTI05392
         ENDO                                                           MTI05393
         DO    '&INPUT'='YES'                                           MTI05394
         BZ    DT$EXWT1                 NO                              MTI05395
         DO    '&OUTPUT'='YES'                                          MTI05397
         CLI   DC$REQS,X'10'            IF YES,GET?                     MTI05400
         BNE   DT$FEOVP                 NO,TO FEOV PUT                  MTI05402
         ENDO                                                           MTI05403
         TM    DC$FG4,X'C0'             IF GET,WORKA & IOA2 SPECD?      MTI05404
         BO    DT$EXIT                  YES,LAST REC.TO USER            MTI05406
         B     DT$FEOV                  BOTH NOT SPECD.,TO FEOV RTN     MTI05408
DT$EXWT1 TM    DC$MFLG,X'40'            WAIT COMPLETED                  MTI05410
         BOR   2                        NO,RETURN                       MTI05414
         MVC   DC$PCA4,DC$RBC           YES,SAVE RES.BYTE COUNT         MTI05420
         ENDO                                                           MTI05421
         BR    2                                                        MTI05424
*SUBROUTINE  FOR CONVERTING BLOCK  & RECORD HEADERS FOR VAR ASCII CASE  MTI05440
DT$VASC  MVC   DS$NOTED(2),0(3)         MOVE RCSZ TO HOLD               MTI05450
         LH    8,DS$NOTED               FOR PUT,CONVERT RCSZ/BKSZ INTO  MTI05460
         TM    DC$TFG1,X'80'            ASCII?                          MTI05470
         BNOR  9                        NO,RETURN                       MTI05480
         TM    DC$RFM,X'0A'             VARIABLE FORMAT?                MTI05490
         BNMR  9                        NO,RETURN                       MTI05500
         DO    '&INPUT'='YES'                                           MTI05510
         CLI   DC$REQS,X'10'            GET?                            MTI05520
         BE    DT$VASC1                 YES                             MTI05530
         ENDO                                                           MTI05540
         CVD   8,DC$PCA2                 EBCDIC USING D.W.BOUNDARY 8    MTI05550
         UNPK  DC$PCA2(4),DC$PCA2+5(3)    BYTE AREA IN DTF              MTI05560
         OI    DC$PCA2+3,X'F0'             *                            MTI05570
         DO    '&INPUT'='YES'                                           MTI05580
         B     DT$VASC2                                                 MTI05590
DT$VASC1 MVC   DC$PCA2(4),0(3)          ASCII RCSZ/BKSZ IN PROCS.AREA   MTI05600
         OC    DC$PCA2+2(2),DC$PCA2+2   RCSZ/BKSZ ALREADY IN BINARY?    MTI05610
         BZR   9                        YES,THEN NO CONVERSION TO BNRY  MTI05620
         PACK  DC$PCA2(8),DC$PCA2(4)                                    MTI05630
         OI    DC$PCA2+7,X'0C'                                          MTI05640
         CVB   8,DC$PCA2                                                MTI05650
         SLL   8,16                                                     MTI05660
         ST    8,DC$PCA2                                                MTI05670
         SRL   8,16                     ADJUST FOR RCSZ USE             MTI05680
         ENDO                                                           MTI05690
DT$VASC2 MVC   0(4,3),DC$PCA2           MOVE CONVERTED VALUE TO BUFFER  MTI05700
         BR    9                                                        MTI05710
         DO    '&INPUT'='YES'                                           MTI05720
*SUBROUTINE FOR PROCESSING RECORDS DURING  BACKWARD READ(ALL CASES)     MTI05730
DT$BWD   CLI   DC$REQS,X'10'            GET?                            MTI05740
         BNER  10                       NO,RETURN                       MTI05750
         TM    DC$TFG2,X'04'            IF YES,FORWARD READ?            MTI05760
         BOR   10                       YES,RETURN                      MTI05770
         TM    DC$RFM,X'18'             IF BWD,BLOCKED RECORDS?         MTI05780
         BZR   10                       NO,RETURN                       MTI05790
         LH    2,DD$HIEOD               LOAD CUR DISP FROM BLK-END      MTI05800
         LH    5,DD$HIEOD+2             LOAD EFF BKSZ                   MTI05810
         LH    8,DC$BUFOF               BUFFER OFFSET IN R8             MTI05820
         L     3,DC$A1                  R3 POINTS TO BEGINING           MTI05830
         AR    3,8                       OF DATA BLOCK                  MTI05840
         SR    5,8                      R5 CONTAINS DATA BLK LENGTH     MTI05850
DT$BLOOP TM    DC$RFM,X'10'             FIXBLK?                         MTI05860
         BO    DT$BWD1                  YES,R6 CONTAINS RCSZ            MTI05870
         BAL   9,DT$VASC                CONVERT RCSZ IF ASCII           MTI05880
         LR    6,8                      R8 HAS RCSZ IN BINARY(EBC &ASC) MTI05890
DT$BWD1  AR    2,6                      INCREAMENT BUFFER DISPLACEMENT  MTI05900
         LTR   6,6                      RCSZ = 0 ?                      MTI05910
         BZ    DT$RCP8                  YES,ERROR                       MTI05920
         CR    2,5                      BUFF DISP=EFF.DATA BLK LENGTH   MTI05930
         BE    DT$BWD2                  YES,CORRECT REC FOUND           MTI05940
         BH    DT$RCP8                  IF HIGH,ERROR                   MTI05950
         AR    3,6                      IF LOW,INCREAMENT BUFFER POINTR MTI05960
         B     DT$BLOOP                 CONTINUE SCAN                   MTI05970
DT$BWD2  LH    2,DD$HIEOD               SAVE CUR DISPLACEMENT           MTI05980
         AR    2,6                       FOR NEXT GET                   MTI05990
         STH   2,DD$HIEOD                 *                             MTI06000
         XC    DS$NOTED(2),DS$NOTED     CLEAR DTF FIELD                 MTI06010
         BR    10                       RETURN                          MTI06020
         ENDO                                                           MTI06030
DT$ERRTN L     15,16(13)                RESTORE BASE                    MTI06040
         CLI   DC$SB,X'08'              DATA CHECK                      MTI06050
         BNE   DT$STOR                  NO                              MTI06051
         TM    DC$FG1,X'0C'             IF YES,IGNORE OR SKIP           MTI06052
         BNZ   DT$ESVC                  YES ONE OR OTHER                MTI06053
DT$STOR  LM    14,12,12(13)             RESTORE USERS REGISTERS         MTI06054
DT$ESVC  SVC   60                       CALL ERROR TRANSIENT            MTI06060
         BR    2                        IGNORE: GET & PUT;SKIP: PUT     MTI06061
         DO    '&INPUT'='YES'                                           MTI06062
         B     DT$EXIT                  SKIP: GET-IOA2+WORKA            MTI06063
         B     DT$GETT                  SKIP: GET-ALL OTHER COMB.       MTI06064
         ENDO                                                           MTI06065
         DC    X'09247600'              *I4.6                           MTI06070
DT$PAT   DS    CL16                     PATCH AREA                      MTI06080
DT$PAT1  EQU   *                       ADDITITIONAL PATCH AREA          MTI06081
         CNOP  0,8                                                      MTI06082
         DTFDM3 MT=YES                                                  MTI06090
               EJECT                                                    MTI06100
DT$SAT   EQU   *                        *SAT ENTRY POINT                MTI06105
         TSAT  MTAPE=YES                                                MTI06110
&SYSECT  CSECT                                                          MTI06130
         DROP  1,15                                                     MTI06140
         END                                                            MTI06150
