× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Many thanks Lo.

jeff

-----Original Message-----
From: Raikov, Lo 
Sent: Friday, June 23, 2000 12:40 PM
To: Bull, Jeff
Subject: RE: SAVRSTLIB


 SAVRSTLIB makes use of the mode QSOCCT and runs on the target machine with
the same effective profile as the source job. It is an APPC application, and
as such, is controlled by the comms entries in the subsystems. It is
extremely easy to block all external SAVRSTLIB requests; writing a "clever"
exit point that would only allow some SAVRSTLIBs is a different matter. I
don't remember whether there is an appropriate system exit point you can
use, but it's worth checking with the manual.

Lo

-----Original Message-----
From: Bull, Jeff
To: 'MIDRANGE-L@midrange.com'
Sent: 6/23/00 6:04 PM
Subject: RE: SAVRSTLIB

Hi guys,
        have you seen the coding necessary to put a VCP on a
save/restore
command, disentangling the variable format data passed by the CP to the
VCP
is horrendous (see below) - and you will probably need to re-visit the
VCP
each time you upgrade.  I may have to bite the bullit and implement
this,
but I was hoping that there may be a communications or routing entry in
the
QCMN *sbs, or similar, that could be tweaked to reject all savrstlib
requests - much less effort to set up and no residual code-maintenance
issues.  

        It is my belief that the savrstlib process invokes a job on the
target machine, can we get at the jobd or some other necessary object -
the
user profile the invoked job runs under?  Or what about the
command/program
it uses to restore the data on the target machine ?

Regards,
        Jeff B.

N.B.  Disclaimer: The code below is included as an example of a more
complex
VCP only.  It has NOT been thoroughly tested as you can see from the
inclusion of some code to assist debug/testing; it has not been
implemented
anywhere, I do not advise that you do.

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*    M i d a s - K a p i t i   I n t e r n a t i o n a l   L t d    */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Application  : MKI Library Management                             */
/* Program Id . : QCKRSAVRL                                          */
/* Program Name : Save Restore Library Command Validity Checker      */
/* Version  . . : 01.00                                              */
/* Author . . . : Jeffrey E Bull                                     */
/* Date . . . . : Apr/2000                                           */
/* Processing . :                                                    */
/* INITIALISATION                                                    */
/*    Trap Unmonitored Error Messages                                */
/*    Check if user is a KLIBMGT user                                */
/* PROCESSING                                                        */
/*    Unpack the variable-format command-string &CMD                 */
/*       LIB number of elements                                      */
/*       LIB(n) loop control                                         */
/*          LIB(n) field-len                                         */
/*          LIB(n) data                                              */
/*       RMTLOCNAME data                                             */
/*       STRLIB field-len                                            */
/*       STRLIB data                                                 */
/*       OMITLIB number of elements                                  */
/*       OMITLIB(n) loop control                                     */
/*          OMITLIB(n) field-len                                     */
/*          OMITLIB(n) data                                          */
/*       OMITOBJ number of objects                                   */
/*       Bypass object-start off-sets                                */
/*       Object(n) loop control                                      */
/*          Bypass object(n) name-delimiter                          */
/*          Object(n) name data                                      */
/*          Object(n) library data                                   */
/*          Object(n) type data                                      */
/*         Remove leading space                                      */
/*       TGTRLS data                                                 */
/*       PRECHK data                                                 */
/*       SAVACT data                                                 */
/*       SAVACTWAIT - 4-byte-binary value                            */
/*       SAVACTMSGQ data                                             */
/*       ACCPTH data                                                 */
/*       SAVFDTA data                                                */
/*       STG data                                                    */
/*       OPTION data                                                 */
/*       MBROPT data                                                 */
/*       ALWOBJDIF data                                              */
/*       RSTLIB field-len                                            */
/*       RSTLIB data                                                 */
/*       RSTASP 2-byte-binary value                                  */
/*    Resolve a logical value of RSTLIB                              */
/*    Is RSTLIB a KREL controlled library ?                          */
/*    Is SAVRSTLIB authorised ?                                      */
/*       Disallowed restore message                                  */
/* UNMONITORED ERROR HANDLING                                        */
/*    Process Diagnostic Messages                                    */
/*    Put Keyword(value)'s into Joblog                               */
/*    Print Diagnostics                                              */
/*    Process Exception Message                                      */
/* PROGRAM EXIT                                                      */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Modification History.                                             */
/* ---------------------                                             */
/* Version   Date    Description                                     */
/* xx.xx   dd/mm/yy  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/* N.B. */
/* These 'dummy' fields in the parameter list are there to provide   */
/* a valid call from the Command Handler Program. The command data   */
/* is ALL supplied in &CMD and is variable in format ! i.e. the      */
/* field lengths, element counters etc need to be processed and the  */
/* actual parameter values picked out - a lovely old job.            */

             PGM        PARM(&CMD &DUM1 &DUM2 &DUM3 &DUM4 &DUM5 +
                          &DUM6 &DUM7 &DUM8 &DUM9 &DUM10 &DUM11 +
                          &DUM12 &DUM13 &DUM14 &DUM15 &DUM16 &DUM17 +
                          &DUM18)

/* Input Parameters */
             DCL        VAR(&CMD)      TYPE(*CHAR) LEN(9999)

             DCL        VAR(&DUM1)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM2)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM3)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM4)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM5)      TYPE(*CHAR) LEN(1)

             DCL        VAR(&DUM6)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM7)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM8)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM9)      TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM10)     TYPE(*CHAR) LEN(1)

             DCL        VAR(&DUM11)     TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM12)     TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM13)     TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM14)     TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM15)     TYPE(*CHAR) LEN(1)

             DCL        VAR(&DUM16)     TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM17)     TYPE(*CHAR) LEN(1)
             DCL        VAR(&DUM18)     TYPE(*CHAR) LEN(1)

/* Call Parameters extracted from variable format &CMD */
             DCL        VAR(&LIB)        TYPE(*CHAR) LEN(3000)
             DCL        VAR(&RMTLOCNAME) TYPE(*CHAR) LEN(17)
             DCL        VAR(&STRLIB)     TYPE(*CHAR) LEN(10)
             DCL        VAR(&OMITLIB)    TYPE(*CHAR) LEN(3000)
             DCL        VAR(&OMITOBJ)    TYPE(*CHAR) LEN(3000)

             DCL        VAR(&TGTRLS)     TYPE(*CHAR) LEN(10)
             DCL        VAR(&PRECHK)     TYPE(*CHAR) LEN(4)
             DCL        VAR(&SAVACT)     TYPE(*CHAR) LEN(8)
             DCL        VAR(&SAVACTWAIT) TYPE(*CHAR) LEN(11)
             DCL        VAR(&SAVACTMSGQ) TYPE(*CHAR) LEN(20)

             DCL        VAR(&ACCPTH)     TYPE(*CHAR) LEN(4)
             DCL        VAR(&SAVFDTA)    TYPE(*CHAR) LEN(4)
             DCL        VAR(&STG)        TYPE(*CHAR) LEN(5)
             DCL        VAR(&OPTION)     TYPE(*CHAR) LEN(5)
             DCL        VAR(&MBROPT)     TYPE(*CHAR) LEN(6)

             DCL        VAR(&ALWOBJDIF)  TYPE(*CHAR) LEN(5)
             DCL        VAR(&RSTLIB)     TYPE(*CHAR) LEN(10)
             DCL        VAR(&RSTASP)     TYPE(*CHAR) LEN(7)
             DCL        VAR(&FRCOBJCVN)  TYPE(*CHAR) LEN(11)

/* Work fields */
             DCL        VAR(&GRPPRF)    TYPE(*CHAR) LEN(10)
             DCL        VAR(&IDX)       TYPE(*DEC)  LEN(4 0)
             DCL        VAR(&ITMCNT)    TYPE(*DEC)  LEN(4 0)
             DCL        VAR(&KRL)       TYPE(*CHAR) LEN(10)
             DCL        VAR(&KRLIND)    TYPE(*CHAR) LEN(1)

             DCL        VAR(&MGTUSR)    TYPE(*CHAR) LEN(10) +
                                        VALUE('KLIBMGT')
             DCL        VAR(&MSGDTA)    TYPE(*CHAR) LEN(512)
             DCL        VAR(&MSGF)      TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGID)     TYPE(*CHAR) LEN(7)

             DCL        VAR(&MSGFLIB)   TYPE(*CHAR) LEN(10)
             DCL        VAR(&SST)       TYPE(*DEC)  LEN(4 0)
             DCL        VAR(&SUPGRPPRF) TYPE(*CHAR) LEN(150)
             DCL        VAR(&WC1)       TYPE(*CHAR) LEN(1)
             DCL        VAR(&WC2)       TYPE(*CHAR) LEN(2)
             DCL        VAR(&WC10)      TYPE(*CHAR) LEN(10)
             DCL        VAR(&WC0160)    TYPE(*CHAR) LEN(160)

             DCL        VAR(&WD2)       TYPE(*DEC)  LEN(2 0)
             DCL        VAR(&WD3)       TYPE(*DEC)  LEN(3 0)
             DCL        VAR(&WD5A)      TYPE(*DEC)  LEN(5 0)
             DCL        VAR(&WD5B)      TYPE(*DEC)  LEN(5 0)

/* INITIALISATION */
   /* Trap Unmonitored Error Messages */
             MONMSG     MSGID(CPF0000 MCH0000) EXEC(GOTO +
                          CMDLBL(LBL900))

             RTVUSRPRF  USRPRF(*CURRENT) GRPPRF(&GRPPRF) +
                          SUPGRPPRF(&SUPGRPPRF)
             CHGVAR     VAR(&WC0160) VALUE(&GRPPRF || &SUPGRPPRF)

/* Check if user is a KLIBMGT user */
             CHGVAR     VAR(&WD2) VALUE(0)
 LBL010:     CHGVAR     VAR(&WD2) VALUE(&WD2 + 1)
             IF         COND(&WD2 *GT 16) THEN(GOTO CMDLBL(LBL100))
             CHGVAR     VAR(&WD3) VALUE((&WD2 * 10) - 9)
             IF         COND(%SST(&WC0160 &WD3 10) = &MGTUSR) +
                          THEN(GOTO CMDLBL(LBL990)) /* Allow */
             GOTO       CMDLBL(LBL010)

/* PROCESSING */

/* Unpack the variable-format command-string &CMD */
/* (Objective is to extract SAVLIB and RSTLIB values) */
/* Hold-on-tight if you're working on this for the first time */

 LBL100:     CHGVAR     VAR(&IDX) VALUE(1)

   /* LIB number of elements */
 LIB:        CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5A)
             CHGVAR     VAR(&ITMCNT) VALUE(0)

   /* LIB(n) loop control */
 LIB2:       CHGVAR     VAR(&ITMCNT) VALUE(&ITMCNT + 1)
             IF         COND(&ITMCNT *GT &WD5A) THEN(GOTO +
                          CMDLBL(RMTLOCNAME))

      /* LIB(n) field-len */
             CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5B)

      /* LIB(n) data */
             CHGVAR     VAR(&SST) VALUE((&ITMCNT * 10) - 9)
             CHGVAR     VAR(%SST(&LIB &SST 10)) +
                          VALUE(%SST(&CMD &IDX &WD5B))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 10)
             GOTO       CMDLBL(LIB2)

   /* RMTLOCNAME data */
 RMTLOCNAME: CHGVAR     VAR(&RMTLOCNAME) VALUE(%SST(&CMD &IDX 17))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 17)

   /* STRLIB field-len */
 STRLIB:     CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5A)

   /* STRLIB data */
             CHGVAR     VAR(&STRLIB) VALUE(%SST(&CMD &IDX &WD5A))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 10)

   /* OMITLIB number of elements */
 OMITLIB:    CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5A)
             CHGVAR     VAR(&ITMCNT) VALUE(0)

   /* OMITLIB(n) loop control */
 OMITLIB2:   CHGVAR     VAR(&ITMCNT) VALUE(&ITMCNT + 1)
             IF         COND(&ITMCNT *GT &WD5A) THEN(GOTO +
                          CMDLBL(OMITOBJ))

      /* OMITLIB(n) field-len */
             CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5B)

      /* OMITLIB(n) data */
             CHGVAR     VAR(&SST) VALUE((&ITMCNT * 10) - 9)
             CHGVAR     VAR(%SST(&OMITLIB &SST 10)) +
                          VALUE(%SST(&CMD &IDX &WD5B))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 10)
             GOTO       CMDLBL(OMITLIB2)

   /* OMITOBJ number of objects */
 OMITOBJ:    CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5A)

   /* Bypass object-start off-sets */
             CHGVAR     VAR(&IDX) VALUE(&IDX + (&WD5A * 2))

   /* Object(n) loop control */
             CHGVAR     VAR(&ITMCNT) VALUE(0)
 OMITOBJ2:   CHGVAR     VAR(&ITMCNT) VALUE(&ITMCNT + 1)
             IF         COND(&ITMCNT *GT &WD5A) THEN(GOTO +
                          CMDLBL(OMITOBJ3))
      /* Bypass object-name-delimiter */
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
      /* Object(n) name data */
             CHGVAR     VAR(&OMITOBJ) VALUE(&OMITOBJ *BCAT '(' *CAT +
                          %SST(&CMD &IDX 10))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 10)
      /* Object(n) library data */
             CHGVAR     VAR(&OMITOBJ) VALUE(&OMITOBJ *BCAT +
                          %SST(&CMD &IDX 10))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 10)
      /* Object(n) type data */
             CHGVAR     VAR(&OMITOBJ) VALUE(&OMITOBJ *BCAT %SST(&CMD +
                          &IDX 7) *TCAT ')')
             CHGVAR     VAR(&IDX) VALUE(&IDX + 7)
             GOTO       CMDLBL(OMITOBJ2)
      /* Remove leading space */
 OMITOBJ3:   IF         COND(%SST(&OMITOBJ 1 1) *EQ ' ') THEN(CHGVAR +
                          VAR(&OMITOBJ) VALUE(%SST(&OMITOBJ 2 1999)))

   /* TGTRLS data */
 TGTRLS:     CHGVAR     VAR(&TGTRLS) VALUE(%SST(&CMD &IDX 10))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 10)

   /* PRECHK data */
 PRECHK:     CHGVAR     VAR(&PRECHK) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* SAVACT data */
 SAVACT:     CHGVAR     VAR(&SAVACT) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* SAVACTWAIT - 4-byte-binary value */
 SAVACTWAIT: CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5A)
             CHGVAR     VAR(&SAVACTWAIT) VALUE(&WD5A)

   /* SAVACTMSGQ data */
 SAVACTMSGQ: CHGVAR     VAR(&SAVACTMSGQ) VALUE(%SST(&CMD &IDX 20))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 20)

   /* ACCPTH data */
 ACCPTH:     CHGVAR     VAR(&ACCPTH) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* SAVFDTA data */
 SAVFDTA:    CHGVAR     VAR(&SAVFDTA) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* STG data */
 STG:        CHGVAR     VAR(&STG) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* OPTION data */
 OPTION:     CHGVAR     VAR(&OPTION) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* MBROPT data */
 MBROPT:     CHGVAR     VAR(&MBROPT) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* ALWOBJDIF data */
 ALWOBJDIF:  CHGVAR     VAR(&ALWOBJDIF) VALUE(%SST(&CMD &IDX 1))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 1)

   /* RSTLIB field-len */
 RSTLIB:     CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5A)

   /* RSTLIB data */
             CHGVAR     VAR(&RSTLIB) VALUE(%SST(&CMD &IDX &WD5A))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 10)

   /* RSTASP 2-byte-binary value */
 RSTASP:     CHGVAR     VAR(&WC2) VALUE(%SST(&CMD &IDX 2))
             CHGVAR     VAR(&IDX) VALUE(&IDX + 2)
             CVTBINDEC  FROMBIN(&WC2) TODEC(&WD5A)
             CHGVAR     VAR(&RSTASP) VALUE(&WD5A)

   /* Resolve a logical value of RSTLIB  */
             IF         COND(&RSTLIB *EQ '*SAVLIB') THEN(CHGVAR +
                          VAR(&RSTLIB) VALUE(%SST(&LIB 1 10)))

   /* KREL Library(n) loop Initialisation */
             RTVDTAARA  DTAARA(*LIBL/QCKRKREL) RTNVAR(&KRL)
             OVRDBF     FILE(KZCOMP01) TOFILE(&KRL/KZCOMP01) +
                          MBR(*FIRST) OVRSCOPE(*ACTGRPDFN)
             CHGVAR     VAR(&KRLIND) VALUE('0')
             CHGVAR     VAR(&ITMCNT) VALUE(0)

   /* KREL Library(n) loop control */
 KREL:       CHGVAR     VAR(&ITMCNT) VALUE(&ITMCNT + 1)
             CHGVAR     VAR(&SST) VALUE((&ITMCNT * 10) - 9)
             CHGVAR     VAR(&WC10) VALUE(%SST(&LIB &SST 10))
             IF         COND(&WC10 *EQ '          ') THEN(GOTO +
                          CMDLBL(KREL2)) /* Exit Loop */

      /* Library-object check */
             CHKOBJ     OBJ(QSYS/&WC10) OBJTYPE(*LIB)
             MONMSG     MSGID(CPF9802 CPF9815 CPF9830 CPF9899) +
                          EXEC(GOTO CMDLBL(LBL900)) /* Errors */
             MONMSG     MSGID(CPF9801 CPF9810)

      /* Is Lib a KREL controlled library ? */
             CALL       PGM(*LIBL/KX504R) PARM(&WC10 &WC1)
             IF         COND(&WC1 *EQ '1') THEN(DO)
             SNDPGMMSG  MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 +
                          SAVRSTLIB(' *TCAT &WC10 *TCAT ') is a +
                          protected Master Product library.') +
                          TOPGMQ(*PRV) MSGTYPE(*DIAG)
             CHGVAR     VAR(&KRLIND) VALUE('1')
             ENDDO
             GOTO       CMDLBL(KREL)

      /* KREL Loop Exit Procedure */
 KREL2:      DLTOVR     FILE(KZCOMP01) LVL(*ACTGRPDFN)
             RCLRSC

      /* Disallowed restore escape message */
             IF         COND(&KRLIND *EQ '1') THEN(DO)
             SNDPGMMSG  MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
             ENDDO

             GOTO       CMDLBL(LBL990)

