📄 clips_bc.h
字号:
#ifndef _CLIPSWrap
#define _CLIPSWrap
/////////////////////////////////////////////////////////////////////////////
// CCLIPSWrap defintion
//define number of routes to handle
#define NUMROUTES 8
//define the maximum length of a fact string
#define MAX_FACT_LEN 200
//define max length of an item
#define MAX_ITEM_SIZE 128
//define number of iterations between msg pump calls
#define MAX_MSG_PUMP 1
//size of temp buffer variable
#define MBUFSIZE 1024
#ifndef __StringAr_H
#include "stringar.h"
#endif
#ifdef USE_BORLAND_STRING
#ifndef __CSTRING_H
#include <cstring.h>
typedef string String;
#endif
#else
#ifndef _MSTRING_H
#include "mstring.h"
#endif
#endif
#ifndef DYNACLIPS_DEF
#include <dynclips.h>
#endif
#ifndef DYNALOAD_DEF
#include <dynaload.h>
#endif
#ifndef DYNACLIPS_DEF
#include <dynclips.h>
#endif
#ifndef DYNALOAD_DEF
#include <dynaload.h>
#endif
//prototype for route ordinal function
int GetRouteNum(const char far* route);
//prototype for message pump callback
extern "C" {
void far _export MsgLoopProc(void);
}
#ifndef __defc
extern int Defcount;
#endif
//a handy macro to check for CLIPSInit and return something on fail
#define INITCHK(p) if(!m_fClipsInit) { \
return p; }
//macro to clear the temp buffer
#define CLEARMBUF memset(m_buf,0,MBUFSIZE);
class CCLIPSWrap
{
//declarations for the FN pointers to CLIPS functions
FORM_02 dl_ExitCLIPS;
FORM_01 dl_Reset;
FORM_04 dl_GetFactPPForm;
FORM_30 dl_GetNextFact;
FORM_40 dl_Run;
FORM_11 dl_Load;
FORM_41 dl_GetNumberOfFacts;
FORM_01 dl_Clear;
FORM_11 dl_Bsave;
FORM_11 dl_Bload;
FORM_14 dl_Retract;
FORM_11 dl_Watch;
FORM_11 dl_Unwatch;
FORM_14 dl_Matches;
FORM_12 dl_SaveFacts;
FORM_11 dl_LoadFacts;
FORM_10 dl_SetFactDuplication;
FORM_13 dl_GetFactDuplication;
FORM_13 dl_DribbleOff;
FORM_11 dl_DribbleOn;
FORM_32 dl_AssertString;
FORM_30 dl_Assert;
FORM_03 dl_IncrementFactCount;
FORM_03 dl_DecrementFactCount;
FORM_13 dl_GetFactListChanged;
FORM_02 dl_SetFactListChanged;
FORM_33 dl_GetNextInstanceInClass;
FORM_30 dl_GetNextInstanceInScope;
FORM_30 dl_GetNextInstance;
FORM_30 dl_GetInstanceClass;
FORM_50 dl_GetInstanceName;
FORM_04 dl_GetInstancePPForm;
FORM_34 dl_CreateRawInstance;
FORM_14 dl_ValidInstanceAddress;
FORM_42 dl_SaveInstances;
FORM_43 dl_LoadInstances;
FORM_10 dl_SetStrategy;
FORM_13 dl_GetStrategy;
FORM_32 dl_AddSymbol;
FORM_37 dl_AddLong;
FORM_38 dl_AddDouble;
FORM_41 dl_MemUsed;
FORM_41 dl_MemRequests;
FORM_35 dl_WRGetFocus;
FORM_01 dl_RemoveAllFacts;
FORM_04 dl_GetDefglobalValueForm;
FORM_32 dl_FindDefglobal;
FORM_17 dl_GetDefglobalValue;
FORM_30 dl_GetNextDefglobal;
FORM_14 dl_Undefglobal;
FORM_11 dl_CloseStringSource;
FORM_11 dl_LoadConstructsFromLogicalName;
FORM_15 dl_OpenStringSource;
FORM_11 dl_Batch;
FORM_44 dl_ReleaseMem;
FORM_01 dl_FreeAtomicValueStorage;
FORM_02 dl_SetHaltExecution;
FORM_32 dl_MakeInstance;
FORM_36 dl_FindInstance;
FORM_14 dl_DeleteInstance;
FORM_60 dl_GetGlobalNumberOfInstances;
FORM_06 dl_DirectGetSlot;
FORM_16 dl_DirectPutSlot;
FORM_11 dl_RouteCommand;
FORM_16 dl_GetFactSlot;
FORM_16 dl_PutFactSlot;
FORM_01 dl_InitializeCLIPS;
FORM_18 dl_AddPeriodicFunction;
FORM_31 dl_SetOutOfMemoryFunction;
FORM_02 dl_SetPrintWhileLoading;
ADDROUTER dl_AddRouter;
public:
//constructor and destructor are public
CCLIPSWrap(int count = -1);
~CCLIPSWrap();
//enumerated type for file load/save return values
enum LoadStatus {
READ_FAIL,
PARSE_FAIL,
READ_OK,
BAD_LOAD_NAME,
READ_NOT_INIT,
};
enum SaveStatus {
SAVE_FAIL,
SAVE_OK,
BAD_SAVE_NAME,
SAVE_NOT_INIT,
};
enum InstanceCase {
I_PERIOD,
I_SCOPE,
I_CLASS
};
// Attributes
protected:
//all internal variables are protected.
void* factPtr;
void* modulePtr;
void* rulePtr;
void* globalPtr;
void* instancePtr;
void* classPtr;
void* activationPtr;
void* agendaPtr;
BOOL m_fClipsInit;
char m_buf[MBUFSIZE];
HINSTANCE m_hLib;
// Operations
public:
//this is our public interface to the rest of the CPP world
void SetMsgLoopCount(int ct) { Defcount = ct; }
void SetMsgLoopCBfn(void far (*func_ptr)(BOOL));
void SetFactPtr(void* Fact = NULL);
void SetRulePtr(void* Rule = NULL);
void SetModulePtr(void* Module = NULL);
void SetGlobalPtr(void* Global = NULL);
void SetInstancePtr(void* Instance = NULL);
void SetClassPtr(void* Class = NULL);
void SetAgendaPtr(void* Agenda = NULL);
void SetActivationPtr(void* Activation = NULL);
void* GetFactPtr(void);
void* GetRulePtr(void);
void* GetModulePtr(void);
void* GetGlobalPtr(void);
void* GetInstancePtr(void);
void* GetClassPtr(void);
void* GetAgendaPtr(void);
void* GetActivationPtr(void);
//defglobal functions
BOOL CLIPSGetNextDefglobal(void);
BOOL CLIPSFindDefglobal(String* theVar);
BOOL CLIPSUndefglobal(void);
BOOL SetConstruct(String* theVar);
float GetDefglobalFloat(String* name);
int GetDefglobalInt(String* name);
long GetDefglobalLong(String* name);
const char far* GetDefglobalString(String* name);
void* GetDefglobalAddress(String* name);
//
BOOL GetAllFacts(StringArray* buffer);
StringArray* SetRouteBuffer(StringArray* pBuffer, String* pRoute);
StringArray* SetRouteBuffer(StringArray* pBuffer, String& Route);
BOOL SetRouteFile(String& RouteName, String& FileName);
BOOL SetRouteFile(String& RouteName, const char far* FileName);
BOOL AddFactArray(StringArray* List = NULL, int NumFacts = 0);
BOOL CLIPSInit(void);
int CLIPSLoad(String* scriptFile = NULL);
BOOL CLIPSReset(void);
void CLIPSExit(int retVal = 1);
long int CLIPSRun(long int numIterations = -1);
BOOL CLIPSNextFactString(String* FactString = NULL);
long int CLIPSGetNumberOfFacts(void);
BOOL CLIPSClear(void);
int CLIPSBSave(String* BinName = NULL);
int CLIPSBLoad(String* BinName = NULL);
BOOL CLIPSRetract(void *Fact = NULL);
BOOL CLIPSWatch(String* Item = NULL);
BOOL CLIPSUnWatch(String* Item = NULL);
BOOL CLIPSMatches(void *Rule = NULL);
int CLIPSSaveFacts(String* FileName = NULL, BOOL Visable = TRUE);
int CLIPSLoadFacts(String* FileName = NULL);
BOOL CLIPSNextFact(void);
BOOL CLIPSFactString(String* Data = NULL);
int CLIPSSetFactDup(int value = 0);
int CLIPSGetFactDup(void);
BOOL CLIPSDribble(String* FileName = NULL, BOOL Switch = FALSE);
BOOL CLIPSAssert(String* String = NULL);
BOOL CLIPSAssert(void* Fact = NULL);
BOOL CLIPSIncrementFactCtr(void* Fact = NULL);
BOOL CLIPSDecrementFactCtr(void* Fact = NULL);
int CLIPSGetFactListChanged(void);
BOOL CLIPSSetFactListChanged(int Value = 0);
//instance functions
BOOL CLIPSGetNextInstance(int Which = 0,void* Class = NULL);
BOOL CLIPSMakeInstance(String* Data = NULL);
BOOL CLIPSFindInstance(String* Name = NULL, BOOL SearchImports = FALSE);
BOOL CLIPSDeleteInstance(void);
BOOL DeleteAllInstances(void);
BOOL CLIPSGetInstanceClass(void* Instance = NULL);
BOOL CLIPSGetNextInstanceInClass(void);
BOOL CLIPSGetInstanceName(void* Instance = NULL, String* Data = NULL);
BOOL CLIPSGetInstanceData(void* Instance = NULL, String* Data = NULL);
BOOL CLIPSGetInstancePPForm(String* Data = NULL);
BOOL CLIPSCreateRawInstance(String* Name = NULL);
BOOL CLIPSValidInstance(void* Instance = NULL);
BOOL CLIPSDirectGetSlot(String* Class, String* Slot, String* Value);
BOOL CLIPSDirectPutSlot(String* Class, String* Slot, String* Value, int type);
unsigned long CLIPSGetGlobalNumberOfInstances(void);
long int CLIPSLoadInstances(String* FileName = NULL);
long int CLIPSSaveInstances(String* FileName = NULL, BOOL Visable = FALSE);
BOOL SetSlotValue(String* Class, String* Slot, String* Value);
BOOL GetSlotValue(String* Class, String* Slot, String* Value);
BOOL ReadFactSlot(String* Slot, String* Data);
BOOL WriteFactSlot(String* Slot, String* Data, int type);
//
BOOL CLIPSRouteCommand(String* Command);
long int CLIPSGetStrategy(void);
long int CLIPSSetStrategy(long int data = 0);
void* CLIPSAddSymbol(String* Symbol = NULL);
long int CLIPSMemoryUsed(void);
long int CLIPSMemoryRequests(void);
BOOL CLIPSGetFocus(void);
BOOL CLIPSRemoveAllFacts(void);
long int CLIPSMemUsed(void);
BOOL CLIPSBatch(String* FileName = NULL);
void CLIPSFreeMem(void);
void CLIPSSetHaltExecution(void);
private:
char far* GetGlobal(String* name);
BOOL LoadDllReferences(void);
};
/////////////////////////////////////////////////////////////////////////////
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -