home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hall of Fame
/
HallofFameCDROM.cdr
/
3x400
/
cpyform.lzh
/
CPYFORM.EXE
/
arc
/
CPYFORM.CLP
next >
Wrap
Text File
|
1987-07-13
|
10KB
|
235 lines
/* CPP for CPYFORM "Copy Formtype" Command in JSYSSRC library. */
/* */
/* See also: CPYFORMR in QRPGSRC.JSYSSRC */
/* */
/* Written by: Philip R. Widing */
/* Jarl Extrusions, Inc. */
/* Elizabethton, TN 37644-0871 */
/* 615-543-3561 */
/* */
/* 01 PRW 87-02-16 First pass... */
/* 02 PRW 87-02-17 handle 100 spool files; send status message */
/* 03 PRW 87-02-17 Add MONMSG CPF3344 */
/* 04 PRW 87-02-18 Add MONMSG CPF3344 ON DSPSPLFA CMD */
/* 05 PRW 87-07-13 Use *DTAQ to receive SPLF values... */
/* Use *JOB OUTQ as default ! */
PGM (&QOUTQ &FORMTYPE &QFILE &MBR &MBROPT +
&CNLSPLF &PRTATR )
DCL &QOUTQ *CHAR 20
DCL &FORMTYPE *CHAR 10
DCL &QFILE *CHAR 20
DCL &MBR *CHAR 10
DCL &MBROPT *CHAR 8
DCL &CNLSPLF *CHAR 4
DCL &PRTATR *CHAR 6
DCL &OUTQ *CHAR 10
DCL &OUTQLIB *CHAR 10
DCL &FILE *CHAR 10
DCL &LIBR *CHAR 10
DCL &JOBN *CHAR 6
DCL &JOUTQ *CHAR 10
DCL &JOUTQLIB *CHAR 10
DCL &COUNT *DEC ( 15 5)
DCL &COUNT50 *DEC ( 5 0)
DCL &COUNT$ *CHAR 5
DCL &X *DEC ( 5 0)
DCL &Y *DEC ( 5 0)
DCL &Z *DEC ( 5 0)
DCL &L_PRT *LGL ( 1 )
DCL &L_ALL *LGL ( 1 )
DCL &TRUE *LGL ( 1 ) '1'
DCL &FALSE *LGL ( 1 ) '0'
/* Data Queue Variables */
DCL &QNAME *CHAR 10 'DTAQ128'
DCL &QLIB *CHAR 10 'QTEMP'
DCL &QRECV *DEC ( 5 0) 0
DCL &QDATA *CHAR 128 ' '
DCL &QWAIT *DEC ( 5 0) 0
/* Data Queue Content Variables */
DCL &SPLFILE *CHAR 10
DCL &SPLNBR *CHAR 4
DCL &SPLJOB *CHAR 10
DCL &SPLUSR *CHAR 10
DCL &SPLJBN *CHAR 6
DCL &ERRMSGID *CHAR 7
DCL &MSGDTA *CHAR 100
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
/* ANY ERROR NOT MONITORED FOR */
RTVJOBA NBR( &JOBN ) OUTQ(&JOUTQ) OUTQLIB(&JOUTQLIB)
CHGVAR &OUTQ %SST(&QOUTQ 1 10 )
CHGVAR &OUTQLIB %SST(&QOUTQ 11 10 )
IF (&OUTQ *EQ *JOB) THEN( DO )
/* 1 */ CHGVAR &OUTQ &JOUTQ
CHGVAR &OUTQLIB &JOUTQLIB
/* 1 */ ENDDO
CHGVAR &FILE %SST(&QFILE 1 10 )
CHGVAR &LIBR %SST(&QFILE 11 10 )
IF (&PRTATR = *YES) CHGVAR &PRTATR *FIRST
IF ((&PRTATR = *FIRST) *OR (&PRTATR = *ALL)) +
CHGVAR &L_PRT &TRUE
IF (&PRTATR = *ALL) +
CHGVAR &L_ALL &TRUE
IF (&MBR = *FILE) +
CHGVAR &MBR &FILE
BEGIN:
OVRPRTF QPrtSplQ HOLD(*YES) SECURE(*YES)
DSPOUTQ OUTQ(&OUTQ.&OUTQLIB) OUTPUT(*LIST)
CPYSPLF FILE(QPRTSPLQ) TOFILE(&FILE.&LIBR) +
JOB(*) SPLNBR(*LAST) +
TOMBR(JN *CAT &JOBN) MBROPT(*REPLACE) +
CTLCHAR(*FCFC)
CNLSPLF FILE(QPRTSPLQ) JOB(*) SPLNBR(*LAST)
CRT_DTAQ:
CRTDTAQ &QNAME.&QLIB MAXLEN(128) SEQ(*FIFO) +
TEXT('INTRAJOB DTAQ')
MONMSG CPF9870 EXEC( DO ) /* ALREADY EXISTS */
/* 1 */ /* ENSURE *DTAQ IS EMPTY ! */
CHGVAR &QWAIT 0
CLR_DTAQ:
CALL QRCVDTAQ +
PARM( &QNAME +
&QLIB +
&QRECV +
&QDATA +
&QWAIT )
IF (&QRECV *NE 0) THEN( GOTO CLR_DTAQ )
/* 1 */ ENDDO
CHGVAR &COUNT 0
OVRDBF FILE(DSPOUTQ) TOFILE(&FILE.&LIBR) MBR(JN *CAT +
&JOBN) NBRRCDS(20) SEQONLY(*YES 20)
CALL PGM(CPYFORMR) PARM(&FORMTYPE &COUNT)
/* */
/* The call above reads the outq listing and prepares the list of */
/* spool files to load into the data base file. */
/* */
RMVM &FILE.&LIBR MBR(JN *CAT &JOBN)
CHGVAR &X 0
CHGVAR &QWAIT 0
LOOP: CHGVAR &X (&X+1)
IF (&X *GT &COUNT) THEN( GOTO EXIT_LOOP )
CALL QRCVDTAQ +
PARM( &QNAME +
&QLIB +
&QRECV +
&QDATA +
&QWAIT )
IF (&QRECV *EQ 0) THEN( GOTO EXIT_LOOP )
CHGVAR &SPLFILE %SST(&QDATA 1 10)
CHGVAR &SPLNBR %SST(&QDATA 11 4)
CHGVAR &SPLJOB %SST(&QDATA 15 10)
CHGVAR &SPLUSR %SST(&QDATA 25 10)
CHGVAR &SPLJBN %SST(&QDATA 35 6)
CHGVAR &COUNT50 &X
CHGVAR &COUNT$ &COUNT50
CHGVAR &Y 1
ZSUP1:
IF ((&Y *GT 4) *OR (%SST(&COUNT$ &Y 1) *NE '0')) +
GOTO SEND_STS
CHGVAR &Y (&Y+1)
GOTO ZSUP1
SEND_STS:
CHGVAR &Z (6-&Y)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA( +
%SST(&COUNT$ &Y &Z) +
*CAT '. Copying ' *CAT &SPLFILE *TCAT '.' *CAT +
&SPLNBR *CAT ', ' *CAT &SPLJOB *TCAT '.' +
*CAT &SPLUSR *TCAT '.' *CAT &SPLJBN *CAT ', to ' *CAT +
&FILE *TCAT '.' *CAT &LIBR *TCAT ', Mbr ' *CAT &MBR ) +
MSGTYPE(*STATUS) TOPGMQ(*EXT)
CPYSPLF FILE(&SPLFILE) JOB(&SPLJOB.&SPLUSR.&SPLJBN) +
SPLNBR(&SPLNBR) TOFILE(&FILE.&LIBR) +
TOMBR(&MBR) MBROPT(&MBROPT) CTLCHAR(*FCFC)
/* 1 */ MONMSG MSGID( CPF3309 CPF3342 CPF3344 ) EXEC(DO)
GOTO CPF3300
/* 1 */ ENDDO
/* 1 */ IF (&L_PRT) THEN( DO )
DSPSPLFA FILE(&SPLFILE) +
JOB(&SPLJOB.&SPLUSR.&SPLJBN) +
SPLNBR(&SPLNBR) OUTPUT(*LIST)
/* 2 */ MONMSG MSGID( CPF3309 CPF3342 CPF3344 ) EXEC(DO)
GOTO CPF3300
/* 2 */ ENDDO
/* 1 */ ENDDO
IF (&L_PRT *AND (*NOT &L_ALL)) CHGVAR &L_PRT &FALSE
/* 1 */ IF ((&X = &COUNT) *AND (&PRTATR = *LAST)) DO
DSPSPLFA FILE(&SPLFILE) +
JOB(&SPLJOB.&SPLUSR.&SPLJBN) +
SPLNBR(&SPLNBR) OUTPUT(*LIST)
/* 2 */ MONMSG MSGID( CPF3309 CPF3342 CPF3344 ) EXEC(DO)
GOTO CPF3300
/* 2 */ ENDDO
/* 1 */ ENDDO
/* 1 */ IF (&CNLSPLF = *YES) DO
CNLSPLF FILE(&SPLFILE) JOB(&SPLJOB.&SPLUSR.&SPLJBN) +
SPLNBR(&SPLNBR)
/* 2 */ MONMSG MSGID( CPF3309 CPF3342 CPF3344 ) EXEC(DO)
GOTO CPF3300
/* 2 */ ENDDO
/* 1 */ ENDDO
CHGVAR &MBROPT *ADD
GOTO LOOP
EXIT_LOOP:
CHGVAR &COUNT50 &COUNT
CHGVAR &COUNT$ &COUNT50
CHGVAR &Y 1
ZSUP2:
IF ((&Y > 4) *OR (%SST(&COUNT$ &Y 1) *NE '0')) +
GOTO SEND_MSG
CHGVAR &Y (&Y+1)
GOTO ZSUP2
SEND_MSG:
SNDPGMMSG MSGID(CPI9801) MSGF(QCPFMSG.QSYS) +
TOPGMQ(*EXT) MSGTYPE(*STATUS)
CHGVAR &Z (6-&Y)
SNDPGMMSG MSG( +
%SST(&COUNT$ &Y &Z) +
*BCAT 'SPLFs copied to ' *CAT +
&FILE *TCAT '.' *CAT &LIBR *TCAT ', Mbr=' *CAT +
&MBR *TCAT ', Cancel=' *CAT +
&CNLSPLF *TCAT '.')
RETURN
CPF3300:
RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&ERRMSGID)
SNDPGMMSG MSGID(&ERRMSGID) MSGF(QCPFMSG) +
MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*INFO)
GOTO LOOP
ERROR: RCVMSG MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&ERRMSGID)
IF (&ERRMSGID *EQ ' ') GOTO ESCAPE
SNDPGMMSG MSGID(&ERRMSGID) MSGF(QCPFMSG) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
GOTO ERROR
/* Loop back for additional diagnostics */
ESCAPE: RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&ERRMSGID)
SNDPGMMSG MSGID(&ERRMSGID) MSGF(QCPFMSG) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
ENDPGM