HP 3000 Manuals

Packed Records [ HP Pascal/iX Programmer's Guide ] MPE/iX 5.0 Documentation


HP Pascal/iX Programmer's Guide

Packed Records 

Table 5-4  shows how the HP Pascal packing algorithm allocates and
aligns the fields of a packed record.  The field types are in
alphabetical order.

          Table 5-4.  Allocation and Alignment of Packed Record Fields 
                      (HP Pascal Packing Algorithm) 
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
|    Field Type     |                     Allocation                      |  Field Alignment  |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Anyptr            | 8 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Array, crunched   | Minimum number of bits required to represent any    | Bit               |
|                   | value of the element type.                          |                   |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Array, packed     | Use formula in "Arrays"  section and then pad to | Same as element   |
|                   | alignment boundary.                                 | or byte,          |
|                   |                                                     | whichever is      |
|                   |                                                     | larger.           |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Array, unpacked   | Use formula in "Arrays"  section and then pad to | Same as element.  |
|                   | alignment boundary.                                 |                   |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Bit16             | 2 bytes                                             | Bit               |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Bit32             | 4 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Bit52             | 8 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Boolean           | 1 bit                                               | Bit               |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Char              | 1 byte                                              | Bit               |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                                         |
| Enumeration       | See "Enumerations and Subranges" .                                   |
|                   |                                                                         |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| File              | See "Files" .                                    | 8-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Function          | 8 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Integer           | 4 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Globalanyptr      | 8 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Localanyptr       | 4 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Longint           | 8 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Longreal          | 8 bytes                                             | 8-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Pointer           | 4 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Procedure         | 8 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Real              | 4 bytes                                             | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------

          Table 5-4.  Allocation and Alignment of Packed Record Fields 
                      (HP Pascal Packing Algorithm) (cont.) 
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
|    Field Type     |                     Allocation                      |  Field Alignment  |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Record, packed    | Fields are allocated by type, and record is padded  | Largest alignment |
|                   | to the alignment boundary.                          | of any field or   |
|                   |                                                     | byte, whichever   |
|                   |                                                     | is larger.        |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Record, unpacked  | Fields are allocated by type, and record is padded  | Largest alignment |
|                   | to the alignment boundary.                          | of any field.     |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                                         |
| Set               | See "Sets" .                                                         |
|                   |                                                                         |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Shortint          | 2 bytes                                             | 2-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                     |                   |
| Strings           | See "Strings" .                                  | 4-byte            |
|                   |                                                     |                   |
-----------------------------------------------------------------------------------------------
|                   |                                                                         |
| Subrange          | See "Enumerations and Subranges" .                                   |
|                   |                                                                         |
-----------------------------------------------------------------------------------------------

The field that is aligned on the largest boundary determines the
alignment of the entire record.  For example, if a record has three
fields--one byte-aligned field, one 2-byte-aligned field, and one
4-byte-aligned field--the entire record is 4-byte-aligned.

Packing a record has no effect on fields that are unpacked structures.

Example 

     TYPE
        ua = ARRAY [1..4] OF Boolean;
        ur1 = RECORD
                 i : integer;
                 c : char;
              END;
     VAR
        ur2 : RECORD
                 c : char;
                 a : ua;
                 r : ur1;
              END;
        pr : PACKED RECORD
                c : char;
                a : ua;
                r : ur1;
             END;

The fields in ur2 and pr are allocated and aligned identically.



MPE/iX 5.0 Documentation