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 #ifndef _H_msgpass
00027 #define _H_msgpass
00028
00029 #define GetActiveInstance(theEnv) ((INSTANCE_TYPE *) GetNthMessageArgument(theEnv,0)->value)
00030
00031 #ifndef _H_object
00032 #include "object.h"
00033 #endif
00034
00035 typedef struct messageHandlerLink
00036 {
00037 HANDLER *hnd;
00038 struct messageHandlerLink *nxt;
00039 struct messageHandlerLink *nxtInStack;
00040 } HANDLER_LINK;
00041
00042 #ifdef LOCALE
00043 #undef LOCALE
00044 #endif
00045
00046 #ifdef _MSGPASS_SOURCE_
00047 #define LOCALE
00048 #else
00049 #define LOCALE extern
00050 #endif
00051
00052 #define Send(a,b,c,d) EnvSend(GetCurrentEnvironment(),a,b,c,d)
00053
00054 LOCALE void DirectMessage(void *,SYMBOL_HN *,INSTANCE_TYPE *,
00055 DATA_OBJECT *,EXPRESSION *);
00056 LOCALE void EnvSend(void *,DATA_OBJECT *,char *,char *,DATA_OBJECT *);
00057 LOCALE void DestroyHandlerLinks(void *,HANDLER_LINK *);
00058 LOCALE void SendCommand(void *,DATA_OBJECT *);
00059 LOCALE DATA_OBJECT *GetNthMessageArgument(void *,int);
00060
00061 LOCALE int NextHandlerAvailable(void *);
00062 LOCALE void CallNextHandler(void *,DATA_OBJECT *);
00063
00064 LOCALE void FindApplicableOfName(void *,DEFCLASS *,HANDLER_LINK *[],
00065 HANDLER_LINK *[],SYMBOL_HN *);
00066 LOCALE HANDLER_LINK *JoinHandlerLinks(void *,HANDLER_LINK *[],HANDLER_LINK *[],SYMBOL_HN *);
00067
00068 LOCALE void PrintHandlerSlotGetFunction(void *,char *,void *);
00069 LOCALE intBool HandlerSlotGetFunction(void *,void *,DATA_OBJECT *);
00070 LOCALE void PrintHandlerSlotPutFunction(void *,char *,void *);
00071 LOCALE intBool HandlerSlotPutFunction(void *,void *,DATA_OBJECT *);
00072 LOCALE void DynamicHandlerGetSlot(void *,DATA_OBJECT *);
00073 LOCALE void DynamicHandlerPutSlot(void *,DATA_OBJECT *);
00074
00075 #endif
00076
00077
00078
00079
00080
00081
00082