1with Unchecked_Conversion; 2 3package Rep_Clause2 is 4 5 type Tiny is range 0 .. 3; 6 for Tiny'Size use 2; 7 8 type Small is range 0 .. 255; 9 for Small'Size use 8; 10 11 type Small_Data is record 12 D : Tiny; 13 N : Small; 14 end record; 15 pragma Pack (Small_Data); 16 17 type Chunk is 18 record 19 S : Small_Data; 20 C : Character; 21 end record; 22 23 for Chunk use record 24 S at 0 range 0 .. 15; 25 C at 2 range 0 .. 7; 26 end record; 27 28 type Index is range 1 .. 10; 29 30 type Data_Array is array (Index) of Chunk; 31 for Data_Array'Alignment use 2; 32 pragma Pack (Data_Array); 33 34 type Data is record 35 D : Data_Array; 36 end record; 37 38 type Bit is range 0 .. 1; 39 for Bit'Size use 1; 40 41 type Bit_Array is array (Positive range <>) of Bit; 42 pragma Pack (Bit_Array); 43 44 type Byte is new Bit_Array (1 .. 8); 45 for Byte'Size use 8; 46 for Byte'Alignment use 1; 47 48 function Conv 49 is new Unchecked_Conversion(Source => Small, Target => Byte); 50 51 procedure Assign (From : Data; Offset : Positive; I : Index; To : out Bit_Array); 52 53end Rep_Clause2; 54