📄 objrtcmp.c
字号:
char *fileName,
int fileID,
FILE *headerFP,
int imageID,
int maxIndices)
{
int version;
version = IntermediatePatternNodesToCode(theEnv,fileName,fileID,
headerFP,imageID,maxIndices,1);
if (version == 0)
return(0);
if (! AlphaPatternNodesToCode(theEnv,fileName,fileID,headerFP,imageID,maxIndices,version))
return(0);
return(1);
}
/***************************************************
NAME : IntermediatePatternNodeReference
DESCRIPTION : Prints out a reference to an
object pattern intermediate node
INPUTS : 1) A pointer to the object pattern
intermediate node
2) A pointer to the output file
3) The id of constructs-to-c image
4) The maximum number of indices
allowed in any single array
in the image
RETURNS : 1 if OK, 0 if could not open a file
SIDE EFFECTS : Reference to object pattern alpha
memory printed
NOTES : None
***************************************************/
static void IntermediatePatternNodeReference(
void *theEnv,
OBJECT_PATTERN_NODE *thePattern,
FILE *theFile,
int imageID,
int maxIndices)
{
if (thePattern == NULL)
fprintf(theFile,"NULL");
else
{
fprintf(theFile,"&%s%d_%d[%d]",
ObjectPNPrefix(),imageID,
(((int) thePattern->bsaveID) / maxIndices) + 1,
((int) thePattern->bsaveID) % maxIndices);
}
}
/*************************************************************
NAME : IntermediatePatternNodesToCode
DESCRIPTION : Writes out data structures for run-time
creation of object pattern intermediate nodes
INPUTS : 1) The base image output file name
2) The base image file id
3) A pointer to the header output file
4) The id of constructs-to-c image
5) The maximum number of indices
allowed in any single array
in the image
RETURNS : Next version file to open, 0 if error
SIDE EFFECTS : Object patterns code written to files
NOTES : None
*************************************************************/
static int IntermediatePatternNodesToCode(
void *theEnv,
char *fileName,
int fileID,
FILE *headerFP,
int imageID,
int maxIndices,
int version)
{
FILE *fp;
int arrayVersion;
int newHeader;
int i;
OBJECT_PATTERN_NODE *thePattern;
/* ================
Create the file.
================ */
if (ObjectNetworkPointer(theEnv) == NULL)
return(1);
fprintf(headerFP,"#include \"objrtmch.h\"\n");
/* =================================
Dump the pattern node structures.
================================= */
if ((fp = NewCFile(theEnv,fileName,fileID,version,FALSE)) == NULL)
return(0);
newHeader = TRUE;
arrayVersion = 1;
i = 1;
thePattern = ObjectNetworkPointer(theEnv);
while (thePattern != NULL)
{
if (newHeader)
{
fprintf(fp,"OBJECT_PATTERN_NODE %s%d_%d[] = {\n",
ObjectPNPrefix(),imageID,arrayVersion);
fprintf(headerFP,"extern OBJECT_PATTERN_NODE %s%d_%d[];\n",
ObjectPNPrefix(),imageID,arrayVersion);
newHeader = FALSE;
}
fprintf(fp,"{0,%u,%u,%u,%u,0L,%u,",thePattern->multifieldNode,
thePattern->endSlot,
thePattern->whichField,
thePattern->leaveFields,
thePattern->slotNameID);
PrintHashedExpressionReference(theEnv,fp,thePattern->networkTest,imageID,maxIndices);
fprintf(fp,",");
IntermediatePatternNodeReference(theEnv,thePattern->nextLevel,fp,imageID,maxIndices);
fprintf(fp,",");
IntermediatePatternNodeReference(theEnv,thePattern->lastLevel,fp,imageID,maxIndices);
fprintf(fp,",");
IntermediatePatternNodeReference(theEnv,thePattern->leftNode,fp,imageID,maxIndices);
fprintf(fp,",");
IntermediatePatternNodeReference(theEnv,thePattern->rightNode,fp,imageID,maxIndices);
fprintf(fp,",");
ObjectPatternNodeReference(theEnv,(void *) thePattern->alphaNode,fp,imageID,maxIndices);
fprintf(fp,",0L}");
i++;
thePattern = GetNextObjectPatternNode(thePattern);
if ((i > maxIndices) || (thePattern == NULL))
{
fprintf(fp,"};\n");
GenClose(theEnv,fp);
i = 1;
version++;
arrayVersion++;
if (thePattern != NULL)
{
if ((fp = NewCFile(theEnv,fileName,fileID,version,FALSE)) == NULL)
return(0);
newHeader = TRUE;
}
}
else if (thePattern != NULL)
{ fprintf(fp,",\n"); }
}
return(version);
}
/***********************************************************
NAME : AlphaPatternNodesToCode
DESCRIPTION : Writes out data structures for run-time
creation of object pattern alpha memories
INPUTS : 1) The base image output file name
2) The base image file id
3) A pointer to the header output file
4) The id of constructs-to-c image
5) The maximum number of indices
allowed in any single array
in the image
RETURNS : Next version file to open, 0 if error
SIDE EFFECTS : Object patterns code written to files
NOTES : None
***********************************************************/
static int AlphaPatternNodesToCode(
void *theEnv,
char *fileName,
int fileID,
FILE *headerFP,
int imageID,
int maxIndices,
int version)
{
FILE *fp;
int arrayVersion;
int newHeader;
int i;
OBJECT_ALPHA_NODE *thePattern;
/* ================
Create the file.
================ */
if (ObjectNetworkTerminalPointer(theEnv) == NULL)
return(version);
/* =================================
Dump the pattern node structures.
================================= */
if ((fp = NewCFile(theEnv,fileName,fileID,version,FALSE)) == NULL)
return(0);
newHeader = TRUE;
arrayVersion = 1;
i = 1;
thePattern = ObjectNetworkTerminalPointer(theEnv);
while (thePattern != NULL)
{
if (newHeader)
{
fprintf(fp,"OBJECT_ALPHA_NODE %s%d_%d[] = {\n",
ObjectANPrefix(),imageID,arrayVersion);
fprintf(headerFP,"extern OBJECT_ALPHA_NODE %s%d_%d[];\n",
ObjectANPrefix(),imageID,arrayVersion);
newHeader = FALSE;
}
fprintf(fp,"{");
PatternNodeHeaderToCode(theEnv,fp,&thePattern->header,imageID,maxIndices);
fprintf(fp,",0L,");
PrintBitMapReference(theEnv,fp,thePattern->classbmp);
fprintf(fp,",");
PrintBitMapReference(theEnv,fp,thePattern->slotbmp);
fprintf(fp,",");
IntermediatePatternNodeReference(theEnv,thePattern->patternNode,fp,imageID,maxIndices);
fprintf(fp,",");
ObjectPatternNodeReference(theEnv,thePattern->nxtInGroup,fp,imageID,maxIndices);
fprintf(fp,",");
ObjectPatternNodeReference(theEnv,thePattern->nxtTerminal,fp,imageID,maxIndices);
fprintf(fp,",0L}");
i++;
thePattern = thePattern->nxtTerminal;
if ((i > maxIndices) || (thePattern == NULL))
{
fprintf(fp,"};\n");
GenClose(theEnv,fp);
i = 1;
version++;
arrayVersion++;
if (thePattern != NULL)
{
if ((fp = NewCFile(theEnv,fileName,fileID,version,FALSE)) == NULL)
return(0);
newHeader = TRUE;
}
}
else if (thePattern != NULL)
{ fprintf(fp,",\n"); }
}
return(version);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -