In ILE COBOL, you can use the TYPEDEF clause to create user-defined data types. User-defined data types are not additions to the already available ILE COBOL data types, such as alphanumeric, numeric, boolean, and so on. User-defined data types (also known as type definitions or type-names) are actually entire elementary or group items that have been defined in the WORKING-STORAGE, LOCAL-STORAGE, LINKAGE or FILE section of a program, using the TYPEDEF clause. These type definitions act like templates that can then be used, using the TYPE clause, to define new data items. The new data item acquires all the characteristics of the user-defined data type. If the user-defined data type is a group item, then the new data item has subordinate elements of the same name, description, and hierarchy as those belonging to the user-defined data type.
User-defined data types can save you time and minimize source code because you don't have to redefine complex data structures that occur as part of the definition of two or more data items within your program. All you need to do is create one definition, and apply it to any subsequent definitions of the same type that you might need, by using the TYPE clause.
For example, imagine you are developing an inventory program for a small distributor, that distributes two types of items:
Let's say the inventory program is going to count the amount on hand for each of the individual clothing items and books and store these in separate data items, and then also put the accumulated totals for the clothing and book inventories into separate data items.
Figure 50 is an example of how you could use the TYPEDEF and TYPE clauses to save time and minimize source code for the WORKING-STORAGE section of a program like this.
This example creates a user-defined data type for clothing and books. Then it creates separate data items for the three different clothing items and two different book items, based on the user-defined data types. This is much easier and more efficient than having to re-code the definitions for each of the inventory types. There's less chance of making a mistake, too.
Figure 50. Example Showing How TYPEDEF and TYPE Clauses Can Be Used in a Program
5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 03/09/15 13:31:06 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. SAMPTYPE. 000300 000400************************************************************** 000500* The following program demonstrates some of the funcitons 000600* available with the TYPE and TYPEDEF clauses. 000700************************************************************** 000800 3 000900 ENVIRONMENT DIVISION. 4 001000 CONFIGURATION SECTION. 5 001100 SOURCE-COMPUTER. IBM-ISERIES 6 001200 OBJECT-COMPUTER. IBM-ISERIES 7 001300 INPUT-OUTPUT SECTION. 8 001400 FILE-CONTROL. 9 001500 SELECT DATA-IN 10 001600 ASSIGN TO Database-INVDATA 11 001700 ORGANIZATION IS INDEXED 12 001800 record key is inv-type 001900 with duplicates 13 002000 ACCESS MODE IS SEQUENTIAL. 002100 14 002200 SELECT PRINTER-FILE 15 002300 ASSIGN TO PRINTER-QPRINT 16 002400 ORGANIZATION IS SEQUENTIAL 17 002500 ACCESS MODE IS SEQUENTIAL. 002600 18 002700 DATA DIVISION. 19 002800 FILE SECTION. 20 002900 FD PRINTER-FILE. 21 003000 01 PRINTER-REC. 22 003100 05 PRINTER-RECORD PIC X(132). 003200 003300************************************************************** 003400* define inventory type 003500************************************************************** 23 003600 01 INV-TYPE-T IS TYPEDEF PIC S9(3) VALUE 0. 24 003700 88 INV-TYPE-BOOK VALUE 4, 5. 25 003800 88 INV-TYPE-BOOK-001 VALUE 4. 26 003900 88 INV-TYPE-BOOK-002 VALUE 5. 27 004000 88 INV-TYPE-CLOTHES VALUE 1, 2, 3. 28 004100 88 INV-TYPE-CLOTHES-SWEATERS VALUE 1. 29 004200 88 INV-TYPE-CLOTHES-SOCKS VALUE 2. 30 004300 88 INV-TYPE-CLOTHES-PANTS VALUE 3. 004400 31 004500 FD DATA-IN. 32 004600 01 DATA-IN-REC. 33 004700 05 INV-TYPE TYPE INV-TYPE-T. 34 004800 05 FILLER PIC X(80). 004900 35 005000 WORKING-STORAGE SECTION. 005100************************************************************** 005200* Initialize END-OF-FILE flag to FALSE 005300************************************************************** 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 03/09/15 13:31:06 Page 3 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 005400 36 005500 01 END-OF-FILE PIC 1 VALUE B"0". 37 005600 88 AT-END-OF-FILE VALUE B"1". 38 005700 01 ITEM-PRICE-T TYPEDEF PIC S9(4)V9(2) value 0. 39 005800 01 ITEM-COLOR-T TYPEDEF PIC S9(2) VALUE 1. 40 005900 88 ITEM-COLOR-BLUE VALUE 1. 41 006000 88 ITEM-COLOR-RED VALUE 2. 42 006100 88 ITEM-COLOR-GREEN VALUE 3. 43 006200 01 ITEM-SIZE-T TYPEDEF PIC S9(2) VALUE 10. 44 006300 01 ITEM-COUNTER-T TYPEDEF PIC S9(6) VALUE 0. 006400 45 006500 01 ITEM-B-T TYPEDEF. 46 006600 05 ITEM-B-VALUE PIC s9(2). 47 006700 88 ITEM-B-BLUE VALUE 1. 48 006800 88 ITEM-B-RED VALUE 2. 49 006900 88 ITEM-B-GREEN VALUE 3. 50 007000 01 TEST-ITEM TYPE ITEM-B-T. 007100 51 007200 01 WORK-INV-TYPE TYPE INV-TYPE-T. 007300************************************************************** 007400* User-defined data type for items of clothing. 007500* Items of clothing are INVENTORY-TYPE 1 through 3. 007600************************************************************** 007700 52 007800 01 CLOTHING-ITEM IS TYPEDEF. 53 007900 05 CLOTHING-TYPE TYPE INV-TYPE-T. 54 008000 05 PRICE TYPE ITEM-PRICE-T. 55 008100 05 COLOR TYPE ITEM-COLOR-T. 56 008200 05 CLOTHING-SIZE TYPE ITEM-SIZE-T. 57 008300 05 FILLER PIC X(70). 008400 58 008500 01 SWEATERS TYPE CLOTHING-ITEM. 59 008600 01 SOCKS TYPE CLOTHING-ITEM. 60 008700 01 PANTS TYPE CLOTHING-ITEM. 008800 008900************************************************************** 009000* User-defined data type for books. 009100* Books are INVENTORY-TYPE 4 through 5. 009200************************************************************** 009300 61 009400 01 BOOK-ITEM IS TYPEDEF. 62 009500 05 BOOK-TYPE TYPE INV-TYPE-T. 63 009600 05 PRICE TYPE ITEM-PRICE-T. 64 009700 05 FILLER PIC X(20). 65 009800 05 BOOK-TITLE PIC X(40). 66 009900 05 FILLER PIC X(14). 010000 67 010100 01 BOOK-001 TYPE BOOK-ITEM. 68 010200 01 BOOK-002 TYPE BOOK-ITEM. 010300 010400************************************************************** 010500* Initialize all of the inventory counters. 010600************************************************************** 010700 69 010800 01 sweaters-count TYPE item-counter-t. 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 03/09/15 13:31:06 Page 4 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 70 010900 01 socks-count TYPE item-counter-t. 71 011000 01 pants-count TYPE item-counter-t. 011100 72 011200 01 book-001-count TYPE item-counter-t. 73 011300 01 book-002-count TYPE item-counter-t. 011400 74 011500 01 clothes-count TYPE item-counter-t. 75 011600 01 book-count TYPE item-counter-t. 011700 011800************************************************************** 011900* Declare report variables. 012000************************************************************** 012100 76 012200 01 header-line. 77 012300 05 FILLER pic x(40) value spaces. 78 012400 05 FILLER pic x(52) value "Detailed Inventory Report". 79 012500 05 FILLER pic x(40) value spaces. 012600 80 012700 01 DETAIL-LINE. 81 012800 05 FILLER pic x(10) value spaces. 82 012900 05 ITEM-DESCRIPTION pic x(25) value spaces. 83 013000 05 ITEM-QUANTITY pic 9(6) blank when zero. 84 013100 05 FILLER pic x(92) value spaces. 013200 013300 85 013400 PROCEDURE DIVISION. 013500 MAIN-PAR. 86 013600 OPEN INPUT DATA-IN 013700 OUTPUT PRINTER-FILE. 013800 013900 014000************************************************************** 014100* Read the first record. 014200************************************************************** 014300 87 014400 READ DATA-IN 014500 AT END 88 014600 SET AT-END-OF-FILE TO TRUE 014700 NOT AT END 89 014800 MOVE INV-TYPE TO WORK-INV-TYPE 014900 END-READ. 015000 015100************************************************************** 015200* Tally each of the inventory types and move the amounts into 015300* separate totals. 015400************************************************************** 015500 90 015600 PERFORM UNTIL AT-END-OF-FILE 91 015700 EVALUATE TRUE 015800 WHEN INV-TYPE-CLOTHES-SWEATERS OF WORK-INV-TYPE 92 015900 ADD 1 TO sweaters-count 93 016000 ADD 1 TO clothES-count 016100 WHEN INV-TYPE-CLOTHES-SOCKS OF WORK-INV-TYPE 94 016200 ADD 1 TO socks-count 95 016300 ADD 1 TO clothES-count 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 03/09/15 13:31:06 Page 5 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 016400 WHEN INV-TYPE-CLOTHES-PANTS OF WORK-INV-TYPE 96 016500 ADD 1 TO pants-count 97 016600 ADD 1 TO clothES-COUNT 016700 WHEN INV-TYPE-BOOK-001 OF WORK-INV-TYPE 98 016800 ADD 1 TO book-001-count 99 016900 ADD 1 TO book-count 017000 WHEN INV-TYPE-BOOK-002 OF WORK-INV-TYPE 100 017100 ADD 1 TO book-002-count 101 017200 ADD 1 TO book-count 017300 END-EVALUATE 017400 102 017500 READ DATA-IN 017600 AT END 103 017700 SET AT-END-OF-FILE TO TRUE 017800 NOT AT END 104 017900 MOVE INV-TYPE TO WORK-INV-TYPE 018000 END-READ 018100 END-PERFORM. 018200 018300************************************************************** 018400* Write report. 018500************************************************************** 018600 105 018700 PERFORM REPORT-WRITE. 106 018800 CLOSE DATA-IN 018900 PRINTER-FILE. 107 019000 STOP RUN. 019100 019200************************************************************** 019300* Procedure to write report. 019400************************************************************** 019500 019600 REPORT-WRITE. 108 019700 WRITE PRINTER-REC FROM HEADER-LINE AFTER ADVANCING PAGE. 019800 109 019900 MOVE "BOOKS:" TO ITEM-DESCRIPTION. 110 020000 MOVE ZEROS TO ITEM-QUANTITY. 111 020100 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 020200 112 020300 MOVE "Best-seller Number 1:" TO ITEM-DESCRIPTION. 113 020400 MOVE BOOK-001-COUNT TO ITEM-QUANTITY. 114 020500 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 020600 115 020700 MOVE "Best-seller Number 2:" TO ITEM-DESCRIPTION. 116 020800 MOVE BOOK-002-COUNT TO ITEM-QUANTITY. 117 020900 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 021000 118 021100 MOVE "Total Books:" TO ITEM-DESCRIPTION. 119 021200 MOVE BOOK-COUNT TO ITEM-QUANTITY. 120 021300 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 021400 121 021500 WRITE PRINTER-REC FROM HEADER-LINE AFTER ADVANCING PAGE. 021600 122 021700 MOVE "CLOTHES:" TO ITEM-DESCRIPTION. 123 021800 MOVE ZEROS TO ITEM-QUANTITY. 124 021900 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 022000 125 022100 MOVE "Sweaters:" TO ITEM-DESCRIPTION. 126 022200 MOVE SWEATERS-COUNT TO ITEM-QUANTITY. 127 022300 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 022400 128 022500 MOVE "Socks:" TO ITEM-DESCRIPTION. 129 022600 MOVE SOCKS-COUNT TO ITEM-QUANTITY. 130 022700 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 022800 131 022900 MOVE "Pants:" TO ITEM-DESCRIPTION. 132 023000 MOVE PANTS-COUNT TO ITEM-QUANTITY. 133 023100 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 023200 134 023300 MOVE "Total Clothes:" TO ITEM-DESCRIPTION. 135 023400 MOVE CLOTHES-COUNT TO ITEM-QUANTITY. 136 023500 WRITE PRINTER-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES. 023600 * * * * * E N D O F S O U R C E * * * * * |
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.