;;;;; ezxdisp.scm (module ezxdisp * (import scheme chicken foreign) (use srfi-4) (require-extension easyffi) #> #include "ezxdisp.h" <# (declare (hide ezx-ptr ezx-ptr-set! make-ezx) ) (define-record ezx ptr) #>? ___declare(type, "ezxp;(pointer \"ezx_t\");ezx-ptr;make-ezx") ___declare(type, "ezxp;(pointer \"ezx_t\");ezx-ptr;make-ezx") ___declare(export_constants, yes) ___declare(substitute, "_;-") ___declare(substitute, "EZX-;ezx:") enum event_type { EZX_BUTTON_PRESS, EZX_BUTTON_RELEASE, EZX_KEY_PRESS, EZX_KEY_RELEASE, EZX_MOTION_NOTIFY, EZX_CLOSE } ; ezxp ezx_init(int size_x, int size_y, char *window_name); void ezx_quit(ezxp e); void ezx_redraw(ezxp e); void ezx_wipe(ezxp e); void ezx_wipe_layer(ezxp e, int lay); void ezx_select_layer(ezxp e, int lay); void ezx_set_background(ezxp e, double *col); void ezx_window_name(ezxp e, char *window_name); int ezx_isclosed(ezxp e); int ezx_sensebutton(ezxp e, ___out int *x, ___out int *y); int ezx_pushbutton(ezxp e, ___out int *x, ___out int *y); void ezx_next_event(ezxp e, ___out int *type, ___out int *x, ___out int *y, ___out unsigned int *state, ___out unsigned int *kb); ___bool ezx_event_pending(ezxp e); // for 2D graphics void ezx_point_2d(ezxp e, int x, int y, double *col); void ezx_line_2d(ezxp e, int x0, int y0, int x1, int y1, double *col, int width); void ezx_lines_2d(ezxp e, int *points, int npoints, double *col, int width); void ezx_poly_2d(ezxp e,int *points, int npoints, double *col); void ezx_str_2d(ezxp e, double x0, double y0, char *str, double *col); void ezx_rect_2d(ezxp e, int x0, int y0, int x1, int y1, double *col, int width); void ezx_fillrect_2d(ezxp e, double x0, double y0, double x1, double y1, double *col); void ezx_circle_2d(ezxp e, int x, int y, int r, double *col, int width); void ezx_fillcircle_2d(ezxp e, int x0, int y0, int r, double *col); void ezx_arc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, double *col, int width); void ezx_fillarc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, double *col); // for 3D graphics void ezx_c3d_to_2d(ezxp e, double sx, double sy, double sz, ___out double *dx, ___out double *dy); void ezx_line_3d(ezxp e, double x0, double y0, double z0, double x1, double y1, double z1, double *col, int width); void ezx_set_light_3d(ezxp e, double ex, double ey, double ez); void ezx_set_view_3d(ezxp e, double ex, double ey, double ez, double vx, double vy, double vz, double m); void ezx_str_3d(ezxp e, double x0, double y0, double z0, char *str, double *col); void ezx_poly_3d(ezxp e, double *points, double hx, double hy, double hz, int npoints, double *col); void ezx_circle_3d(ezxp e, double x0, double y0, double z0, double r, double *col); <# (define (make-ezx-color r g b) (f64vector r g b) ) )