Note: This is taken from the Chicken Wiki, where a more recent version could be available.



A simple graphics library for X11.


n-sibata and Morihiko Tamai, packaged for CHICKEN by felix winkelmann.


Requires the easyffi egg.




ezxdisp is a simple graphics library for 2D/3D graphical applications. (The official distribution can be found here).

Initialize/Finalize a window

<procedure>(ezx-init SIZE_X SIZE_Y WINDOW_NAME)</procedure>

This procedure returns a EZX object all other procedures accept.

<procedure>(ezx-quit EZX)</procedure>

Update the graphics in the window

<procedure>(ezx-redraw EZX)</procedure>

Erase the graphics in the window/layer

<procedure>(ezx-wipe EZX)</procedure> <procedure>(ezx-wipe-layer EZX LAYER)</procedure>

LAYER should be an exact integer between 0 and 8.

Get the pointer coordinates

<procedure>(ezx-sensebutton EZX)</procedure>

Returns the current pointer coordinates as three values: BUTTON, X and Y

<procedure>(ezx-pushbutton EZX)</procedure>

Block until an event is received. Returns three values: BUTTON, X and Y

The BUTTON result is 1, 2 or 3 for the first, second and third mouse button, respectively. The button number is additionally bitwise OR'd with 8 if the shift key is pressed and with 16 if the control key is pressed.

Draw 2D graphics

<procedure>(ezx-line-2d EZX X0 Y0 X1 Y1 COLOR WIDTH)</procedure> <procedure>(ezx-circle-2d EZX X0 Y0 R COLOR WIDTH)</procedure> <procedure>(ezx-fillcircle-2d EZX X0 Y0 R COLOR WIDTH)</procedure> <procedure>(ezx-str-2d EZX X0 Y0 STRING COLOR)</procedure> <procedure>(ezx-fillrect-2d EZX X0 Y0 X1 Y1 COLOR)</procedure>

Draw 3D graphics

<procedure>(ezx-set-light-3d EZX EX EY EZ)</procedure> <procedure>(ezx-set-view-3d EZX EX EY EZ VX VY VZ M)</procedure>

<procedure>(ezx-c3d-to-2d EZX SX SY SZ)</procedure>

Returns two values, DX and DY.

<procedure>(ezx-line-3d EZX X0 Y0 Z0 X1 Y1 Z1 COLOR WIDTH)</procedure> <procedure>(ezx-str-3d EZX X0 Y0 Z0 STRING COLOR WIDTH)</procedure> <procedure>(ezx-poly-3d EZX POINTS HX HY HZ N COLOR)</procedure> <procedure>(ezx-circle-3d EZX X0 Y0 Z0 R COLOR)</procedure>

The POINTS argument should be a SRFI-4 f64vector containing X, Y and Z coordinates.

Miscellaneous functions

<procedure>(ezx-select-layer EZX LAYER)</procedure>

Focuses on the layer.

<procedure>(ezx-raise-window EZX)</procedure>

Raises the window.

<procedure>(ezx-window-name EZX STRING)</procedure>

Sets a name of the window.

<procedure>(ezx-set-background EZX COLOR)</procedure>

Sets the background color of the window.


<procedure>(make-ezx-color R G B)</procedure>

This procedure returns a "color object", which is internally encoded as a f64vector. The red, green and blue components should be between 0 and 1.


<example> <expr> (define ezx (ezx-init 100 100 "Hello, ezxdisp")) (ezx-set-background ezx (make-ezx-color 1 1 1)) (ezx-fillcircle-2d ezx 50 50 25 (make-ezx-color 1 0 0) 1) (ezx-redraw ezx)

(let loop ()

 (let-values ([(b _ _) (ezx-pushbutton ezx)])
   (when (zero? b) (loop)) ) )

(ezx-quit ezx) </expr> </example>

A more elaborate example is in the egg distribution in a file named 3d_clock.scm, which displays an animated 3D-clock.



 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA