DynaValues and LWValuesThe 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 |