Annotation of researchv9/jtools/src/demo/asteroids/event.c, revision 1.1

1.1     ! root        1: #include "event.h"
        !             2: Event  *event, *efree;
        !             3: #define        NEVENT  32
        !             4: Event  eventpool[NEVENT];      /* for allocation */
        !             5: 
        !             6: /*
        !             7:  * Advance the clock
        !             8:  */
        !             9: tick()
        !            10: {
        !            11:        register Event *e=event;
        !            12:        if(e==0)
        !            13:                return;
        !            14:        --e->dt;
        !            15:        while(e->dt==0){
        !            16:                event=e->next;
        !            17:                if((*e->fn)(e->type))
        !            18:                        (void)addevent(e, e->time, e->fn, e->type);     /* it's gotta work! */
        !            19:                else{
        !            20:                        e->next=efree;
        !            21:                        efree=e;
        !            22:                }
        !            23:                e=event;
        !            24:        }
        !            25: }
        !            26: /*
        !            27:  * Add an event at time t from now
        !            28:  */
        !            29: addevent(e, t, fn, type)
        !            30:        register Event *e;
        !            31:        register t;
        !            32:        int      (*fn)();
        !            33: {
        !            34:        register Event *ep, *last=0;
        !            35:        if(e==0)
        !            36:                return 0;
        !            37:        e->fn=fn;
        !            38:        e->next=0;
        !            39:        e->type=type;
        !            40:        e->time=t;
        !            41:        for(ep=event; ep; ep=ep->next){
        !            42:                if(ep->dt < t)
        !            43:                        t -= ep->dt;
        !            44:                else{   /* gotta insert it here */
        !            45:                        if(last)
        !            46:                                last->next = e;
        !            47:                        ep->dt-=t;
        !            48:                        e->next=ep;
        !            49:                        break;
        !            50:                }
        !            51:                last=ep;
        !            52:        }
        !            53:        if(last==0)
        !            54:                event=e;
        !            55:        else if(last->next==0)
        !            56:                last->next=e;
        !            57:        e->dt=t;
        !            58:        return 1;
        !            59: }
        !            60: /*
        !            61:  * Initially link all the events together
        !            62:  */
        !            63: initevent()
        !            64: {
        !            65:        register Event *e;
        !            66:        for(e=eventpool; e<&eventpool[NEVENT-1]; e++)
        !            67:                e->next=e+1;
        !            68:        e->next=0;
        !            69:        efree=eventpool;
        !            70:        event=0;
        !            71: }
        !            72: /*
        !            73:  * Allocate a new guy out of the array
        !            74:  */
        !            75: Event *
        !            76: newevent()
        !            77: {
        !            78:        register Event *e;
        !            79:        if(e=efree)     /* assignment = */
        !            80:                efree=efree->next;
        !            81:        return e;
        !            82: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.