The rec format supports the declaration of fields of the following scalar types: integer numbers, ranges and real numbers.
Signed integers are supported by using the int
declaration:
%typedef: Id_t int
Given the declaration above, fields of type Id_t must
contain integers, and they may be negative. Hexadecimal values can be written
using the 0x prefix, and octal values using an extra
0. Valid examples are:
%type: Id Id_t Id: 100 Id: -23 Id: -0xFF Id: 020
Sometimes it is desirable to reduce the range of integers allowed in a field. This can be achieved by using a range type declaration:
%typedef: Interrupt_t range 0 15
Note that it is possible to omit the minimum index in ranges. In that case it is implicitly zero:
%typedef: Interrupt_t range 15
It is possible to use the keywords MIN and MAX instead
of a numeral literal in one or both of the points conforming the
range. They mean the minimum and the maximum integer value supported
by the implementation respectively. See the following examples:
%typedef: Negative range MIN -1 %typedef: Positive range 0 MAX %typedef: AnyInt range MIN MAX %typedef: Impossible range MAX MIN
Hexadecimal and octal numbers can be used to specify the limits in a range. This helps to define scalar types whose natural base is not ten, like for example:
%typedef: Address_t range 0x0000 0xFFFF %typedef: Perms_t range 755
Real number fields can be declared with the real type
specifier.
A wide range of real numbers can be represented this way, only limited
by the underlying floating point representation.
The decimal separator is always the dot (.) character regardless
of the locale setting.
For example:
%typedef: Longitude_t real
Examples of fields of type real:
%rec: Rectangle %typedef: Longitude_t real %type: Width Longitude_t %type: Height Longitude_t Width: 25.01 Height: 10