CBL NODYNAM,LIB,OBJECT,RENT,RES,APOST * * * ------------------------------------------------------------- * IDENTIFICATIONDIVISION. * ------------------------------------------------------------- * PROGRAM-ID. CSQ4BVJ1. *REMARKS ***************************************************************** * @START_COPYRIGHT@ * * Statement: Licensed Materials - Property of IBM * * * * 5695-137 * * (C) Copyright IBM Corporation. 1996, 1997 * * * * Status: Version 1 Release 2 * * @END_COPYRIGHT@ * * * * Module Name : CSQ4BVJ1 * * * * Environment : MVS Batch; COBOL II * * * * Description : Sample program to get a number of messages * * from a queue. * * * * Notes : The maximum message length is 65536. Messages * * greater than this will not cause an error but * * will be truncated. * * The syncpoint option is ignored when browsing. * * * ***************************************************************** * * * Program Logic * * -------------- * * * * * * main * * ---- * * * * Move parameters into corresponding variables. * * If parameters are invalid then * * Call USAGE-ERROR and exit. * * * * Display the parameters passed to the program. * * * * Connect to the queue manager. * * If connection failed then * * Call DISPLAY-ERROR-MESSAGE and exit * * * * Open the specified message queue (MQOPEN). * * If open failed then * * Disconnect from queue manager * * Call DISPLAY-ERROR-MESSAGE and exit * * Endif. * * * * Set the get message options. * * Loop while the messages are received * * Get message from queue (MQGET) * * If get failed * * Call DISPLAY-ERROR-MESSAGE * * Break from loop * * Else * * Display the message received * * Endif * * Endloop. * * Display number of messages got from queue. * * * * If syncpoint variable set then * * Execute syncpoint. * * * * Close the message queue. * * If close failed then * * Call DISPLAY-ERROR-MESSAGE. * * * * Disconnect from the queue manager. * * If disconnect failed then * * Call DISPLAY-ERROR-MESSAGE. * * * * Exit program. * * * * * *---------------------------------------------------------------* * * * USAGE-ERROR * * ----------- * * * * Print message showing correct usage for program. * * * * * *---------------------------------------------------------------* * * * DISPLAY-ERROR-MESSAGE * * --------------------- * * * * Create error message and display. * * * * * ***************************************************************** * ------------------------------------------------------------- * ENVIRONMENTDIVISION. * ------------------------------------------------------------- * * ------------------------------------------------------------- * DATADIVISION. * ------------------------------------------------------------- * FILESECTION. * ------------------------------------------------------------- * WORKING-STORAGESECTION. * ------------------------------------------------------------- * * * W00 - General work fields * 01 W00-RETURN-CODE PIC S9(4) BINARYVALUEZERO. 01 W00-LOOP PIC S9(9) BINARYVALUE0. 01 W00-NUMGETS PIC S9(9) BINARYVALUE0. 01 W00-ERROR-MESSAGE PIC X(48) VALUESPACES. 01 W00-MSGBUFFER. 02 W00-MSGBUFFER-ARRAY PIC X(1) OCCURS65536 TIMES. 01 W00-MSGLENGTH PIC S9(9) BINARYVALUE65536. 01 W00-DATALENGTH PIC S9(9) BINARYVALUE0. * * Parameter variables * 01 W00-QMGR PIC X(48). 01 W00-QNAME PIC X(48). 01 W00-NUMMSGS-CHAR PIC X(4) VALUESPACES. 01 W00-NUMMSGS PIC S9(9) BINARYVALUE1. 01 W00-BROWSE-GET PIC X(1) VALUE'D'. 88 BROWSE-GET VALUE'B'. 88 DESTRUCTIVE-GET VALUE'D'. 01 W00-SYNCPOINT PIC X(1) VALUE'N'. 88 SYNCPOINT VALUE'S'. 88 NO-SYNCPOINT VALUE'N'. * * W03 - API fields * 01 W03-HCONN PIC S9(9) BINARYVALUE0. 01 W03-HOBJ PIC S9(9) BINARYVALUE0. 01 W03-OPENOPTIONS PIC S9(9) BINARY. 01 W03-COMPCODE PIC S9(9) BINARY. 01 W03-REASON PIC S9(9) BINARY. * * API control blocks * 01 MQM-OBJECT-DESCRIPTOR.
COPY CMQODV. 01 MQM-MESSAGE-DESCRIPTOR.
COPY CMQMDV. 01 MQM-GET-MESSAGE-OPTIONS.
COPY CMQGMOV. * * MQV contains constants (for filling in the control blocks) * and return codes (for testing the result of a call) * 01 MQM-CONSTANTS.
COPY CMQV SUPPRESS. * * * ------------------------------------------------------------- * LINKAGESECTION. * ------------------------------------------------------------- * 01 PARMDATA. 05 PARM-LEN PIC S9(03) BINARY. 05 PARM-STRING PIC X(100). *
EJECT * ------------------------------------------------------------- * PROCEDUREDIVISIONUSING PARMDATA. * ------------------------------------------------------------- * * ------------------------------------------------------------- *
A-MAIN SECTION. * ------------------------------------------------------------- * * * If no parameters passed to program then display * error message and exit * IF PARM-LEN = 0THEN PERFORM USAGE-ERROR MOVE8TO W00-RETURN-CODE GOTO A-MAIN-END END-IF. * * Move parameters into corresponding variables * UNSTRING PARM-STRING DELIMITEDBYALL',' INTO W00-QMGR
W00-QNAME
W00-NUMMSGS-CHAR
W00-BROWSE-GET
W00-SYNCPOINT. MOVE W00-NUMMSGS-CHAR TO W00-NUMMSGS. * * Display parameters to be used in the program * DISPLAY'==========================================='. DISPLAY'PARAMETERS PASSED :'. DISPLAY' QMGR - ', W00-QMGR. DISPLAY' QNAME - ', W00-QNAME. DISPLAY' NUMMSGS - ', W00-NUMMSGS. DISPLAY' GET - ', W00-BROWSE-GET. DISPLAY' SYNCPOINT - ', W00-SYNCPOINT. DISPLAY'==========================================='. * * * * Connect to the queue manager * CALL'MQCONN'USING W00-QMGR
W03-HCONN
W03-COMPCODE
W03-REASON. * * If connection failed then display error message and exit * IF (W03-COMPCODE NOT = MQCC-OK) THEN MOVE'MQCONN'TO W00-ERROR-MESSAGE PERFORM DISPLAY-ERROR-MESSAGE MOVE W03-REASON TO W00-RETURN-CODE GOTO A-MAIN-END END-IF. DISPLAY'MQCONN SUCCESSFUL'. * * * Open the queue for input shared and browse * COMPUTE W03-OPENOPTIONS = MQOO-INPUT-SHARED +
MQOO-BROWSE. MOVE W00-QNAME TO MQOD-OBJECTNAME. * CALL'MQOPEN'USING W03-HCONN
MQOD
W03-OPENOPTIONS
W03-HOBJ
W03-COMPCODE
W03-REASON. * * If open failed display error message and exit * IF (W03-COMPCODE NOT = MQCC-OK) THEN MOVE'MQOPEN'TO W00-ERROR-MESSAGE PERFORM DISPLAY-ERROR-MESSAGE MOVE W03-REASON TO W00-RETURN-CODE GOTO A-MAIN-DISCONNECT END-IF. DISPLAY'MQOPEN SUCCESSFUL'. * * * Setup MQGMO-OPTIONS depending on parameters passed * into program * COMPUTE MQGMO-OPTIONS = MQGMO-NO-WAIT +
MQGMO-ACCEPT-TRUNCATED-MSG. IF SYNCPOINT AND DESTRUCTIVE-GET THEN ADD MQGMO-SYNCPOINT TO MQGMO-OPTIONS ELSE ADD MQGMO-NO-SYNCPOINT TO MQGMO-OPTIONS END-IF. * IF BROWSE-GET THEN ADD MQGMO-BROWSE-FIRST TO MQGMO-OPTIONS END-IF. * * Loop getting the messages * MSGID and CORRELID are reset before each MQGET * PERFORMWITHTESTBEFOREVARYING W00-LOOP FROM0BY1 UNTIL (W00-LOOP >= W00-NUMMSGS) * MOVE MQMI-NONE TO MQMD-MSGID MOVE MQCI-NONE TO MQMD-CORRELID * CALL'MQGET'USING W03-HCONN
W03-HOBJ
MQMD
MQGMO
W00-MSGLENGTH
W00-MSGBUFFER
W00-DATALENGTH
W03-COMPCODE
W03-REASON * * If get failed then display error message and * break out of the loop. * Otherwise display the message received * IF (W03-COMPCODE NOT = MQCC-OK) AND
(W03-REASON NOT = MQRC-TRUNCATED-MSG-ACCEPTED) THEN MOVE'MQGET'TO W00-ERROR-MESSAGE PERFORM DISPLAY-ERROR-MESSAGE MOVE W00-NUMMSGS TO W00-LOOP MOVE W03-REASON TO W00-RETURN-CODE ELSE IF W03-REASON = MQRC-TRUNCATED-MSG-ACCEPTED THEN DISPLAY W00-LOOP, ' : ', W00-DATALENGTH, ' : ', 'Truncated to ', W00-MSGLENGTH, ' : ',
W00-MSGBUFFER(1:W00-MSGLENGTH) ELSE DISPLAY W00-LOOP, ' : ', W00-DATALENGTH, ' : ',
W00-MSGBUFFER(1:W00-DATALENGTH) END-IF ADD1TO W00-NUMGETS END-IF * * If browsing the queue then change the * MQGMO browse options * IF (W00-LOOP = 0) AND BROWSE-GET THEN SUBTRACT MQGMO-BROWSE-FIRST FROM MQGMO-OPTIONS ADD MQGMO-BROWSE-NEXT TO MQGMO-OPTIONS END-IF * END-PERFORM. * * Display the number of messages successfully got * from the queue. * DISPLAY W00-NUMGETS, ' MESSAGES GOT FROM QUEUE'. * * * If program started with syncpoint and destructive get * selected then execute syncpoint * IF SYNCPOINT AND DESTRUCTIVE-GET THEN CALL'MQCMIT'USING W03-HCONN
W03-COMPCODE
W03-REASON IF (W03-COMPCODE NOT = MQCC-OK) THEN MOVE'MQCMIT'TO W00-ERROR-MESSAGE PERFORM DISPLAY-ERROR-MESSAGE MOVE W03-REASON TO W00-RETURN-CODE ELSE DISPLAY'MQCMIT SUCCESSFUL' END-IF END-IF. * * * Close the queue * CALL'MQCLOSE'USING W03-HCONN
W03-HOBJ
MQCO-NONE
W03-COMPCODE
W03-REASON. IF (W03-COMPCODE NOT = MQCC-OK) THEN MOVE'MQCLOSE'TO W00-ERROR-MESSAGE PERFORM DISPLAY-ERROR-MESSAGE MOVE W03-REASON TO W00-RETURN-CODE ELSE DISPLAY'MQCLOSE SUCCESSFUL' END-IF. * * *
A-MAIN-DISCONNECT. * * Disconnect from the queue manager * CALL'MQDISC'USING W03-HCONN
W03-COMPCODE
W03-REASON. IF (W03-COMPCODE NOT = MQCC-OK) THEN MOVE'MQDISC'TO W00-ERROR-MESSAGE PERFORM DISPLAY-ERROR-MESSAGE MOVE W03-REASON TO W00-RETURN-CODE ELSE DISPLAY'MQDISC SUCCESSFUL' END-IF. *
A-MAIN-END. * * MOVE W00-RETURN-CODE TORETURN-CODE STOPRUN. * * ------------------------------------------------------------- *
USAGE-ERROR SECTION. * ------------------------------------------------------------- * * DISPLAY'==================================================' DISPLAY'PARAMETERS FOR PROGRAM :'. DISPLAY' QMGR - QUEUE MANGER'. DISPLAY' QNAME - QUEUE NAME'. DISPLAY' NUMMSGS - NUMBER OF MESSAGES'. DISPLAY' GET - (B)ROWSE / (D)ESTRUCTIVE GET'. DISPLAY' SYNCPOINT - (N)O / (S)YNCPOINT'. DISPLAY'=================================================='. *
USAGE-ERROR-END. * * RETURN TO PERFORMING FUNCTION * EXIT. * * ------------------------------------------------------------- *
DISPLAY-ERROR-MESSAGE SECTION. * ------------------------------------------------------------- * * DISPLAY'************************************************'. DISPLAY'* ', W00-ERROR-MESSAGE. DISPLAY'* COMPLETION CODE : ', W03-COMPCODE. DISPLAY'* REASON CODE : ', W03-REASON. DISPLAY'************************************************'. *
DISPLAY-ERROR-MESSAGE-END. * * RETURN TO PERFORMING FUNCTION * EXIT. * * ------------------------------------------------------------- * * END OF PROGRAM * ------------------------------------------------------------- *
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12Bemerkung:
(vorverarbeitet am 2026-09-27)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.