📄 dfinsbin.c
字号:
/*******************************************************/ /* "C" Language Integrated Production System */ /* */ /* CLIPS Version 6.05 04/09/97 */ /* */ /* */ /*******************************************************//*************************************************************//* Purpose: Binary Load/Save Functions for Definstances *//* *//* Principal Programmer(s): *//* Brian L. Donnell *//* *//* Contributing Programmer(s): *//* *//* Revision History: *//* *//*************************************************************/ /* ========================================= ***************************************** EXTERNAL DEFINITIONS ========================================= ***************************************** */#include "setup.h"#if DEFINSTANCES_CONSTRUCT && (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)#include "bload.h"#include "bsave.h"#include "clipsmem.h"#include "cstrcbin.h"#include "defins.h"#include "modulbin.h"#define _DFINSBIN_SOURCE_#include "dfinsbin.h"/* ========================================= ***************************************** CONSTANTS ========================================= ***************************************** */ /* ========================================= ***************************************** MACROS AND TYPES ========================================= ***************************************** */typedef struct bsaveDefinstancesModule { struct bsaveDefmoduleItemHeader header; } BSAVE_DEFINSTANCES_MODULE;typedef struct bsaveDefinstances { struct bsaveConstructHeader header; long mkinstance; } BSAVE_DEFINSTANCES; /* ========================================= ***************************************** INTERNALLY VISIBLE FUNCTION HEADERS ========================================= ***************************************** */#if ANSI_COMPILER#if BLOAD_AND_BSAVEstatic VOID BsaveDefinstancesFind(void);static VOID MarkDefinstancesItems(struct constructHeader *,VOID *);static VOID BsaveDefinstancesExpressions(FILE *);static VOID BsaveDefinstancesExpression(struct constructHeader *,VOID *);static VOID BsaveStorageDefinstances(FILE *);static VOID BsaveDefinstancesDriver(FILE *);static VOID BsaveDefinstances(struct constructHeader *,VOID *);#endifstatic VOID BloadStorageDefinstances(void);static VOID BloadDefinstances(void);static VOID UpdateDefinstancesModule(VOID *,long);static VOID UpdateDefinstances(VOID *,long);static VOID ClearDefinstancesBload(void);#else#if BLOAD_AND_BSAVEstatic VOID BsaveDefinstancesFind();static VOID MarkDefinstancesItems();static VOID BsaveDefinstancesExpressions();static VOID BsaveDefinstancesExpression();static VOID BsaveStorageDefinstances();static VOID BsaveDefinstancesDriver();static VOID BsaveDefinstances();#endifstatic VOID BloadStorageDefinstances();static VOID BloadDefinstances();static VOID UpdateDefinstancesModule();static VOID UpdateDefinstances();static VOID ClearDefinstancesBload();#endif /* ========================================= ***************************************** EXTERNALLY VISIBLE GLOBAL VARIABLES ========================================= ***************************************** */globle DEFINSTANCES HUGE_ADDR *definstancesArray = NULL;/* ========================================= ***************************************** INTERNALLY VISIBLE GLOBAL VARIABLES ========================================= ***************************************** */static long DefinstancesCount = 0L, ModuleCount = 0L;static DEFINSTANCES_MODULE HUGE_ADDR *ModuleArray;/* ========================================= ***************************************** EXTERNALLY VISIBLE FUNCTIONS ========================================= ***************************************** */ /*********************************************************** NAME : SetupDefinstancesBload DESCRIPTION : Initializes data structures and routines for binary loads of definstances INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : Routines defined and structures initialized NOTES : None ***********************************************************/globle VOID SetupDefinstancesBload() {#if BLOAD_AND_BSAVE AddBinaryItem("definstances",0,BsaveDefinstancesFind,BsaveDefinstancesExpressions, BsaveStorageDefinstances,BsaveDefinstancesDriver, BloadStorageDefinstances,BloadDefinstances, ClearDefinstancesBload);#else AddBinaryItem("definstances",0,NULL,NULL,NULL,NULL, BloadStorageDefinstances,BloadDefinstances, ClearDefinstancesBload);#endif } /*************************************************** NAME : BloadDefinstancesModuleRef DESCRIPTION : Returns a pointer to the appropriate definstances module INPUTS : The index of the module RETURNS : A pointer to the module SIDE EFFECTS : None NOTES : None ***************************************************/globle VOID *BloadDefinstancesModuleRef(index) int index; { return ((VOID *) &ModuleArray[index]); }/* ========================================= ***************************************** INTERNALLY VISIBLE FUNCTIONS ========================================= ***************************************** */#if BLOAD_AND_BSAVE/*************************************************************************** NAME : BsaveDefinstancesFind DESCRIPTION : For all definstances, this routine marks all the needed symbols. Also, it also counts the number of expression structures needed. Also, counts total number of definstances. INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : ExpressionCount (a global from BSAVE.C) is incremented for every expression needed Symbols are marked in their structures NOTES : Also sets bsaveIndex for each definstances (assumes definstances will be bsaved in order of binary list) ***************************************************************************/static VOID BsaveDefinstancesFind() { if (Bloaded()) { SaveBloadCount(ModuleCount); SaveBloadCount(DefinstancesCount); } DefinstancesCount = 0L; ModuleCount = DoForAllConstructs(MarkDefinstancesItems,DefinstancesModuleIndex, CLIPS_FALSE,NULL); } /*************************************************** NAME : MarkDefinstancesItems DESCRIPTION : Marks the needed items for a definstances bsave INPUTS : 1) The definstances 2) User data buffer (ignored) RETURNS : Nothing useful SIDE EFFECTS : Needed items marked NOTES : None ***************************************************/#if IBM_TBC#pragma argsused#endifstatic VOID MarkDefinstancesItems(theDefinstances,userBuffer) struct constructHeader *theDefinstances; VOID *userBuffer; {#if MAC_MPW || MAC_MCW#pragma unused(userBuffer)#endif MarkConstructHeaderNeededItems(theDefinstances,DefinstancesCount++); ExpressionCount += ExpressionSize(((DEFINSTANCES *) theDefinstances)->mkinstance); MarkNeededItems(((DEFINSTANCES *) theDefinstances)->mkinstance); }/*************************************************** NAME : BsaveDefinstancesExpressions DESCRIPTION : Writes out all expressions needed by deffunctyions INPUTS : The file pointer of the binary file RETURNS : Nothing useful SIDE EFFECTS : File updated NOTES : None ***************************************************/static VOID BsaveDefinstancesExpressions(fp) FILE *fp; { DoForAllConstructs(BsaveDefinstancesExpression,DefinstancesModuleIndex, CLIPS_FALSE,(VOID *) fp); } /*************************************************** NAME : BsaveDefinstancesExpression DESCRIPTION : Saves the needed expressions for a definstances bsave INPUTS : 1) The definstances 2) Output data file pointer RETURNS : Nothing useful SIDE EFFECTS : Expressions saved NOTES : None ***************************************************/static VOID BsaveDefinstancesExpression(theDefinstances,userBuffer) struct constructHeader *theDefinstances; VOID *userBuffer; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -