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

📄 constrct.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  06/05/06            */   /*                                                     */   /*                  CONSTRUCT MODULE                   */   /*******************************************************//*************************************************************//* Purpose: Provides basic functionality for creating new    *//*   types of constructs, saving constructs to a file, and   *//*   adding new functionality to the clear and reset         *//*   commands.                                               *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*                                                           *//* Revision History:                                         *//*                                                           *//*      6.24: Added environment parameter to GenClose.       *//*            Added environment parameter to GenOpen.        *//*                                                           *//*            Renamed BOOLEAN macro type to intBool.         *//*                                                           *//*************************************************************/#define _CONSTRCT_SOURCE_#include <stdio.h>#define _STDIO_INCLUDED_#include <string.h>#include "setup.h"#include "constant.h"#include "envrnmnt.h"#include "memalloc.h"#include "router.h"#include "scanner.h"#include "watch.h"#include "prcdrfun.h"#include "prcdrpsr.h"#include "argacces.h"#include "exprnpsr.h"#include "multifld.h"#include "moduldef.h"#include "sysdep.h"#include "utility.h"#include "commline.h"#include "ruledef.h" /* TBD Remove */#include "constrct.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static void                        DeallocateConstructData(void *);/**************************************************//* InitializeConstructData: Allocates environment *//*    data for constructs.                        *//**************************************************/globle void InitializeConstructData(  void *theEnv)  {   AllocateEnvironmentData(theEnv,CONSTRUCT_DATA,sizeof(struct constructData),DeallocateConstructData);#if (! RUN_TIME) && (! BLOAD_ONLY)      ConstructData(theEnv)->WatchCompilations = ON;#endif  }  /****************************************************//* DeallocateConstructData: Deallocates environment *//*    data for constructs.                          *//****************************************************/static void DeallocateConstructData(  void *theEnv)  {   struct construct *tmpPtr, *nextPtr;#if (! RUN_TIME) && (! BLOAD_ONLY)   DeallocateCallList(theEnv,ConstructData(theEnv)->ListOfSaveFunctions);#endif   DeallocateCallList(theEnv,ConstructData(theEnv)->ListOfResetFunctions);   DeallocateCallList(theEnv,ConstructData(theEnv)->ListOfClearFunctions);   DeallocateCallList(theEnv,ConstructData(theEnv)->ListOfClearReadyFunctions);      tmpPtr = ConstructData(theEnv)->ListOfConstructs;   while (tmpPtr != NULL)     {      nextPtr = tmpPtr->next;      rtn_struct(theEnv,construct,tmpPtr);      tmpPtr = nextPtr;     }  }#if (! RUN_TIME) && (! BLOAD_ONLY)/*************************************************//* FindConstruct: Determines whether a construct *//*   type is in the ListOfConstructs.            *//*************************************************/globle struct construct *FindConstruct(  void *theEnv,  char *name)  {   struct construct *currentPtr;   for (currentPtr = ConstructData(theEnv)->ListOfConstructs;        currentPtr != NULL;        currentPtr = currentPtr->next)     {      if (strcmp(name,currentPtr->constructName) == 0)        { return(currentPtr); }     }   return(NULL);  }/***********************************************************//* RemoveConstruct: Removes a construct and its associated *//*   parsing function from the ListOfConstructs. Returns   *//*   TRUE if the construct type was removed, otherwise     *//*   FALSE.                                                *//***********************************************************/globle int RemoveConstruct(  void *theEnv,  char *name)  {   struct construct *currentPtr, *lastPtr = NULL;   for (currentPtr = ConstructData(theEnv)->ListOfConstructs;        currentPtr != NULL;        currentPtr = currentPtr->next)     {      if (strcmp(name,currentPtr->constructName) == 0)        {         if (lastPtr == NULL)           { ConstructData(theEnv)->ListOfConstructs = currentPtr->next; }         else           { lastPtr->next = currentPtr->next; }         rtn_struct(theEnv,construct,currentPtr);         return(TRUE);        }      lastPtr = currentPtr;     }   return(FALSE);  }/************************************************//* Save: C access routine for the save command. *//************************************************/globle int EnvSave(  void *theEnv,  char *fileName)  {   struct callFunctionItem *saveFunction;   FILE *filePtr;   void *defmodulePtr;   /*=====================*/   /* Open the save file. */   /*=====================*/   if ((filePtr = GenOpen(theEnv,fileName,"w")) == NULL)     { return(FALSE); }   /*===========================*/   /* Bypass the router system. */   /*===========================*/   SetFastSave(theEnv,filePtr);   /*======================*/   /* Save the constructs. */   /*======================*/      for (defmodulePtr = EnvGetNextDefmodule(theEnv,NULL);        defmodulePtr != NULL;        defmodulePtr = EnvGetNextDefmodule(theEnv,defmodulePtr))     {      for (saveFunction = ConstructData(theEnv)->ListOfSaveFunctions;           saveFunction != NULL;           saveFunction = saveFunction->next)        {         ((* (void (*)(void *,void *,char *)) saveFunction->func))(theEnv,defmodulePtr,(char *) filePtr);        }     }   /*======================*/   /* Close the save file. */   /*======================*/   GenClose(theEnv,filePtr);   /*===========================*/   /* Remove the router bypass. */   /*===========================*/   SetFastSave(theEnv,NULL);   /*=========================*/   /* Return TRUE to indicate */   /* successful completion.  */   /*=========================*/   return(TRUE);  }/*******************************************************//* RemoveSaveFunction: Removes a function from the     *//*   ListOfSaveFunctions. Returns TRUE if the function *//*   was successfully removed, otherwise FALSE.        *//*******************************************************/globle intBool RemoveSaveFunction(  void *theEnv,  char *name)  {   int found;   ConstructData(theEnv)->ListOfSaveFunctions =     RemoveFunctionFromCallList(theEnv,name,ConstructData(theEnv)->ListOfSaveFunctions,&found);   if (found) return(TRUE);   return(FALSE);  }/**********************************//* SetCompilationsWatch: Sets the *//*   value of WatchCompilations.  *//**********************************/globle void SetCompilationsWatch(  void *theEnv,  unsigned value)  {   ConstructData(theEnv)->WatchCompilations = value;  }/*************************************//* GetCompilationsWatch: Returns the *//*   value of WatchCompilations.     *//*************************************/globle unsigned GetCompilationsWatch(  void *theEnv)  {      return(ConstructData(theEnv)->WatchCompilations);   }/**********************************//* SetPrintWhileLoading: Sets the *//*   value of PrintWhileLoading.  *//**********************************/globle void SetPrintWhileLoading(  void *theEnv,  intBool value)  {   ConstructData(theEnv)->PrintWhileLoading = value;  }/*************************************//* GetPrintWhileLoading: Returns the *//*   value of PrintWhileLoading.     *//*************************************/globle intBool GetPrintWhileLoading(  void *theEnv)  {   return(ConstructData(theEnv)->PrintWhileLoading);  }#endif/*************************************//* InitializeConstructs: Initializes *//*   the Construct Manager.          *//*************************************/globle void InitializeConstructs(  void *theEnv)  {#if (! RUN_TIME)   EnvDefineFunction2(theEnv,"clear",   'v', PTIEF ClearCommand,   "ClearCommand", "00");   EnvDefineFunction2(theEnv,"reset",   'v', PTIEF ResetCommand,   "ResetCommand", "00");#if DEBUGGING_FUNCTIONS && (! BLOAD_ONLY)   AddWatchItem(theEnv,"compilations",0,&ConstructData(theEnv)->WatchCompilations,30,NULL,NULL);#endif#else#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif#endif  }/**************************************//* ClearCommand: H/L access routine   *//*   for the clear command.           *//**************************************/globle void ClearCommand(  void *theEnv)  {   if (EnvArgCountCheck(theEnv,"clear",EXACTLY,0) == -1) return;   EnvClear(theEnv);   return;  }/**************************************//* ResetCommand: H/L access routine   *//*   for the reset command.           *//**************************************/globle void ResetCommand(  void *theEnv)  {   if (EnvArgCountCheck(theEnv,"reset",EXACTLY,0) == -1) return;   EnvReset(theEnv);   return;  }/******************************//* EnvReset: C access routine *//*   for the reset command.   *//******************************/globle void EnvReset(  void *theEnv)  {   struct callFunctionItem *resetPtr;   /*=====================================*/   /* The reset command can't be executed */   /* while a reset is in progress.       */   /*=====================================*/   if (ConstructData(theEnv)->ResetInProgress) return;   ConstructData(theEnv)->ResetInProgress = TRUE;   ConstructData(theEnv)->ResetReadyInProgress = TRUE;   /*================================================*/   /* If the reset is performed from the top level   */   /* command prompt, reset the halt execution flag. */   /*================================================*/   if (EvaluationData(theEnv)->CurrentEvaluationDepth == 0) SetHaltExecution(theEnv,FALSE);   /*=======================================================*/   /* Call the before reset function to determine if the    */   /* reset should continue. [Used by the some of the       */   /* windowed interfaces to query the user whether a       */   /* reset should proceed with activations on the agenda.] */   /*=======================================================*/   if ((ConstructData(theEnv)->BeforeResetFunction != NULL) ?        ((*ConstructData(theEnv)->BeforeResetFunction)(theEnv) == FALSE) :                                       FALSE)     {      ConstructData(theEnv)->ResetReadyInProgress = FALSE;      ConstructData(theEnv)->ResetInProgress = FALSE;      return;     }   ConstructData(theEnv)->ResetReadyInProgress = FALSE;   /*===========================*/   /* Call each reset function. */   /*===========================*/   for (resetPtr = ConstructData(theEnv)->ListOfResetFunctions;        (resetPtr != NULL) && (GetHaltExecution(theEnv) == FALSE);        resetPtr = resetPtr->next)     {       if (resetPtr->environmentAware)        { (*resetPtr->func)(theEnv); }      else                    { (* (void (*)(void)) resetPtr->func)(); }     }   /*============================================*/   /* Set the current module to the MAIN module. */   /*============================================*/   EnvSetCurrentModule(theEnv,(void *) EnvFindDefmodule(theEnv,"MAIN"));   /*===========================================*/   /* Perform periodic cleanup if the reset was */   /* issued from an embedded controller.       */   /*===========================================*/   if ((EvaluationData(theEnv)->CurrentEvaluationDepth == 0) && (! CommandLineData(theEnv)->EvaluatingTopLevelCommand) &&       (EvaluationData(theEnv)->CurrentExpression == NULL))     { PeriodicCleanup(theEnv,TRUE,FALSE); }   /*===================================*/   /* A reset is no longer in progress. */   /*===================================*/   ConstructData(theEnv)->ResetInProgress = FALSE;  }/************************************//* SetBeforeResetFunction: Sets the *//*  value of BeforeResetFunction.   *//************************************/globle int (*SetBeforeResetFunction(void *theEnv,                                    int (*theFunction)(void *)))(void *)  {   int (*tempFunction)(void *);   tempFunction = ConstructData(theEnv)->BeforeResetFunction;   ConstructData(theEnv)->BeforeResetFunction = theFunction;   return(tempFunction);  }#if (! ENVIRONMENT_API_ONLY) && ALLOW_ENVIRONMENT_GLOBALS/*************************************//* AddResetFunction: Adds a function *//*   to ListOfResetFunctions.        *//*************************************/globle intBool AddResetFunction(  char *name,  void (*functionPtr)(void),  int priority)  {   void *theEnv;      theEnv = GetCurrentEnvironment();      ConstructData(theEnv)->ListOfResetFunctions =       AddFunctionToCallList(theEnv,name,priority,(void (*)(void *)) functionPtr,                            ConstructData(theEnv)->ListOfResetFunctions,FALSE);   return(TRUE);  }#endif/****************************************//* EnvAddResetFunction: Adds a function *//*   to ListOfResetFunctions.           *//****************************************/globle intBool EnvAddResetFunction(

⌨️ 快捷键说明

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