|
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
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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.