ILE COBOL Programmer's Guide


Creating User-Defined Data Types

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   * * * * *


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]