|
We have several depending on the program function. With/without display file and self submitting With/without printer determination
/* ------------------------------------------------------------------*/ /* FWDPGMMSG Forward a program message to the caller */ /* ------------------------------------------------------------------*/ FWDPGMMSG: PGM /* ------------------------------------------------------------------*/ /* Message variables */ DCL &MSG *CHAR 512 /* Message text */ DCL &MSGDTA *CHAR 132 /* Message data */ DCL &MSGF *CHAR 10 /* Message file name */ DCL &MSGFLIB *CHAR 10 /* Message file library name */ DCL &MSGID *CHAR 7 /* Message reference ID number */ DCL &MSGKEY *CHAR 4 /* Message reference key received */ DCL &MSGTYPE *CHAR 8 /* Message type */ DCL &RTNTYPE *CHAR 2 /* Message return type code */ DCL &SENDER *CHAR 80 /* Message sender data */ DCL &TOPGMQ *CHAR 10 /* Program message queue name */ DCL &MSGCNT *DEC LEN(3 0) /* Message counter */ DCL &MSGMAX *DEC LEN(3 0) VALUE(25) /* Maximum messages*/
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ENDPGM)) /* ------------------------------------------------------------------*/ /* Determine the calling programs name */ /* ------------------------------------------------------------------*/ SNDPGMMSG MSG('Send dummy message') + MSGTYPE(*RQS) KEYVAR(&MSGKEY)
RCVMSG PGMQ(*PRV) MSGKEY(&MSGKEY) SENDER(&SENDER)
CHGVAR VAR(&TOPGMQ) VALUE(%SST(&SENDER 56 10)) /* ------------------------------------------------------------------*/ /* Forward errors messages up the stack */ /* ------------------------------------------------------------------*/ NEXTMSG: CHGVAR VAR(&MSGCNT) VALUE(&MSGCNT + 1) + /* Increment message counter */
IF COND(&MSGCNT *GT &MSGMAX) + THEN(GOTO CMDLBL(ENDPGM)) + /* Test if counter exceeded maximum */
RCVMSG PGMQ(*PRV) MSGTYPE(*NEXT) MSGKEY(*TOP) + MSG(&MSG) MSGDTA(&MSGDTA) MSGID(&MSGID) + RTNTYPE(&RTNTYPE) MSGF(&MSGF) + MSGFLIB(&MSGFLIB) + /* Receive the next available message */
IF COND((&MSGID *EQ ' ') *AND (&MSG *EQ ' ')) + THEN(GOTO CMDLBL(ENDPGM)) + /* No more messages */
IF COND(&MSGID *EQ 'CPF9999 ') + THEN(GOTO CMDLBL(NEXTMSG)) + /* Filter out function checks */ /* ------------------------------------------------------------------*/ /* Determine typoe of message being processed */ /* ------------------------------------------------------------------*/ IF COND(&RTNTYPE *EQ '01') + THEN(CHGVAR VAR(&MSGTYPE) VALUE('*COMP')) + /* Completion message */
IF COND(&RTNTYPE *EQ '02') + THEN(CHGVAR VAR(&MSGTYPE) VALUE('*DIAG')) + /* Diagnostic messages */
IF COND(&RTNTYPE *EQ '04') + THEN(CHGVAR VAR(&MSGTYPE) VALUE('*INFO')) + /* Informational messages */
IF COND(&RTNTYPE *EQ '14') + THEN(CHGVAR VAR(&MSGTYPE) VALUE('*NOTIFY')) + /* Status messages */
IF COND(&RTNTYPE *EQ '15') + THEN(CHGVAR VAR(&MSGTYPE) VALUE('*DIAG')) + /* Convert *ESCAPE to diagnostic */ /* ------------------------------------------------------------------*/ /* Forward the message and loop back */ /* ------------------------------------------------------------------*/ SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) TOPGMQ(*PRV &TOPGMQ) + MSGTYPE(&MSGTYPE)
GOTO NEXTMSG /* ------------------------------------------------------------------*/ ENDPGM: ENDPGM /* End of program specifications */ /* ------------------------------------------------------------------*/
/* ------------------------------------------------------------------*/ /* $$$$RGZ Reorganize file by primary index */ /* ------------------------------------------------------------------*/ /* NOTICE: THIS PROGRAM IS LICENSED MATERIAL AND THE PROPERTY OF: */ /* PROGRAMMER. . . . . .:James W. Kilgore */ /* DATE WRITTEN. . . . .:11/02/93 */ /* ------------------------------------------------------------------*/ $$$$RGZ: PGM /* ------------------------------------------------------------------*/ /* Declare the program variables and copyright notice */ /* ------------------------------------------------------------------*/ DCL ©RIGHT *CHAR 128 + VALUE('$$$$RGZ (c) Copyright 1993, + Licensed materials and the property of: + James W. Kilgore; All rights reserved.') /* ------------------------------------------------------------------*/ /* Job attributes */ DCL &JOB *CHAR 10 /* Job name */ DCL &JOBUSER *CHAR 10 /* Job user */ DCL &JOBNBR *CHAR 6 /* Job number */ DCL &JOBENDSTS *CHAR 1 /* End job request */ /* ------------------------------------------------------------------*/ /* Global message monitor */
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(SNDERR)) MONMSG MSGID(MCH0000) EXEC(GOTO CMDLBL(SNDERR)) /* ------------------------------------------------------------------*/ /* Test for system shutdown */ /* ------------------------------------------------------------------*/ RTVJOBA JOB(&JOB) USER(&JOBUSER) NBR(&JOBNBR) ENDSTS(&JOBENDSTS)
IF COND(&JOBENDSTS *EQ '1') THEN(GOTO CMDLBL(ENDPGM)) /* ------------------------------------------------------------------*/ /* Perform the reorganization process */ /* ------------------------------------------------------------------*/ SNDSTSMSG MSGTEXT('$$$$RGZ command is executing')
RGZPFM FILE(*LIBL/$$$$) KEYFILE(*LIBL/$$$$KEY $$$$KEY) MONMSG MSGID(CPF2995 CPF2981) /* No data in member */ GOTO ENDPGM /* ------------------------------------------------------------------*/ /* Display error messages */ /* ------------------------------------------------------------------*/ NEVERDO: CHGVAR ©RIGHT ©RIGHT /* use or lose */ SNDERR: CALL FWDPGMMSG SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGTYPE(*ESCAPE) + MSGDTA('$$$$RGZ ended in error. See previous messages') /* ------------------------------------------------------------------*/ ENDPGM: ENDPGM /* End of program specifications */ /* ------------------------------------------------------------------*/
I am looking for a good common CL program skeleton or frame that I can use for my most CLPs. For example you need an error message handling in nearly each CL program, this error message handling statements (DCL/CHGVAR/GOTO etc.) I would expect in a "skeleton or frame" CLP.
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.