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