DSNMODIF CSECT DSNMODIF AMODE 24 DSNMODIF RMODE 24 * R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 BASE REGISTER R13 EQU 13 R14 EQU 14 R15 EQU 15 *---------------------------------------------------------------------* * DAVID YOUNG * * THIS PROGRAM IS CALLED BY SECURE TO DYNAMICALLY ALLOCATE A REPORT * * FILE AND WRITE PASSED VALUES TO IT. * * EQUIVALENT OF DISP=(MOD,CATLG) ALLOCATION * *---------------------------------------------------------------------* BEGIN EQU * STM R14,R12,12(R13) STORE R14 THRU R12 INTO R13 BALR R12,R0 USING *,R12 USE 12 AS THE BASE REGISTER ST R13,SAVEAREA+4 STORE R13 CONTENTS AT SAVEAREA+4 LA R13,SAVEAREA LOAD SAVEAREA ADDRESS INTO REG 13 MVC USERNAME,0(R1) USERNAME IS PASSED THROUGH LINKAGE MVC PROGNAME,0(R2) PROGNAME IS PASSED THROUGH LINKAGE MVC JOBNAME,0(R3) JOBNAME IS PASSED THROUGH LINKAGE * TIME DEC,ZONE=LT RETRIEVE TODAYS DATE ST R1,TODAYS_DATE ST R1,TODAYS_DBL UNPK TODAYS_CHAR,TODAYS_DBL(5) OI TODAYS_CHAR+5,X'F0' * LA R0,64 GETMAIN R,LV=(R0) GET 64 BYTES OF STORAGE ALLPRC LR R8,R1 MOVE RETURNED ADDR TO R8 USING S99RBP,R8 ESTABLISH ADDRESSABILITY TO S99RBP * LA R4,S99RBPTR+4 POINT FOUR BYTES BEYOND S99RBPTR USING S99RB,R4 ESTABLISH ADDRESS. FOR RB DSECT * ST R4,S99RBPTR RBPTR POINTS TO RB (REQ BLOCK) OI S99RBPTR,S99RBPND TURN ON HIGH-ORDER BIT XC S99RB(RBLEN),S99RB ZERO OUT RB ENTIRELY MVI S99RBLN,RBLEN PUT LEN OF RB IN LENGTH FIELD MVI S99VERB,S99VRBAL SET VERB CODE FLD TO ALLOC FCN * LA R5,S99RB+RBLEN POINT PAST RB TO TUP LIST USING S99TUPL,R5 EST. ADDR FOR TEXT UNIT POINTERS. ST R5,S99TXTPP ST ADDR OF TUP LIST IN THE RB * LA R6,DSNDD GET ADDR OF 1ST TEXT UNIT ST R6,S99TUPTR & STORE IN TUP LIST * LA R5,S99TUPL+4 GET ADDR OF NEXT TUP LIST ENTRY LA R6,DSNTU GET ADDR OF 2ND TEXT UNIT ST R6,S99TUPTR & STORE IN TUP LIST * LA R5,S99TUPL+8 LA R7,NSTAT ST R7,S99TUPTR * LA R5,S99TUPL+12 LA R11,LOGREC ST R11,S99TUPTR * LA R6,S99TUPL+16 POINT PAST END OF TUP LIST * LA R5,S99TUPL+4 GET ADDR OF NEXT TUP LIST ENTRY ST R6,S99TUPTR STORE ADDR OF TU IN TUP LIST * OI S99TUPTR,S99TUPLN TURN ON HI-ORDER BIT LR R1,R8 PUT ADDR OF RB POINTER IN R1 SVC 99 DYNAMIC ALLOCATION LTR R15,R15 BNZ STOPPRC * OPEN (REPRTDCB,OUTPUT) OPEN REPORT FILE PUT REPRTDCB MVC 0(8,R1),PROGNAME WRITE USERID TO THE REPORT FILE MVC 10(6,R1),TODAYS_CHAR MVC 20(8,R1),JOBNAME MVC 34(8,R1),USERNAME CLOSE REPRTDCB CLOSE THE REPORT FILE * ENDPGM L R13,SAVEAREA+4 LOAD R13 WITH PREVIOUS TGT'S ADDR L R14,12(R13) LOAD R14 FROM DISP 12 OF R13 ADDR LM R0,R12,20(R13) LOAD MULT R0 TO R12 FROM DISP 20,R13 BR R14 BRANCH TO ADDR IN REG 14 * STOPPRC WTO 'UNABLE TO ALLOCATE DATASET',ROUTCDE=11,DESC=7 LA R1,3000 ABEND 16,DUMP * REPRTDCB DCB DDNAME=REPORT,DSORG=PS,LRECL=80,MACRF=PL, X BLKSIZE=27920,RECFM=FB * SAVEAREA DS 18F REGISTER SAVE AREA * JOBNAME DS CL8' ' PROGNAME DS CL8' ' USERNAME DS CL8' ' TODAYS_DATE DS PL4'0' MODIF_DATE DS PL4 TODAYS_CHAR DS CL8' ' TODAYS_BIN DS F TODAYS_DBL DS D DOUBLEWORD OF STORAGE EXTRA_FOUR DC CL4' ' * RBLEN EQU (S99RBEND-S99RB) COMPUTED LENGTH OF REQUEST BLOCK * DSNDD DC AL2(DALDDNAM) DC X'0001' VERB CODE 1 DC X'0006' LENGTH DC C'REPORT' DDNAME IS REPORT * DSNTU DC AL2(DALDSNAM) DC X'0001' VERB CODE IS 1 DC X'0015' LENGTH OF DATASETNAME DC C'DAVID.YOUNG.TEST.FILE' * NSTAT DC AL2(DALSTATS) DATA SET STATUS DC X'0001' VERB CODE IS 1 DC X'0001' LENGTH OF 1 DC X'02' MODIFY * LOGREC DC AL2(DALNDISP) NORMAL DISP DC X'0001' VERB CODE IS 1 DC X'0001' LENGTH OF 1 BYTE DC X'02' CATALOG * IEFZB4D0 IEFZB4D2 END