📄 globlbin.c
字号:
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 + -