SAMPLIB member CBRSPUXJ

This SAMPLIB member is a sample cartridge eject installation exit.

UXEJC    TITLE 'CBRUXEJC - SAMPLE CARTRIDGE EJECT INSTALLATION EXIT'    
CBRUXEJC START 0                    SAMPLE CARTRIDGE EJECT INST EXIT    
         SPACE 2                                                        
**** START OF SPECIFICATIONS ****************************************** 
*                                                                     * 
*    MODULE NAME:       CBRUXEJC                                      * 
*                                                                     * 
*    DESCRIPTIVE NAME:  SAMPLE CARTRIDGE EJECT INSTALLATION EXIT      * 
*                                                                     * 
*    FUNCTION:                                                        * 
*      MODULE CBRUXEJC IS INVOKED EACH TIME A REQUEST IS MADE TO      * 
*      EJECT A CARTRIDGE FROM A TAPE LIBRARY.  CBRUXEJC MAY REFUSE    * 
*      TO ALLOW THE CARTRIDGE TO BE EJECTED, OR UPDATE CERTAIN        * 
*      FIELDS IN THE TAPE VOLUME RECORD, OR APPROVE THE CARTRIDGE     * 
*      EJECT WITHOUT CHANGE.                                          * 
*                                                                     * 
*      CBRUXEJC DEMONSTRATES THE USE OF THE FOLLOWING FUNCTIONS:      * 
*      1. SETTING THE "REJECT" RETURN CODE TO PREVENT A VOLUME FROM   * 
*         BEING EJECTED FROM THE LIBRARY.                             * 
*      2. USING THE SHELF LOCATION AND OWNER INFORMATION FIELDS IN    * 
*         THE TAPE VOLUME RECORD.                                     * 
*      3. PASSING INFORMATION TO CBRUXEJC USING THE LIBRARY           * 
*         DESCRIPTION FIELD, AS SET BY THE ISMF LIBRARY MANAGEMENT    * 
*         APPLICATION.                                                * 
*      4. PASSING INFORMATION TO CBRUXEJC USING THE CBRXLCS           * 
*         FUNC(EJECT) PROGRAMMING INTERFACE.                          * 
*      5. CHANGING THE VOLUME USE ATTRIBUTE AND THE TAPE VOLUME       * 
*         RECORD DISPOSITION.                                         * 
*                                                                     * 
*    NOTES:                                                           * 
*                                                                     * 
*      DEPENDENCIES:          z/OS                                    * 
*                                                                     * 
*      CHARACTER CODE:        EBCDIC                                  * 
*                                                                     * 
*      RESTRICTIONS:          NONE                                    * 
*                                                                     * 
*      REGISTER CONVENTIONS:                                          * 
*        R0  - WORK REGISTER                                          * 
*        R1  - STANDARD LINKAGE REGISTER                              * 
*            - PARAMETER LIST ADDRESS                                 * 
*            - WORK REGISTER                                          * 
*        R2  - NOT USED                                               * 
*        R3  - NOT USED                                               * 
*        R4  - NOT USED                                               * 
*        R5  - NOT USED                                               * 
*        R6  - NOT USED                                               * 
*        R7  - NOT USED                                               * 
*        R8  - BASE REGISTER FOR WORKING STORAGE                      * 
*        R9  - RETURN CODE WORK REGISTER                              * 
*        R10 - LIBRARY DESCRIPTION BASE REGISTER                      * 
*        R11 - UXJPL BASE REGISTER                                    * 
*        R12 - CBRUXEJC BASE REGISTER                                 * 
*        R13 - STANDARD LINKAGE REGISTER                              * 
*            - SAVE AREA ADDRESS                                      * 
*        R14 - STANDARD LINKAGE REGISTER                              * 
*            - RETURN POINT ADDRESS                                   * 
*        R15 - STANDARD LINKAGE REGISTER                              * 
*            - ENTRY POINT ADDRESS                                    * 
*            - RETURN CODE                                            * 
*                                                                     * 
*    MODULE TYPE:             CONTROL SECTION                         * 
*                                                                     * 
*      PROCESSOR:             ASSEMBLER H                             * 
*                                                                     * 
*      ATTRIBUTES:                                                    * 
*                                                                     * 
*        LOCATION:            JOB PACK AREA                           * 
*        STATE:               PROBLEM                                 * 
*        AMODE:               31  - MAY BE 24 IF NECESSARY            * 
*        RMODE:               ANY - MAY BE 24 IF NECESSARY            * 
*        KEY:                 5 (DATA MANAGEMENT)                     * 
*        MODE:                TASK                                    * 
*        SERIALIZATION:       UNLOCKED                                * 
*        TYPE:                REUSABLE                                * 
*                             REENTRANT                               * 
*                             REFRESHABLE                             * 
*        AUTHORIZATION:       APF AUTHORIZED                          * 
*                                                                     * 
*      LINKAGE:               STANDARD LINKAGE CONVENTIONS            * 
*                                                                     * 
*      CALLING SEQUENCE:                                              * 
*        CBRUXEJC IS INVOKED IN THE OAM ADDRESS SPACE USING THE MVS   * 
*        LINK MACRO.                                                  * 
*                                                                     * 
*      INPUT:                                                         * 
*        AT ENTRY TO CBRUXEJC, REGISTER 1 CONTAINS THE ADDRESS OF     * 
*        THE CARTRIDGE EJECT INSTALLATION EXIT PARAMETER LIST.        * 
*                                                                     * 
*      OUTPUT:                                                        * 
*        A RETURN CODE IS PLACED IN REGISTER 15:                      * 
*          CODE  MEANING                                              * 
*            0   EJECT/EXPORT THE VOLUME FROM THE LIBRARY.  THE       * 
*                TAPE VOLUME RECORD IS UNCHANGED.                     * 
*            4   EJECT/EXPORT THE VOLUME FROM THE LIBRARY.  ONE OR    * 
*                MORE FIELDS IN THE TAPE VOLUME RECORD HAVE BEEN      * 
*                CHANGED.                                             * 
*            8   DO NOT ALLOW THE CARTRIDGE TO BE EJECTED FROM THE    * 
*                LIBRARY.                                             * 
*           12   IGNORE EXPORT COMPLETION.                            * 
*           16   DO NOT INVOKE THE CARTRIDGE EJECT INSTALLATION EXIT  * 
*                AGAIN.  ALLOW ALL VOLUMES TO BE EJECTED/EXPORTED     * 
*                WITHOUT CHANGES TO THEIR TAPE VOLUME RECORDS.        * 
*                                                                     * 
                       
*      EXIT NORMAL:                                                   * 
*        RETURN TO THE CALLER WITH ONE OF THE RETURN CODES DESCRIBED  * 
*        ABOVE.                                                       * 
*                                                                     * 
*      EXIT ERROR:  NONE                                              * 
*                                                                     * 
*    EXTERNAL REFERENCES:                                             * 
*                                                                     * 
*      ROUTINES:  NONE                                                * 
*                                                                     * 
*      CONTROL BLOCKS:                                                * 
*        CBRUXJPL - CARTRIDGE EJECT INSTALLATION EXIT                 * 
*                   PARAMETER LIST                        - R/W       * 
*                                                                     * 
*    EXECUTABLE MACROS:                                               * 
*      RETURN                                                         * 
*      SAVE                                                           * 
*                                                                     * 
*    MESSAGES:  NONE                                                  * 
*                                                                     * 
*    ABEND CODES:  NONE                                               * 
*                                                                     * 
*  $L1=MTLSOFT  1F0 082500 TUCLJS:  REMOVED TIME MACRO CODE           * 
*                                   (OW43042 FIN/KFI0168)             * 
**** END OF SPECIFICATIONS ******************************************** 
         TITLE 'CBRUXJPL - CARTRIDGE EJECT INST EXIT PARAMETER LIST'    
         CBRUXJPL  ,                CART EJECT INST EXIT PARM LIST      
         TITLE 'STANDARD REGISTER DEFINITIONS'   
*---------------------------------------------------------------------* 
*                                                                     * 
*        STANDARD REGISTER DEFINITIONS                                * 
*                                                                     * 
*---------------------------------------------------------------------* 
R0       EQU   0                    GENERAL REGISTER 0                  
R1       EQU   1                    GENERAL REGISTER 1                  
R2       EQU   2                    GENERAL REGISTER 2                  
R3       EQU   3                    GENERAL REGISTER 3                  
R4       EQU   4                    GENERAL REGISTER 4                  
R5       EQU   5                    GENERAL REGISTER 5                  
R6       EQU   6                    GENERAL REGISTER 6                  
R7       EQU   7                    GENERAL REGISTER 7                  
R8       EQU   8                    GENERAL REGISTER 8                  
R9       EQU   9                    GENERAL REGISTER 9                  
R10      EQU   10                   GENERAL REGISTER 10                 
R11      EQU   11                   GENERAL REGISTER 11                 
R12      EQU   12                   GENERAL REGISTER 12                 
R13      EQU   13                   GENERAL REGISTER 13                 
R14      EQU   14                   GENERAL REGISTER 14                 
R15      EQU   15                   GENERAL REGISTER 15                 
         TITLE 'CBRUXEJC WORKING STORAGE'                               
