MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

JEM/JOBSCAN
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> TSO and ISPF
View previous topic :: View next topic  
Author Message
Nila
Beginner


Joined: 26 Dec 2002
Posts: 20
Topics: 8
Location: Chennai, India

PostPosted: Fri Jan 10, 2003 5:44 am    Post subject: JEM/JOBSCAN Reply with quote

Can you please post the rexx code for JEM (JCL scan)? 8)
_________________
Cheers Nila..
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Fri Jan 10, 2003 6:35 am    Post subject: Reply with quote

Nila,

Can you elaborate as to what you are trying to do ?? Do you want your own version of JEM written in rexx ?? or do want to invoke JEM within in rexx ??

Thanks

Kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
DaveyC
Moderator


Joined: 02 Dec 2002
Posts: 151
Topics: 3
Location: Perth, Western Australia

PostPosted: Fri Jan 10, 2003 6:36 am    Post subject: Reply with quote

There is no REXX code for JEM. The driver is in assembler, the scripts are in COBOL (used to be), and the ISPF interface is CLIST...
_________________
Dave Crayford
Back to top
View user's profile Send private message Send e-mail
Nila
Beginner


Joined: 26 Dec 2002
Posts: 20
Topics: 8
Location: Chennai, India

PostPosted: Fri Jan 10, 2003 6:52 am    Post subject: Reply with quote

In my previous shop I regularly used JEM. But in my current shop that is not working.

I Mistakingly thought that JEM is one of the REXX EXECs residing in SYSEXEC.
Thanx Dave for clarifying this.

Kolusu ,
After coding JCL I have to invoke JEM from command line to check my JCL is right or not. What I have to do?

Thanx & Regards
Nila...
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Fri Jan 10, 2003 6:58 am    Post subject: Reply with quote

Nila,

Yes you need to check your jcl for syntax errors. JEM is a good tool but it is a TOOL from diversified software. Your shop should buy it.It seems that your shop does not have JEM. So ask around your co-workers as to which tool they use to check the syntax errors.If none of the tools exist then you can use TYPRUN Parameter to check the syntax.

Hope this helps...

cheers

kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Nila
Beginner


Joined: 26 Dec 2002
Posts: 20
Topics: 8
Location: Chennai, India

PostPosted: Fri Jan 10, 2003 7:13 am    Post subject: Reply with quote

Thanx Kolusu for quick reply.
Yes..our current shop is not having JEM.
I have to use TYPRUN parameter Only.
_________________
Cheers Nila..
Back to top
View user's profile Send private message
DaveyC
Moderator


Joined: 02 Dec 2002
Posts: 151
Topics: 3
Location: Perth, Western Australia

PostPosted: Fri Jan 10, 2003 7:37 am    Post subject: Reply with quote

JEM works by smoke and mirrors, it's not really that flash. It uses JES2 services and exits to execute JCL in a dummy initiator and then sets traps and parses the output. OK, you can tailor it and it's a good product but that's just about all the smarts it has.

I liked it, but I didn't like the COBOL scripts (even though they had a rule builder). They should have used REXX...

You can write your own REXX edit macros to emulate some of JEMs features. What exactly do you want to do? I'm sure we can help you...
_________________
Dave Crayford
Back to top
View user's profile Send private message Send e-mail
Venkata Ramana Reddy
Beginner


Joined: 02 Dec 2002
Posts: 70
Topics: 19
Location: California

PostPosted: Fri Jan 10, 2003 9:24 pm    Post subject: Reply with quote

Nila,
Try JSCAN if you have it your shop.
_________________
Venkataramana
-- Good judgement comes from experience, and often experience comes from bad judgement.
Back to top
View user's profile Send private message
Nila
Beginner


Joined: 26 Dec 2002
Posts: 20
Topics: 8
Location: Chennai, India

PostPosted: Mon Jan 13, 2003 8:57 am    Post subject: Reply with quote

Hi Dave,
I need this type of REXX,
1. which expands the procedure,
2. and gives warning messages that if we try to refer non existing datasets.

If you provide the REXX code it will be more helpful.

and venkat i dont have JSCAN in our shop.
_________________
Cheers Nila..
Back to top
View user's profile Send private message
Mike
Beginner


Joined: 03 Dec 2002
Posts: 114
Topics: 0
Location: Sydney, Australia

PostPosted: Mon Jan 13, 2003 5:59 pm    Post subject: Reply with quote

Nila,
I doubt that anyone would supply the code as it's a little more than trivial (now I've thrown the gauntlet down Smile ).

How about tying the following. Run the JCL using TYPRUN=SCAN, place the JESJCL output into a dataset, this will resolve the symbolics and expands the procedure. EDIT the dataset and use X ALL followed by F 'DSN=' ALL, followed by F 'DSNAME=' ALL to find all the encoded dataset names. You can then convert the DSN=.... statements into LISTC statements and then use this dataset as input to IDCAMS to check that the datasets exist. You might want to run a sort before the IDCAMS to eliminate duplicates.

While undertaking this you would be able to work out additional edit commands that could assist (e.g. X 'DSN=&&' to get rid of temporary datasets).
_________________
Regards,
Mike.
Back to top
View user's profile Send private message
dojeb
Beginner


Joined: 14 Jan 2003
Posts: 13
Topics: 0
Location: Morgan Hill, CA,USA

PostPosted: Wed Jan 15, 2003 11:58 pm    Post subject: Reply with quote

HI Nila

JEM is one of a few Edit Macros that are part of JOB/SCAN. Besides using it for JCL Validation, you can also enforce site specific JCL standards. There are other Edit Macros available for JCL reformatting/alignment, and for making JCL Changes. Using either JEM (Edit Mode) or JSCAN (Browse/View Mode), you can have the PROCS expanded as long as the Procedure libraries are defined in the JOB/SCAN PARMLIB library, in member JSOPT02 (default member shipped). If you would like more information about JOB/SCAN from Diversified Software, please forward me an Email at doug.berg@diversifiedsoftware.com
Back to top
View user's profile Send private message Visit poster's website
DaveyC
Moderator


Joined: 02 Dec 2002
Posts: 151
Topics: 3
Location: Perth, Western Australia

PostPosted: Thu Jan 16, 2003 8:47 am    Post subject: Reply with quote

Without wasting too many cluons it's pretty easy to knock up a quick and dirty REXX. It will take a bit more engineering to resolve symbolics and check data set dispostions etc... But it's a start

Code:

/* REXX check for invalid data set names and uncataloged data sets */   
                                                                       
address ISREDIT                                                         
                                                                       
"MACRO"                                                                 
                                                                       
"(USERSTAT) = USER_STATE"                                               
                                                                       
"FIND 'DSN=' FIRST"                                                     
                                                                       
do while rc = 0                                                         
  "(JCLLINE) = LINE .ZCSR"                                             
  "(ROW,COL) = CURSOR"                                                 
  parse var jclline 'DSN=' dsn ',' .                                   
  /* don't handle symbolics or temporary datsets (yet) */               
  if left(dsn,1) <> '&' then do                                         
    dsn = strip(dsn)                                                   
    call msg 'OFF'                                                     
    call listdsi "'"strip(dsn)"'"                                       
    select                                                             
      when sysreason = 1 then do                                       
        "LINE_BEFORE "row" = INFOLINE '"dsn" - Invalid dataset name'"   
        "LINE_BEFORE 1 = INFOLINE '"row": "dsn" - Invalid dataset name'"
      end                                                               
      when sysreason = 5 then do                                       
        "LINE_BEFORE "row" = INFOLINE 'Dataset "dsn" not cataloged'"   
        "LINE_BEFORE 1 = INFOLINE '"Row": Dataset "dsn" not cataloged'"
      end                                                               
      otherwise nop                                                     
    end                                                                 
  end                                                                   
  "FIND 'DSN=' NEXT"                                                   
end                                                                     
                                                                       
"RESET FIND"                                                           
                                                                       
"USER_STATE = (USERSTAT)"                                               


_________________
Dave Crayford
Back to top
View user's profile Send private message Send e-mail
miboy
Beginner


Joined: 10 Jan 2003
Posts: 13
Topics: 0

PostPosted: Wed Jan 22, 2003 9:41 am    Post subject: Reply with quote

REXX to expand the PROCS in a JCL

Code:

/***************************** REXX ***********************************/
/*                                                                    */
/*  THIS REXX PROGRAM IS INTENDED TO EXPAND THE PROC                  */
/*                                                                    */
/*                            ----> MIBOY MATHEW             */
/**********************************************************************/
00000_START_RTN:

  "ISREDIT MACRO NOPROCESS"
  IF  RC > 0 THEN
    DO
      "%MACROERR"
      EXIT
    END

  CALL 10000_INITIAL_RTN
  CALL 11000_READ_INTO_STEM
  CALL 12000_PROC_ALLOC_LIST

  DO UNTIL PRC_EXPND_ENDED = 'Y'
     CALL 30000_CREATE_OUTPUT
     IF  PRC_EXPND_ENDED =  'N' THEN CALL 70000_TEMP_OUTPUT
     ELSE
       DO
          CALL 35000_PROC_ORDER
          CALL 71000_WRITE_OUTPUT
       END
  END

  CALL 80000_DISPLAY_JCL
  CALL 90000_END_PROCESS

EXIT


10000_INITIAL_RTN:

   "ISPEXEC LIBDEF ISPPLIB DATASET ID('DNT056.USER.ISPPLIB')"
   "ISPEXEC ADDPOP ROW(8) COLUMN(20)"
  "ISREDIT (DATASET) = DATASET"

  STRTLINE = '//*'||COPIES('=P',35)
  ENDLINE  = '//*'||COPIES('~P',35)
  ERRLINE  = '//*'||COPIES('^E',35)
  PROCCNT = 0
  "ISPEXEC CONTROL ERRORS RETURN"
  "ISPEXEC LIBDEF ISPPLIB DATASET ID('DNT056.USER.ISPPLIB')"
  "ISREDIT (CURRLINE) = LINENUM .ZCSR"
  "ISREDIT (LASTLINE) = LINENUM .ZL"

RETURN


11000_READ_INTO_STEM:

  PROCLINE. =
  DO CNT1 = 1 TO LASTLINE
     "ISREDIT (CURRDATA) = LINE "CNT1
     PROCLINE.CNT1 = CURRDATA
  END

RETURN


12000_PROC_ALLOC_LIST:

  PRCALLOC_CNT = 0
  PRCALLOC.1 =
  DO CNT1 = 1 TO LASTLINE
     IF  POS(' JCLLIB ',PROCLINE.CNT1) > 0 &,
         SUBSTR(PROCLINE.CNT1,1,3) ^= '//*' THEN
       DO
         ORDER_POS = POS('ORDER=',PROCLINE.CNT1)
         SPACE_POS = POS(' ',PROCLINE.CNT1,ORDER_POS)
         ORDER_DSNS = SUBSTR(PROCLINE.CNT1,ORDER_POS+6,,
                      SPACE_POS - ORDER_POS)
         ORDER_DSNS = TRANSLATE(ORDER_DSNS,'   ','(),')
         DO CNT2 = 1 TO WORDS(ORDER_DSNS)
            PRCALLOC_CNT = PRCALLOC_CNT + 1
            PRCALLOC.PRCALLOC_CNT = WORD(ORDER_DSNS,CNT2)
         END
         LEAVE
       END
  END

  SELECT
  WHEN DATASET = 'SFRMVSDS.CA7R30.JCLLIB' THEN
     DO
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = 'WELCEPDS.PROCLIB'
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = 'WELDNTDS.PROCLIB'
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = USERID()||'.FIX.PROCLIB'
     END
  WHEN DATASET = 'DNT999.SYST.JOBLIB' THEN
     DO
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = 'WELDNTDS.PROCLIB'
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = 'WELCEPDS.PROCLIB'
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = USERID()||'.FIX.PROCLIB'
     END
  OTHERWISE
     DO
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = USERID()||'.FIX.PROCLIB'
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = 'WELDNTDS.PROCLIB'
       PRCALLOC_CNT = PRCALLOC_CNT + 1
       PRCALLOC.PRCALLOC_CNT = 'WELCEPDS.PROCLIB'
     END
  END

RETURN

30000_CREATE_OUTPUT:

  OUTPUT. =
  OUTCNT = 0
  PROC_FOUND = ''
  PRC_EXPND_ENDED = 'Y'
  EXEC_FOUND = ''

  DO CNT1 = 1 TO LASTLINE
     SELECT
     WHEN POS(' EXEC ',PROCLINE.CNT1) > 0 &,
          SUBSTR(PROCLINE.CNT1,1,3) ^= '//*' &,
          SUBSTR(PROCLINE.CNT1,1,3) ^= '//!' &,
          POS(' PGM=',PROCLINE.CNT1) = 0 THEN
        DO
          IF  EXEC_FOUND = 'Y' THEN CALL 34000_END_MSG
          TEMPNAME = WORD(PROCLINE.CNT1,3)
          COMMA = SUBSTR(TEMPNAME,LENGTH(TEMPNAME),1)
          PRCCOMMA = POS(",",TEMPNAME)
          IF  PRCCOMMA > 0 THEN PROCNAME = SUBSTR(TEMPNAME,1,PRCCOMMA-1)
          ELSE PROCNAME = TEMPNAME
          CALL 31000_ALLOC_AND_READ_RTN
          CALL 33000_START_MSG
          OUTCNT = OUTCNT + 1
          OUTPUT.OUTCNT = '//!'||,
                     SUBSTR(PROCLINE.CNT1,3,LENGTH(PROCLINE.CNT1)-2)
          IF  COMMA ^= ',' THEN CALL 32000_EXPAND_PROC
          ELSE PROC_FOUND = 'Y'
          PRC_EXPND_ENDED = 'N'
          EXEC_FOUND = 'Y'
        END
     WHEN PROC_FOUND = 'Y' &,
          SUBSTR(PROCLINE.CNT1,1,3) ^= '//*' THEN
        DO
          OUTCNT = OUTCNT + 1
          OUTPUT.OUTCNT = PROCLINE.CNT1
          TEMPNAME = WORD(PROCLINE.CNT1,2)
          COMMA = SUBSTR(TEMPNAME,LENGTH(TEMPNAME),1)
          IF  COMMA ^= ',' THEN
            DO
              PROC_FOUND = 'N'
              CALL 32000_EXPAND_PROC
            END
        END
     WHEN POS(' EXEC ',PROCLINE.CNT1) > 0 &,
          SUBSTR(PROCLINE.CNT1,1,3) ^= '//*' &,
          SUBSTR(PROCLINE.CNT1,1,3) ^= '//!' &,
          EXEC_FOUND = 'Y' &,
          POS(' PGM=',PROCLINE.CNT1) > 0 THEN
        DO
          CALL 34000_END_MSG
          OUTCNT = OUTCNT + 1
          OUTPUT.OUTCNT = PROCLINE.CNT1
        END
     OTHERWISE
        DO
          OUTCNT = OUTCNT + 1
          OUTPUT.OUTCNT = PROCLINE.CNT1
        END
     END
  END

  IF  EXEC_FOUND = 'Y' THEN CALL 34000_END_MSG

RETURN


31000_ALLOC_AND_READ_RTN:

   "ISPEXEC CONTROL DISPLAY LOCK"
   "ISPEXEC DISPLAY PANEL(EXNDJCLS)"

   PROCLIB_FOUND = 'N'
   DO CNT2 = 1 TO PRCALLOC_CNT
      EXPND_LIB = PRCALLOC.CNT2
      LIBRARY = PRCALLOC.CNT2"("PROCNAME")"
      IF  SYSDSN("'"LIBRARY"'") = 'OK' THEN
        DO
          PROCLIB_FOUND = 'Y'
          LEAVE
        END
   END

   IF  PROCLIB_FOUND = 'N' THEN RETURN

   "ALLOCATE FILE(PROCDD) DA('"LIBRARY"') SHR REU"

   IF  RC ^= 0 THEN DO
       ZEDLMSG = "ERROR IN ALLOCATING COPYBOOK " LIBRARY ", RC : ",
       RC
       "ISPEXEC SETMSG MSG(ISRZ001)"
       EXIT CODE(12)
       END

   "EXECIO * DISKR PROCDD (STEM PROCDATA. FINIS"
   "FREE FILE(PROCDD)"

RETURN


32000_EXPAND_PROC:

   IF  PROCLIB_FOUND = 'N' THEN RETURN
   DO CNT2 = 1 TO PROCDATA.0
      OUTCNT = OUTCNT + 1
      OUTPUT.OUTCNT = PROCDATA.CNT2
   END

RETURN


33000_START_MSG:

   IF  PROCLIB_FOUND = 'Y' THEN
     DO
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = STRTLINE
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = '//*'||COPIES(' ',10)||,
                       'EXPANDING PROC '||PROCNAME
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = '//*'||COPIES(' ',10)||,
                       'PROC EXPANDED FROM '||EXPND_LIB
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = STRTLINE
     END
   ELSE
     DO
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = ERRLINE
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = '//*'||COPIES(' ',10)||,
                       'PROC NOT FOUND '||PROCNAME
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = ERRLINE
     END

RETURN


34000_END_MSG:

   EXEC_FOUND = ''
   IF  PROCLIB_FOUND = 'Y' THEN
     DO
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = ENDLINE
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = '//*'||COPIES(' ',10)||,
                       'END OF EXPANDED PROC '||PROCNAME
       OUTCNT = OUTCNT + 1
       OUTPUT.OUTCNT = ENDLINE
     END

RETURN


35000_PROC_ORDER:

   OUTCNT = OUTCNT + 1
   OUTPUT.OUTCNT = '//'||COPIES('*',70)
   OUTCNT = OUTCNT + 1
   OUTPUT.OUTCNT = '//*'||COPIES(' ',10)||'PROCLIB SEARCH ORDER'
   DO CNT1 = 1 TO PRCALLOC_CNT
      OUTCNT = OUTCNT + 1
      OUTPUT.OUTCNT = '//*'||COPIES(' ',12)||CNT1||' '||PRCALLOC.CNT1
   END
   OUTCNT = OUTCNT + 1
   OUTPUT.OUTCNT = '//'||COPIES('*',70)

RETURN


70000_TEMP_OUTPUT:

   PROCLINE.=
   LASTLINE = OUTCNT

   DO CNT1 = 1 TO OUTCNT
      PROCLINE.CNT1 = OUTPUT.CNT1
   END

RETURN


71000_WRITE_OUTPUT:

   CALL MSG('OFF')
   TEMP_DSN = USERID()||'.PROC.EXPND.D'||SUBSTR(DATE('S'),3,6)||,
              '.T'||TIME('S')

   "ALLOC F(OUTPUT) DA('"TEMP_DSN"') NEW",
          "LRECL(80) BLKSIZE(27920) RECFM(F,B) SPACE(1,10)"

   "EXECIO * DISKW OUTPUT (STEM OUTPUT. FINIS"
   "FREE FI(OUTPUT)"

RETURN


80000_DISPLAY_JCL:

  "ISPEXEC REMPOP"
  "ISPEXEC EDIT DATASET('"TEMP_DSN"') MACRO(EXPNDJ)"
  "ISPEXEC VIEW DATASET('"TEMP_DSN"') PANEL(EXNDEDDE)"
  "DELETE '"TEMP_DSN"'"

RETURN


90000_END_PROCESS:

  "ISPEXEC LIBDEF ISPPLIB"

RETURN
Back to top
View user's profile Send private message
miboy
Beginner


Joined: 10 Jan 2003
Posts: 13
Topics: 0

PostPosted: Wed Jan 22, 2003 9:43 am    Post subject: Reply with quote

REXX to do substitutes for the symbolics in a PROC

Code:

/***************************** REXX ***********************************/
/*                                                                    */
/*  THIS REXX PROGRAM IS INTENDED TO EXPAND THE PROC                  */
/*                                                                    */
/*                            ----> MIBOY MATHEW                      */
/**********************************************************************/
00000_START_RTN:

  "ISREDIT MACRO NOPROCESS"
  IF  RC > 0 THEN
    DO
      "%MACROERR"
      EXIT
    END

  CALL 10000_INITIAL_RTN
  CALL 20000_SCAN_PROC_PARMS
  CALL 40000_START_REPLACE
  CALL 90000_FINAL_RTN

EXIT


10000_INITIAL_RTN:

RETURN


20000_SCAN_PROC_PARMS:

  PROCPARM. =
  NO_MORE_PROC =

  "ISREDIT FIND PROC ALL"
  CALL 30000_GET_PARAMS

RETURN


30000_GET_PARAMS:

  "ISREDIT (CURRLINE) = LINENUM .ZCSR"
  "ISREDIT (CURRDATA) = LINE .ZCSR"
  FRSTWORD = SUBSTR(CURRDATA,1,3)
  TEMPWORD = WORD(CURRDATA,3)
  IF  LENGTH(TEMPWORD) > 0 THEN
      COMMA = SUBSTR(TEMPWORD,LENGTH(TEMPWORD),1)
  ELSE
      RETURN

  DO WHILE COMMA = "," |,
           FRSTWORD = '//*'
     IF  FRSTWORD = '//*' THEN CALL 32000_CAPTURE_NEXT_LINE
     ELSE
       DO
          CALL 31000_GET_PARAM_ON_LINE
          CALL 32000_CAPTURE_NEXT_LINE
       END
  END

  CALL 31000_GET_PARAM_ON_LINE

RETURN


31000_GET_PARAM_ON_LINE:

  EQUALPOS = POS("=",TEMPWORD)
  PARMCHAR = SUBSTR(TEMPWORD,1,EQUALPOS-1)
  PARMVAL  = SUBSTR(TEMPWORD,EQUALPOS+1,LENGTH(TEMPWORD)-EQUALPOS)
  PARMVAL = STRIP(PARMVAL,B,",")
  PARMVAL = STRIP(PARMVAL,B,"'")
  PROCPARM.PARMCHAR = PARMVAL

RETURN


32000_CAPTURE_NEXT_LINE:

  CURRLINE = CURRLINE + 1
  "ISREDIT (CURRDATA) = LINE "CURRLINE
  FRSTWORD = SUBSTR(CURRDATA,1,3)
  TEMPWORD = WORD(CURRDATA,2)
  COMMA = SUBSTR(TEMPWORD,LENGTH(TEMPWORD),1)

RETURN


40000_START_REPLACE:

/*TRACE I*/
  "ISREDIT FIND '&' ALL"
  DO WHILE RC = 0
     "ISREDIT (CURRLINE,CURRCOL) = CURSOR"
     "ISREDIT (CURRDATA) = LINE .ZCSR"
     IF  SUBSTR(CURRDATA,1,3) ^= '//*' THEN CALL 41000_SUBS_LINE
     "ISREDIT RFIND"
  END

RETURN

41000_SUBS_LINE:

  NOTELINE = ''
  END_OF_AMPERSAND = ''
  DELIMIT = "&)(,. "

  TEMPLINE = 'XX'||SUBSTR(CURRDATA,3,CURRCOL-3)
  SUBCHAR = ''

  DO CNT1 = CURRCOL TO LENGTH(CURRDATA)
     CURRCHAR = SUBSTR(CURRDATA,CNT1,1)
     SELECT
     WHEN END_OF_AMPERSAND = 'N' THEN
        DO
          IF  POS(CURRCHAR,DELIMIT) > 0 THEN
            DO
              IF  LENGTH(PROCPARM.SUBCHAR) = 0 THEN
                  TEMPLINE = TEMPLINE||'@'||SUBCHAR
              ELSE
                  TEMPLINE = TEMPLINE||PROCPARM.SUBCHAR
              IF  CURRCHAR ^= '.' & CURRCHAR ^= '&' THEN
                  TEMPLINE = TEMPLINE||CURRCHAR
              IF  CURRCHAR = '&' THEN CNT1 = CNT1 - 1
              SUBCHAR = ''
              END_OF_AMPERSAND = ''
            END
          ELSE SUBCHAR = SUBCHAR||CURRCHAR
        END
     WHEN CURRCHAR = '&' THEN
        DO
          IF  CNT1 < LENGTH(CURRDATA) &,
              SUBSTR(CURRDATA,CNT1+1,1) = '&' THEN
            DO
              CNT1 = CNT1 + 1
              TEMPLINE = TEMPLINE||'@@'
            END
          ELSE
            DO
              END_OF_AMPERSAND = 'N'
              NOTELINE = 'Y'
            END
        END
     OTHERWISE
         TEMPLINE = TEMPLINE||CURRCHAR
     END
  END

IF  NOTELINE = 'Y' THEN
    "ISREDIT LINE_AFTER .ZCSR =  DATALINE '"TEMPLINE"'"

  CURRLINE = CURRLINE + 1
  "ISREDIT LOCATE "CURRLINE

RETURN

90000_FINAL_RTN:

  "ISREDIT CHANGE '@' '&' ALL"
  "ISREDIT RESET CHANGE"
  ZEDSMSG = 'PROC EXPANSION COMPLETE'
  "ISPEXEC SETMSG MSG(ISRZ001)"

RETURN
Back to top
View user's profile Send private message
miboy
Beginner


Joined: 10 Jan 2003
Posts: 13
Topics: 0

PostPosted: Wed Jan 22, 2003 9:44 am    Post subject: Reply with quote

After writing the code to expand the PROC and JCL, I gave up Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> TSO and ISPF All times are GMT - 5 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group