📄 dfinsbin.c
字号:
NAME : BsaveStorageDefinstances
DESCRIPTION : Writes out number of each type of structure
required for definstances
Space required for counts (unsigned long)
INPUTS : File pointer of binary file
RETURNS : Nothing useful
SIDE EFFECTS : Binary file adjusted
NOTES : None
***********************************************************/
static void BsaveStorageDefinstances(
void *theEnv,
FILE *fp)
{
unsigned long space;
space = sizeof(unsigned long) * 2;
GenWrite((void *) &space,(unsigned long) sizeof(unsigned long),fp);
GenWrite((void *) &DefinstancesBinaryData(theEnv)->ModuleCount,(unsigned long) sizeof(long),fp);
GenWrite((void *) &DefinstancesBinaryData(theEnv)->DefinstancesCount,(unsigned long) sizeof(long),fp);
}
/*************************************************************************************
NAME : BsaveDefinstancesDriver
DESCRIPTION : Writes out definstances in binary format
Space required (unsigned long)
All definstances (sizeof(DEFINSTANCES) * Number of definstances)
INPUTS : File pointer of binary file
RETURNS : Nothing useful
SIDE EFFECTS : Binary file adjusted
NOTES : None
*************************************************************************************/
static void BsaveDefinstancesDriver(
void *theEnv,
FILE *fp)
{
unsigned long space;
struct defmodule *theModule;
DEFINSTANCES_MODULE *theModuleItem;
BSAVE_DEFINSTANCES_MODULE dummy_mitem;
space = (unsigned long) ((sizeof(BSAVE_DEFINSTANCES_MODULE) * DefinstancesBinaryData(theEnv)->ModuleCount) +
(sizeof(BSAVE_DEFINSTANCES) * DefinstancesBinaryData(theEnv)->DefinstancesCount));
GenWrite((void *) &space,(unsigned long) sizeof(unsigned long),fp);
/* =================================
Write out each definstances module
================================= */
DefinstancesBinaryData(theEnv)->DefinstancesCount = 0L;
theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);
while (theModule != NULL)
{
theModuleItem = (DEFINSTANCES_MODULE *)
GetModuleItem(theEnv,theModule,FindModuleItem(theEnv,"definstances")->moduleIndex);
AssignBsaveDefmdlItemHdrVals(&dummy_mitem.header,&theModuleItem->header);
GenWrite((void *) &dummy_mitem,(unsigned long) sizeof(BSAVE_DEFINSTANCES_MODULE),fp);
theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,(void *) theModule);
}
/* ==========================
Write out each definstances
========================== */
DoForAllConstructs(theEnv,BsaveDefinstances,DefinstancesData(theEnv)->DefinstancesModuleIndex,
FALSE,(void *) fp);
RestoreBloadCount(theEnv,&DefinstancesBinaryData(theEnv)->ModuleCount);
RestoreBloadCount(theEnv,&DefinstancesBinaryData(theEnv)->DefinstancesCount);
}
/***************************************************
NAME : BsaveDefinstances
DESCRIPTION : Bsaves a definstances
INPUTS : 1) The definstances
2) Output data file pointer
RETURNS : Nothing useful
SIDE EFFECTS : Definstances saved
NOTES : None
***************************************************/
static void BsaveDefinstances(
void *theEnv,
struct constructHeader *theDefinstances,
void *userBuffer)
{
DEFINSTANCES *dptr = (DEFINSTANCES *) theDefinstances;
BSAVE_DEFINSTANCES dummy_df;
AssignBsaveConstructHeaderVals(&dummy_df.header,&dptr->header);
if (dptr->mkinstance != NULL)
{
dummy_df.mkinstance = ExpressionData(theEnv)->ExpressionCount;
ExpressionData(theEnv)->ExpressionCount += ExpressionSize(dptr->mkinstance);
}
else
dummy_df.mkinstance = -1L;
GenWrite((void *) &dummy_df,(unsigned long) sizeof(BSAVE_DEFINSTANCES),(FILE *) userBuffer);
}
#endif
/***********************************************************************
NAME : BloadStorageDefinstances
DESCRIPTION : This routine space required for definstances
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 BloadStorageDefinstances(
void *theEnv)
{
unsigned long space;
GenReadBinary(theEnv,(void *) &space,(unsigned long) sizeof(unsigned long));
if (space == 0L)
return;
GenReadBinary(theEnv,(void *) &DefinstancesBinaryData(theEnv)->ModuleCount,(unsigned long) sizeof(unsigned long));
GenReadBinary(theEnv,(void *) &DefinstancesBinaryData(theEnv)->DefinstancesCount,(unsigned long) sizeof(unsigned long));
if (DefinstancesBinaryData(theEnv)->ModuleCount == 0L)
{
DefinstancesBinaryData(theEnv)->ModuleArray = NULL;
DefinstancesBinaryData(theEnv)->DefinstancesArray = NULL;
return;
}
space = (unsigned long) (DefinstancesBinaryData(theEnv)->ModuleCount * sizeof(DEFINSTANCES_MODULE));
DefinstancesBinaryData(theEnv)->ModuleArray = (DEFINSTANCES_MODULE *) genlongalloc(theEnv,space);
if (DefinstancesBinaryData(theEnv)->DefinstancesCount == 0L)
{
DefinstancesBinaryData(theEnv)->DefinstancesArray = NULL;
return;
}
space = (unsigned long) (DefinstancesBinaryData(theEnv)->DefinstancesCount * sizeof(DEFINSTANCES));
DefinstancesBinaryData(theEnv)->DefinstancesArray = (DEFINSTANCES *) genlongalloc(theEnv,space);
}
/*********************************************************************
NAME : BloadDefinstances
DESCRIPTION : This routine reads definstances information from
a binary file
This routine moves through the definstances
binary array updating pointers
INPUTS : None
RETURNS : Nothing useful
SIDE EFFECTS : Pointers reset from array indices
NOTES : Assumes all loading is finished
********************************************************************/
static void BloadDefinstances(
void *theEnv)
{
unsigned long space;
GenReadBinary(theEnv,(void *) &space,(unsigned long) sizeof(unsigned long));
BloadandRefresh(theEnv,DefinstancesBinaryData(theEnv)->ModuleCount,sizeof(BSAVE_DEFINSTANCES_MODULE),UpdateDefinstancesModule);
BloadandRefresh(theEnv,DefinstancesBinaryData(theEnv)->DefinstancesCount,sizeof(BSAVE_DEFINSTANCES),UpdateDefinstances);
}
/*******************************************************
NAME : UpdateDefinstancesModule
DESCRIPTION : Updates definstances 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 : Definstances moudle pointers updated
NOTES : None
*******************************************************/
static void UpdateDefinstancesModule(
void *theEnv,
void *buf,
long obji)
{
BSAVE_DEFINSTANCES_MODULE *bdptr;
bdptr = (BSAVE_DEFINSTANCES_MODULE *) buf;
UpdateDefmoduleItemHeader(theEnv,&bdptr->header,&DefinstancesBinaryData(theEnv)->ModuleArray[obji].header,
(int) sizeof(DEFINSTANCES),(void *) DefinstancesBinaryData(theEnv)->DefinstancesArray);
}
/***************************************************
NAME : UpdateDefinstances
DESCRIPTION : Updates definstances 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 : Definstances pointers upadted
NOTES : None
***************************************************/
static void UpdateDefinstances(
void *theEnv,
void *buf,
long obji)
{
BSAVE_DEFINSTANCES *bdptr;
DEFINSTANCES *dfiptr;
bdptr = (BSAVE_DEFINSTANCES *) buf;
dfiptr = (DEFINSTANCES *) &DefinstancesBinaryData(theEnv)->DefinstancesArray[obji];
UpdateConstructHeader(theEnv,&bdptr->header,&dfiptr->header,
(int) sizeof(DEFINSTANCES_MODULE),(void *) DefinstancesBinaryData(theEnv)->ModuleArray,
(int) sizeof(DEFINSTANCES),(void *) DefinstancesBinaryData(theEnv)->DefinstancesArray);
dfiptr->mkinstance = ExpressionPointer(bdptr->mkinstance);
dfiptr->busy = 0;
}
/***************************************************************
NAME : ClearDefinstancesBload
DESCRIPTION : Release all binary-loaded definstances
structure arrays
Resets definstances list to NULL
INPUTS : None
RETURNS : Nothing useful
SIDE EFFECTS : Memory cleared
NOTES : Definstances name symbol counts decremented
***************************************************************/
static void ClearDefinstancesBload(
void *theEnv)
{
register long i;
unsigned long space;
space = (unsigned long) (sizeof(DEFINSTANCES_MODULE) * DefinstancesBinaryData(theEnv)->ModuleCount);
if (space == 0L)
return;
genlongfree(theEnv,(void *) DefinstancesBinaryData(theEnv)->ModuleArray,space);
DefinstancesBinaryData(theEnv)->ModuleArray = NULL;
DefinstancesBinaryData(theEnv)->ModuleCount = 0L;
for (i = 0L ; i < DefinstancesBinaryData(theEnv)->DefinstancesCount ; i++)
UnmarkConstructHeader(theEnv,&DefinstancesBinaryData(theEnv)->DefinstancesArray[i].header);
space = (unsigned long) (sizeof(DEFINSTANCES) * DefinstancesBinaryData(theEnv)->DefinstancesCount);
if (space == 0L)
return;
genlongfree(theEnv,(void *) DefinstancesBinaryData(theEnv)->DefinstancesArray,space);
DefinstancesBinaryData(theEnv)->DefinstancesArray = NULL;
DefinstancesBinaryData(theEnv)->DefinstancesCount = 0L;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -