* Test4.cbl IDENTIFICATION DIVISION. PROGRAM-ID Test4 DATA DIVISION. WORKING-STORAGE SECTION. 01 My-List PIC S9(9) OCCURS 100 TIMES. 01 List-Max PIC S9(9). 01 R PIC S9(9). PROCEDURE DIVISION. COMPUTE List-Max = 100. CALL Init USING BY CONTENT List-Max BY REFERENCE My-List. COMPUTE R = 1. CALL Cons-My-List USING BY CONTENT R, My-List BY REFERENCE My-List. DISPLAY My-List (1). STOP RUN. * Init is a subprogram that initializes a list of 100 elements. * By convention, the first element of the list indicates the length of the * list. IDENTIFICATION DIVISION. PROGRAM-ID Init IS COMMON PROGRAM DATA DIVISION. WORKING-STORAGE SECTION. * empty LINKAGE SECTION. 01 List-Max PIC S9(9). 01 Result PIC S9(9) OCCURS 100 TIMES. PROCEDURE DIVISION USING List-Max, Result. IF List-Max NOT = 100 * generate a run-time error if the lists are of incompatible sizes COMPUTE Result (101) = 0 ELSE COMPUTE Result (1) = 0 END-IF. EXIT PROGRAM. END PROGRAM Init. * Cons is a subprogram that inserts an item onto the front of a list of * 100 elements. By convention, the first element of the list indicates the * length of the list. There is no error checking whether the list overflows * or not - it will cause a run-time error. IDENTIFICATION DIVISION. PROGRAM-ID Cons IS COMMON PROGRAM DATA DIVISION. WORKING-STORAGE SECTION. 01 I PIC S9(9). 01 List-Length PIC S9(9). LINKAGE SECTION. 01 Item PIC S9(9). 01 List PIC S9(9) OCCURS 100 TIMES. 01 Result PIC S9(9) OCCURS 100 TIMES. PROCEDURE DIVISION USING Item, List, Result. COMPUTE List-Length = List (1) + 1. COMPUTE List (1) = List-Length. COMPUTE List (List-Length) = Item. COMPUTE I = List-Length. PERFORM UNTIL I = 0 COMPUTE Result (I) = List (I) COMPUTE I = I - 1 END-PERFORM. EXIT PROGRAM. END PROGRAM Cons. * Cons-My-List is a subprogram that adds numbers to a list, My-List, from * R to 10. IDENTIFICATION DIVISION. PROGRAM-ID Cons-My-List IS COMMON PROGRAM DATA DIVISION. WORKING-STORAGE SECTION. * empty LINKAGE SECTION. 01 R PIC S9(9). 01 My-List PIC S9(9) OCCURS 100 TIMES. 01 Result PIC S9(9) OCCURS 100 TIMES. PROCEDURE DIVISION USING R, My-List, Result. PERFORM UNTIL R > 10 CALL Cons USING BY CONTENT R, My-List BY REFERENCE My-List COMPUTE R = R + 1 END-PERFORM. EXIT PROGRAM. END PROGRAM Cons-My-List. END PROGRAM Test4.