*---------------------------------------------------------------------* 
*                                                                     * 
*      CBRUXEJC WORKING STORAGE                                       * 
*                                                                     * 
*---------------------------------------------------------------------* 
EJCWORK  DSECT ,                                                        
SAVE     DS    18F                                                      
WORKEND  DS    0D                                                       
WORKLEN  EQU   *-EJCWORK                                                
         SPACE 2                                                        
         TITLE 'LIBRARY DESCRIPTION FIELD FORMAT'                       
*---------------------------------------------------------------------* 
*                                                                     * 
*        LIBRARY DESCRIPTION FIELD FORMAT                             * 
*                                                                     * 
*        NOTE:  THIS IS INTENDED AS AN EXAMPLE OF THE KIND OF         * 
*               INFORMATION THE INSTALLATION CAN PASS TO THE EXIT     * 
*               VIA THE LIBRARY DESCRIPTION FIELD, WHICH IS SET       * 
*               USING THE ISMF LIBRARY MANAGEMENT APPLICATION.        * 
*                                                                     * 
*---------------------------------------------------------------------* 
LIBDESC  DSECT ,                    LIBRARY DESCRIPTION FIELD           
LIBDDSGN DS    CL8                  DEFAULT STORAGE GROUP NAME          
         DS    CL1                  SEPARATOR                           
LIBDPRIV DS    CL1                  ALLOW PREVIOUSLY UNKNOWN PRIVATE    
*                                     VOLUME TO BE ENTERED              
*                                     'Y' - ALLOW BOTH PRIVATE AND      
*                                           SCRATCH VOLUMES TO BE       
*                                           ENTERED                     
*                                     'N' - ALLOW ONLY SCRATCH          
*                                           VOLUMES TO BE ENTERED       
         DS    CL1                  SEPARATOR                           
LIBDRDCM DS    CL1                  SET READ-COMPATIBLE ATTRIBUTE       
*                                     FOR PREVIOUSLY UNKNOWN MEDIA1     
*                                     PRIVATE VOLUME                    
*                                     'Y' - SET ATTRIBUTE               
*                                     'N' - DO NOT SET ATTRIBUTE        
         DS    CL1                  SEPARATOR                           
LIBDAUTH DS    CL1                  AUTHORIZATION REQUIRED FOR          
*                                     CARTRIDGE EJECT                   
*                                     'Y' - AUTHORIZATION REQUIRED      
*                                     'N' - AUTH NOT REQUIRED           
         DS    CL106                AVAILABLE                           
         TITLE 'CBRUXEJC - SAMPLE CARTRIDGE EJECT INSTALLATION EXIT'    
*---------------------------------------------------------------------* 
*                                                                     * 
*        CBRUXEJC ENTRY POINT                                         * 
*                                                                     * 
*---------------------------------------------------------------------* 
CBRUXEJC CSECT ,                    SAMPLE CARTRIDGE EJECT INST EXIT    
CBRUXEJC AMODE 31                                                       
CBRUXEJC RMODE ANY                                                      
         SAVE  (14,12),,            SAVE CALLER'S REGISTERS AND        +
               'CBRUXEJC&SYSDATE      MARK ENTRY POINT                  
         LR    R12,R15              COPY ENTRY POINT ADDRESS            
         USING CBRUXEJC,R12         CBRUXEJC BASE REGISTER              
         LR    R11,R1               COPY PARAMETER ADDRESS              
         USING UXJPL,R11            CART EJECT INST EXIT PARM LIST      
         GETMAIN  RU,               GETMAIN WORKING STORAGE FROM       +
               LV=WORKLEN,            SUBPOOL 0 TO GET PSW KEY         +
               SP=0                   STORAGE                           
         LR    R8,R1                SAVE WORKING STORAGE ADDRESS        
         USING EJCWORK,R8           CBRUXEJC WORKING STORAGE            
         LR    R14,R1               START ADDRESS OF TARGET AREA        
         LA    R15,WORKLEN          TARGET LENGTH                       
         LR    R0,R1                START ADDRESS OF SOURCE AREA        
         SR    R1,R1                ZERO SOURCE LENGTH & PAD BYTE       
         MVCL  R14,R0               CLEAR WORKING STORAGE               
         ST    R13,SAVE+4           BACKWARD CHAIN SAVE AREAS           
         LA    R0,SAVE              CBRUXEJC SAVE AREA ADDRESS          
         ST    R0,8(,R13)           FORWARD CHAIN SAVE AREAS            
         LR    R13,R0               SET CBRUXEJC SAVE AREA ADDRESS      
         LA    R10,UXJLDESC         ADDRESS OF LIBRARY DESCRIPTION      
         USING LIBDESC,R10          LIBRARY DESCRIPTION FIELD           
         SPACE 2                                                        
