1 /*******************************************************/ 2 /* "C" Language Integrated Production System */ 3 /* */ 4 /* CLIPS Version 6.30 08/16/14 */ 5 /* */ 6 /* ENVRNMNT HEADER FILE */ 7 /*******************************************************/ 8 9 /*************************************************************/ 10 /* Purpose: Routines for supporting multiple environments. */ 11 /* */ 12 /* Principal Programmer(s): */ 13 /* Gary D. Riley */ 14 /* */ 15 /* Revision History: */ 16 /* */ 17 /* 6.24: Added code to CreateEnvironment to free */ 18 /* already allocated data if one of the malloc */ 19 /* calls fail. */ 20 /* */ 21 /* Modified AllocateEnvironmentData to print a */ 22 /* message if it was unable to allocate memory. */ 23 /* */ 24 /* Renamed BOOLEAN macro type to intBool. */ 25 /* */ 26 /* Added CreateRuntimeEnvironment function. */ 27 /* */ 28 /* Added support for context information when an */ 29 /* environment is created (i.e a pointer from the */ 30 /* CLIPS environment to its parent environment). */ 31 /* */ 32 /* 6.30: Added support for passing context information */ 33 /* to user defined functions and callback */ 34 /* functions. */ 35 /* */ 36 /* Support for hashing EXTERNAL_ADDRESS data */ 37 /* type. */ 38 /* */ 39 /* Added const qualifiers to remove C++ */ 40 /* deprecation warnings. */ 41 /* */ 42 /*************************************************************/ 43 44 #ifndef _H_envrnmnt 45 #define _H_envrnmnt 46 47 #ifndef _H_symbol 48 #include "symbol.h" 49 #endif 50 51 #ifdef LOCALE 52 #undef LOCALE 53 #endif 54 55 #ifdef _ENVRNMNT_SOURCE_ 56 #define LOCALE 57 #else 58 #define LOCALE extern 59 #endif 60 61 #define USER_ENVIRONMENT_DATA 70 62 #define MAXIMUM_ENVIRONMENT_POSITIONS 100 63 64 struct environmentCleanupFunction 65 { 66 const char *name; 67 void (*func)(void *); 68 int priority; 69 struct environmentCleanupFunction *next; 70 }; 71 72 struct environmentData 73 { 74 unsigned int initialized : 1; 75 unsigned long environmentIndex; 76 void *context; 77 void *routerContext; 78 void *functionContext; 79 void *callbackContext; 80 void **theData; 81 void (**cleanupFunctions)(void *); 82 struct environmentCleanupFunction *listOfCleanupEnvironmentFunctions; 83 struct environmentData *next; 84 }; 85 86 typedef struct environmentData ENVIRONMENT_DATA; 87 typedef struct environmentData * ENVIRONMENT_DATA_PTR; 88 89 #define GetEnvironmentData(theEnv,position) (((struct environmentData *) theEnv)->theData[position]) 90 #define SetEnvironmentData(theEnv,position,value) (((struct environmentData *) theEnv)->theData[position] = value) 91 92 LOCALE intBool AllocateEnvironmentData(void *,unsigned int,unsigned long,void (*)(void *)); 93 LOCALE intBool DeallocateEnvironmentData(void); 94 #if ALLOW_ENVIRONMENT_GLOBALS 95 LOCALE void SetCurrentEnvironment(void *); 96 LOCALE intBool SetCurrentEnvironmentByIndex(unsigned long); 97 LOCALE void *GetEnvironmentByIndex(unsigned long); 98 LOCALE void *GetCurrentEnvironment(void); 99 LOCALE unsigned long GetEnvironmentIndex(void *); 100 #endif 101 LOCALE void *CreateEnvironment(void); 102 LOCALE void *CreateRuntimeEnvironment(struct symbolHashNode **,struct floatHashNode **, 103 struct integerHashNode **,struct bitMapHashNode **); 104 LOCALE intBool DestroyEnvironment(void *); 105 LOCALE intBool AddEnvironmentCleanupFunction(void *,const char *,void (*)(void *),int); 106 LOCALE void *GetEnvironmentContext(void *); 107 LOCALE void *SetEnvironmentContext(void *,void *); 108 LOCALE void *GetEnvironmentRouterContext(void *); 109 LOCALE void *SetEnvironmentRouterContext(void *,void *); 110 LOCALE void *GetEnvironmentFunctionContext(void *); 111 LOCALE void *SetEnvironmentFunctionContext(void *,void *); 112 LOCALE void *GetEnvironmentCallbackContext(void *); 113 LOCALE void *SetEnvironmentCallbackContext(void *,void *); 114 115 #endif /* _H_envrnmnt */ 116 117