?? dffnxbin.c
字號:
INPUTS : File pointer of binary file RETURNS : Nothing useful SIDE EFFECTS : Binary file adjusted NOTES : None ***********************************************************/static void BsaveStorageDeffunctions( void *theEnv, FILE *fp) { size_t space; space = sizeof(unsigned long) * 2; GenWrite((void *) &space,sizeof(size_t),fp); GenWrite((void *) &DeffunctionBinaryData(theEnv)->ModuleCount,sizeof(unsigned long),fp); GenWrite((void *) &DeffunctionBinaryData(theEnv)->DeffunctionCount,sizeof(unsigned long),fp); }/************************************************************************************* NAME : BsaveDeffunctions DESCRIPTION : Writes out deffunction in binary format Space required (unsigned long) All deffunctions (sizeof(DEFFUNCTION) * Number of deffunctions) INPUTS : File pointer of binary file RETURNS : Nothing useful SIDE EFFECTS : Binary file adjusted NOTES : None *************************************************************************************/static void BsaveDeffunctions( void *theEnv, FILE *fp) { size_t space; struct defmodule *theModule; DEFFUNCTION_MODULE *theModuleItem; BSAVE_DEFFUNCTION_MODULE dummy_mitem; space = ((sizeof(BSAVE_DEFFUNCTION_MODULE) * DeffunctionBinaryData(theEnv)->ModuleCount) + (sizeof(BSAVE_DEFFUNCTION) * DeffunctionBinaryData(theEnv)->DeffunctionCount)); GenWrite((void *) &space,sizeof(size_t),fp); /* ================================= Write out each deffunction module ================================= */ DeffunctionBinaryData(theEnv)->DeffunctionCount = 0L; theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL); while (theModule != NULL) { theModuleItem = (DEFFUNCTION_MODULE *) GetModuleItem(theEnv,theModule,FindModuleItem(theEnv,"deffunction")->moduleIndex); AssignBsaveDefmdlItemHdrVals(&dummy_mitem.header,&theModuleItem->header); GenWrite((void *) &dummy_mitem,sizeof(BSAVE_DEFFUNCTION_MODULE),fp); theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,(void *) theModule); } /* ========================== Write out each deffunction ========================== */ DoForAllConstructs(theEnv,BsaveDeffunction,DeffunctionData(theEnv)->DeffunctionModuleIndex, FALSE,(void *) fp); RestoreBloadCount(theEnv,&DeffunctionBinaryData(theEnv)->ModuleCount); RestoreBloadCount(theEnv,&DeffunctionBinaryData(theEnv)->DeffunctionCount); }/*************************************************** NAME : BsaveDeffunction DESCRIPTION : Bsaves a deffunction INPUTS : 1) The deffunction 2) Output data file pointer RETURNS : Nothing useful SIDE EFFECTS : Deffunction saved NOTES : None ***************************************************/static void BsaveDeffunction( void *theEnv, struct constructHeader *theDeffunction, void *userBuffer) { DEFFUNCTION *dptr = (DEFFUNCTION *) theDeffunction; BSAVE_DEFFUNCTION dummy_df; AssignBsaveConstructHeaderVals(&dummy_df.header,&dptr->header); dummy_df.minNumberOfParameters = dptr->minNumberOfParameters; dummy_df.maxNumberOfParameters = dptr->maxNumberOfParameters; dummy_df.numberOfLocalVars = dptr->numberOfLocalVars; if (dptr->code != NULL) { dummy_df.code = ExpressionData(theEnv)->ExpressionCount; ExpressionData(theEnv)->ExpressionCount += ExpressionSize(dptr->code); } else dummy_df.code = -1L; GenWrite((void *) &dummy_df,sizeof(BSAVE_DEFFUNCTION),(FILE *) userBuffer); }#endif/*********************************************************************** NAME : BloadStorageDeffunctions DESCRIPTION : This routine space required for deffunction structures and allocates space for them INPUTS : Nothing RETURNS : Nothing useful SIDE EFFECTS : Arrays allocated and set NOTES : This routine makes no attempt to reset any pointers within the structures ***********************************************************************/static void BloadStorageDeffunctions( void *theEnv) { size_t space; GenReadBinary(theEnv,(void *) &space,sizeof(size_t)); if (space == 0L) return; GenReadBinary(theEnv,(void *) &DeffunctionBinaryData(theEnv)->ModuleCount,sizeof(unsigned long)); GenReadBinary(theEnv,(void *) &DeffunctionBinaryData(theEnv)->DeffunctionCount,sizeof(unsigned long)); if (DeffunctionBinaryData(theEnv)->ModuleCount == 0L) { DeffunctionBinaryData(theEnv)->ModuleArray = NULL; DeffunctionBinaryData(theEnv)->DeffunctionArray = NULL; return; } space = (DeffunctionBinaryData(theEnv)->ModuleCount * sizeof(DEFFUNCTION_MODULE)); DeffunctionBinaryData(theEnv)->ModuleArray = (DEFFUNCTION_MODULE *) genalloc(theEnv,space); if (DeffunctionBinaryData(theEnv)->DeffunctionCount == 0L) { DeffunctionBinaryData(theEnv)->DeffunctionArray = NULL; return; } space = (DeffunctionBinaryData(theEnv)->DeffunctionCount * sizeof(DEFFUNCTION)); DeffunctionBinaryData(theEnv)->DeffunctionArray = (DEFFUNCTION *) genalloc(theEnv,space); }/********************************************************************* NAME : BloadDeffunctions DESCRIPTION : This routine reads deffunction information from a binary file This routine moves through the deffunction binary array updating pointers INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : Pointers reset from array indices NOTES : Assumes all loading is finished ********************************************************************/static void BloadDeffunctions( void *theEnv) { size_t space; GenReadBinary(theEnv,(void *) &space,sizeof(size_t)); BloadandRefresh(theEnv,DeffunctionBinaryData(theEnv)->ModuleCount,sizeof(BSAVE_DEFFUNCTION_MODULE),UpdateDeffunctionModule); BloadandRefresh(theEnv,DeffunctionBinaryData(theEnv)->DeffunctionCount,sizeof(BSAVE_DEFFUNCTION),UpdateDeffunction); }/******************************************************* NAME : UpdateDeffunctionModule DESCRIPTION : Updates deffunction module with binary load data - sets pointers from offset information INPUTS : 1) A pointer to the bloaded data 2) The index of the binary array element to update RETURNS : Nothing useful SIDE EFFECTS : Deffunction moudle pointers updated NOTES : None *******************************************************/static void UpdateDeffunctionModule( void *theEnv, void *buf, long obji) { BSAVE_DEFFUNCTION_MODULE *bdptr; bdptr = (BSAVE_DEFFUNCTION_MODULE *) buf; UpdateDefmoduleItemHeader(theEnv,&bdptr->header,&DeffunctionBinaryData(theEnv)->ModuleArray[obji].header, (int) sizeof(DEFFUNCTION),(void *) DeffunctionBinaryData(theEnv)->DeffunctionArray); }/*************************************************** NAME : UpdateDeffunction DESCRIPTION : Updates deffunction with binary load data - sets pointers from offset information INPUTS : 1) A pointer to the bloaded data 2) The index of the binary array element to update RETURNS : Nothing useful SIDE EFFECTS : Deffunction pointers upadted NOTES : None ***************************************************/static void UpdateDeffunction( void *theEnv, void *buf, long obji) { BSAVE_DEFFUNCTION *bdptr; DEFFUNCTION *dptr; bdptr = (BSAVE_DEFFUNCTION *) buf; dptr = (DEFFUNCTION *) &DeffunctionBinaryData(theEnv)->DeffunctionArray[obji]; UpdateConstructHeader(theEnv,&bdptr->header,&dptr->header, (int) sizeof(DEFFUNCTION_MODULE),(void *) DeffunctionBinaryData(theEnv)->ModuleArray, (int) sizeof(DEFFUNCTION),(void *) DeffunctionBinaryData(theEnv)->DeffunctionArray); dptr->code = ExpressionPointer(bdptr->code); dptr->busy = 0; dptr->executing = 0;#if DEBUGGING_FUNCTIONS dptr->trace = (unsigned short) DeffunctionData(theEnv)->WatchDeffunctions;#endif dptr->minNumberOfParameters = bdptr->minNumberOfParameters; dptr->maxNumberOfParameters = bdptr->maxNumberOfParameters; dptr->numberOfLocalVars = bdptr->numberOfLocalVars; }/*************************************************************** NAME : ClearDeffunctionBload DESCRIPTION : Release all binary-loaded deffunction structure arrays Resets deffunction list to NULL INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : Memory cleared NOTES : Deffunction name symbol counts decremented ***************************************************************/static void ClearDeffunctionBload( void *theEnv) { register long i; size_t space; space = (sizeof(DEFFUNCTION_MODULE) * DeffunctionBinaryData(theEnv)->ModuleCount); if (space == 0L) return; genfree(theEnv,(void *) DeffunctionBinaryData(theEnv)->ModuleArray,space); DeffunctionBinaryData(theEnv)->ModuleArray = NULL; DeffunctionBinaryData(theEnv)->ModuleCount = 0L; for (i = 0L ; i < DeffunctionBinaryData(theEnv)->DeffunctionCount ; i++) UnmarkConstructHeader(theEnv,&DeffunctionBinaryData(theEnv)->DeffunctionArray[i].header); space = (sizeof(DEFFUNCTION) * DeffunctionBinaryData(theEnv)->DeffunctionCount); if (space == 0L) return; genfree(theEnv,(void *) DeffunctionBinaryData(theEnv)->DeffunctionArray,space); DeffunctionBinaryData(theEnv)->DeffunctionArray = NULL; DeffunctionBinaryData(theEnv)->DeffunctionCount = 0L; }#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -