*I/O ROUTINES & MISCELLANEOUS ROUTINES                  HEADER  FUPSYS  0001.000
         M.PGM     FUPSYS,MPX-32,3.6.1,00                               0002.000
         SPACE                                                          0003.000
*                                                                       0004.000
************************************************************************0005.000
*                                                                      *0006.000
*                    PROPRIETARY INFORMATION                           *0007.000
*                    -----------------------                           *0008.000
*   THE INFORMATION CONTAINED HEREIN IS PROPRIETARY TO ENCORE          *0009.000
*   COMPUTER CORPORATION AND/OR ITS VENDORS, AND ITS USE, DISCLOSURE,  *0010.000
*   OR DUPLICATION IS SUBJECT TO THE RESTRICTIONS STATED IN THE        *0011.000
*   STANDARD ENCORE COMPUTER CORPORATION LICENSE TERMS AND CONDITIONS  *0012.000
*   OR THE APPROPRIATE THIRD-PARTY SUBLICENSE AGREEMENT.               *0013.000
*                                                                      *0014.000
*                       RESTRICTED RIGHTS                              *0015.000
*                       -----------------                              *0016.000
*   USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT       *0017.000
*   TO RESTRICTIONS AS SET FOURTH IN SUBDIVISION (c) (1) (ii) OF       *0018.000
*   THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT       *0019.000
*   252.227.7013                                                       *0020.000
************************************************************************0021.000
* (C) COPYRIGHT 1989 ENCORE COMPUTER CORPORATION                       *0022.000
*     ALL RIGHTS RESERVED                                              *0023.000
************************************************************************0024.000
*-                                                                      0025.000
*********************************************************************   0026.000
*                                                                   *   0027.000
*        HISTORY OF FUPSYS             MPX 3.6.0                    *   0028.000
*                                                                   *   0029.000
*********************************************************************   0030.000
*                                                                       0031.000
*        VOLMGR REV 3.6.0.01                                    EQIC360 0032.000
*        MODULES: FUPSYS (REV 3.6.0.01)                         EQIC360 0033.000
*        ENHANCEMENT: EQIC360                                   EQIC360 0034.000
*                                                               EQIC360 0035.000
*        02/12/93  10833 ADD SCSI QIC SUPPORT                   EQIC360 0036.000
*                                                                       0037.000
*********************************************************************   0038.000
*+                                                                      0039.000
         EXT       STACKPTR                                             0040.000
         EXT       PRINTOUT                                             0041.000
         EXT       FORMATST                                             0042.000
         EXT       ADR.MASK                                             0043.000
         EXT       LINEBUFR                                             0044.000
         EXT       LINELNGH                                             0045.000
         EXT       IO1BUFF                                              0046.000
         EXT       IO2BUFF                                              0047.000
         EXT       IO3BUFF                                              0048.000
         EXT       FLAGBITS                                     CP11905 0049.000
         EXT       TAPFCB                                       EQIC360 0050.000
         EXT       RSEQ                                         EQIC360 0051.000
         EXT       DOBLOCK         DEFAULT OPTION BLOCK         EQIC360 0052.000
*                                                                       0053.000
*                                                                       0054.000
*                                                                       0055.000
         DEF       DIV.RND         DIVIDE & ROUND UP                    0056.000
         DEF       M.WRIT                                               0057.000
         DEF       M.READ                                               0058.000
         DEF       M.WEOF                                               0059.000
         DEF       M.WEOFL                                      EQIC360 0060.000
         DEF       M.RWND                                               0061.000
         DEF       M.FWDF                                               0062.000
         DEF       M_FWDF                                       EQIC360 0063.000
         DEF       M.FWDR                                               0064.000
         DEF       M.BCKF                                               0065.000
         DEF       M.BCKR                                               0066.000
         DEF       IO1FCB                                               0067.000
         DEF       IO2FCB                                               0068.000
         DEF       IO3FCB                                               0069.000
         DEF       IO1Z                                                 0070.000
         DEF       IO2Z                                                 0071.000
         DEF       IO3Z                                                 0072.000
         SPACE                                                          0073.000
         LIST      NOMAC                                                0074.000
         M.EQUS                                                         0075.000
         M.FCB.                                                         0076.000
         SPACE     4                                                    0077.000
         BOUND     1D                                                   0078.000
         SPACE                                                          0079.000
