📄 symblbin.c
字号:
(unsigned long) sizeof(integerPtr->contents),fp);
}
}
}
}
/*****************************************************************/
/* WriteNeededBitMaps: Stores all of the bitmaps in the bitmap */
/* table needed for this binary image in the binary save file. */
/*****************************************************************/
static void WriteNeededBitMaps(
void *theEnv,
FILE *fp)
{
int i;
BITMAP_HN **bitMapArray;
BITMAP_HN *bitMapPtr;
unsigned long int numberOfUsedBitMaps = 0, size = 0;
char tempSize;
/*=================================*/
/* Get a copy of the bitmap table. */
/*=================================*/
bitMapArray = GetBitMapTable(theEnv);
/*======================================================*/
/* Get the number of bitmaps and the total bitmap size. */
/*======================================================*/
for (i = 0; i < BITMAP_HASH_SIZE; i++)
{
for (bitMapPtr = bitMapArray[i];
bitMapPtr != NULL;
bitMapPtr = bitMapPtr->next)
{
if (bitMapPtr->neededBitMap)
{
numberOfUsedBitMaps++;
size += (unsigned long) (bitMapPtr->size + 1);
}
}
}
/*========================================*/
/* Write out the bitmaps and their sizes. */
/*========================================*/
GenWrite((void *) &numberOfUsedBitMaps,(unsigned long) sizeof(unsigned long int),fp);
GenWrite((void *) &size,(unsigned long) sizeof(unsigned long int),fp);
for (i = 0; i < BITMAP_HASH_SIZE; i++)
{
for (bitMapPtr = bitMapArray[i];
bitMapPtr != NULL;
bitMapPtr = bitMapPtr->next)
{
if (bitMapPtr->neededBitMap)
{
tempSize = (char) bitMapPtr->size;
GenWrite((void *) &tempSize,(unsigned long) sizeof(char),fp);
GenWrite((void *) bitMapPtr->contents,(unsigned long) bitMapPtr->size,fp);
}
}
}
}
#endif /* BLOAD_AND_BSAVE || BSAVE_INSTANCES */
/*********************************************/
/* ReadNeededAtomicValues: Read all symbols, */
/* floats, integers, and bitmaps needed by */
/* this binary image from the binary file. */
/*********************************************/
globle void ReadNeededAtomicValues(
void *theEnv)
{
ReadNeededSymbols(theEnv);
ReadNeededFloats(theEnv);
ReadNeededIntegers(theEnv);
ReadNeededBitMaps(theEnv);
}
/*******************************************/
/* ReadNeededSymbols: Reads in the symbols */
/* used by the binary image. */
/*******************************************/
globle void ReadNeededSymbols(
void *theEnv)
{
char *symbolNames, *namePtr;
unsigned long space;
long i;
/*=================================================*/
/* Determine the number of symbol names to be read */
/* and space required for them. */
/*=================================================*/
GenReadBinary(theEnv,(void *) &SymbolData(theEnv)->NumberOfSymbols,(unsigned long) sizeof(long int));
GenReadBinary(theEnv,&space,(unsigned long) sizeof(unsigned long int));
if (SymbolData(theEnv)->NumberOfSymbols == 0)
{
SymbolData(theEnv)->SymbolArray = NULL;
return;
}
/*=======================================*/
/* Allocate area for strings to be read. */
/*=======================================*/
symbolNames = (char *) gm3(theEnv,(long) space);
GenReadBinary(theEnv,(void *) symbolNames,space);
/*================================================*/
/* Store the symbol pointers in the symbol array. */
/*================================================*/
SymbolData(theEnv)->SymbolArray = (SYMBOL_HN **)
gm3(theEnv,(long) sizeof(SYMBOL_HN *) * SymbolData(theEnv)->NumberOfSymbols);
namePtr = symbolNames;
for (i = 0; i < SymbolData(theEnv)->NumberOfSymbols; i++)
{
SymbolData(theEnv)->SymbolArray[i] = (SYMBOL_HN *) EnvAddSymbol(theEnv,namePtr);
namePtr += strlen(namePtr) + 1;
}
/*=======================*/
/* Free the name buffer. */
/*=======================*/
rm3(theEnv,(void *) symbolNames,(long) space);
}
/*****************************************/
/* ReadNeededFloats: Reads in the floats */
/* used by the binary image. */
/*****************************************/
globle void ReadNeededFloats(
void *theEnv)
{
double *floatValues;
long i;
/*============================================*/
/* Determine the number of floats to be read. */
/*============================================*/
GenReadBinary(theEnv,&SymbolData(theEnv)->NumberOfFloats,(unsigned long) sizeof(long int));
if (SymbolData(theEnv)->NumberOfFloats == 0)
{
SymbolData(theEnv)->FloatArray = NULL;
return;
}
/*===============================*/
/* Allocate area for the floats. */
/*===============================*/
floatValues = (double *) gm3(theEnv,(long) sizeof(double) * SymbolData(theEnv)->NumberOfFloats);
GenReadBinary(theEnv,(void *) floatValues,(unsigned long) (sizeof(double) * SymbolData(theEnv)->NumberOfFloats));
/*======================================*/
/* Store the floats in the float array. */
/*======================================*/
SymbolData(theEnv)->FloatArray = (FLOAT_HN **)
gm3(theEnv,(long) sizeof(FLOAT_HN *) * SymbolData(theEnv)->NumberOfFloats);
for (i = 0; i < SymbolData(theEnv)->NumberOfFloats; i++)
{ SymbolData(theEnv)->FloatArray[i] = (FLOAT_HN *) EnvAddDouble(theEnv,floatValues[i]); }
/*========================*/
/* Free the float buffer. */
/*========================*/
rm3(theEnv,(void *) floatValues,(long) (sizeof(double) * SymbolData(theEnv)->NumberOfFloats));
}
/*********************************************/
/* ReadNeededIntegers: Reads in the integers */
/* used by the binary image. */
/*********************************************/
globle void ReadNeededIntegers(
void *theEnv)
{
long int *integerValues;
long i;
/*==============================================*/
/* Determine the number of integers to be read. */
/*==============================================*/
GenReadBinary(theEnv,&SymbolData(theEnv)->NumberOfIntegers,(unsigned long) sizeof(unsigned long int));
if (SymbolData(theEnv)->NumberOfIntegers == 0)
{
SymbolData(theEnv)->IntegerArray = NULL;
return;
}
/*=================================*/
/* Allocate area for the integers. */
/*=================================*/
integerValues = (long *) gm3(theEnv,(long) (sizeof(long) * SymbolData(theEnv)->NumberOfIntegers));
GenReadBinary(theEnv,(void *) integerValues,(unsigned long) (sizeof(long) * SymbolData(theEnv)->NumberOfIntegers));
/*==========================================*/
/* Store the integers in the integer array. */
/*==========================================*/
SymbolData(theEnv)->IntegerArray = (INTEGER_HN **)
gm3(theEnv,(long) (sizeof(INTEGER_HN *) * SymbolData(theEnv)->NumberOfIntegers));
for (i = 0; i < SymbolData(theEnv)->NumberOfIntegers; i++)
{ SymbolData(theEnv)->IntegerArray[i] = (INTEGER_HN *) EnvAddLong(theEnv,integerValues[i]); }
/*==========================*/
/* Free the integer buffer. */
/*==========================*/
rm3(theEnv,(void *) integerValues,(long) (sizeof(long int) * SymbolData(theEnv)->NumberOfIntegers));
}
/*******************************************/
/* ReadNeededBitMaps: Reads in the bitmaps */
/* used by the binary image. */
/*******************************************/
static void ReadNeededBitMaps(
void *theEnv)
{
char *bitMapStorage, *bitMapPtr;
unsigned long space;
long i;
/*=======================================*/
/* Determine the number of bitmaps to be */
/* read and space required for them. */
/*=======================================*/
GenReadBinary(theEnv,(void *) &SymbolData(theEnv)->NumberOfBitMaps,(unsigned long) sizeof(long int));
GenReadBinary(theEnv,&space,(unsigned long) sizeof(unsigned long int));
if (SymbolData(theEnv)->NumberOfBitMaps == 0)
{
SymbolData(theEnv)->BitMapArray = NULL;
return;
}
/*=======================================*/
/* Allocate area for bitmaps to be read. */
/*=======================================*/
bitMapStorage = (char *) gm3(theEnv,(long) space);
GenReadBinary(theEnv,(void *) bitMapStorage,space);
/*================================================*/
/* Store the bitMap pointers in the bitmap array. */
/*================================================*/
SymbolData(theEnv)->BitMapArray = (BITMAP_HN **)
gm3(theEnv,(long) sizeof(BITMAP_HN *) * SymbolData(theEnv)->NumberOfBitMaps);
bitMapPtr = bitMapStorage;
for (i = 0; i < SymbolData(theEnv)->NumberOfBitMaps; i++)
{
SymbolData(theEnv)->BitMapArray[i] = (BITMAP_HN *) AddBitMap(theEnv,bitMapPtr+1,*bitMapPtr);
bitMapPtr += *bitMapPtr + 1;
}
/*=========================*/
/* Free the bitmap buffer. */
/*=========================*/
rm3(theEnv,(void *) bitMapStorage,(long) space);
}
/**********************************************************/
/* FreeAtomicValueStorage: Returns the memory allocated */
/* for storing the pointers to atomic data values used */
/* in refreshing expressions and other data structures. */
/**********************************************************/
globle void FreeAtomicValueStorage(
void *theEnv)
{
if (SymbolData(theEnv)->SymbolArray != NULL)
rm3(theEnv,(void *) SymbolData(theEnv)->SymbolArray,(long) sizeof(SYMBOL_HN *) * SymbolData(theEnv)->NumberOfSymbols);
if (SymbolData(theEnv)->FloatArray != NULL)
rm3(theEnv,(void *) SymbolData(theEnv)->FloatArray,(long) sizeof(FLOAT_HN *) * SymbolData(theEnv)->NumberOfFloats);
if (SymbolData(theEnv)->IntegerArray != NULL)
rm3(theEnv,(void *) SymbolData(theEnv)->IntegerArray,(long) sizeof(INTEGER_HN *) * SymbolData(theEnv)->NumberOfIntegers);
if (SymbolData(theEnv)->BitMapArray != NULL)
rm3(theEnv,(void *) SymbolData(theEnv)->BitMapArray,(long) sizeof(BITMAP_HN *) * SymbolData(theEnv)->NumberOfBitMaps);
SymbolData(theEnv)->SymbolArray = NULL;
SymbolData(theEnv)->FloatArray = NULL;
SymbolData(theEnv)->IntegerArray = NULL;
SymbolData(theEnv)->BitMapArray = NULL;
SymbolData(theEnv)->NumberOfSymbols = 0;
SymbolData(theEnv)->NumberOfFloats = 0;
SymbolData(theEnv)->NumberOfIntegers = 0;
SymbolData(theEnv)->NumberOfBitMaps = 0;
}
#endif /* BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE || BLOAD_INSTANCES || BSAVE_INSTANCES */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -