//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
//
//