ifnpub.h

Go to the documentation of this file.
00001 //**************************************************************************/
00002 // Copyright (c) 1998-2006 Autodesk, Inc.
00003 // All rights reserved.
00004 // 
00005 // These coded instructions, statements, and computer programs contain
00006 // unpublished proprietary information written by Autodesk, Inc., and are
00007 // protected by Federal copyright law. They may not be disclosed to third
00008 // parties or copied or duplicated in any form, in whole or in part, without
00009 // the prior written consent of Autodesk, Inc.
00010 //**************************************************************************/
00011 // FILE:        iFnPub.h
00012 // DESCRIPTION: Interface to Plugin Function Publishing system
00013 // AUTHOR:      John Wainwright
00014 // HISTORY:     created 2/15/00 
00015 //**************************************************************************/
00016 
00017 #pragma once
00018 
00019 #include "maxheap.h"
00020 #include "baseInterface.h"
00021 #include "strbasic.h"
00022 #include "iparamb2Typedefs.h"
00023 #include "coreexp.h" // for corexport
00024 #include "strclass.h"
00025 
00026 // forward declarations
00027 class ISave;
00028 class ILoad;
00029 class AColor;
00030 class Point4;
00031 
00032 // classes defined in this header
00033 class FPInterface;
00034     class FPInterfaceDesc;
00035         class FPStaticInterface;
00036     class FPMixinInterface;
00037 
00038 class FPFunctionDef;
00039 class FPActionDef;
00040 class FPParamDef;
00041 class FPPropDef;
00042 class FPParams;
00043 class FPParamOptions;
00044 class FPValidator;
00045 class FPEnum;
00046 class FPValue;
00047 class IObject;
00048 class MAXException;
00049 class FPMacroEmitter;
00050 
00051 typedef int   FPStatus;
00053 typedef short FunctionID;
00055 #define FP_NO_FUNCTION ((FunctionID)-1)
00056 typedef short EnumID;
00057 #define FP_NO_ENUM ((EnumID)-1)
00058 
00059 // built-in interface IDs
00060 #define NULLINTERFACE_ID    Interface_ID(0, 0)  // null interface
00061 // BASEINTERFACE_ID (1,1) in baseInterface.h
00062 #define FPINTERFACE_ID      Interface_ID(0, 2)  // root FPInterface
00063 #define FPMIXININTERFACE_ID Interface_ID(0, 3)  // root FPMixinInterface
00064 #define FPINTERFACEDESC_ID  Interface_ID(0, 4)  // root FPInterfaceDesc
00065 
00066 // standard interface accessors
00067 inline FPInterface*     GetFPInterface(BaseInterface* bi)     { return reinterpret_cast<FPInterface*>(     bi->GetInterface(FPINTERFACE_ID));      }
00068 inline FPInterfaceDesc*  GetFPInterfaceDesc(BaseInterface* bi) { return reinterpret_cast<FPInterfaceDesc*>( bi->GetInterface(FPINTERFACEDESC_ID));  }
00069 inline FPMixinInterface* GetFPMixinInterface(BaseInterface* bi){ return reinterpret_cast<FPMixinInterface*>(bi->GetInterface(FPMIXININTERFACE_ID)); }
00070 
00071 // external classes
00072 class ClassDesc;
00073 class MSPluginClass;
00074 class Rollout;
00075 class MaxIcon;
00076 class ActionTable;
00077 class Point3;
00078 class PBBitmap;
00079 class Mtl;
00080 class Texmap;
00081 class INode;
00082 class ReferenceTarget;
00083 class Matrix3;
00084 class AngAxis;
00085 class Quat;
00086 class Ray;
00087 class Point2;
00088 class BitArray;
00089 class ClassDesc;
00090 class Mesh;
00091 class Object;
00092 class Control;
00093 class Interval;
00094 class Color;
00095 class Value;
00096 
00101 #define FPS_FAIL                0 //!< Indicates a failure.
00102 #define FPS_NO_SUCH_FUNCTION    -1 //!< The function called does not exist.
00103 #define FPS_ACTION_DISABLED     -2 //!< The action is disabled.
00104 #define FPS_OK                  1 //!< Indicates a success.
00105 
00106 
00107 // FPInterface class, the base class for FnPub interfaces.  
00108 //   contains the basic dispatching code & virtual base methods
00109 //   The prime subclass is FPInterfaceDesc, which contains the 
00110 //   interface metadata in a singleton instance.  There are two
00111 //   typedefs, FPStaticInterface used as the base class for static and core 
00112 //   interfaces, and FPMixinInterface used as the
00113 //   base class for mixin (object-based) interfaces
00114 
00132 class FPInterface : public BaseInterface
00133 {
00134 protected:
00135     #pragma warning(push)
00136     #pragma warning(disable:4100)
00137     virtual FPStatus _dispatch_fn(FunctionID fid, TimeValue t, FPValue& result, FPParams* p) { return FPS_NO_SUCH_FUNCTION; }
00138     #pragma warning(pop)
00139 public:
00140     static CoreExport FPInterfaceDesc nullInterface;            //  null interface descriptor, can be returned by interfaces not publishing metadata
00141 
00142     // from BaseInterface
00143     virtual BaseInterface*          GetInterface(Interface_ID id) 
00144                                     { 
00145                                         if (id == FPINTERFACE_ID) return this; 
00146                                         else if (id == FPINTERFACEDESC_ID) return (BaseInterface*)GetDesc();
00147                                         else return BaseInterface::GetInterface(id); 
00148                                     }
00149     
00150     // metadata access
00153     virtual FPInterfaceDesc*        GetDesc() = 0;
00154 
00155     // Fn calling
00165     CoreExport virtual FPStatus     Invoke(FunctionID fid, TimeValue t=0, FPParams* params=NULL);
00173     virtual inline FPStatus         Invoke(FunctionID fid, FPParams* params) { return Invoke(fid, 0, params); }
00185     CoreExport virtual FPStatus     Invoke(FunctionID fid, TimeValue t, FPValue& result, FPParams* params=NULL);
00195     virtual inline FPStatus         Invoke(FunctionID fid, FPValue& result, FPParams* params=NULL) { return Invoke(fid, 0, result, params); }
00201     CoreExport virtual FunctionID   FindFn(MCHAR* name);
00202 
00203     // predicate access
00210     CoreExport virtual BOOL         IsEnabled(FunctionID actionID);
00217     CoreExport virtual BOOL         IsChecked(FunctionID actionID);
00225     CoreExport virtual BOOL         IsVisible(FunctionID actionID);
00231     CoreExport virtual FunctionID   GetIsEnabled(FunctionID actionID);
00237     CoreExport virtual FunctionID   GetIsChecked(FunctionID actionID);
00243     CoreExport virtual FunctionID   GetIsVisible(FunctionID actionID);
00244 
00245     // Action interface access & control
00249     virtual ActionTable*            GetActionTable() { return NULL; }
00250     // global Actions enable/disable
00260     virtual void                    EnableActions(BOOL onOff) { UNUSED_PARAM(onOff); }
00261 };
00262 
00263 #include "paramtype.h"
00264 
00265 // FPInterfaceDesc class, an FPInterface that contains the metadata for an interface, a distinhished
00266 //                        singleton instance per interface kept in a Tab<> in ClassDesc
00267 //                        This class is subclassed typically by static and core inerfaces and instantiated
00268 //                        by mixins to provide their metadata
00326 class FPInterfaceDesc : public FPInterface 
00327 {
00328 protected:
00329     CoreExport void load_descriptor(Interface_ID id, MCHAR* int_name, StringResID descr, ClassDesc* cd, USHORT flag, va_list ap);
00330 
00331 public:
00332     // interface metadata 
00333     Interface_ID    ID;             // my unique ID
00334     MSTR            internal_name;  // fixed, internal name
00335     StringResID     description;    // description string resource
00336     ClassDesc*      cd;             // publishing plugin's ClassDesc
00337     USHORT          flags;          // flag bits
00338     Tab<FPFunctionDef*> functions;  // descriptors for individual functions in this interface
00339     Tab<FPPropDef*> props;          //    "         "      "      properties in this interface
00340     Tab<FPEnum*>    enumerations;   // any symbolic enums for the interface
00341     // scripted plug-in stuff if this belongs to a scripted plug-in class
00342     MSPluginClass*  pc;             // the scripted class if non-NULL (gc-protected by the scripted plugin class)
00343     Rollout*        rollout;        // rollout if specified (gc-protected by the scripted plugin class)
00344     // Action-interface stuff
00345     ActionTable*    action_table;   // the table published for this action interface
00346 
00347     // constructors
00349     CoreExport FPInterfaceDesc() { }
00371     CoreExport FPInterfaceDesc(Interface_ID id, MCHAR* int_name, StringResID descr, ClassDesc* cd, ULONG flag, ...);
00372 
00373     CoreExport ~FPInterfaceDesc();
00384     virtual void Init() { }
00385 
00386     // from GenericInterface, default lifetime is noRelease
00387     LifetimeType            LifetimeControl() { return noRelease; }
00388 
00389     // from BaseInterface
00390     virtual BaseInterface*  GetInterface(Interface_ID id) { if (id == FPINTERFACEDESC_ID) return this; else return FPInterface::GetInterface(id); }
00391     
00392     // construction utilities
00420     CoreExport void         LoadDescriptor(Interface_ID id, MCHAR* int_name, StringResID descr, ClassDesc* cd, ULONG flag, ...);
00421 
00429     CoreExport void AppendFunction(int id, ...);
00430 
00431 
00439     CoreExport void AppendProperty(int id, ...);
00440     
00448     CoreExport void AppendEnum(int id, ...);
00449 
00450 
00459     CoreExport void         SetClassDesc(ClassDesc* i_cd);
00461     CoreExport va_list      check_fn(va_list ap, int id);
00463     CoreExport va_list      scan_fn(va_list ap, int id, int index);
00465     CoreExport va_list      check_prop(va_list ap, int id);
00467     CoreExport va_list      scan_prop(va_list ap, int id, int index);
00469     CoreExport va_list      check_enum(va_list ap, EnumID id);
00471     CoreExport va_list      scan_enum(va_list ap, EnumID id, int index);
00472 
00473     // metadata access
00478     FPInterfaceDesc*        GetDesc() { return this; }
00479     Interface_ID            GetID() { return ID; }
00488     CoreExport FPFunctionDef* GetFnDef(FunctionID fid);
00492     ActionTable*            GetActionTable() { return action_table; }
00493 
00494     // global Actions enable/disable
00502     CoreExport void         EnableActions(BOOL onOff);
00503 
00504     // overridable HInstance and resource access from owning module
00506     CoreExport virtual HINSTANCE HInstance();
00512     CoreExport virtual MCHAR* GetRsrcString(StringResID id);
00513 
00514 private:
00515     va_list AppendFunction(va_list ap, int id);
00516     va_list AppendProperty(va_list ap, int id);
00517     va_list AppendEnum(va_list ap, int id);
00518 };
00519 
00520 // FPInterfaceDesc flag bits
00521 // per interface flags
00522 #define FP_ACTIONS          0x0001  // marks this as an Action Interface, holding only UI modal, zero param action fns
00523 #define FP_MIXIN            0x0002  // marks this as a Mixin Interface, it is implemented directly by the plugin class, so the 
00524                                     // methods in it are virtual on the plugin's objects
00525 #define FP_CORE             0x0004  // marks this as a MAX Core Interface, available through GetCOREInterface(Interface_ID) 
00526 #define FP_STATIC_METHODS   0x0008  // this interface is used as a static method interface in MAXScript, properties are not directly callable
00527 #define FP_TEST_INTERFACE   0x0010  // a non-public test interface, Discreet internal use only 
00528     
00529 // per descriptor internal flags
00530 #define FP_SCRIPTED_CLASS   0x1000  // belongs to a scripted plug-in class
00531 #define FP_TEMPORARY        0x2000  // temporary descripter built during scene load to support schema migration
00532 
00533 // static interface
00541 class FPStaticInterface : public FPInterfaceDesc
00542 {
00543 };
00544 
00545 // The MAXScript FPMixinInterface wrapper class
00546 class FPMixinInterfaceValue;
00547 
00548 // mixin interface
00563 class FPMixinInterface : public FPInterface
00564 {
00565     friend class FPMixinInterfaceValue;
00566 private:
00567     FPMixinInterfaceValue* MXS_fpi;
00568 protected:
00569     Tab<InterfaceNotifyCallback*> *interfaceNotifyCBs;
00570 
00571     // copy constructor and copy assignment operator are defined to prevent MXS_fpi and 
00572     // interfaceNotifyCBs pointers from being copied from right-hand side. 
00573     // These pointers are instance specific.
00574     FPMixinInterface(const FPMixinInterface& rhs) : MXS_fpi(NULL), interfaceNotifyCBs(NULL) { UNUSED_PARAM(rhs); }
00575     FPMixinInterface& operator=(const FPMixinInterface& rhs) { UNUSED_PARAM(rhs); return *this;}
00576 
00577 public:
00578 
00579     FPMixinInterface() : MXS_fpi(NULL), interfaceNotifyCBs(NULL) {}
00580 
00581 
00582     // from GenericInterface, default lifetime is serverControlled
00583     virtual LifetimeType    LifetimeControl() { return serverControlled; }
00584     
00585     CoreExport virtual bool RegisterNotifyCallback(InterfaceNotifyCallback* incb);      
00586     
00587     virtual void UnRegisterNotifyCallback(InterfaceNotifyCallback* incb) 
00588     { 
00589         if (interfaceNotifyCBs)
00590             for (int i=0; i < interfaceNotifyCBs->Count(); i++)
00591             {   if (incb == (*interfaceNotifyCBs)[i])
00592                     interfaceNotifyCBs->Delete(i,1);
00593             }
00594     }
00595     
00596     CoreExport ~FPMixinInterface();
00597 
00598     // from BaseInterface
00599     virtual BaseInterface*  GetInterface(Interface_ID id) { if (id == FPMIXININTERFACE_ID) return this; else return FPInterface::GetInterface(id); }
00600     
00601     // utility metadata accessors...
00602     // use GetDescByID() to directly implement FPInterface::GetDesc() in your public virtual base mixin class, 
00603     //   like this:     FPInterfacedesc* GetDesc() { return GetDescByID(THIS_INTERFACE_ID); }
00604     //   then implement a GetDescByID() in the implementing class to avoid link export issues
00617     virtual FPInterfaceDesc* GetDescByID(Interface_ID id) { UNUSED_PARAM(id); return &nullInterface; }
00618 
00619     // override GetID() in those interfaces that don't publish metadata but have a unique Interface_ID for quick internal identification 
00620     //   in implementation code that might be shared by a bunch of mixin interfaces
00628     virtual Interface_ID     GetID() { return GetDesc()->ID; }
00629 };
00630 
00631 // FPFunctionDef, contains descriptor for each published function
00632 //                live in Tab<> in FPInterface
00676 class FPFunctionDef: public MaxHeapOperators
00677 {
00678 public:
00679 
00680     DWORD           cbStruct;           // size of the struct
00681     FunctionID      ID;             // interface-local ID, used to identify fn in calls
00682     MSTR            internal_name;  // fixed, internal name
00683     StringResID     description;    // description string resource
00684     USHORT          flags;          // flag bits
00685     ParamType2      result_type;    // type of value returned by fn
00686     EnumID          enumID;         // ID of symbolic enumeration in owning interface if any
00687     FPActionDef*    action_def;     // extra metadata if function in an Action interface
00688     Tab<FPParamDef*> params;        // descriptors for parameters to this fn 
00689     SHORT           keyparam_count; // count of keyword-parameters (with f_keyArgDefault's)
00690 
00695     FPFunctionDef() {cbStruct = sizeof(FPFunctionDef); flags = 0; description = 0; action_def = NULL; enumID = FP_NO_ENUM; keyparam_count = 0; }
00696     CoreExport ~FPFunctionDef();
00697 };
00698 
00724 class FPPropDef: public MaxHeapOperators
00725 {
00726 public:
00727     DWORD           cbStruct;       // size of the struct
00728     FunctionID      getter_ID;      // interface-local ID for getter method
00729     FunctionID      setter_ID;      // interface-local ID for setter method
00730     MSTR            internal_name;  // fixed, internal name
00731     StringResID     description;    // description string resource
00732     USHORT          flags;          // flag bits
00733     ParamType2      prop_type;      // property type
00734     EnumID          enumID;         // ID of symbolic enumeration in owning interface if any
00735     FPParamDef*     setter_param;   // present if non-NULL, used for setter param options
00736 
00740     FPPropDef() { cbStruct = sizeof(FPPropDef); flags = 0; description = 0; getter_ID = setter_ID = FPS_NO_SUCH_FUNCTION; enumID = FP_NO_ENUM; setter_param = NULL; }
00741     CoreExport ~FPPropDef();
00742 };
00743 
00744 // function def flag bits   
00745 #define FP_NO_REDRAW          0x0001    // do not flag need for viewport redraw when function is invoked, MAXScript defaults to flag redraw
00746 #define FP_VAR_ARGS           0x0002    // variable number of args, pass args directly in a FPParams instance
00747 #define FP_CLIENT_OWNS_RESULT 0x0004    // client owns lifetime of pointer-based results, should delete when finished using
00748 // internal function bits
00749 #define FP_ACTION             0x0100    // indicates an action function
00750 #define FP_HAS_UI             0x0200    // action has UI specifiec
00751 #define FP_ICONRES            0x0400    // icon via res ID
00752 #define FP_ICONFILE           0x0800    // icon via bmp file + index
00753 #define FP_HAS_SHORTCUT       0x1000    // has default KB shortct
00754 #define FP_HAS_KEYARGS        0x2000    // fn has some optional keyword args defined
00755 
00756 // FPActionDef,  contains extra descriptor info for function if fn is in an Action interface 
00757 
00802 class FPActionDef: public MaxHeapOperators
00803 {
00804 public:
00805     DWORD       cbStruct;           // size of the struct
00806     MSTR        internal_cat;       // fixed, internal category name
00807     StringResID category;           // localizable category resID
00808     FunctionID  isEnabled_id;       // interface function IDs for the isEnabled predicate for this action
00809     FunctionID  isChecked_id;       //   "  " for isChecked predicate
00810     FunctionID  isVisible_id;       //   "  " for isVisible predicate
00811     ResID       icon_resID;         // icon as resource ID
00812     MSTR        icon_file;          // icon as UI .bmp filename, index pair, as per CUI icon specifications...
00813     short       icon_index; 
00814     MaxIcon*    icon;
00815     StringResID button_text;        // button text string resID, defaults to function description
00816     StringResID tool_tip;           // tooltip string resID, defaults to function description
00817     StringResID menu_text;          // menu item text string resID, defaults to buttonText or function description
00818     ControlType2 ctrl_type;         // type of UI control, if f_ui specified
00819     ResID       ctrl_pbID;          // control's host parammap pblock ID
00820     MapID       ctrl_mapID;         // control's host parammap map ID within the block
00821     int         ctrl_id;            // control dialog item ID
00822     COLORREF    ctrl_hiCol;         // highlight colorif check button
00823     ACCEL       shortcut;           // default keyboard shortcut
00824     FPMacroEmitter* macro_emitter;  // if non-NULL, callback object to emit macros to macroRecorder
00825 
00828     CoreExport FPActionDef();
00830     CoreExport ~FPActionDef();
00831 };
00832 
00833 // fn def option tags for Action functions & parameters
00834 enum {
00835     // Action options
00836     f_category = -(1<<30),          // category name, as internal MCHAR* and localizable string resID, defaults to interface name
00837     f_predicates,                   // supply 3 functionIDs for isEnabled, isChecked, isVisible predicates 
00838     f_isEnabled,                    // isEnabled predicate functionID
00839     f_isChecked,                    // isChecked predicate functionID
00840     f_isVisible,                    // isVisible predicate functionID
00841     f_iconRes,                      // icon as resource ID
00842     f_icon,                         // icon as UI .bmp filename, index pair, as per CUI icon specifications
00843     f_buttonText,                   // button text string resID, defaults to function description
00844     f_toolTip,                      // tooltip string resID, defaults to function description
00845     f_menuText,                     // menu item text string resID, defaults to buttonText or function description
00846     f_ui,                           // UI spec if paramMap2-implemented UI (pmap blockID, mapID, control type, button or checkbutton resID, hilight col if chkbtn)
00847     f_shortCut,                     // default keyboard short cut, as pair: virt ACCEL flags word, keycode  (first two items in Win32 ACCEL struct)
00848     f_macroEmitter,                 // provide callback object to handle macro emmission
00849     // param options
00850     f_range,                        // valid range, two type-specific vals
00851     f_validator,                    // validator object, FPValidator*
00852     f_inOut,                        // in, out flags FPP_IN_PARM, FPP_OUT_PARAM or both, defaults to both
00853     f_keyArgDefault,                // marks this as an optional keyArg param and gives default value which must me of type to match param type
00854     f_index,                        // no args, of present indicates values used as indexes, client can map own origin to always 0-origin internally
00855 };
00856 
00857 // FPParamDef, contains descriptor for each published function
00858 //             live in Tab<> in FPInterface
00859 
00860 // per-param flags
00861 #define FPP_HAS_RANGE       0x0001
00862 #define FPP_HAS_VALIDATOR   0x0002
00863 #define FPP_IN_PARAM        0x0004  // in-out flags used by _BR ref types to decide when to pass in source values or hand back returns
00864 #define FPP_OUT_PARAM       0x0008  //   " "
00865 #define FPP_IN_OUT_PARAM    0x000C  //   "  "  both
00866 #define FPP_KEYARG          0x0010  // if p_keyArgDefault supplied, client canuse keyword args if supported for this param
00867 #define FPP_INDEX           0x0020  // parameter values used as indexes, always 0-origin internally, allows client to map to other origins
00868 
00908 class FPParamDef: public MaxHeapOperators
00909 {
00910 public:
00911     DWORD           cbStruct;           // size of the struct
00912     MSTR            internal_name;
00913     StringResID     description;
00914     ParamType2      type;
00915     EnumID          enumID;         // ID of symbolic enumeration in owning interface if any
00916     USHORT          flags;
00917     FPParamOptions* options;        // present if non-NULL
00918 
00923     FPParamDef() : cbStruct(sizeof(FPParamDef)), description(0), options(NULL), enumID(FP_NO_ENUM), flags(FPP_IN_OUT_PARAM) { }
00924     CoreExport ~FPParamDef() ;
00925 };
00926 
00927 // FPParams,  contains a Tab<> of FPValue's being the actual parameters for an FP Fn call
00928 //            at present, FP Fn arguments are positional. We could expand this to allow 
00929 //            optional, order-independent keyword params
00930 
00939 class FPParams: public MaxHeapOperators
00940 {
00941 public:
00942     Tab<FPValue>    params;
00943 
00947               FPParams() { }
00955     CoreExport FPParams(int count, ...);
00957     CoreExport ~FPParams();
00958 
00966     CoreExport void Load(int count, ...);
00967 };
00968 
00969 // symbolic enums for an interface, 
00970 //   used by metadata clients to support symbolic value for TYPE_ENUM types (ints)
00971 
01069 class FPEnum : public MaxHeapOperators
01070 {
01071 public:
01073     EnumID  ID;
01074     struct enum_code: public MaxHeapOperators
01075     {
01077         MCHAR*  name;
01079         int     code;
01080     };
01082     Tab<enum_code> enumeration; 
01083 };
01084 
01085 // FPValue, a variant structure containing a single value, passable as a FP Fn parameter or result
01086 class PBBitmap;
01087 class Texmap;
01088 class Value;
01089 
01171 class FPValue: public MaxHeapOperators
01172 {
01173 public:
01174     ParamType2  type;
01175     union 
01176     {
01177         int                 i;
01178         float               f;
01179         DWORD               d;
01180         bool                b;
01181 
01182         INT_PTR             intptr;
01183 
01184         // SR NOTE64: Bumps union to 64 bits in Win32, this assumes that FPValue are
01185         // temporaries so this should not cause too much memory bloat.
01186         INT64               i64;
01187 
01188         double              dbl;
01189 
01190         int*                iptr;
01191         float*              fptr;
01192         Point3*             p;
01193         Point4*             p4;
01194         TimeValue           t;
01195         MCHAR*              s;
01196         MSTR*               tstr;
01197         PBBitmap*           bm;
01198         Mtl*                mtl;
01199         Texmap*             tex;
01200         INode*              n;
01201         ReferenceTarget*    r;
01202         Matrix3*            m;
01203         AngAxis*            aa;
01204         Quat*               q;
01205         Ray*                ray;
01206         Point2*             p2;
01207         BitArray*           bits;
01208         ClassDesc*          cd;
01209         Mesh*               msh;
01210         Object*             obj;
01211         Control*            ctrl;
01212         Interval*           intvl;
01213         POINT*              pt;
01214         HWND                hwnd;
01215         IObject*            iobj;
01216         FPInterface*        fpi;
01217         void*               ptr;
01218         Color*              clr;
01219         AColor*             aclr;
01220         FPValue*            fpv;
01221         Value*              v;
01222         DWORD*              dptr;
01223         bool*               bptr;
01224         INT_PTR*            intptrptr;
01225         INT64*              i64ptr;
01226         double*             dblptr;
01227 
01228         // Tab<>s of above
01229         Tab<int>*           i_tab;
01230         Tab<float>*         f_tab;
01231         Tab<Point3*>*       p_tab;
01232         Tab<Point4*>*       p4_tab;
01233         Tab<TimeValue>*     t_tab;
01234         Tab<MCHAR*>*        s_tab;
01235         Tab<MSTR*>*         tstr_tab;
01236         Tab<PBBitmap*>*     bm_tab;
01237         Tab<Mtl*>*          mtl_tab;
01238         Tab<Texmap*>*       tex_tab;
01239         Tab<INode*>*        n_tab;
01240         Tab<ReferenceTarget*>*  r_tab;
01241         Tab<Matrix3*>*      m3_tab;
01242         Tab<AngAxis*>*      aa_tab;
01243         Tab<Quat*>*         q_tab;
01244         Tab<Ray*>*          ray_tab;
01245         Tab<Point2*>*       p2_tab;
01246         Tab<BitArray*>*     bits_tab;
01247         Tab<ClassDesc*>*    cd_tab;
01248         Tab<Mesh*>*         msh_tab;
01249         Tab<Object*>*       obj_tab;
01250         Tab<Control*>*      ctrl_tab;
01251         Tab<Interval*>*     intvl_tab;
01252         Tab<POINT*>*        pt_tab;
01253         Tab<HWND>*          hwnd_tab;
01254         Tab<IObject*>*      iobj_tab;
01255         Tab<FPInterface*>*  fpi_tab;
01256         Tab<void*>*         ptr_tab;
01257         Tab<Color*>*        clr_tab;
01258         Tab<AColor*>*       aclr_tab;
01259         Tab<FPValue*>*      fpv_tab;
01260         Tab<Value*>*        v_tab;
01261         Tab<DWORD>*         d_tab;
01262         Tab<bool>*          b_tab;
01263         Tab<INT_PTR>*       intptr_tab;
01264         Tab<INT64>*         i64_tab;
01265         Tab<double>*        dbl_tab;
01266     };
01267 
01271                FPValue() { Init(); }
01278                FPValue(const FPValue& from) { Init(); *this = from; }
01283                FPValue(int type, ...) { va_list ap; va_start(ap, type); ap = Loadva(type, ap); va_end(ap); }
01287     CoreExport ~FPValue() { Free(); }
01290     CoreExport void Free();
01291 
01295     CoreExport void Init();
01296 
01298 
01301     CoreExport void InitTab(ParamType2 type, int size);
01302 
01304     CoreExport FPValue& operator=(const FPValue& sv);
01305     CoreExport va_list Loadva(int type, va_list ap, bool ptr=false);
01316     inline    void Load(int type, ...) { va_list ap; va_start(ap, type); ap = Loadva(type, ap); va_end(ap); }
01327     inline    void LoadPtr(int type, ...) { va_list ap; va_start(ap, type); ap = Loadva(type, ap, true); va_end(ap); }
01328 
01330 
01354     CoreExport IOResult Save(ISave* isave);
01355 
01357 
01362     CoreExport IOResult Load(ILoad* iload);
01363 
01365 
01368     CoreExport static bool IsPointerBasedType(ParamType2 type);
01369 
01370 };
01371 
01372 // optional param-specific descriptor info
01390 class FPParamOptions: public MaxHeapOperators
01391 {
01392 public:
01393     DWORD           cbStruct;           // size of the struct
01394     FPValue         range_low;      // range values if specified
01395     FPValue         range_high;
01396     FPValidator*    validator;      // validator if specified
01397     FPValue         keyarg_default; // default if value is optional keyword arg
01398 
01400     FPParamOptions() : cbStruct(sizeof(FPParamOptions)), validator(NULL) { }
01401 };
01402 
01403 // virtual base class for parameter validation objects
01437 class FPValidator : public InterfaceServer 
01438 {
01439 public:
01440     // validate val for the given param in function in interface
01459     virtual bool Validate(FPInterface* fpi, FunctionID fid, int paramNum, FPValue& val, MSTR& msg)=0;
01460 };
01461 
01462 // virtual base class for action function macroRecorder emitter objects
01463 class FPMacroEmitter: public MaxHeapOperators
01464 {
01465 public:
01466     // gen macro for a call to given action fn
01467     virtual void EmitMacro(FPInterface* fpi, FPFunctionDef* fd)=0;
01468 };
01469 
01470 // IObject class, virtual base class for random classes that want to 
01471 //                implement GetInterface().  Similar to IUnknown in COM.
01472 //                would be used to pass interface-based objects not
01473 //                otherwise supported by the FPValue base types.
01474 //                MAXScript handles these and will use GetInterface() to 
01475 //                publish interface & methods as properties of the IObjects
01495 class IObject : public BaseInterfaceServer
01496 {
01497 public:
01498     // inherits interface access and iteration from BaseInterfaceServer
01499     //
01500     //   virtual BaseInterface* GetInterface(Interface_ID id);
01501     //   virtual int NumInterfaces();           
01502     //   virtual BaseInterface* GetInterfaceAt(int i)
01503 
01504     // object/class name
01508     virtual MCHAR* GetIObjectName() { return _M(""); }                          
01509     // interface enumeration...
01510     // IObject ref management (can be implemented by dynamically-allocated IObjects for
01511     //                         ref-count based lifetime control)
01518     virtual void AcquireIObject() { }
01525     virtual void ReleaseIObject() { }
01526     // virtual destructor
01530     virtual void DeleteIObject() { }
01531 };
01532 
01533 // base exception class for FP-based exceptions.  FnPub functions can throw this
01534 //  instances of this class or subclasses to signal error conditions.
01560 class MAXException: public MaxHeapOperators
01561 {
01562 public:
01563     MSTR    message;
01564     int     error_code;
01565 
01575     MAXException(MCHAR* msg, int code=0) : message(msg), error_code(code) { }
01576 };
01577 
01578 // publishing DESCRIPTOR & FUNCTION_MAP macros
01579 
01580 #define DECLARE_DESCRIPTOR(_interface)                  \
01581     public:                                             \
01582     _interface() { }                                    \
01583     _interface(Interface_ID id, MCHAR* name,            \
01584                StringResID descr, ClassDesc* cd,        \
01585                USHORT flags, ...)                       \
01586     {                                                   \
01587         va_list ap;                                     \
01588         va_start(ap, flags);                            \
01589         load_descriptor(id, name, descr, cd, flags, ap); \
01590         va_end(ap);                                     \
01591     }                               
01592                     
01593 #define DECLARE_DESCRIPTOR_INIT(_interface)             \
01594     public:                                             \
01595     _interface() { init(); }                            \
01596     void init();                                        \
01597     _interface(Interface_ID id, MCHAR* name,            \
01598                StringResID descr, ClassDesc* cd,        \
01599                USHORT flags, ...)                       \
01600     {                                                   \
01601         init();                                         \
01602         va_list ap;                                     \
01603         va_start(ap, flags);                            \
01604         load_descriptor(id, name, descr, cd, flags, ap); \
01605         va_end(ap);                                     \
01606     }
01607 
01608 // NOTE: the default ctor is NOT called! If any 
01609 // initialization is required use DECLARE_DESCRIPTOR_INIT_NDC
01610 #define DECLARE_DESCRIPTOR_NDC(_interface)              \
01611     public:                                             \
01612     _interface(Interface_ID id, MCHAR* name,            \
01613                StringResID descr, ClassDesc* cd,        \
01614                USHORT flags, ...)                       \
01615     {                                                   \
01616         va_list ap;                                     \
01617         va_start(ap, flags);                            \
01618         load_descriptor(id, name, descr, cd, flags, ap); \
01619         va_end(ap);                                     \
01620     }                               
01621                     
01622 #define DECLARE_DESCRIPTOR_INIT_NDC(_interface)         \
01623     public:                                             \
01624     void init();                                        \
01625     _interface(Interface_ID id, MCHAR* name,            \
01626                 StringResID descr, ClassDesc* cd,       \
01627                 USHORT flags, ...)                      \
01628     {                                                   \
01629         init();                                         \
01630         va_list ap;                                     \
01631         va_start(ap, flags);                            \
01632         load_descriptor(id, name, descr, cd, flags, ap); \
01633         va_end(ap);                                     \
01634     }                               
01635                     
01636 #define BEGIN_FUNCTION_MAP                              \
01637     public:                                             \
01638     FPStatus _dispatch_fn(FunctionID fid, TimeValue t,  \
01639                     FPValue& result, FPParams* p)       \
01640     {                                                   \
01641         UNUSED_PARAM(t);                                \
01642         UNUSED_PARAM(result);                           \
01643         UNUSED_PARAM(p);                                \
01644         FPStatus status = FPS_OK;                       \
01645         switch (fid)                                    \
01646         {
01647     
01648 #define BEGIN_FUNCTION_MAP_PARENT(Parent)               \
01649     public:                                             \
01650     FPStatus _dispatch_fn(FunctionID fid, TimeValue t,  \
01651                     FPValue& result, FPParams* p)       \
01652     {                                                   \
01653         FPStatus status                                 \
01654             = Parent::_dispatch_fn(fid, t, result, p);  \
01655         if (status == FPS_OK) return status;            \
01656         status = FPS_OK;                                \
01657         switch (fid)                                    \
01658         {
01659 
01660 #define END_FUNCTION_MAP                                \
01661             default: status = FPS_NO_SUCH_FUNCTION;     \
01662         }                                               \
01663         return status;                                  \
01664     }
01665 
01666 #define NO_FUNCTION_MAP                                 \
01667     public:                                             \
01668     FPStatus _dispatch_fn(FunctionID fid, TimeValue t,  \
01669                     FPValue& result, FPParams* p)       \
01670     {                                                   \
01671         return FPS_NO_SUCH_FUNCTION;                    \
01672     }
01673 
01674 // ----------- indivudal MAP entry macros ----------
01675 
01676 #define FP_FIELD(_type, _v)         (_type##_FIELD(_v))
01677 
01678 // Action function
01679 
01680 #define FN_ACTION(_fid, _fn)                            \
01681     case _fid:                                          \
01682         status = _fn();                                 \
01683         break;  
01684 
01685 // predicates
01686 
01687 #define FN_PRED(_fid, _fn)                              \
01688     case _fid:                                          \
01689         result.Load(TYPE_BOOL, _fn());                  \
01690         break;  
01691 #define FN_PREDS(_fid1, _fn1, _fid2, _fn2, _fid3, _fn3) \
01692     case _fid1:                                         \
01693         result.Load(TYPE_BOOL, _fn1());                 \
01694         break;                                          \
01695     case _fid2:                                         \
01696         result.Load(TYPE_BOOL, _fn2());                 \
01697         break;                                          \
01698     case _fid3:                                         \
01699         result.Load(TYPE_BOOL, _fn3());                 \
01700         break;  
01701 
01704 
01705 
01706 
01712 #define PROP_FNS(_getID, _getFn, _setID, _setFn, _ptype) \
01713     case _getID:                                        \
01714         result.LoadPtr(_ptype,  _ptype##_RSLT(          \
01715             _getFn()));                                 \
01716         break;                                          \
01717     case _setID:                                        \
01718         _setFn(FP_FIELD(_ptype, p->params[0]));         \
01719         break;  
01720 
01722 
01724 #define RO_PROP_FN(_getID, _getFn, _ptype)              \
01725     case _getID:                                        \
01726         result.LoadPtr(_ptype,  _ptype##_RSLT(          \
01727             _getFn()));                                 \
01728         break;
01729 
01731 
01733 #define PROP_TFNS(_getID, _getFn, _setID, _setFn, _ptype) \
01734     case _getID:                                        \
01735         result.LoadPtr(_ptype,  _ptype##_RSLT(      \
01736             _getFn(t)));    \
01737         break;                                          \
01738     case _setID:                                        \
01739         _setFn(FP_FIELD(_ptype, p->params[0]), t);      \
01740         break;  
01741 
01743 
01745 #define RO_PROP_TFN(_getID, _getFn, _ptype)             \
01746     case _getID:                                        \
01747         result.LoadPtr(_ptype,  _ptype##_RSLT(      \
01748             _getFn(t)));    \
01749         break;
01750 
01751 
01754 
01755 #define SM_PROP_FNS(_getID, _getFn, _setID, _setFn, _ptype) \
01756     case _getID:                                        \
01757         result.LoadPtr(_ptype,  _ptype##_RSLT(      \
01758             _getFn(FP_FIELD(TYPE_FPVALUE_BR, p->params[0])))); \
01759         break;                                          \
01760     case _setID:                                        \
01761         _setFn(FP_FIELD(TYPE_FPVALUE_BR, p->params[0]), FP_FIELD(_ptype, p->params[1])); \
01762         break;  
01763 #define SM_RO_PROP_FN(_getID, _getFn, _ptype)           \
01764     case _getID:                                        \
01765         result.LoadPtr(_ptype,  _ptype##_RSLT(      \
01766             _getFn(FP_FIELD(TYPE_FPVALUE_BR, p->params[0]))));\
01767         break;
01768 #define SM_PROP_TFNS(_getID, _getFn, _setID, _setFn, _ptype) \
01769     case _getID:                                        \
01770         result.LoadPtr(_ptype,  _ptype##_RSLT(      \
01771             _getFn(FP_FIELD(TYPE_FPVALUE_BR, p->params[0]), t)));\
01772         break;                                          \
01773     case _setID:                                        \
01774         _setFn(FP_FIELD(TYPE_FPVALUE_BR, p->params[0]), FP_FIELD(_ptype, p->params[1]), t); \
01775         break;  
01776 #define SM_RO_PROP_TFN(_getID, _getFn, _ptype)          \
01777     case _getID:                                        \
01778         result.LoadPtr(_ptype,  _ptype##_RSLT(      \
01779             _getFn(FP_FIELD(TYPE_FPVALUE_BR, p->params[0]), t)));   \
01780         break;
01781 
01782 
01785 
01786 #define FN_VA(_fid, _rtype, _f)                         \
01787     case _fid:                                          \
01788         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
01789             _f(p)));                                    \
01790         break;
01791 
01792 #define FN_0(_fid, _rtype, _f)                          \
01793     case _fid:                                          \
01794         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
01795             _f()));                                     \
01796         break;
01797 
01798 #define FN_1(_fid, _rtype, _f, _p1)                     \
01799     case _fid:                                          \
01800         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
01801             _f(FP_FIELD(_p1, p->params[0]))));          \
01802         break;  
01803 
01804 #define FN_2(_fid, _rtype, _f, _p1, _p2)                \
01805     case _fid:                                          \
01806         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
01807                     _f(FP_FIELD(_p1, p->params[0]),     \
01808                        FP_FIELD(_p2, p->params[1]))));  \
01809         break;  
01810 #define FN_3(_fid, _rtype, _f, _p1, _p2, _p3)           \
01811     case _fid:                                          \
01812         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
01813                     _f(FP_FIELD(_p1, p->params[0]),     \
01814                        FP_FIELD(_p2, p->params[1]),     \
01815                        FP_FIELD(_p3, p->params[2]))));  \
01816         break;  
01817 #define FN_4(_fid, _rtype, _f, _p1, _p2, _p3, _p4)      \
01818     case _fid:                                          \
01819         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
01820                     _f(FP_FIELD(_p1, p->params[0]),     \
01821                        FP_FIELD(_p2, p->params[1]),     \
01822                        FP_FIELD(_p3, p->params[2]),     \
01823                        FP_FIELD(_p4, p->params[3]))));  \
01824         break;  
01825 #define FN_5(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5) \
01826     case _fid:                                          \
01827         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
01828                     _f(FP_FIELD(_p1, p->params[0]),     \
01829                        FP_FIELD(_p2, p->params[1]),     \
01830                        FP_FIELD(_p3, p->params[2]),     \
01831                        FP_FIELD(_p4, p->params[3]),     \
01832                        FP_FIELD(_p5, p->params[4]))));  \
01833         break;  
01834 
01835 #define FN_6(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6)    \
01836     case _fid:                                          \
01837         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
01838                     _f(FP_FIELD(_p1, p->params[0]),     \
01839                        FP_FIELD(_p2, p->params[1]),     \
01840                        FP_FIELD(_p3, p->params[2]),     \
01841                        FP_FIELD(_p4, p->params[3]),     \
01842                        FP_FIELD(_p5, p->params[4]),     \
01843                        FP_FIELD(_p6, p->params[5]))));  \
01844         break;  
01845 #define FN_7(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7)   \
01846     case _fid:                                          \
01847         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
01848                     _f(FP_FIELD(_p1, p->params[0]),     \
01849                        FP_FIELD(_p2, p->params[1]),     \
01850                        FP_FIELD(_p3, p->params[2]),     \
01851                        FP_FIELD(_p4, p->params[3]),     \
01852                        FP_FIELD(_p5, p->params[4]),     \
01853                        FP_FIELD(_p6, p->params[5]),     \
01854                        FP_FIELD(_p7, p->params[6]))));  \
01855         break;  
01856 #define FN_8(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8)  \
01857     case _fid:                                          \
01858         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
01859                     _f(FP_FIELD(_p1, p->params[0]),     \
01860                        FP_FIELD(_p2, p->params[1]),     \
01861                        FP_FIELD(_p3, p->params[2]),     \
01862                        FP_FIELD(_p4, p->params[3]),     \
01863                        FP_FIELD(_p5, p->params[4]),     \
01864                        FP_FIELD(_p6, p->params[5]),     \
01865                        FP_FIELD(_p7, p->params[6]),     \
01866                        FP_FIELD(_p8, p->params[7]))));  \
01867         break;  
01868 #define FN_9(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8, _p9) \
01869     case _fid:                                          \
01870         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
01871                     _f(FP_FIELD(_p1, p->params[0]),     \
01872                        FP_FIELD(_p2, p->params[1]),     \
01873                        FP_FIELD(_p3, p->params[2]),     \
01874                        FP_FIELD(_p4, p->params[3]),     \
01875                        FP_FIELD(_p5, p->params[4]),     \
01876                        FP_FIELD(_p6, p->params[5]),     \
01877                        FP_FIELD(_p7, p->params[6]),     \
01878                        FP_FIELD(_p8, p->params[7]),     \
01879                        FP_FIELD(_p9, p->params[8]))));  \
01880         break;  
01881 #define FN_10(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8, _p9, _p10)  \
01882     case _fid:                                          \
01883         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
01884                     _f(FP_FIELD(_p1, p->params[0]),     \
01885                        FP_FIELD(_p2, p->params[1]),     \
01886                        FP_FIELD(_p3, p->params[2]),     \
01887                        FP_FIELD(_p4, p->params[3]),     \
01888                        FP_FIELD(_p5, p->params[4]),     \
01889                        FP_FIELD(_p6, p->params[5]),     \
01890                        FP_FIELD(_p7, p->params[6]),     \
01891                        FP_FIELD(_p8, p->params[7]),     \
01892                        FP_FIELD(_p9, p->params[8]),     \
01893                        FP_FIELD(_p10, p->params[9])))); \
01894         break;  
01895 #define FN_11(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8, _p9, _p10,_p11) \
01896     case _fid:                                          \
01897         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
01898                     _f(FP_FIELD(_p1, p->params[0]),     \
01899                        FP_FIELD(_p2, p->params[1]),     \
01900                        FP_FIELD(_p3, p->params[2]),     \
01901                        FP_FIELD(_p4, p->params[3]),     \
01902                        FP_FIELD(_p5, p->params[4]),     \
01903                        FP_FIELD(_p6, p->params[5]),     \
01904                        FP_FIELD(_p7, p->params[6]),     \
01905                        FP_FIELD(_p8, p->params[7]),     \
01906                        FP_FIELD(_p9, p->params[8]),     \
01907                        FP_FIELD(_p10, p->params[9]),        \
01908                        FP_FIELD(_p11, p->params[10]))));    \
01909         break;  
01910 
01911 
01914 
01915 #define VFN_VA(_fid, _f)                                \
01916     case _fid:                                          \
01917             _f(p);                                      \
01918         break;
01919 #define VFN_0(_fid, _f)                                 \
01920     case _fid:                                          \
01921             _f();                                       \
01922         break;
01923 #define VFN_1(_fid, _f, _p1)                            \
01924     case _fid:                                          \
01925             _f(FP_FIELD(_p1, p->params[0]));            \
01926         break;  
01927 #define VFN_2(_fid, _f, _p1, _p2)                       \
01928     case _fid:                                          \
01929             _f(FP_FIELD(_p1, p->params[0]),             \
01930                FP_FIELD(_p2, p->params[1]));            \
01931         break;  
01932 #define VFN_3(_fid, _f, _p1, _p2, _p3)                  \
01933     case _fid:                                          \
01934             _f(FP_FIELD(_p1, p->params[0]),             \
01935                     FP_FIELD(_p2, p->params[1]),        \
01936                     FP_FIELD(_p3, p->params[2]));       \
01937         break;  
01938 #define VFN_4(_fid, _f, _p1, _p2, _p3, _p4)             \
01939     case _fid:                                          \
01940             _f(FP_FIELD(_p1, p->params[0]),             \
01941                     FP_FIELD(_p2, p->params[1]),        \
01942                     FP_FIELD(_p3, p->params[2]),        \
01943                     FP_FIELD(_p4, p->params[3]));       \
01944         break;  
01945 #define VFN_5(_fid, _f, _p1, _p2, _p3, _p4, _p5)        \
01946     case _fid:                                          \
01947             _f(FP_FIELD(_p1, p->params[0]),             \
01948                     FP_FIELD(_p2, p->params[1]),        \
01949                     FP_FIELD(_p3, p->params[2]),        \
01950                     FP_FIELD(_p4, p->params[3]),        \
01951                     FP_FIELD(_p5, p->params[4]));       \
01952         break;  
01953 #define VFN_6(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6)       \
01954     case _fid:                                          \
01955             _f(FP_FIELD(_p1, p->params[0]),             \
01956                     FP_FIELD(_p2, p->params[1]),        \
01957                     FP_FIELD(_p3, p->params[2]),        \
01958                     FP_FIELD(_p4, p->params[3]),        \
01959                     FP_FIELD(_p5, p->params[4]),        \
01960                     FP_FIELD(_p6, p->params[5]));       \
01961         break;  
01962 #define VFN_7(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7)      \
01963     case _fid:                                          \
01964             _f(FP_FIELD(_p1, p->params[0]),             \
01965                     FP_FIELD(_p2, p->params[1]),        \
01966                     FP_FIELD(_p3, p->params[2]),        \
01967                     FP_FIELD(_p4, p->params[3]),        \
01968                     FP_FIELD(_p5, p->params[4]),        \
01969                     FP_FIELD(_p6, p->params[5]),        \
01970                     FP_FIELD(_p7, p->params[6]));       \
01971         break;  
01972 
01973 
01976 
01977 #define CFN_VA(_fid, _rtype, _f)                            \
01978     case _fid:                                          \
01979         result.LoadPtr(_rtype,  _rtype##_RSLT(const_cast<_rtype##_TYPE>( \
01980             _f(p))));   \
01981         break;
01982 
01983 #define CFN_0(_fid, _rtype, _f)                         \
01984     case _fid:                                          \
01985         result.LoadPtr(_rtype,  _rtype##_RSLT(const_cast<_rtype##_TYPE>( \
01986             _f())));    \
01987         break;
01988 
01989 #define CFN_1(_fid, _rtype, _f, _p1)                        \
01990     case _fid:                                          \
01991         result.LoadPtr(_rtype,  _rtype##_RSLT(const_cast<_rtype##_TYPE>( \
01992             _f(FP_FIELD(_p1, p->params[0]))))); \
01993         break;  
01994 
01995 #define CFN_2(_fid, _rtype, _f, _p1, _p2)               \
01996     case _fid:                                          \
01997         result.LoadPtr(_rtype,  _rtype##_RSLT(const_cast<_rtype##_TYPE>( \
01998                     _f(FP_FIELD(_p1, p->params[0]),     \
01999                        FP_FIELD(_p2, p->params[1]))))); \
02000         break;  
02001 #define CFN_3(_fid, _rtype, _f, _p1, _p2, _p3)          \
02002     case _fid:                                          \
02003         result.LoadPtr(_rtype,  _rtype##_RSLT(const_cast<_rtype##_TYPE>( \
02004                     _f(FP_FIELD(_p1, p->params[0]),     \
02005                        FP_FIELD(_p2, p->params[1]),     \
02006                        FP_FIELD(_p3, p->params[2]))))); \
02007         break;  
02008 #define CFN_4(_fid, _rtype, _f, _p1, _p2, _p3, _p4)     \
02009     case _fid:                                          \
02010         result.LoadPtr(_rtype,  _rtype##_RSLT(const_cast<_rtype##_TYPE>( \
02011                     _f(FP_FIELD(_p1, p->params[0]),     \
02012                        FP_FIELD(_p2, p->params[1]),     \
02013                        FP_FIELD(_p3, p->params[2]),     \
02014                        FP_FIELD(_p4, p->params[3]))))); \
02015         break;  
02016 #define CFN_5(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5)    \
02017     case _fid:                                          \
02018         result.LoadPtr(_rtype,  _rtype##_RSLT(const_cast<_rtype##_TYPE>( \
02019                     _f(FP_FIELD(_p1, p->params[0]),     \
02020                        FP_FIELD(_p2, p->params[1]),     \
02021                        FP_FIELD(_p3, p->params[2]),     \
02022                        FP_FIELD(_p4, p->params[3]),     \
02023                        FP_FIELD(_p5, p->params[4]))))); \
02024         break;  
02025 
02026 
02029 
02030 #define FNT_VA(_fid, _rtype, _f)                        \
02031     case _fid:                                          \
02032         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
02033             _f(p, t))); \
02034         break;
02035 #define FNT_0(_fid, _rtype, _f)                         \
02036     case _fid:                                          \
02037         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
02038             _f(t)));    \
02039         break;
02040 #define FNT_1(_fid, _rtype, _f, _p1)                    \
02041     case _fid:                                          \
02042         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
02043             _f(FP_FIELD(_p1, p->params[0]),             \
02044                     t)));   \
02045         break;  
02046 #define FNT_2(_fid, _rtype, _f, _p1, _p2)               \
02047     case _fid:                                          \
02048         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
02049                     _f(FP_FIELD(_p1, p->params[0]),     \
02050                        FP_FIELD(_p2, p->params[1]),     \
02051                        t)));    \
02052         break;  
02053 #define FNT_3(_fid, _rtype, _f, _p1, _p2, _p3)          \
02054     case _fid:                                          \
02055         result.LoadPtr(_rtype,  _rtype##_RSLT(          \
02056                     _f(FP_FIELD(_p1, p->params[0]),     \
02057                        FP_FIELD(_p2, p->params[1]),     \
02058                        FP_FIELD(_p3, p->params[2]),     \
02059                        t)));    \
02060         break;  
02061 #define FNT_4(_fid, _rtype, _f, _p1, _p2, _p3, _p4)     \
02062     case _fid:                                          \
02063         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
02064                     _f(FP_FIELD(_p1, p->params[0]),     \
02065                        FP_FIELD(_p2, p->params[1]),     \
02066                        FP_FIELD(_p3, p->params[2]),     \
02067                        FP_FIELD(_p4, p->params[3]),     \
02068                        t)));    \
02069         break;  
02070 #define FNT_5(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5) \
02071     case _fid:                                          \
02072         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
02073                     _f(FP_FIELD(_p1, p->params[0]),     \
02074                        FP_FIELD(_p2, p->params[1]),     \
02075                        FP_FIELD(_p3, p->params[2]),     \
02076                        FP_FIELD(_p4, p->params[3]),     \
02077                        FP_FIELD(_p5, p->params[4]),     \
02078                        t)));    \
02079         break;  
02080 #define FNT_6(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6) \
02081     case _fid:                                          \
02082         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
02083                     _f(FP_FIELD(_p1, p->params[0]),     \
02084                        FP_FIELD(_p2, p->params[1]),     \
02085                        FP_FIELD(_p3, p->params[2]),     \
02086                        FP_FIELD(_p4, p->params[3]),     \
02087                        FP_FIELD(_p5, p->params[4]),     \
02088                        FP_FIELD(_p6, p->params[5]),     \
02089                        t)));    \
02090         break;  
02091 #define FNT_7(_fid, _rtype, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7) \
02092     case _fid:                                          \
02093         result.LoadPtr(_rtype,  _rtype##_RSLT(      \
02094                     _f(FP_FIELD(_p1, p->params[0]),     \
02095                        FP_FIELD(_p2, p->params[1]),     \
02096                        FP_FIELD(_p3, p->params[2]),     \
02097                        FP_FIELD(_p4, p->params[3]),     \
02098                        FP_FIELD(_p5, p->params[4]),     \
02099                        FP_FIELD(_p6, p->params[5]),     \
02100                        FP_FIELD(_p7, p->params[6]),     \
02101                        t)));    \
02102         break;  
02103 
02104 
02107 
02108 #define VFNT_VA(_fid, _f)                               \
02109     case _fid:                                          \
02110             _f(p, t);                                   \
02111         break;
02112 #define VFNT_0(_fid, _f)                                \
02113     case _fid:                                          \
02114             _f(t);                                      \
02115         break;
02116 #define VFNT_1(_fid, _f, _p1)                           \
02117     case _fid:                                          \
02118             _f(FP_FIELD(_p1, p->params[0]),             \
02119                     t);                                 \
02120         break;  
02121 #define VFNT_2(_fid, _f, _p1, _p2)                      \
02122     case _fid:                                          \
02123             _f(FP_FIELD(_p1, p->params[0]),             \
02124                FP_FIELD(_p2, p->params[1]),             \
02125                t);                                      \
02126         break;  
02127 #define VFNT_3(_fid, _f, _p1, _p2, _p3)                 \
02128     case _fid:                                          \
02129             _f(FP_FIELD(_p1, p->params[0]),             \
02130                     FP_FIELD(_p2, p->params[1]),        \
02131                     FP_FIELD(_p3, p->params[2]),        \
02132                     t);                                 \
02133         break;  
02134 #define VFNT_4(_fid, _f, _p1, _p2, _p3, _p4)            \
02135     case _fid:                                          \
02136             _f(FP_FIELD(_p1, p->params[0]),             \
02137                     FP_FIELD(_p2, p->params[1]),        \
02138                     FP_FIELD(_p3, p->params[2]),        \
02139                     FP_FIELD(_p4, p->params[3]),        \
02140                     t);                                 \
02141         break;  
02142 #define VFNT_5(_fid, _f, _p1, _p2, _p3, _p4, _p5)       \
02143     case _fid:                                          \
02144             _f(FP_FIELD(_p1, p->params[0]),             \
02145                     FP_FIELD(_p2, p->params[1]),        \
02146                     FP_FIELD(_p3, p->params[2]),        \
02147                     FP_FIELD(_p4, p->params[3]),        \
02148                     FP_FIELD(_p5, p->params[4]),        \
02149                     t);                                 \
02150         break;  
02151 #define VFNT_6(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6)  \
02152     case _fid:                                          \
02153             _f(FP_FIELD(_p1, p->params[0]),             \
02154                     FP_FIELD(_p2, p->params[1]),        \
02155                     FP_FIELD(_p3, p->params[2]),        \
02156                     FP_FIELD(_p4, p->params[3]),        \
02157                     FP_FIELD(_p5, p->params[4]),        \
02158                     FP_FIELD(_p6, p->params[5]),        \
02159                     t);                                 \
02160         break;  
02161 #define VFNT_7(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7) \
02162     case _fid:                                          \
02163             _f(FP_FIELD(_p1, p->params[0]),             \
02164                FP_FIELD(_p2, p->params[1]),             \
02165                FP_FIELD(_p3, p->params[2]),             \
02166                FP_FIELD(_p4, p->params[3]),             \
02167                FP_FIELD(_p5, p->params[4]),             \
02168                FP_FIELD(_p6, p->params[5]),             \
02169                FP_FIELD(_p7, p->params[6]),             \
02170                t);                                      \
02171         break;  
02172 #define VFNT_8(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8)    \
02173     case _fid:                                          \
02174             _f(FP_FIELD(_p1, p->params[0]),             \
02175                FP_FIELD(_p2, p->params[1]),             \
02176                FP_FIELD(_p3, p->params[2]),             \
02177                FP_FIELD(_p4, p->params[3]),             \
02178                FP_FIELD(_p5, p->params[4]),             \
02179                FP_FIELD(_p6, p->params[5]),             \
02180                FP_FIELD(_p7, p->params[6]),             \
02181                FP_FIELD(_p8, p->params[7]),             \
02182                t);                                      \
02183         break;  
02184 #define VFNT_9(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8, _p9)   \
02185     case _fid:                                          \
02186             _f(FP_FIELD(_p1, p->params[0]),             \
02187                FP_FIELD(_p2, p->params[1]),             \
02188                FP_FIELD(_p3, p->params[2]),             \
02189                FP_FIELD(_p4, p->params[3]),             \
02190                FP_FIELD(_p5, p->params[4]),             \
02191                FP_FIELD(_p6, p->params[5]),             \
02192                FP_FIELD(_p7, p->params[6]),             \
02193                FP_FIELD(_p8, p->params[7]),             \
02194                FP_FIELD(_p9, p->params[8]),             \
02195                t);                                      \
02196         break;  
02197 #define VFNT_10(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8, _p9, _p10)    \
02198     case _fid:                                          \
02199             _f(FP_FIELD(_p1, p->params[0]),             \
02200                FP_FIELD(_p2, p->params[1]),             \
02201                FP_FIELD(_p3, p->params[2]),             \
02202                FP_FIELD(_p4, p->params[3]),             \
02203                FP_FIELD(_p5, p->params[4]),             \
02204                FP_FIELD(_p6, p->params[5]),             \
02205                FP_FIELD(_p7, p->params[6]),             \
02206                FP_FIELD(_p8, p->params[7]),             \
02207                FP_FIELD(_p9, p->params[8]),             \
02208                FP_FIELD(_p10, p->params[9]),            \
02209                t);                                      \
02210         break;  
02211 #define VFNT_11(_fid, _f, _p1, _p2, _p3, _p4, _p5, _p6, _p7, _p8, _p9, _p10, _p11)  \
02212     case _fid:                                          \
02213             _f(FP_FIELD(_p1, p->params[0]),             \
02214                FP_FIELD(_p2, p->params[1]),             \
02215                FP_FIELD(_p3, p->params[2]),             \
02216                FP_FIELD(_p4, p->params[3]),             \
02217                FP_FIELD(_p5, p->params[4]),             \
02218                FP_FIELD(_p6, p->params[5]),             \
02219                FP_FIELD(_p7, p->params[6]),             \
02220                FP_FIELD(_p8, p->params[7]),             \
02221                FP_FIELD(_p9, p->params[8]),             \
02222                FP_FIELD(_p10, p->params[9]),            \
02223                FP_FIELD(_p11, p->params[10]),           \
02224                t);                                      \
02225         break;  
02226 
02227 
02228 // parameter type field selectors
02229 #define TYPE_FLOAT_FP_FIELD             f
02230 #define TYPE_INT_FP_FIELD               i
02231 #define TYPE_RGBA_FP_FIELD              p
02232 #define TYPE_POINT3_FP_FIELD            p
02233 #define TYPE_FRGBA_FP_FIELD             p4
02234 #define TYPE_POINT4_FP_FIELD            p4
02235 #define TYPE_BOOL_FP_FIELD              i
02236 #define TYPE_ANGLE_FP_FIELD             f
02237 #define TYPE_PCNT_FRAC_FP_FIELD         f
02238 #define TYPE_WORLD_FP_FIELD             f
02239 #define TYPE_STRING_FP_FIELD            s
02240 #define TYPE_FILENAME_FP_FIELD          s
02241 #define TYPE_HSV_FP_FIELD               p
02242 #define TYPE_COLOR_CHANNEL_FP_FIELD     f
02243 #define TYPE_TIMEVALUE_FP_FIELD         i
02244 #define TYPE_RADIOBTN_INDEX_FP_FIELD    i
02245 #define TYPE_MTL_FP_FIELD               mtl
02246 #define TYPE_TEXMAP_FP_FIELD            tex
02247 #define TYPE_BITMAP_FP_FIELD            bm
02248 #define TYPE_INODE_FP_FIELD             n
02249 #define TYPE_REFTARG_FP_FIELD           r
02250 #define TYPE_INDEX_FP_FIELD             i
02251 #define TYPE_MATRIX3_FP_FIELD           m
02252 #define TYPE_VOID_FP_FIELD              void_paramtype_bad
02253 #define TYPE_ENUM_FP_FIELD              i
02254 #define TYPE_INTERVAL_FP_FIELD          intvl
02255 #define TYPE_ANGAXIS_FP_FIELD           aa
02256 #define TYPE_QUAT_FP_FIELD              q
02257 #define TYPE_RAY_FP_FIELD               ray
02258 #define TYPE_POINT2_FP_FIELD            p2
02259 #define TYPE_BITARRAY_FP_FIELD          bits
02260 #define TYPE_CLASS_FP_FIELD             cd
02261 #define TYPE_MESH_FP_FIELD              msh
02262 #define TYPE_OBJECT_FP_FIELD            obj
02263 #define TYPE_CONTROL_FP_FIELD           ctrl
02264 #define TYPE_POINT_FP_FIELD             pt
02265 #define TYPE_TSTR_FP_FIELD              tstr
02266 #define TYPE_IOBJECT_FP_FIELD           iobj
02267 #define TYPE_INTERFACE_FP_FIELD         fpi
02268 #define TYPE_HWND_FP_FIELD              hwnd
02269 #define TYPE_NAME_FP_FIELD              s
02270 #define TYPE_COLOR_FP_FIELD             clr
02271 #define TYPE_ACOLOR_FP_FIELD            aclr
02272 #define TYPE_FPVALUE_FP_FIELD           fpv
02273 #define TYPE_VALUE_FP_FIELD             v
02274 #define TYPE_DWORD_FP_FIELD             d
02275 #define TYPE_bool_FP_FIELD              b
02276 #define TYPE_INTPTR_FP_FIELD            intptr
02277 #define TYPE_INT64_FP_FIELD             i64
02278 #define TYPE_DOUBLE_FP_FIELD            dbl
02279 
02280 // Tab<>s of the above...
02281 
02282 #define TYPE_FLOAT_TAB_FP_FIELD             f_tab
02283 #define TYPE_INT_TAB_FP_FIELD               i_tab
02284 #define TYPE_RGBA_TAB_FP_FIELD              p_tab
02285 #define TYPE_POINT3_TAB_FP_FIELD            p_tab
02286 #define TYPE_FRGBA_TAB_FP_FIELD             p4_tab
02287 #define TYPE_POINT4_TAB_FP_FIELD            p4_tab
02288 #define TYPE_BOOL_TAB_FP_FIELD              i_tab
02289 #define TYPE_ANGLE_TAB_FP_FIELD             f_tab
02290 #define TYPE_PCNT_FRAC_TAB_FP_FIELD         f_tab
02291 #define TYPE_WORLD_TAB_FP_FIELD             f_tab
02292 #define TYPE_STRING_TAB_FP_FIELD            s_tab
02293 #define TYPE_FILENAME_TAB_FP_FIELD          s_tab
02294 #define TYPE_HSV_TAB_FP_FIELD               p_tab
02295 #define TYPE_COLOR_CHANNEL_TAB_FP_FIELD     f_tab
02296 #define TYPE_TIMEVALUE_TAB_FP_FIELD         i_tab
02297 #define TYPE_RADIOBTN_INDEX_TAB_FP_FIELD    i_tab
02298 #define TYPE_MTL_TAB_FP_FIELD               mtl_tab
02299 #define TYPE_TEXMAP_TAB_FP_FIELD            tex_tab
02300 #define TYPE_BITMAP_TAB_FP_FIELD            bm_tab
02301 #define TYPE_INODE_TAB_FP_FIELD             n_tab
02302 #define TYPE_REFTARG_TAB_FP_FIELD           r_tab
02303 #define TYPE_INDEX_TAB_FP_FIELD             i_tab
02304 #define TYPE_MATRIX3_TAB_FP_FIELD           m3_tab
02305 #define TYPE_ENUM_TAB_FP_FIELD              i_tab
02306 #define TYPE_INTERVAL_TAB_FP_FIELD          intvl_tab
02307 #define TYPE_ANGAXIS_TAB_FP_FIELD           aa_tab
02308 #define TYPE_QUAT_TAB_FP_FIELD              q_tab
02309 #define TYPE_RAY_TAB_FP_FIELD               ray_tab
02310 #define TYPE_POINT2_TAB_FP_FIELD            p2_tab
02311 #define TYPE_BITARRAY_TAB_FP_FIELD          bits_tab
02312 #define TYPE_CLASS_TAB_FP_FIELD             cd_tab
02313 #define TYPE_MESH_TAB_FP_FIELD              msh_tab
02314 #define TYPE_OBJECT_TAB_FP_FIELD            obj_tab
02315 #define TYPE_CONTROL_TAB_FP_FIELD           ctrl_tab
02316 #define TYPE_POINT_TAB_FP_FIELD             pt_tab
02317 #define TYPE_TSTR_TAB_FP_FIELD              tstr_tab
02318 #define TYPE_IOBJECT_TAB_FP_FIELD           iobj_tab
02319 #define TYPE_INTERFACE_TAB_FP_FIELD         fpi_tab
02320 #define TYPE_HWND_TAB_FP_FIELD              hwnd_tab
02321 #define TYPE_NAME_TAB_FP_FIELD              s_tab
02322 #define TYPE_COLOR_TAB_FP_FIELD             clr_tab
02323 #define TYPE_ACOLOR_TAB_FP_FIELD            aclr_tab
02324 #define TYPE_FPVALUE_TAB_FP_FIELD           fpv_tab
02325 #define TYPE_VALUE_TAB_FP_FIELD             v_tab
02326 #define TYPE_DWORD_TAB_FP_FIELD             d_tab
02327 #define TYPE_bool_TAB_FP_FIELD              b_tab
02328 #define TYPE_INTPTR_TAB_FP_FIELD            intptr_tab
02329 #define TYPE_INT64_TAB_FP_FIELD             i64_tab
02330 #define TYPE_DOUBLE_TAB_FP_FIELD            dbl_tab
02331 
02332 // by-pointer fields
02333 #define TYPE_FLOAT_BP_FP_FIELD              fptr        
02334 #define TYPE_INT_BP_FP_FIELD                iptr        
02335 #define TYPE_BOOL_BP_FP_FIELD               iptr        
02336 #define TYPE_ANGLE_BP_FP_FIELD              fptr        
02337 #define TYPE_PCNT_FRAC_BP_FP_FIELD          fptr    
02338 #define TYPE_WORLD_BP_FP_FIELD              fptr
02339 #define TYPE_COLOR_CHANNEL_BP_FP_FIELD      fptr
02340 #define TYPE_TIMEVALUE_BP_FP_FIELD          iptr
02341 #define TYPE_RADIOBTN_INDEX_BP_FP_FIELD     iptr
02342 #define TYPE_INDEX_BP_FP_FIELD              iptr
02343 #define TYPE_ENUM_BP_FP_FIELD               iptr
02344 #define TYPE_DWORD_BP_FP_FIELD              dptr
02345 #define TYPE_bool_BP_FP_FIELD               bptr
02346 #define TYPE_INTPTR_BP_FP_FIELD             intptrptr
02347 #define TYPE_INT64_BP_FP_FIELD              i64ptr
02348 #define TYPE_DOUBLE_BP_FP_FIELD             dblptr      
02349 
02350 // by-reference fields
02351 #define TYPE_FLOAT_BR_FP_FIELD              fptr        
02352 #define TYPE_INT_BR_FP_FIELD                iptr        
02353 #define TYPE_RGBA_BR_FP_FIELD               p   
02354 #define TYPE_POINT3_BR_FP_FIELD             p   
02355 #define TYPE_FRGBA_BR_FP_FIELD              p4  
02356 #define TYPE_POINT4_BR_FP_FIELD             p4  
02357 #define TYPE_BOOL_BR_FP_FIELD               iptr        
02358 #define TYPE_ANGLE_BR_FP_FIELD              fptr        
02359 #define TYPE_PCNT_FRAC_BR_FP_FIELD          fptr    
02360 #define TYPE_WORLD_BR_FP_FIELD              fptr
02361 #define TYPE_HSV_BR_FP_FIELD                p
02362 #define TYPE_COLOR_CHANNEL_BR_FP_FIELD      f
02363 #define TYPE_TIMEVALUE_BR_FP_FIELD          iptr
02364 #define TYPE_RADIOBTN_INDEX_BR_FP_FIELD     iptr
02365 #define TYPE_BITMAP_BR_FP_FIELD             bm
02366 #define TYPE_INDEX_BR_FP_FIELD              iptr
02367 #define TYPE_ENUM_BR_FP_FIELD               iptr
02368 #define TYPE_REFTARG_BR_FP_FIELD            r
02369 #define TYPE_MATRIX3_BR_FP_FIELD            m
02370 #define TYPE_ANGAXIS_BR_FP_FIELD            aa
02371 #define TYPE_QUAT_BR_FP_FIELD               q
02372 #define TYPE_BITARRAY_BR_FP_FIELD           bits
02373 #define TYPE_RAY_BR_FP_FIELD                ray
02374 #define TYPE_POINT2_BR_FP_FIELD             p2
02375 #define TYPE_MESH_BR_FP_FIELD               msh
02376 #define TYPE_INTERVAL_BR_FP_FIELD           intvl
02377 #define TYPE_POINT_BR_FP_FIELD              pt
02378 #define TYPE_TSTR_BR_FP_FIELD               tstr
02379 #define TYPE_COLOR_BR_FP_FIELD              clr
02380 #define TYPE_ACOLOR_BR_FP_FIELD             aclr
02381 #define TYPE_FPVALUE_BR_FP_FIELD            fpv
02382 #define TYPE_DWORD_BR_FP_FIELD              dptr
02383 #define TYPE_bool_BR_FP_FIELD               bptr
02384 #define TYPE_INTPTR_BR_FP_FIELD             intptrptr
02385 #define TYPE_INT64_BR_FP_FIELD              i64ptr
02386 #define TYPE_DOUBLE_BR_FP_FIELD             dblptr      
02387 
02388 // Tab<> by-reference fields
02389 #define TYPE_FLOAT_TAB_BR_FP_FIELD          f_tab
02390 #define TYPE_INT_TAB_BR_FP_FIELD            i_tab
02391 #define TYPE_RGBA_TAB_BR_FP_FIELD           p_tab
02392 #define TYPE_POINT3_TAB_BR_FP_FIELD         p_tab
02393 #define TYPE_FRGBA_TAB_BR_FP_FIELD          p4_tab
02394 #define TYPE_POINT4_TAB_BR_FP_FIELD         p4_tab
02395 #define TYPE_BOOL_TAB_BR_FP_FIELD           i_tab
02396 #define TYPE_ANGLE_TAB_BR_FP_FIELD          f_tab
02397 #define TYPE_PCNT_FRAC_TAB_BR_FP_FIELD      f_tab
02398 #define TYPE_WORLD_TAB_BR_FP_FIELD          f_tab
02399 #define TYPE_STRING_TAB_BR_FP_FIELD         s_tab
02400 #define TYPE_FILENAME_TAB_BR_FP_FIELD       s_tab
02401 #define TYPE_HSV_TAB_BR_FP_FIELD            p_tab
02402 #define TYPE_COLOR_CHANNEL_TAB_BR_FP_FIELD  f_tab
02403 #define TYPE_TIMEVALUE_TAB_BR_FP_FIELD      i_tab
02404 #define TYPE_RADIOBTN_INDEX_TAB_BR_FP_FIELD i_tab
02405 #define TYPE_MTL_TAB_BR_FP_FIELD            mtl_tab
02406 #define TYPE_TEXMAP_TAB_BR_FP_FIELD         tex_tab
02407 #define TYPE_BITMAP_TAB_BR_FP_FIELD         bm_tab
02408 #define TYPE_INODE_TAB_BR_FP_FIELD          n_tab
02409 #define TYPE_REFTARG_TAB_BR_FP_FIELD        r_tab
02410 #define TYPE_INDEX_TAB_BR_FP_FIELD          i_tab
02411 #define TYPE_ENUM_TAB_BR_FP_FIELD           i_tab
02412 #define TYPE_MATRIX3_TAB_BR_FP_FIELD        m3_tab
02413 #define TYPE_ANGAXIS_TAB_BR_FP_FIELD        aa_tab
02414 #define TYPE_QUAT_TAB_BR_FP_FIELD           q_tab
02415 #define TYPE_BITARRAY_TAB_BR_FP_FIELD       bits_tab
02416 #define TYPE_CLASS_TAB_BR_FP_FIELD          cd_tab
02417 #define TYPE_RAY_TAB_BR_FP_FIELD            ray_tab
02418 #define TYPE_POINT2_TAB_BR_FP_FIELD         p2_tab
02419 #define TYPE_MESH_TAB_BR_FP_FIELD           msh_tab
02420 #define TYPE_OBJECT_TAB_BR_FP_FIELD         obj_tab
02421 #define TYPE_CONTROL_TAB_BR_FP_FIELD        ctrl_tab
02422 #define TYPE_INTERVAL_TAB_BR_FP_FIELD       intvl_tab
02423 #define TYPE_POINT_TAB_BR_FP_FIELD          pt_tab
02424 #define TYPE_HWND_TAB_BR_FP_FIELD           hwnd_tab
02425 #define TYPE_TSTR_TAB_BR_FP_FIELD           tstr_tab
02426 #define TYPE_IOBJECT_TAB_BR_FP_FIELD        iobj_tab
02427 #define TYPE_INTERFACE_TAB_BR_FP_FIELD      fpi_tab
02428 #define TYPE_NAME_TAB_BR_FP_FIELD           s_tab
02429 #define TYPE_COLOR_TAB_BR_FP_FIELD          clr_tab
02430 #define TYPE_ACOLOR_TAB_BR_FP_FIELD         aclr_tab
02431 #define TYPE_FPVALUE_TAB_BR_FP_FIELD        fpv_tab
02432 #define TYPE_VALUE_TAB_BR_FP_FIELD          v_tab
02433 #define TYPE_DWORD_TAB_BR_FP_FIELD          d_tab
02434 #define TYPE_bool_TAB_BR_FP_FIELD           b_tab
02435 #define TYPE_INTPTR_TAB_BR_FP_FIELD         intptr_tab
02436 #define TYPE_INT64_TAB_BR_FP_FIELD          i64_tab
02437 #define TYPE_DOUBLE_TAB_BR_FP_FIELD         dbl_tab
02438 
02439 // by-value fields
02440 #define TYPE_RGBA_BV_FP_FIELD               p   
02441 #define TYPE_POINT3_BV_FP_FIELD             p   
02442 #define TYPE_FRGBA_BV_FP_FIELD              p4  
02443 #define TYPE_POINT4_BV_FP_FIELD             p4  
02444 #define TYPE_HSV_BV_FP_FIELD                p
02445 #define TYPE_BITMAP_BV_FP_FIELD             bm
02446 #define TYPE_MATRIX3_BV_FP_FIELD            m
02447 #define TYPE_ANGAXIS_BV_FP_FIELD            aa
02448 #define TYPE_QUAT_BV_FP_FIELD               q
02449 #define TYPE_BITARRAY_BV_FP_FIELD           bits
02450 #define TYPE_RAY_BV_FP_FIELD                ray
02451 #define TYPE_POINT2_BV_FP_FIELD             p2
02452 #define TYPE_MESH_BV_FP_FIELD               msh
02453 #define TYPE_INTERVAL_BV_FP_FIELD           intvl
02454 #define TYPE_POINT_BV_FP_FIELD              pt
02455 #define TYPE_TSTR_BV_FP_FIELD               tstr
02456 #define TYPE_COLOR_BV_FP_FIELD              clr
02457 #define TYPE_ACOLOR_BV_FP_FIELD             aclr
02458 #define TYPE_FPVALUE_BV_FP_FIELD            fpv
02459 #define TYPE_CLASS_BV_FP_FIELD              cd
02460 
02461 // by-val Tab<> fields
02462 #define TYPE_FLOAT_TAB_BV_FP_FIELD          f_tab
02463 #define TYPE_INT_TAB_BV_FP_FIELD            i_tab
02464 #define TYPE_RGBA_TAB_BV_FP_FIELD           p_tab
02465 #define TYPE_POINT3_TAB_BV_FP_FIELD         p_tab
02466 #define TYPE_FRGBA_TAB_BV_FP_FIELD          p4_tab
02467 #define TYPE_POINT4_TAB_BV_FP_FIELD         p4_tab
02468 #define TYPE_BOOL_TAB_BV_FP_FIELD           i_tab
02469 #define TYPE_ANGLE_TAB_BV_FP_FIELD          f_tab
02470 #define TYPE_PCNT_FRAC_TAB_BV_FP_FIELD      f_tab
02471 #define TYPE_WORLD_TAB_BV_FP_FIELD          f_tab
02472 #define TYPE_STRING_TAB_BV_FP_FIELD         s_tab
02473 #define TYPE_FILENAME_TAB_BV_FP_FIELD       s_tab
02474 #define TYPE_HSV_TAB_BV_FP_FIELD            p_tab
02475 #define TYPE_COLOR_CHANNEL_TAB_BV_FP_FIELD  f_tab
02476 #define TYPE_TIMEVALUE_TAB_BV_FP_FIELD      i_tab
02477 #define TYPE_RADIOBTN_INDEX_TAB_BV_FP_FIELD i_tab
02478 #define TYPE_MTL_TAB_BV_FP_FIELD            mtl_tab
02479 #define TYPE_TEXMAP_TAB_BV_FP_FIELD         tex_tab
02480 #define TYPE_BITMAP_TAB_BV_FP_FIELD         bm_tab
02481 #define TYPE_INODE_TAB_BV_FP_FIELD          n_tab
02482 #define TYPE_REFTARG_TAB_BV_FP_FIELD        r_tab
02483 #define TYPE_INDEX_TAB_BV_FP_FIELD          i_tab
02484 #define TYPE_ENUM_TAB_BV_FP_FIELD           i_tab
02485 #define TYPE_MATRIX3_TAB_BV_FP_FIELD        m3_tab
02486 #define TYPE_ANGAXIS_TAB_BV_FP_FIELD        aa_tab
02487 #define TYPE_QUAT_TAB_BV_FP_FIELD           q_tab
02488 #define TYPE_BITARRAY_TAB_BV_FP_FIELD       bits_tab
02489 #define TYPE_CLASS_TAB_BV_FP_FIELD          cd_tab
02490 #define TYPE_RAY_TAB_BV_FP_FIELD            ray_tab
02491 #define TYPE_POINT2_TAB_BV_FP_FIELD         p2_tab
02492 #define TYPE_MESH_TAB_BV_FP_FIELD           msh_tab
02493 #define TYPE_OBJECT_TAB_BV_FP_FIELD         obj_tab
02494 #define TYPE_CONTROL_TAB_BV_FP_FIELD        ctrl_tab
02495 #define TYPE_INTERVAL_TAB_BV_FP_FIELD       intvl_tab
02496 #define TYPE_POINT_TAB_BV_FP_FIELD          pt_tab
02497 #define TYPE_HWND_TAB_BV_FP_FIELD           hwnd_tab
02498 #define TYPE_TSTR_TAB_BV_FP_FIELD           tstr_tab
02499 #define TYPE_IOBJECT_TAB_BV_FP_FIELD        iobj_tab
02500 #define TYPE_INTERFACE_TAB_BV_FP_FIELD      fpi_tab
02501 #define TYPE_NAME_TAB_BV_FP_FIELD           s_tab
02502 #define TYPE_COLOR_TAB_BV_FP_FIELD          clr_tab
02503 #define TYPE_ACOLOR_TAB_BV_FP_FIELD         aclr_tab
02504 #define TYPE_FPVALUE_TAB_BV_FP_FIELD        fpv_tab
02505 #define TYPE_VALUE_TAB_BV_FP_FIELD          v_tab
02506 #define TYPE_DWORD_TAB_BV_FP_FIELD          d_tab
02507 #define TYPE_bool_TAB_BV_FP_FIELD           b_tab
02508 #define TYPE_INTPTR_TAB_BV_FP_FIELD         intptr_tab
02509 #define TYPE_INT64_TAB_BV_FP_FIELD          i64_tab
02510 #define TYPE_DOUBLE_TAB_BV_FP_FIELD         dbl_tab
02511 
02512 // field access macros...  
02513 
02514 // base types, yield 'conventional' type passing conventions
02515 //   ie, ints, floats, points, colors, 3D math types are passed as values, all 
02516 //   others passed as pointers
02517 
02518 #define TYPE_FLOAT_FIELD(_v)            (((_v).f))      
02519 #define TYPE_INT_FIELD(_v)              (((_v).i))      
02520 #define TYPE_RGBA_FIELD(_v)             (*((_v).p)) 
02521 #define TYPE_POINT3_FIELD(_v)           (*((_v).p)) 
02522 #define TYPE_FRGBA_FIELD(_v)            (*((_v).p4))    
02523 #define TYPE_POINT4_FIELD(_v)           (*((_v).p4))    
02524 #define TYPE_BOOL_FIELD(_v)             (((_v).i))      
02525 #define TYPE_ANGLE_FIELD(_v)            (((_v).f))      
02526 #define TYPE_PCNT_FRAC_FIELD(_v)        (((_v).f))  
02527 #define TYPE_WORLD_FIELD(_v)            (((_v).f))
02528 #define TYPE_STRING_FIELD(_v)           (((_v).s))
02529 #define TYPE_FILENAME_FIELD(_v)         (((_v).s))
02530 #define TYPE_HSV_FIELD(_v)              (*((_v).p))
02531 #define TYPE_COLOR_CHANNEL_FIELD(_v)    (((_v).f))
02532 #define TYPE_TIMEVALUE_FIELD(_v)        (((_v).i))
02533 #define TYPE_RADIOBTN_INDEX_FIELD(_v)   (((_v).i))
02534 #define TYPE_MTL_FIELD(_v)              (((_v).mtl))
02535 #define TYPE_TEXMAP_FIELD(_v)           (((_v).tex))
02536 #define TYPE_BITMAP_FIELD(_v)           (((_v).bm))
02537 #define TYPE_INODE_FIELD(_v)            (((_v).n))
02538 #define TYPE_REFTARG_FIELD(_v)          (((_v).r))
02539 #define TYPE_INDEX_FIELD(_v)            (((_v).i))
02540 #define TYPE_ENUM_FIELD(_v)             (((_v).i))
02541 #define TYPE_MATRIX3_FIELD(_v)          (*((_v).m))
02542 #define TYPE_ANGAXIS_FIELD(_v)          (*((_v).aa))
02543 #define TYPE_QUAT_FIELD(_v)             (*((_v).q))
02544 #define TYPE_BITARRAY_FIELD(_v)         (((_v).bits))
02545 #define TYPE_CLASS_FIELD(_v)            (((_v).cd))
02546 #define TYPE_RAY_FIELD(_v)              (*((_v).ray))
02547 #define TYPE_POINT2_FIELD(_v)           (*((_v).p2))
02548 #define TYPE_MESH_FIELD(_v)             (((_v).msh))
02549 #define TYPE_OBJECT_FIELD(_v)           (((_v).obj))
02550 #define TYPE_CONTROL_FIELD(_v)          (((_v).ctrl))
02551 #define TYPE_INTERVAL_FIELD(_v)         (*((_v).intvl))
02552 #define TYPE_POINT_FIELD(_v)            (*((_v).pt))
02553 #define TYPE_TSTR_FIELD(_v)             (*((_v).tstr))
02554 #define TYPE_IOBJECT_FIELD(_v)          (((_v).iobj))
02555 #define TYPE_INTERFACE_FIELD(_v)        (((_v).fpi))
02556 #define TYPE_HWND_FIELD(_v)             (((_v).hwnd))
02557 #define TYPE_NAME_FIELD(_v)             (((_v).s))
02558 #define TYPE_COLOR_FIELD(_v)            (((_v).clr))
02559 #define TYPE_ACOLOR_FIELD(_v)           (((_v).aclr))
02560 #define TYPE_FPVALUE_FIELD(_v)          (((_v).fpv))
02561 #define TYPE_VALUE_FIELD(_v)            (((_v).v))
02562 #define TYPE_DWORD_FIELD(_v)            (((_v).d))
02563 #define TYPE_bool_FIELD(_v)             (((_v).b))
02564 #define TYPE_INTPTR_FIELD(_v)           (((_v).intptr))     
02565 #define TYPE_INT64_FIELD(_v)            (((_v).i64))        
02566 #define TYPE_DOUBLE_FIELD(_v)           (((_v).dbl))        
02567 
02568 // all Tab<> types passed by pointer
02569 
02570 #define TYPE_FLOAT_TAB_FIELD(_v)            (((_v).f_tab))
02571 #define TYPE_INT_TAB_FIELD(_v)              (((_v).i_tab))
02572 #define TYPE_RGBA_TAB_FIELD(_v)             (((_v).p_tab))
02573 #define TYPE_POINT3_TAB_FIELD(_v)           (((_v).p_tab))
02574 #define TYPE_FRGBA_TAB_FIELD(_v)            (((_v).p4_tab))
02575 #define TYPE_POINT4_TAB_FIELD(_v)           (((_v).p4_tab))
02576 #define TYPE_BOOL_TAB_FIELD(_v)             (((_v).i_tab))
02577 #define TYPE_ANGLE_TAB_FIELD(_v)            (((_v).f_tab))
02578 #define TYPE_PCNT_FRAC_TAB_FIELD(_v)        (((_v).f_tab))
02579 #define TYPE_WORLD_TAB_FIELD(_v)            (((_v).f_tab))
02580 #define TYPE_STRING_TAB_FIELD(_v)           (((_v).s_tab))
02581 #define TYPE_FILENAME_TAB_FIELD(_v)         (((_v).s_tab))
02582 #define TYPE_HSV_TAB_FIELD(_v)              (((_v).p_tab))
02583 #define TYPE_COLOR_CHANNEL_TAB_FIELD(_v)    (((_v).f_tab))
02584 #define TYPE_TIMEVALUE_TAB_FIELD(_v)        (((_v).i_tab))
02585 #define TYPE_RADIOBTN_INDEX_TAB_FIELD(_v)   (((_v).i_tab))
02586 #define TYPE_MTL_TAB_FIELD(_v)              (((_v).mtl_tab))
02587 #define TYPE_TEXMAP_TAB_FIELD(_v)           (((_v).tex_tab))
02588 #define TYPE_BITMAP_TAB_FIELD(_v)           (((_v).bm_tab))
02589 #define TYPE_INODE_TAB_FIELD(_v)            (((_v).n_tab))
02590 #define TYPE_REFTARG_TAB_FIELD(_v)          (((_v).r_tab))
02591 #define TYPE_INDEX_TAB_FIELD(_v)            (((_v).i_tab))
02592 #define TYPE_ENUM_TAB_FIELD(_v)             (((_v).i_tab))
02593 #define TYPE_MATRIX3_TAB_FIELD(_v)          (((_v).m3_tab))
02594 #define TYPE_ANGAXIS_TAB_FIELD(_v)          (((_v).aa_tab))
02595 #define TYPE_QUAT_TAB_FIELD(_v)             (((_v).q_tab))
02596 #define TYPE_BITARRAY_TAB_FIELD(_v)         (((_v).bits_tab))
02597 #define TYPE_CLASS_TAB_FIELD(_v)            (((_v).cd_tab))
02598 #define TYPE_RAY_TAB_FIELD(_v)              (((_v).ray_tab))
02599 #define TYPE_POINT2_TAB_FIELD(_v)           (((_v).p2_tab))
02600 #define TYPE_MESH_TAB_FIELD(_v)             (((_v).msh_tab))
02601 #define TYPE_OBJECT_TAB_FIELD(_v)           (((_v).obj_tab))
02602 #define TYPE_CONTROL_TAB_FIELD(_v)          (((_v).ctrl_tab))
02603 #define TYPE_INTERVAL_TAB_FIELD(_v)         (((_v).intvl_tab))
02604 #define TYPE_POINT_TAB_FIELD(_v)            (((_v).pt_tab))
02605 #define TYPE_TSTRT_TAB_FIELD(_v)            (((_v).tstr_tab))
02606 #define TYPE_IOBJECT_TAB_FIELD(_v)          (((_v).iobj_tab))
02607 #define TYPE_INTERFACE_TAB_FIELD(_v)        (((_v).fpi_tab))
02608 #define TYPE_HWND_TAB_FIELD(_v)             (((_v).hwnd_tab))
02609 #define TYPE_NAME_TAB_FIELD(_v)             (((_v).s_tab))
02610 #define TYPE_COLOR_TAB_FIELD(_v)            (((_v).clr_tab))
02611 #define TYPE_ACOLOR_TAB_FIELD(_v)           (((_v).aclr_tab))
02612 #define TYPE_FPVALUE_TAB_FIELD(_v)          (((_v).fpv_tab))
02613 #define TYPE_VALUE_TAB_FIELD(_v)            (((_v).v_tab))
02614 #define TYPE_DWORD_TAB_FIELD(_v)            (((_v).d_tab))
02615 #define TYPE_bool_TAB_FIELD(_v)             (((_v).b_tab))
02616 #define TYPE_INTPTR_TAB_FIELD(_v)           (((_v).intptr_tab))
02617 #define TYPE_INT64_TAB_FIELD(_v)            (((_v).i64_tab))
02618 #define TYPE_DOUBLE_TAB_FIELD(_v)           (((_v).dbl_tab))
02619 
02620 // the following variants all assume a pointer is used as the source of the 
02621 // param, but deliver it to the called interface function in the given mode, 
02622 //  _BP -> a pointer, eg, int* x
02623 //  _BR -> a reference, eg, int& x
02624 //  _BV -> a dereferenced value, only for pointer-based types, derived by *fpvalue.ptr
02625 
02626 // * (pointer) field access macros
02627 // pass by-pointer types for int & float types, implies * parameters, int* & float* are passed via .ptr fields, only for FnPub use
02628 #define TYPE_FLOAT_BP_FIELD(_v)             (((_v).fptr))       
02629 #define TYPE_INT_BP_FIELD(_v)               (((_v).iptr))       
02630 #define TYPE_BOOL_BP_FIELD(_v)              (((_v).iptr))       
02631 #define TYPE_ANGLE_BP_FIELD(_v)             (((_v).fptr))       
02632 #define TYPE_PCNT_FRAC_BP_FIELD(_v)         (((_v).fptr))   
02633 #define TYPE_WORLD_BP_FIELD(_v)             (((_v).fptr))
02634 #define TYPE_COLOR_CHANNEL_BP_FIELD(_v)     (((_v).fptr))
02635 #define TYPE_TIMEVALUE_BP_FIELD(_v)         (((_v).iptr))
02636 #define TYPE_RADIOBTN_INDEX_BP_FIELD(_v)    (((_v).iptr))
02637 #define TYPE_INDEX_BP_FIELD(_v)             (((_v).iptr))
02638 #define TYPE_ENUM_BP_FIELD(_v)              (((_v).iptr))
02639 #define TYPE_DWORD_BP_FIELD(_v)             (((_v).dptr))
02640 #define TYPE_bool_BP_FIELD(_v)              (((_v).bptr))
02641 #define TYPE_INTPTR_BP_FIELD(_v)            (((_v).intptrptr))      
02642 #define TYPE_INT64_BP_FIELD(_v)             (((_v).i64ptr))     
02643 #define TYPE_DOUBLE_BP_FIELD(_v)            (((_v).dblptr))     
02644 // there are no specific by-pointer Tab<> types, all Tab<> types are by-pointer by default
02645 
02646 // & (reference) field access macros
02647 // pass by-ref types, implies & parameters, int& & float& are passed via .ptr fields, only for FnPub use
02648 #define TYPE_FLOAT_BR_FIELD(_v)             (*((_v).fptr))      
02649 #define TYPE_INT_BR_FIELD(_v)               (*((_v).iptr))      
02650 #define TYPE_RGBA_BR_FIELD(_v)              (*((_v).p)) 
02651 #define TYPE_POINT3_BR_FIELD(_v)            (*((_v).p)) 
02652 #define TYPE_FRGBA_BR_FIELD(_v)             (*((_v).p4))    
02653 #define TYPE_POINT4_BR_FIELD(_v)            (*((_v).p4))    
02654 #define TYPE_BOOL_BR_FIELD(_v)              (*((_v).iptr))      
02655 #define TYPE_ANGLE_BR_FIELD(_v)             (*((_v).fptr))      
02656 #define TYPE_PCNT_FRAC_BR_FIELD(_v)         (*((_v).fptr))  
02657 #define TYPE_WORLD_BR_FIELD(_v)             (*((_v).fptr))
02658 #define TYPE_HSV_BR_FIELD(_v)               (*((_v).p))
02659 #define TYPE_COLOR_CHANNEL_BR_FIELD(_v)     (*((_v).f))
02660 #define TYPE_TIMEVALUE_BR_FIELD(_v)         (*((_v).iptr))
02661 #define TYPE_RADIOBTN_INDEX_BR_FIELD(_v)    (*((_v).iptr))
02662 #define TYPE_BITMAP_BR_FIELD(_v)            (*((_v).bm))
02663 #define TYPE_INDEX_BR_FIELD(_v)             (*((_v).iptr))
02664 #define TYPE_ENUM_BR_FIELD(_v)              (*((_v).iptr))
02665 #define TYPE_REFTARG_BR_FIELD(_v)           (*((_v).r))
02666 #define TYPE_MATRIX3_BR_FIELD(_v)           (*((_v).m))
02667 #define TYPE_ANGAXIS_BR_FIELD(_v)           (*((_v).aa))
02668 #define TYPE_QUAT_BR_FIELD(_v)              (*((_v).q))
02669 #define TYPE_BITARRAY_BR_FIELD(_v)          (*((_v).bits))
02670 #define TYPE_RAY_BR_FIELD(_v)               (*((_v).ray))
02671 #define TYPE_POINT2_BR_FIELD(_v)            (*((_v).p2))
02672 #define TYPE_MESH_BR_FIELD(_v)              (*((_v).msh))
02673 #define TYPE_INTERVAL_BR_FIELD(_v)          (*((_v).intvl))
02674 #define TYPE_POINT_BR_FIELD(_v)             (*((_v).pt))
02675 #define TYPE_TSTR_BR_FIELD(_v)              (*((_v).tstr))
02676 #define TYPE_COLOR_BR_FIELD(_v)             (*((_v).clr))
02677 #define TYPE_ACOLOR_BR_FIELD(_v)            (*((_v).aclr))
02678 #define TYPE_FPVALUE_BR_FIELD(_v)           (*((_v).fpv))
02679 #define TYPE_DWORD_BR_FIELD(_v)             (*((_v).d))
02680 #define TYPE_bool_BR_FIELD(_v)              (*((_v).b))
02681 #define TYPE_INTPTR_BR_FIELD(_v)            (*((_v).intptrptr))     
02682 #define TYPE_INT64_BR_FIELD(_v)             (*((_v).i64ptr))        
02683 #define TYPE_DOUBLE_BR_FIELD(_v)            (*((_v).dblptr))        
02684 
02685 // refs to Tab<>s
02686 
02687 #define TYPE_FLOAT_TAB_BR_FIELD(_v)         (*((_v).f_tab))
02688 #define TYPE_INT_TAB_BR_FIELD(_v)           (*((_v).i_tab))
02689 #define TYPE_RGBA_TAB_BR_FIELD(_v)          (*((_v).p_tab))
02690 #define TYPE_POINT3_TAB_BR_FIELD(_v)        (*((_v).p_tab))
02691 #define TYPE_FRGBA_TAB_BR_FIELD(_v)         (*((_v).p4_tab))
02692 #define TYPE_POINT4_TAB_BR_FIELD(_v)        (*((_v).p4_tab))
02693 #define TYPE_BOOL_TAB_BR_FIELD(_v)          (*((_v).i_tab))
02694 #define TYPE_ANGLE_TAB_BR_FIELD(_v)         (*((_v).f_tab))
02695 #define TYPE_PCNT_FRAC_TAB_BR_FIELD(_v)     (*((_v).f_tab))
02696 #define TYPE_WORLD_TAB_BR_FIELD(_v)         (*((_v).f_tab))
02697 #define TYPE_STRING_TAB_BR_FIELD(_v)        (*((_v).s_tab))
02698 #define TYPE_FILENAME_TAB_BR_FIELD(_v)      (*((_v).s_tab))
02699 #define TYPE_HSV_TAB_BR_FIELD(_v)           (*((_v).p_tab))
02700 #define TYPE_COLOR_CHANNEL_TAB_BR_FIELD(_v) (*((_v).f_tab))
02701 #define TYPE_TIMEVALUE_TAB_BR_FIELD(_v)     (*((_v).i_tab))
02702 #define TYPE_RADIOBTN_INDEX_TAB_BR_FIELD(_v) (*((_v).i_tab))
02703 #define TYPE_MTL_TAB_BR_FIELD(_v)           (*((_v).mtl_tab))
02704 #define TYPE_TEXMAP_TAB_BR_FIELD(_v)        (*((_v).tex_tab))
02705 #define TYPE_BITMAP_TAB_BR_FIELD(_v)        (*((_v).bm_tab))
02706 #define TYPE_INODE_TAB_BR_FIELD(_v)         (*((_v).n_tab))
02707 #define TYPE_REFTARG_TAB_BR_FIELD(_v)       (*((_v).r_tab))
02708 #define TYPE_INDEX_TAB_BR_FIELD(_v)         (*((_v).i_tab))
02709 #define TYPE_ENUM_TAB_BR_FIELD(_v)          (*((_v).i_tab))
02710 #define TYPE_MATRIX3_TAB_BR_FIELD(_v)       (*((_v).m3_tab))
02711 #define TYPE_ANGAXIS_TAB_BR_FIELD(_v)       (*((_v).aa_tab))
02712 #define TYPE_QUAT_TAB_BR_FIELD(_v)          (*((_v).q_tab))
02713 #define TYPE_BITARRAY_TAB_BR_FIELD(_v)      (*((_v).bits_tab))
02714 #define TYPE_CLASS_TAB_BR_FIELD(_v)         (*((_v).cd_tab))
02715 #define TYPE_RAY_TAB_BR_FIELD(_v)           (*((_v).ray_tab))
02716 #define TYPE_POINT2_TAB_BR_FIELD(_v)        (*((_v).p2_tab))
02717 #define TYPE_MESH_TAB_BR_FIELD(_v)          (*((_v).msh_tab))
02718 #define TYPE_OBJECT_TAB_BR_FIELD(_v)        (*((_v).obj_tab))
02719 #define TYPE_CONTROL_TAB_BR_FIELD(_v)       (*((_v).ctrl_tab))
02720 #define TYPE_INTERVAL_TAB_BR_FIELD(_v)      (*((_v).intvl_tab))
02721 #define TYPE_POINT_TAB_BR_FIELD(_v)         (*((_v).pt_tab))
02722 #define TYPE_HWND_TAB_BR_FIELD(_v)          (*((_v).hwnd_tab))
02723 #define TYPE_TSTR_TAB_BR_FIELD(_v)          (*((_v).tstr_tab))
02724 #define TYPE_IOBJECT_TAB_BR_FIELD(_v)       (*((_v).iobj_tab))
02725 #define TYPE_INTERFACE_TAB_BR_FIELD(_v)     (*((_v).fpi_tab))
02726 #define TYPE_NAME_TAB_BR_FIELD(_v)          (*((_v).s_tab))
02727 #define TYPE_COLOR_TAB_BR_FIELD(_v)         (*((_v).clr_tab))
02728 #define TYPE_ACOLOR_TAB_BR_FIELD(_v)        (*((_v).aclr_tab))
02729 #define TYPE_FPVALUE_TAB_BR_FIELD(_v)       (*((_v).fpv_tab))
02730 #define TYPE_VALUE_TAB_BR_FIELD(_v)         (*((_v).v_tab))
02731 #define TYPE_DWORD_TAB_BR_FIELD(_v)         (*((_v).d_tab))
02732 #define TYPE_bool_TAB_BR_FIELD(_v)          (*((_v).b_tab))
02733 #define TYPE_INTPTR_TAB_BR_FIELD(_v)        (*((_v).intptr_tab))
02734 #define TYPE_INT64_TAB_BR_FIELD(_v)         (*((_v).i64_tab))
02735 #define TYPE_DOUBLE_TAB_BR_FIELD(_v)        (*((_v).dbl_tab))
02736     
02737 // by value field access macros
02738 // pass by-value types, implies dereferencing the (meaningful) pointer-based values, only for FnPub use
02739 #define TYPE_RGBA_BV_FIELD(_v)              (*((_v).p)) 
02740 #define TYPE_POINT3_BV_FIELD(_v)            (*((_v).p)) 
02741 #define TYPE_HSV_BV_FIELD(_v)               (*((_v).p))
02742 #define TYPE_FRGBA_BV_FIELD(_v)             (*((_v).p4))    
02743 #define TYPE_POINT4_BV_FIELD(_v)            (*((_v).p4))    
02744 #define TYPE_BITMAP_BV_FIELD(_v)            (*((_v).bm))
02745 #define TYPE_MATRIX3_BV_FIELD(_v)           (*((_v).m))
02746 #define TYPE_ANGAXIS_BV_FIELD(_v)           (*((_v).aa))
02747 #define TYPE_QUAT_BV_FIELD(_v)              (*((_v).q))
02748 #define TYPE_BITARRAY_BV_FIELD(_v)          (*((_v).bits))
02749 #define TYPE_RAY_BV_FIELD(_v)               (*((_v).ray))
02750 #define TYPE_POINT2_BV_FIELD(_v)            (*((_v).p2))
02751 #define TYPE_MESH_BV_FIELD(_v)              (*((_v).msh))
02752 #define TYPE_INTERVAL_BV_FIELD(_v)          (*((_v).intvl))
02753 #define TYPE_POINT_BV_FIELD(_v)             (*((_v).pt))
02754 #define TYPE_TSTR_BV_FIELD(_v)              (*((_v).tstr))
02755 #define TYPE_COLOR_BV_FIELD(_v)             (*((_v).clr))
02756 #define TYPE_ACOLOR_BV_FIELD(_v)            (*((_v).aclr))
02757 #define TYPE_FPVALUE_BV_FIELD(_v)           (*((_v).fpv))
02758 #define TYPE_CLASS_BV_FIELD(_v)             (*((_v).cd))
02759 
02760 // pass by-val Tab<> types
02761 #define TYPE_FLOAT_TAB_BV_FIELD(_v)         (*((_v).f_tab))
02762 #define TYPE_INT_TAB_BV_FIELD(_v)           (*((_v).i_tab))
02763 #define TYPE_RGBA_TAB_BV_FIELD(_v)          (*((_v).p_tab))
02764 #define TYPE_POINT3_TAB_BV_FIELD(_v)        (*((_v).p_tab))
02765 #define TYPE_FRGBA_TAB_BV_FIELD(_v)         (*((_v).p4_tab))
02766 #define TYPE_POINT4_TAB_BV_FIELD(_v)        (*((_v).p4_tab))
02767 #define TYPE_BOOL_TAB_BV_FIELD(_v)          (*((_v).i_tab))
02768 #define TYPE_ANGLE_TAB_BV_FIELD(_v)         (*((_v).f_tab))
02769 #define TYPE_PCNT_FRAC_TAB_BV_FIELD(_v)     (*((_v).f_tab))
02770 #define TYPE_WORLD_TAB_BV_FIELD(_v)         (*((_v).f_tab))
02771 #define TYPE_STRING_TAB_BV_FIELD(_v)        (*((_v).s_tab))
02772 #define TYPE_FILENAME_TAB_BV_FIELD(_v)      (*((_v).s_tab))
02773 #define TYPE_HSV_TAB_BV_FIELD(_v)           (*((_v).p_tab))
02774 #define TYPE_COLOR_CHANNEL_TAB_BV_FIELD(_v) (*((_v).f_tab))
02775 #define TYPE_TIMEVALUE_TAB_BV_FIELD(_v)     (*((_v).i_tab))
02776 #define TYPE_RADIOBTN_INDEX_TAB_BV_FIELD(_v) (*((_v).i_tab))
02777 #define TYPE_MTL_TAB_BV_FIELD(_v)           (*((_v).mtl_tab))
02778 #define TYPE_TEXMAP_TAB_BV_FIELD(_v)        (*((_v).tex_tab))
02779 #define TYPE_BITMAP_TAB_BV_FIELD(_v)        (*((_v).bm_tab))
02780 #define TYPE_INODE_TAB_BV_FIELD(_v)         (*((_v).n_tab))
02781 #define TYPE_REFTARG_TAB_BV_FIELD(_v)       (*((_v).r_tab))
02782 #define TYPE_INDEX_TAB_BV_FIELD(_v)         (*((_v).i_tab))
02783 #define TYPE_ENUM_TAB_BV_FIELD(_v)          (*((_v).i_tab))
02784 #define TYPE_MATRIX3_TAB_BV_FIELD(_v)       (*((_v).m3_tab))
02785 #define TYPE_ANGAXIS_TAB_BV_FIELD(_v)       (*((_v).aa_tab))
02786 #define TYPE_QUAT_TAB_BV_FIELD(_v)          (*((_v).q_tab))
02787 #define TYPE_BITARRAY_TAB_BV_FIELD(_v)      (*((_v).bits_tab))
02788 #define TYPE_CLASS_TAB_BV_FIELD(_v)         (*((_v).cd_tab))
02789 #define TYPE_RAY_TAB_BV_FIELD(_v)           (*((_v).ray_tab))
02790 #define TYPE_POINT2_TAB_BV_FIELD(_v)        (*((_v).p2_tab))
02791 #define TYPE_MESH_TAB_BV_FIELD(_v)          (*((_v).msh_tab))
02792 #define TYPE_OBJECT_TAB_BV_FIELD(_v)        (*((_v).obj_tab))
02793 #define TYPE_CONTROL_TAB_BV_FIELD(_v)       (*((_v).ctrl_tab))
02794 #define TYPE_INTERVAL_TAB_BV_FIELD(_v)      (*((_v).intvl_tab))
02795 #define TYPE_POINT_TAB_BV_FIELD(_v)         (*((_v).pt_tab))
02796 #define TYPE_HWND_TAB_BV_FIELD(_v)          (*((_v).hwnd_tab))
02797 #define TYPE_TSTR_TAB_BV_FIELD(_v)          (*((_v).tstr_tab))
02798 #define TYPE_IOBJECT_TAB_BV_FIELD(_v)       (*((_v).iobj_tab))
02799 #define TYPE_INTERFACE_TAB_BV_FIELD(_v)     (*((_v).fpi_tab))
02800 #define TYPE_NAME_TAB_BV_FIELD(_v)          (*((_v).s_tab))
02801 #define TYPE_COLOR_TAB_BV_FIELD(_v)         (*((_v).clr_tab))
02802 #define TYPE_ACOLOR_TAB_BV_FIELD(_v)        (*((_v).aclr_tab))
02803 #define TYPE_FPVALUE_TAB_BV_FIELD(_v)       (*((_v).fpv_tab))
02804 #define TYPE_VALUE_TAB_BV_FIELD(_v)         (*((_v).v_tab))
02805 #define TYPE_DWORD_TAB_BV_FIELD(_v)         (*((_v).d_tab))
02806 #define TYPE_bool_TAB_BV_FIELD(_v)          (*((_v).b_tab))
02807 #define TYPE_INTPTR_TAB_BV_FIELD(_v)        (*((_v).intptr_tab))
02808 #define TYPE_INT64_TAB_BV_FIELD(_v)         (*((_v).i64_tab))
02809 #define TYPE_DOUBLE_TAB_BV_FIELD(_v)        (*((_v).dbl_tab))
02810 
02811 // --- type result operators ----------------------
02812 
02813 // used to generate an rvalue from the type's corresponding C++ type
02814 // for assignment to the type's carrying field in FPValue.
02815 // mostly empty, used by BY_REF & BY_VAL types to get pointers, since these
02816 // types are actualy carried by pointer fields
02817 
02818 // base types
02819 #define TYPE_FLOAT_RSLT             
02820 #define TYPE_INT_RSLT               
02821 #define TYPE_RGBA_RSLT              
02822 #define TYPE_POINT3_RSLT            
02823 #define TYPE_FRGBA_RSLT             
02824 #define TYPE_POINT4_RSLT            
02825 #define TYPE_BOOL_RSLT              
02826 #define TYPE_ANGLE_RSLT             
02827 #define TYPE_PCNT_FRAC_RSLT         
02828 #define TYPE_WORLD_RSLT             
02829 #define TYPE_STRING_RSLT            
02830 #define TYPE_FILENAME_RSLT          
02831 #define TYPE_HSV_RSLT               
02832 #define TYPE_COLOR_CHANNEL_RSLT     
02833 #define TYPE_TIMEVALUE_RSLT         
02834 #define TYPE_RADIOBTN_INDEX_RSLT    
02835 #define TYPE_MTL_RSLT               
02836 #define TYPE_TEXMAP_RSLT            
02837 #define TYPE_BITMAP_RSLT            
02838 #define TYPE_INODE_RSLT             
02839 #define TYPE_REFTARG_RSLT           
02840 #define TYPE_INDEX_RSLT             
02841 #define TYPE_ENUM_RSLT              
02842 #define TYPE_MATRIX3_RSLT           
02843 #define TYPE_VOID_RSLT              
02844 #define TYPE_INTERVAL_RSLT          
02845 #define TYPE_ANGAXIS_RSLT           
02846 #define TYPE_QUAT_RSLT              
02847 #define TYPE_RAY_RSLT               
02848 #define TYPE_POINT2_RSLT            
02849 #define TYPE_BITARRAY_RSLT          
02850 #define TYPE_CLASS_RSLT             
02851 #define TYPE_MESH_RSLT              
02852 #define TYPE_OBJECT_RSLT            
02853 #define TYPE_CONTROL_RSLT           
02854 #define TYPE_POINT_RSLT             
02855 #define TYPE_TSTR_RSLT              
02856 #define TYPE_IOBJECT_RSLT           
02857 #define TYPE_INTERFACE_RSLT         
02858 #define TYPE_HWND_RSLT              
02859 #define TYPE_NAME_RSLT              
02860 #define TYPE_COLOR_RSLT             
02861 #define TYPE_ACOLOR_RSLT                
02862 #define TYPE_FPVALUE_RSLT               
02863 #define TYPE_VALUE_RSLT             
02864 #define TYPE_DWORD_RSLT             
02865 #define TYPE_bool_RSLT              
02866 #define TYPE_INTPTR_RSLT                
02867 #define TYPE_INT64_RSLT             
02868 #define TYPE_DOUBLE_RSLT                
02869 
02870 // Tab<>s of the above...
02871 
02872 #define TYPE_FLOAT_TAB_RSLT             
02873 #define TYPE_INT_TAB_RSLT               
02874 #define TYPE_RGBA_TAB_RSLT              
02875 #define TYPE_POINT3_TAB_RSLT            
02876 #define TYPE_FRGBA_TAB_RSLT             
02877 #define TYPE_POINT4_TAB_RSLT            
02878 #define TYPE_BOOL_TAB_RSLT              
02879 #define TYPE_ANGLE_TAB_RSLT             
02880 #define TYPE_PCNT_FRAC_TAB_RSLT         
02881 #define TYPE_WORLD_TAB_RSLT             
02882 #define TYPE_STRING_TAB_RSLT            
02883 #define TYPE_FILENAME_TAB_RSLT          
02884 #define TYPE_HSV_TAB_RSLT               
02885 #define TYPE_COLOR_CHANNEL_TAB_RSLT     
02886 #define TYPE_TIMEVALUE_TAB_RSLT         
02887 #define TYPE_RADIOBTN_INDEX_TAB_RSLT    
02888 #define TYPE_MTL_TAB_RSLT               
02889 #define TYPE_TEXMAP_TAB_RSLT            
02890 #define TYPE_BITMAP_TAB_RSLT            
02891 #define TYPE_INODE_TAB_RSLT             
02892 #define TYPE_REFTARG_TAB_RSLT           
02893 #define TYPE_INDEX_TAB_RSLT             
02894 #define TYPE_ENUM_TAB_RSLT              
02895 #define TYPE_MATRIX3_TAB_RSLT           
02896 #define TYPE_INTERVAL_TAB_RSLT          
02897 #define TYPE_ANGAXIS_TAB_RSLT           
02898 #define TYPE_QUAT_TAB_RSLT              
02899 #define TYPE_RAY_TAB_RSLT               
02900 #define TYPE_POINT2_TAB_RSLT            
02901 #define TYPE_BITARRAY_TAB_RSLT          
02902 #define TYPE_CLASS_TAB_RSLT             
02903 #define TYPE_MESH_TAB_RSLT              
02904 #define TYPE_OBJECT_TAB_RSLT            
02905 #define TYPE_CONTROL_TAB_RSLT           
02906 #define TYPE_POINT_TAB_RSLT             
02907 #define TYPE_TSTR_TAB_RSLT              
02908 #define TYPE_IOBJECT_TAB_RSLT           
02909 #define TYPE_INTERFACE_TAB_RSLT         
02910 #define TYPE_HWND_TAB_RSLT              
02911 #define TYPE_NAME_TAB_RSLT              
02912 #define TYPE_COLOR_TAB_RSLT             
02913 #define TYPE_ACOLOR_TAB_RSLT                
02914 #define TYPE_FPVALUE_TAB_RSLT               
02915 #define TYPE_VALUE_TAB_RSLT             
02916 #define TYPE_DWORD_TAB_RSLT             
02917 #define TYPE_bool_TAB_RSLT              
02918 #define TYPE_INTPTR_TAB_RSLT                
02919 #define TYPE_INT64_TAB_RSLT             
02920 #define TYPE_DOUBLE_TAB_RSLT                
02921 
02922 // by-pointer
02923 //  foo*  = 
02924 #define TYPE_FLOAT_BP_RSLT              
02925 #define TYPE_INT_BP_RSLT                
02926 #define TYPE_BOOL_BP_RSLT               
02927 #define TYPE_ANGLE_BP_RSLT              
02928 #define TYPE_PCNT_FRAC_BP_RSLT          
02929 #define TYPE_WORLD_BP_RSLT              
02930 #define TYPE_COLOR_CHANNEL_BP_RSLT      
02931 #define TYPE_TIMEVALUE_BP_RSLT          
02932 #define TYPE_RADIOBTN_INDEX_BP_RSLT     
02933 #define TYPE_INDEX_BP_RSLT              
02934 #define TYPE_ENUM_BP_RSLT               
02935 #define TYPE_DWORD_BP_RSLT              
02936 #define TYPE_bool_BP_RSLT               
02937 #define TYPE_INTPTR_BP_RSLT             
02938 #define TYPE_INT64_BP_RSLT              
02939 #define TYPE_DOUBLE_BP_RSLT             
02940 
02941 // by-reference 
02942 #define TYPE_FLOAT_BR_RSLT              &   
02943 #define TYPE_INT_BR_RSLT                &
02944 #define TYPE_RGBA_BR_RSLT               &
02945 #define TYPE_POINT3_BR_RSLT             &
02946 #define TYPE_FRGBA_BR_RSLT              &
02947 #define TYPE_POINT4_BR_RSLT             &
02948 #define TYPE_BOOL_BR_RSLT               &
02949 #define TYPE_ANGLE_BR_RSLT              &
02950 #define TYPE_PCNT_FRAC_BR_RSLT          &
02951 #define TYPE_WORLD_BR_RSLT              &
02952 #define TYPE_HSV_BR_RSLT                &
02953 #define TYPE_COLOR_CHANNEL_BR_RSLT      &
02954 #define TYPE_TIMEVALUE_BR_RSLT          &
02955 #define TYPE_RADIOBTN_INDEX_BR_RSLT     &
02956 #define TYPE_BITMAP_BR_RSLT             &
02957 #define TYPE_INDEX_BR_RSLT              &
02958 #define TYPE_ENUM_BR_RSLT               &
02959 #define TYPE_REFTARG_BR_RSLT            &
02960 #define TYPE_MATRIX3_BR_RSLT            &
02961 #define TYPE_ANGAXIS_BR_RSLT            &
02962 #define TYPE_QUAT_BR_RSLT               &
02963 #define TYPE_BITARRAY_BR_RSLT           &
02964 #define TYPE_RAY_BR_RSLT                &
02965 #define TYPE_POINT2_BR_RSLT             &
02966 #define TYPE_MESH_BR_RSLT               &
02967 #define TYPE_INTERVAL_BR_RSLT           &
02968 #define TYPE_POINT_BR_RSLT              &
02969 #define TYPE_TSTR_BR_RSLT               &
02970 #define TYPE_COLOR_BR_RSLT              &
02971 #define TYPE_ACOLOR_BR_RSLT             &
02972 #define TYPE_FPVALUE_BR_RSLT            &
02973 #define TYPE_DWORD_BR_RSLT              &
02974 #define TYPE_bool_BR_RSLT               &
02975 #define TYPE_INTPTR_BR_RSLT             &
02976 #define TYPE_INT64_BR_RSLT              &
02977 #define TYPE_DOUBLE_BR_RSLT             &   
02978 
02979 // Tab<> by-reference &
02980 #define TYPE_FLOAT_TAB_BR_RSLT          &
02981 #define TYPE_INT_TAB_BR_RSLT            &
02982 #define TYPE_RGBA_TAB_BR_RSLT           &
02983 #define TYPE_POINT3_TAB_BR_RSLT         &
02984 #define TYPE_FRGBA_TAB_BR_RSLT          &
02985 #define TYPE_POINT4_TAB_BR_RSLT         &
02986 #define TYPE_BOOL_TAB_BR_RSLT           &
02987 #define TYPE_ANGLE_TAB_BR_RSLT          &
02988 #define TYPE_PCNT_FRAC_TAB_BR_RSLT      &
02989 #define TYPE_WORLD_TAB_BR_RSLT          &
02990 #define TYPE_STRING_TAB_BR_RSLT         &
02991 #define TYPE_FILENAME_TAB_BR_RSLT       &
02992 #define TYPE_HSV_TAB_BR_RSLT            &
02993 #define TYPE_COLOR_CHANNEL_TAB_BR_RSLT  &
02994 #define TYPE_TIMEVALUE_TAB_BR_RSLT      &
02995 #define TYPE_RADIOBTN_INDEX_TAB_BR_RSLT &
02996 #define TYPE_MTL_TAB_BR_RSLT            &
02997 #define TYPE_TEXMAP_TAB_BR_RSLT         &
02998 #define TYPE_BITMAP_TAB_BR_RSLT         &
02999 #define TYPE_INODE_TAB_BR_RSLT          &
03000 #define TYPE_REFTARG_TAB_BR_RSLT        &
03001 #define TYPE_INDEX_TAB_BR_RSLT          &
03002 #define TYPE_ENUM_TAB_BR_RSLT           &
03003 #define TYPE_MATRIX3_TAB_BR_RSLT        &
03004 #define TYPE_ANGAXIS_TAB_BR_RSLT        &
03005 #define TYPE_QUAT_TAB_BR_RSLT           &
03006 #define TYPE_BITARRAY_TAB_BR_RSLT       &
03007 #define TYPE_CLASS_TAB_BR_RSLT          &
03008 #define TYPE_RAY_TAB_BR_RSLT            &
03009 #define TYPE_POINT2_TAB_BR_RSLT         &
03010 #define TYPE_MESH_TAB_BR_RSLT           &
03011 #define TYPE_OBJECT_TAB_BR_RSLT         &
03012 #define TYPE_CONTROL_TAB_BR_RSLT        &
03013 #define TYPE_INTERVAL_TAB_BR_RSLT       &
03014 #define TYPE_POINT_TAB_BR_RSLT          &
03015 #define TYPE_HWND_TAB_BR_RSLT           &
03016 #define TYPE_TSTR_TAB_BR_RSLT           &
03017 #define TYPE_IOBJECT_TAB_BR_RSLT        &
03018 #define TYPE_INTERFACE_TAB_BR_RSLT      &
03019 #define TYPE_NAME_TAB_BR_RSLT           &
03020 #define TYPE_COLOR_TAB_BR_RSLT          &
03021 #define TYPE_ACOLOR_TAB_BR_RSLT         &
03022 #define TYPE_FPVALUE_TAB_BR_RSLT        &
03023 #define TYPE_VALUE_TAB_BR_RSLT          &
03024 #define TYPE_DWORD_TAB_BR_RSLT          &
03025 #define TYPE_bool_TAB_BR_RSLT           &
03026 #define TYPE_INTPTR_TAB_BR_RSLT         &
03027 #define TYPE_INT64_TAB_BR_RSLT          &
03028 #define TYPE_DOUBLE_TAB_BR_RSLT         &
03029 
03030 // by-value 
03031 #define TYPE_RGBA_BV_RSLT               &
03032 #define TYPE_POINT3_BV_RSLT             &
03033 #define TYPE_HSV_BV_RSLT                &
03034 #define TYPE_FRGBA_BV_RSLT              &
03035 #define TYPE_POINT4_BV_RSLT             &
03036 #define TYPE_BITMAP_BV_RSLT             &
03037 #define TYPE_MATRIX3_BV_RSLT            &
03038 #define TYPE_ANGAXIS_BV_RSLT            &
03039 #define TYPE_QUAT_BV_RSLT               &
03040 #define TYPE_BITARRAY_BV_RSLT           &
03041 #define TYPE_RAY_BV_RSLT                &
03042 #define TYPE_POINT2_BV_RSLT             &
03043 #define TYPE_MESH_BV_RSLT               &
03044 #define TYPE_INTERVAL_BV_RSLT           &
03045 #define TYPE_POINT_BV_RSLT              &
03046 #define TYPE_TSTR_BV_RSLT               &
03047 #define TYPE_COLOR_BV_RSLT              &
03048 #define TYPE_ACOLOR_BV_RSLT             &
03049 #define TYPE_FPVALUE_BV_RSLT            &
03050 #define TYPE_CLASS_BV_RSLT              &
03051 
03052 // by-val Tab<> 
03053 #define TYPE_FLOAT_TAB_BV_RSLT          &
03054 #define TYPE_INT_TAB_BV_RSLT            &
03055 #define TYPE_RGBA_TAB_BV_RSLT           &
03056 #define TYPE_POINT3_TAB_BV_RSLT         &
03057 #define TYPE_FRGBA_TAB_BV_RSLT          &
03058 #define TYPE_POINT4_TAB_BV_RSLT         &
03059 #define TYPE_BOOL_TAB_BV_RSLT           &
03060 #define TYPE_ANGLE_TAB_BV_RSLT          &
03061 #define TYPE_PCNT_FRAC_TAB_BV_RSLT      &
03062 #define TYPE_WORLD_TAB_BV_RSLT          &
03063 #define TYPE_STRING_TAB_BV_RSLT         &
03064 #define TYPE_FILENAME_TAB_BV_RSLT       &
03065 #define TYPE_HSV_TAB_BV_RSLT            &
03066 #define TYPE_COLOR_CHANNEL_TAB_BV_RSLT  &
03067 #define TYPE_TIMEVALUE_TAB_BV_RSLT      &
03068 #define TYPE_RADIOBTN_INDEX_TAB_BV_RSLT &
03069 #define TYPE_MTL_TAB_BV_RSLT            &
03070 #define TYPE_TEXMAP_TAB_BV_RSLT         &
03071 #define TYPE_BITMAP_TAB_BV_RSLT         &
03072 #define TYPE_INODE_TAB_BV_RSLT          &
03073 #define TYPE_REFTARG_TAB_BV_RSLT        &
03074 #define TYPE_INDEX_TAB_BV_RSLT          &
03075 #define TYPE_ENUM_TAB_BV_RSLT           &
03076 #define TYPE_MATRIX3_TAB_BV_RSLT        &
03077 #define TYPE_ANGAXIS_TAB_BV_RSLT        &
03078 #define TYPE_QUAT_TAB_BV_RSLT           &
03079 #define TYPE_BITARRAY_TAB_BV_RSLT       &
03080 #define TYPE_CLASS_TAB_BV_RSLT          &
03081 #define TYPE_RAY_TAB_BV_RSLT            &
03082 #define TYPE_POINT2_TAB_BV_RSLT         &
03083 #define TYPE_MESH_TAB_BV_RSLT           &
03084 #define TYPE_OBJECT_TAB_BV_RSLT         &
03085 #define TYPE_CONTROL_TAB_BV_RSLT        &
03086 #define TYPE_INTERVAL_TAB_BV_RSLT       &
03087 #define TYPE_POINT_TAB_BV_RSLT          &
03088 #define TYPE_HWND_TAB_BV_RSLT           &
03089 #define TYPE_TSTR_TAB_BV_RSLT           &
03090 #define TYPE_IOBJECT_TAB_BV_RSLT        &
03091 #define TYPE_INTERFACE_TAB_BV_RSLT      &
03092 #define TYPE_NAME_TAB_BV_RSLT           &
03093 #define TYPE_COLOR_TAB_BV_RSLT          &
03094 #define TYPE_ACOLOR_TAB_BV_RSLT         &
03095 #define TYPE_FPVALUE_TAB_BV_RSLT        &
03096 #define TYPE_VALUE_TAB_BV_RSLT          &
03097 #define TYPE_DWORD_TAB_BV_RSLT          &
03098 #define TYPE_bool_TAB_BV_RSLT           &
03099 #define TYPE_INTPTR_TAB_BV_RSLT         &
03100 #define TYPE_INT64_TAB_BV_RSLT          &
03101 #define TYPE_DOUBLE_TAB_BV_RSLT         &
03102 
03103 //  types for each of the fields
03104 
03105 #define TYPE_FLOAT_TYPE             float
03106 #define TYPE_INT_TYPE               int
03107 #define TYPE_RGBA_TYPE              Point3
03108 #define TYPE_POINT3_TYPE            Point3
03109 #define TYPE_FRGBA_TYPE             Point4
03110 #define TYPE_POINT4_TYPE            Point4
03111 #define TYPE_BOOL_TYPE              BOOL
03112 #define TYPE_ANGLE_TYPE             float
03113 #define TYPE_PCNT_FRAC_TYPE         float
03114 #define TYPE_WORLD_TYPE             float
03115 #define TYPE_STRING_TYPE            MCHAR*
03116 #define TYPE_FILENAME_TYPE          MCHAR*
03117 #define TYPE_HSV_TYPE               Point3
03118 #define TYPE_COLOR_CHANNEL_TYPE     float
03119 #define TYPE_TIMEVALUE_TYPE         int
03120 #define TYPE_RADIOBTN_INDEX_TYPE    int
03121 #define TYPE_MTL_TYPE               Mtl*
03122 #define TYPE_TEXMAP_TYPE            Texmap*
03123 #define TYPE_BITMAP_TYPE            PBBitmap*
03124 #define TYPE_INODE_TYPE             INode*
03125 #define TYPE_REFTARG_TYPE           ReferenceTarget*    
03126 #define TYPE_INDEX_TYPE             int
03127 #define TYPE_ENUM_TYPE              int
03128 #define TYPE_MATRIX3_TYPE           Matrix*
03129 #define TYPE_VOID_TYPE              void
03130 #define TYPE_INTERVAL_TYPE          Interval*
03131 #define TYPE_ANGAXIS_TYPE           AngAxis*
03132 #define TYPE_QUAT_TYPE              Quat*
03133 #define TYPE_RAY_TYPE               Ray*
03134 #define TYPE_POINT2_TYPE            Point2*
03135 #define TYPE_BITARRAY_TYPE          BitArray*
03136 #define TYPE_CLASS_TYPE             ClassID*
03137 #define TYPE_MESH_TYPE              Mesh*
03138 #define TYPE_OBJECT_TYPE            Object*
03139 #define TYPE_CONTROL_TYPE           Control*
03140 #define TYPE_POINT_TYPE             POINT*
03141 #define TYPE_TSTR_TYPE              MSTR*
03142 #define TYPE_IOBJECT_TYPE           IObject*
03143 #define TYPE_INTERFACE_TYPE         FPInterface*
03144 #define TYPE_HWND_TYPE              HWND
03145 #define TYPE_NAME_TYPE              MCHAR*
03146 #define TYPE_COLOR_TYPE             Color*
03147 #define TYPE_ACOLOR_TYPE            AColor*
03148 #define TYPE_FPVALUE_TYPE           FPValue*
03149 #define TYPE_VALUE_TYPE             Value*
03150 #define TYPE_DWORD_TYPE             DWORD
03151 #define TYPE_bool_TYPE              bool
03152 #define TYPE_INTPTR_TYPE            INT_PTR
03153 #define TYPE_INT64_TYPE             INT64
03154 #define TYPE_DOUBLE_TYPE            double
03155 
03156 // Tab<>s of the above...
03157 #define TYPE_FLOAT_TAB_TYPE             Tab<float>*
03158 #define TYPE_INT_TAB_TYPE               Tab<int>*
03159 #define TYPE_RGBA_TAB_TYPE              Tab<Point3>*
03160 #define TYPE_POINT3_TAB_TYPE            Tab<Point3>*
03161 #define TYPE_FRGBA_TAB_TYPE             Tab<Point4>*
03162 #define TYPE_POINT4_TAB_TYPE            Tab<Point4>*
03163 #define TYPE_BOOL_TAB_TYPE              Tab<BOOL>*
03164 #define TYPE_ANGLE_TAB_TYPE             Tab<float>*
03165 #define TYPE_PCNT_FRAC_TAB_TYPE         Tab<float>*
03166 #define TYPE_WORLD_TAB_TYPE             Tab<float>*
03167 #define TYPE_STRING_TAB_TYPE            Tab<MCHAR*>*
03168 #define TYPE_FILENAME_TAB_TYPE          Tab<MCHAR*>*
03169 #define TYPE_HSV_TAB_TYPE               Tab<Point3>*
03170 #define TYPE_COLOR_CHANNEL_TAB_TYPE     Tab<float>*
03171 #define TYPE_TIMEVALUE_TAB_TYPE         Tab<int>*
03172 #define TYPE_RADIOBTN_INDEX_TAB_TYPE    Tab<int>*
03173 #define TYPE_MTL_TAB_TYPE               Tab<Mtl*>*
03174 #define TYPE_TEXMAP_TAB_TYPE            Tab<Texmap*>*
03175 #define TYPE_BITMAP_TAB_TYPE            Tab<PBBitmap*>*
03176 #define TYPE_INODE_TAB_TYPE             Tab<INode*>*
03177 #define TYPE_REFTARG_TAB_TYPE           Tab<ReferenceTarget*>*
03178 #define TYPE_INDEX_TAB_TYPE             Tab<int>*
03179 #define TYPE_ENUM_TAB_TYPE              Tab<int>*
03180 #define TYPE_MATRIX3_TAB_TYPE           Tab<Matrix*>*
03181 #define TYPE_VOID_TAB_TYPE              Tab<void>*
03182 #define TYPE_INTERVAL_TAB_TYPE          Tab<Interval*>*
03183 #define TYPE_ANGAXIS_TAB_TYPE           Tab<AngAxis*>*
03184 #define TYPE_QUAT_TAB_TYPE              Tab<Quat*>*
03185 #define TYPE_RAY_TAB_TYPE               Tab<Ray*>*
03186 #define TYPE_POINT2_TAB_TYPE            Tab<Point2*>*
03187 #define TYPE_BITARRAY_TAB_TYPE          Tab<BitArray*>*
03188 #define TYPE_CLASS_TAB_TYPE             Tab<ClassID*>*
03189 #define TYPE_MESH_TAB_TYPE              Tab<Mesh*>*
03190 #define TYPE_OBJECT_TAB_TYPE            Tab<Object*>*
03191 #define TYPE_CONTROL_TAB_TYPE           Tab<Control*>*
03192 #define TYPE_POINT_TAB_TYPE             Tab<POINT*>*
03193 #define TYPE_TSTR_TAB_TYPE              Tab<MSTR*>*
03194 #define TYPE_IOBJECT_TAB_TYPE           Tab<IObject*>*
03195 #define TYPE_INTERFACE_TAB_TYPE         Tab<FPInterface*>*
03196 #define TYPE_HWND_TAB_TYPE              Tab<HWND>*
03197 #define TYPE_NAME_TAB_TYPE              Tab<MCHAR*>*
03198 #define TYPE_COLOR_TAB_TYPE             Tab<Color*>*
03199 #define TYPE_ACOLOR_TAB_TYPE            Tab<AColor*>*
03200 #define TYPE_FPVALUE_TAB_TYPE           Tab<FPValue*>*
03201 #define TYPE_VALUE_TAB_TYPE             Tab<Value*>*
03202 #define TYPE_DWORD_TAB_TYPE             Tab<DWORD>*
03203 #define TYPE_bool_TAB_TYPE              Tab<bool>*
03204 #define TYPE_INTPTR_TAB_TYPE            Tab<INT_PTR>*
03205 #define TYPE_INT64_TAB_TYPE             Tab<INT64>*
03206 #define TYPE_DOUBLE_TAB_TYPE            Tab<double>*
03207 
03208 // by-pointer
03209 //  foo*  = 
03210 #define TYPE_FLOAT_BP_TYPE              float*
03211 #define TYPE_INT_BP_TYPE                int*
03212 #define TYPE_BOOL_BP_TYPE               int*
03213 #define TYPE_ANGLE_BP_TYPE              float*
03214 #define TYPE_PCNT_FRAC_BP_TYPE          float*
03215 #define TYPE_WORLD_BP_TYPE              float*
03216 #define TYPE_COLOR_CHANNEL_BP_TYPE      float*
03217 #define TYPE_TIMEVALUE_BP_TYPE          int*
03218 #define TYPE_RADIOBTN_INDEX_BP_TYPE     int*
03219 #define TYPE_INDEX_BP_TYPE              int*
03220 #define TYPE_ENUM_BP_TYPE               int*
03221 #define TYPE_DWORD_BP_TYPE              DWORD*
03222 #define TYPE_bool_BP_TYPE               bool*
03223 #define TYPE_INTPTR_BP_TYPE             INT_PTR*
03224 #define TYPE_INT64_BP_TYPE              INT64*
03225 #define TYPE_DOUBLE_BP_TYPE             double*
03226 
03227 // by-reference 
03228 #define TYPE_FLOAT_BR_TYPE              float&
03229 #define TYPE_INT_BR_TYPE                int&
03230 #define TYPE_RGBA_BR_TYPE               Point3&
03231 #define TYPE_POINT3_BR_TYPE             Point3&
03232 #define TYPE_FRGBA_BR_TYPE              Point4&
03233 #define TYPE_POINT4_BR_TYPE             Point4&
03234 #define TYPE_BOOL_BR_TYPE               int&
03235 #define TYPE_ANGLE_BR_TYPE              float&
03236 #define TYPE_PCNT_FRAC_BR_TYPE          float&
03237 #define TYPE_WORLD_BR_TYPE              float&
03238 #define TYPE_HSV_BR_TYPE                Point3&
03239 #define TYPE_COLOR_CHANNEL_BR_TYPE      float&
03240 #define TYPE_TIMEVALUE_BR_TYPE          int&
03241 #define TYPE_RADIOBTN_INDEX_BR_TYPE     int&
03242 #define TYPE_BITMAP_BR_TYPE             PBBitmap&
03243 #define TYPE_INDEX_BR_TYPE              int&
03244 #define TYPE_ENUM_BR_TYPE               int&
03245 #define TYPE_REFTARG_BR_TYPE            ReferenceTarget&
03246 #define TYPE_MATRIX3_BR_TYPE            Matrix3&
03247 #define TYPE_ANGAXIS_BR_TYPE            AngAxis&
03248 #define TYPE_QUAT_BR_TYPE               Quat&
03249 #define TYPE_BITARRAY_BR_TYPE           BitArray&
03250 #define TYPE_RAY_BR_TYPE                Ray&
03251 #define TYPE_POINT2_BR_TYPE             Point2&
03252 #define TYPE_MESH_BR_TYPE               Mesh&
03253 #define TYPE_INTERVAL_BR_TYPE           Interval&
03254 #define TYPE_POINT_BR_TYPE              POINT&
03255 #define TYPE_TSTR_BR_TYPE               MSTR&
03256 #define TYPE_COLOR_BR_TYPE              Color&
03257 #define TYPE_ACOLOR_BR_TYPE             AColor&
03258 #define TYPE_FPVALUE_BR_TYPE            FPValue&
03259 #define TYPE_DWORD_BR_TYPE              DWORD&
03260 #define TYPE_bool_BR_TYPE               bool&
03261 #define TYPE_INTPTR_BR_TYPE             INT_PTR&
03262 #define TYPE_INT64_BR_TYPE              INT64&
03263 #define TYPE_DOUBLE_BR_TYPE             double&
03264 
03265 // Tab<> by-reference 
03266 #define TYPE_FLOAT_TAB_BR_TYPE              Tab<float>&
03267 #define TYPE_INT_TAB_BR_TYPE                Tab<int>&
03268 #define TYPE_RGBA_TAB_BR_TYPE               Tab<Point3>&
03269 #define TYPE_POINT3_TAB_BR_TYPE             Tab<Point3>&
03270 #define TYPE_FRGBA_TAB_BR_TYPE              Tab<Point4>&
03271 #define TYPE_POINT4_TAB_BR_TYPE             Tab<Point4>&
03272 #define TYPE_BOOL_TAB_BR_TYPE               Tab<BOOL>&
03273 #define TYPE_ANGLE_TAB_BR_TYPE              Tab<float>&
03274 #define TYPE_PCNT_FRAC_TAB_BR_TYPE          Tab<float>&
03275 #define TYPE_WORLD_TAB_BR_TYPE              Tab<float>&
03276 #define TYPE_STRING_TAB_BR_TYPE             Tab<MCHAR*>&
03277 #define TYPE_FILENAME_TAB_BR_TYPE           Tab<MCHAR*>&
03278 #define TYPE_HSV_TAB_BR_TYPE                Tab<Point3>&
03279 #define TYPE_COLOR_CHANNEL_TAB_BR_TYPE      Tab<float>&
03280 #define TYPE_TIMEVALUE_TAB_BR_TYPE          Tab<int>&
03281 #define TYPE_RADIOBTN_INDEX_TAB_BR_TYPE     Tab<int>&
03282 #define TYPE_MTL_TAB_BR_TYPE                Tab<Mtl*>&
03283 #define TYPE_TEXMAP_TAB_BR_TYPE             Tab<Texmap*>&
03284 #define TYPE_BITMAP_TAB_BR_TYPE             Tab<PBBitmap*>&
03285 #define TYPE_INODE_TAB_BR_TYPE              Tab<INode*>&
03286 #define TYPE_REFTARG_TAB_BR_TYPE            Tab<ReferenceTarget*>&
03287 #define TYPE_INDEX_TAB_BR_TYPE              Tab<int>&
03288 #define TYPE_ENUM_TAB_BR_TYPE               Tab<int>&
03289 #define TYPE_MATRIX3_TAB_BR_TYPE            Tab<Matrix*>&
03290 #define TYPE_VOID_TAB_BR_TYPE               Tab<void>&
03291 #define TYPE_INTERVAL_TAB_BR_TYPE           Tab<Interval*>&
03292 #define TYPE_ANGAXIS_TAB_BR_TYPE            Tab<AngAxis*>&
03293 #define TYPE_QUAT_TAB_BR_TYPE               Tab<Quat*>&
03294 #define TYPE_RAY_TAB_BR_TYPE                Tab<Ray*>&
03295 #define TYPE_POINT2_TAB_BR_TYPE             Tab<Point2*>&
03296 #define TYPE_BITARRAY_TAB_BR_TYPE           Tab<BitArray*>&
03297 #define TYPE_CLASS_TAB_BR_TYPE              Tab<ClassID*>&
03298 #define TYPE_MESH_TAB_BR_TYPE               Tab<Mesh*>&
03299 #define TYPE_OBJECT_TAB_BR_TYPE             Tab<Object*>&
03300 #define TYPE_CONTROL_TAB_BR_TYPE            Tab<Control*>&
03301 #define TYPE_POINT_TAB_BR_TYPE              Tab<POINT*>&
03302 #define TYPE_TSTR_TAB_BR_TYPE               Tab<MSTR*>&
03303 #define TYPE_IOBJECT_TAB_BR_TYPE            Tab<IObject*>&
03304 #define TYPE_INTERFACE_TAB_BR_TYPE          Tab<FPInterface*>&
03305 #define TYPE_HWND_TAB_BR_TYPE               Tab<HWND>&
03306 #define TYPE_NAME_TAB_BR_TYPE               Tab<MCHAR*>&
03307 #define TYPE_COLOR_TAB_BR_TYPE              Tab<Color*>&
03308 #define TYPE_ACOLOR_TAB_BR_TYPE             Tab<AColor*>&
03309 #define TYPE_FPVALUE_TAB_BR_TYPE            Tab<FPValue*>&
03310 #define TYPE_VALUE_TAB_BR_TYPE              Tab<Value*>&
03311 #define TYPE_DWORD_TAB_BR_TYPE              Tab<DWORD>&
03312 #define TYPE_bool_TAB_BR_TYPE               Tab<bool>&
03313 #define TYPE_INTPTR_TAB_BR_TYPE             Tab<INT_PTR>&
03314 #define TYPE_INT64_TAB_BR_TYPE              Tab<INT64>&
03315 #define TYPE_DOUBLE_TAB_BR_TYPE             Tab<double>&
03316 
03317 // by-value 
03318 #define TYPE_RGBA_BV_TYPE               Point3      
03319 #define TYPE_POINT3_BV_TYPE             Point3
03320 #define TYPE_HSV_BV_TYPE                Point3
03321 #define TYPE_FRGBA_BV_TYPE              Point4      
03322 #define TYPE_POINT4_BV_TYPE             Point4
03323 #define TYPE_BITMAP_BV_TYPE             PBBitmap
03324 #define TYPE_MATRIX3_BV_TYPE            Matrix3
03325 #define TYPE_ANGAXIS_BV_TYPE            AngAxis
03326 #define TYPE_QUAT_BV_TYPE               Quat
03327 #define TYPE_BITARRAY_BV_TYPE           BitArray
03328 #define TYPE_RAY_BV_TYPE                Ray
03329 #define TYPE_POINT2_BV_TYPE             Point2
03330 #define TYPE_MESH_BV_TYPE               Mesh
03331 #define TYPE_INTERVAL_BV_TYPE           Interval
03332 #define TYPE_POINT_BV_TYPE              POINT
03333 #define TYPE_TSTR_BV_TYPE               MSTR
03334 #define TYPE_COLOR_BV_TYPE              Color
03335 #define TYPE_ACOLOR_BV_TYPE             AColor
03336 #define TYPE_FPVALUE_BV_TYPE            FPValue
03337 #define TYPE_CLASS_BV_TYPE              ClassID
03338 
03339 // by-val Tab<> 
03340 #define TYPE_FLOAT_TAB_BV_TYPE              Tab<float>
03341 #define TYPE_INT_TAB_BV_TYPE                Tab<int>
03342 #define TYPE_RGBA_TAB_BV_TYPE               Tab<Point3>
03343 #define TYPE_POINT3_TAB_BV_TYPE             Tab<Point3>
03344 #define TYPE_FRGBA_TAB_BV_TYPE              Tab<Point4>
03345 #define TYPE_POINT4_TAB_BV_TYPE             Tab<Point4>
03346 #define TYPE_BOOL_TAB_BV_TYPE               Tab<BOOL>
03347 #define TYPE_ANGLE_TAB_BV_TYPE              Tab<float>
03348 #define TYPE_PCNT_FRAC_TAB_BV_TYPE          Tab<float>
03349 #define TYPE_WORLD_TAB_BV_TYPE              Tab<float>
03350 #define TYPE_STRING_TAB_BV_TYPE             Tab<MCHAR*>
03351 #define TYPE_FILENAME_TAB_BV_TYPE           Tab<MCHAR*>
03352 #define TYPE_HSV_TAB_BV_TYPE                Tab<Point3>
03353 #define TYPE_COLOR_CHANNEL_TAB_BV_TYPE      Tab<float>
03354 #define TYPE_TIMEVALUE_TAB_BV_TYPE          Tab<int>
03355 #define TYPE_RADIOBTN_INDEX_TAB_BV_TYPE     Tab<int>
03356 #define TYPE_MTL_TAB_BV_TYPE                Tab<Mtl*>
03357 #define TYPE_TEXMAP_TAB_BV_TYPE             Tab<Texmap*>
03358 #define TYPE_BITMAP_TAB_BV_TYPE             Tab<PBBitmap*>
03359 #define TYPE_INODE_TAB_BV_TYPE              Tab<INode*>
03360 #define TYPE_REFTARG_TAB_BV_TYPE            Tab<ReferenceTarget*>
03361 #define TYPE_INDEX_TAB_BV_TYPE              Tab<int>
03362 #define TYPE_ENUM_TAB_BV_TYPE               Tab<int>
03363 #define TYPE_MATRIX3_TAB_BV_TYPE            Tab<Matrix*>
03364 #define TYPE_VOID_TAB_BV_TYPE               Tab<void>
03365 #define TYPE_INTERVAL_TAB_BV_TYPE           Tab<Interval*>
03366 #define TYPE_ANGAXIS_TAB_BV_TYPE            Tab<AngAxis*>
03367 #define TYPE_QUAT_TAB_BV_TYPE               Tab<Quat*>
03368 #define TYPE_RAY_TAB_BV_TYPE                Tab<Ray*>
03369 #define TYPE_POINT2_TAB_BV_TYPE             Tab<Point2*>
03370 #define TYPE_BITARRAY_TAB_BV_TYPE           Tab<BitArray*>
03371 #define TYPE_CLASS_TAB_BV_TYPE              Tab<ClassID*>
03372 #define TYPE_MESH_TAB_BV_TYPE               Tab<Mesh*>
03373 #define TYPE_OBJECT_TAB_BV_TYPE             Tab<Object*>
03374 #define TYPE_CONTROL_TAB_BV_TYPE            Tab<Control*>
03375 #define TYPE_POINT_TAB_BV_TYPE              Tab<POINT*>
03376 #define TYPE_TSTR_TAB_BV_TYPE               Tab<MSTR*>
03377 #define TYPE_IOBJECT_TAB_BV_TYPE            Tab<IObject*>
03378 #define TYPE_INTERFACE_TAB_BV_TYPE          Tab<FPInterface*>
03379 #define TYPE_HWND_TAB_BV_TYPE               Tab<HWND>
03380 #define TYPE_NAME_TAB_BV_TYPE               Tab<MCHAR*>
03381 #define TYPE_COLOR_TAB_BV_TYPE              Tab<Color*>
03382 #define TYPE_ACOLOR_TAB_BV_TYPE             Tab<AColor*>
03383 #define TYPE_FPVALUE_TAB_BV_TYPE            Tab<FPValue*>
03384 #define TYPE_VALUE_TAB_BV_TYPE              Tab<Value*>
03385 #define TYPE_DWORD_TAB_BV_TYPE              Tab<DWORD>
03386 #define TYPE_bool_TAB_BV_TYPE               Tab<bool>
03387 #define TYPE_INTPTR_TAB_BV_TYPE             Tab<INT_PTR>
03388 #define TYPE_INT64_TAB_BV_TYPE              Tab<INT64>
03389 #define TYPE_DOUBLE_TAB_BV_TYPE             Tab<double>
03390 
03391 
03392 
03393 
03394