📄 developr.c
字号:
/*========================*/
/* Print the information. */
/*========================*/
EnvPrintRouter(theEnv,WDISPLAY,"Total Symbols: ");
PrintLongInteger(theEnv,WDISPLAY,(long) totalSymbolCount);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
for (i = 0; i < COUNT_SIZE; i++)
{
PrintLongInteger(theEnv,WDISPLAY,(long) i);
EnvPrintRouter(theEnv,WDISPLAY," ");
PrintLongInteger(theEnv,WDISPLAY,(long) symbolCounts[i]);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
}
EnvPrintRouter(theEnv,WDISPLAY,"\nTotal Floats: ");
PrintLongInteger(theEnv,WDISPLAY,(long) totalFloatCount);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
for (i = 0; i < COUNT_SIZE; i++)
{
PrintLongInteger(theEnv,WDISPLAY,(long) i);
EnvPrintRouter(theEnv,WDISPLAY," ");
PrintLongInteger(theEnv,WDISPLAY,(long) floatCounts[i]);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
}
}
#if DEFRULE_CONSTRUCT && DEFTEMPLATE_CONSTRUCT
/*******************************************************/
/* ShowFactPatternNetwork: Command for displaying the */
/* fact pattern network for a specified deftemplate. */
/*******************************************************/
globle void ShowFactPatternNetwork(
void *theEnv)
{
struct factPatternNode *patternPtr;
struct deftemplate *theDeftemplate;
char *theName;
int depth = 0, i;
theName = GetConstructName(theEnv,"show-fpn","template name");
if (theName == NULL) return;
theDeftemplate = (struct deftemplate *) EnvFindDeftemplate(theEnv,theName);
if (theDeftemplate == NULL) return;
patternPtr = theDeftemplate->patternNetwork;
while (patternPtr != NULL)
{
for (i = 0; i < depth; i++) EnvPrintRouter(theEnv,WDISPLAY," ");
if (patternPtr->header.singlefieldNode) EnvPrintRouter(theEnv,WDISPLAY,"SF ");
else if (patternPtr->header.multifieldNode)
{
EnvPrintRouter(theEnv,WDISPLAY,"MF");
if (patternPtr->header.endSlot) EnvPrintRouter(theEnv,WDISPLAY,")");
else EnvPrintRouter(theEnv,WDISPLAY,"*");
PrintLongInteger(theEnv,WDISPLAY,(long) patternPtr->leaveFields);
EnvPrintRouter(theEnv,WDISPLAY," ");
}
EnvPrintRouter(theEnv,WDISPLAY,"Slot: ");
PrintLongInteger(theEnv,WDISPLAY,(long) patternPtr->whichSlot);
EnvPrintRouter(theEnv,WDISPLAY," Field: ");
PrintLongInteger(theEnv,WDISPLAY,(long) patternPtr->whichField);
EnvPrintRouter(theEnv,WDISPLAY," Expression: ");
if (patternPtr->networkTest == NULL) EnvPrintRouter(theEnv,WDISPLAY,"None");
else PrintExpression(theEnv,WDISPLAY,patternPtr->networkTest);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
if (patternPtr->nextLevel == NULL)
{
while (patternPtr->rightNode == NULL)
{
patternPtr = patternPtr->lastLevel;
depth--;
if (patternPtr == NULL) return;
}
patternPtr = patternPtr->rightNode;
}
else
{
patternPtr = patternPtr->nextLevel;
depth++;
}
}
}
#endif
#if DEFRULE_CONSTRUCT && OBJECT_SYSTEM
/***************************************************
NAME : PrintObjectPatternNetwork
DESCRIPTION : Displays an indented printout of
the object pattern network
INPUTS : None
RETURNS : Nothing useful
SIDE EFFECTS : Object pattern network displayed
NOTES : None
***************************************************/
globle void PrintObjectPatternNetwork(
void *theEnv)
{
char indentbuf[80];
indentbuf[0] = '\0';
PrintOPNLevel(theEnv,ObjectNetworkPointer(theEnv),indentbuf,0);
}
/**********************************************************
NAME : PrintOPNLevel
DESCRIPTION : Recursivley prints object pattern network
INPUTS : 1) The current object pattern network node
2) A buffer holding preceding indentation
text showing the level in the tree
3) The length of the indentation text
RETURNS : Nothing useful
SIDE EFFECTS : Pattern nodes recursively printed
NOTES : None
**********************************************************/
static void PrintOPNLevel(
void *theEnv,
OBJECT_PATTERN_NODE *pptr,
char *indentbuf,
int ilen)
{
CLASS_BITMAP *cbmp;
SLOT_BITMAP *sbmp;
register unsigned i;
OBJECT_PATTERN_NODE *uptr;
OBJECT_ALPHA_NODE *alphaPtr;
while (pptr != NULL)
{
EnvPrintRouter(theEnv,WDISPLAY,indentbuf);
if (pptr->alphaNode != NULL)
EnvPrintRouter(theEnv,WDISPLAY,"+");
EnvPrintRouter(theEnv,WDISPLAY,ValueToString(FindIDSlotName(theEnv,pptr->slotNameID)));
EnvPrintRouter(theEnv,WDISPLAY," (");
PrintLongInteger(theEnv,WDISPLAY,(long) pptr->slotNameID);
EnvPrintRouter(theEnv,WDISPLAY,") ");
EnvPrintRouter(theEnv,WDISPLAY,pptr->endSlot ? "EPF#" : "PF#");
PrintLongInteger(theEnv,WDISPLAY,(long) pptr->whichField);
EnvPrintRouter(theEnv,WDISPLAY," ");
EnvPrintRouter(theEnv,WDISPLAY,pptr->multifieldNode ? "$? " : "? ");
if (pptr->networkTest != NULL)
PrintExpression(theEnv,WDISPLAY,pptr->networkTest);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
alphaPtr = pptr->alphaNode;
while (alphaPtr != NULL)
{
EnvPrintRouter(theEnv,WDISPLAY,indentbuf);
EnvPrintRouter(theEnv,WDISPLAY," Classes:");
cbmp = (CLASS_BITMAP *) ValueToBitMap(alphaPtr->classbmp);
for (i = 0 ; i <= cbmp->maxid ; i++)
if (TestBitMap(cbmp->map,i))
{
EnvPrintRouter(theEnv,WDISPLAY," ");
EnvPrintRouter(theEnv,WDISPLAY,EnvGetDefclassName(theEnv,(void *) DefclassData(theEnv)->ClassIDMap[i]));
}
if (alphaPtr->slotbmp != NULL)
{
sbmp = (SLOT_BITMAP *) ValueToBitMap(pptr->alphaNode->slotbmp);
EnvPrintRouter(theEnv,WDISPLAY," *** Slots:");
for (i = NAME_ID ; i <= sbmp->maxid ; i++)
if (TestBitMap(sbmp->map,i))
{
for (uptr = pptr ; uptr != NULL ; uptr = uptr->lastLevel)
if (uptr->slotNameID == i)
break;
if (uptr == NULL)
{
EnvPrintRouter(theEnv,WDISPLAY," ");
EnvPrintRouter(theEnv,WDISPLAY,ValueToString(FindIDSlotName(theEnv,i)));
}
}
}
EnvPrintRouter(theEnv,WDISPLAY,"\n");
alphaPtr = alphaPtr->nxtInGroup;
}
indentbuf[ilen++] = (char) ((pptr->rightNode != NULL) ? '|' : ' ');
indentbuf[ilen++] = ' ';
indentbuf[ilen++] = ' ';
indentbuf[ilen] = '\0';
PrintOPNLevel(theEnv,pptr->nextLevel,indentbuf,ilen);
ilen -= 3;
indentbuf[ilen] = '\0';
pptr = pptr->rightNode;
}
}
#endif
#if OBJECT_SYSTEM
/******************************************************/
/* InstanceTableUsage: Prints information about the */
/* instances in the instance hash table. */
/******************************************************/
globle void InstanceTableUsage(
void *theEnv)
{
unsigned long i;
int instanceCounts[COUNT_SIZE];
INSTANCE_TYPE *ins;
unsigned long int instanceCount, totalInstanceCount = 0;
EnvArgCountCheck(theEnv,"instance-table-usage",EXACTLY,0);
for (i = 0; i < COUNT_SIZE; i++)
{ instanceCounts[i] = 0; }
/*======================================*/
/* Count entries in the instance table. */
/*======================================*/
for (i = 0; i < INSTANCE_TABLE_HASH_SIZE; i++)
{
instanceCount = 0;
for (ins = InstanceData(theEnv)->InstanceTable[i]; ins != NULL; ins = ins->nxtHash)
{
instanceCount++;
totalInstanceCount++;
}
if (instanceCount < (COUNT_SIZE - 1))
{ instanceCounts[instanceCount]++; }
else
{ instanceCounts[COUNT_SIZE - 1]++; }
}
/*========================*/
/* Print the information. */
/*========================*/
EnvPrintRouter(theEnv,WDISPLAY,"Total Instances: ");
PrintLongInteger(theEnv,WDISPLAY,(long) totalInstanceCount);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
for (i = 0; i < COUNT_SIZE; i++)
{
PrintLongInteger(theEnv,WDISPLAY,(long) i);
EnvPrintRouter(theEnv,WDISPLAY," ");
PrintLongInteger(theEnv,WDISPLAY,(long) instanceCounts[i]);
EnvPrintRouter(theEnv,WDISPLAY,"\n");
}
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -