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