Annotation of libwww/Library/src/HTEvent.c, revision 2.9
2.1 eric 1: /* HTEvntrg.c
2: ** EVENT DISPATCHER
3: **
4: ** (c) COPYRIGHT MIT 1996.
5: ** Please first read the full copyright statement in the file COPYRIGH.
2.9 ! frystyk 6: ** @(#) $Id: HTEvent.c,v 2.8 1998/08/10 02:42:12 frystyk Exp $
2.1 eric 7: **
8: ** The event dispatcher allows applications to register their own event
9: ** models. They may register the standard HTEventrg methods from
10: ** HTEventrg.c, of implement their functionality with their on methods.
11: **
12: ** Authors:
13: ** EGP Eric Gordon Prud'hommeuax
14: ** Bugs
15: **
16: */
17:
18: /* Implementation dependent include files */
2.7 frystyk 19: #include "wwwsys.h"
2.2 frystyk 20: #include "WWWUtil.h"
2.1 eric 21: #include "HTEvent.h" /* Implemented here */
22:
2.2 frystyk 23: PRIVATE HTEvent_registerCallback * RegisterCBF = NULL;
24: PRIVATE HTEvent_unregisterCallback * UnregisterCBF = NULL;
2.1 eric 25:
2.4 frystyk 26: /* ------------------------------------------------------------------------- */
27:
2.1 eric 28: PUBLIC void HTEvent_setRegisterCallback(HTEvent_registerCallback * registerCBF)
29: {
2.9 ! frystyk 30: HTTRACE(CORE_TRACE, "Event....... registering %p\n" _ registerCBF);
2.1 eric 31: RegisterCBF = registerCBF;
32: }
33:
34: PUBLIC void HTEvent_setUnregisterCallback(HTEvent_unregisterCallback * unregisterCBF)
35: {
2.9 ! frystyk 36: HTTRACE(CORE_TRACE, "Event....... registering %p\n" _ unregisterCBF);
2.1 eric 37: UnregisterCBF = unregisterCBF;
2.8 frystyk 38: }
39:
40: PUBLIC BOOL HTEvent_isCallbacksRegistered (void)
41: {
42: return (RegisterCBF && UnregisterCBF);
2.1 eric 43: }
44:
2.4 frystyk 45: PUBLIC int HTEvent_unregister (SOCKET s, HTEventType type)
46: {
47: if (!UnregisterCBF) {
2.9 ! frystyk 48: HTTRACE(CORE_TRACE, "Event....... No handler registered\n");
2.4 frystyk 49: return -1;
50: }
51: return (*UnregisterCBF)(s, type);
52: }
2.1 eric 53:
2.4 frystyk 54: PUBLIC int HTEvent_register(SOCKET s, HTEventType type, HTEvent * event)
2.1 eric 55: {
2.2 frystyk 56: if (!RegisterCBF) {
2.9 ! frystyk 57: HTTRACE(CORE_TRACE, "Event....... No handler registered\n");
2.1 eric 58: return -1;
2.2 frystyk 59: }
2.4 frystyk 60: return (*RegisterCBF)(s, type, event);
61: }
62:
63: PUBLIC BOOL HTEvent_setCallback(HTEvent * event, HTEventCallback * cbf)
64: {
65: if (!event) return NO;
66: event->cbf = cbf;
67: return YES;
68: }
69:
70: PUBLIC HTEvent * HTEvent_new (HTEventCallback * cbf, void * context,
71: HTPriority priority, int millis)
72: {
73: if (cbf) {
74: HTEvent * me;
75: if ((me = (HTEvent *) HT_CALLOC(1, sizeof(HTEvent))) == NULL)
76: HT_OUTOFMEM("HTEvent_new");
77: me->cbf = cbf;
78: me->param = context;
79: me->priority = priority;
80: me->millis = millis;
2.9 ! frystyk 81: HTTRACE(CORE_TRACE, "Event....... Created event %p with context %p, priority %d, and timeout %d\n" _
! 82: me _ context _ priority _ millis);
2.4 frystyk 83: return me;
84: }
85: return NULL;
2.1 eric 86: }
87:
2.4 frystyk 88: PUBLIC BOOL HTEvent_delete (HTEvent * me)
2.1 eric 89: {
2.4 frystyk 90: if (me) {
91: HT_FREE(me);
2.9 ! frystyk 92: HTTRACE(CORE_TRACE, "Event....... Deleted event %p\n" _ me);
2.4 frystyk 93: return YES;
94: }
95: return NO;
96: }
97:
98: PUBLIC BOOL HTEvent_setParam(HTEvent * event, void * param)
99: {
100: if (!event) return NO;
101: event->param = param;
102: return YES;
103: }
104:
105: PUBLIC BOOL HTEvent_setPriority(HTEvent * event, HTPriority priority)
106: {
107: if (!event) return NO;
108: event->priority = priority;
109: return YES;
110: }
111:
112: PUBLIC BOOL HTEvent_setTimeout(HTEvent * event, int timeout)
113: {
114: if (event) {
115: event->millis = timeout;
116: return YES;
2.2 frystyk 117: }
2.4 frystyk 118: return NO;
2.6 eric 119: }
120:
121: PUBLIC char * HTEvent_type2str(HTEventType type)
122: {
123: int i;
124: static char space[20]; /* in case we have to sprintf type */
125: static struct {int type; char * str;} match[] = {HT_EVENT_INITIALIZER};
126: for (i = 0; i < sizeof(match)/sizeof(match[0]); i++)
127: if (match[i].type == type)
128: return match[i].str;
129: sprintf(space, "0x%x", type);
130: return space;
2.1 eric 131: }
132:
Webmaster