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

📄 globlbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
      theModuleItem = (struct defglobalModule *)                      GetModuleItem(theEnv,NULL,FindModuleItem(theEnv,"defglobal")->moduleIndex);      AssignBsaveDefmdlItemHdrVals(&tempDefglobalModule.header,                                           &theModuleItem->header);      GenWrite(&tempDefglobalModule,sizeof(struct bsaveDefglobalModule),fp);     }   /*===========================*/   /* Write out each defglobal. */   /*===========================*/   DefglobalBinaryData(theEnv)->NumberOfDefglobals = 0;   for (theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);        theModule != NULL;        theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,theModule))     {      EnvSetCurrentModule(theEnv,(void *) theModule);      for (theDefglobal = (struct defglobal *) EnvGetNextDefglobal(theEnv,NULL);           theDefglobal != NULL;           theDefglobal = (struct defglobal *) EnvGetNextDefglobal(theEnv,theDefglobal))        {         AssignBsaveConstructHeaderVals(&newDefglobal.header,                                          &theDefglobal->header);         newDefglobal.initial = HashedExpressionIndex(theEnv,theDefglobal->initial);         GenWrite(&newDefglobal,sizeof(struct bsaveDefglobal),fp);        }     }   /*=============================================================*/   /* If a binary image was already loaded when the bsave command */   /* was issued, then restore the counts indicating the number   */   /* of defglobals and defglobal modules in the binary image     */   /* (these were overwritten by the binary save).                */   /*=============================================================*/   RestoreBloadCount(theEnv,&DefglobalBinaryData(theEnv)->NumberOfDefglobalModules);   RestoreBloadCount(theEnv,&DefglobalBinaryData(theEnv)->NumberOfDefglobals);  }#endif /* BLOAD_AND_BSAVE *//***********************************************//* BloadStorageDefglobals: Allocates space for *//*   the defglobals used by this binary image. *//***********************************************/static void BloadStorageDefglobals(  void *theEnv)  {   size_t space;   /*=======================================================*/   /* Determine the number of defglobal and defglobalModule */   /* data structures to be read.                           */   /*=======================================================*/   GenReadBinary(theEnv,&space,sizeof(size_t));   GenReadBinary(theEnv,&DefglobalBinaryData(theEnv)->NumberOfDefglobals,sizeof(long int));   GenReadBinary(theEnv,&DefglobalBinaryData(theEnv)->NumberOfDefglobalModules,sizeof(long int));   /*===================================*/   /* Allocate the space needed for the */   /* defglobalModule data structures.  */   /*===================================*/   if (DefglobalBinaryData(theEnv)->NumberOfDefglobalModules == 0)     {      DefglobalBinaryData(theEnv)->DefglobalArray = NULL;      DefglobalBinaryData(theEnv)->ModuleArray = NULL;     }   space = DefglobalBinaryData(theEnv)->NumberOfDefglobalModules * sizeof(struct defglobalModule);   DefglobalBinaryData(theEnv)->ModuleArray = (struct defglobalModule *) genalloc(theEnv,space);   /*===================================*/   /* Allocate the space needed for the */   /* defglobal data structures.        */   /*===================================*/   if (DefglobalBinaryData(theEnv)->NumberOfDefglobals == 0)     {      DefglobalBinaryData(theEnv)->DefglobalArray = NULL;      return;     }   space = (DefglobalBinaryData(theEnv)->NumberOfDefglobals * sizeof(struct defglobal));   DefglobalBinaryData(theEnv)->DefglobalArray = (struct defglobal *) genalloc(theEnv,space);  }/******************************************************//* BloadBinaryItem: Loads and refreshes the defglobal *//*   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 defglobalModule data structures */   /* and refresh the pointers.                   */   /*=============================================*/   BloadandRefresh(theEnv,DefglobalBinaryData(theEnv)->NumberOfDefglobalModules,                   sizeof(struct bsaveDefglobalModule),                   UpdateDefglobalModule);   /*=======================================*/   /* Read in the defglobal data structures */   /* and refresh the pointers.             */   /*=======================================*/   BloadandRefresh(theEnv,DefglobalBinaryData(theEnv)->NumberOfDefglobals,                   sizeof(struct bsaveDefglobal),                   UpdateDefglobal);  }/************************************************//* UpdateDefglobalModule: Bload refresh routine *//*   for defglobal module data structures.      *//************************************************/static void UpdateDefglobalModule(  void *theEnv,  void *buf,  long obji)  {   struct bsaveDefglobalModule *bdmPtr;   bdmPtr = (struct bsaveDefglobalModule *) buf;   UpdateDefmoduleItemHeader(theEnv,&bdmPtr->header,&DefglobalBinaryData(theEnv)->ModuleArray[obji].header,                             (int) sizeof(struct defglobal),                             (void *) DefglobalBinaryData(theEnv)->DefglobalArray);  }/******************************************//* UpdateDefglobal: Bload refresh routine *//*   for defglobal data structures.       *//******************************************/static void UpdateDefglobal(  void *theEnv,  void *buf,  long obji)  {   struct bsaveDefglobal *bdp;   bdp = (struct bsaveDefglobal *) buf;   UpdateConstructHeader(theEnv,&bdp->header,&DefglobalBinaryData(theEnv)->DefglobalArray[obji].header,                         (int) sizeof(struct defglobalModule),(void *) DefglobalBinaryData(theEnv)->ModuleArray,                         (int) sizeof(struct defglobal),(void *) DefglobalBinaryData(theEnv)->DefglobalArray);#if DEBUGGING_FUNCTIONS   DefglobalBinaryData(theEnv)->DefglobalArray[obji].watch = WatchGlobals;#endif   DefglobalBinaryData(theEnv)->DefglobalArray[obji].initial = HashedExpressionPointer(bdp->initial);   DefglobalBinaryData(theEnv)->DefglobalArray[obji].current.type = RVOID;  }/***************************************//* ClearBload: Defglobal 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. Also decrement data         */   /* structures used to store the defglobal's value.       */   /*=======================================================*/   for (i = 0; i < DefglobalBinaryData(theEnv)->NumberOfDefglobals; i++)     {      UnmarkConstructHeader(theEnv,&DefglobalBinaryData(theEnv)->DefglobalArray[i].header);      ValueDeinstall(theEnv,&(DefglobalBinaryData(theEnv)->DefglobalArray[i].current));      if (DefglobalBinaryData(theEnv)->DefglobalArray[i].current.type == MULTIFIELD)        { ReturnMultifield(theEnv,(struct multifield *) DefglobalBinaryData(theEnv)->DefglobalArray[i].current.value); }     }   /*==============================================================*/   /* Deallocate the space used for the defglobal data structures. */   /*==============================================================*/   space = DefglobalBinaryData(theEnv)->NumberOfDefglobals * sizeof(struct defglobal);   if (space != 0) genfree(theEnv,(void *) DefglobalBinaryData(theEnv)->DefglobalArray,space);   DefglobalBinaryData(theEnv)->NumberOfDefglobals = 0;      /*=====================================================================*/   /* Deallocate the space used for the defglobal module data structures. */   /*=====================================================================*/   space = DefglobalBinaryData(theEnv)->NumberOfDefglobalModules * sizeof(struct defglobalModule);   if (space != 0) genfree(theEnv,(void *) DefglobalBinaryData(theEnv)->ModuleArray,space);   DefglobalBinaryData(theEnv)->NumberOfDefglobalModules = 0;  }/********************************************************//* BloadDefglobalModuleReference: Returns the defglobal *//*   module pointer for using with the bload function.  *//********************************************************/globle void *BloadDefglobalModuleReference(  void *theEnv,  int theIndex)  {   return ((void *) &DefglobalBinaryData(theEnv)->ModuleArray[theIndex]);  }#endif /* DEFGLOBAL_CONSTRUCT && (BLOAD || BLOAD_AND_BSAVE || BLOAD_ONLY) && (! RUN_TIME) */

⌨️ 快捷键说明

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