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.