00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef _H_envrnmnt
00032 #define _H_envrnmnt
00033
00034 #ifndef _H_symbol
00035 #include "symbol.h"
00036 #endif
00037
00038 #ifdef LOCALE
00039 #undef LOCALE
00040 #endif
00041
00042 #ifdef _ENVRNMNT_SOURCE_
00043 #define LOCALE
00044 #else
00045 #define LOCALE extern
00046 #endif
00047
00048 #define USER_ENVIRONMENT_DATA 70
00049 #define MAXIMUM_ENVIRONMENT_POSITIONS 100
00050
00051 struct environmentCleanupFunction
00052 {
00053 char *name;
00054 void (*func)(void *);
00055 int priority;
00056 struct environmentCleanupFunction *next;
00057 };
00058
00059 struct environmentData
00060 {
00061 unsigned int initialized : 1;
00062 unsigned long environmentIndex;
00063 void *context;
00064 void *routerContext;
00065 void *functionContext;
00066 void *callbackContext;
00067 void **theData;
00068 void (**cleanupFunctions)(void *);
00069 struct environmentCleanupFunction *listOfCleanupEnvironmentFunctions;
00070 struct environmentData *next;
00071 };
00072
00073 typedef struct environmentData ENVIRONMENT_DATA;
00074 typedef struct environmentData * ENVIRONMENT_DATA_PTR;
00075
00076 #define GetEnvironmentData(theEnv,position) (((struct environmentData *) theEnv)->theData[position])
00077 #define SetEnvironmentData(theEnv,position,value) (((struct environmentData *) theEnv)->theData[position] = value)
00078
00079 LOCALE intBool AllocateEnvironmentData(void *,unsigned int,unsigned long,void (*)(void *));
00080 LOCALE intBool DeallocateEnvironmentData(void);
00081 #if ALLOW_ENVIRONMENT_GLOBALS
00082 LOCALE void SetCurrentEnvironment(void *);
00083 LOCALE intBool SetCurrentEnvironmentByIndex(unsigned long);
00084 LOCALE void *GetEnvironmentByIndex(unsigned long);
00085 LOCALE void *GetCurrentEnvironment(void);
00086 LOCALE unsigned long GetEnvironmentIndex(void *);
00087 #endif
00088 LOCALE void *CreateEnvironment(void);
00089 LOCALE void *CreateRuntimeEnvironment(struct symbolHashNode **,struct floatHashNode **,
00090 struct integerHashNode **,struct bitMapHashNode **);
00091 LOCALE intBool DestroyEnvironment(void *);
00092 LOCALE intBool AddEnvironmentCleanupFunction(void *,char *,void (*)(void *),int);
00093 LOCALE void *GetEnvironmentContext(void *);
00094 LOCALE void *SetEnvironmentContext(void *,void *);
00095 LOCALE void *GetEnvironmentRouterContext(void *);
00096 LOCALE void *SetEnvironmentRouterContext(void *,void *);
00097 LOCALE void *GetEnvironmentFunctionContext(void *);
00098 LOCALE void *SetEnvironmentFunctionContext(void *,void *);
00099 LOCALE void *GetEnvironmentCallbackContext(void *);
00100 LOCALE void *SetEnvironmentCallbackContext(void *,void *);
00101
00102 #endif
00103