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.
|
Copyright © 2014 CA.
All rights reserved.
|
|