text: /*		LclClass.h - macros for defining local classes and generics in a MAXScript extension .dlx
   *
   *	
   *		Copyright (c) Autodesk, Inc.  1988.  John Wainwright.
   *
   */
  
  #ifndef _H_LOCALCLASS
  #define _H_LOCALCLASS
  
  #include "ClassCfg.h"
  
  #define local_visible_class(_cls)										\
  	class _cls##Class : public ValueMetaClass							\
  	{																	\
  	public:																\
  				_cls##Class(MCHAR* name) : ValueMetaClass (name) { }	\
  		void	collect() { delete this; }								\
  	};																	\
  	extern _cls##Class _cls##_class;
  
  #define local_applyable_class(_cls)										\
  	class _cls##Class : public ValueMetaClass							\
  	{																	\
  	public:																\
  				_cls##Class(MCHAR* name) : ValueMetaClass (name) { }	\
  		void	collect() { delete this; }								\
  		Value* apply(Value** arglist, int count, CallContext* cc=NULL); \
  	};																	\
  	extern _cls##Class _cls##_class;
  
  #define local_visible_class_instance(_cls, _name)						\
  	_cls##Class _cls##_class (_M(_name));
  
  class MS_LOCAL_ROOT_CLASS;
  typedef Value* (MS_LOCAL_ROOT_CLASS::*local_value_vf)(Value**, int);
  #define cat0(_a) _a
  #define cat1(_a) cat0(_a)
  #define cat2(_a, _b) cat0(_a)##cat0(_b)
  #define MS_LOCAL_ROOT_CLASS_TAG &cat2(MS_LOCAL_ROOT_CLASS, _class)
  #define MS_LOCAL_GENERIC_CLASS_TAG &cat2(MS_LOCAL_GENERIC_CLASS, _class)
  #define MS_LOCAL_GENERIC_CLASS_CLASS cat2(MS_LOCAL_GENERIC_CLASS, Class)
  #define MS_LOCAL_GENERIC_CLASS_class cat2(MS_LOCAL_GENERIC_CLASS, _class)
  #define str0(_c) #_c
  #define str1(_c) str0(_c)
  
  #define declare_local_generic_class										\
  	class MS_LOCAL_GENERIC_CLASS_CLASS : public ValueMetaClass			\
  	{																	\
  	public:																\
  				MS_LOCAL_GENERIC_CLASS_CLASS(MCHAR* name) : ValueMetaClass (name) { } \
  		void	collect() { delete this; }								\
  	};																	\
  	extern MS_LOCAL_GENERIC_CLASS_CLASS MS_LOCAL_GENERIC_CLASS_class;	\
  	class MS_LOCAL_GENERIC_CLASS : public Generic						\
  	{																	\
  	public:																\
  				local_value_vf	fn_ptr;									\
  				MS_LOCAL_GENERIC_CLASS() { }							\
  				MS_LOCAL_GENERIC_CLASS(MCHAR* name, local_value_vf fn);	\
  				classof_methods (MS_LOCAL_GENERIC_CLASS, Generic);		\
  		void	collect() { delete this; }								\
  		Value* apply(Value** arglist, int count, CallContext* cc=NULL); \
  	};
  
  #endif
  