📄 mocadef.h
字号:
/*------------------------------------------------------------------------------*
* File Name: omocadef.h *
* Purpose: Contains all the macro and the base defination for new MOCA *
* Author: TD *
* Date: 3/16/2000 *
* Copyright Microcal Software Inc. 2000 *
* *
* Modification log *
* (Modification in this header are explained in the corresponding *
* Source files to avoid readability problems for the users) *
* TD 3/22/2000 ADD_SUPPORT_FOR_SUBOBJ_ARRAYS *
* TD 6/9/2000 LABTALK_VARNAME_CHECK *
* TD 7/19/2000 DEF_ONUNLOAD_FOR_MOCA_MAINOBJECT_FOR_SAFE_EXIT *
* TD 7/19/2000 BORROWING_TABLES_FROM_SUBOJECT_SELECTED_DYNAMICALLY *
*------------------------------------------------------------------------------*/
#ifndef _MOCADEF_H
#define _MOCADEF_H
//===============================================================================
#include "mocadll.h"
#include "AFXTEMPL.H"
#include "MOCADeclare.h"
#ifdef _DEBUG
#define MOCA_DEBUG_MSG(_lpcszMsg) //MessageBox(NULL, (_lpcszMsg), "MOCA Message", MB_OK);
#else // !_DEBUG
#define MOCA_DEBUG_MSG(_lpcszMsg)
#endif // !_DEBUG
#define MOCA_ENTRY_POINT(_myMainObjClassName)\
static CMOCAObjBase *l_pMainObj = NULL;\
\
void __MOCA_DELETE_TABLES()\
{\
if(!l_pMainObj) \
return;\
else \
{\
l_pMainObj->OnUnloadDLL();\
l_pMainObj->ReleaseAllTables();\
delete l_pMainObj;\
l_pMainObj=NULL; \
return;\
}\
}\
\
extern "C" DWORD WINAPI MocaEntry( HWND hWnd,\
LPSTR lpStr1,\
LPSTR lpStr2,\
LPMOREAL lpValue,\
LPCALLBK lpProc, MOMSG msg) \
{\
if (!l_pMainObj) {l_pMainObj = new _myMainObjClassName; if (!l_pMainObj) return EGOR_ERR;\
else {l_pMainObj->InitAllTables();l_pMainObj->InitAllProps();} } \
if(msg == EGO_UNINIT ){MOCA_CLEANUP return EGOR_YES;}\
return l_pMainObj->ScriptEntry(hWnd,lpStr1,lpStr2,lpValue,lpProc,msg); \
}
//--------------------------------------------------------------------------------
//Useful Symbolic Constants
#define MAX_TOKEN_SIZE 3072
/////////////////////////////////////////////////////////////////////////////
//
// MoTable : struct for value related table
//
/////////////////////////////////////////////////////////////////////////////
typedef UINT MOCASIG;
enum
{
// real (and int) properties:
MOCASig_bpr = 1, // BOOL (double&) for getting and BOOL (double) for setting
// string properties:
MOCASig_bpsz, // BOOL (LPSTR) and BOOL (LPCSTR)
// individual values of real (and int) vectors:
MOCASig_brvec, // BOOL (double&, int) for getting (int index is zero-offset),
// BOOL (double, int) for setting (int index is zero-offset),
// BOOL (int&) for getting the vector size
// BOOL (int) for setting the vector size
// individual values of string vectors:
MOCASig_bszvec, // BOOL (LPSTR, int) for getting and setting (int index is zero-offset),
// BOOL (int&) for getting the vector size
// BOOL (int) for setting the vector size
// BOOL (int&) for getting the vector size
// BOOL (int) for setting the vector size
// INTEGER_VALUES_SETTING_AND_GETTING
MOCASig_bpn, // BOOL (int&) for getting and BOOL (int) for setting
// AUTO_INC_AND_DEC_INDEX_PROPERTIES
MOCASig_bpIndex, // BOOL (int&) for getting and BOOL (int) for setting
};
typedef void ( CObject::*MOCA_PPROPFN)(void);
union MOCAPropertyFunctions
{
MOCA_PPROPFN pfn; // generic
// specific type safe variants:
BOOL ( CObject::*pfn_pr)(double & lpValue); // MOCASig_bpr for getting
BOOL ( CObject::*pfn_r)(double lpValue); // MOCASig_bpr for setting
BOOL ( CObject::*pfn_pcsz)(LPCSTR lpValue); // MOCASig_bpsz for setting
BOOL ( CObject::*pfn_psz)(LPSTR lpValue); // MOCASig_bpsz for getting
BOOL ( CObject::*pfn_prvec)(double & lpValue, int); // MOCASig_bvec for getting individual value
BOOL ( CObject::*pfn_rvec)(double dValue, int); // MOCASig_bvec for setting individual value
BOOL ( CObject::*pfn_pcszvec)(LPCSTR lpValue, int); // MOCASig_bszvec for setting individual value
BOOL ( CObject::*pfn_pszvec)(LPSTR lpValue, int); // MOCASig_bszvec for getting individual value
BOOL ( CObject::*pfn_pivecsize)(int &); // MOCASig_bvec and MOCASig_bszvec for getting vector size
BOOL ( CObject::*pfn_ivecsize)(int); // MOCASig_bvec and MOCASig_bszvec for setting vector size
BOOL ( CObject::*pfn_pn)(int &); // MOCASig_bpn for getting
BOOL ( CObject::*pfn_n)(int); // MOCASig_bpn for setting
};
//--------------------------------------------------------------------------
// MOCATABLE
//
//--------------------------------------------------------------------------
class CMOCAObjBase;
typedef struct MOCATable
{
CMOCAObjBase *pObj;
char *pstr;
MOCASIG theSig; // describes the property
MOCA_PPROPFN pfnGet;
MOCA_PPROPFN pfnSet;
MOCA_PPROPFN pfnGetEx; // used to get
MOCA_PPROPFN pfnSetEx; // and set vector sizes
double dDefaultValue;
} MOCATABLE, *LPMOCATABLE;
/// KERNEL_ID_MAPS
typedef const MOCATABLE *LPCMOCATABLE;
//================================================================================
typedef MOCATABLE MOCATABLEENTRY;
typedef const MOCATABLEENTRY *LPCMOCATABLEENTRY;
typedef MOCATABLEENTRY *LPMOCATABLEENTRY;
//THE MACROS
#define MOCA_DECLARE_DYNAMIC(_theClass) DECLARE_DYNAMIC(_theClass)
#define MOCA_IMPLEMENT_DYNAMIC(_theClass, _theBaseClass) IMPLEMENT_DYNAMIC(_theClass, _theBaseClass)
//////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////MACROS FOR PROPERTIES----
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
#define MOCA_PROP_LAST_ENTRY { NULL, NULL, 0, NULL, NULL, NULL, NULL }
/////////////////////////////////////////
#define MOCA_DECLARE_PROP_MAP(_theClass) \
private: LPMOCATABLEENTRY m_lpPropertyMap;\
private: LPMOCATABLEENTRY m_lpSubObjectMap; \
private: LPMOCATABLEENTRY m_lpMethodFnMap; \
LPCMOCATABLEENTRY GetPropertyMap();\
LPCMOCATABLEENTRY GetSubObjectMap();\
LPCMOCATABLEENTRY GetMethodsMap();\
protected: BOOL InitPropertyTable();\
protected: BOOL InitPropDef();\
protected: BOOL ReleasePropTable();\
protected: BOOL ListTable(LPCSTR lpcszPrefix);\
protected: LPCMOCATABLEENTRY FindPropertyEntry(LPSTR lpcszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag);\
protected: LPCMOCATABLEENTRY FindMethodsEntry(LPSTR lpcszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag);
///NOTE!!!!!!!!!!!!!! NOTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NOTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//The current method will only work with subobjects PROVIDED one INITIALIZES the proprty table first
//This is absolutely necessry. The REASON is that Initpropertytable initiates the subobject table to NULL,
//WITHOUT performing any checks. Also if all one wants is just subobjects (or METHODS)one needs to
//declare an empty property table.
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define MOCA_BEGIN_PROP_MAP(_theClass, _theBaseClass) \
LPCMOCATABLEENTRY _theClass::GetPropertyMap() { return m_lpPropertyMap; } \
LPCMOCATABLEENTRY _theClass::GetSubObjectMap() { return m_lpSubObjectMap; } \
LPCMOCATABLEENTRY _theClass::GetMethodsMap() { return m_lpMethodFnMap; } \
LPCMOCATABLEENTRY _theClass::FindPropertyEntry(LPSTR lpszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag) { LPCMOCATABLEENTRY lpcTable = GetPropertyMap(); \
if ( NULL != (lpcTable = FindMapEntryInTable(lpszSubObjectName, lpcszName, lpcTable, (GetSubObjectMap()), ppEntryOwner, PROP_SEARCH_FLAG, nSearchEntryFlag)) ) return lpcTable;\
return _theBaseClass::FindPropertyEntry(lpszSubObjectName, lpcszName, ppEntryOwner, nSearchEntryFlag); } \
LPCMOCATABLEENTRY _theClass::FindMethodsEntry(LPSTR lpszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag) { LPCMOCATABLEENTRY lpcTable = _theClass::GetMethodsMap(); \
if ( NULL != (lpcTable = FindMapEntryInTable(lpszSubObjectName, lpcszName, lpcTable, (GetSubObjectMap()), ppEntryOwner, METH_SEARCH_FLAG, nSearchEntryFlag)) ) return lpcTable;\
return _theBaseClass::FindMethodsEntry(lpszSubObjectName, lpcszName, ppEntryOwner, nSearchEntryFlag); } \
BOOL _theClass::InitPropertyTable() {\
m_lpSubObjectMap = NULL; \
m_lpMethodFnMap = NULL; \
MOCATABLEENTRY _PropertyTable[] = {
#define MOCA_END_PROP_MAP(_theClass, _theBaseClass) MOCA_PROP_LAST_ENTRY };\
m_lpPropertyMap = MocaCopyTable((LPCMOCATABLEENTRY)_PropertyTable); \
return _theBaseClass::InitPropertyTable();}\
BOOL _theClass::ReleasePropTable(){ if (m_lpPropertyMap != NULL)\
{MocaReleaseTable(m_lpPropertyMap); m_lpPropertyMap = NULL;}\
if (m_lpMethodFnMap != NULL)\
{MocaReleaseTable(m_lpMethodFnMap); m_lpMethodFnMap = NULL;}\
if (NULL != GetSubObjectMap()) ReleaseSubObjectTable();\
return _theBaseClass::ReleasePropTable();}\
BOOL _theClass::InitPropDef(){if (MocaInitPropDef(GetPropertyMap()) && MocaInitSubPropDef(GetSubObjectMap())) \
return _theBaseClass::InitPropDef(); else return FALSE;}\
BOOL _theClass::ListTable(LPCSTR lpcszPrefix){ if (ListProperties(lpcszPrefix, GetPropertyMap()) && ListMethods(lpcszPrefix, _theClass::GetMethodsMap())){\
if (ListSubObjects(lpcszPrefix, GetSubObjectMap())){ return _theBaseClass::ListTable(lpcszPrefix);}\
else return FALSE; } else return FALSE; return TRUE;}
//////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////MACROS FOR SUBOBJECTS---- NOTE SUBOBJECTS TABLE AND GET SUBOBJECTS ARE DEFINED IN THE
////////////////PROPERTIES TABLE MACROS///////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
#define MOCA_DECLARE_SUBOBJ_MAP(_theClass) \
protected: BOOL InitSubObjects();\
protected: BOOL InitSubObjectTable();\
protected: BOOL ReleaseSubObjectTable();\
protected: CMOCAObjBase* InitSubobjectPointer(LPCSTR lpcszSubObjName);
#define MOCA_BEGIN_SUBOBJ_MAP(_theClass, _theBaseClass) \
BOOL _theClass::InitSubObjectTable() {\
MOCATABLEENTRY _SubObjectTable[] = {
#define MOCA_END_SUBOBJ_MAP(_theClass, _theBaseClass) MOCA_PROP_LAST_ENTRY };\
m_lpSubObjectMap = MocaCopyTable((LPCMOCATABLEENTRY)_SubObjectTable); \
return _theBaseClass::InitSubObjectTable();}\
BOOL _theClass::InitSubObjects() \
{InitSubObjectsInTable(GetSubObjectMap()); return _theBaseClass::InitSubObjects();}\
BOOL _theClass::ReleaseSubObjectTable()\
{ReleaseSubObjectsInTable(GetSubObjectMap()); MocaReleaseTable(m_lpSubObjectMap);\
m_lpSubObjectMap = NULL; return TRUE;}\
CMOCAObjBase* _theClass::InitSubobjectPointer(LPCSTR lpcszSubObjName)\
{CMOCAObjBase* pObj =CreateSubobject(lpcszSubObjName); if(pObj){return pObj;}else\
{ return _theBaseClass::InitSubobjectPointer(lpcszSubObjName);}}
#define MOCA_SUBOBJ_ENTRY(_subobj, _lpcszName) \
{(CMOCAObjBase *)&_subobj, _lpcszName, 0, NULL, NULL, NULL, NULL, (double)1.0 },
#define MOCA_SUBOBJ_POINTER_ENTRY(_subobj, _lpcszName) \
{(CMOCAObjBase *)_subobj, _lpcszName, 0, NULL, NULL, NULL, NULL, (double)0.0 },
// * TD 3/22/2000 ADD_SUPPORT_FOR_SUBOBJ_ARRAYS *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -