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

Reply via email to