GDDM V3R2 Base Application Programming Guide
Previous topic | Next topic | Contents | Index | Contact z/OS | Library | PDF | BOOK


A CICS pseudoconversational programming example

GDDM V3R2 Base Application Programming Guide
SC33-0867-01



The following program shows a reentrant GDDM mapping application written as a CICS pseudoconversation. There are several points to note about the program:

  • The program MENUP1 has been defined to CICS and associated with transaction ID DFP1.
    
    
  • MENUP1 determines, from the absence or presence of the COMMAREA, whether this is the first time through the program.
    
    
  • The first time through, DSOPEN is called with the PSCNVCTL,START processing option.
    
    
  • Subsequent invocations call DSOPEN with the PSCNVCTL,CONTINUE processing option (this tells GDDM to retrieve the saved device information from temporary storage).
    
    
  • All DSCLS calls except the last specify option 1. This tells GDDM not to erase the screen, but to unlock the keyboard (thus allowing input). It also tells GDDM to save, in temporary storage, all information about the device. This is required for GDDM to successfully re-initialize on the next invocation.
    
    
  • Required ADS information is saved in the COMMAREA.
    
    
    GDDM saves all information concerning the nature of the device between transactions, but it is the responsibility of the application to save data required by the application.
    
    


     ________________________________________________________________________
      MENUP1:           PROC(COMAP) OPTIONS(MAIN);
      /********************************************************************/
      /* Test Program to display a set of panels using Mapping.           */
      /* MENU00 is displayed first, and PF Keys 3 or 4 entered from this  */
      /* panel causes the end of the application with either an erased    */
      /* screen or not respectively.                                      */
      /* Entering options '1', '2' or '3' from MENU00 causes the display  */
      /* of MENUs 01, 02, and 03 respectively, each with their own        */
      /* legends displayed in a color generated by the program.           */
      /* MENU00 is then re-displayed after input.                         */
      /*                                                                  */
      /* This program is pseudoconversational.                            */
      /*                                                                  */
      /* The logic is as follows:                                         */
      /*   On first invocation (COMMAREA length = 0)                      */
      /*     Display MENU00                                               */
      /*     Save Application data in the COMMAREA                        */
      /*     Return to CICS requesting transaction DFP1 next time         */
      /*   On subsequent invocations (COMMAREA length =0)                */
      /*     Restore Application data from COMMAREA                       */
      /*     Re-define appropriate Map                                    */
      /*     Receive Input                                                */
      /*     If Finish not requested                                      */
      /*       Display MENU00                                             */
      /*       Return to CICS requesting transaction DFP1 next time       */
      /*     Else                                                         */
      /*       Return to CICS                                             */
      /********************************************************************/
      DCL
        COMAP                 PTR;           /* COMMAREA PTR              */
      %INCLUDE ADMUPIRA;
      %INCLUDE ADMUPIRD;
      %INCLUDE ADMUPIRF;
      %INCLUDE ADMUPIRM;
      DCL
        1 MENU00,                                 /* ADS */
          10 MSG_SEL                        CHAR(1),
          10 MSG_COL_SEL                    CHAR(1),
          10 MSG_COL                        CHAR(1),
          10 MSG_PS_SEL                     CHAR(1),
          10 MSG_PS                         CHAR(1),
          10 MSG                            CHAR(78),
          10 OPT                            CHAR(2),
        MENU00_ASLENGTH                   FIXED BIN(31,0) STATIC
                                          INIT(85);
      DCL
        1 MENU01,                                 /* ADS */
          10 MSG_SEL                        CHAR(1),
          10 MSG_COL_SEL                    CHAR(1),
          10 MSG_COL                        CHAR(1),
          10 MSG_PS_SEL                     CHAR(1),
          10 MSG_PS                         CHAR(1),
          10 MSG                            CHAR(42),
        MENU01_ASLENGTH                   FIXED BIN(31,0) STATIC
                                          INIT(47);
      DCL
        1 MENU02,                                 /* ADS */
          10 MSG_SEL                        CHAR(1),
          10 MSG_COL_SEL                    CHAR(1),
          10 MSG_COL                        CHAR(1),
          10 MSG_PS_SEL                     CHAR(1),
          10 MSG_PS                         CHAR(1),
          10 MSG                            CHAR(39),
        MENU02_ASLENGTH                   FIXED BIN(31,0) STATIC
                                          INIT(44);
      DCL
        1 MENU03,                                 /* ADS */
          10 MSG_SEL                        CHAR(1),
          10 MSG_COL_SEL                    CHAR(1),
          10 MSG_COL                        CHAR(1),
          10 MSG_PS_SEL                     CHAR(1),
          10 MSG_PS                         CHAR(1),
          10 MSG                            CHAR(60),
        MENU03_ASLENGTH                   FIXED BIN(31,0) STATIC
                                          INIT(65);
      DCL
        DEVID                 FIXED BIN(31) INIT(0),
        FAMID                 FIXED BIN(31) INIT(1),
        PCCNT                 FIXED BIN(31) INIT(2),
        NMCNT                 FIXED BIN(31) INIT(0),
        PCLSTS(2)             FIXED BIN(31) INIT(25,1),     /* START      */
        PCLSTC(2)             FIXED BIN(31) INIT(25,2),     /* CONTINUE   */
        DEVTK                 CHAR(8) INIT('*'),
        NMLST(1)              CHAR(8) INIT(' ');
      DCL
        COPTES                FIXED BIN(31) INIT(0),
        COPTLS                FIXED BIN(31) INIT(1),
        COPTEU                FIXED BIN(31) INIT(2),
        COPTLU                FIXED BIN(31) INIT(3);
      DCL TRANID              CHAR(8) INIT('DFP1');
      DCL (ATYPE,AVAL,AMOD)   FIXED BIN(31);      /* I/P CONTROL FLDS     */
      DCL FINISH              BIT(1) INIT('0'B);
      DCL PICOPT              PIC'99';            /* NUMERIC OPTION       */
      DCL AAB                 CHAR(8);            /* ANCHOR BLOCK         */
      DCL MAPG                CHAR(8)             /* MAP GROUP NAME       */
                              INIT('DFMGC1D5');
      DCL SSID                CHAR(1);            /* SYMBOL SET ID        */
      DCL SSID_BIT         BIT(8) DEF(SSID);   /* SYMBOL SET ID        */
      DCL X41                 BIT(8) INIT('01000001'B);
      DCL MAP(0:3)            CHAR(8)             /* MAP NAMES            */
                              INIT('MENU00','MENU01','MENU02','MENU03');
      DCL
        1 COMMAREA            BASED(COMAP),  /* COMMAREA                  */
         2 MAPNO              FIXED BIN(15), /* MAP NAME ARRAY NO         */
         2 COL                PIC'9',        /* CURRENT COLOR             */
         2 COUNT              FIXED BIN(31),
         2 PSSID              CHAR(1),
         2 CLSOPT             FIXED BIN(31);
      /* CODE STARTS HERE */

CALL FSINIT(AAB); /* INIT GDDM */ IF EIBCALEN = 0 THEN DO; /****************************************************************/ /* SINCE NO COMMAREA EXISTS ALREADY, THIS MUST BE THE 1ST TIME */ /* THROUGH. */ /****************************************************************/ ALLOCATE COMMAREA; CALL DSOPEN(AAB,DEVID,FAMID,DEVTK,PCCNT,PCLSTS,NMCNT,NMLST); /* OPEN THE DEVICE SPECIFYING*/ /* START PSEUDO-CONV */ SSID_BIT = X41; /* ITALICS ID */ PSSID = SSID; /* SAVE IT */ CLSOPT = 1; /* DO NOT ERASE SCREEN */ MENU00 = ''; /* CLEAR PRIMARY MENU */ MENU00.MSG_SEL = '1'; /* GET DATA FROM ADS */ CALL MSPCRT(AAB,1,-1,-1,MAPG); /* PAGE CREATE */ CALL MSDFLD(AAB,1,-1,-1,'MENU00'); /* MAP MENU00 */ CALL MSPUT(AAB,1,0,MENU00_ASLENGTH,MENU00); /* PUT DATA INTO MAP */ CALL FSFRCE(AAB); /* WRITE DATA TO SCREEN */ CALL DSCLS(AAB,DEVID,CLSOPT); /* CLOSE THE DEVICE */ CALL FSTERM(AAB); /* END GDDM */ MAPNO = 0; /* SAVE LAST MAP NO. */ COUNT = 0; /* INITIALIZE COUNT */ EXEC CICS RETURN TRANSID(TRANID) COMMAREA(COMMAREA); END; ELSE /* A COMMAREA EXISTS */ DO; /****************************************************************/ /* GET I/P */ /****************************************************************/ CALL DSOPEN(AAB,DEVID,FAMID,DEVTK,PCCNT,PCLSTC,NMCNT,NMLST); /* OPEN THE DEVICE SPECIFYING*/ /* CONTINUE PSEUDO-CONV */ IF MAPNO = 0 THEN DO; /************************************************************/ /* RESTORE MENU00 */ /************************************************************/ MENU00 = ''; MENU00.MSG_SEL = '1'; CALL MSPCRT(AAB,1,-1,-1,MAPG); CALL MSDFLD(AAB,1,-1,-1,'MENU00'); CALL MSPUT(AAB,1,0,MENU00_ASLENGTH,MENU00); END; ELSE IF MAPNO = 1 THEN DO; /**********************************************************/ /* RESTORE MENU01 */ /**********************************************************/ MENU01 = ''; MENU01.MSG_SEL = '2'; MENU01.MSG_COL_SEL = '1'; MENU01.MSG_COL = COL; CALL MSPCRT(AAB,1,-1,-1,MAPG); CALL MSDFLD(AAB,1,-1,-1,'MENU01'); CALL MSPUT(AAB,1,1,MENU01_ASLENGTH,MENU01); END; ELSE IF MAPNO = 2 THEN DO; /**********************************************************/ /* RESTORE MENU02 */ /**********************************************************/ MENU02 = ''; MENU02.MSG_SEL = '2'; MENU02.MSG_COL_SEL = '1'; MENU02.MSG_COL = COL; CALL MSPCRT(AAB,1,-1,-1,MAPG); CALL MSDFLD(AAB,1,-1,-1,'MENU02'); CALL MSPUT(AAB,1,1,MENU02_ASLENGTH,MENU02); END; ELSE DO; /**********************************************************/ /* RESTORE MENU03 */ /**********************************************************/ MENU03 = ''; MENU03.MSG_SEL = '2'; MENU03.MSG_COL_SEL = '1'; MENU03.MSG_COL = COL; CALL MSPCRT(AAB,1,-1,-1,MAPG); CALL MSDFLD(AAB,1,-1,-1,'MENU03'); CALL MSPUT(AAB,1,1,MENU03_ASLENGTH,MENU03); END; CALL ASREAD(AAB,ATYPE,AVAL,AMOD); /* GET I/P DATA */ COL = MOD(COUNT,7) + 1; COUNT = COUNT + 1; IF MAPNO = 0 THEN DO; CALL MSGET(AAB,1,0,MENU00_ASLENGTH,MENU00);

IF ATYPE = 1 THEN DO; IF AVAL = 3 THEN DO; CLSOPT = COPTEU; FINISH = '1'B; END; IF AVAL = 4 THEN DO; CLSOPT = COPTLU; FINISH = '1'B; END; END;

IF FINISH THEN DO; IF OPT = '01' & OPT = '02' & OPT = '03' THEN DO; MENU00.MSG = 'INVALID OPTION SELECTED'; MENU00.MSG_COL_SEL = '2'; MENU00.MSG_COL = COL; CALL MSPUT(AAB,1,0,MENU00_ASLENGTH,MENU00); END; ELSE DO; IF OPT = '01' THEN DO; MENU01 = ''; MENU01.MSG_SEL = '2'; MENU01.MSG_COL_SEL = '1'; MENU01.MSG_COL = COL; CALL MSDFLD(AAB,1,-1,-1,'MENU01'); CALL MSPUT(AAB,1,1,MENU01_ASLENGTH,MENU01); MAPNO = 1; END; ELSE IF OPT = '02' THEN DO; MENU02 = ''; MENU02.MSG_SEL = '2'; MENU02.MSG_COL_SEL = '1'; MENU02.MSG_COL = COL; CALL MSDFLD(AAB,1,-1,-1,'MENU02'); CALL MSPUT(AAB,1,1,MENU02_ASLENGTH,MENU02); MAPNO = 2; END; ELSE DO; MENU03 = ''; MENU03.MSG_SEL = '2'; MENU03.MSG_COL_SEL = '1'; MENU03.MSG_COL = COL; MENU03.MSG_PS_SEL = '1'; MENU03.MSG_PS = PSSID; CALL MSDFLD(AAB,1,-1,-1,'MENU03'); CALL MSPUT(AAB,1,1,MENU03_ASLENGTH,MENU03); MAPNO = 3; END; END; END; END; ELSE DO; MENU00 = ''; MENU00.MSG_SEL = '1'; CALL MSDFLD(AAB,1,-1,-1,'MENU00'); CALL MSPUT(AAB,1,0,MENU00_ASLENGTH,MENU00); MAPNO = 0; END; IF FINISH THEN /* CONTINUE TRANSACTION */ CALL FSFRCE(AAB); /* WRITE DATA TO SCREEN */ CALL DSCLS(AAB,DEVID,CLSOPT); /* CLOSE THE DEVICE */ CALL FSTERM(AAB); /* END GDDM */ IF FINISH THEN EXEC CICS RETURN TRANSID(TRANID) COMMAREA(COMMAREA);

END; END; /* - OF MENUP1 */

Go to the previous page Go to the next page



Copyright IBM Corporation 1990, 2012