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.
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 06/02/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 V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 06/02/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 V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 06/02/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 V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/SAMPTYPE AISERIES 06/02/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, 2006. All Rights Reserved.