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

📄 symblbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.20  01/31/02            */   /*                                                     */   /*                 SYMBOL BSAVE MODULE                 */   /*******************************************************//*************************************************************//* Purpose: Implements the binary save/load feature for      *//*    atomic data values.                                    *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*      Brian L. Donnell                                     *//*                                                           *//* Contributing Programmer(s):                               *//*                                                           *//* Revision History:                                         *//*                                                           *//*************************************************************/#define _BSAVE_SOURCE_#include "setup.h"#if BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE || BLOAD_INSTANCES || BSAVE_INSTANCES#include "argacces.h"#include "bload.h"#include "bsave.h"#include "cstrnbin.h"#include "envrnmnt.h"#include "exprnpsr.h"#include "memalloc.h"#include "moduldef.h"#include "router.h"#include "symblbin.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static void                        ReadNeededBitMaps(void *);#if BLOAD_AND_BSAVE || BSAVE_INSTANCES   static void                        WriteNeededBitMaps(void *,FILE *);#endif#if BLOAD_AND_BSAVE || BSAVE_INSTANCES/**********************************************//* WriteNeededAtomicValues: Save all symbols, *//*   floats, integers, and bitmaps needed by  *//*   this binary image to the binary file.    *//**********************************************/globle void WriteNeededAtomicValues(  void *theEnv,  FILE *fp)  {   WriteNeededSymbols(theEnv,fp);   WriteNeededFloats(theEnv,fp);   WriteNeededIntegers(theEnv,fp);   WriteNeededBitMaps(theEnv,fp);  }/********************************************************//* InitAtomicValueNeededFlags: Initializes all symbols, *//*   floats, integers, and bitmaps as being unneeded by *//*   the binary image being saved.                      *//********************************************************/globle void InitAtomicValueNeededFlags(  void *theEnv)  {   unsigned long i;   SYMBOL_HN *symbolPtr, **symbolArray;   FLOAT_HN *floatPtr, **floatArray;   INTEGER_HN *integerPtr, **integerArray;   BITMAP_HN *bitMapPtr, **bitMapArray;   /*===============*/   /* Mark symbols. */   /*===============*/   symbolArray = GetSymbolTable(theEnv);   for (i = 0; i < SYMBOL_HASH_SIZE; i++)     {      symbolPtr = symbolArray[i];      while (symbolPtr != NULL)        {         symbolPtr->neededSymbol = FALSE;         symbolPtr = symbolPtr->next;        }     }   /*==============*/   /* Mark floats. */   /*==============*/   floatArray = GetFloatTable(theEnv);   for (i = 0; i < FLOAT_HASH_SIZE; i++)     {      floatPtr = floatArray[i];      while (floatPtr != NULL)        {         floatPtr->neededFloat = FALSE;         floatPtr = floatPtr->next;        }     }   /*================*/   /* Mark integers. */   /*================*/   integerArray = GetIntegerTable(theEnv);   for (i = 0; i < INTEGER_HASH_SIZE; i++)     {      integerPtr = integerArray[i];      while (integerPtr != NULL)        {         integerPtr->neededInteger = FALSE;         integerPtr = integerPtr->next;        }     }   /*===============*/   /* Mark bitmaps. */   /*===============*/   bitMapArray = GetBitMapTable(theEnv);   for (i = 0; i < BITMAP_HASH_SIZE; i++)     {      bitMapPtr = bitMapArray[i];      while (bitMapPtr != NULL)        {         bitMapPtr->neededBitMap = FALSE;         bitMapPtr = bitMapPtr->next;        }     }  }/*****************************************************************//* WriteNeededSymbols: Stores all of the symbols in the symbol   *//*   table needed for this binary image in the binary save file. *//*****************************************************************/globle void WriteNeededSymbols(  void *theEnv,  FILE *fp)  {   unsigned long i;   size_t length;   SYMBOL_HN **symbolArray;   SYMBOL_HN *symbolPtr;   unsigned long int numberOfUsedSymbols = 0;   size_t size = 0;   /*=================================*/   /* Get a copy of the symbol table. */   /*=================================*/   symbolArray = GetSymbolTable(theEnv);   /*======================================================*/   /* Get the number of symbols and the total string size. */   /*======================================================*/   for (i = 0; i < SYMBOL_HASH_SIZE; i++)     {      for (symbolPtr = symbolArray[i];           symbolPtr != NULL;           symbolPtr = symbolPtr->next)        {         if (symbolPtr->neededSymbol)           {            numberOfUsedSymbols++;            size += strlen(symbolPtr->contents) + 1;           }        }     }   /*=============================================*/   /* Write out the symbols and the string sizes. */   /*=============================================*/   GenWrite((void *) &numberOfUsedSymbols,(unsigned long) sizeof(unsigned long int),fp);   GenWrite((void *) &size,(unsigned long) sizeof(unsigned long int),fp);   for (i = 0; i < SYMBOL_HASH_SIZE; i++)     {      for (symbolPtr = symbolArray[i];           symbolPtr != NULL;           symbolPtr = symbolPtr->next)        {         if (symbolPtr->neededSymbol)           {            length = strlen(symbolPtr->contents) + 1;            GenWrite((void *) symbolPtr->contents,(unsigned long) length,fp);           }        }     }  }/*****************************************************************//* WriteNeededFloats: Stores all of the floats in the float      *//*   table needed for this binary image in the binary save file. *//*****************************************************************/globle void WriteNeededFloats(  void *theEnv,  FILE *fp)  {   int i;   FLOAT_HN **floatArray;   FLOAT_HN *floatPtr;   unsigned long int numberOfUsedFloats = 0;   /*================================*/   /* Get a copy of the float table. */   /*================================*/   floatArray = GetFloatTable(theEnv);   /*===========================*/   /* Get the number of floats. */   /*===========================*/   for (i = 0; i < FLOAT_HASH_SIZE; i++)     {      for (floatPtr = floatArray[i];           floatPtr != NULL;           floatPtr = floatPtr->next)        { if (floatPtr->neededFloat) numberOfUsedFloats++; }     }   /*======================================================*/   /* Write out the number of floats and the float values. */   /*======================================================*/   GenWrite(&numberOfUsedFloats,(unsigned long) sizeof(unsigned long int),fp);   for (i = 0 ; i < FLOAT_HASH_SIZE; i++)     {      for (floatPtr = floatArray[i];           floatPtr != NULL;           floatPtr = floatPtr->next)        {         if (floatPtr->neededFloat)           { GenWrite(&floatPtr->contents,                      (unsigned long) sizeof(floatPtr->contents),fp); }        }     }  }/******************************************************************//* WriteNeededIntegers: Stores all of the integers in the integer *//*   table needed for this binary image in the binary save file.  *//******************************************************************/globle void WriteNeededIntegers(  void *theEnv,  FILE *fp)  {   int i;   INTEGER_HN **integerArray;   INTEGER_HN *integerPtr;   unsigned long int numberOfUsedIntegers = 0;   /*==================================*/   /* Get a copy of the integer table. */   /*==================================*/   integerArray = GetIntegerTable(theEnv);   /*=============================*/   /* Get the number of integers. */   /*=============================*/   for (i = 0 ; i < INTEGER_HASH_SIZE; i++)     {      for (integerPtr = integerArray[i];           integerPtr != NULL;           integerPtr = integerPtr->next)        {         if (integerPtr->neededInteger) numberOfUsedIntegers++;        }     }   /*==========================================================*/   /* Write out the number of integers and the integer values. */   /*==========================================================*/   GenWrite(&numberOfUsedIntegers,(unsigned long) sizeof(unsigned long int),fp);   for (i = 0 ; i < INTEGER_HASH_SIZE; i++)     {      for (integerPtr = integerArray[i];           integerPtr != NULL;           integerPtr = integerPtr->next)        {         if (integerPtr->neededInteger)           {

⌨️ 快捷键说明

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