/* UNMONITORED ERROR HANDLING */
   /* Process Diagnostic Messages */
 LBL900:     RCVMSG     MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(LBL910))
             IF         COND(&MSGID = '       ') THEN(GOTO +
                          CMDLBL(LBL910))
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*DIAG)
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(LBL910))
             GOTO       CMDLBL(LBL900)

   /* Put Keyword(value)'s into Joblog */
 LBL910:     SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('LIB(' |< &LIB |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('RMTLOCNAME(' |< &RMTLOCNAME |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('STRLIB(' |< &STRLIB |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('OMITLIB(' |< &OMITLIB |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('OMITOBJ(' |< &OMITOBJ |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('TGTRLS(' |< &TGTRLS |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('PRECHK(' |< &PRECHK |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('SAVACT(' |< &SAVACT |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('SAVACTWAIT(' |< &SAVACTWAIT |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('SAVACTMSGQ(' |< &SAVACTMSGQ |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('ACCPTH(' |< &ACCPTH |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('SAVFDTA(' |< &SAVFDTA |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('STG(' |< &STG |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('OPTION(' |< &OPTION |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('MBROPT(' |< &MBROPT |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('ALWOBJDIF(' |< &ALWOBJDIF |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('RSTLIB(' |< &RSTLIB |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('RSTASP(' |< &RSTASP |< ')')
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('FRCOBJCVN(' |< &FRCOBJCVN |< ')')

   /* Print Diagnostics */
             OVRPRTF    FILE(QPJOBLOG) HOLD(*YES)
             DSPJOB     JOB(*) OUTPUT(*PRINT) OPTION(*JOBLOG)
             MONMSG     MSGID(CPF0000)
             OVRPRTF    FILE(QPPGMDMP) HOLD(*YES)
             DMPCLPGM
             MONMSG     MSGID(CPF0000)
             DLTOVR     FILE(QPJOBLOG)
             MONMSG     MSGID(CPF0000)
             DLTOVR     FILE(QPPGMDMP)
             MONMSG     MSGID(CPF0000)

   /* Process Exception Message */
             RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)
             MONMSG     MSGID(CPF0000)
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
             MONMSG     MSGID(CPF0000)

/* Program Exit */
 LBL990:     RETURN
             ENDPGM


-----Original Message-----
From: Douglas Handy [mailto:dhandy1@bellsouth.net]
Sent: Thursday, June 22, 2000 6:54 PM
To: MIDRANGE-L@midrange.com
Subject: Re: SAVRSTLIB


Al,

>If I'm not mistaken, once you issue the SAVRSTLIB command on the source

>system, everything else happens under the covers.

Hmm, I guess you are right again.  This means you'd have to put the
VCP on each target machine which makes implementation and maintenance
much harder. 

Sorry,
Doug
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to
MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator:
david@midrange.com
+---
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to
MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator:
david@midrange.com
+---
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.