IO1FCB   DATAW     G'IO1'          PROTOTYPE FCB                        0080.000
         REZ       15W                                                  0081.000
IO2FCB   DATAW     G'IO2'          PROTOTYPE FCB                        0082.000
         REZ       15W                                                  0083.000
IO3FCB   DATAW     G'IO3'          PROTOTYPE FCB                        0084.000
         REZ       15W                                                  0085.000
         SPACE     2                                                    0086.000
TAPLFC   DATAW     G'TAP'                                       EQIC360 0087.000
         BOUND     1D                                           EQIC360 0088.000
BUF.EOFL DATAD     X'60FE0FE0F1234567' SET BIT 0 TO HAVE EOFEOF EQIC360 0089.000
         DATAD     X'E0FE0FE0F89ABCDE'                          EQIC360 0090.000
         DATAD     X'E0FE0FE0F1234567'                          EQIC360 0091.000
         DATAD     X'E0FE0FE0F89ABCDE'                          EQIC360 0092.000
         DATAD     X'E0FE0FE0F1234567'                          EQIC360 0093.000
         DATAD     X'E0FE0FE0F89ABCDE'                          EQIC360 0094.000
         DATAD     X'E0FE0FE0F1234567'                          EQIC360 0095.000
         DATAD     X'E0FE0FE0F89ABCDE'                          EQIC360 0096.000
         DATAD     X'E0FE0FE0F1234567'                          EQIC360 0097.000
         DATAD     X'E0FE0FE0F89ABCDE'                          EQIC360 0098.000
SIZ.EOFL EQU       $-BUF.EOFL                                   EQIC360 0099.000
         SPACE     2                                            EQIC360 0100.000
DUMMY    REZ       192*8W                                       EQIC360 0101.000
DUMMYS   DATAW     X'1800'                                      EQIC360 0102.000
         SPACE                                                  EQIC360 0103.000
IO1Z     DATAW     G'IO1'          LFC G-STRING                         0104.000
IO2Z     DATAW     G'IO2'          LFC G-STRING                         0105.000
IO3Z     DATAW     G'IO3'          LFC G-STRING                         0106.000
IO1B     DATAW     C'IO1'          LFC C-STRING                         0107.000
IO2B     DATAW     C'IO2'          LFC C-STRING                         0108.000
IO3B     DATAW     C'IO3'          LFC C-STRING                         0109.000
         SPACE                                                          0110.000
         TITLE     DIVIDE AND ROUND ROUTINE                             0111.000
         SPACE                                                          0112.000
         CSECT                                                          0113.000
         SPACE                                                          0114.000
************************************************************************0115.000
*  DIVIDE WITH ROUND UP        IE.,  [ R4,R5 ] / R6  = R5              *0116.000
*  IN    R5=DIVIDEND, R6=DIVISOR                                       *0117.000
*  OUT   R5=ROUNDED QUOTIENT                                           *0118.000
*        R4,R5, & R6 ARE USED AND NOT RESTORED                         *0119.000
************************************************************************0120.000
         SPACE     2                                                    0121.000
DIV.RND  EQU       $                                                    0122.000
         ZR        R4                                                   0123.000
         DVR       R6,R4                                                0124.000
         TRR       R4,R4           REMAINDER ?                          0125.000
         BZ        DIV.NOR         NO                                   0126.000
         ABR       R5,31           ADD ONE                              0127.000
DIV.NOR  TRSW      R0                                                   0128.000
         PAGE                                                           0129.000
*++                                                                     0130.000
*                                                                       0131.000
*        M.RWND -- (SYSTEM) REWIND MEDIUM ROUTINE                       0132.000
*                  INPUT: R2 = ADDRESS OF FCB                           0133.000
*                 OUTPUT: CC1 SET IF EOF OR EOM                         0134.000
*                         CC2 SET IF I/O ERROR(S)                       0135.000
*                         CC3 SET IF BOM (BEGINNING OF MEDIUM)          0136.000
*                                                                       0137.000
*--                                                                     0138.000
         SPACE                                                          0139.000
M.RWND   EQU       $                                                    0140.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           0141.000
         PUSHS                     SAVE REGS & STACK POINTER            0142.000
         TRR       R2,R1           FCB ADDRESS                          0143.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESS        0144.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                         0145.000
         SVC       1,X'37'              REWIND                          0146.000
         ZBM       EOT.F,FLAGBITS       RESET END OF TAPE FLAG  CP11905 0147.000
         TBM       BOM,FCB.SFLG,X2      BOM ?                           0148.000
         BS        IO.BOM          BRANCH IF SO                         0149.000
         BU        M.WRJOIN        JOIN COMMON CODE                     0150.000
         PAGE                                                           0151.000
*++                                                                     0152.000
*                                                                       0153.000
*        M.FWDF -- (SYSTEM) ADVANCE FILE ROUTINE                        0154.000
*                                                               EQIC360 0155.000
*        IF QUARTER INCH SCSI DRIVE, HANDLES                    EQIC360 0156.000
*           LOGICAL AND PHYSICAL EOF                            EQIC360 0157.000
*                                                               EQIC360 0158.000
*                  INPUT: R2 = ADDRESS OF FCB                           0159.000
*                         R4 = # FILE MARKS TO ADVANCE                  0160.000
*                 OUTPUT: CC1 SET IF EOM                                0161.000
*                         CC2 SET IF I/O ERROR(S)                       0162.000
*                                                                       0163.000
*--                                                                     0164.000
         SPACE                                                          0165.000
M.FWDF   EQU       $                                                    0166.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           0167.000
         PUSHS                     SAVE REGS & STACK POINTER            0168.000
         LA        R3,DOBLOCK      DEFAULT OPTION BLOCK         EQIC360 0169.000
         TBM       OPT.B.SE,OPT.FLGS,X3 SOFT EOF?               EQIC360 0170.000
         BS        SCSI            BOTH PHYS & LOG EOF          EQIC360 0171.000
         TRR       R2,R1           FCB ADDRESS                          0172.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESS        0173.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                         0174.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT                0175.000
M.FWDF10 SVC       1,X'34'              ADVANCE FILE                    0176.000
*                                                                       0177.000
* NO NEED TO CHECK FOR EOF SINCE THIS IS WHAT WE ARE EXPECTING !        0178.000
*                                                                       0179.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?               0180.000
         BS        EOF.EOM              YES                             0181.000
         BIB       R4,M.FWDF10     LOOP TIL DONE                        0182.000
         BU        M.FWDF30        COMMON EXIT                  EQIC360 0183.000
SCSI     CEQU      $                                            EQIC360 0184.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT        EQIC360 0185.000
SCSILOOP CEQU      $                                            EQIC360 0186.000
         TRR       R2,R1           FCB ADDRESS                  EQIC360 0187.000
         LW        R7,0W,X1                                     EQIC360 0188.000
         SLL       R7,8                                         EQIC360 0189.000
         SRL       R7,8                                         EQIC360 0190.000
         CAMW      R7,TAPLFC                                    EQIC360 0191.000
         BNE       NOTAPE                                       EQIC360 0192.000
         SPACE                                                  EQIC360 0193.000
         LA        R7,DUMMY                                     EQIC360 0194.000
         STW       R7,FCB.ERWA,X2                               EQIC360 0195.000
         LW        R7,DUMMYS                                    EQIC360 0196.000
         STW       R7,FCB.EQTY,X2                               EQIC360 0197.000
         LA        R7,IOERR                                     EQIC360 0198.000
         STW       R7,FCB.ERRT,X2                               EQIC360 0199.000
         SVC       1,X'31'                                      EQIC360 0200.000
         TBM       EOF,FCB.SFLG,X2                              EQIC360 0201.000
         BS        FIND                                         EQIC360 0202.000
         SPACE                                                  EQIC360 0203.000
         LI        R7,SIZ.EOFL                                  EQIC360 0204.000
         CAMW      R7,FCB.RECL,X2  SIZE RECORD READ             EQIC360 0205.000
         BNE       SCSILOOP        BRANCH IF NOT SAME           EQIC360 0206.000
         TRN       R7,R3                                        EQIC360 0207.000
         SBM       0,BUF.EOFL                                   EQIC360 0208.000
         LW        R1,FCB.ERWA,X1                               EQIC360 0209.000
