See attached 'EDITMAC.txt' on how to process all members of a PDS using
REXX and edit macros.
- PDSMEM is ASM, with EQUREGS just being "R0 EQU 0" etc. Assemble and
link-edit that.
- CALSTRIP is REXX. Copy it to your SYSEXEC PDS library.
- STRIP73 is a REXX edit macro. Copy it to your SYSEXEC PDS library.
You can then invoke it (as %CALSTRIP <your PDS to be stripped>)
interactively or in batch TSO.
Cheers, Chris Poncelet (retired sysprog)
On 12/01/2021 11:26, Sean Gleann wrote:
> Hi Andy
>
> "is it just that you're seeing the RC20 from the ISREDIT" - in this
> particular version of the REXX it is, but as previously detailed I had
> problems with the syntax of the CONTROL ERRORS statement.
> "Does the REXX continue afterwards if you uncomment the code" - in a manner
> of speaking, yes. The whole job terminates with RC990.
> Here's the SYSTSPRT produced by running the uncommented REXX, with 'trace
> i' specified:
>
>
<snip>
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN
MEMBER NAME PDSMEM
===================
*********************************************************************
* LIST ALL MEMBERS OF A PDS *
* *
* *
* *
*********************************************************************
*
PRINT NOGEN
PDSMEM CSECT
EQUREGS
*
*********************************************************************
******** START OF MACROS ********************************************
*********************************************************************
*
MACRO
&L READREC &FILE
&L READ DECB,SF,&FILE,BUFFER,256
CHECK DECB,DSORG=ALL
MEND
*
MACRO
&L WRITEREC &FILE
&L PUT REPORT,OUTPUT
MEND
*
*********************************************************************
******** END OF MACROS **********************************************
*********************************************************************
*
DIRECT DSECT
DATA DS XL2 LENGTH OF THIS DIRECTORY BLOCK
NAME DS CL8 NAME OF THIS/NEXT MEMBER
TTR DS XL3 TRACK ADDRESS OF MEMBER
C DS X 0:ALIAS;1-2:#UBLOCKS;3-7:#HALFWORDS
*
PDSMEM CSECT
STM R14,R12,12(R13) SAVE REGISTERS
LR R11,R15 LOAD ENTRY POINT ADDRESS
USING PDSMEM,R11 BASE REGISTER = R11
ST R13,SAVEBLK+8 BACKWARD POINTER
LR R6,R13
LA R13,SAVEBLK OUR SAVE AREA
ST R13,4(,R6) FORWARD POINTER
*
START OPEN (PDS,(INPUT)) OPEN DIRECTORY
OPEN (REPORT,(OUTPUT)) OPEN LIST OF MEMBERS FILE
*
USING DIRECT,R9 BASE DIRECTORY BUFFER ON R9
*
NEXTREC READREC PDS READ DIRECTORY BLOCK
LA R9,BUFFER-2 MAP DSECT OVER IT LESS 'DATA' LENGTH
LH R7,DATA+2 LOAD BUFFER LENGTH INTO R7
AR R7,R9 R7 <- END OF BUFFER ADDRESS
LA R9,2(,R9) R9 <- START OF BUFFER ADDRESS
NEXT CLR R9,R7 AT END OF BUFFER?
BE NEXTREC - YES: READ NEXT DIRECTORY BLOCK
MVC C_S,C - NO: CHECK WHETHER ALIAS
NI C_S,B'10000000' ALIAS?
BNE SKIP - YES: SKIP THIS ENTRY
CLI NAME,X'FF' - NO: END OF DIRECTORY?
BE EOJ - YES: TERMINATE
MVC OUTPUT,NAME - NO: TAKE THIS MEMBER NAME
WRITEREC AND WRITE IT TO REPORT
SKIP MVC C_S,C FIND OFFSET TO NEXT MEMBER NAME
NI C_S,B'00011111' ZERO-OUT IRRELEVANT BITS
XR R8,R8 CLEAR R8 FOR USE AS WORK REGISTER
ICM R8,B'0001',C_S R8 <- NUMBER OF HALFWORDS
SLL R8,1 R8 <- NUMBER OF BYTES
LA R9,12(R8,R9) R9 <- ADDRESS-2 OF NEXT MEMBER NAME
B NEXT GO PROCESS NEXT MEMBER NAME
*
EOJ CLOSE (PDS,,REPORT) CLOSE FILES
*
FINISH L R13,SAVEBLK+8 RESTORE CALLER'S R13
LM R14,R12,12(R13) RESTORE REGISTERS
XR R15,R15 CLEAR RETURN CODE
BR R14 RETURN TO CALLER
*
*********************************************************************
******** FILES ******************************************************
*********************************************************************
*
REPORT DCB DDNAME=REPORT, X
DSORG=PS, X
MACRF=(PM) PUT AND MOVE TRANSMITTAL
*
PDS DCB BLKSIZE=256, X
DDNAME=PDS, X
DSORG=PSU, X
EODAD=EOJ, X
RECFM=VB, X
MACRF=(R) READ
*
*********************************************************************
******** STORAGE ****************************************************
*********************************************************************
*
* RECORDS
*
CNOP 0,4
OUTPUT DS CL8 REPORT OUTPUT FIELD
BUFFER DS CL256 DIRECTORY BLOCK INPUT FIELD
*
* CONSTANTS
*
LTORG
*
* WORKING STORAGE
*
C_S DS X FOR ANALYSING THE 'C' FIELD
*
SAVEBLK DC 18F'0' 18 FULLWORDS INITIALISED TO X'00'
*
*********************************************************************
******** THAT'S IT **************************************************
*********************************************************************
*
END PDSMEM
MEMBER NAME CALSTRIP
=====================
ARG DSET TRACE
IF ABBREV('DEBUG',TRACE,1) THEN ,
TRACE ALL
ELSE ,
TRACE = ' '
"ISPEXEC VPUT (TRACE) SHARED"
"FREE FI(PDS,REPORT)"
"ALLOC FI(PDS) DA('"DSET"') SHR KEEP"
"ALLOC FI(REPORT) NEW DELETE SPACE(1) TRACKS RECFM(F,B) LRECL(8) ,
BLKSIZE(8000)"
"CALL '<your loadlib>(PDSMEM)'"
"EXECIO * DISKR REPORT (STEM REC.)"
"EXECIO 0 DISKR REPORT (FINIS)"
SAY "NUMBER OF MEMBERS IS "REC.0
DO I = 1 TO REC.0
SAY REC.I ':' I
"ISPEXEC EDIT DATASET('"DSET"("STRIP(REC.I)")') MACRO(STRIP73)"
END I
"FREE FI(PDS,REPORT)"
EXIT 0
MEMBER NAME STRIP73
====================
"ISREDIT MACRO"
"ISPEXEC VGET (TRACE) SHARED"
IF ABBREV('DEBUG',TRACE,1) THEN TRACE ALL
"ISREDIT NUM OFF"
"ISREDIT CHANGE ALL P'=' ' ' 73 80"
"ISREDIT SAVE"
"ISREDIT END"
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN