COBOL IMS DB Sample Program
COBOL IMS DB Sample Program
com
By Srinimf.com
******************************************************************
IDENTIFICATION DIVISION.
******************************************************************
PROGRAM-ID. IMSBATCH.
AUTHOR. ABC.
INSTALLATION. DEPARTMENT.
DATE-WRITTEN. DATE XX/XX/XX.
DATE-COMPILED.
******************************************************************
ENVIRONMENT DIVISION.
****************************************************************
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUTFILE ASSIGN TO UT-S-OUTFILE.
******************************************************************
DATA DIVISION.
******************************************************************
FILE SECTION.
FD OUTFILE
RECORD IS VARYING IN SIZE FROM 383 TO 22727 CHARACTERS RECORDING MODE IS V
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS ARE STANDARD
DATA RECORD IS O-PLT.
* 283
01 O-PLT.
05 O-PLT-DATA-AREA.
10 O-PLTROOT-PREFIX PIC X(001).
10 O-PLTROOT-NAME PIC X(008).
10 O-PLTROOT-TITLE PIC X(050).
10 O-PLTROOT-TERM-PRT-TABLE PIC X(200).
10 O-PLT-SEQ PIC 9(008).
10 O-PLTPE-SEQ-LAST PIC 9(008).
10 O-SEGPROF-SEQ-LAST PIC 9(008).
* 44
05 O-PLTPE.
10 O-PLTPE-KEY-SEQ PIC 9(03).
10 O-PLTPE-TYPE PIC X(01) . 10 O-PLTPE-NAME PIC X(08).
10 O-PLTPE-ACCESS PIC X(01).
10 O-PLTPE-TITLE PIC X(30).
10 O-PLTPE-COURTPRF PIC X(01).
* 56
05 O-SEGPROF OCCURS 400 TIMES DEPENDING ON W-SEGPROF-SEQ-LAST
INDEXED BY O-SEGPROF-INDEX.
10 O-SEGPROF-SEQ PIC 9(08).
10 O-SEGPROF-KEY-PREFIX PIC X(01).
Srinimf.com
01 DLI-STATUS-CODES.
05 GET-GOOD PIC X(02) VALUE SPACE.
05 GET-NOT-FOUND PIC X(02) VALUE 'GE'.
05 GET-END-DB PIC X(02) VALUE 'GB'.
05 GN-CROSS-BOUNDARY PIC X(02) VALUE 'GA'.
******************************************************
THESE SSA'S ARE FROM THE COPY BOOK SECMSSA
********************************************************
READ 01 = GU MENUROOT(PREFIX =P)
01 MENUROOT-SSA-PREFIX-P.
05 FILLER PIC X(17) VALUE 'MENUROOT(PREFIX '.
05 MENUROOT-SSA-OPER PIC X(02) VALUE ' ='.
05 MENUROOT-SSA-KEY.
10 MENUROOT-SSA-PREFIX PIC X(01) VALUE 'P'.
05 FILLER PIC XX VALUE ')'.
01 PLTROOT-LIT PIC X(10) VALUE ' PLTROOT= '.
01 PLTROOT.
05 PLT-DATA-AREA.
10 PLTROOT-KEY.
15 PLTROOT-PREFIX PIC X(1).
15 PLTROOT-NAME PIC X(08).
10 PLTROOT-TITLE PIC X(50).
10 PLTROOT-PFKEY-TABLE.
15 PLTROOT-PFKEY-RECORD
OCCURS 24 TIMES
INDEXED BY PLTROOT-PFKEY-INDEX.
20 PLTROOT-PFKEY PIC X(10).
88 VALID-PFKEY-VALUES VALUES ARE 'DISPLAY' 'UPDATE' 'FIND'
'BOTTOM' 'UP' 'DOWN'
'SWAP' 'SPLIT' 'MENU'
'PRINT' 'CLEAR' 'SOFTEXIT'
'LIST' 'TOP' 'RETURN'.
10 PLTROOT-TERMINAL-PRINTER-TABLE.
15 PLTROOT-PRINTER-RECORD
OCCURS 10 TIMES
INDEXED BY PLTROOT-PRT-INDEX.
20 PLTROOT-PRINTER-LITERAL PIC X(20).
01 FILLER PIC X(500).
*******************************************************
READ 02 = GNP PLTPE I/O AREA = PLTPE
STATUS = GE END-OF-SEGMENTS
********************************************************
01 UNQUAL-SSA-PLTPE PIC X(09) VALUE 'PLTPE '.
01 PLTPE-LIT PIC X(08) VALUE ' PLTPE= '.
01 PLTPE.
05 PLTPE-KEY.
10 PLTPE-KEY-SEQ PIC 9(03).
05 PLTPE-TYPE PIC X.
88 PLTPE-PROGRAM VALUE 'P'.
05 PLTPE-NAME PIC X(8).
05 PLTPE-TITLE PIC X(30).
05 PLTPE-ACCESS PIC X.
88 PLTPE-ACCESS-VALUE VALUES ARE '0' THRU '9'.
05 PLTPE-COURTPRF PIC X.
88 PLTPE-COURTPRF-YES VALUE 'Y'.
88 PLTPE-COURTPRF-NO VALUE 'N'.
Srinimf.com
05 PCB-PROCESSING-OPTIONS-1.
10 PCBPROPT-1 PIC X(4).
05 FILLER PIC S9(5) COMP.
05 PCB-SEGMENT-NAME-1.
10 PCBSEGNM-1 PIC X(8).
05 PCB-LENGTH-FEEDBACK-1.
10 PCBLKEYFB-1 PIC S9(5) COMP.
05 PCB-NUMBER-SEGMENTS-1 PIC S9(5) COMP.
05 PCB-KEY-FEEDBACK-1.
10 PCBKEYFB-1 PIC X(58).
*************************************************
DLI PROGRAM COMMUNICATION BLOCK FOR SEGPROF SEGMENT
************************************************
01 DLIPCB2.
05 PCB-DBD-NAME-2.
10 PCBDBDNM-2 PIC X(8).
05 PCB-LEVEL-2 PIC 9(2).
05 PCB-STATUS-CODE-2.
10 PCBSA-2 PIC XX.
05 PCB-PROCESSING-OPTIONS-2.
10 PCBPROPT-2 PIC X(4).
05 FILLER PIC S9(5) COMP.
05 PCB-SEGMENT-NAME-2.
10 PCBSEGNM-2 PIC X(8).
05 PCB-LENGTH-FEEDBACK-2.
10 PCBLKEYFB-2 PIC S9(5) COMP.
05 PCB-NUMBER-SEGMENTS-2 PIC S9(5) COMP.
05 PCB-KEY-FEEDBACK-2.
10 PCBKEYFB-2 PIC X(58).
***********************************************
PROGRAM INITIALIZATION
************************************************
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING DLIPCB1 DLIPCB2.
DISPLAY '*** START IMSBATCH'.
OPEN OUTPUT OUTFILE.
MOVE 0 TO O-PLT-SEQ.
MOVE GU TO READ-PLT-OPCODE.
MOVE GU TO READ-SEC-OPCODE.
**************************************************
READ PLT MENUROOT SEGMENTS
**************************************************
RTN-READ-PLT.
CALL 'CBLTDLI' USING READ-PLT-OPCODE DLIPCB1
PLTROOT
MENUROOT-SSA-PREFIX-P.
IF PCBSA-1 EQUAL GET-GOOD
GO TO RTN-READ-PLT-GOOD.
GO TO END-OF-DATABASE.
RTN-READ-PLT-GOOD.
IF BEGIN-PLT EQUAL SPACES NEXT SENTENCE
ELSE
IF PLTROOT-NAME LESS THAN BEGIN-PLT DISPLAY '*** SKIPPING ' PLTROOT-NAME
MOVE GN TO READ-PLT-OPCODE
GO TO RTN-READ-PLT.
ADD 1 TO READ-PLTROOT-COUNT.
Srinimf.com
ADD 1 TO W-PLT-SEQ.
MOVE 0 TO W-PLTPE-SEQ-LAST.
MOVE 0 TO W-SEGPROF-SEQ-LAST.
MOVE GN TO READ-PLT-OPCODE.
MOVE PLTROOT-PREFIX TO W-PLTROOT-PREFIX.
MOVE PLTROOT-NAME TO W-PLTROOT-NAME.
INSPECT W-PLTROOT-NAME
REPLACING ALL LOW-VALUE BY SPACE.
MOVE PLTROOT-TITLE TO W-PLTROOT-TITLE.
INSPECT W-PLTROOT-TITLE
REPLACING ALL LOW-VALUE BY SPACE.
MOVE PLTROOT-TERMINAL-PRINTER-TABLE
TO W-PLTROOT-TERM-PRT-TABLE.
INSPECT W-PLTROOT-TERM-PRT-TABLE
REPLACING ALL LOW-VALUE BY SPACE.
* DISPLAY ' '.
* DISPLAY '*** RTN-READ-PLT = ' W-PLT-SEQ.
DISPLAY '*** PROCESSING ' W-PLTROOT-NAME.
**********************************************
READ PLTPE DEPENDENT SEGMENTS
**********************************************
RTN-READ-PLTPE.
CALL 'CBLTDLI' USING GNP
DLIPCB1
PLTPE
UNQUAL-SSA-PLTPE.
IF PCBSA-1 EQUAL GET-GOOD
GO TO RTN-READ-PLTPE-GOOD.
IF PCBSA-1 EQUAL GN-CROSS-BOUNDARY OR EQUAL GET-NOT-FOUND
OR EQUAL GET-END-DB
GO TO RTN-READ-PLTPE-END.
GO TO END-OF-DATABASE.
RTN-READ-PLTPE-GOOD.
IF W-PLTPE-SEQ-LAST EQUAL
TO W-PLTPE-SEQ-MAX
DISPLAY '*** W-PLTPE-SEQ-MAX MAXIMUM ' W-PLTPE-SEQ-MAX ' COUNT EXCEEDED'
GO TO END-OF-DATABASE.
ADD 1 TO READ-PLTPE-COUNT.
ADD 1 TO W-PLTPE-SEQ-LAST.
SET W-PLTPE-INDEX TO W-PLTPE-SEQ-LAST.
MOVE PLTPE-TYPE TO W-PLTPE-TYPE(W-PLTPE-INDEX).
MOVE PLTPE-NAME TO W-PLTPE-NAME(W-PLTPE-INDEX).
INSPECT W-PLTPE-NAME(W-PLTPE-INDEX)
REPLACING ALL LOW-VALUE BY SPACE.
MOVE PLTPE-KEY-SEQ TO W-PLTPE-KEY-SEQ(W-PLTPE-INDEX).
MOVE PLTPE-ACCESS TO W-PLTPE-ACCESS(W-PLTPE-INDEX).
MOVE PLTPE-TITLE TO W-PLTPE-TITLE(W-PLTPE-INDEX).
INSPECT W-PLTPE-TITLE(W-PLTPE-INDEX)
REPLACING ALL LOW-VALUE BY SPACE.
MOVE PLTPE-COURTPRF TO W-PLTPE-COURTPRF(W-PLTPE-INDEX).
INSPECT W-PLTPE-COURTPRF(W-PLTPE-INDEX)
REPLACING ALL LOW-VALUE BY SPACE.
GO TO RTN-READ-PLTPE.
RTN-READ-PLTPE-END.
MOVE GU TO READ-SEC-OPCODE.
GO TO RTN-READ-SEGPROF.
Srinimf.com
*********************************************************
READ ALL SEGPROF SEGMENTS AND SELECT SEGMENTS THAT
MATCH THIS PLT
*******************************************************
RTN-READ-SEGPROF.
CALL 'CBLTDLI' USING READ-SEC-OPCODE DLIPCB2
SEGPROF
MENUROOT-SSA-PREFIX-S.
MOVE GN TO READ-SEC-OPCODE.
IF PCBSA-2 EQUAL GET-GOOD
GO TO RTN-READ-SEGPROF-GOOD.
IF PCBSA-2 EQUAL GN-CROSS-BOUNDARY OR EQUAL GET-NOT-FOUND
OR EQUAL GET-END-DB
GO TO RTN-READ-SEGPROF-END.
GO TO END-OF-DATABASE.
RTN-READ-SEGPROF-GOOD.
ADD 1 TO READ-SEGPROF-COUNT.
IF SEGPROF-PLT-NAME NOT EQUAL TO W-PLTROOT-NAME GO TO RTN-READ-SEGPROF.
IF W-SEGPROF-SEQ-LAST GREATER THAN OR EQUAL TO W-SEGPROF-SEQ-MAX
DISPLAY '*** W-SEGPROF-SEQ-MAX MAXIMUM ' W-SEGPROF-SEQ-MAX ' COUNT EXCEEDED
'
GO TO END-OF-DATABASE.
ADD 1 TO W-SEGPROF-SEQ-LAST.
SET W-SEGPROF-INDEX TO W-SEGPROF-SEQ-LAST.
MOVE SEGPROF-KEY-PREFIX TO
W-SEGPROF-KEY-PREFIX(W-SEGPROF-INDEX).
MOVE SEGPROF-KEY-SUFFIX TO
W-SEGPROF-KEY-SUFFIX(W-SEGPROF-INDEX).
INSPECT W-SEGPROF-KEY-SUFFIX(W-SEGPROF-INDEX) REPLACING ALL LOW-VALUE BY
SPACE.
MOVE SEGPROF-PLT-NAME TO
W-SEGPROF-PLT-NAME(W-SEGPROF-INDEX).
INSPECT W-SEGPROF-PLT-NAME(W-SEGPROF-INDEX) REPLACING ALL LOW-VALUE BY
SPACE.
MOVE SEGPROF-NOTE TO
W-SEGPROF-NOTE(W-SEGPROF-INDEX).
INSPECT W-SEGPROF-NOTE(W-SEGPROF-INDEX) REPLACING ALL LOW-VALUE BY SPACE.
MOVE SEGPROF-SECURITY-TABLE TO
W-SEGPROF-SECURITY-TABLE(W-SEGPROF-INDEX).
INSPECT W-SEGPROF-SECURITY-TABLE(W-SEGPROF-INDEX) REPLACING ALL LOW-VALUE
BY SPACE.
GO TO RTN-READ-SEGPROF.
RTN-READ-SEGPROF-END.
GO TO RTN-BUILD-RECORD.
**********************************************************
THE ROOT, DEPENDENT PLTPE AND OTHER SEGMENTS HAVE BEEN READ.
BUILD THE OUTPUT RECORD(S).
********************************************************
RTN-BUILD-RECORD.
SET W-PLTPE-INDEX TO W-ZERO.
SET W-SEGPROF-INDEX TO W-ZERO.
RTN-BUILD-PLTPE.
SET W-PLTPE-INDEX UP BY 1.
IF W-PLTPE-INDEX GREATER THAN W-PLTPE-SEQ-LAST SET W-PLTPE-INDEX TO W-ZERO
GO TO RTN-READ-PLT.
RTN-BUILD-SEGPROF.
Srinimf.com