CHECK1   CEQU      $                                            EQIC360 0210.000
         LB        R7,0B,X1                                     EQIC360 0211.000
         CAMB      R7,BUF.EOFL+SIZ.EOFL,X3                      EQIC360 0212.000
         BNE       SCSILOOP                                     EQIC360 0213.000
         ABR       R1,31                                        EQIC360 0214.000
         BIB       R3,CHECK1                                    EQIC360 0215.000
FIND     CEQU      $                                            EQIC360 0216.000
         BU        JOIN                                         EQIC360 0217.000
NOTAPE   CEQU      $                                            EQIC360 0218.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDR   EQIC360 0219.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                 EQIC360 0220.000
         SVC       1,X'34'         ADVANCE FILE                 EQIC360 0221.000
*                                                               EQIC360 0222.000
* NO NEED TO CHECK FOR EOF SINCE THIS IS WHAT WE ARE EXPECTING  EQIC360 0223.000
*                                                               EQIC360 0224.000
JOIN     CEQU      $                                            EQIC360 0225.000
         TBM       EOM,FCB.SFLG,X2 END OF MEDIUM?               EQIC360 0226.000
         BS        EOF.EOM         YES                          EQIC360 0227.000
         BIB       R4,SCSILOOP     LOOP UNTIL DONE              EQIC360 0228.000
* THIS IS THE COMMON EXIT                                       EQIC360 0229.000
M.FWDF30 CEQU      $                                            EQIC360 0230.000
         POPSTP                    RESTORE STACK POINTER                0231.000
         BU        W.WREXIT        JOIN COMMON CODE                     0232.000
         PAGE                                                           0233.000
*++                                                             EQIC360 0234.000
*                                                               EQIC360 0235.000
*        M_FWDF -- (SYSTEM) ADVANCE FILE ROUTINE                EQIC360 0236.000
*                           PHYSICAL EOF                        EQIC360 0237.000
*                  INPUT: R2 = ADDRESS OF FCB                   EQIC360 0238.000
*                         R4 = # FILE MARKS TO ADVANCE          EQIC360 0239.000
*                 OUTPUT: CC1 SET IF EOM                        EQIC360 0240.000
*                         CC2 SET IF I/O ERROR(S)               EQIC360 0241.000
*                                                               EQIC360 0242.000
*--                                                             EQIC360 0243.000
         SPACE                                                  EQIC360 0244.000
M_FWDF   EQU       $                                            EQIC360 0245.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN   EQIC360 0246.000
         PUSHS                     SAVE REGS & STACK POINTER    EQIC360 0247.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT        EQIC360 0248.000
M_FWDF1  TRR       R2,R1           FCB ADDRESS                  EQIC360 0249.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESSEQIC360 0250.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                 EQIC360 0251.000
M_FWDF10 SVC       1,X'34'              ADVANCE FILE            EQIC360 0252.000
*                                                               EQIC360 0253.000
* NO NEED TO CHECK FOR EOF SINCE THIS IS WHAT WE ARE EXPECTING !EQIC360 0254.000
*                                                               EQIC360 0255.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?       EQIC360 0256.000
         BS        EOF.EOM              YES                     EQIC360 0257.000
         BIB       R4,M_FWDF1      LOOP TIL DONE                EQIC360 0258.000
         POPSTP                    RESTORE STACK POINTER        EQIC360 0259.000
         BU        W.WREXIT        JOIN COMMON CODE             EQIC360 0260.000
         PAGE                                                   EQIC360 0261.000
*++                                                                     0262.000
*                                                                       0263.000
*        M.FWDR -- (SYSTEM) ADVANCE RECORD ROUTINE                      0264.000
*                  INPUT: R2 = ADDRESS OF FCB                           0265.000
*                         R4 = # RECORDS TO ADVANCE                     0266.000
*                 OUTPUT: CC1 SET IF EOF OR EOM                         0267.000
*                         CC2 SET IF I/O ERROR(S)                       0268.000
*                                                                       0269.000
*--                                                                     0270.000
         SPACE                                                          0271.000
