To create a new foreign object type from C, call
scm_make_foreign_object_type
. It returns a value of type
SCM
which identifies the new type.
Here is how one might declare a new type representing eight-bit gray-scale images:
#include <libguile.h> struct image { int width, height; char *pixels; /* The name of this image */ SCM name; /* A function to call when this image is modified, e.g., to update the screen, or SCM_BOOL_F if no action necessary */ SCM update_func; }; static SCM image_type; void init_image_type (void) { SCM name, slots; scm_t_struct_finalize finalizer; name = scm_from_utf8_symbol ("image"); slots = scm_list_1 (scm_from_utf8_symbol ("data")); finalizer = NULL; image_type = scm_make_foreign_object_type (name, slots, finalizer); }
The result is an initialized image_type
value that identifies the
new foreign object type. The next section describes how to create
foreign objects and how to access their slots.