objrtcmp.c

来自「clips源代码」· C语言 代码 · 共 507 行 · 第 1/2 页

C
507
字号
  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,%u,0L,%u,",thePattern->multifieldNode,                                        thePattern->endSlot,                                        thePattern->selector,                                        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 + =
减小字号Ctrl + -
显示快捷键?