VM

  • 1.  ANYONE HAVE ANY IDEA HOW TO MIGRATE ALL ROSCOE MEMBERS FILES (ROSLIB) TO A DATASET ?

    Posted May 15, 2015 08:46 AM

    Hi experts...

    We unfortunatly been deactivating our Mainframe systems and we have an challenger of migrating ROSLIB MEMBERS OF 2285  USERS to PDSs and then, tranfer it to TXT files by FTP.

    Our first approach was developing a RPF that runs for each PREFIX and record a PDS. The obvious is, 2285 prefixs is horrible to control.

     

    First question: By Job is possible to exec an RPF, i mean, transform this RPF in batch is impossible,because of commands used, i´ve been tried.  ?

    Second question: Is any Roscoe Utility to exports these ROSLIBS to a PDS easily?

     

    I Almost forget , Our Roscoe is 6.0 (very old);

     

    Thank a lot.



  • 2.  Re: ANYONE HAVE ANY IDEA HOW TO MIGRATE ALL ROSCOE MEMBERS FILES (ROSLIB) TO A DATASET ?
    Best Answer

    Posted May 15, 2015 10:20 AM

    You can do this using ROSCOPY Roscoe utility or LIBSERVE may be better.

    Here is a blurb from the CA ROSCOE

     

    Programs and Utilities Guide R6  about what ROSCOPY does.

    Copy one or more library members to a sequential data set or to a member

    Include supplementary input data in the SYSIN data set.

    Specify when and where line numbers are to appear in the OS data set.

    List the output data set.

     

    This is kind of restrictive - I believe you have to specify all the members you want to copy...

     

    A BETTER way would be to use LIBSERVE program.

    The input to LIBSERVE would be a ROSCOE USER KEY and the output can go to a flat file..

    You would have to submit a job for each user.

    Here is some sample JCL I put together:

    //LIBSERVE EXEC PGM=LIBSERVE,PARM='userid'

    //* You can use LIBSERVE to print all members for a user

    //* and put it to a flat file (lrecl 133).

    //* I do not know of a way to put directly to a PDS.

    //* Couple things to remember.

    //* Roscoe allows members to have length up to 255 characters

    //* Those 'long' members wrap to another line.

    //* Those 'long' members wrap to another line.

    //STEPLIB  DD  DSN=Your Roscoe loadlib,DISP=SHR

    //ROSLIB00 DD  DSN=Your ROSLIB DSNS Here,DISP=SHR

    //ROSLIB01 DD  DSN=Your ROSLIB DSNS Here,DISP=SHR

    //ROSLIB02 DD  DSN=Your ROSLIB DSNS Here,DISP=SHR

    //* SLIB03 DD  DSN=Your ROSLIB DSNS Here,DISP=SHR

    //ROSLIB03 DD  DSN=Your ROSLIB DSNS Here,DISP=SHR

    //SYSPRINT DD  SYSOUT=* -- or allocate your DSN here 133

    //SYSIN    DD  *

    LIST ALL,LINES=ALL

    /*

    //

    Hope this helps.. there may be other parameters you can use if you look in the PROGRAMS and UTILITIES manual for ROSCOE.

    Good luck.. Ed

     

     



  • 3.  Re: ANYONE HAVE ANY IDEA HOW TO MIGRATE ALL ROSCOE MEMBERS FILES (ROSLIB) TO A DATASET ?

    Broadcom Employee
    Posted Jun 04, 2015 10:32 AM

    Here is an RPF to export all of your library members (or someone's elses) to a PDS

    Instructions are in the comments.

    <<rcoprpfx>>

    : * ----------------------------------------------------------------- *

    : *                                                                   *

    : * argument variables:                                               *

    : *   a1 - data set name  (target) must exist                         *

    : *   a2 - user prefix                                                *

    : *   a3 - member name (blank for all, '*' or '+' for selection)      *

    : *                                                                   *

    : * processing variables                                              *

    : *   l8  - data set name                                             *

    : *   l9  - user prefix                                               *

    : *   l10 - member name                                               *

    : *   l11 - loop counter                                              *

    : *   l12 - extracted member name including prefix                    *

    : *   l13 - extracted member name                                     *

    : *   l14 - counter for exported members                              *

    : *   l15 - data set name with member name                            *

    : *                                                                   *

    : * Remarks:                                                          *

    : *   The target data set must be previously allocated                *

    : *   To avoid truncation of data when all members are exported,      *

    : *   the target data set should have                                 *

    : *   RECFM=VB,LRECL=259 and an appropriate block size (like 27976)   *

    : *                                                                   *

    : *   Existing members on target data set will be replaced            *

    : *                                                                   *

    : *   If user prefix is omitted, invoking user's prefix will be used  *

    : *                                                                   *

    : *   To process other user's library member, the invoking user       *

    : *   should have LIBADM authority or being authorized thru GROUPS    *

    : *   member definitons                                               *

    : *                                                                   *

    : *   Member selection may be either specified by:                    *

    : *      mask*                                                        *

    : *      mask+                                                        *

    : *      *mask+                                                       *

    : *                                                                   *

    : * ----------------------------------------------------------------- *

    : *                                                                   *

    push

    let l1 = s.attach

    let l2 = s.monlevel

    let l3 = s.msglevel

    let l4 = s.awslb

    let l5 = s.awsrb

    let l6 = s.liblb

    let l7 = s.librb

    : * ----------------------------------------------------------------- *

    set attach nopause

    set monlevel e

    set msglevel e

    set bounds aws 1 255

    set bounds lib 1 255

    <<start>>

    cre aws rcop rpf

    let l8  = upcase(a1)

    let l9  = upcase(a2)

    let l10 = upcase(a3)

    : * ----------------------------------------------------------------- *

    : * validation of passed arguments                                    *

    : * ----------------------------------------------------------------- *

    if conform(l8 'D') ne 1

        response 'RCOP001 - data set name invalid ' ! l8

        response 'RCOP999 - ' ! s.progname ! ' terminated with error'

        return

    endif

    if l9  eq ''

        let l9 = s.prefix

    endif

    if length(l9) lt 2

        response 'RCOP002 - user prefix invalid ' ! l9

        response 'RCOP999 - ' ! s.progname ! ' terminated with error'

        return

    endif

    if l10 eq ''

        let l10 = '+'

    endif

    if trt(l10 '*+') eq 0

        if conform(l10 'R') ne 1

           response 'RCOP003 - ROSLIB Member name invalid' ! l10

           response 'RCOP999 - ' ! s.progname ! ' terminated with error'

           return

        endif

    endif

    : * ----------------------------------------------------------------- *

    trap on

    +a lib +l9+.+l10+

    if s.tc ne 0

       det lib

       response s.lasterr

       response 'RCOP999 - ' ! s.progname ! ' terminated with error'

       return

    endif

    c l r nohdr full to rcop

    sel rcop

    r 1 1

    let l14 = 0

    : * ----------------------------------------------------------------- *

    loop l11 from 1 to l.memct

         set stmtcnt reset

         +read aws (rcop) +l11+ l12 4 12

         let l13 = trim(substr(l12 length(l9) + 2))

         let l15 = l8 ! '(' ! l13 ! ')'

         trap on

         +exp dsn=+l15+ inp=+l12+

         if s.tc ne 0

            response s.lasterr

            response 'RCOP000 - ' ! l14 ! ' members exported'

            response 'RCOP999 - ' ! s.progname ! ' terminated with error'

            det lib

            return

         else

            if s.rc ne 0

            response 'RCOP004 - EXPORT for member ' ! l13 !  -

                     ' failed, RC = ' ! s.rc

            response 'RCOP000 - ' ! l14 ! ' members exported'

            response 'RCOP999 - ' ! s.progname ! ' terminated with error'

            return

            det lib

            det dsn

            else

              let l14 = l14 + 1

            endif

         endif

    endloop

    det lib

    det dsn

    response 'RCOP000 - ' ! l14 ! ' members exported'

    response 'RCOP100 - ' ! s.progname ! ' successfully terminated'

    return