z/OS MVS Programming: Callable Services for High-Level Languages
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


COBOL example

z/OS MVS Programming: Callable Services for High-Level Languages
SA23-1377-02

       IDENTIFICATION DIVISION.
      *****************************************************************
      * Program using COBOL to create a 40-page window                *
      * aligned on a page boundary. This is done by locating a        *
      * page boundary within a 40*4096+4095 byte work area.           *
      * The DWS interface validation routine is then called passing   *
      * the 40 page window.                                           *
      *****************************************************************
       PROGRAM-ID. DWSCBSAM.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       1   WORKAREA.
         2 FILLER PIC X OCCURS 167935 TIMES.
       PROCEDURE DIVISION.
           DISPLAY " DWSCBSAM CALLING DWSCB4K "
           CALL "DWSCB4K" USING WORKAREA
           DISPLAY " DWSCBSAM BACK FROM DWSCB4K "
           GOBACK.
---------------------------------------------------------------------
---------------------------------------------------------------------
       IDENTIFICATION DIVISION.
       PROGRAM-ID. DWSCB4K.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       1   P POINTER.
       1   PR REDEFINES P PIC 9(9) COMP.
       1   DUMMY  PIC 9(9) COMP.
       1   R      PIC 9(9) COMP.
       LINKAGE SECTION.
       1   INWORK PIC X(167935).
       1   WINDOW.
           2 FILLER PIC X(4096) OCCURS 40 TIMES.
       PROCEDURE DIVISION USING INWORK.
           SET P TO ADDRESS OF INWORK
           DIVIDE PR BY 4096
             GIVING DUMMY
             REMAINDER R
           IF R NOT EQUAL 0 THEN
           COMPUTE PR = PR + 4096 - R
           SET ADDRESS OF WINDOW TO P
           DISPLAY " DWSCBK4 CALLING DWSCB2 "
           CALL "DWSCB2" USING WINDOW.
           DISPLAY " DWSCBK4 BACK FROM  DWSCB2 "
           GOBACK.
---------------------------------------------------------------------
---------------------------------------------------------------------
       IDENTIFICATION DIVISION.
       PROGRAM-ID. DWSCB2.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      * WINDOW SIZE CHOSEN TO BE 40 PAGES
       1   NWINPG PIC 9(9) COMP VALUE 40.
       1   NWINEL PIC 9(9) COMP.
       1   NWLAST PIC 9(9) COMP.
       1   NOBJPG PIC 9(9) COMP.
      * WINDOWS WILL BEGIN ORIGIN-ING AT OFFSET 0 IN DATA OBJECT
       1   WINOFF PIC 9(9) COMP VALUE 0.
       1   RETRN1 PIC 9(9) COMP.
       1   REASON PIC 9(9) COMP.
       1   NEWOFF PIC 9(9) COMP.
       1   OBSIZ  PIC 9(9) COMP.
       1   TOKEN PIC X(8).
       1   K      PIC 9(9) COMP.
       LINKAGE SECTION.
       1   WINDOW.
           2 FILLER PIC X(4096) OCCURS 40 TIMES.
       1   WINDOW-ARRAY REDEFINES WINDOW.
           2 A PIC S9(8) COMP OCCURS 40960 TIMES.
       PROCEDURE DIVISION USING WINDOW.
           DISPLAY "Begin Data Windowing Services Interface Validation"
      * WINDOW COMPOSED OF 4-BYTE ELEMENTS
           COMPUTE NWINEL  = 1024 * NWINPG.
      * WINDOW MAY NOT BEGIN AT ARRAY ELEMENT 1, SO LEAVE ROOM
           COMPUTE NWLAST = 1024 * NWINPG + 1023
      * IN THE FOLLOWING, ARBITRARILY SET OBJECT SIZE = 3 WINDOWS WORTH
           COMPUTE NOBJPG = 3 * NWINPG
      * SET UP ACCESS TO A HIPERSPACE OBJECT
           CALL "CSRIDAC" USING
             BY CONTENT
               "BEGIN",
               "TEMPSPACE",
               "MY FIRST HIPERSPACE",
               "YES",
               "NEW",
               "UPDATE",
             BY REFERENCE
                NOBJPG,
                TOKEN,
                OBSIZ,
                RETRN1,
                REASON
      * PUT SOME DATA INTO THE WINDOW AREA
           MOVE ALL "DATA" TO WINDOW
      * NOW VIEW SOMETHING IN THE WINDOW
           CALL "CSRVIEW" USING
             BY CONTENT
               "BEGIN",
             BY REFERENCE
                TOKEN,
                WINOFF,
                NWINPG,
                WINDOW,
             BY CONTENT
               "RANDOM",
               "REPLACE",
             BY REFERENCE
                RETRN1,
                REASON
      * CALCULATE SOMETHING IN THE WINDOW AREA
           PERFORM VARYING K FROM 1 BY 1 UNTIL K = NWINEL
              MOVE K TO A(K)
           END-PERFORM
      * CAPTURE THE VIEW IN THE WINDOW
           CALL "CSRSCOT" USING
                TOKEN,
                WINOFF,
                NWINPG,
                RETRN1,
                REASON
      * END THE VIEW IN THE WINDOW
           CALL "CSRVIEW" USING
             BY CONTENT
               "END ",
             BY REFERENCE
                TOKEN,
                WINOFF,
                NWINPG,
                WINDOW,
             BY CONTENT
               "RANDOM",
               "RETAIN ",
             BY REFERENCE
                RETRN1,
                REASON
      * NOW VIEW SOMETHING ELSE (2ND WINDOW"S WORTH OF DATA) IN WINDOW
           ADD NWINPG TO WINOFF
           CALL "CSRVIEW" USING
             BY CONTENT
               "BEGIN",
             BY REFERENCE
                TOKEN,
                WINOFF
                NWINPG,
                WINDOW,
             BY CONTENT
               "RANDOM",
               "RETAIN",
             BY REFERENCE
                RETRN1,
                REASON
      * CALCULATE SOMETHING NEW IN THE WINDOW AREA
           PERFORM VARYING K FROM 1 BY 1 UNTIL K = NWINEL
              COMPUTE A(K) = - K
           END-PERFORM
      * SAVE THE DATA IN THE WINDOW
           CALL "CSRSCOT" USING
                TOKEN,
                WINOFF,
                NWINPG,
                RETRN1,
                REASON
      * NOW END THE CURRENT VIEW IN WINDOW
           CALL "CSRVIEW" USING
             BY CONTENT
               "END ",
             BY REFERENCE
                TOKEN,
                WINOFF
                NWINPG,
                WINDOW,
             BY CONTENT
               "RANDOM",
               "RETAIN ",
             BY REFERENCE
                RETRN1,
                REASON
      * NOW GO BACK TO THE FIRST VIEW IN THE WINDOW
           MOVE 0 TO WINOFF
           CALL "CSRVIEW" USING
             BY CONTENT
               "BEGIN",
             BY REFERENCE
                TOKEN,
                WINOFF,
                NWINPG,
                WINDOW,
             BY CONTENT
               "RANDOM",
               "REPLACE",
             BY REFERENCE
                RETRN1,
                REASON
      * REFRESH THE DATA IN THE WINDOW FOR THIS VIEW
           CALL "CSRREFR" USING
                TOKEN,
                WINOFF,
                NWINPG,
                RETRN1,
                REASON
      * NOW END THE VIEW IN THE WINDOW
           CALL "CSRVIEW" USING
             BY CONTENT
               "END ",
             BY REFERENCE
                TOKEN,
                WINOFF,
                NWINPG,
                WINDOW,
             BY CONTENT
               "RANDOM",
               "RETAIN ",
             BY REFERENCE
                RETRN1,
                REASON
      * TERMINATE ACCESS TO THE HIPERSPACE OBJECT
           CALL "CSRIDAC" USING
             BY CONTENT
               "END  ",
               "TEMPSPACE",
               "MY FIRST HIPERSPACE ENDS HERE ",
               "YES",
               "NEW",
               "UPDATE",
             BY REFERENCE
                NOBJPG,
                TOKEN,
                OBSIZ,
                RETRN1,
                REASON
           DISPLAY "-*** Run ended with Object Size in pages = " NEWOFF
           GOBACK
**************************************************
*                                                *
*          JCL FOR COBOL EXAMPLE                 *
*                                                *
**************************************************
//JOB1XXX JOB 'A9907P,B9222095',                                        00010000
//  'A.A.USER',RD=R,                                                    00020000
//  MSGCLASS=H,NOTIFY=AAUSER,                                           00030000
//  MSGLEVEL=(1,1),CLASS=7                                              00040000
//LKED   EXEC  PGM=IEWL,PARM='SIZE=(1024K,512K),LIST,XREF,LET,MAP',     00080000
//             REGION=1024K                                             00090000
//SYSLIN   DD  DDNAME=SYSIN                                             00110000
//SYSLMOD  DD  DSNAME=AAUSER.USER.LOAD(CRTCON01),DISP=SHR               00120000
//SYSLIB   DD  DSNAME=CEE.SCEELED,DISP=SHR                              00140000
//*                                                                     00150100
//*   FF310.OBJ HOLDS OBJECT CODE FROM THE COMPILE                      00150200
//*                                                                     00150300
//MYLIB    DD  DSN=AAUSER.FF310.OBJ,DISP=SHR                            00151000
//*                                                                     00151100
//*   THE CSR STUBS ARE IN SYS1.CSSLIB                                  00151200
//*                                                                     00151300
//INLIB    DD  DSN=SYS1.CSSLIB,DISP=SHR                                 00152000
//SYSPRINT DD  SYSOUT=*                                                 00170000
//SYSIN    DD *                                                         00230000
 INCLUDE MYLIB(DWSCBSAM,DWSCB4K,DWSCB2)                                 00231000
 LIBRARY INLIB(CSRSCOT,CSRSAVE,CSRREFR,CSRSAVE,CSRVIEW,CSRIDAC)         00240000
 NAME CRTCON01(R)                                                       00250000

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014