IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

How to get the dataset name while executing a macro on ps?


IBM Mainframe Forums -> TSO/ISPF
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
pkmurali
Warnings : 1

Active User


Joined: 15 Dec 2005
Posts: 271

PostPosted: Wed May 06, 2009 12:15 pm
Reply with quote

Dear Folks,

I have an macro, please find the attachment, where i am applying a macro on a sequential file, if the macro is applied on PDS,

ADDRESS ISPEXEC
"ISREDIT (MEMNAME) = MEMBER"

The above piece of code helps to get the member name where the macro is applied. For Sequential file(PS) is there anyway to get the dataset name? Please suggest.

The macro is run with the help of runmacro.Please find the attachment for the same.

Thanks,
Murali
Back to top
View user's profile Send private message
expat

Global Moderator


Joined: 14 Mar 2007
Posts: 8797
Location: Welsh Wales

PostPosted: Wed May 06, 2009 12:18 pm
Reply with quote

DO NOT post attachments as not everyone can open them
Back to top
View user's profile Send private message
enrico-sorichetti

Superior Member


Joined: 14 Mar 2007
Posts: 10873
Location: italy

PostPosted: Wed May 06, 2009 12:22 pm
Reply with quote

did You try reading the docs, or searching the forum,
the question has been answered many, many times

click on the search button ,
use as arguments ISREDIT DATASET,
check the button "search for all terms"

and You will get many topics where the subject is discussed
Back to top
View user's profile Send private message
pkmurali
Warnings : 1

Active User


Joined: 15 Dec 2005
Posts: 271

PostPosted: Wed May 06, 2009 12:23 pm
Reply with quote

Thanks expat.

Here is the macro.

Code:
/*******REXX**********/                         
 ADDRESS ISPEXEC                               
 "ISREDIT MACRO"                               
 ADDRESS ISPEXEC                               
 "CONTROL ERRORS RETURN"                       
 CNTS1 = 00000000                               
 CNTS2 = 00000000                               
 CNTS3 = 00000000                               
 USEID = USERID()                               
 DS    = USEID||'.R107YB.REXX.OUTPUT'           
   ADDRESS TSO                                 
    "ALLOC F(OUT) DA('"DS"') MOD"               
 ADDRESS ISPEXEC                               
 "ISREDIT (MEMNAME) = MEMBER"                   
 ADDRESS ISPEXEC                               
 "ISREDIT F IDENTIFICATION 8"                   
 IF RC <> 0 THEN                               
  DO                                           
   OUT.1 = MEMNAME 'IS NOT A COBOL PGM'         
   ADDRESS TSO                                                         
    'EXECIO * DISKW OUT(STEM OUT. FINIS)'                               
    'FREE F(OUT)'                                                       
   CALL PGM_EXIT                                                       
  END                                                                   
 /* macro to  filter only the comments in a cobol pgm  */               
 ADDRESS ISPEXEC                                                       
 "ISREDIT X ALL"                                                       
 "ISREDIT F ALL '*' 7 "                                                 
 IF RC = 0 THEN                                                         
  DO                                                                   
 /* macro to  get the count value for comments  */                     
   ADDRESS ISPEXEC                                                     
     "ISREDIT (CNTS1) = FIND_COUNTS"                                   
     "ISREDIT (MEMNAME) = MEMBER"                                       
 END                                                                   
 ADDRESS ISPEXEC                                                       
 /* macro to  find the total lines used in a cobol pgm  */             
 "ISREDIT X ALL"                                                       
 "ISREDIT F ALL P'=' 7 "                                               
 IF RC = 0 THEN                                                         
  DO                                                                   
 /* macro to  get the count value for total lines */                   
   ADDRESS ISPEXEC                                                     
     "ISREDIT (CNTS2) = FIND_COUNTS"                                   
     "ISREDIT (MEMNAME) = MEMBER"                                       
 END                                                                   
 /* macro to  find the blank lines used in a cobol pgm  */             
 ADDRESS ISPEXEC                                                       
 "ISREDIT X ALL"                                                       
 "ISREDIT F ALL P'@' 7 72"                                             
 "ISREDIT DEL ALL NX"                                                   
 "ISREDIT F ALL X'40' 7"                                               
 IF RC = 0 THEN                                                         
  DO                                                                   
 /* macro to  get the count value for blank lines */                   
   ADDRESS ISPEXEC                                                     
     "ISREDIT (CNTS3) = FIND_COUNTS"                                   
     "ISREDIT (MEMNAME) = MEMBER"                                       
 END                                                                   
    IF RC = 0 THEN                                                     
     DO                                                               
       L1= SUBSTR(MEMNAME,1,10)                                       
       X1= SUBSTR(COMMENTS,1,10)                                       
       X2= SUBSTR(CODE,1,10)                                           
       X3= SUBSTR(BLANKS,1,10)                                         
       Y1= SUBSTR(CNTS1,1,10)                                         
       Y2= SUBSTR(CNTS2,1,10)                                         
       Y3= SUBSTR(CNTS3,1,10)                                         
          OUT.1 = L1 || X1 || Y1                                       
          OUT.2 = '          ' || X2 || Y2                             
          OUT.3 = '          ' || X3 || Y3                             
       ADDRESS TSO                                                     
         'EXECIO * DISKW OUT(STEM OUT. FINIS)'                         
         'FREE F(OUT)'                                                 
     END                                                               
PGM_EXIT:                                                             
  ADDRESS ISPEXEC "ISREDIT CANCEL"                                     
  EXIT                                                                 

and Run macro.

Code:
/***********REXX******************/                                     
SAY 'Enter Input PDS'                                                   
PULL DSNNAME                                                           
USRID   = USERID()                                                     
DS      = USRID||'.R107YB.REXX.OUTPUT'                                 
MACLIST = N242712.R107YB.REXX.MACLIST                                   
MAC     = "'N242712.R107YB.REXX.MACLIST'"                               
DSNNAME = STRIP(DSNNAME)                                               
MACLIS  = STRIP(MACLIST)                                               
DSN = "'"DSNNAME"'"                                                     
SAY DSN                                                                 
DSORG   = LISTDSI(DSN)                                                 
SAY 'DSORG=' DSORG                                                     
SAY 'SYSDSORG=' SYSDSORG                                               
/* IF SYSDSORG = 'PS' */                                               
ADDRESS ISPEXEC                                                         
"ISREDIT MACRO"                                                         
 PARM1 = ''                                                             
 ADDRESS ISPEXEC                                                       
 "CONTROL ERRORS RETURN"                                               
 X = SYSDSN("'"DS"'")                                                   
 IF X = 'OK' THEN                                                       
    DO                                                                 
       ADDRESS TSO                                                     
       "DELETE '"DS"'"                                                 
    END                                                                 
      ADDRESS TSO                                                       
               "ALLOC DA ('"DS"') NEW ",                               
               "LRECL(80) RECFM(F B) ",                                 
               "DSORG(PS) SPACE(10,10) TRACKS"                         
  /*********************************************************************
  MEMBER = ' '                                                         
  LMRC = 0                                                             
  /*********************************************************************
  CALL T0001_LMINIT                                                     
  CALL T0002_LMOPEN                                                     
/********************************************************************/ 
   DO WHILE LMRC = 0                                                   
      IF SYSDSORG= 'PO' THEN                                           
     DO                                                               
        CALL T0003_LMLIST                                             
     END                                                               
     SELECT                                                           
        WHEN LMRC = 8 THEN                                             
           DO                                                         
           SAY 'END OF PROCESSING DATASET: ' DSNNAME                   
           EXIT                                                       
           END                                                         
       WHEN LMRC = 0 THEN                                             
          DO                                                           
                   IF SYSDSORG = 'PS'    THEN                         
                   CALL T0004_EDITMACRO DSNNAME MACLIST               
                   ELSE NOP                                           
                   IF SYSDSORG = 'PO'    THEN                         
                   CALL T0005_LISTMACRO MEMBER MACLIST                 
                   ELSE NOP                                           
                   END                                                 
                   /*                                                 
                   IF LENGTH(STRIP(PARM1)) > 0 THEN                   
                   CALL T0004_EDITMACRO MEMBER PARM1                   
                   ELSE NOP                                           
                   IF LENGTH(STRIP(PARM1)) = 0 THEN                   
                   CALL T0005_LISTMACRO MEMBER MACLIST                 
                   ELSE NOP                                           
                   END */                                             
           OTHERWISE                                                   
                    DO                                                 
           SAY 'ERROR IN PROCESSING PDS: ' DSNNAME 'MEMBER :' MEMBER   
           SAY 'FAILED IN (LMMLIST) MEM LISTING'                       
                    CALL T9999_LMENDING                               
                    END                                               
              END                                                     
END                                                                   
EXIT                                                                   
/*********************************************************************/
T0001_LMINIT:                                                         
 ADDRESS ISPEXEC                                                       
 "LMINIT DATAID("MYDI") DATASET('"DSNNAME"') ENQ(SHR)"                 
 RETURN                                                               
/*********************************************************************/
T0002_LMOPEN:                                                         
 ADDRESS ISPEXEC                                                       
 "LMOPEN DATAID("MYDI") OPTION(INPUT)"                                 
 IF RC = 0                                                             
    THEN                                                               
    NOP                                                               
 /* SAY '*** SUCCESSFULLY OPENED PDS :' DSNNAME '***' */               
    ELSE                                                               
    DO                                                                 
    SAY 'PROBLEM IN OPENING  DATASET : ' DSNNAME                       
    "LMFREE  DATAID("MYDI")"                                           
    EXIT                                                               
    END                                                               
 LMRC = RC                                                             
  RETURN                                                               
   /*******************************************************************
   T0003_LMLIST:                                                       
      ADDRESS ISPEXEC 'LMMLIST DATAID('MYDI') OPTION(LIST),           
                      MEMBER(MEMBER) STATS(NO)'                       
      LMRC = RC                                                       
    RETURN                                                             
    /******************************************************************
  T0004_EDITMACRO:                                                     
       SAY 'ENTERED INTO T0004_EDITMACRO'                             
    ARG MBR1 MCFILE                                                   
       SAY 'MBR1=' MBR1   'MACLIST=' MCFILE                           
    ADDRESS TSO                                                       
     "ALLOC F(INDD) DA('"STRIP(MCFILE)"') SHR REUSE"                   
    ADDRESS TSO                                                       
     "EXECIO * DISKR INDD (STEM VAR. FINIS)"                           
    ADDRESS TSO                                                       
     "FREE F(INDD)"                                                   
     DO I = 1 TO VAR.0                                                 
        ADDRESS ISPEXEC 'VIEW DATAID('MYDI')                           
                       MACRO('SUBSTR(STRIP(VAR.I),1,8)')'             
     IF RC = 0 | RC = 4                                               
       THEN                                                           
            DO                                                         
            LMRC = 8                                                   
             END                                                       
      ELSE                                                             
             DO                                                         
              SAY 'PROBLEM IN MACRO :' MCFILE 'MEMBER :'               
                     MEMBER 'RC :' RC                                   
               CALL T9999_LMENDING                                     
             END                                                       
      END                                                               
 RETURN                                                                 
 /*******************************************************************/ 
  T0005_LISTMACRO:                                                     
     SAY 'ENTERED INTO T0005_LISTMACRO'                                 
     SAY 'MBRN=' MBRN 'MCFILE=' MCFILE                                 
  ARG MBRN MCFILE                                                       
      DISMAC = ''                                                       
  ADDRESS TSO                                                           
      "ALLOC F(INDD) DA('"STRIP(MCFILE)"') SHR REUSE"                   
 ADDRESS TSO                                                           
      "EXECIO * DISKR INDD (STEM VAR. FINIS)"                           
 ADDRESS TSO                                                           
    "FREE F(INDD)"                                                   
    DO I = 1 TO VAR.0                                                 
   /*  SAY '*** PROCESSING MEMBER & APPLYING MACRO :' MEMBER */       
       ADDRESS ISPEXEC 'VIEW DATAID('MYDI') MEMBER('MBRN')           
                      MACRO('SUBSTR(STRIP(VAR.I),1,8)')'             
        DISMAC = SUBSTR(STRIP(VAR.I),1,8)                             
       IF RC = 0 | RC = 4                                             
          THEN                                                       
          DO                                                         
       /* SAY '*** PROCESSED MEMBER :' MEMBER 'MACRO :' DISMAC ,     
          'RC :' RC '***'*/                                           
             LMRC = 0                                                 
           END                                                       
           ELSE                                                       
           DO                                                         
       /*  SAY 'WARNING IN MACRO :' PARM1 'MEMBER :' MEMBER 'RC :' RC*
           CALL T9999_LMENDING                                       
           END                                                       
    END                                                               
 RETURN                                                               
                                                                       
 T9999_LMENDING:                                                       
       "LMMLIST  DATAID("MYDI") OPTION(FREE)"                         
       "LMCLOSE DATAID("MYDI")"                                       
       "LMFREE DATAID("MYDI")"                                         
    EXIT                                                               
    RETURN
Back to top
View user's profile Send private message
enrico-sorichetti

Superior Member


Joined: 14 Mar 2007
Posts: 10873
Location: italy

PostPosted: Wed May 06, 2009 12:29 pm
Reply with quote

after 84 posts haven' t You learned yet to use the code tags ??
for Your request , to post the code is of no use,
as I said before, search the forums, or read the docs

to save You some work here is the link to the relevant ISPF manual
publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/ISPZEM61/CCONTENTS?SHELF=ISPZPM61&DN=SC34-4820-07&DT=20071211170344

the info You need is in chapter 11
Back to top
View user's profile Send private message
pkmurali
Warnings : 1

Active User


Joined: 15 Dec 2005
Posts: 271

PostPosted: Fri May 08, 2009 10:15 am
Reply with quote

Thanks enrico-sorichetti.

when i executed the above piece of code using TSO EXEC command it is working fine. when i tried it in batch mode it is not working, may be i missed some libraries in the jcl.

Code:

//EDITFILE  EXEC PGM=IKJEFT1B,DYNAMNBR=100,REGION=5M             
//SYSPROC   DD DSN=N242712.R107YB.REXX.CLIST,DISP=SHR             
//SYSTSPRT  DD SYSOUT=*                                           
//SYSTSIN   DD  *                                                 
%RUNLOC                                                           
//ISPPROF DD DSN=&&ISPPROF,DISP=NEW,UNIT=SYSDA,                   
//   SPACE=(TRK,(5,5,5)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=9120)     
//                                                               
//ISPPLIB DD DSN=R8MQXO.MQMPTS.TSOLOAD,DISP=SHR                   
//        DD DSN=SYSA.WMQ.V602.PUT0812A.SCSQAUTH,DISP=SHR         
//        DD DSN=SYS1.DBAG.DSNLOAD,DISP=SHR                       
//ISPSLIB DD DSN=SYSC.CTSO.V3R4.SKEL,DISP=SHR                     
//        DD DSN=SYS1.SISPSENU,DISP=SHR                           
//        DD DSN=SYS1.SISPSLIB,DISP=SHR                           
//ISPTLIB DD DSN=SYS1.SISPTENU,DISP=SHR                           
//        DD DSN=SYS1.SBPXTENU,DISP=SHR                           
//ISPMLIB DD DSN=SYS1.SISPMENU,DISP=SHR                               
//        DD DSN=SYS1.SBPXMENU,DISP=SHR                               
//        DD DSN=SYSC.CTSO.V3R4.MSG,DISP=SHR                           


********************************* TOP OF DATA **********************************
READY
%RUNLOC
Enter Input PDS
23 *-* "ISREDIT MACRO"
+++ RC(-3) +++
25 *-* "CONTROL ERRORS RETURN"
+++ RC(-3) +++
ENTRY (A) N242712.R107YB.REXX.OUTPUT DELETED
83 *-* "LMINIT DATAID("MYDI") DATASET('"DSNNAME"') ENQ(SHR)"
+++ RC(-3) +++
88 *-* "LMOPEN DATAID("MYDI") OPTION(INPUT)"
+++ RC(-3) +++
PROBLEM IN OPENING DATASET : N242712.RETRIEVE.PDS
96 *-* "LMFREE DATAID("MYDI")"
+++ RC(-3) +++
READY
END
******************************** BOTTOM OF DATA ********************************

[/list][/quote]

Please let me know what changes to be done.

Thanks,
Murali.
Back to top
View user's profile Send private message
enrico-sorichetti

Superior Member


Joined: 14 Mar 2007
Posts: 10873
Location: italy

PostPosted: Fri May 08, 2009 10:49 am
Reply with quote

You missed some the ISPF libraries
or You invoked the rexx in the wrong way
it should have been something in the style "ISPSTART command(....)"
but it would be better to check the manual icon_biggrin.gif
Back to top
View user's profile Send private message
pkmurali
Warnings : 1

Active User


Joined: 15 Dec 2005
Posts: 271

PostPosted: Fri May 08, 2009 2:44 pm
Reply with quote

I ran other rexx program with the same jcl it went fine. but for this code i am using edit macros which i feel is not entertained because of some library being missed i guess. The RC is -3 for the commands with EDIT Macros.

I have added the ISPSTART CMD(%RUNLOC), But it is till giving RC(20) for
ADDRESS ISPEXEC
"ISREDIT MACRO"
ADDRESS ISPEXEC
"CONTROL ERRORS RETURN"
Code:

READY                                                                       
ISPSTART CMD(%RUNLOC)                                                       
ISPF system data set allocation error - press Enter to continue.             
Log file allocation error - ISPF will operate without a log data set.       
Data set 'N141129.AE31.SPFLOG1.LIST' in use by another user, try later.     
Enter Input PDS                                                             
     4 *-* /**/                                                             
     5 *-* DSNNAME='N242712.RETRIEVE.PDS'                                   
       >>>   "N242712.RETRIEVE.PDS"                                         
     6 *-* DSNNAME = STRIP(DSNNAME)                                         
       >>>   "N242712.RETRIEVE.PDS"                                         
     7 *-* Y       = SYSDSN("'"DSNNAME"'")                                   
       >>>   "OK"                                                           
     8 *-* IF Y <> 'OK'                                                     
       >>>   "0"                                                             
    13 *-* USRID   = USERID()                                               
       >>>   "N141129"                                                       
    14 *-* DSNNAME = STRIP(DSNNAME)         
   >>>   "N242712.RETRIEVE.PDS"                                         
15 *-* DS      = USRID||'.R107YB.REXX.OUTPUT'                           
   >>>   "N141129.R107YB.REXX.OUTPUT"                                   
16 *-* MACLIST = N242712.R107YB.REXX.MACLIST                             
   >>>   "N242712.R107YB.REXX.MACLIST"                                   
17 *-* MAC     = "'N242712.R107YB.REXX.MACLIST'"                         
   >>>   "'N242712.R107YB.REXX.MACLIST'"                                 
18 *-* MACLIS  = STRIP(MACLIST)                                         
   >>>   "N242712.R107YB.REXX.MACLIST"                                   
19 *-* DSN = "'"DSNNAME"'"                                               
   >>>   "'N242712.RETRIEVE.PDS'"                                       
20 *-* DSORG   = LISTDSI(DSN)                                           
   >>>   "0"                                                             
21 *-* /**/                                                             
22 *-* PARM1 = ''                                                       
   >>>   ""                                                             
23 *-* ADDRESS ISPEXEC                                                   
24 *-* "ISREDIT MACRO"                                                   
   >>>   "ISREDIT MACRO"     
       [b]+++ RC(20) +++   [/b]                                                       
    25 *-* ADDRESS ISPEXEC                                                     
    26 *-* "CONTROL ERRORS RETURN"                                             
       >>>   "CONTROL ERRORS RETURN"                                           
    27 *-* X = SYSDSN("'"DS"'")                                                 
       >>>   "OK"                                                               
    28 *-* IF X = 'OK'                                                         
       >>>   "1"                                                               
       *-*  THEN                                                               
    29 *-*  DO                                                                 
    30 *-*   ADDRESS TSO                                                       
    31 *-*   "DELETE '"DS"'"                                                   
       >>>     "DELETE 'N141129.R107YB.REXX.OUTPUT'"                           