M.FWDR   EQU       $                                                    0272.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           0273.000
         PUSHS                     SAVE REGS & STACK POINTER            0274.000
         TRR       R2,R1           FCB ADDRESS                          0275.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESS        0276.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                         0277.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT                0278.000
         LA        R3,DOBLOCK      DEFAULT OPTION BLOCK         EQIC360 0279.000
         TBM       OPT.B.SE,OPT.FLGS,X3 SOFT EOF?               EQIC360 0280.000
         BS        M.FWDR20        HANDLE ADV REC DIFFERENTLY   EQIC360 0281.000
M.FWDR10 SVC       1,X'33'              ADVANCE RECORD                  0282.000
         TBM       EOF,FCB.SFLG,X2        END-OF-FILE ?                 0283.000
         BS        EOF.EOM              YES                             0284.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?               0285.000
         BS        EOF.EOM              YES                             0286.000
         BIB       R4,M.FWDR10     LOOP TIL DONE                        0287.000
         BU        M.FWDR50                                     EQIC360 0288.000
M.FWDR20 TRR       R2,R1           FCB ADDRESS                  EQIC360 0289.000
         LW        R7,0W,X1                                     EQIC360 0290.000
         SLL       R7,8                                         EQIC360 0291.000
         SRL       R7,8                                         EQIC360 0292.000
         CAMW      R7,TAPLFC                                    EQIC360 0293.000
         BNE       M.FWDR30                                     EQIC360 0294.000
         SPACE                                                  EQIC360 0295.000
         LA        R7,DUMMY                                     EQIC360 0296.000
         STW       R7,FCB.ERWA,X2                               EQIC360 0297.000
         LW        R7,DUMMYS                                    EQIC360 0298.000
         STW       R7,FCB.EQTY,X2                               EQIC360 0299.000
         LA        R7,IOERR                                     EQIC360 0300.000
         STW       R7,FCB.ERRT,X2                               EQIC360 0301.000
         SVC       1,X'31'                                      EQIC360 0302.000
         TBM       EOF,FCB.SFLG,X2                              EQIC360 0303.000
         BS        EOF.EOM                                      EQIC360 0304.000
         SPACE     2                                            EQIC360 0305.000
         LI        R7,SIZ.EOFL                                  EQIC360 0306.000
         CAMW      R7,FCB.RECL,X2  SIZE RECORD READ             EQIC360 0307.000
         BNE       M.FWDR40        *SCSI* BRANCH IF NOT SAME    EQIC360 0308.000
         TRN       R7,R3                                        EQIC360 0309.000
         SBM       0,BUF.EOFL      *SCSI*                       EQIC360 0310.000
         LW        R1,FCB.ERWA,X1  *SCSI*                       EQIC360 0311.000
CHECK2   CEQU      $                                            EQIC360 0312.000
         LB        R7,0B,X1                                     EQIC360 0313.000
         CAMB      R7,BUF.EOFL+SIZ.EOFL,X3                      EQIC360 0314.000
         BNE       M.FWDR40                                     EQIC360 0315.000
         ABR       R1,31                                        EQIC360 0316.000
         BIB       R3,CHECK2                                    EQIC360 0317.000
         BU        EOF.EOM                                      EQIC360 0318.000
M.FWDR30 CEQU      $                                            EQIC360 0319.000
         SVC       1,X'33'              ADVANCE RECORD          EQIC360 0320.000
         TBM       EOF,FCB.SFLG,X2        END-OF-FILE ?         EQIC360 0321.000
         BS        EOF.EOM              YES                     EQIC360 0322.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?       EQIC360 0323.000
         BS        EOF.EOM              YES                     EQIC360 0324.000
M.FWDR40 CEQU      $                                            EQIC360 0325.000
         BIB       R4,M.FWDR20     LOOP TIL DONE                EQIC360 0326.000
M.FWDR50 CEQU      $                                            EQIC360 0327.000
         POPSTP                         RESTORE STACK POINTER           0328.000
         BU        W.WREXIT        JOIN COMMON CODE                     0329.000
         PAGE                                                           0330.000
*++                                                                     0331.000
*                                                                       0332.000
*        M.BCKR -- (SYSTEM) BACKSPACE RECORD ROUTINE                    0333.000
*                  INPUT: R2 = ADDRESS OF FCB                           0334.000
*                         R4 = # RECORDS TO BACKSPACE                   0335.000
*                 OUTPUT: CC1 SET IF EOF OR EOM                         0336.000
*                         CC2 SET IF I/O ERROR(S)                       0337.000
*                         CC3 SET IF BOM (BEGINNING OF MEDIUM)          0338.000
*                                                                       0339.000
*--                                                                     0340.000
         SPACE                                                          0341.000
M.BCKR   EQU       $                                                    0342.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           0343.000
         PUSHS                     SAVE REGS & STACK POINTER            0344.000
         TRR       R2,R1           FCB ADDRESS                          0345.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESS        0346.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                         0347.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT                0348.000
M.BCKR10 SVC       1,X'35'              BACKSPACE RECORD                0349.000
         TBM       EOF,FCB.SFLG,X2        END-OF-FILE ?                 0350.000
         BS        EOF.EOM              YES                             0351.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?               0352.000
         BS        EOF.EOM              YES                             0353.000
         TBM       BOM,FCB.SFLG,X2      BOM ?                           0354.000
         BS        IO.BOM          BRANCH IF SO                         0355.000
         BIB       R4,M.BCKR10     LOOP TIL DONE                        0356.000
         POPSTP                         RESTORE STACK POINTER           0357.000
         BU        W.WREXIT        JOIN COMMON CODE                     0358.000
         SPACE                                                          0359.000
IO.BOM   EQU       $                                                    0360.000
         POPSTP                    RESTORE STACK POINTER                0361.000
         SBM       CC3,0W,X1       INDICATE BOM                         0362.000
         BU        W.WREXIT        JOIN COMMON CODE                     0363.000
         PAGE                                                           0364.000
*++                                                                     0365.000
*                                                                       0366.000
*        M.BCKF -- (SYSTEM) BACKSPACE FILE ROUTINE                      0367.000
*                  INPUT: R2 = ADDRESS OF FCB                           0368.000
*                         R4 = # OF FILE MARKS TO BACK OVER             0369.000
*                 OUTPUT: CC1 SET IF EOM                                0370.000
*                         CC2 SET IF I/O ERROR(S)                       0371.000
*                         CC3 SET IF BOM (BEGINNING OF MEDIUM)          0372.000
*                                                                       0373.000
*--                                                                     0374.000
         SPACE                                                          0375.000
M.BCKF   EQU       $                                                    0376.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           0377.000
         PUSHS                     SAVE REGS & STACK POINTER            0378.000
         TRR       R2,R1           FCB ADDRESS                          0379.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESS        0380.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                         0381.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT                0382.000
M.BCKF10 SVC       1,X'36'              BACKSPACE FILE                  0383.000
         ZBM       EOT.F,FLAGBITS       RESET END OF TAPE FLAG  CP11905 0384.000
*                                                                       0385.000
*  NO NEED TO CHECK FOR EOF SINCE THIS IS WHAT WE ARE EXPECTING !!!     0386.000
*                                                                       0387.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?               0388.000
         BS        EOF.EOM              YES                             0389.000
         TBM       BOM,FCB.SFLG,X2      BOM ?                           0390.000
         BS        IO.BOM          BRANCH IF SO                         0391.000
         BIB       R4,M.BCKF10     LOOP TIL DONE                        0392.000
         POPSTP                         RESTORE STACK POINTER           0393.000
         BU        W.WREXIT        JOIN COMMON CODE                     0394.000
         PAGE                                                           0395.000
*++                                                                     0396.000
*                                                                       0397.000
*        M.READ -- (SYSTEM) READ RECORD ROUTINE                         0398.000
*                  INPUT: R2 = ADDRESS OF FCB                           0399.000
*                 OUTPUT: CC1 SET IF EOM OR EOF                         0400.000
*                         CC2 SET IF I/O ERROR(S)                       0401.000
*                                                                       0402.000
*--                                                                     0403.000
         SPACE                                                          0404.000
M.READ   EQU       $                                                    0405.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S                      0406.000
         PUSHS                     SAVE REGS & STACK POINTER            0407.000
         LA        R3,READ         ... TO EXECUTE THE SVC TO READ       0408.000
         BU        M.WRCOM         JOIN COMMON CODE FOR READ & WRITE    0409.000
M.REEND  EQU       $                                                    0410.000
         SPACE     5                                                    0411.000
*++                                                                     0412.000
*                                                                       0413.000
*        M.WRIT -- (SYSTEM) WRITE RECORD ROUTINE                        0414.000
*                  INPUT: R2 = ADDRESS OF FCB                           0415.000
*                 OUTPUT: CC1 SET IF EOF OR EOM                         0416.000
*                         CC2 SET IF I/O ERROR(S)                       0417.000
*                                                                       0418.000
*--                                                                     0419.000
M.WRIT   EQU       $                                                    0420.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           0421.000
         PUSHS                          SAVE REGS & STACK POINTER       0422.000
         LA        R3,WRIT         WRITE OPERATION                      0423.000
M.WRCOM  EQU       $               COMMON PART                          0424.000
         TRR       R2,R1           FCB ADDRESS                          0425.000
         LA        R7,IOERR        ERROR RETURN ADDRESS                 0426.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                         0427.000
         BU        0W,X3           SELECT READ OR WRITE                 0428.000
WRIT     SVC       1,X'32'              WRITE RECORD                    0429.000
         BU        M.WRJOIN        BYPASS                               0430.000
READ     SVC       1,X'31'         READ RECORD                          0431.000
         LA        R3,DOBLOCK      DEFAULT OPTION BLOCK         EQIC360 0432.000
         TBM       OPT.B.SE,OPT.FLGS,X3 SOFT EOF?               EQIC360 0433.000
         BNS       M.WRJOIN        IF NOT, CONTINUE             EQIC360 0434.000
         LW        R7,0W,X2        GET FCB LFC                  EQIC360 0435.000
         SLL       R7,8            STRIP OFF FIRST BYTE         EQIC360 0436.000
         SRL       R7,8                                         EQIC360 0437.000
         CAMW      R7,TAPLFC       IS IT TAP?                   EQIC360 0438.000
         BNE       M.WRJOIN        BRANCH IF NOT                EQIC360 0439.000
         LI        R7,SIZ.EOFL     RECORD SIZE  FOR EOFL        EQIC360 0440.000
         CAMW      R7,FCB.RECL,X2  SIZE RECORD READ             EQIC360 0441.000
         BNE       M.WRJOIN        BRANCH IF NOT SAME           EQIC360 0442.000
         TRN       R7,R3                                        EQIC360 0443.000
         SBM       0,BUF.EOFL                                   EQIC360 0444.000
         LW        R1,FCB.ERWA,X1                               EQIC360 0445.000
CHECK    EQU       $                                            EQIC360 0446.000
         LB        R7,0B,X1                                     EQIC360 0447.000
         CAMB      R7,BUF.EOFL+SIZ.EOFL,X3                      EQIC360 0448.000
         BNE       M.WRJOIN                                     EQIC360 0449.000
         ABR       R1,31                                        EQIC360 0450.000
         BIB       R3,CHECK                                     EQIC360 0451.000
         BU        EOF.EOM                                      EQIC360 0452.000
M.WRJOIN EQU       $               COMMON PART                          0453.000
         TBM       EOF,FCB.SFLG,X2        END-OF-FILE ?                 0454.000
         BS        EOF.EOM              YES                             0455.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?               0456.000
         BS        EOF.EOM              YES                             0457.000
         POPSTP                    RESTORE STACK POINTER                0458.000
W.WREXIT POP                            RESTORE REGS                    0459.000
         TRSW      R0                   RETURN                          0460.000
         SPACE                                                          0461.000
EOF.EOM  POPSTP                    RESTORE STACK POINTER                0462.000
         SBM       CC1,0W,X1            INDICATE EOF OR EOM             0463.000
         BU        W.WREXIT                                             0464.000
         SPACE                                                          0465.000
