//JOBNAME JOB (ACCT),NAME,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1) // EXPORT SYMLIST=* // SET VOLNM=volnam <=== VOLUME NAME FOR TEST DATASET //********************************************************************* //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 PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD *,SYMBOLS=JCLONLY DELETE &SYSUID..SAMPKSDS.ALTINDEX DELETE &SYSUID..SAMPKSDS.ALTPATH SET MAXCC=0 DEFINE AIX(NAME(&SYSUID..SAMPKSDS.ALTINDEX) VOL(&VOLNM) - RELATE(&SYSUID..SAMPKSDS) - RECORDS(100 10) KEYS(20 10)) BLDINDEX IDS(&SYSUID..SAMPKSDS) ODS(&SYSUID..SAMPKSDS.ALTINDEX) DEFINE PATH(NAME(&SYSUID..SAMPKSDS.ALTPATH) - PATHENTRY(&SYSUID..SAMPKSDS.ALTINDEX)) //********************************************************************* //STEP2 EXEC ASMCG //GO.OUTLIST DD SYSOUT=* //*GO.SYSUT1 DD DISP=SHR,DSN=&SYSUID..SAMPKSDS //GO.SYSUT1 DD DISP=SHR,DSN=&SYSUID..SAMPKSDS.ALTPATH //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 * * ===================================================== * * SEQUENTIAL READ RECORD FROM MVS VSAM/KSDS DATASET. * *---------------------------------------------------------------------* * CHANGE SYSUT1 DSNAME FOR YOUR ENVIRONMENT. * * CHANGE ALLOCATE STEP(IDCAMS DEFINE AIX,...) AND SYSUT1 * * DSNAME FOR YOUR ENVIRONMENT. * * //IDCAMS EXEC PGM=IDCAMS * * //SYSIN DD * * * DELETE userid.SAMPKSDS.ALTINDEX <=== * * DELETE userid.SAMPKSDS.ALTPATH <=== * * DEFINE AIX(NAME(userid.SAMPKSDS.ALTINDEX) VOL(volnam) <=== * * RELATE(userid.SAMPKSDS) - <=== * * BLDINDEX IDS(userid.SAMPKSDS) ODS(userid.SAMPKSDS... <=== * * DEFINE PATH(NAME(userid.SAMPKSDS.ALTPATH) - <=== * * PATHENTRY(userid.SAMPKSDS.ALTINDEX)) <=== * * //GO EXEC PGM=LOADER,COND=(5,LT,ASM), * * //SYSUT1 DD DISP=SHR,DSN=userid.SAMPKSDS <=== * *********************************************************************** MAINPROC DS 0H USING IFGACB,UT1ACB ADDRESS TO VSAM/ACB USING IFGRPL,UT1RPL ADDRESS TO VSAM/RPL * *----------------------------------* * * MAIN LINE PROCESSING * * *----------------------------------* OPEN (OUTLIST,OUTPUT) OPEN OUTLIST DATASET OPEN (UT1ACB) OPEN OUTPUT DATASET LTR RA,RF SUCCESSFUL ? BNZ OPENERR NO, DO ERROR PROCESSING LOOP DS 0H GET RPL=UT1RPL READ NEXT RECORD LTR RA,RF SUCCESSFUL ? BNZ IOERROR NO, DO ERROR PROCESSING L RA,ARECORD LOAD RECORD AREA ADDRESS PUT OUTLIST,(10) WRITE RECORD TO OUTPUT LIST B LOOP LOOP UNTIL END OF DATASET CLOSE DS 0H CLOSE (UT1ACB) CLOSE OUTPUT DATASET CLOSE (OUTLIST) CLOSE OUTLIST 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(4) END OF DATASET ? BE CLOSE YES, PROCESSING DONE 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 * * *----------------------------------* UT1ACB ACB AM=VSAM, ACB FOR SYSUT1 + DDNAME=SYSUT1,MACRF=IN UT1RPL RPL AM=VSAM, RPL FOR SYSUT2 + ACB=UT1ACB, + AREA=ARECORD,AREALEN=L'ARECORD, + OPTCD=(KEY,SEQ,LOC) SPACE , ERRMSG1 WTO 'VSAM XXXX ERROR, RETCODE=99 ERRCODE=999',MF=L, + MCSFLAG=HRDCPY ZOSv23 SPACE , * *----------------------------------* * * WORKING DATA * * *----------------------------------* DOUBLE DC D'0' DOUBLE WORD WORKAREA ARECORD DC A(0) RECORD AREA POINTER OUTLIST DCB DDNAME=OUTLIST,DSORG=PS,MACRF=PM,RECFM=FB,LRECL=80 *---------------------------------------------------------------------* 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 *---------------------------------------------------------------------* * 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 // //