000100 IDENTIFICATION DIVISION. 00010024 000200 PROGRAM-ID. TABLE5. 00020027 000300 AUTHOR. SAMUELS. 00030025 000400************************************************************* 00040025 000500* THIS PROGRAM ILLUSTRATES A MORE ADVANCED TABLE HANDLING * 00050025 000600* TECHNIQUE OF SEARCHING A VARIABLE LENGTH TABLE. * 00060025 000700* A FILE CONTAINING RECORDS THAT ONLY HAVE ONE FIELD, * 00070025 000800* AN INVENTORY NUMBER, IS READ IN. A BINARY SEARCH IS * 00080025 000900* PERFORMED TO FIND OUT WHETHER OR NOT THE NUMBER EXITS * 00090025 001000* IN THE TABLE. IF THE NUMBER EXISTS IN THE TABLE, THE * 00100025 001100* DESCRIPTION, PRICE AND QUANTITY ARE DISPLAYED. * 00110025 001200* --- USE DATA5B AND DATA5C --- SUBMIT JCLPRO5E --- * 00120028 001300************************************************************* 00130025 001400 ENVIRONMENT DIVISION. 00140025 001500 INPUT-OUTPUT SECTION. 00150025 001600 FILE-CONTROL. 00160025 001700 SELECT INFILE ASSIGN TO STUFFIN. 00170025 001800 SELECT HUNT-FILE ASSIGN TO INVNUMS. 00180025 001900 DATA DIVISION. 00190025 002000 FILE SECTION. 00200025 002100*COPY FD5B. 00210025 000100 FD INFILE 00010005 000200 BLOCK CONTAINS 0 RECORDS 00020006 000300 RECORD CONTAINS 80 CHARACTERS 00030006 000310 RECORDING MODE IS F 00031006 000400 LABEL RECORDS ARE STANDARD 00040006 000500 DATA RECORD IS INREC. 00050006 000600 01 INREC. 00060006 000700 05 INV-NUM-IN PIC X(5). 00070007 000800 05 INV-DESC-IN PIC X(15). 00080007 000900 05 INV-QUANTITY-IN PIC 999. 00090007 001000 05 PIC X. 00100007 001100 05 INV-PRICE-IN PIC 999V99. 00110007 001200 05 PIC X(51). 00120007 002200 FD HUNT-FILE 00220025 002300 BLOCK CONTAINS 0 RECORDS 00230025 002400 RECORD CONTAINS 80 CHARACTERS 00240025 002500 RECORDING MODE IS F 00250025 002600 LABEL RECORDS ARE OMITTED 00260025 002700 DATA RECORD IS INV-REC. 00270025 002800 01 INV-REC. 00280025 002900 05 HUNTER-INV-NUM PIC X(5). 00290025 003000 05 FILLER PIC X(75). 00300025 003100 WORKING-STORAGE SECTION. 00310025 003200 01 SWITCH PIC XXX VALUE SPACES. 00320025 003300 01 INVENTORY-TABLE. 00330025 003400 05 INFO OCCURS 0 TO 50 TIMES DEPENDING ON COUNTX 00340025 003500 ASCENDING KEY TAB-INV-NUM 00350030 003600 INDEXED BY INV-IND. 00360025 003700 10 TAB-INV-NUM PIC X(5). 00370025 003800 10 TAB-INV-DESC PIC X(15). 00380025 003900 10 TAB-INV-QUANTITY PIC 999. 00390025 004000 10 TAB-INV-PRICE PIC 999V99. 00400025 004100 01 COUNTX PIC 99 VALUE 0. 00410025 004200 PROCEDURE DIVISION. 00420025 004300 000-MAINLINE. 00430025 004400 PERFORM 100-BEGIN. 00440025 004500 PERFORM 200-LOADER UNTIL SWITCH = 'YES'. 00450025 004600 PERFORM 300-ENDLOAD. 00460025 004700 PERFORM 400-START-UP. 00470025 004800 PERFORM 500-SEARCH-ROUTINE UNTIL SWITCH = 'YES'. 00480025 004900 PERFORM 600-END-IT-FOREVER. 00490025 005000 100-BEGIN. 00500025 005100 OPEN INPUT INFILE. 00510025 005200 READ INFILE AT END 00520025 005300 MOVE 'YES' TO SWITCH 00530025 005400 END-READ. 00540025 005500 200-LOADER. 00550025 005600 ADD 1 TO COUNTX. 00560025 005700 MOVE INV-NUM-IN TO TAB-INV-NUM (COUNTX). 00570025 005800 MOVE INV-DESC-IN TO TAB-INV-DESC (COUNTX). 00580025 005900 MOVE INV-QUANTITY-IN TO TAB-INV-QUANTITY (COUNTX). 00590025 006000 MOVE INV-PRICE-IN TO TAB-INV-PRICE (COUNTX). 00600025 006100 READ INFILE AT END 00610025 006200 MOVE 'YES' TO SWITCH 00620025 006300 END-READ. 00630025 006400 300-ENDLOAD. 00640025 006500 CLOSE INFILE. 00650025 006600 400-START-UP. 00660025 006700 OPEN INPUT HUNT-FILE. 00670025 006800 MOVE SPACES TO SWITCH. 00680025 006900 READ HUNT-FILE AT END 00690025 007000 MOVE 'YES' TO SWITCH 00700025 007100 END-READ. 00710025 007200 500-SEARCH-ROUTINE. 00720025 007300 SEARCH ALL INFO AT END PERFORM 550-NOT-THERE-ROUTINE 00730030 007400 WHEN TAB-INV-NUM (INV-IND) = HUNTER-INV-NUM 00740025 007500 PERFORM 560-FOUND-IT-ROUTINE. 00750025 007600 READ HUNT-FILE AT END 00760025 007700 MOVE 'YES' TO SWITCH 00770025 007800 END-READ. 00780025 007900 550-NOT-THERE-ROUTINE. 00790025 008000 DISPLAY HUNTER-INV-NUM ' NOT IN TABLE'. 00800025 008100 DISPLAY ' '. DISPLAY ' '. 00810025 008200 560-FOUND-IT-ROUTINE. 00820025 008300 DISPLAY 'INVENTORY NUMBER = ' TAB-INV-NUM (INV-IND). 00830025 008400 DISPLAY 'DESCRIPTION = ' TAB-INV-DESC (INV-IND). 00840025 008500 DISPLAY 'QUANTITY = ' TAB-INV-QUANTITY (INV-IND). 00850025 008600 DISPLAY 'PRICE = ' TAB-INV-PRICE (INV-IND). 00860025 008700 DISPLAY ' '. DISPLAY ' '. 00870025 008800 600-END-IT-FOREVER. 00880025 008900 CLOSE HUNT-FILE. 00890025 009000 STOP RUN. 00900025 INPUT (DATA5B) 11245HAMMER 030 00800 14209WASH BASIN 012 03500 15594CEMENT BAG 023 01450 18903FERTILIZER 105 00900 21832OIL PAINT 050 01095 21903LATEX PAINT 040 00850 25904PAINT BRUSH 250 00300 31024GAS CAN 020 00600 34242CAR WAX 077 00645 37892SCREW DRIVER 120 00500 39850SAW BLADE 090 00150 43902SANDPAPER 200 00050 49055GLUE 100 00235 52094WRENCH 006 00890 61293FAUCET 030 12000 64322UTILITY KNIFE 120 00500 78932PLANE 060 01240 82312DRILL 030 03995 87923EDGER 005 08950 (DATA 5C) 31024 43826 82312 15594 43902 31024 56283 78932 OUTPUT INVENTORY NUMBER = 31024 DESCRIPTION = GAS CAN QUANTITY = 020 PRICE = 00600 43826 NOT IN TABLE INVENTORY NUMBER = 82312 DESCRIPTION = DRILL QUANTITY = 030 PRICE = 03995 INVENTORY NUMBER = 15594 DESCRIPTION = CEMENT BAG QUANTITY = 023 PRICE = 01450 INVENTORY NUMBER = 43902 DESCRIPTION = SANDPAPER QUANTITY = 200 PRICE = 00050 INVENTORY NUMBER = 31024 DESCRIPTION = GAS CAN QUANTITY = 020 PRICE = 00600 56283 NOT IN TABLE INVENTORY NUMBER = 78932 DESCRIPTION = PLANE QUANTITY = 060 PRICE = 01240