Previous Topic: Work-Area File


Sample Program that Calls the Command Facility

The following sample COBOL program calls the command facility and requests the command facility to display an element.

      **************************************************************
       IDENTIFICATION DIVISION.
      **************************************************************
       PROGRAM-ID.             CALLIDD.
       DATE WRITTEN.           Month dd, yyyy.
       DATE COMPILED.
      **************************************************************
      * REMARKS.
      **************************************************************
      *
      *  THIS IS A SAMPLE DC COBOL PROGRAM THAT DEMONSTRATES HOW
      *  AN APPLICATION PROGRAM CAN CALL
      *  COMMAND FACILITY AS A SUBPROGRAM AND
      *  PASS TO COMMAND FACILITY A REQUEST TO DISPLAY AN ELEMENT.
      *  THE OUTPUT
      *  OF THE REQUEST IS DISPLAYED BY THE COBOL PROGRAM.
      *
      **************************************************************
       ENVIRONMENT DIVISION.
      **************************************************************
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.        IBM-370.
       OBJECT-COMPUTER.        IBM-370.

       IDMS-CONTROL SECTION.
       PROTOCOL.               MODE IS IDMS-DC DEBUG
                               IDMS-RECORDS MANUAL.
      **************************************************************
       DATA DIVISION.
      **************************************************************
       MAP SECTION.
           MAP CDSIMAP1.
           EJECT
      **************************************************************
       WORKING-STORAGE SECTION.
      **************************************************************
       01  BEGIN-WS.
           03 FILLER                   PIC X(40) VALUE
              '***** WORKING STORAGE BEGINS HERE ******'.
      **************************************************************
      *    SWITCHES-AREA - PROGRAM CONTROL SWITCHES                *
      **************************************************************
       01  SWITCHES-AREA.
           03 FILLER                   PIC X(08) VALUE 'SWITCHES'.
           03 COMMAND-FACILITY-EOF-SW               PIC 9 VALUE 0.
              88 COMMAND-FACILITY-EOF               VALUE 1.
           03 FIRST-TIME-SW            PIC 9 VALUE 0.
              88 FIRST-TIME            VALUE 1.
           03 ERROR-SW                 PIC 9 VALUE 0.
              88 NO-ERRORS             VALUE 0.
      **************************************************************
      *    WORK-FIELDS   - PROGRAM WORK FIELDS                     *
      **************************************************************
       01  WORK-FIELDS.
           03 FILLER                   PIC X(08) VALUE 'WORKAREA'.
           03 SUB                      PIC 99 VALUE 0.
           03 AID-BYTE                 PIC X.
              88 CLEAR-HIT             VALUE '_'.
              88 PA1-HIT               VALUE '%'.
           03 TASK-CODE                PIC X(8).
           03 GOOD-RC                  PIC S9(8) COMP VALUE +0.
           03 Q-EL                     PIC X(32) VALUE ALL '?'.
      **************************************************************
      *    MESSAGES-AREA - OPERATOR MESSAGES                       *
      **************************************************************
       01  MESSAGES-AREA.
           03 FILLER                   PIC X(08) VALUE 'MESSAGES'.
           03 OK-MSG                   PIC X(40) VALUE
              'PROCESSING COMPLETE - PROCEED          '.
           03 NO-ELEMENT-MSG           PIC X(40) VALUE
              'ELEMENT NAME MISSING, PLEASE FILL IT IN'.
           03 CIO-ERROR-MSG.
              05 FILLER                PIC X(36) VALUE
              'CIO PROCESSING ERROR - RETURN CODE ='.
              05 CIO-ERROR-CODE        PIC X(4) VALUE '0000'.
      **************************************************************
      *    SCR-RCD       - SCRATCH RECORD AREA                     *
      **************************************************************
       01  SCR-RCD.
           03 SCR-DBK                  PIC S9(8) COMP.
           03 SCR-RCDID                PIC S9(8) COMP.
           03 SCR-STATUS               PIC X.
           03 SCR-RCD-END              PIC X.
           EJECT
      **************************************************************
      *    PARAMETER 1 - THE COMPILER INOUT/OUTPUT BLOCK           *
      **************************************************************
       01  CIO-PARM1.
           03 CIO-ID                   PIC X(4)  VALUE 'CIO '.
           03 CIO-USER                 PIC S9(8) COMP VALUE +0.
           03 CIO-IO-RC                PIC S9(8) COMP VALUE +0.
           03 CIO-COMMAND FACILITY-RC      PIC S9(8) COMP VALUE +0.
           03 CIO-RESERVED             PIC X(8)  VALUE SPACES.
           03 CIO-ERROR-FILE           PIC X(8)  VALUE SPACES.
              88 SYSIPT-ERROR          VALUE 'SYSIPT'.
              88 SYSLST-ERROR          VALUE 'SYSLST'.
              88 SYSPCH-ERROR          VALUE 'SYSPCH'.
           03 CIO-NULL                 PIC X(4) VALUE 'NULL'.
      **************************************************************
      *    PARAMETER 2 - CIOF INPUT BLOCK                          *
      **************************************************************
       01  CIO-PARM2.
           03 CIOF-I-TYPE              PIC X(8) VALUE 'WORKAREA'.
           03 CIOF-I-NAME              PIC X(16) VALUE SPACES.
           03 CIOF-I-F-RC              PIC S9(8) COMP VALUE +0.
           03 CIOF-I-SIZE-US           PIC S9(8) COMP VALUE +0.
           03 CIOF-I-SIZE-MAX          PIC S9(8) COMP VALUE +4.
      **************************************************************
      *    PARAMETER 3 - INPUT DATA AREA                           *
      **************************************************************
       01  CIO-PARM3.
           03 CIO-I-LINE1.
              05 FILLER                PIC X(20) VALUE
                 'CONNECT TO '.
              05 CIO-I-DICT            PIC X(8)  VALUE SPACES.
              05 FILLER                PIC X(52) VALUE ';'.
           03 CIO-I-LINE2.
              05 FILLER                PIC X(80) VALUE
                 'SET SESSION READ ONLY;'.
           03 CIO-I-LINE3.
              05 FILLER                PIC X(20) VALUE
                 'SET CURRENT SCHEMA '.
              05 CIO-I-SCHEMA          PIC X(18) VALUE SPACES.
              05 FILLER                PIC X(52) VALUE ';'.
           03 CIO-I-LINE4.
              05 FILLER                PIC X(20) VALUE
                 'DISPLAY TABLE '.
              05 CIO-I-TABLE           PIC X(18) VALUE SPACES.
              05 FILLER                PIC X(52) VALUE ';'.
      **************************************************************
      *    PARAMETER 4 - CIOF OUTPUT BLOCK                         *
      **************************************************************
       01  CIO-PARM4.
           03 CIOF-O-TYPE              PIC X(8) VALUE 'WORKAREA'.
           03 CIOF-O-NAME              PIC X(16) VALUE SPACES.
           03 CIOF-O-F-RC              PIC S9(8) COMP VALUE +0.
           03 CIOF-O-SIZE-US           PIC S9(8) COMP VALUE +0.
           03 CIOF-O-SIZE-MAX          PIC S9(8) COMP VALUE +100.
      **************************************************************
      *    PARAMETER 5 - OUTPUT DATA AREA                          *
      **************************************************************
       01  CIO-PARM5.
           03 CIOF-OUTPUT-LINE         PIC X(80)
               OCCURS 100 TIMES.
           EJECT
      **************************************************************
      *    PARAMETER 6 - CIOF PUNCH BLOCK                          *
      **************************************************************
       01  CIO-PARM6.
           03 CIOF-P-TYPE              PIC X(8) VALUE 'WORKAREA'.
           03 CIOF-P-NAME              PIC X(16) VALUE SPACES.
           03 CIOF-P-F-RC              PIC S9(8) COMP VALUE +0.
           03 CIOF-P-SIZE-US           PIC S9(8) COMP VALUE +0.
           03 CIOF-P-SIZE-MAX          PIC S9(8) COMP VALUE +0.
      **************************************************************
      *    PARAMETER 7 - PUNCH DATA AREA                           *
      **************************************************************
       01  CIO-PARM7                   PIC X(80) VALUE 'NULL'.
      **************************************************************
      *    IDMS AREA                                               *
      **************************************************************
       COPY IDMS SUBSCHEMA-CTRL.
       COPY IDMS MAP-CONTROLS.
       COPY IDMS MAP-RECORDS.
           EJECT
       PROCEDURE DIVISION.
      **************************************************************
      *                                                            *
      * ROUTINE - 0000-MAIN-LINE                                   *
      *                                                            *
      * THIS ROUTINE IS THE MAIN CONTROL OF THE PROGRAM, CALLING   *
      * THE OTHER ROUTINES TO DO THE ACTUAL WORK.                  *
      *                                                            *
      **************************************************************
       0000-MAIN-LINE.
           PERFORM 1000-GET-SCRATCH-REC THRU 1999-EXIT.
           IF FIRST-TIME
               PERFORM 2000-DISPLAY-MAP THRU 2999-EXIT
               GO TO 0800-RETURN-SCREEN.
           PERFORM 3000-GET-MAP THRU 3999-EXIT.
           IF CLEAR-HIT
               GO TO 0900-DC-RETURN.
           PERFORM 4000-EDIT-DATA THRU 4999-EXIT.
           IF NO-ERRORS
               PERFORM 5000-CALL-COMMAND FACILITY THRU 5999-EXIT.
           MAP OUT USING CDSIMAP1 WAIT IO OUTPUT DATA YES.

      **************************************************************
      *                                                            *
      * ROUTINE - 0800-RETURN-SCREEN                               *
      *                                                            *
      * THIS ROUTINE SETS UP THE RETURN SO THAT THIS TRANSACTION   *
      * WILL BE THE NEXT TRANSACTION EXECUTED FROM THE TERMINAL.   *
      *                                                            *
      **************************************************************
       0800-RETURN-SCREEN.
           ACCEPT TASK CODE INTO TASK-CODE.
           DC RETURN NEXT TASK CODE TASK-CODE.
      **************************************************************
      *                                                            *
      * ROUTINE - 0900-DC-RETURN                                   *
      *                                                            *
      * THIS ROUTINE DELETES THE SCRATCH RECORD AND THEN RETURNS   *
      * CONTROL TO THE DC SYSTEM.                                  *
      *                                                            *
      **************************************************************
       0900-DC-RETURN.
           DELETE SCRATCH RECORD ID SCR-RCDID.
           DC RETURN.
           EJECT
      **************************************************************
      *                                                            *
      * ROUTINE - 1000-GET-SCRATCH-REC.                            *
      *                                                            *
      * THIS ROUTINE ATTEMPTS TO GET THE SCRATCH RECORD, WHICH     *
      * IS USED TO DETERMINE IF THIS IS THE FIRST TIME THE         *
      * TRANSACTION HAS BEEN EXECUTED.                             *
      *                                                            *
      **************************************************************
       1000-GET-SCRATCH-REC.
           MOVE 1 TO SCR-RCDID.
           GET SCRATCH RECORD ID SCR-RCDID KEEP
               INTO SCR-RCD TO SCR-RCD-END
               ON ANY-ERROR-STATUS
                  IF ERROR-STATUS NOT = '0000'
                      MOVE 1 TO FIRST-TIME-SW
                  ELSE
                      MOVE 0 TO FIRST-TIME-SW.
       1999-EXIT.
           EXIT.
      **************************************************************
      *                                                            *
      * ROUTINE - 2000-DISPLAY-MAP                                 *
      *                                                            *
      * THIS ROUTINE CREATES A SCRATCH RECORD AND DOES THE INITIAL *
      * MAP OUT.                                                   *
      *                                                            *
      **************************************************************
       2000-DISPLAY-MAP.
           MOVE 0 TO SCR-DBK.
           MOVE '1' TO SCR-STATUS.
           PUT SCRATCH FROM SCR-RCD TO SCR-RCD-END
               RECORD ID SCR-RCDID.
           PERFORM 8000-INITILIZE-MAP THRU 8099-EXIT.
           MAP OUT USING CDSIMAP1 OUTPUT NEWPAGE.
       2999-EXIT.
           EXIT.
      **************************************************************
      *                                                            *
      * ROUTINE - 3000-GET-MAP                                     *
      *                                                            *
      * THIS ROUTINE GETS THE MAP.                                 *
      *                                                            *
      **************************************************************
       3000-GET-MAP.
           PERFORM 8000-INITILIZE-MAP THRU 8099-EXIT.
           MAP IN USING CDSIMAP1.
           INQUIRE MAP CDSIMAP1 MOVE AID TO AID-BYTE.
       3999-EXIT.
           EXIT.

           EJECT
      **************************************************************
      *                                                            *
      * ROUTINE - 4000-EDIT-DATA                                   *
      *                                                            *
      * THIS ROUTINE CHECKS THE ELEMENT NAME TO SEE IF IT HAS BEEN *
      * FILLED IN.  IF IT IS BLANK OR NULLS, AN ERROR MESSAGE IS   *
      * DISPLAYED, AND THE MAP IS RETURNED TO THE OPERATOR FOR     *
      * CORRECTION.                                                *
      *                                                            *
      **************************************************************
       4000-EDIT-DATA.
           MOVE 0 TO ERROR-SW.
           IF (CDSIDICT = SPACES)
           OR (CDSIDICT = LOW-VALUES)
               MOVE 1 TO ERROR-SW
               MOVE NO-ELEMENT-MSG TO CDSIMSG
               MOVE Q-EL TO CDSIELNM
               MODIFY MAP CDSIMAP1 TEMPORARY
                   FOR CDSIELNM ATTRIBUTES BRIGHT
               GO TO 4999-EXIT.
           MOVE CDSIELNM TO CIO-I-DICT.
           MOVE 0 TO ERROR-SW.
           IF (CDSISCHEMA = SPACES)
           OR (CDSISCHEMA = LOW-VALUES)
               MOVE 1 TO ERROR-SW
               MOVE NO-ELEMENT-MSG TO CDSIMSG
               MOVE Q-EL TO CDSIELNM
               MODIFY MAP CDSIMAP1 TEMPORARY
                   FOR CDSIELNM ATTRIBUTES BRIGHT
               GO TO 4999-EXIT.
           MOVE CDSIELNM TO CIO-I-SCHEMA.
           MOVE 0 TO ERROR-SW.
           IF (CDSITABLE = SPACES)
           OR (CDSITABLE = LOW-VALUES)
               MOVE 1 TO ERROR-SW
               MOVE NO-ELEMENT-MSG TO CDSIMSG
               MOVE Q-EL TO CDSIELNM
               MODIFY MAP CDSIMAP1 TEMPORARY
                   FOR CDSIELNM ATTRIBUTES BRIGHT
               GO TO 4999-EXIT.
           MOVE CDSIELNM TO CIO-I-TABLE.
       4999-EXIT.
           EXIT.
      **************************************************************
      *                                                            *
      * ROUTINE - 5000-CALL-COMMAND FACILITY                       *
      *                                                            *
      * THIS ROUTINE CALLS COMMAND FACILITY,                       *
      * PASSING THE SEVEN PARAMETERS THAT                          *
      * ARE REQUIRED.  IF THE RETURN CODE FROM                     *
      * COMMAND FACILITY IS GOOD (ALL                              *
      * BINARY ZEROS) THE FIRST TEN LINES FROM THE CIOF OUTPUT     *
      * WORKAREA (THE COMMAND FACILITY SYSLST FILE)                *
      * ARE MOVED TO THE MAP.                                      *
      * IF THE RETURN CODE FROM                                    *
      * COMMAND FACILITY IS BAD (NOT BINARY ZEROS) AN              *
      * ERROR MESSAGE IS DISPLAYED WITH THE ERROR CODE.            *
      *                                                            *
      **************************************************************
       5000-CALL-COMMAND FACILITY.
           TRANSFER CONTROL TO 'IDMSOCF' RETURN
               USING CIO-PARM1
                     CIO-PARM2
                     CIO-PARM3
                     CIO-PARM4
                     CIO-PARM5
                     CIO-PARM6
                     CIO-PARM7.
           IF CIO-IO-RC NOT = GOOD-RC
               MOVE CIO-IO-RC TO CIO-ERROR-CODE
               MOVE CIO-ERROR-MSG TO CDSIMSG
               GO TO 5999-EXIT.
           PERFORM 5100-MOVE-COMMAND FACILITY-OUTPUT THRU 5109-EXIT
               VARYING SUB FROM 1 BY 1
                   UNTIL COMMAND-FACILITY-EOF.
           MOVE OK-MSG         TO CDSIMSG.
           GO TO 5999-EXIT.
       5100-MOVE-COMMAND FACILITY-OUTPUT.
           MOVE CIOF-OUTPUT-LINE(SUB) TO CDSILINE(SUB).
           IF (SUB = 10) OR (SUB = CIOF-O-SIZE-US)
               MOVE 1 TO COMMAND-FACILITY-EOF-SW.
       5109-EXIT.
           EXIT.
       5999-EXIT.
           EXIT.

           EJECT
      **************************************************************
      *                                                            *
      * ROUTINE - 8000-INITILIZE-MAP                               *
      *                                                            *
      * THIS ROUTINE DOES THE IDMS MAP BINDS.                      *
      *                                                            *
      **************************************************************
       8000-INITILIZE-MAP.
           COPY IDMS MAP-BINDS.
       8099-EXIT.
           EXIT.
       EJECT
           COPY IDMS IDMS-STATUS.
       IDMS-ABORT.
       IDMS-ABORT-EXIT.
           EXIT.