//JOBNAME JOB (ACCT),NAME,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1) //********************************************************************* //ASMCG PROC AOPT=,APARM=,LOPT=, // MAC1='SYS1.MACLIB', // MAC2='SYS1.MACLIB', // MAC3='SYS1.MODGEN' //ASM EXEC PGM=ASMA90, // PARM=('OBJ,NODECK,LC(32767),XREF(SHORT),TERM,RLD,ASA,&AOPT', // 'US(MAP,WARN(11)),SYSPARM(&APARM)') //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSLIB DD DISP=SHR,DSN=&MAC1 // DD DISP=SHR,DSN=&MAC2 // DD DISP=SHR,DSN=&MAC3 //SYSUT1 DD UNIT=SYSALLDA,SPACE=(TRK,(80,20)) //SYSLIN DD DISP=(,PASS),UNIT=SYSALLDA,SPACE=(TRK,(30,15),RLSE), // DCB=(RECFM=FB,BLKSIZE=0,LRECL=80) //GO EXEC PGM=LOADER,COND=(5,LT,ASM), // PARM=('LIST,LET,MAP,XREF,&LOPT') //SYSLOUT DD DUMMY //SYSLIN DD DSN=*.ASM.SYSLIN,DISP=(OLD,DELETE) // PEND //********************************************************************* //STEP1 EXEC ASMCG //GO.OUTLIST DD DUMMY //GO.SYSUT1 DD DISP=SHR,DSN=&SYSUID..SAMPKSD2 //GO.KEYIN DD DISP=SHR,DSN=&SYSUID..SAMPKEY2 //ASM.SYSIN DD * *=====================================================================* * MVS STANDARD HOUSE KEEPING PROCEDURE * *=====================================================================* * *----------------------------------* * * ENTRY PROCESSING * * *----------------------------------* MYASMPGM CSECT , DEFINE CONTROL SECTION MYASMPGM AMODE 31 DEFINE DEFAULT AMODE=31 MYASMPGM RMODE 24 DEFINE DEFAULT RMODE=24 USING *,12 DEFINE BASE REGISTER SAVE (14,12),,* SAVE CALLER REGISTERS LA 12,0(,15) GR12 --> OUR 1ST BASE ADDRESS LR 15,13 SAVE CALLER SAVEAREA CNOP 0,4 INSURE FULL WORD BOUNDARY BAS 13,*+4+72 AROUND OUR SAVEAREA DC 18F'-1' OUR GPR SAVEAREA ST 15,4(,13) SAVE CALLER SAVEAREA POINTER ST 13,8(,15) SET BACK CHAIN FOR LINK TRACE B MAINPROC DO MAINLINE PROCESSING * *----------------------------------* * * EXIT PROCESSING * * *----------------------------------* EXITPROC DS 0H L 13,4(,13) RESTORE CALLER SAVEAREA ST 15,16(,13) PASS RETURN CODE TO CALLER RETURN (14,12),T RESTORE CALLER REGISTERS + AND RETURN TO CALLER EJECT , *********************************************************************** * MAIN LINE PROCESSING. * * ===================================================== * * GR1 -- EXEC PARAMETER PLIST * * GR12 - BASE REGISTER * * GR13 - OUR REGISTER SAVEAREA * *---------------------------------------------------------------------* * SAMPLE CODE OF 'MVS ADVANCED SKILL Vol-2' CHAPTER 5.4 * * ===================================================== * * SEARCH AND READ KSDS DATASET WITH VSAM/LSR AND INFORM * * LSR STATISTICS AT END OF PROCESSING. * *---------------------------------------------------------------------* * CHANGE SYSUT1 DSNAME FOR YOUR ENVIRONMENT. * * //GO EXEC PGM=LOADER,COND=(5,LT,ASM), * * //SYSUT1 DD DISP=SHR,DSN=&SYSUID..SAMPKSD2 <=== * * //KEYIN DD DISP=SHR,DSN=&SYSUID..SAMPKEY2 <=== * *********************************************************************** MAINPROC DS 0H * *----------------------------------* * * SETUP PROCESSING * * *----------------------------------* OPEN (OUTLIST,OUTPUT, OPEN OUTLIST/SYSIN DATASET + KEYIN,INPUT) SPACE , USING INFMJFCB,JFCBAREA ADDRESS TO JFCB READ AREA RDJFCB UT1DCB READ SYSUT1 DD STMT JFCB SPACE , USING SHWPL,SHWCATPL ADDRESS TO SHOWCAT PLIST USING SHWOUT,CTLGAREA ADDRESS TO SHOWCAT RETURN AREA SHOWCAT MF=(E,SHWPL), READ CLUSTER CATALOG INFO. + AREA=SHWOUT,NAME=JFCBDSNM LA R2,SHWASS0 LOAD CLUSTER ASSOCIATIONS PART + ADDRESS USING SHWASSOC,R2 ADDRESS IT MVC DOUBLE(3),SHWACI SAVE DATA COMPONENT CI NUMBER LA R2,SHWASSLN-L'SHWACT(,R2) LOCATE TO INDEX COMP. ENTRY MVC DOUBLE+3(3),SHWACI SAVE INDEX COMPONENT CI NUMBER L RA,SHWACBP LOAD RETURNED CATALOG ACB ADDR SPACE , SHOWCAT MF=(E,SHWPL), READ DATA COMPONENT CATALOG + ACB=(10),AREA=SHWOUT,CI=DOUBLE INFORMATION MVC DATACISZ,SHWCISZ SAVE DATA COMPONENT CI-SIZE SHOWCAT MF=(E,SHWPL), READ INDEX COMPONENT CATALOG + ACB=(10),AREA=SHWOUT,CI=DOUBLE+3 INFORMATION MVC INDXCISZ,SHWCISZ SAVE INDEX COMPONENT CI-SIZE MVC INDXKEYL,SHWKEYLN SAVE KEY LENGTH SPACE , LA R1,BLDVRPPL+57 LOCATE 1ST BUFFER ENTRY PART MVC 0(3,R1),INDXCISZ+1 CHANGE BY INDEX CI-SIZE MVC 4(3,R1),=AL3(10) CHANGE BY INDEX CI-BUFFERS# MVC 8(3,R1),DATACISZ+1 CHANGE BY DATA CI-SIZE MVC 12(3,R1),=AL3(300) CHANGE BY DATA CI-BUFFERS# MVC BLDVRPPL+12(1),INDXKEYL+1 CHNAGE BY ACTUAL KEY-LENGTH BLDVRP MF=(E,BLDVRPPL) BUILD SHARED RESOURCES POOL SPACE , GENCB AM=VSAM, GENERATE VSAM ACB AREA + BLK=ACB, + DDNAME=SYSUT1, + MACRF=(IN,DIR,LSR), + RMODE31=ALL, + LOC=ANY ST R0,LNGACB SAVE ACB AREA LENGTH LR R2,R1 GR2 --> VSAM/ACB USING IFGACB,R2 ADDRESS IT GENCB BLK=RPL, + ACB=(S,IFGACB), + AREA=(S,ARECORD), + AREALEN=L'ARECORD, + OPTCD=(KEY,DIR,LOC), + LOC=ANY ST R0,LNGRPL SAVE RPL AREA LENGTH LR R3,R1 GR3 --> VSAM/RPL USING IFGRPL,R3 ADDRESS IT SPACE , * *----------------------------------* * * MAIN LINE PROCESSING * * *----------------------------------* OPEN ((2)),MODE=31 OPEN INPUT DATASET LTR RA,RF SUCCESSFUL ? BNZ OPENERR NO, DO ERROR PROCESSING SPACE , LOOP DS 0H GET KEYIN GET NEXT KEY DATA ST R1,RPLARG SET KEY ADDRESS AS RPL ARGUMENT GET RPL=IFGRPL SEARCH RECORD LTR RA,RF SUCCESSFUL ? BNZ IOERROR NO, CHECK ERROR REASON L RA,ARECORD LOAD RECORD AREA ADDRESS PUTREC DS 0H PUT OUTLIST,(10) WRITE RECORD TO OUTPUT LIST B LOOP LOOP FOR NEXT SEARCH KEY SPACE , EODPROC DS 0H SHOWCB ACB=(2), EXTRACT LSR STATISTICS + AREA=DOUBLE,LENGTH=8, + FIELDS=(BUFRDS,BFRFND) LM R8,R9,DOUBLE LOAD NUM OF DASD READ AND + BUFFER LOOK-ASIDES CVD R8,DOUBLE CONVERT IT TO PACKED DECIMAL UNPK STATMSG+4+23(7),DOUBLE I OI STATMSG+4+29,C'0' V CVD R9,DOUBLE CONVERT IT TO PACKED DECIMAL UNPK STATMSG+4+38(7),DOUBLE I OI STATMSG+4+44,C'0' V WTO MF=(E,STATMSG) INFORM LSR STATISTICS MSG SPACE , CLOSE ((2)),MODE=31 CLOSE INPUT DATASET L R0,LNGACB LOAD ACB AREA LENGTH FREEMAIN RU,LV=(0),A=(2) FREEMAIN ACB STORAGE L R0,LNGRPL LOAD RPL AREA LENGTH FREEMAIN RU,LV=(0),A=(3) FREEMAIN RPL STORAGE DLVRP TYPE=LSR,SHRPOOL=0 DELETE SHARED RESOURCES POOL CLOSE (OUTLIST,,KEYIN) CLOSE OUTLIST/KEYIN DATASET B ENDPROGM GO TO EPILOGUE PROCEDURE SPACE , * *----------------------------------* * * ERROR PROCESSING * * *----------------------------------* OPENERR DS 0H MVC ERRMSG1+4+5(4),=CL4'OPEN' SLR R0,R0 IC R0,ACBERFLG B SHOWMSG IOERROR DS 0H MVC ERRMSG1+4+5(4),=CL4'I/O' SLR R0,R0 IC R0,RPLERRCD CH R0,=Y(16) RECORD NOT FOUND ? BNE SHOWMSG NO, INFORM ERROR MSG LA RA,=CL80'RECORD NOT FOUND...' B PUTREC SHOWMSG DS 0H CVD RF,DOUBLE CONVERT RETCD TO PACKED DECIMAL UNPK ERRMSG1+4+25(2),DOUBLE I OI ERRMSG1+4+26,C'0' V CVD R0,DOUBLE CONVERT ERRCD TO PACKED DECIMAL UNPK ERRMSG1+4+36(3),DOUBLE I OI ERRMSG1+4+38,C'0' V WTO MF=(E,ERRMSG1) INFORM VSAM OPEN ERROR LR RF,RA LOAD VSAM RETURN CODE B ENDPROGM GO TO EPILOGUE PROCEDURE SPACE , * *----------------------------------* * * END OF PROCESSING * * *----------------------------------* ENDPROGM DS 0H B EXITPROC DO EXIT PROCESSING EJECT , *********************************************************************** * DATA AREA * *********************************************************************** DS 0D *---------------------------------------------------------------------* * *----------------------------------* * * VSAM INTERFACE PARAMETERS * * *----------------------------------* ARECORD DC A(0) RECORD AREA POINTER LNGACB DC F'0' ACB STORAGE LENGTH LNGRPL DC F'0' RPL STORAGE LENGTH SPACE , ERRMSG1 WTO 'VSAM XXXX ERROR, RETCODE=99 ERRCODE=999',MF=L, + MCSFLAG=HRDCPY ZOSv23 STATMSG WTO 'LSR STATISTICS, BUFRDS=9999999 BFRFND=9999999',MF=L, + MCSFLAG=HRDCPY ZOSv23 SPACE , * *----------------------------------* * * WORKING DATA * * *----------------------------------* DOUBLE DC D'0' DOUBLE WORD WORKAREA DATACISZ DC F'0' DATA COMPONENT CI-SIZE INDXCISZ DC F'0' INDEX COMPONENT CI-SIZE INDXKEYL DC Y(0) INDEX COMPONENT KEY-LENGTH SPACE , BLDVRPPL BLDVRP MF=L, BLDVRP PARAMETER LIST + BUFFERS=(512(10),512(10)),KEYLEN=255, + TYPE=LSR,STRNO=10,RMODE31=ALL,SHRPOOL=0 SHWCATPL SHOWCAT MF=L SHOWCAT PARAMETER LIST CTLGAREA DS 0H SHOWCAT READ AREA DC Y(64) AREA LENGTH DC XL62'00' STORED BY SHOWCAT SERVICE SPACE , KEYIN DCB DDNAME=KEYIN,DSORG=PS,MACRF=GL,EODAD=EODPROC OUTLIST DCB DDNAME=OUTLIST,DSORG=PS,MACRF=PM,RECFM=FB,LRECL=80 SPACE , UT1DCB DCB DDNAME=SYSUT1,DSORG=PS,MACRF=E,EXLST=UT1EXLST UT1EXLST DS 0F DC XL1'87',AL3(JFCBAREA) JFCBAREA DS 0F DC (JFCBLGTH)X'00' JFCB READ AREA *---------------------------------------------------------------------* LTORG , LITERAL POOL AT HERE DROP , FORGET ALL BASE REGISTERS EJECT , *********************************************************************** * DATA AREA (OUTSIDE OUR BASE) * *********************************************************************** *---------------------------------------------------------------------* * LOCAL WORKAREA * *---------------------------------------------------------------------* *---------------------------------------------------------------------* * DSECTS * *---------------------------------------------------------------------* IFGACB AM=VSAM VSAM ACB IFGRPL AM=VSAM VSAM RPL IGGSHWPL , SHOWCAT RETURN AREA MAP DJFCB DSECT , IEFJFCBN LIST=YES JFCB DSECT *---------------------------------------------------------------------* * S/370, ESA/390 REGISTER EQUATES * *---------------------------------------------------------------------* YREGS , OS: REGISTER EQUATES RA EQU 10 ADD EQUATION FOR GR10 RB EQU 11 ADD EQUATION FOR GR11 RC EQU 12 ADD EQUATION FOR GR12 RD EQU 13 ADD EQUATION FOR GR13 RE EQU 14 ADD EQUATION FOR GR14 RF EQU 15 ADD EQUATION FOR GR15 END // //