IOERR    EQU       $                    UNRECOVERABLE I/O ERROR RTN ADDR0466.000
         POPSTP                         RESTORE STACK POINTER           0467.000
         SBM       CC2,0W,X1       INDICATE I/O ERROR(S)                0468.000
         BU        W.WREXIT        GO TO ROUTINE EXIT POINT             0469.000
         PAGE                                                           0470.000
*++                                                                     0471.000
*                                                                       0472.000
*        M.WEOF -- (SYSTEM) WRITE END-OF-FILE MARK ROUTINE              0473.000
*                  INPUT: R2 = FCB ADDRESS                              0474.000
*                         R4 = # OF END-OF-FILE MARKS TO WRITE          0475.000
*                 OUTPUT: CC1 SET IF EOM                                0476.000
*                         CC2 SET IF I/O ERROR(S)                       0477.000
*                                                                       0478.000
*--                                                                     0479.000
         SPACE                                                          0480.000
M.WEOF   EQU       $                                                    0481.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           0482.000
         PUSHS                     SAVE REGS & STACK POINTER            0483.000
         TRR       R2,R1           FCB ADDRESS                          0484.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESS        0485.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                         0486.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT                0487.000
M.WEOF10 SVC       1,X'38'              WRITE END-OF-FILE MARK          0488.000
         TBM       EOM,FCB.SFLG,X2        END-OF-MEDIUM ?               0489.000
         BS        EOF.EOM              YES                             0490.000
         BIB       R4,M.WEOF10     LOOP TIL DONE                        0491.000
         POPSTP                         RESTORE STACK POINTER           0492.000
         BU        W.WREXIT        JOIN COMMON CODE                     0493.000
         SPACE     2                                                    0494.000
*++                                                             EQIC360 0495.000
*                                                               EQIC360 0496.000
*        M.WEOFL-- (SYSTEM) WRITE END-OF-FILE MARK ROUTINE      EQIC360 0497.000
*                  FOR SCSI QUARTER INCH TAPE DRIVES            EQIC360 0498.000
*                 INPUT:  R2 = FCB ADDRESS                      EQIC360 0499.000
*                         R4 = # OF END-OF-FILE MARKS TO WRITE  EQIC360 0500.000
*                 OUTPUT: CC1 SET IF EOM                        EQIC360 0501.000
*                         CC2 SET IF I/O ERROR(S)               EQIC360 0502.000
*                                                               EQIC360 0503.000
*--                                                             EQIC360 0504.000
         SPACE                                                  EQIC360 0505.000
M.WEOFL  EQU       $                                            EQIC360 0506.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN   EQIC360 0507.000
         PUSHS                     SAVE REGS & STACK POINTER    EQIC360 0508.000
         SBM       0,BUF.EOFL EOF PATTERN - X'EOFEOFEOF1234567' EQIC360 0509.000
         TRR       R2,R1           FCB ADDRESS                  EQIC360 0510.000
         LA        R7,IOERR        WAIT I/O ERROR RETURN ADDRESSEQIC360 0511.000
         STW       R7,FCB.ERRT,X2  PLANT IN FCB                 EQIC360 0512.000
         LA        R7,BUF.EOFL                                  EQIC360 0513.000
         STW       R7,FCB.ERWA,X2  LOGICAL EOF ADDRESS          EQIC360 0514.000
         LI        R7,SIZ.EOFL                                  EQIC360 0515.000
         STW       R7,FCB.EQTY,X2  LOGICAL EOF SIZE             EQIC360 0516.000
         TRN       R4,R4           NEGATE FOR LOOP COUNT        EQIC360 0517.000
M.WEOFL1 SVC       1,X'32'         WRITE EOF MARK               EQIC360 0518.000
         TBM       EOM,FCB.SFLG,X2 EOM?                         EQIC360 0519.000
         BS        EOF.EOM         YES                          EQIC360 0520.000
         BIB       R4,M.WEOFL1     LOOP TIL DONE                EQIC360 0521.000
         POPSTP                    RESTORE STACK POINTER        EQIC360 0522.000
         BU        W.WREXIT        JOIN COMMON CODE             EQIC360 0523.000
         SPACE     2                                            EQIC360 0524.000
         END                                                            0525.000
