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