Annotation of libwww/Library/src/HTEvent.c, revision 2.7
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.7 ! frystyk 6: ** @(#) $Id: HTEvent.c,v 2.6 1996/12/13 22:06:01 eric 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.2 frystyk 30: if (CORE_TRACE) HTTrace("Event....... registering %p\n", registerCBF);
2.1 eric 31: RegisterCBF = registerCBF;
32: }
33:
34: PUBLIC void HTEvent_setUnregisterCallback(HTEvent_unregisterCallback * unregisterCBF)
35: {
2.2 frystyk 36: if (CORE_TRACE) HTTrace("Event....... registering %p\n", unregisterCBF);
2.1 eric 37: UnregisterCBF = unregisterCBF;
38: }
39:
2.4 frystyk 40: PUBLIC int HTEvent_unregister (SOCKET s, HTEventType type)
41: {
42: if (!UnregisterCBF) {
43: if (CORE_TRACE) HTTrace("Event....... No handler registered\n");
44: return -1;
45: }
46: return (*UnregisterCBF)(s, type);
47: }
2.1 eric 48:
2.4 frystyk 49: PUBLIC int HTEvent_register(SOCKET s, HTEventType type, HTEvent * event)
2.1 eric 50: {
2.2 frystyk 51: if (!RegisterCBF) {
52: if (CORE_TRACE) HTTrace("Event....... No handler registered\n");
2.1 eric 53: return -1;
2.2 frystyk 54: }
2.4 frystyk 55: return (*RegisterCBF)(s, type, event);
56: }
57:
58: PUBLIC BOOL HTEvent_setCallback(HTEvent * event, HTEventCallback * cbf)
59: {
60: if (!event) return NO;
61: event->cbf = cbf;
62: return YES;
63: }
64:
65: PUBLIC HTEvent * HTEvent_new (HTEventCallback * cbf, void * context,
66: HTPriority priority, int millis)
67: {
68: if (cbf) {
69: HTEvent * me;
70: if ((me = (HTEvent *) HT_CALLOC(1, sizeof(HTEvent))) == NULL)
71: HT_OUTOFMEM("HTEvent_new");
72: me->cbf = cbf;
73: me->param = context;
74: me->priority = priority;
75: me->millis = millis;
2.5 frystyk 76: if (CORE_TRACE)
77: HTTrace("Event....... Created event %p with context %p, priority %d, and timeout %d\n",
78: me, context, priority, millis);
2.4 frystyk 79: return me;
80: }
81: return NULL;
2.1 eric 82: }
83:
2.4 frystyk 84: PUBLIC BOOL HTEvent_delete (HTEvent * me)
2.1 eric 85: {
2.4 frystyk 86: if (me) {
87: HT_FREE(me);
88: if (CORE_TRACE) HTTrace("Event....... Deleted event %p\n", me);
89: return YES;
90: }
91: return NO;
92: }
93:
94: PUBLIC BOOL HTEvent_setParam(HTEvent * event, void * param)
95: {
96: if (!event) return NO;
97: event->param = param;
98: return YES;
99: }
100:
101: PUBLIC BOOL HTEvent_setPriority(HTEvent * event, HTPriority priority)
102: {
103: if (!event) return NO;
104: event->priority = priority;
105: return YES;
106: }
107:
108: PUBLIC BOOL HTEvent_setTimeout(HTEvent * event, int timeout)
109: {
110: if (event) {
111: event->millis = timeout;
112: return YES;
2.2 frystyk 113: }
2.4 frystyk 114: return NO;
2.6 eric 115: }
116:
117: PUBLIC char * HTEvent_type2str(HTEventType type)
118: {
119: int i;
120: static char space[20]; /* in case we have to sprintf type */
121: static struct {int type; char * str;} match[] = {HT_EVENT_INITIALIZER};
122: for (i = 0; i < sizeof(match)/sizeof(match[0]); i++)
123: if (match[i].type == type)
124: return match[i].str;
125: sprintf(space, "0x%x", type);
126: return space;
2.1 eric 127: }
128:
Webmaster