📄 clips_bc.cpp
字号:
}
/****************************************************************************
Function : CCLIPSWrap::CLIPSFindDefglobal(String* theVar)
Author : Mark Tomlinson
Desc. : updates globalPtr
Returns : TRUE on success, FALSE on error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSFindDefglobal(String* theVar)
{
INITCHK(FALSE)
CLEARMBUF
theVar->copy(m_buf);
globalPtr = (dl_FindDefglobal)(m_buf);
if(globalPtr == NULL)
return FALSE;
return TRUE;
}
/****************************************************************************
Function : CCLIPSWrap::CLIPSUndefglobal(void)
Author : Mark Tomlinson
Desc. : uses globalPtr, updates globalPtr
Returns : TRUE on success, FALSE on error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSUndefglobal(void)
{
INITCHK(FALSE)
if((dl_Undefglobal)(globalPtr)) {
globalPtr = NULL;
return TRUE;
}
return FALSE;
}
/****************************************************************************
Function : CCLIPSWrap::SetConstruct(String* theVar)
Author : Mark Tomlinson
Desc. : sets the construct:
ex. "(defglobal ?*x* = 3)"
Returns : TRUE on success, FALSE on Error
****************************************************************************/
BOOL CCLIPSWrap::SetConstruct(String* theVar)
{
INITCHK(FALSE)
CLEARMBUF
theVar->copy(m_buf);
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(StringArray* 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(StringArray* buffer)
{
String temp;
if(buffer == NULL) {
return FALSE;
}
while(CLIPSNextFactString(&temp)) {
buffer->Add(temp);
}
if(buffer->getm_ItemCount() == 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::CLIPSMemUsed(void)
Author : Mark Tomlinson
Desc. : returns amount of memory CLIPS has
Returns : memused
****************************************************************************/
BOOL CCLIPSWrap::CLIPSBatch(String* FileName)
{
char var[256];
memset(var,0,256);
FileName->copy(var);
return (dl_Batch)(var);
}
/****************************************************************************
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(void)
{
(dl_SetHaltExecution)(CLIPS_TRUE);
}
/****************************************************************************
Function : CCLIPSWrap::CLIPSMakeInstance(String* 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(String* Data)
{
INITCHK(FALSE)
if(Data==NULL)
return FALSE;
CLEARMBUF
Data->copy(m_buf);
//attempt the MakeInstance call
if((instancePtr = (dl_MakeInstance)(m_buf)) == NULL)
return FALSE;
return TRUE;
}
/****************************************************************************
Function : CCLIPSWrap::CLIPSFindInstance(String* 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(String* Name, BOOL SearchImports)
{
INITCHK(FALSE)
if(Name==NULL)
return FALSE;
CLEARMBUF
Name->copy(m_buf);
if((instancePtr = (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)
{
BOOL ret;
INITCHK(FALSE)
if(instancePtr == NULL)
return FALSE;
ret = (dl_DeleteInstance)(instancePtr);
instancePtr = NULL;
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 (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)
{
INITCHK(FALSE)
if(classPtr == NULL) {
return FALSE;
}
instancePtr = (dl_GetNextInstanceInClass)(classPtr,instancePtr);
if(instancePtr == NULL) {
return FALSE;
}
return TRUE;
}
/****************************************************************************
Function : CCLIPSWrap::CLIPSGetInstancePPForm(String* Data)
Author : Mark Tomlinson
Desc. : Accessor for CLIPS function GetInstancePPForm():
uses instancePtr.
Returns : TRUE on success, FALSE on error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSGetInstancePPForm(String* Data)
{
INITCHK(FALSE)
if(instancePtr == NULL)
return FALSE;
CLEARMBUF
(dl_GetInstancePPForm)(m_buf,1023,instancePtr);
if(strlen(m_buf) > 0) {
Data->assign(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(String* Slot, String* 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(String *Class, String* Slot, String* Value)
{
char slot[256];
struct dataObject value;
long temp_l = 0;
double temp_f = 0.0;
memset(slot,0,256);
INITCHK(FALSE)
if(Class != NULL) {
CLEARMBUF
Class->copy(m_buf);
instancePtr = (dl_FindInstance)(modulePtr,m_buf,0);
}
if((instancePtr == NULL) ||
(Slot->length()==0))
return FALSE;
Slot->copy(slot);
(dl_DirectGetSlot)(instancePtr,slot,&value);
CLEARMBUF
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:
strcpy(m_buf,(char *)ValueToString(GetValue(value)));
break;
}
Value->assign(m_buf);
if (Value->length() > 0)
return TRUE;
return FALSE;
}
/****************************************************************************
Function : CCLIPSWrap::CLIPSDirectPutSlot(String* Slot, String* 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(String* Class, String* Slot, String* 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 != NULL) {
CLEARMBUF
Class->copy(m_buf);
instancePtr = (dl_FindInstance)(modulePtr,m_buf,0);
}
if((instancePtr == NULL) ||
(Slot->length()==0))
return FALSE;
Slot->copy(slot);
CLEARMBUF
Value->copy(m_buf);
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 (dl_DirectPutSlot)(instancePtr,slot,&value);
}
//not implemented
#pragma argsused
BOOL CCLIPSWrap::SetSlotValue(String* Class, String* Slot, String* Value)
{
return 0;
}
//not implemented
#pragma argsused
BOOL CCLIPSWrap::GetSlotValue(String* Class, String* Slot, String* Value)
{
return 0;
}
/****************************************************************************
Function : CCLIPSWrap::CLIPSRouteCommand(String* Command)
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.
Returns : TRUE on success, FALSE on Error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSRouteCommand(String* Command)
{
CLEARMBUF
Command->copy(m_buf);
return (dl_RouteCommand)(m_buf);
}
/****************************************************************************
Function : CCLIPSWrap::ReadFactSlot(String* Slot, String* 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(String* Slot, String* Data)
{
struct dataObject *theValue;
struct dataObject question_slot;
long temp_l = 0;
double temp_f = 0.0;
CLEARMBUF
if (factPtr) {
Slot->copy(m_buf);
if ((dl_GetFactSlot)(factPtr,m_buf,&question_slot) == 1) {
theValue = (struct dataObject *)GetValue (question_slot);
switch (theValue->type) {
case INTEGER:
temp_l = ValueToLong(theValue);
sprintf(m_buf,"%ld",temp_l);
break;
case FLOAT:
temp_f = ValueToDouble(theValue);
sprintf(m_buf,"%lf",temp_f);
break;
case SYMBOL:
case STRING:
default:
strcpy(m_buf,(char *)ValueToString(theValue));
break;
}
Data->assign(m_buf);
return 1;
}
}
return 0;
}
/****************************************************************************
Function : CCLIPSWrap::WriteFactSlot(String* Slot, String* Data)
Author : Mark Tomlinson
Desc. : Write a vaule to a slot on the d
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -