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

📄 globlbsc.c

📁 clips源代码
💻 C
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  06/05/06            */   /*                                                     */   /*         DEFGLOBAL BASIC COMMANDS HEADER FILE        */   /*******************************************************//*************************************************************//* Purpose: Implements core commands for the defglobal       *//*   construct such as clear, reset, save, undefglobal,      *//*   ppdefglobal, list-defglobals, and get-defglobals-list.  *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*      Brian L. Donnell                                     *//*                                                           *//* Revision History:                                         *//*      6.23: Correction for FalseSymbol/TrueSymbol. DR0859  *//*                                                           *//*            Corrected compilation errors for files         *//*            generated by constructs-to-c. DR0861           *//*                                                           *//*            Changed name of variable log to logName        *//*            because of Unix compiler warnings of shadowed  *//*            definitions.                                   *//*                                                           *//*      6.24: Renamed BOOLEAN macro type to intBool.         *//*                                                           *//*************************************************************/#define _GLOBLBSC_SOURCE_#include "setup.h"#if DEFGLOBAL_CONSTRUCT#include "constrct.h"#include "extnfunc.h"#include "watch.h"#include "envrnmnt.h"#include "globlcom.h"#include "globldef.h"#if BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE#include "globlbin.h"#endif#if CONSTRUCT_COMPILER && (! RUN_TIME)#include "globlcmp.h"#endif#include "globlbsc.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static void                    SaveDefglobals(void *,void *,char *);   static void                    ResetDefglobalAction(void *,struct constructHeader *,void *);#if DEBUGGING_FUNCTIONS && (! RUN_TIME)   static unsigned                DefglobalWatchAccess(void *,int,unsigned,struct expr *);   static unsigned                DefglobalWatchPrint(void *,char *,int,struct expr *);#endif/****************************************//* GLOBAL INTERNAL VARIABLE DEFINITIONS *//****************************************/#if DEBUGGING_FUNCTIONS   globle unsigned              WatchGlobals = OFF;#endif/*****************************************************************//* DefglobalBasicCommands: Initializes basic defglobal commands. *//*****************************************************************/globle void DefglobalBasicCommands(  void *theEnv)  {   AddSaveFunction(theEnv,"defglobal",SaveDefglobals,40);   EnvAddResetFunction(theEnv,"defglobal",ResetDefglobals,50);#if ! RUN_TIME   EnvDefineFunction2(theEnv,"get-defglobal-list",'m',PTIEF GetDefglobalListFunction,"GetDefglobalListFunction","01w");   EnvDefineFunction2(theEnv,"undefglobal",'v',PTIEF UndefglobalCommand,"UndefglobalCommand","11w");   EnvDefineFunction2(theEnv,"defglobal-module",'w',PTIEF DefglobalModuleFunction,"DefglobalModuleFunction","11w");#if DEBUGGING_FUNCTIONS   EnvDefineFunction2(theEnv,"list-defglobals",'v', PTIEF ListDefglobalsCommand,"ListDefglobalsCommand","01w");   EnvDefineFunction2(theEnv,"ppdefglobal",'v',PTIEF PPDefglobalCommand,"PPDefglobalCommand","11w");   AddWatchItem(theEnv,"globals",0,&WatchGlobals,0,DefglobalWatchAccess,DefglobalWatchPrint);#endif#if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)   DefglobalBinarySetup(theEnv);#endif#if CONSTRUCT_COMPILER && (! RUN_TIME)   DefglobalCompilerSetup(theEnv);#endif#endif  }/*************************************************************//* ResetDefglobals: Defglobal reset routine for use with the *//*   reset command. Restores the values of the defglobals.   *//*************************************************************/globle void ResetDefglobals(  void *theEnv)  {   if (! EnvGetResetGlobals(theEnv)) return;   DoForAllConstructs(theEnv,ResetDefglobalAction,DefglobalData(theEnv)->DefglobalModuleIndex,TRUE,NULL);  }/******************************************************//* ResetDefglobalAction: Action to be applied to each *//*   defglobal construct during a reset command.      *//******************************************************/#if IBM_TBC#pragma argsused#endifstatic void ResetDefglobalAction(  void *theEnv,  struct constructHeader *theConstruct,  void *buffer)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(buffer)#endif   struct defglobal *theDefglobal = (struct defglobal *) theConstruct;   DATA_OBJECT assignValue;   if (EvaluateExpression(theEnv,theDefglobal->initial,&assignValue))     {      assignValue.type = SYMBOL;      assignValue.value = EnvFalseSymbol(theEnv);     }   QSetDefglobalValue(theEnv,theDefglobal,&assignValue,FALSE);  }/******************************************//* SaveDefglobals: Defglobal save routine *//*   for use with the save command.       *//******************************************/static void SaveDefglobals(  void *theEnv,  void *theModule,  char *logicalName)  {   SaveConstruct(theEnv,theModule,logicalName,DefglobalData(theEnv)->DefglobalConstruct);   }/********************************************//* UndefglobalCommand: H/L access routine   *//*   for the undefglobal command.           *//********************************************/globle void UndefglobalCommand(  void *theEnv)  {   UndefconstructCommand(theEnv,"undefglobal",DefglobalData(theEnv)->DefglobalConstruct);   }/************************************//* EnvUndefglobal: C access routine *//*   for the undefglobal command.   *//************************************/globle intBool EnvUndefglobal(  void *theEnv,  void *theDefglobal)  {   return(Undefconstruct(theEnv,theDefglobal,DefglobalData(theEnv)->DefglobalConstruct));   }/**************************************************//* GetDefglobalListFunction: H/L access routine   *//*   for the get-defglobal-list function.         *//**************************************************/globle void GetDefglobalListFunction(  void *theEnv,  DATA_OBJECT_PTR returnValue)  {    GetConstructListFunction(theEnv,"get-defglobal-list",returnValue,DefglobalData(theEnv)->DefglobalConstruct);   }/******************************************//* EnvGetDefglobalList: C access routine  *//*   for the get-defglobal-list function. *//******************************************/globle void EnvGetDefglobalList(  void *theEnv,  DATA_OBJECT_PTR returnValue,  void *theModule)  {   GetConstructList(theEnv,returnValue,DefglobalData(theEnv)->DefglobalConstruct,(struct defmodule *) theModule);   }/*************************************************//* DefglobalModuleFunction: H/L access routine   *//*   for the defglobal-module function.          *//*************************************************/globle void *DefglobalModuleFunction(  void *theEnv)  {    return(GetConstructModuleCommand(theEnv,"defglobal-module",DefglobalData(theEnv)->DefglobalConstruct));   }#if DEBUGGING_FUNCTIONS/********************************************//* PPDefglobalCommand: H/L access routine   *//*   for the ppdefglobal command.           *//********************************************/globle void PPDefglobalCommand(  void *theEnv)  {   PPConstructCommand(theEnv,"ppdefglobal",DefglobalData(theEnv)->DefglobalConstruct);   }/*************************************//* PPDefglobal: C access routine for *//*   the ppdefglobal command.        *//*************************************/globle int PPDefglobal(  void *theEnv,  char *defglobalName,  char *logicalName)  {   return(PPConstruct(theEnv,defglobalName,logicalName,DefglobalData(theEnv)->DefglobalConstruct));   }/***********************************************//* ListDefglobalsCommand: H/L access routine   *//*   for the list-defglobals command.          *//***********************************************/globle void ListDefglobalsCommand(  void *theEnv)  {   ListConstructCommand(theEnv,"list-defglobals",DefglobalData(theEnv)->DefglobalConstruct);  }/***************************************//* EnvListDefglobals: C access routine *//*   for the list-defglobals command.  *//***************************************/globle void EnvListDefglobals(  void *theEnv,  char *logicalName,  void *vTheModule)  {   struct defmodule *theModule = (struct defmodule *) vTheModule;   ListConstruct(theEnv,DefglobalData(theEnv)->DefglobalConstruct,logicalName,theModule);  }/*********************************************************//* EnvGetDefglobalWatch: C access routine for retrieving *//*   the current watch value of a defglobal.             *//*********************************************************/#if IBM_TBC#pragma argsused#endifgloble unsigned EnvGetDefglobalWatch(  void *theEnv,  void *theGlobal)  { #if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   return(((struct defglobal *) theGlobal)->watch);   }/********************************************************//* EnvSetDeftemplateWatch: C access routine for setting *//*   the current watch value of a deftemplate.          *//********************************************************/#if IBM_TBC#pragma argsused#endifgloble void EnvSetDefglobalWatch(  void *theEnv,  unsigned newState,  void *theGlobal)  {  #if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif   ((struct defglobal *) theGlobal)->watch = newState;   }#if ! RUN_TIME/********************************************************//* DefglobalWatchAccess: Access routine for setting the *//*   watch flag of a defglobal via the watch command.   *//********************************************************/#if IBM_TBC#pragma argsused#endifstatic unsigned DefglobalWatchAccess(  void *theEnv,  int code,  unsigned newState,  EXPRESSION *argExprs)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(code)#endif   return(ConstructSetWatchAccess(theEnv,DefglobalData(theEnv)->DefglobalConstruct,newState,argExprs,                                  EnvGetDefglobalWatch,EnvSetDefglobalWatch));  }/*********************************************************************//* DefglobalWatchPrint: Access routine for printing which defglobals *//*   have their watch flag set via the list-watch-items command.     *//*********************************************************************/#if IBM_TBC#pragma argsused#endifstatic unsigned DefglobalWatchPrint(  void *theEnv,  char *logName,  int code,  EXPRESSION *argExprs)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(code)#endif   return(ConstructPrintWatchAccess(theEnv,DefglobalData(theEnv)->DefglobalConstruct,logName,argExprs,                                    EnvGetDefglobalWatch,EnvSetDefglobalWatch));  }#endif#endif /* DEBUGGING_FUNCTIONS */#endif /* DEFGLOBAL_CONSTRUCT */

⌨️ 快捷键说明

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