products/Sources/formale Sprachen/COBOL/verschiedene-Autoren/MQ-Series image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: csq4cvj1.cob   Sprache: Cobol

Original von: verschiedene©

CBL XOPTS(ANSI85)
CBL NODYNAM,LIB,OBJECT,RENT,RES,APOST
      *                                                               *
      * ------------------------------------------------------------- *
       IDENTIFICATION DIVISION.
      * ------------------------------------------------------------- *
       PROGRAM-ID. CSQ4CVJ1.
      *REMARKS                                                        *
      *****************************************************************
      * @START_COPYRIGHT@                                             *
      *   Statement:     Licensed Materials - Property of IBM         *
      *                                                               *
      *                  5695-137                                     *
      *                  (C) Copyright IBM Corporation. 1993. 1997    *
      *                                                               *
      *   Status:        Version 1 Release 2                          *
      * @END_COPYRIGHT@                                               *
      *                                                               *
      *  Module Name           : CSQ4CVJ1                             *
      *                                                               *
      *  Environment           : CICS/ESA Version 3.3; COBOL II       *
      *                                                               *
      *  CICS Transaction Name : MVGT                                 *
      *                                                               *
      *  Description : Sample program to get a number of messages     *
      *                from a queue. These messages are written to    *
      *                a CICS temporary storage queue.                *
      *                                                               *
      *  Notes       : The maximum message length is 9950.  Messages  *
      *                greater than this will not cause an error but  *
      *                will be truncated.                             *
      *                The syncpoint option is ignored when browsing. *
      *                                                               *
      *****************************************************************
      *                                                               *
      *                       Program  Logic                          *
      *                       --------------                          *
      *                                                               *
      *                                                               *
      *  MAIN                                                         *
      *  ----                                                         *
      *                                                               *
      *   Receive the parameter list from CICS.                       *
      *   If parameter list is invalid then                           *
      *            Call USAGE-ERROR and exit.                         *
      *                                                               *
      *   Create a CICS temporary storage queue.                      *
      *                                                               *
      *   Open the specified message queue (MQOPEN).                  *
      *   If open failed then                                         *
      *            Call DISPLAY-ERROR-MESSAGE and exit.               *
      *                                                               *
      *   Set the get message options.                                *
      *   Loop while the messages are received                        *
      *            Get message from queue (MQGET)                     *
      *            If get failed                                      *
      *                     Call DISPLAY-MESSAGE                      *
      *                     Break from loop                           *
      *            Else                                               *
      *                     Put the message to the CICS TSQ           *
      *            Endif                                              *
      *   Endloop.                                                    *
      *   If no error occurred                                        *
      *      Display number of messages put to the queue.             *
      *   Endif                                                       *
      *                                                               *
      *   If syncpoint variable set then                              *
      *            Execute syncpoint.                                 *
      *                                                               *
      *   Close the message queue.                                    *
      *   If close failed then                                        *
      *            Call DISPLAY-ERROR-MESSAGE.                        *
      *                                                               *
      *   Return control to CICS.                                     *
      *                                                               *
      *                                                               *
      *---------------------------------------------------------------*
      *                                                               *
      *  USAGE-ERROR                                                  *
      *  -----------                                                  *
      *                                                               *
      *   Print message showing correct usage for program.            *
      *                                                               *
      *                                                               *
      *---------------------------------------------------------------*
      *                                                               *
      *  DISPLAY-ERROR-MESSAGE                                        *
      *  ---------------------                                        *
      *                                                               *
      *   Create error message.                                       *
      *   Print error message to CICS screen.                         *
      *                                                               *
      *                                                               *
      *---------------------------------------------------------------*
      *                                                               *
      *  DISPLAY-MESSAGE                                              *
      *  ---------------                                              *
      *                                                               *
      *   Sends valid message to CICS screen.                         *
      *                                                               *
      *                                                               *
      *****************************************************************
      * ------------------------------------------------------------- *
       ENVIRONMENT DIVISION.
      * ------------------------------------------------------------- *
      * ------------------------------------------------------------- *
       DATA DIVISION.
      * ------------------------------------------------------------- *
       FILE SECTION.
      * ------------------------------------------------------------- *
       WORKING-STORAGE SECTION.
      * ------------------------------------------------------------- *
      *
      *    W00 - General work variables
      *
       01  W00-RETURN-CODE             PIC S9(4) BINARY VALUE ZERO.
       01  W00-LOOP                    PIC S9(9) BINARY VALUE 0.
       01  W00-LOOP-CHAR               PIC X(9) VALUE SPACES.
       01  W00-NUMGETS                 PIC S9(9) BINARY VALUE 0.
       01  W00-NUMGETS-CHAR            PIC X(9) VALUE SPACES.
       01  W00-ERROR-MESSAGE           PIC X(10) VALUE SPACES.
       01  W00-MESSAGE                 PIC X(80) VALUE SPACES.
       01  W00-TSQMESSAGE              PIC X(9999) VALUE SPACES.
       01  W00-TSQMESSAGE-LENGTH       PIC S9(4) BINARY VALUE 0.
       01  W00-MSGBUFFER.
         02  W00-MSGBUFFER-ARRAY         PIC X(1) OCCURS 9950 TIMES.
       01  W00-DATALENGTH              PIC S9(9) BINARY VALUE 0.
       01  W00-DATALENGTH-CHAR         PIC X(9) VALUE SPACES.
      *
      *     Parameter variables
      *
       01  W00-PARM-LEN                PIC S9(03) BINARY.
       01  W00-PARM-STRING.
         02  W00-PARM-STRING-ARRAY       PIC X(1) OCCURS 100 TIMES.
      *
       01  W00-TRANSNAME               PIC X(8) VALUE SPACES.
       01  W00-QNAME                   PIC X(48) VALUE SPACES.
       01  W00-NUMMSGS-CHAR            PIC X(4) VALUE SPACES.
       01  W00-NUMMSGS                 PIC S9(9) BINARY VALUE 1.
       01  W00-MSGLENGTH               PIC S9(9) BINARY VALUE 9950.
       01  W00-MSGLENGTH-CHAR          PIC X(9) VALUE SPACES.
       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) BINARY VALUE 0.
       01  W03-HOBJ                    PIC S9(9) BINARY VALUE 0.
       01  W03-OPENOPTIONS             PIC S9(9) BINARY.
       01  W03-COMPCODE                PIC S9(9) BINARY.
       01  W03-COMPCODE-CHAR           PIC X(9) VALUE SPACES.
       01  W03-REASON                  PIC S9(9) BINARY.
       01  W03-REASON-CHAR             PIC X(9) VALUE SPACES.
      *
      *    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.
      *
      *
      *    DFHAID contains the constants used for checking for
      *    attention identifiers
      *
       COPY DFHAID SUPPRESS.
      *
      *
      * ------------------------------------------------------------- *
       LINKAGE SECTION.
      * ------------------------------------------------------------- *
           EJECT
      * ------------------------------------------------------------- *
       PROCEDURE DIVISION.
      * ------------------------------------------------------------- *
      * ------------------------------------------------------------- *
       A-MAIN SECTION.
      * ------------------------------------------------------------- *
      *
      *    Receive the parameter list from CICS
      *
           MOVE SPACES TO W00-PARM-STRING.
      *
           EXEC CICS RECEIVE
                     INTO( W00-PARM-STRING )
                     LENGTH( W00-PARM-LEN )
           END-EXEC.
      *
      *
      *    If parameter list is invalid then display
      *    error message and exit program
      *
           IF (W00-PARM-LEN < 15) THEN
              PERFORM USAGE-ERROR
              MOVE 8 TO W00-RETURN-CODE
              GO TO A-MAIN-END
           END-IF.
      *
           IF ((W00-PARM-STRING-ARRAY(5)  NOT = ','OR
               (W00-PARM-STRING-ARRAY(10) NOT = ','OR
               (W00-PARM-STRING-ARRAY(12) NOT = ','OR
               (W00-PARM-STRING-ARRAY(14) NOT = ',')) THEN
      *
              PERFORM USAGE-ERROR
              MOVE 8 TO W00-RETURN-CODE
              GO TO A-MAIN-END
           END-IF.
      *
           UNSTRING W00-PARM-STRING DELIMITED BY ALL ','
                        INTO W00-TRANSNAME
                             W00-NUMMSGS-CHAR
                             W00-BROWSE-GET
                             W00-SYNCPOINT
                             W00-QNAME.
           MOVE W00-NUMMSGS-CHAR TO W00-NUMMSGS.
      *
      *    Create a CICS temporary storage queue to hold
      *    all the messages received from the queue
      *
           EXEC CICS IGNORE CONDITION QIDERR END-EXEC.
           EXEC CICS IGNORE CONDITION LENGERR END-EXEC.
           EXEC CICS DELETEQ TS QUEUE( W00-TRANSNAME ) END-EXEC.
      *
      *
      *
      *    Open 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
              GO TO A-MAIN-END
           END-IF.
      *
      *
      *
      *    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.
      *    The message ID and Correl ID
      *    are blanked before each MQGET.
      *
           PERFORM WITH TEST BEFORE VARYING W00-LOOP FROM 0 BY 1
               UNTIL (W00-LOOP >= W00-NUMMSGS)
      *
               MOVE SPACES    TO W00-MSGBUFFER
               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, display the error message and
      *        break out of the loop.
      *        Otherwise put the message to the CICS
      *        temporary storage queue.
      *
               ADD 1 TO W00-NUMGETS
               IF (W03-COMPCODE = MQCC-FAILED) THEN
                  MOVE W00-NUMGETS TO W00-NUMGETS-CHAR
                  MOVE W03-COMPCODE TO W03-COMPCODE-CHAR
                  MOVE W03-REASON   TO W03-REASON-CHAR
      *
                  MOVE SPACES TO W00-MESSAGE
                  STRING 'MQGET ', W00-NUMGETS-CHAR, ' failed'
                         ' * CC : ', W03-COMPCODE-CHAR,
                         ' * RC : ', W03-REASON-CHAR, ' *'
                         DELIMITED BY SIZE INTO W00-MESSAGE
                  PERFORM DISPLAY-MESSAGE
                  MOVE W00-NUMMSGS TO W00-LOOP
      *
               ELSE
                  MOVE W00-LOOP       TO W00-LOOP-CHAR
                  MOVE W00-DATALENGTH TO W00-DATALENGTH-CHAR
                  MOVE W00-MSGLENGTH  TO W00-MSGLENGTH-CHAR
                  MOVE SPACES         TO W00-TSQMESSAGE
      *
                  IF W03-REASON = MQRC-TRUNCATED-MSG-ACCEPTED THEN
                     STRING W00-LOOP-CHAR, ' : ', W00-DATALENGTH-CHAR,
                            ' : Truncated to ', W00-MSGLENGTH-CHAR,
                            ' : ', W00-MSGBUFFER(1:W00-MSGLENGTH)
                            DELIMITED BY SIZE INTO W00-TSQMESSAGE
                     COMPUTE W00-TSQMESSAGE-LENGTH = W00-MSGLENGTH + 49
                  ELSE
 
                     STRING W00-LOOP-CHAR, ' : ', W00-DATALENGTH-CHAR,
                            ' : ', W00-MSGBUFFER(1:W00-DATALENGTH)
                            DELIMITED BY SIZE INTO W00-TSQMESSAGE
                     COMPUTE W00-TSQMESSAGE-LENGTH = W00-DATALENGTH + 24
                  END-IF
      *
                  EXEC CICS WRITEQ TS QUEUE( W00-TRANSNAME )
                                      FROM( W00-TSQMESSAGE )
                                      LENGTH( W00-TSQMESSAGE-LENGTH )
                  END-EXEC
               END-IF
      *
      *    If browsing the queue then change the
      *    MQGMO-OPTIONS 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.
      *
      *
      *    If no error occurred, display the number of messages
      *    successfully got from the queue
      *
           IF (W03-COMPCODE < MQCC-FAILED) THEN
              MOVE SPACES      TO W00-MESSAGE
              MOVE W00-NUMGETS TO W00-NUMGETS-CHAR
              STRING W00-NUMGETS-CHAR, ' MESSAGES GOT FROM QUEUE'
                     DELIMITED BY SIZE INTO W00-MESSAGE
              PERFORM DISPLAY-MESSAGE
           END-IF
      *
      *
      *    If program started with syncpoint and destructive get
      *    then execute syncpoint
      *
           IF SYNCPOINT AND DESTRUCTIVE-GET THEN
              EXEC CICS SYNCPOINT END-EXEC
           END-IF.
      *
      *
      *    CLOSE the queue
      *
           CALL 'MQCLOSE' USING W03-HCONN
                                W03-HOBJ
                                MQCO-NONE
                                W03-COMPCODE
                                W03-REASON.
      *
      *    If close failed then display error message
      *
           IF (W03-COMPCODE NOT = MQCC-OK) THEN
              MOVE 'MQCLOSE'  TO W00-ERROR-MESSAGE
              PERFORM DISPLAY-ERROR-MESSAGE
              MOVE W03-REASON TO W00-RETURN-CODE
           END-IF.
      *
      *
      *
       A-MAIN-END.
      *
      *
           MOVE W00-RETURN-CODE TO RETURN-CODE
           EXEC CICS RETURN
           END-EXEC.
      *
           GOBACK.
           EJECT
      *
      * ------------------------------------------------------------- *
       USAGE-ERROR SECTION.
      * ------------------------------------------------------------- *
      *
           MOVE SPACES TO W00-MESSAGE.
           MOVE '=Usage : MVGT,9999,B,S,QUEUE.NAME=' TO W00-MESSAGE.
           PERFORM DISPLAY-MESSAGE.
      *
       USAGE-ERROR-END.
      *
      *    RETURN TO PERFORMING FUNCTION
      *
           EXIT.
      *
      * ------------------------------------------------------------- *
       DISPLAY-ERROR-MESSAGE SECTION.
      * ------------------------------------------------------------- *
      *
           MOVE W03-COMPCODE TO W03-COMPCODE-CHAR.
           MOVE W03-REASON   TO W03-REASON-CHAR.
      *
           MOVE SPACES TO W00-MESSAGE.
           STRING '* ', W00-ERROR-MESSAGE,
                  ' * CC : ', W03-COMPCODE-CHAR,
                  ' * RC : ', W03-REASON-CHAR, ' *'
                  DELIMITED BY SIZE INTO W00-MESSAGE.
           PERFORM DISPLAY-MESSAGE.
      *
       DISPLAY-ERROR-MESSAGE-END.
      *
      *    RETURN TO PERFORMING FUNCTION
      *
           EXIT.
      *
      * ------------------------------------------------------------- *
       DISPLAY-MESSAGE SECTION.
      * ------------------------------------------------------------- *
      *
           EXEC CICS SEND
                     FROM( W00-MESSAGE )
                     LENGTH( 79 )
                     ERASE
           END-EXEC.
           MOVE SPACES TO W00-MESSAGE.
      *
       DISPLAY-MESSAGE-END.
      *
      *    RETURN TO PERFORMING FUNCTION
      *
           EXIT.
      *
      * ------------------------------------------------------------- *
      *                        END OF PROGRAM
      * ------------------------------------------------------------- *

¤ Dauer der Verarbeitung: 0.30 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

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 ist noch experimentell.


Bot Zugriff