*---------------------------------------------------------------------* 
*                                                                     * 
*        PRESET RETURN CODE ZERO                                      * 
*                                                                     * 
*---------------------------------------------------------------------* 
         LA    R9,UXJNOCHG          EJECT CARTRIDGE WITHOUT CHANGING    
*                                     TAPE VOLUME RECORD                
         EJECT ,                                                        
*---------------------------------------------------------------------* 
*                                                                     * 
*        IF THE VOLUME OWNER IS ENTITLED TO LEAVE VOLUMES IN THE      * 
*        LIBRARY ON A PERMANENT BASIS, OR THE SHELF LOCATION SHOWS    * 
*        PERMANENT LIBRARY RESIDENCE, DO NOT ALLOW THE CARTRIDGE TO   * 
*        BE EJECTED.                                                  * 
*                                                                     * 
*        SET THE REJECT RETURN CODE, AND EXIT.                        * 
*                                                                     * 
*---------------------------------------------------------------------* 
         CLC   UXJOWNER,=CL64'CONAN THE LIBRARIAN'  PRIVILEGED OWNER?   
         BE    EJC1100              YES. SET REJECT RETURN CODE         
         CLC   UXJSHLOC,=CL32'UNSHELFISH'  MUST VOLUME REMAIN IN        
*                                     LIBRARY?                          
         BNE   EJC2000              NO. CHECK AUTHORIZATION REQUIRED    
EJC1100  DS    0H                                                       
         LA    R9,UXJFAIL           SET CARTRIDGE EJECT REQUEST DENIED  
*                                     RETURN CODE                       
         B     EXIT                 RETURN TO CALLER                    
         EJECT ,                                                        
*---------------------------------------------------------------------* 
*                                                                     * 
*        CHECK FOR EJECT AUTHORIZATION REQUIRED.                      * 
*                                                                     * 
*        USING INFORMATION FROM THE LIBRARY DESCRIPTION, DETERMINE    * 
*        WHETHER THE EJECT REQUEST REQUIRES AUTHORIZATION VIA THE     * 
*        PROGRAMMED INTERFACE PASS-THROUGH VALUE.                     * 
*                                                                     * 
*---------------------------------------------------------------------* 
EJC2000  DS    0H                                                       
         CLI   LIBDAUTH,UXJYES      AUTHORIZATION REQUIRED?             
         BNE   EJC3000              NO. CHECK VOLUME USE ATTRIBUTE      
         CLC   UXJEXITI,PASSTHRU    EJECT AUTHORIZED BY PROGRAMMED      
*                                     INTERFACE?                        
         BE    EJC3000              YES. CHECK VOLUME USE ATTRIBUTE     
         LA    R9,UXJFAIL           SET CARTRIDGE EJECT REQUEST DENIED  
*                                     RETURN CODE                       
         B     EXIT                 RETURN TO CALLER                    
         EJECT ,                                                        
*---------------------------------------------------------------------* 
*                                                                     * 
*        EJECT IS ALLOWED.                                            * 
*                                                                     * 
*        FOR A PRIVATE VOLUME, MAKE SURE THE VOLUME RECORD            * 
*        IS KEPT.                                                     * 
*                                                                     * 
*        THIS SAMPLE EXIT NO LONGER COMPARES THE VOLUME'S             * 
*        EXPIRATION DATE TO TODAY'S DATE TO DETERMINE IF THE          * 
*        RECORD SHOULD BE KEPT.  INSTEAD, ALL PRIVATE VOLUME          * 
*        RECORDS ARE ASSIGNED THE "KEEP" RECORD DISPOSITION.          * 
*                                                                     * 
*---------------------------------------------------------------------* 
EJC3000  DS    0H                                                       
         CLI   UXJUSEA,UXJPRIV      PRIVATE USE ATTRIBUTE?              
         BNE   EJC4000              NO. PURGE TAPE VOLUME RECORD        
         CLI   UXJVDISP,UXJKEEP     RECORD DISPOSITION KEEP?            
         BE    EJC5000              YES. CHECK SHELF LOCATION SUPPLIED  
         LA    R9,UXJCHG            ALLOW CARTRIDGE EJECT WITH TAPE     
*                                     VOLUME RECORD CHANGED             
         MVI   UXJVDISP,UXJKEEP     MAKE SURE VOLUME RECORD IS KEPT     
         B     EJC5000              CHECK SHELF LOCATION SUPPLIED       
         SPACE 2                                                        
*---------------------------------------------------------------------* 
*                                                                     * 
*        A SCRATCH VOLUME IS TO BE EJECTED.                           * 
*                                                                     * 
*        MAKE SURE THAT THE TAPE VOLUME RECORD IS PURGED AFTER THE    * 
*        VOLUME HAS BEEN EJECTED.     NOTE THAT THE "TAPE VOLUME      * 
*        RECORD CHANGED" RETURN CODE MUST BE SET IF THE CURRENT       * 
*        DISPOSITION IS KEEP.                                         * 
*                                                                     * 
*---------------------------------------------------------------------* 
EJC4000  DS    0H                                                       
         CLI   UXJVDISP,UXJPURGE    RECORD DISPOSITION PURGE?           
         BE    EJC5000              YES. CHECK SHELF LOCATION SUPPLIED  
         LA    R9,UXJCHG            ALLOW CARTRIDGE EJECT WITH TAPE     
*                                     VOLUME RECORD CHANGED             
         MVI   UXJVDISP,UXJPURGE    MAKE SURE VOLUME RECORD IS PURGED   
         EJECT ,                                                        
*---------------------------------------------------------------------* 
*                                                                     * 
*        IF THE SHELF LOCATION IS BLANK, THE OPERATOR DID NOT SUPPLY  * 
*        ONE IN RESPONSE TO MESSAGE CBR2601A.  SET A STANDARD SHELF   * 
*        LOCATION VALUE.                                              * 
*                                                                     * 
*---------------------------------------------------------------------* 
EJC5000  DS    0H                                                       
         CLC   UXJSHLOC,=CL32' '    SHELF LOCATION KNOWN?               
         BNE   EXIT                 YES. RETURN TO CALLER               
         LA    R9,UXJCHG            ALLOW CARTRIDGE EJECT WITH TAPE     
*                                     VOLUME RECORD CHANGED             
         CLI   UXJUSEA,UXJPRIV      PRIVATE VOLUME?                     
         BE    EJC5100              YES. SET PRIVATE SHELF LOCATION     
         MVC   UXJSHLOC,=CL32'SCRATCH STORAGE RACK'  SET SCRATCH        
*                                     SHELF LOCATION                    
         B     EXIT                 RETURN TO CALLER                    
EJC5100  DS    0H                                                       
         MVC   UXJSHLOC,=CL32'PRIVATE STORAGE ROOM'  SET PRIVATE        
*                                     SHELF LOCATION                    
         EJECT ,                                                        
*---------------------------------------------------------------------* 
*                                                                     * 
*        RETURN TO THE CALLER                                         * 
*                                                                     * 
*---------------------------------------------------------------------* 
EXIT     DS    0H                                                       
         L     R13,SAVE+4           RESTORE CALLER'S SAVE AREA ADDRESS  
         FREEMAIN RU,                                                  +
               LV=WORKLEN,                                             +
               A=(R8),                                                 +
               SP=0                                                     
         LR    R15,R9               SET RETURN CODE                     
         RETURN  (14,12),           RESTORE CALLER'S REGISTERS, THEN   +
               RC=(15)                RETURN TO CALLER                  
*---------------------------------------------------------------------* 
*                                                                     * 
*        CBRUXEJC CONSTANTS                                           * 
*                                                                     * 
*---------------------------------------------------------------------* 
         LTORG ,                    LITERAL CONSTANTS                   
         SPACE 2                                                        
PASSTHRU DC    CL16'SIMP'           PASSTHRU VALUE TO AUTHORIZE EJECT   
         SPACE 2                                                        
         END   CBRUXEJC