Compaq COBOL
Reference Manual
In this example:
  - The relative locations of records (01-level items) in the 
  Working-Storage and Linkage Sections are neither defined nor 
  predictable.
  
 - The structures of ITEM-J (a record) and ITEM-C (a group item within 
  a record) are identical.
 
Example 2 
  
    
       
      
 WORKING-STORAGE SECTION. 
01    ITEM-A. 
    03    ITEM-B            PIC X. 
    03    ITEM-C. 
        05    ITEM-D OCCURS 3 TIMES. 
            07    ITEM-E    PIC X. 
            07    ITEM-F    PIC 9999 COMP SYNC. 
            07    ITEM-G    PIC X. 
    03    ITEM-H            PIC X. 
 | 
In this example:
  - A fill byte is added after each occurrence of ITEM-D to maintain 
  2-byte boundary alignment of the next occurrence.
  
 - ITEM-D is 5 bytes long. The fill byte following ITEM-D is not 
  included in its length.
  
 - ITEM-C is 18 bytes long. Its length includes the fill bytes 
  associated with its subordinate items.
  
 - The record ITEM-A is 21 bytes long.
 
Example 3 
  
    
       
      
WORKING-STORAGE SECTION. 
01    ITEM-A. 
    03    ITEM-B            PIC X. 
    03    ITEM-C. 
        05    ITEM-D OCCURS 3 TIMES. 
            07    ITEM-E    PIC X. 
            07    ITEM-F    PIC 9999 COMP SYNC. 
    03    ITEM-H            PIC X. 
 | 
In this example:
  - ITEM-G is omitted.
  
 - ITEM-D is 4 bytes long. No fill bytes are added, since the next 
  occurrence is already aligned on a 2-byte boundary.
  
 - ITEM-C is 12 bytes long.
  
 - The record ITEM-A is 15 bytes long.
 
5.2.4 Alpha-Only Alignment and Padding
The Compaq Alpha Calling Standards for the Tru64 UNIX and 
OpenVMS Alpha systems specify Alpha natural data alignment and padding. 
You invoke this alignment by adding the
alignment padding
 compiler option to the compile command line, or by using
pad align
 directives in your source code. (Refer to the Compaq COBOL User Manual for 
 additional information on the command.)
The natural Alpha alignments and field sizes that apply to 
elementary COBOL data fields are shown in Table 5-4. 
  Table 5-4 Alpha Alignment and Padding
  
    | Data Types  | 
    Alignment Starting Position  | 
    Pictures  | 
    Usages  | 
  
  
    | 
      8-bit character string
     | 
    
      Byte boundary
     | 
    
      A, X, 9, Edited
     | 
    
       Display
     | 
  
  
    | 
      16-bit integer
     | 
    
      Word boundary, multiple of 2
     | 
    
      9(4)
     | 
    
       COMP
     | 
  
  
    | 
      32-bit integer
     | 
    
      Longword boundary, multiple of 4
     | 
    
      9(8)
     | 
    
       COMP
     | 
  
  
    | 
      Single-precision real
     | 
    
       
     | 
    
       
     | 
    
      COMP-1
     | 
  
  
    | 
      64-bit integer
     | 
    
      Quadword boundary, multiple of 8
     | 
    
      9(16)
     | 
    
      COMP
     | 
  
  
    | 
      Double-precision real
     | 
    
       
     | 
    
       
     | 
    
      COMP-2
     | 
  
These alignments and field sizes apply to elementary data items. 
However, they are extended to group data items at all level numbers by 
requiring that the alignment of the group data item conforms to the 
alignment of the largest natural alignment of any elementary data item 
that is subordinate to the group-item. Every intermediate group data 
item in Compaq COBOL is a candidate for natural Alpha 
alignment and padding. Every higher-level data item is padded to be the 
smallest multiple of the largest natural alignment of any of its 
subordinate elementary data items that contains the data structure. The 
alignment and padding can be determined in all cases by following the 
tree structure through as many levels as required until the elementary 
data item with the largest natural alignment is found. All elementary 
data items are aligned and sized within their data structures according 
to Table 5-4. <>
5.3 DATA DIVISION General Format and Rules
Function 
The Data Division describes data the program creates, receives as 
input, manipulates, and produces as output.
Syntax Rules 
  - The Data Division follows the Environment Division.
  
 - The reserved words DATA DIVISION, followed by a period (.) 
  separator character identify and begin the Data Division.
 
General Rules 
  - The Data Division is subdivided into sections. These sections must 
  be in the following order:
  
    FILE SECTION.
    
WORKING-STORAGE SECTION.
    
LINKAGE SECTION.
    
REPORT SECTION.
    
SCREEN SECTION. (Alpha)
  
 
File Section 
  - The File Section defines the structure of data files. It begins 
  with the File Section header containing the reserved words FILE 
  SECTION, followed by a period (.) separator character.
  
 - File description entries and sort-merge file description entries 
  follow the File Section header. They can be in any order.
  
 - The file description entry consists of a level indicator (FD), a 
  file-name, and a series of independent clauses.
  
 - The FD clause specifies the following:
  
    - How the file records data
    
 - The sizes of logical and physical records
    
 - The names of data records (except for report files)
    
 - The number of lines on a logical printer page
  
 
   - An FD entry, followed by one or more record description entries, 
  defines a sequential, relative, or indexed file. Record description 
  entries must immediately follow the associated FD entry.
  
 - No record description entries may follow the report file 
  description entry.
  
 - The sort-merge file description entry consists of a level indicator 
  (SD), a file-name, and a series of independent clauses.
  
 - An SD clause specifies the following:
  
    - How the file records data
    
 - The sizes of logical and physical records
    
 - The names of data records
  
 
   - An SD entry specifies the sizes and names of data records for a 
  sort-merge file referred to by SORT and MERGE statements.
  
 - An SD entry, followed by one or more record description entries, 
  defines a file. Record description entries must immediately follow the 
  associated SD entry.
 
Working-Storage Section 
  - The Working-Storage Section describes records and subordinate data 
  items. These records are not parts of files; rather, the program 
  develops and processes them internally.
  
 - The Working-Storage Section also describes data items assigned 
  values by the source program.
  
 - The Working-Storage Section consists of a section header, followed 
  by record description entries.
  
 - The section header consists of the reserved words WORKING-STORAGE 
  SECTION, followed by a period (.) separator character.
  
 - A record description entry groups data items that bear a 
  hierarchical relationship to each other. Unrelated data items in the 
  Working-Storage Section can be described as records that are individual 
  elementary items.
  
 - Record description clauses can be used in the File Section, the 
  Working-Storage Section, or the Linkage Section.
  
 - The VALUE IS clause can specify the initial value of any item in 
  the Working-Storage Section except index data items (described by the 
  USAGE IS INDEX clause) and index-names (described by the INDEXED BY 
  phrase of the OCCURS clause).
  
 - If the VALUE IS clause does not specify an initial value, the 
  default initial value for an item depends on the type of data item:
  
    | Data Item Type  | 
    Default Initial Value  | 
  
  
    | 
      Numeric
     | 
    
      Zero
     | 
  
  
    | 
      Index-name
     | 
    
      Occurrence number one
     | 
  
  
    | 
      Index data item
     | 
    
      Undefined
     | 
  
  
    | 
      Tables
     | 
    
      Undefined
     | 
  
  
    | 
      All others
     | 
    
      Spaces
     | 
  
 
Linkage Section 
  - The Linkage Section is used only in a called program.
  
 - The Linkage Section describes data available through the calling 
  program; both the calling and called programs can access this data.
  
 - To access calling program data items through the Linkage Section, 
  the called program must have a Procedure Division header USING phrase.
  
 - The structure of the Linkage Section is the same as that of the 
  Working-Storage Section. It consists of a section header followed by 
  record description entries. The section header consists of the reserved 
  words LINKAGE SECTION followed by a period (.) separator character.
 
Report Section 
  - The Report Section defines report files. It begins with the Report 
  Section header: the reserved words REPORT SECTION, followed by a period 
  (.) separator character.
  
 - Report description entries follow the Report Section header.
  
 - The report description entry consists of a level indicator (RD), a 
  report name, and a series of independent clauses.
  
 - An RD clause specifies the following:
  
    - Identifying characters to be prefixed to each print line in a report
    
 - The physical structure and organization of a report
    
 - The name of the report
  
 
   - An RD entry, followed by one or more report group description 
  entries, defines a report. Report group description entries must 
  immediately follow the associated report description entry.
  
 - A report group description entry defines a report group. It 
  specifies the characteristics of a report group and the individual 
  items within a report group.
 
Screen Section (Alpha) 
  - The Screen Section describes a video form and specifies the 
  attributes, behavior, size, and location of each screen item within the 
  video form. The Screen Section is for use with ACCEPT and DISPLAY 
  statements. <>
 
Additional References 
5.3.1 FD (File Description) Sequential,  Line Sequential (Alpha), Relative, Indexed, and Report File Descriptions
Function
A file description entry describes the physical structure, 
identification, record names, and names for sequential, line sequential 
(Alpha), relative, indexed, and report files. It also specifies the 
internal or external attributes of a file connector and the local or 
global attributes of a file-name.
*Clauses marked with an asterisk (*) can be in either the SELECT clause 
of the Environment Division or the file description entry of the Data 
Division. They cannot be in both places for the same file.
Syntax Rules
Formats 1, 2, 3, and 4---All Files
  - The level indicator FD identifies the start of a file description 
  entry. It must precede file-name.
  
 - The clauses following file-name can appear in any order.
  
 - A period (.) separator character must terminate a file description 
  entry.
  
 -  On OpenVMS, the file name written to disk (see the ASSIGN clause 
  in Chapter 4) has the file type .DAT added if no other file type is 
  specified in the corresponding file specification. <>
 
Format 1---Sequential or Line Sequential (Alpha) Files
  - file-name can refer only to a sequential file.
  
 - One or more record description entries must follow the file 
  description entry.
 
Format 2---Relative Files
  - file-name can refer only to a relative file.
  
 - If a START statement refers to file-name, the file 
  description must include the RELATIVE KEY phrase within the ACCESS MODE 
  clause.
  
 - One or more record description entries must follow the file 
  description entry.
 
Format 3---Indexed Files
  - file-name can refer only to an indexed file.
  
 -  On Tru64 UNIX, for information on file-names for indexed 
  files, see the ASSIGN clause in Chapter 4.<>
  
 - alt-key cannot have the same leftmost character position 
  as that of rec-key or any other alt-key for the same 
  file.
  
 - One or more record description entries must follow the file 
  description entry.
 
Format 4---Report Files
  - file-name can refer only to a report file.
  
 - No record description entries may follow the file description entry 
  for a report file.
  
 - Only the CLOSE statement and the OPEN statement with the OUTPUT or 
  EXTEND phrase may reference this file description entry.
 
General Rules
Formats 1, 2, 3, and 4---All Files
  - A file description entry associates file-name with a file 
  connector.
  
 - On OpenVMS, if the file description entry contains the EXTERNAL 
  clause, the RMS special registers RMS-STS, RMS-STV, and RMS-FILENAME 
  are external registers.
  
 - If the file description entry contains the GLOBAL clause, the RMS 
  special registers RMS-STS, RMS-STV, and RMS-FILENAME are global 
  registers. <>
 
Format 1---Sequential and Line Sequential (Alpha) Files
  - If the file description entry contains the LINAGE clause and the 
  EXTERNAL clause, the LINAGE-COUNTER special register is an external 
  data item.
  
 - If the file description entry contains the LINAGE clause and the 
  GLOBAL clause, the special register LINAGE-COUNTER is a global name.
 
Format 3---Indexed Files
  - If the file description entry contains the EXTERNAL clause, the 
  segmented key seg-key has the external attribute.
  
 - If the file description entry contains the GLOBAL clause, the 
  segmented key seg-key is a global name.
 
Refer to the Compaq COBOL User Manual for examples of the file description entry 
formats.
5.3.2 SD (Sort-Merge File Description)
Function
A sort-merge file description entry describes a sort or merge file's 
physical structure, identification, and record names.
Syntax Rules
  - The level indicator SD identifies the start of a sort-merge file 
  description. It must precede file-name.
  
 - The clauses following file-name can appear in any order.
  
 - A period (.) separator character must terminate a sort-merge file 
  description entry.
  
 - One or more record description entries must follow the sort-merge 
  file description entry.
 
General Rule
No input-output statements can refer to a file-name in a 
sort-merge file description.
Examples
Refer to the Compaq COBOL User Manual for examples of the sort-merge file 
description entry.
5.3.3 RD (Report Description)
Function
The Report Description names a report, specifies any identifying 
characters to be prefixed to each print line in the report, and 
describes the physical structure and organization of that report. It 
also determines whether a report-name is a local name or 
global name.
Syntax Rules
  - report-name must appear in one and only one REPORT clause.
  
 - The clauses following report-name may appear in any order. 
  report-name is the highest permissible qualifier that can be 
  specified for LINE-COUNTER, PAGE-COUNTER, and all data-names in the 
  Report Section.
 
General Rules
  - If the Report Description entry contains the GLOBAL clause, 
  report-name and the special registers LINE-COUNTER and 
  PAGE-COUNTER are global names.
  
 - The reserved word PAGE-COUNTER references a special register that 
  the compiler creates for each report in the Report Section.
  
 - In the Report Section, a reference to PAGE-COUNTER can appear only 
  in a SOURCE clause. In the Procedure Division, PAGE-COUNTER can be used 
  anywhere an integer data item can appear.
  
 - If more than one PAGE-COUNTER exists in a program, PAGE-COUNTER 
  must be qualified by a report-name wherever it is referenced 
  in the Procedure Division. 
In the Report Section, an unqualified 
  reference to PAGE-COUNTER is qualified implicitly by the name of the 
  report containing the reference. Whenever the PAGE-COUNTER of a 
  different report is referenced, PAGE-COUNTER must be explicitly 
  qualified by the other report's report-name.
   - The INITIATE statement causes the Report Writer Control System to 
  set the PAGE-COUNTER of the referenced report to one.
  
 - PAGE-COUNTER is automatically incremented by one each time the 
  Report Writer Control System executes a page advance.
  
 - Procedure Division statements may alter the contents of 
  PAGE-COUNTER.
  
 - The reserved word LINE-COUNTER references a special register that 
  the compiler creates for each report in the Report Section.
  
 - In the Report Section, a reference to LINE-COUNTER can appear only 
  in a SOURCE clause. In the Procedure Division, LINE-COUNTER can be used 
  anywhere a data item with an integer value can appear. However, only 
  the Report Writer Control System can change the contents of 
  LINE-COUNTER.
  
 - If there is more than one LINE-COUNTER in a program, Procedure 
  Division references to LINE-COUNTER must be qualified by a 
  report-name. 
In the Report Section, an unqualified 
  reference to LINE-COUNTER is qualified implicitly by the name of the 
  report containing the reference. Whenever the LINE-COUNTER of a 
  different report is referenced, LINE-COUNTER must be explicitly 
  qualified by the other report's report-name.
   - The INITIATE statement causes the Report Writer Control System to 
  set the LINE-COUNTER of the referenced report to zero. The Report 
  Writer Control System also automatically resets LINE-COUNTER to zero 
  each time it executes a page advance.
  
 - The execution of SUPPRESS statements and the processing of 
  nonprintable report groups do not change the value of LINE-COUNTER.
  
 - At the time each print line is presented, the value of LINE-COUNTER 
  represents the line number on which the print line is presented. After 
  the presentation of the report group, the value of LINE-COUNTER is 
  governed by the Report Writer Presentation Rules and Tables.
 
Additional References
Example
The following is an example of a global Report Description entry:
  
    
       
      
FILE SECTION. 
FD   WEEKLY-REPORTS...
     REPORTS ARE PAYROLL-REPORT 
                 PAYROLL-IRS. 
REPORT SECTION. 
 
RD   PAYROLL-REPORT 
     IS GLOBAL 
     CODE "AA" 
     CONTROL GRAND-TOT 
             SITE-TOT 
             DEPT-TOT 
             GROUP-TOT 
     PAGE LIMITS ARE 60 LINES 
             HEADING       2 
             FIRST DETAIL  9 
             LAST DETAIL  55 
             FOOTING      58. 
 
RD  PAYROLL-IRS 
    CODE "BB"...
 | 
The previous example uses the CODE clause to flag PAYROLL-REPORT 
records from other records (see PAYROLL-IRS) included in the same file 
(WEEKLY-REPORTS). The entry defines four control totals. GRAND-TOT is 
the most major control total; it will be printed only at the end of the 
report. SITE-TOT, DEPT-TOT, and GROUP-TOT are major, intermediate, and 
minor control totals, respectively. These totals are printed whenever 
the Report Writer Control System (RWCS) processes a control break. The 
entry also defines a report page with 60 lines. On each page the RWCS 
is to print PAYROLL-REPORT headings beginning on line 2, detail lines 
from lines 9 to 55, and footings beginning on line 58.
5.3.4 Data Description
Function
A data description entry specifies the characteristics of a data item.
Syntax Rules
  - level-number in Format 1 can be any number from 01 to 49, 
  or 77.
  
 - Data description clauses can appear in any order, with two 
  exceptions:
  
    - The optional data-name or FILLER clause must immediately 
    follow level-number.
    
 - The optional REDEFINES clause must immediately follow the optional 
    data-name or FILLER clause.
  
 
   - The EXTERNAL clause can appear in a level 01 or 77 data description 
  entry in the Working-Storage Section.
  
 - The GLOBAL clause can appear in a level 01 or 77 data description 
  entry in the Working-Storage Section, or in a level 01 data description 
  entry in the File Section.
  
 - The EXTERNAL and REDEFINES clauses cannot be in the same data 
  description entry.
  
 - data-name must appear in any Format 1 entry that contains 
  the EXTERNAL clause or GLOBAL clause, or in the record descriptions of 
  a file description entry that contains the EXTERNAL or GLOBAL clause.
  
 - There must be a PICTURE clause for all elementary items except the 
  following:
  
    - An index data item
    
 - A COMP-1 or COMP-2 data item
    
 - The subject of a RENAMES clause
    
 -  A POINTER data item
  
 
    
In these cases, there must be no PICTURE clause.
   - The words THRU and THROUGH are equivalent.
  
 - The SYNCHRONIZED, PICTURE, JUSTIFIED, and BLANK WHEN ZERO clauses 
  can appear only in Data Description entries for elementary items.
 
General Rules
  - Each condition-name requires a separate Format 3 entry. 
  The level 88 entry associates one or more values, or ranges of values, 
  with condition-name. 
All condition-name entries 
  for an associated data item (the conditional variable) must immediately 
  follow that item's data description entry. 
Any 
  condition-name associated with a global conditional variable 
  is global. 
A condition-name can be associated with a data 
  item at any level except:
  
    - Another condition-name
    
 - A level 66 item
    
 - A group that contains items with JUSTIFIED, SYNCHRONIZED, or USAGE 
    (other than USAGE IS DISPLAY) clauses
    
 - An index data item
  
 
   - Multiple level 01 data description entries subordinate to an FD or 
  SD entry implicitly redefine the same area.