2.2. Implementation-specific Types   

To increase the portability of widget and application source code between different system environments, the Intrinsics define several types whose precise representation is explicitly dependent upon, and chosen by, each individual implementation of the Intrinsics.

These implementation-defined types are

Boolean A datum that contains a zero or nonzero value. Unless explicitly stated, clients should not assume that the nonzero value is equal to the symbolic value True.

Cardinal An unsigned integer datum with a minimum range of [0..216-1]

Dimension An unsigned integer datum with a minimum range of [0..216-1]

Position A signed integer datum with a minimum range of [-215..215-1]

XtPointer A datum large enough to contain the largest of a char*, int*, function pointer, structure pointer, or long value. A pointer to any type or function, or a long value may be converted to an XtPointer and back again and the result will compare equal to the original value. In ANSI C environments it is expected that XtPointer will be defined as void*.

XtArgVal A datum large enough to contain an XtPointer, Cardinal, Dimension, or Position value.

XtEnum An integer datum large enough to encode at least 128 distinct values, two of which are the symbolic values True and False. The symbolic values TRUE and FALSE are also defined to be equal to True and False, respectively.

In addition to these specific types, the precise order of the fields within the structure declarations for any of the instance part records ObjectPart, RectObjPart, CorePart, CompositePart, ShellPart, WMShellPart, TopLevelShellPart, and ApplicationShellPart is implementation-defined. These structures may also have additional private fields internal to the implementation. The ObjectPart, RectObjPart, and CorePart structures must be defined so that any member with the same name appears at the same offset in ObjectRec, RectObjRec and CoreRec ( WidgetRec ). No other relations between the offsets of any two fields may be assumed.