Attached is a copy of the routine. It is documented within the script and
fairly self-explanatory, nothing fancy. I do have some references to HSM
commands because we were using HSM. It is fairly old 11+ years so you may need
to update to current TLMS standards...
Best Regards,
Gil.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN
/* REXX */
/* ------------------------------------------------------------ */
/* AUTHOR: GILBERT CARDENAS */
/* DATE: AUGUST 21,2006 */
/* PURPOSE: TO BUILD THE JCL TO PERFORM A TAPE TO TAPE COPY */
/* DESCRIPTION: */
/* 1. PERFORM A DN DSN=???????? INQUIRY AGAINST TLMS TO */
/* RETRIEVE ALL THE DATASET DCB INFORMATION FOR OUTPUT FILE. */
/* 2. BUILD THE JCL WITH ALL THE APPROPRIATE INFORMATION */
/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */
/* BEGIN TLMS INQUIRY LOGIC */
/* ------------------------------------------------------------ */
/* TRACE I */
ARG DATASET
/* ECHO */
/* SAY "ARGS:" DATASET DATE() TIME() MVSVAR('SYSNAME') */
IF DATASET = '' THEN DO
SAY '*** TAPECPY NEEDS 1 PARAMETER: TAPE DATASET NAME'
SAY "*** EXAMPLE SYNTAX: 'TAPECPY TAPE.DATASET.G0001V00'"
EXIT 8
END
/*NEWDSN = STRIP(DATASET,L,"'") STRIP OFF LEADING QUOTE' */
/*NEWDSN = STRIP(DATASET,L,"'") STRIP OFF LEADING QUOTE' */
NEWDSN = STRIP(DATASET,B,"'") /*STRIP OFF LEADING&TRAILING QUOTES*/
/* SAY "NEWDSN=" NEWDSN */
DSNLEN = LENGTH(NEWDSN) /* LENGTH OF THE DATASET NAME */
STARTVER = DSNLEN-2 /* GET POINTER FOR START OF VERSION */
CURGEN = SUBSTR(NEWDSN,1,STARTVER) /*IDENTIFY CURRENT GENERATION */
CURVER = SUBSTR(NEWDSN,(STARTVER+1),2) /*IDENTIFY CURRENT VERSION */
NEWVER = CURVER+01 /* CALCULATE NEXT VERION# */
NEWVER = RIGHT(NEWVER,2,'0') /* FORMAT NEW VERSION NUMBER */
OUTDSN = CURGEN||NEWVER /* BUILD OUTPUT DATASET NAME */
/* SAY "OUTDSN=" OUTDSN */
TRAPDS = USERID().TEMP.LIST
IF SYSDSN("'"TRAPDS"'") = 'OK' THEN
JUNK = MSG(OFF)
DO
"HDELETE '"TRAPDS"'" /* DELETE PREVIOUS WORK FILE IF MIGRATED */
"DELETE '"TRAPDS"'" /* DELETE PREVIOUS WORK FILE */
JUNK = MSG(ON)
END
"ALLOC FILE(SYSPRINT) DATASET('"TRAPDS"') NEW CATALOG SPA(1,1) TR",
"DSORG(PS) RECFM(F,B) LRECL(133) BLKSIZE(27930) REUSE"
"ALLOC FILE(CAIVMF) DATASET('SAMPLE.TLMS.VMF') SHR REUSE"
"ALLOC FILE(CAIVMFI) DATASET('SAMPLE.TLMS.VMF') SHR REUSE"
"ALLOC FILE(CAIVMFS) DATASET('SAMPLE.TLMS.VMF') SHR",
"OPTCD(C) BUFNO(10) REUSE"
"ALLOC FILE(CAIRMF) DATASET('SAMPLE.TLMS.RMF') SHR REUSE"
"ALLOC FILE(CAIVMFXI) DATASET('SAMPLE.TLMS.VMFINDEX') SHR REUSE"
"ALLOC FILE(BKUP) DATASET('SAMPLE.TLMS.ALOG') SHR REUSE"
"ALLOC FILE(SYSIN) SPACE(1,1) TRACK LRECL(80) RECFM(F,B) BLKSIZE(80)",
"REUSE"
TLMSCARD = "DN DSN="||NEWDSN
PUSH TLMSCARD /* PUT COMMAND ON DATA STACK */
'EXECIO 1 DISKW SYSIN (FINIS' /*WRITE FROM DATA STACK TO FILE SYSIN*/
ADDRESS TSO
"CALL 'SAMPLE.TLMS.CAILIB(TLMSRPTS)'"
/* ------------------------------------------------------------ */
/* FREE ALL INPUT DATASETS SINCE THEY ARE NOT NEEDED ANYMORE */
/* ------------------------------------------------------------ */
"FREE F(SYSPRINT)"
"FREE F(SYSIN)"
"FREE F(CAIVMF)"
"FREE F(CAIVMFI)"
"FREE F(CAIVMFS)"
"FREE F(CAIRMF)"
"FREE F(CAIVMFXI)"
"FREE F(BKUP)"
/* ------------------------------------------------------------ */
/* END OF TLMS INQUIRY LOGIC */
/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */
/* DEFINE THE OUTPUT DATASET AND THEN ALLOCATE INPUT FILE */
/* ------------------------------------------------------------ */
JCLOUT = USERID().TAPECPY.JCL
IF SYSDSN("'"JCLOUT"'") = 'OK' THEN
JUNK = MSG(OFF)
DO
"HDELETE '"JCLOUT"'" /* DELETE PREVIOUS WORK FILE IF MIGRATED */
"DELETE '"JCLOUT"'" /* DELETE PREVIOUS WORK FILE */
JUNK = MSG(ON)
END
"ALLOC FILE(INPUTFL) DATASET('"TRAPDS"') SHR REUSE"
"ALLOC FILE(JCLOUT) DATASET('"JCLOUT"') NEW CATALOG SPA(1,1) TR",
"DSORG(PS) RECFM(F,B) LRECL(80) BLKSIZE(27920) REUSE"
/***************************** REXX ********************************/
/* THIS EXEC LOOPS THROUGH THE DATA SET ALLOCATED TO INPUTFL TO */
/* FIND THE FIRST OCCURRENCE OF THE STRING "BLKSIZE". ONCE THE */
/* STRING BLKSIZE IS DETECTED, THE LINE IS PARSED INTO THE FOUR */
/* VARIABLES BUT ONLY 3 WILL BE USED: BLKSIZE, LRECL, RECFM */
/*******************************************************************/
DONE = 'NO'
LINENO = 0
DO WHILE DONE = 'NO'
"EXECIO 1 DISKR INPUTFL" /* READ SYSPRINT FROM TLMS LISTING */
IF RC = 0 THEN /* RECORD WAS READ */
DO
PULL RECORD
LINENO = LINENO + 1 /* ADD 1 TO RECORD COUNT */
IF INDEX(RECORD,'BLKSIZE') > 0 THEN /* IF IS STRING FOUND RC > 0 */
DO
PARSE VAR RECORD BLKSIZE LRECL RECFM MGMTCLAS
DONE = 'YES' /* SET DONE FLAG TO YES DO NOT READ ANYMORE */
/* THIS COMMENT BLOCK WAS ONLY USED FOR DIAGNOSTICS...
SAY 'CURRENT RECORD = ' RECORD
SAY 'BLKSIZE = ' BLKSIZE
SAY 'LRECL = ' LRECL
SAY 'RECFM = ' RECFM
SAY 'MGMTCLAS = ' MGMTCLAS
*/
END
ELSE NOP
END
ELSE
DONE = 'YES'
END
/* ------------------------------------------------------------ */
/* CLOSE INPUT FILE AFTER PROCESSING */
/* ------------------------------------------------------------ */
"EXECIO 0 DISKR INPUTFL (FINIS"
/* ------------------------------------------------------------ */
/* BEGIN THE TASK OF BUILDING THE STEM THAT WILL HOLD THE JCL */
/* ------------------------------------------------------------ */
JCL.0 = 14
JCL.1 = "//"USERID()"T JOB (,'TAPE-TO-TAPE',,,,,1,,),REGION=0M,"
JCL.2 = "// MSGLEVEL=(1,1),MSGCLASS=X,CLASS=A,TYPRUN=HOLD"
JCL.3 = "//****************************************************"
JCL.4 = "//* COPY ORIGINAL TAPE TO NEW TAPE *"
JCL.5 = "//****************************************************"
JCL.6 = "//STEP01 EXEC PGM=IEBGENER "
JCL.7 = "//SYSPRINT DD SYSOUT=* "
JCL.8 = "//SYSIN DD DUMMY "
JCL.9 = "//SYSUT1 DD UNIT=(TAPE,,DEFER),DISP=SHR, "
JCL.10 = "// DSN="NEWDSN
JCL.11 = "//SYSUT2 DD UNIT=(TAPE,,DEFER),DISP=(NEW,CATLG,DELETE),"
JCL.12 = "// DSN="OUTDSN","
JCL.13 = "//*==> ALLOW FOR MULTIPLE VOLUME SPANNING IF NEEDED <==*"
JCL.14 = "// VOLUME=(,,,2),"
JCL.15 = "// DCB=(TAPE.MODEL,"LRECL","BLKSIZE","RECFM")"
JCL.16 = "// "
/* ------------------------------------------------------------ */
/* WRITE THE JCL CARD STEM TO OUTPUT FILE */
/* ------------------------------------------------------------ */
'EXECIO * DISKW JCLOUT(STEM JCL. FINIS' /* WRITE JCL CARDS TO FILE */
"FREE F(INPUTFL)"
"FREE F(JCLOUT)"
SAY
SAY
SAY '************************************************************'
SAY '*** THIS JCL IS BUILT FOR YOUR CONVENIENCE AND BY USING THIS'
SAY '*** REXX ROUTINE, YOU ARE ACKNOWLEDGING THAT YOU WILL TAKE '
SAY '*** THE TIME TO INSPECT THE JCL CONTENTS TO MAKE SURE THAT '
SAY '*** IT LOOKS CORRECT BEFORE SUBMITTING AND EXECUTING IT!!! '
SAY '************************************************************'
/* ------------------------------------------------------------ */
/* EDIT THE OUTPUT DATASET AT END OF REXX */
/* ------------------------------------------------------------ */
ADDRESS TSO
ADDRESS ISREDIT "CAPS ON"
ADDRESS ISREDIT "RECOVERY"
"ISPEXEC EDIT DATASET('"USERID().TAPECPY.JCL"')"
EXIT
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN