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

📄 symblbin.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 2 页
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.05  04/09/97            */   /*                                                     */   /*                 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 "clipsmem.h"#include "exprnpsr.h"#include "argacces.h"#include "router.h"#include "cstrnbin.h"#include "moduldef.h"#include "bload.h"#include "bsave.h"#include "symblbin.h"/***************************************//* LOCAL INTERNAL VARIABLE DEFINITIONS *//***************************************/   static long                                   NumberOfSymbols = 0;   static long                                   NumberOfFloats = 0;   static long                                   NumberOfIntegers = 0;   static long                                   NumberOfBitMaps = 0;/****************************************//* GLOBAL INTERNAL VARIABLE DEFINITIONS *//****************************************/   globle SYMBOL_HN * HUGE_ADDR                 *SymbolArray;   globle struct floatHashNode * HUGE_ADDR      *FloatArray;   globle INTEGER_HN * HUGE_ADDR                *IntegerArray;   globle BITMAP_HN * HUGE_ADDR                 *BitMapArray;   /***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/#if ANSI_COMPILER   static VOID                        ReadNeededSymbols(void);   static VOID                        ReadNeededFloats(void);   static VOID                        ReadNeededIntegers(void);   static VOID                        ReadNeededBitMaps(void);#if BLOAD_AND_BSAVE || BSAVE_INSTANCES   static VOID                        WriteNeededSymbols(FILE *);   static VOID                        WriteNeededFloats(FILE *);   static VOID                        WriteNeededIntegers(FILE *);   static VOID                        WriteNeededBitMaps(FILE *);#endif#else   static VOID                        ReadNeededSymbols();   static VOID                        ReadNeededFloats();   static VOID                        ReadNeededIntegers();   static VOID                        ReadNeededBitMaps();#if BLOAD_AND_BSAVE || BSAVE_INSTANCES   static VOID                        WriteNeededSymbols();   static VOID                        WriteNeededFloats();   static VOID                        WriteNeededIntegers();   static VOID                        WriteNeededBitMaps();#endif#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(fp)  FILE *fp;  {   WriteNeededSymbols(fp);   WriteNeededFloats(fp);   WriteNeededIntegers(fp);   WriteNeededBitMaps(fp);  }  /********************************************************//* InitAtomicValueNeededFlags: Initializes all symbols, *//*   floats, integers, and bitmaps as being unneeded by *//*   the binary image being saved.                      *//********************************************************/globle VOID InitAtomicValueNeededFlags()  {   int i;   SYMBOL_HN *symbolPtr, **symbolArray;   FLOAT_HN *floatPtr, **floatArray;   INTEGER_HN *integerPtr, **integerArray;   BITMAP_HN *bitMapPtr, **bitMapArray;   /*===============*/   /* Mark symbols. */   /*===============*/      symbolArray = GetSymbolTable();   for (i = 0; i < SYMBOL_HASH_SIZE; i++)     {      symbolPtr = symbolArray[i];      while (symbolPtr != NULL)        {         symbolPtr->neededSymbol = CLIPS_FALSE;         symbolPtr = symbolPtr->next;        }     }   /*==============*/   /* Mark floats. */   /*==============*/      floatArray = GetFloatTable();   for (i = 0; i < FLOAT_HASH_SIZE; i++)     {      floatPtr = floatArray[i];      while (floatPtr != NULL)        {         floatPtr->neededFloat = CLIPS_FALSE;         floatPtr = floatPtr->next;        }     }   /*================*/   /* Mark integers. */   /*================*/      integerArray = GetIntegerTable();   for (i = 0; i < INTEGER_HASH_SIZE; i++)     {      integerPtr = integerArray[i];      while (integerPtr != NULL)        {         integerPtr->neededInteger = CLIPS_FALSE;         integerPtr = integerPtr->next;        }     }   /*===============*/   /* Mark bitmaps. */   /*===============*/      bitMapArray = GetBitMapTable();   for (i = 0; i < BITMAP_HASH_SIZE; i++)     {      bitMapPtr = bitMapArray[i];      while (bitMapPtr != NULL)        {         bitMapPtr->neededBitMap = CLIPS_FALSE;         bitMapPtr = bitMapPtr->next;        }     }  }/*****************************************************************//* WriteNeededSymbols: Stores all of the symbols in the symbol   *//*   table needed for this binary image in the binary save file. *//*****************************************************************/static VOID WriteNeededSymbols(fp)  FILE *fp;  {   int i, length;   SYMBOL_HN **symbolArray;   SYMBOL_HN *symbolPtr;   unsigned long int numberOfUsedSymbols = 0, size = 0;   /*=================================*/   /* Get a copy of the symbol table. */   /*=================================*/   symbolArray = GetSymbolTable();   /*======================================================*/   /* 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. *//*****************************************************************/static VOID WriteNeededFloats(fp)  FILE *fp;  {   int i;   FLOAT_HN **floatArray;   FLOAT_HN *floatPtr;   unsigned long int numberOfUsedFloats = 0;   /*================================*/   /* Get a copy of the float table. */   /*================================*/   floatArray = GetFloatTable();   /*===========================*/   /* 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.  *//******************************************************************/static VOID WriteNeededIntegers(fp)  FILE *fp;  {   int i;   INTEGER_HN **integerArray;   INTEGER_HN *integerPtr;   unsigned long int numberOfUsedIntegers = 0;   /*==================================*/   /* Get a copy of the integer table. */   /*==================================*/   integerArray = GetIntegerTable();   /*=============================*/   /* Get the number of integers. */   /*=============================*/   for (i = 0 ; i < INTEGER_HASH_SIZE; i++)

⌨️ 快捷键说明

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