/* event logger */
#define EVSHIFT 24
#define EVMASK	0xFFFFFF
#define EVRING	1024
typedef int event_t;
event_t eventbuff[EVRING];
event_t *evp=eventbuff;
int evfd=0;
#define EVPUT(val) {*evp++ =htonl(val);\
	if (evp >= &eventbuff[EVRING])evflush();}
#define Event(c, v) {if (evfd) {EVPUT(((c)<<EVSHIFT) | ((v) & EVMASK))}}
#define Event2(c, v, v2) {if (evfd) {\
	if (evp >= &eventbuff[EVRING-1]) EVPUT(0); \
	Event(c, v); EVPUT(v2);}}
#define EventTime(c, t) Event2(c, (t)->tv_sec, (t)->tv_usec)

#ifdef EVFLUSH
void evflush()
{
  struct timeval stamp;
  NOERROR(write(evfd, eventbuff, (char *)evp - (char *)eventbuff),
	    "evflush");
  evp = eventbuff;

  gettimeofday(&stamp, 0);
  EventTime('L', &stamp);	/* Flush the log (how long did it take?) */
}
#else /* EVFLUSH */

/* nothing at the moment */

#endif /* EVFLUSH */
