⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clips_bc.h

📁 clips专家系统内核打包类,很有参考性.
💻 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 + -