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

📄 clipsmfc_old.cpp

📁 clips专家系统内核打包类,很有参考性.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			globalPtr = NULL;
			return true;
		}
	}
	else	{
		if((dl_Undefglobal)(Defglobal))	{
			return true;
		}
	}
	return false;
}

/****************************************************************************
		Function	: CCLIPSWrap::SetConstruct(CString& theVar)
		Author		: Mark Tomlinson
		Desc.		: sets the construct:
			ex. "(defglobal ?*x* = 3)"
		Returns 	: true  on success, false on Error
****************************************************************************/
bool CCLIPSWrap::SetConstruct(CString& theVar)
{
	INITCHK(false)
	SETMBUF((LPCSTR)theVar)
	if((dl_OpenStringSource)("load-construct",m_buf,0) == 0)
		return false;
	if((dl_LoadConstructsFromLogicalName)("load-construct") == 0)	{
		(dl_CloseStringSource)("load-construct");
		return false;
		}
	(dl_CloseStringSource)("load-construct");
	return true;
}

/****************************************************************************
		Function	: CCLIPSWrap::GetAllFacts(CStringArray& buffer)
		Author		: Mark Tomlinson
		Desc.		: returns all facts in buffer
		Returns 	: true on success, false on error or if no facts retrieved
****************************************************************************/
bool CCLIPSWrap::GetAllFacts(CStringArray& buffer)
{
	CString	temp;

	//reset factPtr to initial fact
	factPtr = (struct fact *) (dl_GetNextFact)(NULL);
	//start looping
	while(CLIPSNextFactString(temp))	{
		buffer.Add(temp);
		}
	if(buffer.GetSize() == 0)	{
		return false;
		}
	return true;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSMemUsed(void)
		Author		: Mark Tomlinson
		Desc.		: returns amount of memory CLIPS has
		Returns 	: memused
****************************************************************************/
long int CCLIPSWrap::CLIPSMemUsed(void)
{
	return (dl_MemUsed)();
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSBatch(void)
		Author		: Mark Tomlinson
		Desc.		: access the Batch Command
		Returns 	: memused
****************************************************************************/
bool CCLIPSWrap::CLIPSBatch(CString& FileName)
{
	char	var[256];
	int i, j;

	memset(var,0,256);
	strcpy(var,(LPCSTR)(*FileName));
	j = strlen(var);
	//insure we convert backslash to forwardslash
	for(i = 0;i < j;i++)	{
		if(var[i] == '\\')	{
			var[i] = '/';
		}
	}
	return BOOLCHK((dl_Batch)(var));
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSBatchStar(void)
		Author		: Mark Tomlinson
		Desc.		: access the Batch* Command
		Returns 	: memused
****************************************************************************/
bool CCLIPSWrap::CLIPSBatchStar(CString& FileName)
{
	char	var[256];
	int i, j;
	OFSTRUCT	of;

	memset(var,0,256);
	strcpy(var,(LPCSTR)(FileName));
	j = strlen(var);
	//insure we convert backslash to forwardslash
	for(i = 0;i < j;i++)	{
		if(var[i] == '\\')	{
			var[i] = '/';
		}
	}
//	check it out...
	if(OpenFile(var,&of,OF_EXIST) == HFILE_ERROR)	{
		return BOOLCHK((dl_BatchStar)(var));
	}
	else	{
		return false;
	}
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSFreeMem(void)
		Author		: Mark Tomlinson
		Desc.		: attempts to free all of clips memory
		Returns 	: memused
****************************************************************************/
void CCLIPSWrap::CLIPSFreeMem()
{    
	 (dl_Reset)();
	 (dl_Clear)();
	 (dl_FreeAtomicValueStorage)();
	 (dl_ReleaseMem)(-1L, CLIPS_TRUE);
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSSetHaltExecution(void)
		Author		: Mark Tomlinson
		Desc.		: sets the CLIPS halt flag
		Returns 	: memused
****************************************************************************/
void CCLIPSWrap::CLIPSSetHaltExecution(bool mode)
{
	if(mode)	{
		(dl_SetHaltExecution)(CLIPS_TRUE);
	}
	else	{
		(dl_SetHaltExecution)(CLIPS_FALSE);
	}
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSMakeInstance(CString& Data)
		Author		: Mark Tomlinson
		Desc.		: creates a new COOL object, sets instancePtr to new instance
					  (ex. "(Test of MINE)", assuming a definstance of MINE)
		Returns 	: true on success, otherwise false
****************************************************************************/
bool CCLIPSWrap::CLIPSMakeInstance(CString& Data)
{
	INITCHK(false)
	SETMBUF((LPCSTR)Data)
	//attempt the MakeInstance call
	if((instancePtr = (struct instance *) (dl_MakeInstance)(m_buf)) == NULL)	{
		return false;
	}
	return true;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSFindInstance(CString& Name = NULL)
		Author	    : Mark Tomlinson
		Desc.		: locates a COOL object, sets instancePtr to found obj.
					   (ex. "Test", given the above example)
		Returns 	: true on success, otherwise false
****************************************************************************/
bool CCLIPSWrap::CLIPSFindInstance(CString& Name, bool SearchImports)
{
	INITCHK(false)
	SETMBUF((LPCSTR)Name)
	if((instancePtr = (struct instance *) (dl_FindInstance)(modulePtr,m_buf,SearchImports)) == NULL)	{
		return false;
	}
	return true;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSDeleteInstance()
		Author		: Mark Tomlinson
		Desc.		: deletes current instance
		Returns 	: true on success, otherwise false
****************************************************************************/
bool CCLIPSWrap::CLIPSDeleteInstance(void* Instance)
{
	bool	ret = false;

	INITCHK(false)
	if((instancePtr == NULL) && 
		(Instance == NULL))	{
		return false;
	}
	if(CLIPSValidInstance(Instance))	{
		if(Instance == NULL)	{
			ret = (dl_DeleteInstance)(instancePtr) ? true : false;
			instancePtr = NULL;
		}
		else	{
			ret = (dl_DeleteInstance)(Instance) ? true : false;
		}
	}
	return ret;
}

/****************************************************************************
		Function	: CCLIPSWrap::DeleteAllInstances()
		Author		: Mark Tomlinson
		Desc.		: deletes all instances
		Returns 	: true on success, otherwise false
****************************************************************************/
bool CCLIPSWrap::DeleteAllInstances(void)
{
	INITCHK(false)
	instancePtr = NULL;
	return BOOLCHK((dl_DeleteInstance)(NULL));
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSGetNextInstanceInClass(void)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function	GetNextInstanceInClass():
					  uses classPtr. updates instancePtr.
		Returns 	: true on success, false on error
****************************************************************************/
bool	CCLIPSWrap::CLIPSGetNextInstanceInClass(void *pClass)
{
	INITCHK(false)
//!!!
	instancePtr = (struct instance *) (dl_GetNextInstanceInClass)(classPtr,instancePtr);
	if(instancePtr == NULL)	{
		return false;
	}
	return true;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSGetInstancePPForm(CString& Data)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function	GetInstancePPForm():
					  uses instancePtr.
		Returns 	: true on success, false on error
****************************************************************************/
bool	CCLIPSWrap::CLIPSGetInstancePPForm(CString& Data)
{
	INITCHK(false)
	if(instancePtr == NULL)
		return false;
	CLEARMBUF
	(dl_GetInstancePPForm)(m_buf,1023,instancePtr);
	if(strlen(m_buf) > 0)	{
		Data = m_buf;
		return true;
		}
	return false;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSGetGlobalNumberOfInstances()
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function	GetGlobalNumberOfInstances():
		Returns 	: total number of instances, all modules
****************************************************************************/
unsigned long CCLIPSWrap::CLIPSGetGlobalNumberOfInstances(void)
{
	INITCHK(false)
	return (dl_GetGlobalNumberOfInstances)();
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSDirectGetSlot(CString& Slot, CString& Value)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function DirectGetSlot()
						(slot names are case sensitive)
		Returns 	: true on success, false on Error
****************************************************************************/
bool CCLIPSWrap::CLIPSDirectGetSlot(CString& Class, CString& Slot, CString& Value)
{

	char	slot[256];
	struct	dataObject value;
	long	temp_l = 0;
	double	temp_f = 0.0;

	memset(slot,0,256);
	INITCHK(false)
	if(!Class.IsEmpty())	{
		SETMBUF((LPCSTR)Class)
		instancePtr = (struct instance *) (dl_FindInstance)(modulePtr,m_buf,0);
	}
	if((instancePtr == NULL)	||
	   (Slot.IsEmpty()))
		return false;
	strcpy(slot,(LPCSTR)(Slot));
	(dl_DirectGetSlot)(instancePtr,slot,&value);
	switch (value.type)	{
		case INTEGER:
			temp_l = ValueToLong(GetValue(value));
			sprintf(m_buf,"%ld",temp_l);
			break;
		case FLOAT:
			temp_f = ValueToDouble(GetValue(value));
			sprintf(m_buf,"%lf",temp_f);
			break;
		case SYMBOL:
		case STRING:
		default:
			SETMBUF((char *)ValueToString(GetValue(value)))
			break;
	}
	Value = m_buf;
	if (Value.GetLength() > 0)
		return true;
	return false;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSDirectPutSlot(CString& Slot, CString& Value, int type)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function DirectPutSlot()
					  (slot names are case sensitive)
		Returns 	: true on success, false on Error
****************************************************************************/
bool CCLIPSWrap::CLIPSDirectPutSlot(CString& Class, CString& Slot, CString& Value, int type)
{
	char	slot[256];
	struct	dataObject value;
	long	temp_l = 0;
	double	temp_f = 0.0;

	memset(slot,0,256);
	INITCHK(false)
	if(!Class.IsEmpty())	{
		SETMBUF((LPCSTR)Class)
		instancePtr = (struct instance *) (dl_FindInstance)(modulePtr,m_buf,0);
	}
		
	if((instancePtr == NULL)	||
		(Slot.IsEmpty()))
		return false;
	strcpy(slot,(LPCSTR)(Slot));
	SETMBUF((LPCSTR)Value)
	SetType(value,type);
	switch(type)	{
	case INTEGER:
		sscanf(m_buf,"%ld",&temp_l);
		SetValue(value,(dl_AddLong)(temp_l));
		break;
	case FLOAT:
		sscanf(m_buf,"%lf",&temp_f);
		SetValue(value,(dl_AddDouble)(temp_f));
		break;
	case SYMBOL:
	case STRING:
		SetValue(value,(dl_AddSymbol)(m_buf));
	}
	return BOOLCHK((dl_DirectPutSlot)(instancePtr,slot,&value));
}

//not implemented
bool CCLIPSWrap::SetSlotValue(CString& Class, CString& Slot, CString& Value)
{
	return 0;
}

//not implemented
bool CCLIPSWrap::GetSlotValue(CString& Class, CString& Slot, CString& Value)
{
	return 0;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSRouteCommand(CString& Command, 
		                                            CString& route, int do_print)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function RouteCommand()
					  takes a fully qualified CLIPS command line and executes 
					  it, just as it you entered it in the interactive CLIPS.
		Arguments   : Command = the CLIPS command to execute
		              route   = the std route for the output to be displayed on
					  do_print= set to non-zero to actually display output
		Returns 	: true on success, false on Error
****************************************************************************/
bool CCLIPSWrap::CLIPSRouteCommand(CString& Command, CString &route, int do_print)
{
	char	tbuf[MAX_ITEM_SIZE];

	SETMBUF((LPCSTR)Command)
      if(do_print)	{
		if(route.GetLength() < MAX_ITEM_SIZE)	{
			strcpy(tbuf, (LPCSTR)route);
			return BOOLCHK((dl_RouteCommand)(m_buf,1,tbuf));
		}
   	}
	else	{
		return BOOLCHK((dl_RouteCommand)(m_buf,0,NULL));
	}
	return false;
}


/****************************************************************************
		Function	: CCLIPSWrap::CLIPSBuild(CString& Command)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function Build()
		Returns 	: true on success, false on Error
****************************************************************************/
bool CCLIPSWrap::CLIPSBuild(CString& Command)
{
	SETMBUF((LPCSTR)Command)
	return BOOLCHK((dl_Build)(m_buf));
}

/****************************************************************************
		Function	: CCLIPSWrap::ReadFactSlot(CString& Slot, CString& Data)
		Author		: Mark Tomlinson
		Desc.		: Read the data from a slot on the default fact, (factPtr)
		Returns 	: true on success, false on Error
****************************************************************************/
bool CCLIPSWrap::ReadFactSlot(CString& Slot, CString& Data)
{
struct dataObject *theValue;
struct dataObj

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -