### 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