DynaValues and LWValues
The DynaValue data type defined in lwdyna.h is a union of containers for values of various base types. DynaValues are used as function arguments, with commands and requesters, for example, when the function must accept values of multiple types. LWValues are a variation on DynaValues used by Panels and defined in lwpanel.h.
The DynaValue typedef looks like this.
typedef union un_DynaValue {
DynaType type;
DyValString str;
DyValInt intv;
DyValFloat flt;
DyValIVector ivec;
DyValFVector fvec;
DyValCustom cust;
} DynaValue;
The elements of this union each support a different base type, and each base type can
underlie several DynaTypes. (Two DynaTypes, DY_NULL and DY_TEXT, have no
underlying value.)
Strings
typedef struct st_DyValString { DY_STRING
DynaType type; DY_SURFACE
char *buf;
int bufLen;
} DyValString;
bufLen is the size of buf in characters. For the DY_SURFACE
type, buf contains the surface name.
Integers
typedef struct st_DyValInt { DY_INTEGER
DynaType type; DY_BOOLEAN
int value; DY_CHOICE
int defVal; DY_FONT
} DyValInt; DY_LAYERS
The value in defVal is used by requesters to reset control values. The value
for DY_CHOICE and DY_FONT is a 0-based index into a list. The value for DY_LAYERS
is a set of bitfields corresponding to layer numbers.
Floating-Point Numbers
typedef struct st_DyValFloat { DY_FLOAT
DynaType type; DY_DISTANCE
double value;
double defVal;
} DyValFloat;
DY_DIST values are distances in meters.
Integer Vectors
typedef struct st_DyValIVector { DY_VINT
DynaType type;
int val[3];
int defVal;
} DyValIVector;
Floating-Point Vectors
typedef struct st_DyValFVector { DY_VFLOAT
DynaType type; DY_VDIST
double val[3];
double defVal;
} DyValFVector;
Custom Values
typedef struct st_DyValCustom { DY_CUSTOM
DynaType type;
int val[4];
} DyValCustom;
DY_CUSTOM is used to encode values that don't fit one of the standard types.
The interpretation of the values in the val array will depend on the context in
which this type is used.
The Dynamic Conversion global provides a facility for converting between DynaValues of different types.
LWValues
Panels adds a generic pointer type to the list of types, but in all other respects, LWValues differ from DynaValues in name only. Structurally they're equivalent.
typedef union un_LWValue {
LWType type;
LWValString str;
LWValInt intv;
LWValFloat flt;
LWValIVector ivec;
LWValFVector fvec;
LWValPointer ptr;
LWValCustom cust;
} LWValue;
Although lwpanel.h defines others, only five LWTypes are needed to describe the values of all LWPanels controls.
LWT_STRING LWT_INTEGER LWT_FLOAT LWT_VINT LWT_VFLOAT