📄 mocadll.h
字号:
/*------------------------------------------------------------------------------*
* File Name: MOCADLL.h *
* Purpose: Microcal Objects and classes *
* Creation: Original by Tim Ding and Dr. C. P. Yang, 4/15/95 *
* Copyright Microcal Software Inc. 1995,2000 *
* *
* Modification log *
* revised by TD on 3/27/2000 *
* EJP 07-06-2000 t8153 GET_REGISTRATION_INFO *
* EJP 08-15-2000 t8153 v6.1026 WCB_GET_USER_INFO *
* EJP 01-09-2001 v6.1071 t8790 LABTALK_MANAGER_UI *
* EJP 03-09-2001 t8865 IMPLEMENT_IDE_VARIABLE_WINDOW *
* CPY 3/15/01 7.0 PRINT_STRING *
* SY 03-22-2001 ADD_GETCHILDREN_FUNCTION *
* SY 04-09-2001 t9041 SORT_WORKSPACE_ITEM *
* SY 05-07-2001 t9131 ADD_IDE_HANDING_TEMP_FILES *
* SY 07-25-2001 t9336 OIDE_GUI_IMPROVEMENT *
* LY 12/14/01 t9798 SERIESPTR_MANAGER *
* EJP 02-27-2002 QA70_985 ENABLE_SOFTDEV_PDF *
* YuI 5/22/02 v7.0303 QA70-1582 NLSF_CODE_BUILDER_COMMUNICATION *
* AW 07/01/02 v7.0333 QA70-2116 MORE_WORK_ON_NAG_DLL_SUPPORT *
* YuI 8/30/02 v7.0387 QA70-2841 LINKS_MANAGER_FOR_OBJECTS *
* SY 09-25-02 QA70-2437 v7.0402 MULTIFOLDERED_OC_WORKSAPCE_GUI *
* TD 12-05-02 QA70-3060 v7.0452 SEND_MSG_TO_MOCA_WRAPPERS *
* ML 5/29/2003 QA70-4562 CURVE_EXTENSION_WITH_RELATED_DATASETS *
* RVD 6/13/2003 QA70-4650 v7.0601 OBJECT_PROPERTY_ACCESS *
*------------------------------------------------------------------------------*/
#ifndef _MOCADLL_H
#define _MOCADLL_H
////////////////////////////////////////////////////////////
////
////Macros For Multiple Usage,
////1)Using as LIB
////2)Building the LIB
////3)Building for internal use
//1) // Using the lib
#ifdef __USE_MOCA_AS_LIB__
#define __MOCA_AS_LIB__
#define MODLL_DEMO
#endif // __USE_MOCA_AS_LIB__
//2) // Building a lib or using it
#ifdef __MOCA_AS_LIB__
#pragma message(">>>>>>>>>>>>>>>> __OMOCA_AS_LIB__ defined <<<<<<<<<<<<<<<<<<<<<<<<")
#define MOCA_EXTERNAL_SUPPORT
#endif // __MOCA_AS_LIB__
//3) //Building for internal Use
#ifndef MODLL_DEMO
#include "config.h"
#endif
#ifdef MOCA_SUPPORT_FOR_INTERNAL_USE
#undef MOCA_EXTERNAL_SUPPORT
#endif
#if defined(MOCA_SUPPORT_FOR_INTERNAL_USE) && defined(OK_AS_EXTDLL)
#define MOCA_EXPORT_IMPORT __declspec(dllexport)
#elif defined(MOCA_EXTERNAL_SUPPORT)
#define MOCA_EXPORT_IMPORT
#else
// #define MOCA_EXPORT_IMPORT __declspec(dllexport)
#define MOCA_EXPORT_IMPORT __declspec(dllimport)
#endif
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
////begin macros
#ifndef LPCOKSTR
#define LPCOKSTR LPSTR
#endif
#define MOCA_EXP_CLASS MOCA_EXPORT_IMPORT
//#define MOCA_EXP_FUNC MOCA_EXPORT_IMPORT
#define DISPLAY_MESSAGE(lpszMessage) ScriptMessage(lpszMessage)
#define MAX_DOUBLE 1.7E+308
#define UNTYPED_DIVIDE(a, b, result) { \
if (fabs(b) >= 1. || fabs(a) < fabs(b) * MAX_DOUBLE) \
(result) = (a) / (b); \
else \
(result) = NANUM; \
}
/// ML 5/29/2003 QA70-4562 CURVE_EXTENSION_WITH_RELATED_DATASETS
#ifndef MOCA_DIVIDE
#define MOCA_DIVIDE_DEF(_num, _den, _def) ((fabs(_den) >= 1. || fabs(_num) < fabs(_den) * MAX_DOUBLE) ? (_num) / (_den) : (_def))
#define MOCA_DIVIDE(_num, _den, _def) MOCA_DIVIDE_DEF((_num), (_den), NANUM)
#endif // MOCA_DIVIDE
/// end CURVE_EXTENSION_WITH_RELATED_DATASETS
//#define MOCA_OUT_MSG(str) ScriptMessage(str)
//#define MOCA_REAL_TO_STR(szBuf,vv) RealToString(vv, szBuf);
//#define MODLL_EXECUTE_SCRIPT(mobj, str) mobj->ExecuteScript(str);
//#define ODLL_FN
//#define PROPFNBASE CObject
//#define MO_RETURN_YES EGOR_YES
//#define MO_RETURN_NO EGOR_NO
//#define MO_RETURN_ERR EGOR_ERR
//#define okThisFuncType
//#define NORMAL_PROB(x, mean, sigma) GaussianDistribution(x, mean, sigma)
//#define MOABS(arg) fabs(arg)
/*#ifdef _DEBUG
#define DEBUG_MSG(str) {char szTemp[50];wsprintf(szTemp,"%s:%s",(LPSTR)SZCLASS_NAME,(LPSTR)str);OUT_MSG(szTemp);}
#else
#define DEBUG_MSG(str)
#endif
*/
////end macros
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////#includes
//#include <afxwin.h> // MFC core and standard components
#include <math.h>
#include "moapi.h"
#include "llist.h"
#include "orgdll.h"
#include <afxtempl.h>
#include "mocanagshare.h"
////end include files
////////////////////////////////////////////////////////////////////////
class MOCARecorder;
/// EJP 03-09-2001 t8865 IMPLEMENT_IDE_VARIABLE_WINDOW
//class MOCA_EXP_CLASS COKLTObj;
class COKLTObj;
typedef COKLTObj * COKLTObjPtr;
typedef CArray<COKLTObjPtr, COKLTObjPtr> COKLTObjPtrArray;
/// end IMPLEMENT_IDE_VARIABLE_WINDOW
/// TD 5-30-02 QA70-1336 v7.0312 SAVING_OC_COMPILED_CODE
#include "OKCONST.H"
/////////////////////////////////////////////////////////////////////////////////
// CLTArchiveException (class)
//
// This class is used to through Origin C Specific exceptions while archiving
//
class CLTArchiveException : public CException
{
DECLARE_DYNAMIC(CLTArchiveException)
public:
enum
{
NoError,
ErrFileIdentifier,
ErrFileVersion,
ErrFileModified,
ErrFnBodyCompile,
ErrGeneric
};
CLTArchiveException();
~CLTArchiveException();
public:
void SetError(int nError);
int GetError();
private:
UINT m_nError;
};
/////////////////////////////////////////////////////////////////////////////////
// CLTPtrReferences
//
// This Map object stores the refernces to a pointer loaded by CArchive
// the storage keeps adding refernce until the owner intervenes -- in
// the process the owner may decide to replace the loaded object with
// another new object, update all refernces and stop addition of future refrences
//
// Only used by the CLTArchive loading process, storing does not use this
//
class CLTBase;
typedef CArray<CLTBase**, CLTBase**> ArrLTReferences;
class MOCA_EXP_CLASS CLTPtrReferences
: public CMap<CLTBase*, CLTBase*, ArrLTReferences*, ArrLTReferences*>
{
public:
CLTPtrReferences();
~CLTPtrReferences();
public:
void AddReference(CLTBase** pLTPtrRef);
void MarkEndOfAddingRef(CLTBase* pLTPtr);
void CleanupRefsTo(CLTBase* pLTPtr);
void UpdateRefernces(CLTBase* pLTPtrOld, CLTBase* pLPtrNew);
bool Exist(CLTBase* pLTPtr);
bool RemoveReference(CLTBase** pLTPtrRef);
bool IsAddMoreRefernces(CLTBase* pLTPtr);
};
/////////////////////////////////////////////////////////////////////////////////
// CLTArchive
//
// We may want to add more functions, partucularly once related to
// Forward compality of First and Second kind
//
class CLTPtrContainersBase;
//
class MOCA_EXP_CLASS CLTArchive
: public CArchive
{
public:
CLTArchive(CFile* pFile, UINT nMode);
~CLTArchive();
public:
// insertion operations
void DoArchive(BYTE& by);
void DoArchive(WORD& w);
void DoArchive(LONG& l);
void DoArchive(DWORD& dw);
void DoArchive(float& f);
void DoArchive(double& d);
void DoArchive(int& i);
void DoArchive(short& w);
void DoArchive(char& ch);
void DoArchive(unsigned& u);
/// AW 05/12/03 QA70-4430 v7.0582 OC_COMPILED_FILE_SUPPORT
void DoArchive(tagOneOCcomplex& u);
void DoArchive(LPVOID *pData, UINT &nSize);
/// END OC_COMPILED_FILE_SUPPORT
/// RVD 6/13/2003 QA70-4650 v7.0601 OBJECT_PROPERTY_ACCESS
void DoArchive(CUIntArray& array);
/// end OBJECT_PROPERTY_ACCESS
void DoArchive(CString & str);
void DoArchive(CLTBase ** pLTBase);
void DoArchive(CLTPtrContainersBase & LTPtrs);
void DoArchive(CLTBase ** pLTBase, bool bPtrOwner);
void DoArchive(CLTPtrContainersBase & LTPtrs, bool bPtrOwner);
void ThrowException(UINT nError = CLTArchiveException::ErrGeneric);
void CleanupRefsTo(CLTBase* pLTPtr);
void UpdateRefernces(CLTBase* pLTPtrOld, CLTBase* pLPtrNew);
bool AddRemoveRefFromMap(CLTBase** pLTPtrRef, bool bAdd = true);
bool IsKindOf();
UINT GetSavedObjVersion();
void SetSavedObjVersionFor(CLTBase * pLTBase);
protected:
UINT m_nError;
UINT m_nSavedObjVersion;
CLTArchiveException m_LTAExceptions;
CLTPtrReferences m_mapRefernces;
protected:
void UpdateCarchiveArrayPtr(CLTBase * pLTOld, CLTBase * pLTNew);
private:
//Keep this as a last Data member
enum{nIdValue = 0xECFD973A};
DWORD m_dwIdentifier;
};
inline void CLTArchive::DoArchive(BYTE& by)
{
IsStoring() ? *this << by : *this >> by;
}
inline void CLTArchive::DoArchive(WORD& w)
{
IsStoring() ? *this << w : *this >> w;
}
inline void CLTArchive::DoArchive(LONG& l)
{
IsStoring() ? *this << l : *this >> l;
}
inline void CLTArchive::DoArchive(DWORD& dw)
{
IsStoring() ? *this << dw : *this >> dw;
}
inline void CLTArchive::DoArchive(float& f)
{
IsStoring() ? *this << f : *this >> f;
}
inline void CLTArchive::DoArchive(double& d)
{
IsStoring() ? *this << d : *this >> d;
}
inline void CLTArchive::DoArchive(int& i)
{
IsStoring() ? *this << i : *this >> i;
}
inline void CLTArchive::DoArchive(short& w)
{
IsStoring() ? *this << w : *this >> w;
}
inline void CLTArchive::DoArchive(char& ch)
{
IsStoring() ? *this << ch : *this >> ch;
}
inline void CLTArchive::DoArchive(unsigned& u)
{
IsStoring() ? *this << u : *this >> u;
}
inline void CLTArchive::DoArchive(CString & str)
{
IsStoring() ? *this << str : *this >> str;
}
inline void CLTArchive::ThrowException(UINT nError)
{
m_LTAExceptions.SetError(nError);
THROW(&m_LTAExceptions);
}
inline bool CLTArchive::IsKindOf()
{
return m_dwIdentifier == nIdValue;
}
inline void CLTArchive::CleanupRefsTo(CLTBase* pLTPtr)
{
m_mapRefernces.CleanupRefsTo (pLTPtr);
}
inline void CLTArchive::UpdateRefernces(CLTBase* pLTPtrOld, CLTBase* pLPtrNew)
{
m_mapRefernces.UpdateRefernces(pLTPtrOld, pLPtrNew);
}
inline UINT CLTArchive::GetSavedObjVersion()
{
return m_nSavedObjVersion;
}
/////////////////////////////////////////////////////////////////////////////////
// CLTBase
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -