*UTILITY ROUTINES                                       HEADER  FUPUTL  0001.000
************************************************************************0002.000
*                                                                      *0003.000
*                    PROPRIETARY INFORMATION                           *0004.000
*                    -----------------------                           *0005.000
*   THE INFORMATION CONTAINED HEREIN IS PROPRIETARY TO ENCORE          *0006.000
*   COMPUTER CORPORATION AND/OR ITS VENDORS, AND ITS USE, DISCLOSURE,  *0007.000
*   OR DUPLICATION IS SUBJECT TO THE RESTRICTIONS STATED IN THE        *0008.000
*   STANDARD ENCORE COMPUTER CORPORATION LICENSE TERMS AND CONDITIONS  *0009.000
*   OR THE APPROPRIATE THIRD-PARTY SUBLICENSE AGREEMENT.               *0010.000
*                                                                      *0011.000
*                       RESTRICTED RIGHTS                              *0012.000
*                       -----------------                              *0013.000
*   USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT       *0014.000
*   TO RESTRICTIONS AS SET FOURTH IN SUBDIVISION (c) (1) (ii) OF       *0015.000
*   THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT       *0016.000
*   252.227.7013                                                       *0017.000
************************************************************************0018.000
* (C) COPYRIGHT 1989 ENCORE COMPUTER CORPORATION                       *0019.000
*     ALL RIGHTS RESERVED                                              *0020.000
************************************************************************0021.000
*                                                                       0022.000
         M.PGM     FUPUTL,MPX-32,3.6.1,01                               0023.000
*                                                                       0024.000
************************************************************************0025.000
*                                                                       0026.000
*          VOLMGR FUPUTL  REVISION HISTORY 3.6.1                        0027.000
*                                                                       0028.000
************************************************************************0029.000
*                                                                       0030.000
*        VERSION 3.6.1.01 BL2                                           0031.000
*                                                                       0032.000
*        S920607B  12/21/93 10833 CORRECT CONDITION CODE        S920607B0033.000
*                  ERROR INDICATOR (CC1).                       S920607B0034.000
*                  DEPENDENCY:    FUPRES REV 3.6.1.01           S920607B0035.000
*                                                                       0036.000
************************************************************************0037.000
*                                                                       0038.000
*          VOLMGR FUPUTL  REVISION HISTORY 3.6.0                        0039.000
*                                                                       0040.000
************************************************************************0041.000
*                                                                       0042.000
*        VERSION 3.6.0.02 BL11                                          0043.000
*                                                                       0044.000
*        S920607A  08/27/93 10833 IN VERIFYING THE SOLUTION     S920607A0045.000
*                  FOR THIS SPR, IT WAS DETERMINED THAT THE     S920607A0046.000
*                  FIX WAS INCOMPLETE; THEREFORE THE FIX WAS    S920607A0047.000
*                  REMOVED.                                     S920607A0048.000
*                                                                       0049.000
*        VERSION 3.6.0.01 BL9                                           0050.000
*                                                                       0051.000
*        S920607   07/30/03 10833 CORRECT CONDITION CODE        S920607 0052.000
*                  ERROR INDICATOR (CC1).                       S920607 0053.000
*                                                                       0054.000
************************************************************************0055.000
*                                                                       0056.000
*          VOLMGR FUPUTL  REVISION HISTORY 3.5U02A                      0057.000
*                                                                       0058.000
************************************************************************0059.000
*                                                                       0060.000
*        VERSION 3.5U02A.02 BL5                                         0061.000
*                                                                       0062.000
*        CP12311   06/1992 11464 CHANGE CODE TO ADD REMOTE      CP12311 0063.000
*                          FLAGS TO VOLUME AND DIRECTORY PROTO- CP12311 0064.000
*                          TYPES.                               CP12311 0065.000
*                                                                       0066.000
*        VERSION 3.5U02A.01 BL4                                         0067.000
*                                                                       0068.000
*        E3RMS35   06/09/92 11464  ADDED CODE BUILDRR6 TO BUILD E3RMS35 0069.000
*                           A SHORT RID IF AN MVT IS PRESENT    E3RMS35 0070.000
*                           ADDED TO SUPPORT RMSS NODE          E3RMS35 0071.000
*                                                                       0072.000
************************************************************************0073.000
*                                                                       0074.000
*          VOLMGR FUPUTL  REVISION HISTORY 3.4                          0075.000
*                                                                       0076.000
************************************************************************0077.000
*                                                                       0078.000
*                                                                       0079.000
*        REV: 3.4.03                                                    0080.000
*        SPR: S861069                                                   0081.000
*        EMP#: 10471                                                    0082.000
*        DATE: 02/09/88                                                 0083.000
*                                                                       0084.000
*        THE FIX FOR THIS SPR IS A TEMPORARY ONE.  THIS WILL ALLOW      0085.000
*        A LARGER FILE EXTENSION FOR LFC=TMP, WHICH CAUSES THE SORT     0086.000
*        MERGE ROUTINES TO WORK WITH MORE THAN 10,000 FILES             0087.000
*        WHEN DOING A WILD CARD SAVE/LOG.  THE PROBLEM OF GETTING       0088.000
*        A PV01 WILL HAPPEN MUCH LESS THAN PREVIOUSLY.  NOTE, THIS      0089.000
*        SPR IS STILL OPEN FOR MPX-32 3.5.                              0090.000
*                                                                       0091.000
*********************************************************************   0092.000
*                                                                       0093.000
*    FUNCTIONAL DESCRIPTION:                                            0094.000
*                                                                       0095.000
*        THIS MODULE CONTAINS ROUTINES TO:                              0096.000
*                                                                       0097.000
*                  (1)  OBTAIN AN RD AND PLACE IT IN A                  0098.000
*                      KNOWN BUFFER                                     0099.000
*                  (2)  COMPARE A DATE/TIME FOR ELIGIBILITY             0100.000
*                      ON CERTAIN FUP COMMANDS                          0101.000
*                  (3)  PROMPT AND ACCEPT 'CONFIRM' OPTIONS             0102.000
*                      FROM THE USER                                    0103.000
*                  (4)  OBTAIN THE SIGNIFICANT PART OF A 16 CHAR        0104.000
*                      NAME                                             0105.000
*                  (5)  BUILD AN RRS ENTRY OF TYPE 6                    0106.000
*                  (5.1) BUILD AN RRS ENTRY OF TYPE 6                   0107.000
*                        (SHORT 6W FORM) -- ALLOCATION BY 2W RID        0108.000
*                  (5.5) BUILD AN RRS ENTRY OF TYPE 1                   0109.000
*                        ALLOCATE BY PATHNAME -- ACCEPTS PATHNAME       0110.000
*                        OR PATHNAME BLOCK                              0111.000
*                  (6)  BUILD AN RRS ENTRY OF TYPE 2                    0112.000
*                  (6.1)  BUILD AN RRS ENTRY OF TYPE 3                  0113.000
*                  (6.3)  BUILD AN RRS ENTRY OF TYPE 4                  0114.000
*                         ASSIGN TO PREVIOUSLY EXISTING LOGICAL FILE COD0115.000
*                  (7)  BUILD A CNP BUFFER WITH NO WAIT                 0116.000
*                  (8)  ALLOCATE A TEMPORARY FILE (IF NOT ALREADY       0117.000
*                      ALLOCATED), AND OPEN IT                          0118.000
*                  (9)  ALLOCATE A FILE BY RID (IF NOT ALREADY          0119.000
*                      ALLOCATED, AND OPEN IT                           0120.000
*                  (9.1) ALLOCATE RESOURCE -- GENERAL                   0121.000
*                  (10) DE-ALLOCATE A FILE                              0122.000
*                  (11) RESOURCE ENQUIRY                                0123.000
*                  (12) TO CHECK IF AN LFC IS ALLOCATED OR NOT          0124.000
*                  (13) GET AN RD BT SHORT RID                          0125.000
*                  (14) OPEN A RESOURCE                                 0126.000
*                  (15) CLOSE A RESOURCE                                0127.000
*                                                                       0128.000
         SPACE                                                          0129.000
*                                                                       0130.000
*    EXTERNAL REFERENCES:                                               0131.000
*                                                                       0132.000
*        EXT       IO1BIDX         PROTO TYPE ADDRESS  E3RMS35 CP12311  0133.000
         EXT       FLAGBITS        PROGRAM GLOBAL BOOLEAN FLAG WORD     0134.000
         EXT       RLB.BUF         RLB BUFFER                           0135.000
         EXT       RCB.BUF         RCB BUFFER                  ! 32B01  0136.000
         EXT       CNP.ACCD        CNP ACCESS FIELD VALUE               0137.000
         EXT       ADR.MASK        CC'S MASK                            0138.000
         EXT       BUILDPNB        BUILD A PATHNAME BLOCK               0139.000
         EXT       PNB.BUF         TO BUILD PNB IN                      0140.000
         EXT       STACKPTR        SAVE OF R1                           0141.000
         EXT       FUN.SAVE                                             0142.000
         EXT       RD1.BUF         TO PUT RD INTO                       0143.000
         EXT       CNP.BUF         CNP BUFFER                           0144.000
         EXT       RRS.BUF         RRS BUFFER                           0145.000
         EXT       INQ.BUF         RESOURCE INQUIRY BUFFER              0146.000
         EXT       FORMATOT        PRINT STRING                         0147.000
         EXT       GETCRESP        GET CONFIRM REPLY                    0148.000
         EXT       LINEBUFR        REPLY FROM CONFIRM                   0149.000
         EXT       RRS.OPT1        RRS OPTION FIELD VALUE               0150.000
         EXT       RRS.OPT2        RRS OPTION FIELD VALUE               0151.000
         EXT       RRS.ACC1        RRS ACCESS FIELD VALUE               0152.000
         EXT       DIV.RND         DIVIDE WITH ROUND UP                 0153.000
         EXT       COPYSTRG        COPY STRING FROM SOURCE TO DESTINATIO0154.000
         EXT       RIDADDR         RID ADDRESS                 ! 32B01  0155.000
*                                                                       0156.000
*    EXTERNAL DEFINITIONS:                                              0157.000
*                                                                       0158.000
         DEF       GETRD0          GET BY RID                           0159.000
         DEF       GETRD1          GET BY VOL/DIR/FIL                   0160.000
         DEF       GETRD2          GET BY SHORT RID                     0161.000
         DEF       GETRD3          GET RD VIA LOG SERVICE               0162.000
         DEF       MODRD0          GET RD FOR MODIFICATION              0163.000
         DEF       MODRD1          REWRITE RD                           0164.000
         DEF       MODRD2          GET RD USER AREA FOR MODIFICATION    0165.000
         DEF       MODRD3          REWRITE RD USER AREA                 0166.000
         DEF       COMPTIME        COMPARE DATE/TIME                    0167.000
         DEF       CONFIRM         HANDLE 'CONFIRM' OPTION              0168.000
         DEF       GETPATH         GET SIGNICANT CHARS OF NAME          0169.000
         DEF       BUILDCNP        BUILD A CNP                          0170.000
         DEF       BUILDRR1        BUILD AN RRS ENTRY OF TYPE 1         0171.000
         DEF       BUILDRR2        BUILD AN RRS OF TYPE 2               0172.000
         DEF       BUILDRR3        BUILD AN RRS OF TYPE 3               0173.000
         DEF       BUILDRR4        BUILD AN RRS OF TYPE 4               0174.000
         DEF       BUILDRR6        BUILD AN RRS OF TYPE 6               0175.000
         DEF       BLDRR6.S        BUILD RRS TYPE #6 (SHORT 6W FORM)    0176.000
         DEF       X.ALOC          ALLOCATE RESOURCE -- GENERAL         0177.000
         DEF       X.ALOCW         ALLOCATE RESOURCE & WAIT IF NECCESSAR0178.000
*                                  GENERAL -- FOR ANY RRS TYPE          0179.000
         DEF       X.ALOC6         ALLOCATE FILE BY RID                 0180.000
         DEF       X.ALOC2         ALLOCATE TEMPORARY FILE              0181.000
         DEF       X.DALC          DE-ALLOCATE FILE                     0182.000
         DEF       X.RDALC         DE-ALLOCATE FILE - NO DATE UPDATE    0183.000
         DEF       X.RINQ          RESOURCE INQUIRY                     0184.000
         DEF       CHECKLFC        CHECK IF LFC IS ASSIGNED             0185.000
         DEF       CHCKBAOR        CHECK IF TASK IS BATCH ACTIVATED     0186.000
         DEF       X.OPEN          OPEN RESOURCE                        0187.000
         DEF       X.CLOSE         CLOSE RESOURCE                       0188.000
         DEF       BUILDRCB                                    ! 32B01  0189.000
*                                                                       0190.000
*    MACROS                                                             0191.000
*                                                                       0192.000
         LIST      NOMAC                                                0193.000
         M.REQS                    REGISTER EQUATES                     0194.000
         M.RDCOM   RD                                                   0195.000
         M.RDSPD   RD                                                   0196.000
         M.CNP                                                          0197.000
         M.RCB                                                          0198.000
         M.TSA.                                                         0199.000
         M.COMM.                                                        0200.000
         M.DQE.                                                         0201.000
         M.RR.TEQ                  RRS OFFSETS                          0202.000
         M.VEQUS                   GENERAL VOLUME LAYOUT EQUATES        0203.000
*                                                                       0204.000
*    DATA DECLARATIONS                                                  0205.000
*                                                                       0206.000
         BOUND     1D                                                   0207.000
SRID     RES       2W              TO BUILD SHORT RID IN                0208.000
CONF.BLK RES       4W              CONFIRM PARAMETER BLOCK              0209.000
CPYRET   RES       1W              TEMP. STORAGE FOR CPY RETURN ADDRESS 0210.000
CONF.STR DATAB     C' %Z @%C (%C) %C ?',0    FORMAT STRING              0211.000
CONF.HLP DATAB     C' ** VALID REPLIES ARE Y/N - RECONFIRM PLEASE **',0 0212.000
*                                                                       0213.000
* USED BY ROUTINE COMPTIME                                              0214.000
*                                                                       0215.000
TIMTAB   DATAB     RD.CRDAT        CREATE DATE OFFSET                   0216.000
         DATAB     RD.CHDAT        CHANGE DATE OFFSET                   0217.000
         DATAB     RD.SVDAT        SAVED DATE OFFSET                    0218.000
         DATAB     RD.RSDAT        RESTORED DATE OFFSET                 0219.000
         DATAB     RD.RDDAT        ACCESSED DATE OFFSET         ELAC-35 0220.000
*                                                                       0221.000
* EQUATES FOR SETTING UP 'CONFIRM' MESSAGE BLOCK                        0222.000
*                                                                       0223.000
CON.FUN  EQU       0               FUNCTION                             0224.000
CON.VOL  EQU       1W              VOLUME                               0225.000
CON.DIR  EQU       2W              DIRECTORY                            0226.000
CON.FIL  EQU       3W              FILE                                 0227.000
         TITLE     GET RESOURCE DESCRIPTOR                              0228.000
         SPACE                                                          0229.000
         CSECT                                                          0230.000
         SPACE                                                          0231.000
*                                                                       0232.000
* INPUTS:                                                               0233.000
*        R2 = ADDRESS OF ITEM TO GET RID BY (SEE INDIVIDUAL ENTRIES)    0234.000
*        R7 = ADDRESS OF BUFFER IN WHICH TO PUT THE RD                  0235.000
*                                                                       0236.000
* OUTPUTS:                                                              0237.000
*        R7 = ERROR CODE                                                0238.000
*        CC1 IS SET IF ERRORS                                           0239.000
*        THE SPECIFIED BUFFER IS FILLED IF NO ERRORS                    0240.000
*                                                                       0241.000
* THIS ROUTINE HAS THREE ENTRY POINTS:                                  0242.000
*                                                                       0243.000
*        GETRD0 = OBTAIN RD BY RID                                      0244.000
*        GETRD1 = OBTAIN RD BY VOL/DIR/FIL                              0245.000
*        GETRD2 = OBTAIN RD BY SHORT RID                                0246.000
*                                                                       0247.000
*        R2 = ADDRESS OF RID                                            0248.000
*                                                                       0249.000
GETRD0   EQU       $               OBTAIN RD BY RID                     0250.000
         ANMW      R0,ADR.MASK     ASSUME NO ERRORS                     0251.000
         PUSH                      SAVE REGISTERS                       0252.000
         TRR       R2,R3           RID ADDRESS                          0253.000
         ORMW      R3,=X'20000000' SET LENGTH IN TOP BYTE               0254.000
         BU        RDCOM           BRANCH TO COMMON CODE                0255.000
*                                                                       0256.000
*        R2 = ADDRESS OF FIL/DIR/VOL STRING                             0257.000
*                                                                       0258.000
GETRD1   EQU       $               OBTAIN RD BY VOL/DIR/FIL             0259.000
         ANMW      R0,ADR.MASK     ASSUME NO ERRORS                     0260.000
         PUSH                      SAVE REGISTERS                       0261.000
         LA        R3,PNB.BUF      TO PUT PATHNAME BLOCK IN             0262.000
         BL        BUILDPNB        FORM THE PNB                         0263.000
         TRR       R7,R3           SAVE OF PNB DESCRIPTOR               0264.000
         BU        RDCOM           BRANCH TO COMMONCODE                 0265.000
*                                                                       0266.000
*        R2 = ADDRESS OF PROTOTYPE ENTRY                                0267.000
*                                                                       0268.000
GETRD2   EQU       $               OBTAIN RD BY SRID                    0269.000
         ANMW      R0,ADR.MASK     ASSUME NO ERRORS                     0270.000
         PUSH                      SAVE REGISTERS                       0271.000
         LW        R7,PROFR2.O,R2  DIRECTORY RD BLOCK #                 0272.000
         STW       R7,SRID         SAVE IN TEMPORARY AREA               0273.000
         LW        R7,PROFMV.O,R2  MVT ENTRY ADDRESS                    0274.000
         STW       R7,SRID+1W      SAVE IN TEMPORARY AREA               0275.000
         LA        R3,SRID         ADDRESS OF SRID                      0276.000
         ORMW      R3,X'08000000'  SET LENGTH IN TOP BYTE               0277.000
*                                                                       0278.000
*                                                                       0279.000
RDCOM    EQU       $               COMMON SETUP CODE                    0280.000
*                                                                       0281.000
* CALL THE ROUTINE BUILDCNP TO SET UP THE CALLER NOTIFICATION           0282.000
* PACKAGE.                                                              0283.000
* R7 CONTAINS THE OPTION HALF WORD FOR THE CNP.                         0284.000
* CNP.BUF IS SET UP ON EXIT                                             0285.000
*                                                                       0286.000
         ZR        R7                                                   0287.000
         BL        BUILDCNP                                             0288.000
         LW        R6,7W,R1        ADDRESS OF BUFFER TO HOLD RD         0289.000
         LA        R7,CNP.BUF                                           0290.000
         PUSHSTP                   SAVE R1                              0291.000
         TRR       R3,R1           RID, SRID OR PNB ADDRESS             0292.000
         SVC2.2C                   H.VOMM,13 - LOCATE RESOURCE          0293.000
         POPSTP                    RESTORE R1                           0294.000
*                                                                       0295.000
* RETURN ERROR CODE TO CALLER IN R7 WITH CC1 SET IF ERRORS              0296.000
*                                                                       0297.000
         CHECKERR  MOD.VOM                                              0298.000
         POP                       RESTORE REGISTERS                    0299.000
         TRSW      R0              EXIT TO CALLER                       0300.000
         TITLE     GET RD VIA LOG SERVICE                               0301.000
*                                                                       0302.000
* THIS ROUTINE CALLS THE LOG SERVICE TO OBTAIN THE NEXT RD              0303.000
*                                                                       0304.000
* INPUTS:                                                               0305.000
*        RLB.BUF = RLB ALREADY SET UP                                   0306.000
*                                                                       0307.000
* OUTPUTS:                                                              0308.000
*        CC1 SET IF ERRORS                                              0309.000
*        RD IS IN THE BUFFER SPECIFIED IN THE RLB                       0310.000
*                                                                       0311.000
GETRD3   ANMW      R0,ADR.MASK     ASSUME NO ERRORS                     0312.000
         PUSH                      SAVE REGISTERS                       0313.000
*                                                                       0314.000
* FORM A CNP                                                            0315.000
*                                                                       0316.000
         ZR        R7                                                   0317.000
         BL        BUILDCNP                                             0318.000
*                                                                       0319.000
* AND CALL THE SERVICE                                                  0320.000
*                                                                       0321.000
         LA        R2,RLB.BUF      RLB BUFFER                           0322.000
         LA        R7,CNP.BUF      CNP BUFFER                           0323.000
         SVC2.29                   H.VOMM,10                            0324.000
*                                                                       0325.000
* RETURN ERROR CODE IN R7 WITH CC1 SET                                  0326.000
*                                                                       0327.000
         CHECKERR  MOD.VOM                                              0328.000
         POP                                                            0329.000
         TRSW      R0                                                   0330.000
         TITLE     GET RD FOR MODIFICATION                              0331.000
*                                                                       0332.000
* THIS ROUTINE ISSUES THE MODIFY DESCRIPTOR SERVICE IN ORDER            0333.000
* TO READ THE RD AND PREPARE TO UPDATE IT.                              0334.000
*                                                                       0335.000
* INPUTS:                                                               0336.000
*        R3 = ADDRESS OF RID                                            0337.000
*        R7 = ADDRESS OF BUFFER INTO WHICH TO READ RD                   0338.000
*                                                                       0339.000
* OUTPUTS:                                                              0340.000
*        BUFFER IS FILLED                                               0341.000
*        CC1 IS SET IF ERRORS                                           0342.000
*        R7 CONTAINS ERROR CODE IF ERRORS                               0343.000
*                                                                       0344.000
MODRD0   EQU       $                                                    0345.000
         ANMW      R0,ADR.MASK     CLEAR CC'S                           0346.000
         PUSH                      SAVE REGISTERS                       0347.000
         ORMW      R3,=X'20000000' SET LENGTH INTO TOP BYTE             0348.000
*                                                                       0349.000
* BUILD A CNP                                                           0350.000
*                                                                       0351.000
         ZR        R7                                                   0352.000
         BL        BUILDCNP                                             0353.000
*                                                                       0354.000
         LW        R6,7W,R1        ADDRESS OF RD BUFFER                 0355.000
         LA        R7,CNP.BUF      ADDRESS OF CNP BUFFER                0356.000
         PUSHSTP                   SAVE R1                              0357.000
         TRR       R3,R1           RID ADDRESS                          0358.000
         SVC2.2A                   H.VOMM,11 (MODIFY DESCRIPTOR)        0359.000
         POPSTP                    RESTORE R1                           0360.000
*                                                                       0361.000
* RETURN ERROR CODE IN R7 WITH CC1 SET IF ERRORS                        0362.000
*                                                                       0363.000
         CHECKERR  MOD.VOM                                              0364.000
         POP                       RESTORE REGISTERS                    0365.000
         TRSW      R0                                                   0366.000
         TITLE     REWRITE RD AFTER MODIFICATION                        0367.000
*                                                                       0368.000
* THIS ROUTINE REWRITES THE MODIFIED DESCRIPTOR THAT WAS READ           0369.000
* BY THE MODIFY DESCRIPTOR SERVICE.                                     0370.000
*                                                                       0371.000
* INPUTS:                                                               0372.000
*        R7 = ADDRESS OF RD BUFFER (MUST BE THE SAME AS THE             0373.000
*             BUFFER USED TO READ THE RD)                               0374.000
*                                                                       0375.000
* OUTPUTS:                                                              0376.000
*        CC1 IS SET IF ERRORS                                           0377.000
*        R7 CONTAINS ERROR CODE IF ERRORS                               0378.000
*                                                                       0379.000
MODRD1   EQU       $                                                    0380.000
         ANMW      R0,ADR.MASK     CLEAR CC'S                           0381.000
         PUSH                      SAVE REGISTERS                       0382.000
*                                                                       0383.000
* BUILD A CNP                                                           0384.000
*                                                                       0385.000
         ZR        R7                                                   0386.000
         BL        BUILDCNP                                             0387.000
*                                                                       0388.000
         LW        R6,7W,R1        ADDRESS OF RD BUFFER                 0389.000
         LA        R7,CNP.BUF      ADDRESS OF CNP BUFFER                0390.000
         SVC2.2B                   H.VOMM,12 (REWRITE DESCRIPTOR)       0391.000
*                                                                       0392.000
* RETURN ERROR CODE IN R7 WITH CC1 SET IF ERRORS                        0393.000
*                                                                       0394.000
         CHECKERR  MOD.VOM                                              0395.000
         POP                       RESTORE REGISTERS                    0396.000
         TRSW      R0                                                   0397.000
         TITLE     MODIFY USER AREA OF RD                               0398.000
*                                                                       0399.000
* THIS ROUTINE CALLS THE 'MODIFY USER AREA OF RD' SERVICE, WHICH        0400.000
* READS THE USER AREA OF AN RD INTO A USER SUPPLIED BUFFER, AND LOCKS   0401.000
* THE RD SO THAT IT CANNOT BE ACCESSED WHILE BEING CHANGED              0402.000
*                                                                       0403.000
* INPUTS:                                                               0404.000
*        R3 = ADDRESS OF RID                                            0405.000
*        R7 = ADDRESS OF BUFFER TO PUT USER AREA OF RD INTO             0406.000
*                                                                       0407.000
* OUTPUTS:                                                              0408.000
*        USER AREA OF RD IN BUFFER                                      0409.000
*        CC1 SET IF ERROR                                               0410.000
*        ERROR STATUS IN R7 IF CC1 IS SET                               0411.000
*                                                                       0412.000
************************************************************************0413.000
MODRD2   EQU       $                                                    0414.000
         ANMW      R0,ADR.MASK     CLEAR CC'S FOR RETURN                0415.000
         PUSH                      SAVE REGISTERS                       0416.000
*                                                                       0417.000
         ORMW      R3,=X'20000000' SET LENGTH INTO R3 TO FORM RID VECTOR0418.000
*                                                                       0419.000
         ZR        R7                                                   0420.000
         BL        BUILDCNP        BUILD A CNP FOR SVC CALL             0421.000
*                                                                       0422.000
         LW        R6,7W,R1        ADDRESS OF USER AREA BUFFER          0423.000
         LA        R7,CNP.BUF      CNP ADDRESS                          0424.000
*                                                                       0425.000
         PUSHSTP                   SVC USES R1, SO SAVE STACK POINTER   0426.000
         TRR       R3,R1           MOVE RID VECTOR TO R1                0427.000
         SVC       2,X'31'         READ USER AREA OF RD AND LOCK RD     0428.000
         POPSTP                    RESTORE R1 (STACK POINTER)           0429.000
*                                                                       0430.000
         CHECKERR  MOD.VOM         IF ERROR, SET CC1 WITH STAT. IN R7   0431.000
         POP                       RESTORE REGISTERS                    0432.000
         TRSW      R0              RETURN TO USER                       0433.000
         TITLE     REWRITE USER AREA OF RD                              0434.000
*                                                                       0435.000
* THIS ROUTINE REWRITES THE USER AREA OF AN RD THAT HAS BEEN READ BY    0436.000
* THE MODIFY USER AREA SERVICE.  RD IS UNLOCKED AS A RESULT OF THE      0437.000
* SVC CALL                                                              0438.000
*                                                                       0439.000
* INPUTS:                                                               0440.000
*        R7 = ADDRESS OF BUFFER CONTAINING THE MODIFIED USER AREA       0441.000
*                                                                       0442.000
* OUTPUTS:                                                              0443.000
*        CC1 SET IF ERROR OCCURS                                        0444.000
*        R7 CONTAINS ERROR CODE IF CC1 IS SET                           0445.000
*                                                                       0446.000
************************************************************************0447.000
MODRD3   EQU       $                                                    0448.000
         ANMW      R0,ADR.MASK     CLEAR CC'S FOR RETURN                0449.000
         PUSH                      SAVE REGISTERS                       0450.000
*                                                                       0451.000
         ZR        R7                                                   0452.000
         BL        BUILDCNP        BUILD A CNP FOR ERROR STATUS RETURN  0453.000
*                                                                       0454.000
         LW        R6,7W,R1        ADDRESS OF BUFFER INTO R6            0455.000
         LA        R7,CNP.BUF      ADDRESS OF CNP                       0456.000
         SVC       2,X'32'         REWRITE USER AREA                    0457.000
*                                                                       0458.000
         CHECKERR  MOD.VOM         IF ERROR, SET CC1 AND PUT STAT IN R7 0459.000
         POP                       RESTORE REGISTERS FOR RETURN         0460.000
         TRSW      R0              RETURN TO USER                       0461.000
         TITLE     COMPARE DATE/TIME                                    0462.000
*                                                                       0463.000
* THIS ROUTINE COMPARES THE DATE AND TIME SPECIFIED IN THE              0464.000
* OPTION BLOCK (IF ANY) WITH THE APPROPRIATE DATE AND TIME              0465.000
* IN THE RD FOR THE CURRENT RESOURCE (IN RD1.BUF)                       0466.000
*                                                                       0467.000
*                                                                       0468.000
* INPUTS:                                                               0469.000
*        R3 = ADDRESS OF OPTION BLOCK ENTRY                             0470.000
*        RD1.BUF MUST CONTAIN RD ALREADY                                0471.000
*                                                                       0472.000
* OUTPUTS:                                                              0473.000
*        CC1 = 1 IF THE DATE IS ELIGIBLE                                0474.000
*            = 0 OTHERWISE                                              0475.000
*                                                                       0476.000
* THIS ROUTINE IS USED BY THE NORMAL SAVE AND RESTORE COMMANDS          0477.000
* AND IS ALSO USED BY THE SAVE INCREMENTAL COMMAND, BUT IN THE          0478.000
* LATTER CASE THE DATE COMPARISONS ARE DIFFERENT.                       0479.000
*                                                                       0480.000
COMPTIME EQU       $                                                    0481.000
         ANMW      R0,ADR.MASK     ASSUME DATE IS INELIGIBLE            0482.000
         PUSH                      SAVE REGISTERS                       0483.000
*                                                                       0484.000
         TBM       OPT.B.IN,OPT.FLGS,R3 INCREMENTAL SAVE??              0485.000
         BS        COMPTIM1        BRANCH IF INCREMENTAL SAVE           0486.000
*                                                                       0487.000
         LB        R2,OPT.TTIM,R3  TYPE OF DATE/TIME (0-4)              0488.000
         BZ        YES.EXIT        BRANCH IF NO CONSTRAINTS             0489.000
*                                                                       0490.000
* GET THE DATE/TIME FROM THE OPTION BLOCK IN READINESS FOR              0491.000
* COMPARISONS.                                                          0492.000
*                                                                       0493.000
         LW        R4,OPT.DATE,R3                                       0494.000
         LW        R5,OPT.TIME,R3                                       0495.000
*                                                                       0496.000
* GET THE OFFSET INTO THE RD FOR THE TYPE OF DATE/TIME                  0497.000
* SPECIFIED IN OPT.TTIM FROM LOCAL DATA TABLE 'TIMTAB'                  0498.000
*                                                                       0499.000
         SUI       R2,1            (0-3)                                0500.000
         LB        R2,TIMTAB,R2                                         0501.000
*                                                                       0502.000
* CHECK TO SEE IF THE COMPARISON IS A 'SINCE' OR A 'BEFORE' TIME.       0503.000
*                                                                       0504.000
         TBM       OPT.B.SB,OPT.FLGS,R3  CHECK FOR SINCE BEFORE         0505.000
         BS        BEFORE          BRANCH IF BEFORE                     0506.000
*                                                                       0507.000
* DATE/TIME IS A SINCE TYPE                                             0508.000
*                                                                       0509.000
         CAMD      R4,RD1.BUF,R2   COMPARE OPTION WITH RESOURCE         0510.000
         BGE       EXIT            BRANCH IF DATE NOT ELIGIBLE          0511.000
*                                                                       0512.000
* DATE IS O.K. SO SET CC1 AND EXIT                                      0513.000
*                                                                       0514.000
YES.EXIT SBM       CC1,0W,R1       SET CC1                              0515.000
EXIT     POP                       RESTORE REGISTERS                    0516.000
         TRSW      R0                                                   0517.000
*                                                                       0518.000
* DATE/TIME IS A BEFORE TYPE                                            0519.000
*                                                                       0520.000
BEFORE   CAMD      R4,RD1.BUF,R2   COMPARE OPTION WITH RESOURCE         0521.000
         BLT       EXIT            BRANCH IF DATE NOT ELIGIBLE          0522.000
         BU        YES.EXIT        ELSE DATE IS O.K.                    0523.000
*                                                                       0524.000
* A SAVE INCREMENTAL IS BEING DONE.                                     0525.000
* FILE IS ELIGIBLE IF:                                                  0526.000
*                                                                       0527.000
*        (1) SAVE DATE IS ZERO - FILE HAS NOT BEEN SAVED                0528.000
*        (2) SAVE DATE IS NON ZERO AND THE LAST CHANGED DATE            0529.000
*            AND TIME IS GREATER THAN THE SAVED DATE AND TIME.          0530.000
*                                                                       0531.000
COMPTIM1 LA        R2,RD1.BUF      ADDRESS OF RD                        0532.000
         LW        R4,RD.SVDAT,R2  SAVE DATE FROM RD                    0533.000
         BZ        YES.EXIT        BRANCH IF NOT SAVED                  0534.000
*                                                                       0535.000
         CAMW      R4,RD.CHDAT,R2  CHANGED DATE > SAVED DATE??          0536.000
         BLT       YES.EXIT        BRANCH IF CHANGED SINCE LAST SAVE    0537.000
         BGT       EXIT            BRANCH IF SAVED SINCE LAST CHANGE    0538.000
*                                                                       0539.000
* DATES ARE THE SAME, COMPARE THE TIMES                                 0540.000
*                                                                       0541.000
         LW        R4,RD.SVTIM,R2  SAVE TIME FROM RD                    0542.000
         CAMW      R4,RD.CHTIM,R2  CHANGED TIME > SAVED TIME??          0543.000
         BLT       YES.EXIT        BRANCH IF CHANGED SINCE LAST SAVE    0544.000
         BU        EXIT            BRANCH IF SAVED SINCE LAST CHANGE    0545.000
         TITLE     HANDLE CONFIRM OPTIONS                               0546.000
*                                                                       0547.000
* THIS ROUTINE PROMPTS THE USER FOR CONFIRMATION OF THE FUP             0548.000
* COMMAND REQUESTED.                                                    0549.000
* IT APPLIES TO SAVE, RESTORE AND DELETE COMMANDS.                      0550.000
*                                                                       0551.000
* INPUTS:                                                               0552.000
*        R2 = ADDRESS OF FIL/DIR/VOL STRING                             0553.000
*        FUN.SAVE = THE FUNCTION STRING                                 0554.000
*                                                                       0555.000
* OUTPUTS:                                                              0556.000
*        CC1 SET IF POSITIVE REPLY                                      0557.000
*            RESET OTHERWISE                                            0558.000
*                                                                       0559.000
CONFIRM  EQU       $                                                    0560.000
         ANMW      R0,ADR.MASK     CLEAR C'S                            0561.000
         PUSH                      SAVE REGISTERS                       0562.000
*                                                                       0563.000
         LA        R3,CONF.BLK     PARAMETER BLOCK                      0564.000
*                                                                       0565.000
         LW        R7,FUN.SAVE     FUNCTION STRING ADDRESS              0566.000
         STW       R7,CON.FUN,R3   INTO PARAMETER BLOCK                 0567.000
*                                                                       0568.000
* USE THE COMMON SUBROUTINE GETPATH TO COMPRESS THE VOL/DIR/FIL         0569.000
* PARTS OF THE PATHNAME.                                                0570.000
*                                                                       0571.000
         LA        R7,PROFVN.O,R2  START OF VOLUME NAME                 0572.000
         BL        GETPATH                                              0573.000
         STW       R7,CON.VOL,R3                                        0574.000
*                                                                       0575.000
         LA        R7,PROFDN.O,R2  START OF DIRECTORY NAME              0576.000
         BL        GETPATH                                              0577.000
         STW       R7,CON.DIR,R3                                        0578.000
*                                                                       0579.000
         LA        R7,PROFFN.O,R2  START OF FILE NAME                   0580.000
         BL        GETPATH                                              0581.000
         STW       R7,CON.FIL,R3                                        0582.000
*                                                                       0583.000
CONFIRM3 LA        R2,CONF.STR     FORMAT STRING                        0584.000
         BL        FORMATOT        OUTPUT IT                            0585.000
         BL        GETCRESP        GET REPLY                            0586.000
         LB        R7,LINEBUFR     GET FIRST CHAR OF REPLY              0587.000
         CI        R7,G'Y'         POSITIVE CONFIRMATION??              0588.000
         BEQ       CONFIRM1        BRANCH IF YES                        0589.000
         CI        R7,G'N'         NEGATIVE CONFIRMATION??              0590.000
         BEQ       CONFIRM2        BRANCH IF NEGATIVE                   0591.000
*                                                                       0592.000
* NOT 'Y' OR 'N' SO ASK AGAIN                                           0593.000
*                                                                       0594.000
         LA        R2,CONF.HLP     TELL USER WHAT TO TYPE IN            0595.000
         BL        FORMATOT                                             0596.000
         BU        CONFIRM3                                             0597.000
*                                                                       0598.000
* POSITIVE RESPONSE, SET CC1 AND EXIT                                   0599.000
*                                                                       0600.000
CONFIRM1 SBM       CC1,0W,R1                                            0601.000
*                                                                       0602.000
* NEGATIVE RESPONSE, AND COMMON EXIT                                    0603.000
*                                                                       0604.000
CONFIRM2 POP                       RESTORE REGISTERS                    0605.000
         TRSW      R0                                                   0606.000
         TITLE     GET SIGNIFICANT PART OF A 16 CHAR NAME               0607.000
*                                                                       0608.000
* INTERNAL ROUTINE TO EVALUATE THE SIGNIFICANT LENGTH OF                0609.000
* A 16 BYTE NAME.                                                       0610.000
*                                                                       0611.000
* INPUT:                                                                0612.000
*        R7 - THE ADDRESS OF THE FIRST BYTE OF THE NAME                 0613.000
*                                                                       0614.000
* OUTPUT:                                                               0615.000
*        R7 - TOP BYTE IS THE LENGTH IN BYTES                           0616.000
*             REST IS THE ADDRESS OF THE NAME                           0617.000
*                                                                       0618.000
GETPATH  EQU       $                                                    0619.000
         PUSH                                                           0620.000
         TRR       R7,R3           INTO INDEX REGISTER                  0621.000
*                                                                       0622.000
* IF THE FIRST DOUBLE WORD IS ZERO THEN THE NAME IS                     0623.000
* ABSENT AND RETURN THE ADDRESS IN R7 WITH LENGTH OF ZERO.              0624.000
*                                                                       0625.000
         LD        R4,0,R3                                              0626.000
         BZ        GET3                                                 0627.000
         ADI       R3,15B          ADDRESS OF END OF NAME               0628.000
         LI        R6,16B          MAXIMUM LENGTH                       0629.000
         LI        R4,32           SPACE CHARACTER                      0630.000
*                                                                       0631.000
* LOOP ROUND HERE UNTIL FIRST NON-SPACE CHARACTER FOUND                 0632.000
*                                                                       0633.000
GET2     CAMB      R4,0,R3                                              0634.000
         BNE       GET1            BRANCH IF SIGNIFICANT CHAR           0635.000
         SUI       R3,1B           NEXT BYTE OF NAME                    0636.000
         SUI       R6,1B           ONE LESS SIGNIFICANT CHAR            0637.000
         BNZ       GET2            BRANCH IF NAME NOT EXHAUSTED         0638.000
*                                                                       0639.000
* LENGTH IS NOW IN R6                                                   0640.000
* ADDRESS OF NAME START IS IN R7                                        0641.000
* SET THE RETURN PARAMETER INTO R7                                      0642.000
*                                                                       0643.000
GET1     SLL       R7,8                                                 0644.000
         SRLD      R6,8                                                 0645.000
GET3     STW       R7,7W,R1                                             0646.000
         POP                                                            0647.000
         TRSW      R0                                                   0648.000
         TITLE     BUILD A TYPE 6 RRS ENTRY                             0649.000
*                                                                       0650.000
* THIS ROUTINE BUILDS AN RRS ENTRY OF TYPE 6 INTO RRS.BUF               0651.000
* A TYPE 6 ENTRY IS ALLOCATION BY  RID                                  0652.000
* THE RRS ACCESS IS PASSED IN R6, AND THE OPTIONS ARE SET               0653.000
* AS UNBLOCKED/AUTOMATIC OPEN.                                          0654.000
*                                                                       0655.000
* INPUTS:                                                               0656.000
*        R2 = RID ADDRESS                                               0657.000
*        R4 = OPTION WORD                                               0658.000
*        R6 = ACCESS REQUIRED                                           0659.000
*        R7 = LFC TO PUT INTO RRS                                       0660.000
*                                                                       0661.000
* OUTPUTS:                                                              0662.000
*        RRS.BUF = THE BUILT RRS                                        0663.000
*                                                                       0664.000
BUILDRR6 EQU       $                                                    0665.000
         PUSH                                                           0666.000
         LA        R3,RRS.BUF      ADDRESS OF RRS BUFFER                0667.000
         STW       R7,RR.LFC,R3    LFC IN G FORMAT                      0668.000
*                                                                       0669.000
         LI        R7,RR.RID       TYPE 6                               0670.000
         STB       R7,RR.TYPE,R3                                        0671.000
*                                                                       0672.000
         LI        R7,RRS6.SIZ     SIZE OF ENTRY IN WORDS               0673.000
         STB       R7,RR.SIZE,R3                                        0674.000
*                                                                       0675.000
         ZMH       RR.UDTI,R3      ZERO THE BOTTOM HALF WORD            0676.000
*                                                                       0677.000
         STW       R6,RR.ACCS,R3   ACCESS                               0678.000
         STW       R4,RR.OPTS,R3   OPTIONS                              0679.000
*                                                                       0680.000
* NOW COPY THE RID FROM THE PROTOTYPE TABLE                             0681.000
*                                                                       0682.000
         LI        R6,-RID.SIZE    RID.SIZE=8W=32B                      0683.000
         LA        R3,RRS.BUF      RRS BUFFER ADDRESS                   0684.000
         ADI       R3,RR.NAME1     ADDRESS FOR DESTINATION OF RID       0685.000
*                                                                       0686.000
RRS6.0   LB        R7,0,R2         NEXT SOURCE BYTE OF RID     85-0391  0687.000
         STB       R7,0,R3         INTO RRS BUFFER             85-0391  0688.000
         ABR       R2,31           NEXT INPUT BYTE             85-0391  0689.000
         ABR       R3,31           NEXT OUTPUT BYTE            85-0391  0690.000
         BIB       R6,RRS6.0       AND LOOP                    85-0391  0691.000
*                                                       E3RMS35 CP12311 0692.000
* IF VOLUME IS REMOTE FORM RID INTO A SHORT RID         E3RMS35 CP12311 0693.000
* OTHERWISE LEAVE IT ALONE                              E3RMS35 CP12311 0694.000
*                                                       E3RMS35 CP12311 0695.000
*        TRR       R1,R5           SAVE R1              E3RMS35 CP12311 0696.000
*        LW        R1,IO1BIDX      GET PROTOTYPE ADDRESSE3RMS35 CP12311 0697.000
*        LB        R4,PROFMV.O,X1  GET REMOTE FLAGS     E3RMS35 CP12311 0698.000
*        BZ        RRS6.10         NOT REMOTE VOLUME    E3RMS35 CP12311 0699.000
*        SUI       R2,RID.SIZE     GET BACK BEGINING OF E3RMS35 CP12311 0700.000
*        LA        R3,RRS.BUF      GET BEGINNING OF RRS E3RMS35 CP12311 0701.000
*        LW        R7,RD.DOFF,X2   GET BLOCK NUMBER     E3RMS35 CP12311 0702.000
*        LW        R6,PROFMV.O,X1  GET THE MVT ADDRESS  E3RMS35 CP12311 0703.000
*        STW       R6,RR.NAME1+1W,X3 SET MVTE ADDRESS   E3RMS35 CP12311 0704.000
*        STW       R7,RR.NAME1,X3  PUT IN RRS           E3RMS35 CP12311 0705.000
*RS6.10  EQU       $                                    E3RMS35 CP12311 0706.000
*        TRR       R5,R1           RESTORE R1                           0707.000
*                                                                       0708.000
         POP                                                            0709.000
         TRSW      R0                                                   0710.000
         TITLE     BUILD RRS ENTRY TYPE #6 (SHORT 6W FORM)              0711.000
*                                                                       0712.000
* THIS ROUTINE BUILDS AN RRS ENTRY OF TYPE 6 (SHORT 6W FORM) INTO       0713.000
* RRS.BUF                                                               0714.000
* A TYPE #6 (SHORT 6W FORM) ENTRY IS ALLOCATION BY 2W RID               0715.000
*                                                                       0716.000
* INPUTS:                                                               0717.000
*        R2 = ADDRESS OF PROTOTYPE ENTRY                                0718.000
*        R7 = LFC TO PUT INTO RRS                                       0719.000
*                                                                       0720.000
* OUTPUTS:                                                              0721.000
*        RRS.BUF = THE BUILT RRS                                        0722.000
*                                                                       0723.000
BLDRR6.S EQU       $                                                    0724.000
         PUSH                                                           0725.000
         LA        R3,RRS.BUF      ADDRESS OF RRS BUFFER                0726.000
         STW       R7,RR.LFC,R3    LFC IN G FORMAT                      0727.000
*                                                                       0728.000
         LI        R7,RR.RID       TYPE 6                               0729.000
         STB       R7,RR.TYPE,R3                                        0730.000
*                                                                       0731.000
         LI        R7,RR6S.SIZ     SIZE OF ENTRY IN WORDS               0732.000
         STB       R7,RR.SIZE,R3                                        0733.000
*                                                                       0734.000
         ZMH       RR.UDTI,R3      ZERO THE BOTTOM HALF WORD            0735.000
         ZMW       RR.ACCS,R3      ACCESS                               0736.000
         ZMW       RR.OPTS,R3      OPTIONS                              0737.000
*                                                                       0738.000
* NOW COPY THE 2W RID FROM THE PROTOTYPE TABLE                          0739.000
*                                                                       0740.000
         LW        R7,PROFMV.O,X2  MVT ENTRY ADDRESS                    0741.000
         STW       R7,RR.NAME1+1W,X3    PLANT IN RRS                    0742.000
         LW        R7,PROFRD.O,X2  RES. DESCR. BLOCK #                  0743.000
         STW       R7,RR.NAME1,X3       PLANT IN RRS                    0744.000
         POP                       RESTORE REGS                         0745.000
         TRSW      R0              RETURN                               0746.000
         TITLE     BUILD A TYPE 2 RRS ENTRY                             0747.000
*                                                                       0748.000
* THIS ROUTINE BUILDS AN RRS ENTRY OF TYPE 2 INTO RRS.BUF               0749.000
* A TYPE 2 ENTRY IS ALLOCATE A TEMPORARY FILE                           0750.000
* THE FILE IS ALLOCATED ON ANY DISC                                     0751.000
*                                                                       0752.000
* INPUTS:                                                               0753.000
*        R7 = LFC TO PUT INTO RRS                                       0754.000
*                                                                       0755.000
* OUTPUTS:                                                              0756.000
*        RRS.BUF = THE BUILT RRS                                        0757.000
*                                                                       0758.000
BUILDRR2 EQU       $                                                    0759.000
         PUSH                                                           0760.000
         LA        R3,RRS.BUF      ADDRESS OF RRS BUFFER                0761.000
         STW       R7,RR.LFC,R3    LFC IN G FORMAT                      0762.000
*                                                                       0763.000
         LI        R7,RR.TEMP      TYPE 2                               0764.000
         STB       R7,RR.TYPE,R3                                        0765.000
*                                                                       0766.000
         LI        R7,RRS2.SIZ     SIZE OF ENTRY IN WORDS               0767.000
         STB       R7,RR.SIZE,R3                                        0768.000
*                                                                       0769.000
         ZMH       RR.UDTI,R3      ZERO THE BOTTOM HALF WORD            0770.000
         LW        R7,RRS.ACC1     ACCESS                               0771.000
         STW       R7,RR.ACCS,X3   UPDATE ACCESS, EXCLUSIVE USE         0772.000
         LW        R7,RRS.OPT1     OPTIONS                              0773.000
         STW       R7,RR.OPTS,X3   UNBLOCKED I/O, AUTOMATIC OPEN        0774.000
*                                                                       0775.000
         POP                                                            0776.000
         TRSW      R0                                                   0777.000
         TITLE     BUILD A RRS ENTRY  OF TYPE 3                         0778.000
*+                                                                      0779.000
*                                                                       0780.000
* THIS ROUTINE BUILDS AN RRS ENTRY OF TYPE 3 INTO RRS.BUF               0781.000
* A TYPE 3 ENTRY IS ALLOCATE A DEVICE                                   0782.000
*                                                                       0783.000
* INPUTS:                                                               0784.000
*        R5 = UNFORMATTED ID -- 1-4 ASCII CHAR. USED IN MOUNT MESSAGE   0785.000
*        R6 = DEVICE TYPE CODE IN BYTE 3                                0786.000
*        R7 = LFC TO PUT INTO RRS                                       0787.000
*                                                                       0788.000
* OUTPUTS:                                                              0789.000
*        RRS.BUF = THE BUILT RRS                                        0790.000
*-                                                                      0791.000
BUILDRR3 EQU       $                                                    0792.000
         PUSH                                                           0793.000
         LA        R3,RRS.BUF      ADDRESS OF RRS BUFFER                0794.000
         STW       R7,RR.LFC,X3    LFC IN G FORMAT                      0795.000
*                                                                       0796.000
         LI        R7,RR.DEVC      TYPE 3                               0797.000
         STB       R7,RR.TYPE,X3                                        0798.000
*                                                                       0799.000
         LI        R7,RRS3.SIZ     SIZE OF ENTRY IN WORDS               0800.000
         STB       R7,RR.SIZE,X3                                        0801.000
*                                                                       0802.000
         ZMH       RR.DENS,X3      ZERO THE DENSITY FIELD               0803.000
         LW        R7,RRS.ACC1     UPDATE ACCESS, EXCLUSIVE USE         0804.000
         STW       R7,RR.ACCS,X3   PLANT IN ACCESS FIELD                0805.000
         LW        R7,RRS.OPT1     UNBLOCKED I/O, AUTOMATIC OPEN        0806.000
         STW       R7,RR.OPTS,X3   PLANT IN OPTION FIELD                0807.000
*                                                                       0808.000
         ZMW       RR.DT3,X3       INITIALIZE                           0809.000
         STB       R6,RR.DT3,X3    DEVICE TYPE CODE                     0810.000
         STW       R5,RR.UNFID,X3  UNFORMATTED ID                       0811.000
         POP                                                            0812.000
         TRSW      R0                                                   0813.000
         TITLE     BUILD A TYPE 4 RRS ENTRY                             0814.000
*                                                                       0815.000
* THIS ROUTINE BUILDS AN RRS ENTRY OF TYPE 4 INTO RRS.BUF               0816.000
* A TYPE 4 ENTRY IS ASSIGN TO A PREVIOUSLY DEFINED LOGICAL FILE CODE    0817.000
*                                                                       0818.000
* INPUTS:                                                               0819.000
*        R7 = LFC TO PUT INTO RRS                                       0820.000
*        R6 = PREVIOUSLY DEFINED LOGICAL FILE CODE                      0821.000
*                                                                       0822.000
* OUTPUTS:                                                              0823.000
*        RRS.BUF = THE BUILT RRS                                        0824.000
*                                                                       0825.000
BUILDRR4 EQU       $                                                    0826.000
         PUSH                                                           0827.000
         LA        R3,RRS.BUF      ADDRESS OF RRS BUFFER                0828.000
         STW       R7,RR.LFC,X3    LFC IN G-STRING FORMAT               0829.000
*                                                                       0830.000
         LI        R7,RR.LFC2      TYPE 4                               0831.000
         STB       R7,RR.TYPE,X3                                        0832.000
*                                                                       0833.000
         STW       R6,RR.SFC,X3    PREVIOUSLY DEFINED LFC               0834.000
*                                                                       0835.000
         LW        R7,RRS.OPT2     AUTOMATIC OPEN                       0836.000
         STW       R7,RR.OPTS,X3   PLANT IN OPTION FIELD                0837.000
*                                                                       0838.000
         LI        R7,RRS4.SIZ     SIZE OF ENTRY IN WORDS               0839.000
         STB       R7,RR.SIZE,X3                                        0840.000
*                                                                       0841.000
         ZMH       RR.TYPE+1H,X3   INITIALIZE TO ZERO                   0842.000
*                                                                       0843.000
         POP                                                            0844.000
         TRSW      R0                                                   0845.000
         TITLE     BUILD A RRS ENTRY OF TYPE 1                          0846.000
*+                                                                      0847.000
*                                                                       0848.000
* THIS ROUTINE BUILDS AN RRS ENTRY OF TYPE 1 INTO RRS.BUF               0849.000
* A TYPE 1 ENTRY IS ALLOCATE BY PATHNAME                                0850.000
*                                                                       0851.000
* INPUTS:                                                               0852.000
*        R5 = LENGTH OF PATHNAME OR PATHNAME BLOCK                      0853.000
*        R6 = ADDRESS OF PATHNAME OR PATHNAME BLOCK                     0854.000
*        R7 = LFC TO PUT INTO RRS                                       0855.000
*                                                                       0856.000
* OUTPUTS:                                                              0857.000
*        RRS.BUF = THE BUILT RRS                                        0858.000
*-                                                                      0859.000
BUILDRR1 EQU       $                                                    0860.000
         PUSH                                                           0861.000
         LA        R3,RRS.BUF      ADDRESS OF RRS BUFFER                0862.000
         STW       R7,RR.LFC,X3    LFC IN G FORMAT                      0863.000
*                                                                       0864.000
         LI        R7,RR.PATH      TYPE 1 RRS ENTRY                     0865.000
         STB       R7,RR.TYPE,X3                                        0866.000
         STB       R5,RR.PLEN,X3   LENGTH (IN BYTES) OF PATHNAME        0867.000
         ZMB       RR.PLEN+1B,X3   INITIALIZE FIELD TO ZERO             0868.000
*                                                                       0869.000
         LW        R7,RRS.ACC1     UPDATE ACCESS, EXCLUSIVE USE         0870.000
         STW       R7,RR.ACCS,X3   PLANT IN ACCESS FIELD                0871.000
         LW        R7,RRS.OPT1     UNBLOCKED I/O, AUTOMATIC OPEN        0872.000
         STW       R7,RR.OPTS,X3   PLANT IN OPTION FIELD                0873.000
*                                                                       0874.000
         TRR       R6,R2           ADDRESS OF PATHNAME/PATHNAME BLOCK   0875.000
         LA        R3,4W,X3        DESTINATION ADDRESS (WORD 4 OF ENTRY)0876.000
         TRR       R5,R4           LENGTH (IN BYTES) OF PATHNAME/PNB    0877.000
         BL        COPYSTRG        COPY PATHNAME/PNB TO RRS ENTRY       0878.000
         LI        R6,4            4 BYTES PER WORD                     0879.000
         BL        DIV.RND         GET # WORDS PATHNAME/PNB OCCUPY      0880.000
         ADI       R5,4            4 WORDS IN FIXED PART OF RRS ENTRY   0881.000
         LA        R3,RRS.BUF      RRS BUFFER ADDRESS                   0882.000
         STB       R5,RR.SIZE,X3   PLANT SIZE (IN WORDS) IN RRS ENTRY   0883.000
*                                                                       0884.000
*  ZERO ANY TRAILING BYTES RESULTING FROM REMAINDER ROUND-UP            0885.000
*                                                                       0886.000
         TRN       R4,R4           NEGATE REMAINDER (# BYTES)           0887.000
         BZ        RR1.020         GO FOR NO REMAINDER                  0888.000
         LA        R3,4W,X3        POSITION TO PATHNAME PART OF RRS     0889.000
         ADMW      R3,5W,X1        POSITION TO END OF PATHNAME & 1ST    0890.000
*                                  BYTE TO ZERO (R5 FROM STACK)         0891.000
RR1.010  ZMB       0B,X3           ZERO A BYTE                          0892.000
         BIB       R4,RR1.010      LOOP TIL DONE                        0893.000
RR1.020  EQU       $                                                    0894.000
         POP                                                            0895.000
         TRSW      R0                                                   0896.000
         TITLE     BUILD A CNP BUFFER FOR NO WAIT                       0897.000
*                                                                       0898.000
* THIS ROUTINE BUILDS A CNP BUFFER INTO CNP.BUF                         0899.000
* THE TIMEOUT IS ALWAYS SET TO NO WAIT AND THE OPTIONS                  0900.000
* COME FROM AN INPUT PARAMETER                                          0901.000
*                                                                       0902.000
* INPUT:                                                                0903.000
*        R7 = OPTION WORD                                               0904.000
*                                                                       0905.000
* OUTPUT:                                                               0906.000
*        CNP.BUF = THE CNP STRUCTURE                                    0907.000
*                                                                       0908.000
BUILDCNP EQU       $                                                    0909.000
         PUSH                                                           0910.000
         LA        R3,CNP.BUF      THE CNP BUFFER TO BUILD IN           0911.000
*                                                                       0912.000
         STH       R7,CP.OPTS,R3   OPTION HALF WORD                     0913.000
*                                                                       0914.000
         ZMW       CP.ABRET,R3     ABNORMAL RETURN ADDRESS              0915.000
         ZMW       CP.NADDR,R3     ASYNC NOTIFICATION ADDRESS           0916.000
         ZMW       CP.TCODE,R3     ASYNC TRANSACTION CODE               0917.000
         ZMW       CP.FCBA,R3      AUTO FCB ADDRESS                     0918.000
         ZMH       CP.STAT,R3      RETURN STATUS                        0919.000
*                                                                       0920.000
         LI        R7,1            TIMEOUT VALUE > 0 FOR NO WAIT        0921.000
         STW       R7,CP.TIMO,R3                                        0922.000
*                                                                       0923.000
         POP                                                            0924.000
         TRSW      R0                                                   0925.000
         TITLE     BUILD A RCB                                          0926.000
*                                                              ! 32B01  0927.000
* THIS ROUTINE BUILDS AN RCB BUFFER INTO RCB.BUF               ! 32B01  0928.000
*                                                              ! 32B01  0929.000
* INPUTS:                                                      ! 32B01  0930.000
*        R7 = THE REQUIRED ORIGINAL CREATION SIZE.             ! 32B01  0931.000
*                                                              ! 32B01  0932.000
* OUTPUTS:                                                     ! 32B01  0933.000
*        RCB.BUF = THE BUILT RCB                               ! 32B01  0934.000
*                                                              ! 32B01  0935.000
BUILDRCB EQU       $                                           ! 32B01  0936.000
         PUSH                                                  ! 32B01  0937.000
         LA        R2,RCB.BUF      LOAD RCB ADDRESS            ! 32B01  0938.000
         STW       R7,RCB.OSIZ,X2  STORE FILE SIZE             ! 32B01  0939.000
*                                                              ! 32B01  0940.000
         LI        R4,900      TEMP. FIX FOR 3.5               S861069A 0941.000
*        LI        R4,750      TEMP. FIX FOR 3.4U02  !TMP34U2  S861069A 0942.000
*        LI        R4,500          TEMP. FIX S861069-1!S861069 !TMP34U2 0943.000
*        LI        R4,400          MAX. INC. 400,NOT 100 32B01 !S861069 0944.000
         STW       R4,RCB.MXEI,X2  STORE IN RCB                ! 32B01  0945.000
*                                                              ! 32B01  0946.000
         LI        R4,200  TEMP. FIX FOR 3.5                   S861069A 0947.000
*        LI        R4,100  MIN. INC. NOW 100, 85-0771  ! 32B01 S861069A 0948.000
*        LI        R4,60           MIN. INCREMENT=60     09/05 85-0771  0949.000
         STW       R4,RCB.MNEI,X2  STORE IN RCB                ! 32B01  0950.000
*                                                              ! 32B01  0951.000
         LA        R4,RIDADDR      LOAD TARGET ADDRESS FOR RID ! 32B01  0952.000
         STW       R4,RCB.FAST,X2  STORE IN RCB                ! 32B01  0953.000
*                                                              ! 32B01  0954.000
         TRR       R1,R6           SAVE THE STACK POINTER.     ! 32B01  0955.000
         ZR        R1              NO PATHNAME SPECIFIED.      ! 32B01  0956.000
         ZR        R7              NO CNP.                     ! 32B01  0957.000
         SVC2.21                   CREATE THE TEMP FILE.       ! 32B01  0958.000
         BS        RCB.ERR         BRANCH IF PROBLEM.          ! 32B01  0959.000
*                                                              ! 32B01  0960.000
         TRR       R6,R1           RESTORE STACK POINTER.      ! 32B01  0961.000
         POP                                                   ! 32B01  0962.000
         TRSW      R0                                          ! 32B01  0963.000
*                                                              ! 32B01  0964.000
*  ERROR RETURN.                                               ! 32B01  0965.000
*                                                              ! 32B01  0966.000
RCB.ERR  EQU       $                                           ! 32B01  0967.000
         TRR       R6,R1           RESTORE STACK POINTER.      ! 32B01  0968.000
         STW       R7,7W,R1        PLACE STATUS IN STACK       ! 32B01  0969.000
         POP                                                   ! 32B01  0970.000
*        SBR       R0,0            SET ERROR INDICATOR. ! 32B01 S920607 0971.000
         SBR       R0,0            SET ERROR INDICATOR.         S920607A0972.000
*        SBR       R0,1            SET ERROR INDICATOR. S920607 S920607A0973.000
         SBR       R0,1            SET ERROR INDICATOR.         S920607B0974.000
         TRSW      R0              AND RETURN                  ! 32B01  0975.000
*                                                                       0976.000
         TITLE     ALLOCATE AND OPEN A TEMPORARY FILE                   0977.000
*                                                                       0978.000
* THIS ROUTINE ALLOCATES A TEMPORARY FILE                               0979.000
* THE FILE IS ALLOCATED UNBLOCKED.                                      0980.000
* ANY DISC IS USED.                                                     0981.000
*                                                                       0982.000
* INPUTS:                                                               0983.000
*        R7 = ADDRESS OF FCB TO ALLOCATE                                0984.000
*                                                                       0985.000
* OUTPUTS:                                                              0986.000
*        R7 = ERROR STATUS                                              0987.000
*        CC1 IS SET IF ERRORS                                           0988.000
*                                                                       0989.000
X.ALOC2  EQU       $                                                    0990.000
         ANMW      R0,ADR.MASK     CLEAR CC1 FOR GOOD EXIT              0991.000
         PUSH                      SAVE REGISTERS                       0992.000
*                                                                       0993.000
* GET THE LFC FROM THE FCB PASSED AS A PARAMETER                        0994.000
*                                                                       0995.000
         TRR       R7,R3           FCB ADDRESS                          0996.000
         LW        R7,0W,R3        LFC IS THE FIRST WORD                0997.000
         SLL       R7,8            MASK IOCS FUNCTION CODE BYTE         0998.000
         SRL       R7,8                                                 0999.000
*                                                                       1000.000
* CALL THE ROUTINE BUILDRR2 TO OBTAIN THE NECCESSARY RRS                1001.000
* ENTRY IN RRS.BUF                                                      1002.000
*                                                                       1003.000
         BL        BUILDRR2                                             1004.000
*                                                                       1005.000
* NOW JOIN COMMON CODE FOR ALL ALLOCATION ROUTINES TO ATTEMPT           1006.000
* THE SVC CALL AND EXIT                                                 1007.000
*                                                                       1008.000
         BU        ALOC.COM                                             1009.000
         TITLE     ALLOCATE AND OPEN A FILE BY RID                      1010.000
*                                                                       1011.000
* THIS ROUTINE ALLOCATES A PERMANENT FILE                               1012.000
*                                                                       1013.000
*                  *************                                        1014.000
*                  *           *                                        1015.000
*                  * EXCLUSIVE *                                        1016.000
*                  *           *                                        1017.000
*                  *************                                        1018.000
*                                                                       1019.000
* INPUTS:                                                               1020.000
*        R2 = RID ADDRESS                                               1021.000
*        R4 = OPTION WORD                                               1022.000
*        R6 = ACCESS REQUIRED                                           1023.000
*        R7 = ADDRESS OF FCB TO ALLOCATE                                1024.000
*                                                                       1025.000
* OUTPUTS:                                                              1026.000
*        R5 = ALLOCATION INDEX                                          1027.000
*        R7 = ERROR STATUS                                              1028.000
*        CC1 IS SET IF ERRORS                                           1029.000
*                                                                       1030.000
* THE ENTRY POINT ALOC.COM IS USED BY OTHER ALOC ROUTINES               1031.000
* SO THAT COMMON CODE CAN BE USED TO ACTUALLY DO THE ALLOCATE           1032.000
* SVC CALL, AND HANDLE SUBSEQUENT ERRORS                                1033.000
*                                                                       1034.000
X.ALOC6  EQU       $                                                    1035.000
         ANMW      R0,ADR.MASK     CLEAR CC1 FOR GOOD EXIT              1036.000
         PUSH                      SAVE REGISTERS                       1037.000
*                                                                       1038.000
* GET THE LFC FROM THE FCB PASSED AS A PARAMETER                        1039.000
*                                                                       1040.000
         TRR       R7,R3           FCB ADDRESS                          1041.000
         LW        R7,0W,R3        LFC IS THE FIRST WORD                1042.000
         SBM       2,2W,R3         SET DATA FORMAT INHIBIT BIT          1043.000
         SLL       R7,8            MASK IOCS FUNCTION CODE BYTE         1044.000
         SRL       R7,8                                                 1045.000
*                                                                       1046.000
* CALL THE ROUTINE BUILDRR6 TO OBTAIN THE NECCESSARY RRS                1047.000
* ENTRY IN RRS.BUF                                                      1048.000
*                                                                       1049.000
         BL        BUILDRR6                                             1050.000
*                                                                       1051.000
* CALL THE ROUTINE BUILDCNP TO OBTAIN THE NECCESSARY CNP                1052.000
* ENTRY IN CNP.BUF                                                      1053.000
* THIS IS NEEDED TO FORCE A NOWAIT ON THE ALLOCATE ATTEMPT.             1054.000
*                                                                       1055.000
*********                                                               1056.000
         CI        R5,8                                                 1057.000
         BNE       ALOC.COM                                             1058.000
         TRR       R5,R7                                                1059.000
         BU        ALOC6.1                                              1060.000
*********                                                               1061.000
ALOC.COM ZR        R7              NO OPTIONS                           1062.000
ALOC6.1  BL        BUILDCNP                                             1063.000
*                                                                       1064.000
* SET UP FCB IN CNP FOR AUTOMATIC OPEN                                  1065.000
*                                                                       1066.000
         LA        R2,CNP.BUF      CNP ADDRESS                          1067.000
         LW        R7,7W,R1        RETRIEVE FCB FROM CALL               1068.000
         STW       R7,CP.FCBA,R2   FCB INTO CNP                         1069.000
*                                                                       1070.000
* NOW ATTEMPT THE ALLOCATE                                              1071.000
*                                                                       1072.000
ALOC.CO2 EQU       $                                                    1073.000
         PUSHSTP                   SAVE R1 (IE., THE STACK POINTER)     1074.000
ALOC.CO4 EQU       $                                                    1075.000
         LA        R1,RRS.BUF      RRS ADDRESS                          1076.000
         LA        R7,CNP.BUF      CNP ADDRESS                          1077.000
         SVC2.52                   H.REXS,21                            1078.000
         BS        ALOC.ERR        GO FOR ERROR/DENIAL                  1079.000
ALOC.CON EQU       $                                                    1080.000
         POPSTP                    RESTORE R1                           1081.000
         STW       R5,5W,R1        RETURN ALLOCATION INDEX TO CALLER    1082.000
*                                                             !Q201-34  1083.000
* CHECK TO SEE IF THE POSSIBILITY OF A DEAD LOCK OCCURRS WHEN !Q201-34  1084.000
* FILE IS ALLOCATED WITH IMPLICIT SHARED AND THERE IS ATLEAST !Q201-34  1085.000
* A WRITER OR AN APPENDER TO THAT FILE.  IF SO, THEN RETURN   !Q201-34  1086.000
* ERROR STATUS WITH AN RM54.                                  !Q201-34  1087.000
*                                                             !Q201-34  1088.000
         LA        R3,CNP.BUF      GET ADDRESS OF CNP         !Q201-34  1089.000
         LH        R7,CP.STAT,X3   CHECK IF ERROR EXISTS??    !Q201-34  1090.000
         BNZ       ALOC6.2         YES, GO PROCESS ERROR      !Q201-34  1091.000
         LA        R3,RRS.BUF      GET ADDRESS OF RRS         !Q201-34  1092.000
         TBM       5,3W,X3         CHECK IF UNBLOCKED??       !Q201-34  1093.000
         BNS       ALOC6.2         NO, SO CONTINUE AS USUAL   !Q201-34  1094.000
         LW        R6,2W,X3        GET ACCESS FROM RRS        !Q201-34  1095.000
         ANMW      R6,=X'78000000'   CHECK IF NOT READ???     !Q201-34  1096.000
         CAMW      R6,=X'0'        IF EQUAL TO ZERO THEN READ !Q201-34  1097.000
         BNE       ALOC6.2         NOT READ ACCS, SO CONTINUE !Q201-34  1098.000
         TRR       R5,R3           GET ADDRESS FOR THIS ART   !Q201-34  1099.000
         TBM       1,2W,X3         CHECK FOR IMPLICIT SHARED  !Q201-34  1100.000
         BNS       ALOC6.2              NO, SO CONTINUE       !Q201-34  1101.000
         LW        R6,1W,X3        GET AR.CACM OF THE ART     !Q201-34  1102.000
         ANMW      R6,=X'48000000' CHECK IF WRITE OR/AND      !Q201-34  1103.000
         CAMW      R6,=X'0'          APPEND ACCESS IS ACTIVE? !Q201-34  1104.000
         BEQ       ALOC6.2         NO, SO CONTINUE            !Q201-34  1105.000
         BL        X.DALC          GO DEALLOCATE THE LFC      !Q201-34  1106.000
         BS        ALOC6.4         RETURN WITH ERROR COND.    !Q201-34  1107.000
         LA        R3,CNP.BUF      GET ADDRESS OF CNP         !Q201-34  1108.000
         LI        R7,54           GET RM54 IN R7 FOR FUPERR  !Q201-34  1109.000
         STH       R7,CP.STAT,X3   STORE ERROR INTO CNP       !Q201-34  1110.000
ALOC6.2  EQU       $                                          !Q201-34  1111.000
*                                                                       1112.000
* RETURN ANY ERRORS IN R7 AND SET CC1 IF ERRORS                         1113.000
*                                                                       1114.000
         CHECKERR  MOD.REX                                              1115.000
ALOC6.4  EQU       $                                          !Q201-34  1116.000
         ZBM       NONEXCL,FLAGBITS   REINITIALIZE                      1117.000
         ZBM       IMPLSHAR,FLAGBITS  REINITIALIZE                      1118.000
         ZBM       EXPLSHAR,FLAGBITS  REINITIALIZE                      1119.000
         POP                       RESTORE REGISTERS                    1120.000
         TRSW      R0                                                   1121.000
         SPACE     2                                                    1122.000
ALOC.ERR EQU       $               ALLOCATION HAS FAILED                1123.000
         TBM       NONEXCL,FLAGBITS  IS IT OK TO TRY A NON-EXCLUSIVE    1124.000
*                                  ALLOCATION ???                       1125.000
         BNS       ALOC.CON        GO FOR DON'T TRY SHARED ALLOCATION(S)1126.000
         SBM       EXPLSHAR,FLAGBITS  EXPLICIT SHARED ALLOCATION ALREADY1127.000
*                                  TRIED ???                            1128.000
         BS        ALOC.CO6        GO FOR EXPLICIT SHARED ALREADY TRIED 1129.000
*  CHECK FOR RESOURCE EXLUSIVELY LOCKED (BY ANOTHER TASK)               1130.000
         LA        R2,CNP.BUF      CNP ADDRESS                          1131.000
         LH        R0,CP.STAT,X2   GET STATUS FROM CNP                  1132.000
         CI        R0,N'50'                                             1133.000
         BEQ       ALOC.CON        GO FOR RESOURCE EXCLUSIVELY LOCKED   1134.000
*  TRY EXPLICIT SHARED ALLOCATION OF RESOURCE                           1135.000
         ZBM       RR.EXCL,RR.ACCS,X1  CLEAR EXCLUSIVE USAGE FLAG       1136.000
         SBM       RR.SHAR,RR.ACCS,X1  INDICATE EXPLICIT SHARED USAGE   1137.000
         BU        ALOC.CO4        GO RETRY THE ALLOCATION              1138.000
         SPACE     2                                                    1139.000
ALOC.CO6 EQU       $                                                    1140.000
         SBM       IMPLSHAR,FLAGBITS  IMPLICIT SHARED ALLOCATION FAILED 1141.000
         BS        ALOC.CON        GO FOR IMPLICIT SHHARED ALLOCATION   1142.000
*  FAILED, NO MORE USAGE MODES TO TRY !!!                               1143.000
         SPACE                                                          1144.000
*  EXPLICIT SHARED ALLOCATION FAILED, TRY IMPLICIT SHARED               1145.000
         ZBM       RR.SHAR,RR.ACCS,X1  CLEAR EXPLICIT SHARED INDICATOR  1146.000
         BU        ALOC.CO4        GO RETRY THE ALLOCATION              1147.000
         TITLE     ALLOCATE RESOURCE -- GENERAL                         1148.000
*+                                                                      1149.000
*                                                                       1150.000
*  X.ALOC  --  ALLOCATE ANY RESOURCE                                    1151.000
*                                                                       1152.000
*  INPUT:          RRS.BUF LOADED WITH APPROPRIATE RRS ENTRY TYPE       1153.000
*                  R5 = ADDRESS OF FCB FOR AUTOMATIC OPEN               1154.000
*                                                                       1155.000
*  OUTPUT:         R5 = ALLOCATION INDEX                                1156.000
*                  R7 = ERROR STATUS                                    1157.000
*                  CC1 IS SET IF ERRORS                                 1158.000
*                                                                       1159.000
*-                                                                      1160.000
         SPACE                                                          1161.000
X.ALOC   EQU       $                                                    1162.000
         SPACE                                                          1163.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           1164.000
         PUSH                      SAVE REGS                            1165.000
         LH        R7,CNP.ACCD     DEFAULT ACCESS                       1166.000
*                                                                       1167.000
         ZBR       R5,0                                                 1168.000
         BCF       1,X.ALOC.1                                           1169.000
         SBR       R7,28                                                1170.000
*                                                                       1171.000
X.ALOC.1 BL        BUILDCNP        CREATE A CNP IN CNP.BUF              1172.000
         LA        R2,CNP.BUF      BUFFER CONTAINING A CNP              1173.000
         STW       R5,CP.FCBA,X2   FCB ADDRESS FOR AUTO OPEN            1174.000
         BU        ALOC.CO2        JOIN COMMON CODE                     1175.000
         TITLE     ALLOCATE RESOURCE (WAIT IF NECCESSARY) -- GENERAL    1176.000
*+                                                                      1177.000
*                                                                       1178.000
*  X.ALOCW --  ALLOCATE ANY RESOURCE WAIT INDEFINITELY                  1179.000
*                                                                       1180.000
*  INPUT:          RRS.BUF LOADED WITH APPROPRIATE RRS ENTRY TYPE       1181.000
*                  R5 = ADDRESS OF FCB FOR AUTOMATIC OPEN               1182.000
*                                                                       1183.000
*  OUTPUT:         R5 = ALLOCATION INDEX                                1184.000
*                  R7 = ERROR STATUS                                    1185.000
*                  CC1 IS SET IF ERRORS                                 1186.000
*                                                                       1187.000
*-                                                                      1188.000
         SPACE                                                          1189.000
X.ALOCW  EQU       $                                                    1190.000
         SPACE                                                          1191.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           1192.000
         PUSH                      SAVE REGS                            1193.000
         LH        R7,CNP.ACCD     DEFAULT ACCESS                       1194.000
         BL        BUILDCNP        CREATE A CNP IN CNP.BUF              1195.000
         LA        R2,CNP.BUF      BUFFER CONTAINING A CNP              1196.000
         STW       R5,CP.FCBA,X2   FCB ADDRESS FOR AUTO OPEN            1197.000
         ZMW       CP.TIMO,X2      WAIT INDEFINITELY LONG               1198.000
         BU        ALOC.CO2        JOIN COMMON CODE                     1199.000
         TITLE     DE-ALLOCATE A RESOURCE BY ALLOCATION INDEX           1200.000
*                                                                       1201.000
* THIS ROUTINE DE-ALLOCATES A RESOURCE GIVEN THE ALLOCATION             1202.000
* INDEX OF THE RESOURCE FROM ALLOCATION TIME.                           1203.000
* THIS ROUTINE IS USED BY THE RESTORE SERVICE. IT BUILDS A CNP WITH     1204.000
* BIT 8 SET IN THE OPTIONS WORD.  THIS INHIBITS THE RESETTING OF THE    1205.000
* CHANGE DATE AND TIME AT RESOURCE CLOSE TIME                           1206.000
*                                                                       1207.000
* INPUTS:                                                               1208.000
*        R5 = ALLOCATION INDEX OR ADDRESS OF FCB (TO GET LFC).          1209.000
*                                                                       1210.000
* OUTPUTS:                                                              1211.000
*        R7 = ERROR STATUS                                              1212.000
*        CC1 IS SET IF ERRORS                                           1213.000
*                                                                       1214.000
X.RDALC  EQU       $                                                    1215.000
         ANMW      R0,ADR.MASK     CLEAR FOR GOOD EXIT                  1216.000
         PUSH                      SAVE REGISTERS                       1217.000
*                                                                       1218.000
* BUILD A CNP SO THAT NOWAIT IS ENFORCED.                               1219.000
*                                                                       1220.000
         LI        R7,X'0080'      INHIBIT CHANGE DATE/TIME UPDATE      1221.000
         BL        BUILDCNP                                             1222.000
*                                                                       1223.000
         BU        X.DALC1         JOIN COMMEN CODE                     1224.000
         TITLE     DE-ALLOCATE A RESOURCE BY ALLOCATION INDEX           1225.000
*                                                                       1226.000
* THIS ROUTINE DE-ALLOCATES A RESOURCE GIVEN THE ALLOCATION             1227.000
* INDEX OF THE RESOURCE FROM ALLOCATION TIME.                           1228.000
*                                                                       1229.000
* INPUTS:                                                               1230.000
*        R5 = ALLOCATION INDEX OR ADDRESS OF FCB (TO GET LFC).          1231.000
*                                                                       1232.000
* OUTPUTS:                                                              1233.000
*        R7 = ERROR STATUS                                              1234.000
*        CC1 IS SET IF ERRORS                                           1235.000
*                                                                       1236.000
X.DALC   EQU       $                                                    1237.000
         ANMW      R0,ADR.MASK     CLEAR FOR GOOD EXIT                  1238.000
         PUSH                      SAVE REGISTERS                       1239.000
*                                                                       1240.000
* BUILD A CNP SO THAT NOWAIT IS ENFORCED.                               1241.000
*                                                                       1242.000
         ZR        R7              NO OPTIONS                           1243.000
         BL        BUILDCNP                                             1244.000
*                                                                       1245.000
X.DALC1  PUSHSTP                   SAVE R1                              1246.000
         TRR       R5,R1           ALLOC INDEX/FCB ADDRESS TO R1        1247.000
         LA        R7,CNP.BUF      CNP ADDRESS                          1248.000
         SVC2.53                   H.REXS,22                            1249.000
         POPSTP                    RESTORE R1                           1250.000
*                                                                       1251.000
*                                                                       1252.000
* RETURN ANY ERRORS IN R7 AND SET CC1 IF ERRORS                         1253.000
*                                                                       1254.000
         CHECKERR  MOD.REX                                              1255.000
         POP                       RESTORE REGISTERS                    1256.000
         TRSW      R0                                                   1257.000
         TITLE     RESOURCE INQUIRY                                     1258.000
*                                                                       1259.000
* THIS ROUTINE CALLS THE RESOURCE INQUIRY SERVICE                       1260.000
*                                                                       1261.000
* INPUTS:                                                               1262.000
*        R7 = LFC TO USE                                                1263.000
* OUTPUTS:                                                              1264.000
*        R7 = ERROR STATUS                                              1265.000
*        CC1 IS SET IF ERRORS                                           1266.000
*        INQ.BUF CONTAINS THE RESOURCE INFORMATION AS RETURNED          1267.000
*        FROM THE SERVICE (8 WORDS)                                     1268.000
*                                                                       1269.000
X.RINQ   EQU       $                                                    1270.000
         ANMW      R0,ADR.MASK     CLEAR CC1 FOR GOOD EXIT              1271.000
         PUSH                      SAVE REGISTERS                       1272.000
*                                                                       1273.000
* THE RESOURCE SERVICE REQUIRES THAT R4 CONTANS THE LFC IN              1274.000
* 'G' FORMAT WITH R5 = 0                                                1275.000
* ALSO R1 MUST CONTAIN THE ADDRESS OF AN 8 WORD BUFFER TO               1276.000
* HOLD THE RESOURCE INQUIRY INFORMATION ON RETURN,                      1277.000
* AND A CNP IS SPECIFIED SO THAT NOWAIT IS ENFORCED.                    1278.000
*                                                                       1279.000
         TRR       R7,R4           LFC TO R4                            1280.000
         ZR        R5                                                   1281.000
*                                                                       1282.000
* GET A CNP WITH NO OPTIONS FROM THE ROUTINE BUILDCNP                   1283.000
*                                                                       1284.000
         ZR        R7                                                   1285.000
         BL        BUILDCNP                                             1286.000
*                                                                       1287.000
* NOW CALL THE SERVICE                                                  1288.000
*                                                                       1289.000
         PUSHSTP                   SAVE R1                              1290.000
         LA        R1,INQ.BUF      8 WORD BUFFER FOR REPLY              1291.000
         LA        R7,CNP.BUF      ADDRESS OF CNP                       1292.000
         SVC2.48                   H.REMM,27                            1293.000
         POPSTP                    RESTORE R1                           1294.000
*                                                                       1295.000
* THE SERVICE RETURNS R5 WITH 0 IF THE LFC WAS UNASSIGNED,              1296.000
* ELSE THE ALLOCATION INDEX.                                            1297.000
* RETURN THIS TO THE CALLER ALONG WITH ANY ERRORS REPORTED              1298.000
* VIA THE CNP                                                           1299.000
*                                                                       1300.000
         STW       R5,5W,R1        RETURN R5 TO CALLER                  1301.000
         CHECKERR  MOD.REM                                              1302.000
         POP                       RESTORE REGISTERS                    1303.000
         TRSW      R0                                                   1304.000
         TITLE     CHECK IF AN LFC IS ASSIGNED                          1305.000
*                                                                       1306.000
* THIS ROUTINE CHECKS TO SEE IF A GIVEN LFC HAS BEEN ASSIGNED           1307.000
*                                                                       1308.000
* INPUTS:                                                               1309.000
*        R7 = 'G' FORMAT LFC TO CHECK                                   1310.000
*                                                                       1311.000
* OUTPUTS:                                                              1312.000
*        CC1 = 1 IF ASSIGNED                                            1313.000
*        CC1 = 0 IF NOT ASSIGNED                                        1314.000
*                                                                       1315.000
CHECKLFC EQU       $                                                    1316.000
         ANMW      R0,ADR.MASK     CLEAR CC1 FOR UNASSIGNED EXIT        1317.000
         PUSH                      SAVE REGISTERS                       1318.000
*                                                                       1319.000
* USE THE RESOURCE INQUIRY ROUTINE X.RINQ TO DETERMINE                  1320.000
* THE STATUS OF THE LFC SPECIFIED.                                      1321.000
* ON RETURN FROM X.RINQ R5 WILL CONTAIN 0 IF THE LFC IS                 1322.000
* NOT ASSIGNED, ELSE R5 WILL CONTAIN THE ALLOCATION INDEX.              1323.000
*                                                                       1324.000
* JUST RETURN CC1 TO THE USER (NOT R5)                                  1325.000
*                                                                       1326.000
         BL        X.RINQ                                               1327.000
         TRR       R5,R5           ASSIGNED?                            1328.000
         BZ        CHECK0          BRANCH IF UNASSIGNED                 1329.000
         SBM       CC1,0W,R1       SET CC1 IF ASSIGNED                  1330.000
CHECK0   POP                       RESTORE REGISTERS                    1331.000
         TRSW      R0                                                   1332.000
         TITLE     CHECK IF TASK IS BATCH ORIENTED                      1333.000
         SPACE                                                          1334.000
*                                                                       1335.000
* THIS ROUTINE CHECKS WHETHER THE VOLUME MANAGER IS BATCH ACTIVATED     1336.000
*                                                                       1337.000
* INPUTS:                                                               1338.000
*        NONE                                                           1339.000
*                                                                       1340.000
* OUTPUTS:                                                              1341.000
*        CC1 = 1 IF BATCH ACTIVATED                                     1342.000
*        CC1 = 0 IF NOT BATCH ACTIVATED (INTERACTIVE)                   1343.000
*                                                                       1344.000
CHCKBAOR EQU       $                                                    1345.000
         ANMW      R0,ADR.MASK     CLEAR CC1 FOR INTERACTIVE EXIT       1346.000
         PUSH                      SAVE REGISTERS                       1347.000
*                                                                       1348.000
         LW        R2,C.TSAD       TSA ADDRESS FROM COMM. REGION        1349.000
         LW        R2,T.PRNO,X2    DQU ADDRESS                          1350.000
         TBM       DQE.BAOR,DQE.USHF,X2 IS TASK BATCH ORIENTED?         1351.000
         BNS       CHCKB.2         IF SO, BRANCH TO SET CONDITION CODE  1352.000
         SBM       CC1,0W,R1       SET CC1 IF BATCH ACTIVATED           1353.000
CHCKB.2  POP                       RESTORE THE REGISTERS                1354.000
         TRSW      R0              RETURN TO CALLER                     1355.000
         TITLE     OPEN RESOURCE                                        1356.000
*                                                                       1357.000
* THIS ROUTINE OPENS AN ALLOCATED RESOURCE.                             1358.000
*                                                                       1359.000
* INPUT:                                                                1360.000
*        R5 = ADDR OF FCB                                               1361.000
*        R7 = CNP OPTIONS                                               1362.000
*                                                                       1363.000
* OUTPUT:                                                               1364.000
*        R7 = ERROR STATUS                                              1365.000
*        CC1 IS SET IF ERRORS                                           1366.000
*                                                                       1367.000
         SPACE                                                          1368.000
X.OPEN   EQU       $                                                    1369.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           1370.000
         PUSH                      SAVE REGS                            1371.000
         BL        BUILDCNP        BUILD CNP IN CNP.BUF                 1372.000
         LA        R7,CNP.BUF                                           1373.000
         PUSHSTP                   SAVE STACK POINTER                   1374.000
         TRR       R5,R1           FCB ADDRESS                          1375.000
         SVC2.42                   H.REMM,21  --  OPEN RESOURCE         1376.000
         POPSTP                    RESTORE STACK POINTER                1377.000
         CHECKERR  MOD.REM         POST ERROR STATUS IN R7              1378.000
         POP                       RESTORE REGS                         1379.000
         TRSW      R0              RETURN                               1380.000
         TITLE     CLOSE RESOURCE                                       1381.000
*                                                                       1382.000
* THIS ROUTINE CLOSES A RESOURCE                                        1383.000
*                                                                       1384.000
* INPUT:                                                                1385.000
*        R5 = ADDR OF FCB                                               1386.000
*        R7 = CNP OPTIONS                                               1387.000
*                                                                       1388.000
* OUTPUT:                                                               1389.000
*        R7 = ERROR STATUS                                              1390.000
*        CC1 IS SET IF ERRORS                                           1391.000
*                                                                       1392.000
         SPACE                                                          1393.000
X.CLOSE  EQU       $                                                    1394.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           1395.000
         PUSH                      SAVE REGS                            1396.000
         BL        BUILDCNP        BUILD CNP IN CNP.BUF                 1397.000
         LA        R7,CNP.BUF                                           1398.000
         PUSHSTP                   SAVE STACK POINTER                   1399.000
         TRR       R5,R1           FCB ADDRESS                          1400.000
         SVC2.43                   H.REMM,22  --  CLOSE RESOURCE        1401.000
         POPSTP                    RESTORE STACK POINTER                1402.000
         CHECKERR  MOD.REM         POST ERROR STATUS IN R7              1403.000
         POP                       RESTORE REGS                         1404.000
         TRSW      R0              RETURN                               1405.000
         SPACE     2                                                    1406.000
END      END                                                            1407.000
