;;;;; ezxdisp.scm (module ezxdisp * (import scheme chicken (except foreign foreign-declare)) (use srfi-4) (require-extension easyffi) #> #include "ezxdisp.h" static int get_next_event(ezx_t *e, int *x, int *y, unsigned int *state, unsigned int *kb) { ezx_event_t ev; ezx_next_event(e, &ev); switch(ev.type) { case EZX_BUTTON_PRESS: case EZX_BUTTON_RELEASE: *kb = ev.button.b; *x = ev.button.x; *y = ev.button.y; *state = ev.button.state; break; case EZX_KEY_PRESS: case EZX_KEY_RELEASE: *kb = ev.key.k & 0xffff; *x = ev.key.x; *y = ev.key.y; *state = ev.key.state; break; case EZX_MOTION_NOTIFY: *x = ev.motion.x; *y = ev.motion.y; *state = ev.motion.state; break; } return ev.type; } <# (declare (hide ezx-ptr ezx-ptr-set! make-ezx get-next-event) ) (define-record ezx ptr) (foreign-parse #<