A typical application for using pointer data items is in processing a chained list (a series of records where each one points to the next).
For this example, picture a chained list of data that is composed of individual salary records. Figure 84 shows one way to visualize how these records are linked in storage:
Figure 84. Representation of a Chained List Ending with NULL
The first item in each record (except for the last record) points to the next record. The first item in the last record, in order to indicate that it is the last record, contains a null value instead of an address.
The high-level logic of an application that processes these records might look something like this:
OBTAIN ADDRESS OF FIRST RECORD IN CHAINED LIST FROM ROUTINE CHECK FOR END OF THE CHAINED LIST DO UNTIL END OF THE CHAINED LIST PROCESS RECORD GO ON TO THE NEXT RECORD END
Figure 85 contains an outline of the processing program, CHAINLST, used in this example of processing a chained list.
Figure 85. ILE COBOL Program for Processing a Chained List
5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/CHAINLST ISERIES1 03/09/15 13:45:02 Page 2 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 000100 IDENTIFICATION DIVISION. 2 000200 PROGRAM-ID. CHAINLST. 3 000300 ENVIRONMENT DIVISION. 4 000400 DATA DIVISION. 000500* 5 000600 WORKING-STORAGE SECTION. 6 000700 77 PTR-FIRST POINTER VALUE IS NULL. 7 000800 77 DEPT-TOTAL PIC 9(4) VALUE IS 0. 000900* 8 001000 LINKAGE SECTION. 9 001100 01 SALARY-REC. 10 001200 05 PTR-NEXT-REC POINTER. 11 001300 05 NAME PIC X(20). 12 001400 05 DEPT PIC 9(4). 13 001500 05 SALARY PIC 9(6). 14 001600 01 DEPT-X PIC 9(4). 001700* 15 001800 PROCEDURE DIVISION USING DEPT-X. 001900 CHAINLST-PROGRAM SECTION. 002000 MAINLINE. 002100* 002200* FOR EVERYONE IN THE DEPARTMENT RECEIVED AS DEPT-X, 002300* GO THROUGH ALL OF THE RECORDS IN THE CHAINED LIST BASED ON THE 002400* ADDRESS OBTAINED FROM THE PROGRAM CHAINANC 002500* AND ACCUMULATE THE SALARIES. 002600* IN EACH RECORD, PTR-NEXT-REC IS A POINTER TO THE NEXT RECORD 002700* IN THE LIST; IN THE LAST RECORD, PTR-NEXT-REC IS NULL. 002800* DISPLAY THE TOTAL. 002900* 16 003000 CALL "CHAINANC" USING PTR-FIRST 17 003100 SET ADDRESS OF SALARY-REC TO PTR-FIRST 003200* 18 003300 PERFORM WITH TEST BEFORE UNTIL ADDRESS OF SALARY-REC = NULL 19 003400 IF DEPT = DEPT-X THEN 20 003500 ADD SALARY TO DEPT-TOTAL 003600 END-IF 21 003700 SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC 003800 END-PERFORM 003900* 22 004000 DISPLAY DEPT-TOTAL 23 004100 GOBACK. 004200 * * * * * E N D O F S O U R C E * * * * * |
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.