//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 SET MAXCC=0 DEFINE CLUSTER - (NAME(&SYSUID..SAMPKSDS) - VOLUMES(&VOLNM) - RECORDS(100 10) - RECORDSIZE(80 80) - KEYS(10 0) - INDEXED) //* //STEP2 EXEC ASMCG //GO.SYSUT2 DD DISP=SHR,DSN=&SYSUID..SAMPKSDS //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 * * ===================================================== * * WRITE RECORD TO MVS VSAM/KSDS DATASET. * *---------------------------------------------------------------------* * CHANGE ALLOCATE STEP(IDCAMS DEFINE CLUSTER) AND SYSUT2 * * DSNAME FOR YOUR ENVIRONMENT. * * //GENDS EXEC PGM=IDCAMS * * //SYSIN DD * * * DELETE userid.SAMPKSDS <=== * * DEFINE CLUSTER - * * (NAME(userid.SAMPKSDS) - <=== * * VOLUMES(volnam) - <=== * * //* * * //GO EXEC PGM=LOADER,COND=(5,LT,ASM), * * //SYSUT2 DD DISP=SHR,DSN=&SYSUID..SAMPKSDS <=== * *********************************************************************** MAINPROC DS 0H OPEN (UT2ACB),MODE=31 OPEN OUTPUT DATASET LTR RA,RF SUCCESSFUL ? BNZ OPENERR NO, DO ERROR PROCESSING SPACE , LA R2,NUMDATA LOAD NUM OF RECORDS LA R3,WRTDATA LOAD RECORD DATA AREA LOOP DS 0H MODCB RPL=UT2RPL, SET NEXT RECORD AREA ADDRESS + AREA=(3) PUT RPL=UT2RPL WRITE NEXT RECORD LTR RA,RF SUCCESSFUL ? BNZ IOERROR NO, DO ERROR PROCESSING LA R3,LNGDATA(,R3) LOCATE TO NEXT RECORD AREA BCT R2,LOOP LOOP TO WRITE NEXT RECORD SPACE , CLOSE (UT2ACB),MODE=31 CLOSE OUTPUT DATASET B ENDPROGM GO TO EPILOGUE PROCEDURE SPACE , IOERROR DS 0H CVD RF,DOUBLE CONVERT RETCD TO PACKED DECIMAL UNPK ERRMSG2+4+24(2),DOUBLE I OI ERRMSG2+4+25,C'0' V SHOWCB RPL=UT2RPL, EXTRACT VSAM ERROR REASON CODE + AREA=DOUBLE,LENGTH=4,FIELDS=FDBK L RF,DOUBLE LOAD VSAM ERROR CODE CVD RF,DOUBLE CONVERT IT TO PACKED DECIMAL UNPK ERRMSG2+4+35(3),DOUBLE I OI ERRMSG2+4+37,C'0' V WTO MF=(E,ERRMSG2) INFORM VSAM OPEN ERROR LR RF,RA LOAD VSAM RETURN CODE B ENDPROGM GO TO EPILOGUE PROCEDURE SPACE , OPENERR DS 0H TM MSGAREA,X'80' RETURNED ERROR INFO ? BNO ENDPROGM NO, ABORT PROCESSING MVC ERRMSG1+4+32(8),MSGAREA+4 MOVE DDNAME LH R0,MSGAREA+14 LOAD NUM OF STORED MSGS LTR R0,R0 NO MSG STORED ? BZ ENDPROGM YES, ABORT PROCESSING L R1,MSGAREA+16 LOAD MSG ENTRY ADDRESS MVC ERRMSG1+4+45(44),4(R1) MOVE DSNAME IC R0,2(,R1) LOAD ACB ERROR CODE CVD R0,DOUBLE CONVERT IT TO PACKED DECIMAL UNPK ERRMSG1+4+24(3),DOUBLE I OI ERRMSG1+4+26,C'0' V WTO MF=(E,ERRMSG1) INFORM VSAM OPEN ERROR LR RF,RA LOAD OPEN 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 * * *----------------------------------* UT2ACB ACB AM=VSAM, ACB FOR SYSUT2 + DDNAME=SYSUT2,MACRF=OUT, + MAREA=MSGAREA,MLEN=L'MSGAREA UT2RPL RPL AM=VSAM, RPL FOR SYSUT2 + ACB=UT2ACB, + AREA=0,RECLEN=LNGDATA, + OPTCD=(KEY,SEQ) MSGAREA DC XL68'00' OPEN/CLOSE ERROR MSG AREA SPACE , ERRMSG1 WTO 'VSAM OPEN ERROR, ERCODE=999 DDN=XXXXXXXX DSN=XXXXXXXX.X+ XXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX',MF=L, + MCSFLAG=HRDCPY ZOSv23 ERRMSG2 WTO 'VSAM I/O ERROR, RETCODE=99 ERRCODE=999',MF=L, + MCSFLAG=HRDCPY ZOSv23 SPACE , * *----------------------------------* * * WORKING DATA * * *----------------------------------* DOUBLE DC D'0' DOUBLE WORD WORKAREA WRTDATA EQU * DC CL80'0054326789JAMES BOND 234 BATH ROAD, HAYES,+ MIDDLESEX UB3 5AP, UK' DC CL80'0198761234SEAN CONNERY MOSCOW 103340, RUSSIA+ N FEDERATION' DC CL80'0212349876GEORGE LAZENBY WEST SUSSEX, RH6 0NP,+ UK' DC CL80'0345673412ROGER MOORE VIALE G GALILEI 30/1,+ 30173 TESSERA-VENEZIA, ITALY' DC CL80'0456780123TIMOTHY DALTON A-1300 WIEN FLUGHAFEN+ , AUSTRIA' DC CL80'0587651234PIERCE BROSNAN FLUGHAFENSTRASSE 1-3,+ 22335 HAMBURG, GERMANY' DC CL80'0609873456DANIEL CRAIG BIRMINGHAM, B26 3QJ, + UK' DC CL80'0734568901AKIKO WAKABAYASHI 2-1 HANEDA AIRPORT, O+ TA-KU TOKYO, JAPAN' DC CL80'0867894321MICHELLE YEOH 1 CHEONG YIP ROAD, LA+ NTAU, HONG KONG' DC CL80'0989015432HALLE BERRY JAMAICA, NEW YORK 114+ 30, USA' LNGDATA EQU 80 RECORD LENGTH NUMDATA EQU (*-WRTDATA)/LNGDATA NUM OF DATA RECORDS *---------------------------------------------------------------------* 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 // //