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

📄 dffctbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
   struct deffacts *theDeffacts;   struct bsaveDeffacts newDeffacts;   struct defmodule *theModule;   struct bsaveDeffactsModule tempDeffactsModule;   struct deffactsModule *theModuleItem;   /*=========================================================*/   /* Write out the amount of space taken up by the deffacts  */   /* and deffactsModule data structures in the binary image. */   /*=========================================================*/   space = DeffactsBinaryData(theEnv)->NumberOfDeffacts * sizeof(struct bsaveDeffacts) +           (DeffactsBinaryData(theEnv)->NumberOfDeffactsModules * sizeof(struct bsaveDeffactsModule));   GenWrite(&space,sizeof(size_t),fp);   /*================================================*/   /* Write out each deffacts module data structure. */   /*================================================*/   DeffactsBinaryData(theEnv)->NumberOfDeffacts = 0;   for (theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);        theModule != NULL;        theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,theModule))     {      EnvSetCurrentModule(theEnv,(void *) theModule);      theModuleItem = (struct deffactsModule *) GetModuleItem(theEnv,NULL,DeffactsData(theEnv)->DeffactsModuleIndex);      AssignBsaveDefmdlItemHdrVals(&tempDeffactsModule.header,&theModuleItem->header);      GenWrite(&tempDeffactsModule,(unsigned long) sizeof(struct bsaveDeffactsModule),fp);     }   /*==========================*/   /* Write out each deffacts. */   /*==========================*/   for (theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);        theModule != NULL;        theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,theModule))     {      EnvSetCurrentModule(theEnv,(void *) theModule);      for (theDeffacts = (struct deffacts *) EnvGetNextDeffacts(theEnv,NULL);           theDeffacts != NULL;           theDeffacts = (struct deffacts *) EnvGetNextDeffacts(theEnv,theDeffacts))        {         AssignBsaveConstructHeaderVals(&newDeffacts.header,&theDeffacts->header);         if (theDeffacts->assertList != NULL)           {            newDeffacts.assertList = ExpressionData(theEnv)->ExpressionCount;            ExpressionData(theEnv)->ExpressionCount += ExpressionSize(theDeffacts->assertList);           }         else           { newDeffacts.assertList = -1L; }         GenWrite(&newDeffacts,(unsigned long) sizeof(struct bsaveDeffacts),fp);        }     }   /*=============================================================*/   /* If a binary image was already loaded when the bsave command */   /* was issued, then restore the counts indicating the number   */   /* of deffacts and deffacts modules in the binary image (these */   /* were overwritten by the binary save).                       */   /*=============================================================*/   RestoreBloadCount(theEnv,&DeffactsBinaryData(theEnv)->NumberOfDeffactsModules);   RestoreBloadCount(theEnv,&DeffactsBinaryData(theEnv)->NumberOfDeffacts);  }#endif /* BLOAD_AND_BSAVE *//****************************************************//* BloadStorage: Allocates storage requirements for *//*   the deffacts used by this binary image.        *//****************************************************/static void BloadStorage(  void *theEnv)  {   size_t space;   /*=====================================================*/   /* Determine the number of deffacts and deffactsModule */   /* data structures to be read.                         */   /*=====================================================*/   GenReadBinary(theEnv,&space,sizeof(size_t));   GenReadBinary(theEnv,&DeffactsBinaryData(theEnv)->NumberOfDeffacts,sizeof(long int));   GenReadBinary(theEnv,&DeffactsBinaryData(theEnv)->NumberOfDeffactsModules,sizeof(long int));   /*===================================*/   /* Allocate the space needed for the */   /* deffactsModule data structures.   */   /*===================================*/   if (DeffactsBinaryData(theEnv)->NumberOfDeffactsModules == 0)     {      DeffactsBinaryData(theEnv)->DeffactsArray = NULL;      DeffactsBinaryData(theEnv)->ModuleArray = NULL;      return;     }   space = DeffactsBinaryData(theEnv)->NumberOfDeffactsModules * sizeof(struct deffactsModule);   DeffactsBinaryData(theEnv)->ModuleArray = (struct deffactsModule *) genalloc(theEnv,space);   /*===================================*/   /* Allocate the space needed for the */   /* deffacts data structures.         */   /*===================================*/   if (DeffactsBinaryData(theEnv)->NumberOfDeffacts == 0)     {      DeffactsBinaryData(theEnv)->DeffactsArray = NULL;      return;     }   space = (DeffactsBinaryData(theEnv)->NumberOfDeffacts * sizeof(struct deffacts));   DeffactsBinaryData(theEnv)->DeffactsArray = (struct deffacts *) genalloc(theEnv,space);  }/*****************************************************//* BloadBinaryItem: Loads and refreshes the deffacts *//*   constructs used by this binary image.           *//*****************************************************/static void BloadBinaryItem(  void *theEnv)  {   size_t space;   /*======================================================*/   /* Read in the amount of space used by the binary image */   /* (this is used to skip the construct in the event it  */   /* is not available in the version being run).          */   /*======================================================*/   GenReadBinary(theEnv,&space,sizeof(size_t));   /*============================================*/   /* Read in the deffactsModule data structures */   /* and refresh the pointers.                  */   /*============================================*/   BloadandRefresh(theEnv,DeffactsBinaryData(theEnv)->NumberOfDeffactsModules,                   sizeof(struct bsaveDeffactsModule),UpdateDeffactsModule);   /*======================================*/   /* Read in the deffacts data structures */   /* and refresh the pointers.            */   /*======================================*/   BloadandRefresh(theEnv,DeffactsBinaryData(theEnv)->NumberOfDeffacts,                   sizeof(struct bsaveDeffacts),UpdateDeffacts);  }/***************************************************//* UpdateDeffactsModule: Bload refresh routine for *//*   deffacts module data structures.              *//***************************************************/static void UpdateDeffactsModule(  void *theEnv,  void *buf,  long obji)  {   struct bsaveDeffactsModule *bdmPtr;   bdmPtr = (struct bsaveDeffactsModule *) buf;   UpdateDefmoduleItemHeader(theEnv,&bdmPtr->header,&DeffactsBinaryData(theEnv)->ModuleArray[obji].header,                             (int) sizeof(struct deffacts),(void *) DeffactsBinaryData(theEnv)->DeffactsArray);  }/*********************************************//* UpdateDeffacts: Bload refresh routine for *//*   deffacts data structures.               *//*********************************************/static void UpdateDeffacts(  void *theEnv,  void *buf,  long obji)  {   struct bsaveDeffacts *bdp;   bdp = (struct bsaveDeffacts *) buf;   UpdateConstructHeader(theEnv,&bdp->header,&DeffactsBinaryData(theEnv)->DeffactsArray[obji].header,                         (int) sizeof(struct deffactsModule),(void *) DeffactsBinaryData(theEnv)->ModuleArray,                         (int) sizeof(struct deffacts),(void *) DeffactsBinaryData(theEnv)->DeffactsArray);   DeffactsBinaryData(theEnv)->DeffactsArray[obji].assertList = ExpressionPointer(bdp->assertList);  }/**************************************//* ClearBload: Deffacts clear routine *//*   when a binary load is in effect. *//**************************************/static void ClearBload(  void *theEnv)  {   long i;   size_t space;   /*=============================================*/   /* Decrement in use counters for atomic values */   /* contained in the construct headers.         */   /*=============================================*/   for (i = 0; i < DeffactsBinaryData(theEnv)->NumberOfDeffacts; i++)     { UnmarkConstructHeader(theEnv,&DeffactsBinaryData(theEnv)->DeffactsArray[i].header); }   /*=============================================================*/   /* Deallocate the space used for the deffacts data structures. */   /*=============================================================*/   space = DeffactsBinaryData(theEnv)->NumberOfDeffacts * sizeof(struct deffacts);   if (space != 0) genfree(theEnv,(void *) DeffactsBinaryData(theEnv)->DeffactsArray,space);   DeffactsBinaryData(theEnv)->NumberOfDeffacts = 0;      /*====================================================================*/   /* Deallocate the space used for the deffacts module data structures. */   /*====================================================================*/   space = DeffactsBinaryData(theEnv)->NumberOfDeffactsModules * sizeof(struct deffactsModule);   if (space != 0) genfree(theEnv,(void *) DeffactsBinaryData(theEnv)->ModuleArray,space);   DeffactsBinaryData(theEnv)->NumberOfDeffactsModules = 0;  }/******************************************************//* BloadDeffactsModuleReference: Returns the deffacts *//*   module pointer for use with the bload function.  *//******************************************************/globle void *BloadDeffactsModuleReference(  void *theEnv,  int theIndex)  {   return ((void *) &DeffactsBinaryData(theEnv)->ModuleArray[theIndex]);  }#endif /* DEFFACTS_CONSTRUCT && (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) && (! RUN_TIME) */

⌨️ 快捷键说明

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