ENTRY (A) N141129.R107YB.REXX.OUTPUT DELETED                                   
    32 *-*  END                                                                 
    33 *-* ADDRESS TSO                                                         
    34 *-* "ALLOC DA ('"DS"') NEW ","LRECL(80) RECFM(F B) ","DSORG(PS) SPACE(10,
       >>>   "ALLOC DA ('N141129.R107YB.REXX.OUTPUT') NEW  LRECL(80) RECFM(F B)
    37 *-* /**/                                                                                                   38 *-* MEMBER = ' '                                                       
   >>>   " "                                                             
39 *-* LMRC = 0                                                           
   >>>   "0"                                                             
40 *-* /**/                                                               
41 *-* CALL T0001_LMINIT                                                 
82 *-*  T0001_LMINIT:                                                     
83 *-*  ADDRESS ISPEXEC                                                   
84 *-*  "LMINIT DATAID("MYDI") DATASET('"DSNNAME"') ENQ(SHR)"             
   >>>    "LMINIT DATAID(MYDI) DATASET('N242712.RETRIEVE.PDS') ENQ(SHR)" 
85 *-*  RETURN                                                           
42 *-* CALL T0002_LMOPEN                                                 
87 *-*  T0002_LMOPEN:                                                     
88 *-*  ADDRESS ISPEXEC                                                   
89 *-*  "LMOPEN DATAID("MYDI") OPTION(INPUT)"                             
   >>>    "LMOPEN DATAID(ISR00001) OPTION(INPUT)"                         
   +++ RC(8) +++                                                         
90 *-*  IF RC = 0           
       >>>    "0"                                                             
    93 *-*   /**/                                                             
    94 *-*  ELSE                                                               
    95 *-*   DO                                                               
    96 *-*    SAY 'PROBLEM IN OPENING  DATASET : ' DSNNAME                     
       >>>      "PROBLEM IN OPENING  DATASET :  N242712.RETRIEVE.PDS"         
PROBLEM IN OPENING  DATASET :  N242712.RETRIEVE.PDS                           
    97 *-*    "LMFREE  DATAID("MYDI")"                                         
       >>>      "LMFREE  DATAID(ISR00001)"                                     
    98 *-*    EXIT                                                             
READY                                                                         
END                                                                                                     
         
                               
Back to top
View user's profile Send private message
pkmurali
Warnings : 1

Active User


Joined: 15 Dec 2005
Posts: 271

PostPosted: Fri May 08, 2009 3:38 pm
Reply with quote

I have corrected the issue but the contention message is troubling me again

Code:

READY                                                                       
ISPSTART CMD(%RUNLOC)                                                       
ISPF system data set allocation error - press Enter to continue.             
Log file allocation error - ISPF will operate without a log data set.       
Data set 'N141129.AE31.SPFLOG1.LIST' in use by another user, try later.


Please let me know how to solve this issue

Thanks,
Murali
Back to top
View user's profile Send private message
expat

Global Moderator


Joined: 14 Mar 2007
Posts: 8797
Location: Welsh Wales

PostPosted: Fri May 08, 2009 3:46 pm
Reply with quote

Try the following DD statements in your JCL
Code:

//ISPLIST  DD SYSOUT=*                               
//ISPLST1  DD DISP=(NEW,DELETE),SPACE=(TRK,(10,10)),
//            RECFM=VB,LRECL=133,DSORG=PS           
//ISPLOG   DD SYSOUT=*,                             
//            RECFM=FB,LRECL=120,DSORG=PS           
Back to top
View user's profile Send private message
dbzTHEdinosauer

Global Moderator


Joined: 20 Oct 2006
Posts: 6966
Location: porcelain throne

PostPosted: Fri May 08, 2009 3:57 pm
Reply with quote

Expat, you are right-on-the-money.

i had to look up one of Nadel's old posts, but here is the URL supporting
Expat's solution:ISPLOG allocation
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> TSO/ISPF

 


Similar Topics
Topic Forum Replies
No new posts FINDREP - Only first record from give... DFSORT/ICETOOL 3
No new posts Map Vols and Problem Dataset All Other Mainframe Topics 2
No new posts Allocated cylinders of a dataset DB2 12
No new posts Sort First/last record of a subset th... DFSORT/ICETOOL 7
No new posts Reading dataset in Python - New Line ... All Other Mainframe Topics 22
Search our Forums:

Back to Top