Content-type:
text/plain
Date:
Fri, 16 Oct 1998 14:46:03 -0700
MIME-version:
1.0
|
OK, I'll try this .....
> ----------
> From: Tucker Taft
> Reply To: Tucker Taft
> Sent: Friday, October 16, 1998 12:01
> To: [log in to unmask]
> Subject: Re: Use of attribute 'Bit_Order
>
> I would not rely on specifying the bit_order. On the other hand,
> the value of the Default_Bit_Order constant can be useful in
> a record representation clause to control the bit positions you use,
> when combined with tricks using multiplication and Boolean'Pos().
> This is of course left as an exercise to the reader...
> -Tucker Taft
>
----------------
How is this example?
with System ;
use System ;
procedure example is
-- What Tucker is alluding to is ....
--
type Byte is mod 2 ** 8;
type Word is mod 2 ** 16;
type Big_Endian is record
A : Byte;
B : Word;
C : Byte;
end record;
-- for Big_Endian use record
-- A at 0 range 0 .. 7;
-- B at 0 range 8 .. 23;
-- C at 0 range 24 .. 31;
-- end record;
-- for Big_Endian'Bit_Order use System.High_Order_First;
-- Not always supported !!!!
-- Instead use :
-- This is either 0 or 1 / False or True
Mult : constant Natural :=
Boolean'Pos ( System.Default_Bit_Order = System.High_Order_First ) ;
A_Low : constant Natural := (Mult * 24) + 0 ; -- 0 or 24
A_High : constant Natural := (Mult * 24) + 7 ; -- 7 or 31
B_Low : constant Natural := 8 ;
B_High : constant Natural := 23 ;
C_Low : constant Natural := Natural ( (Mult * (-24)) + 24 ) ;
-- 24 or 0
C_High : constant Natural := Natural ( (Mult * (-24)) + 31 ) ;
-- 31 or 7
for Big_Endian use record
A at 0 range A_Low .. A_High ; -- 0..7 or 24..31
B at 0 range B_Low .. B_High ; -- 8..23 either way
C at 0 range C_Low .. C_High ; -- 24..31 or 0..7
end record;
--
--
-- How's that ??? Who says you can't be clever in Ada ?
--
--
begin
null ;
end Example;
---//---
"The difference between hardware and software is that the more you play with
hardware, the more likely you are to break it, but the more you play with
software the more likely you are to FIX it."
---//---
Bill Dale
LMMS
mailto:[log in to unmask]
mailto:[log in to unmask]
|
|
|