3.2.6 Wrapping Another Simple C Type

If you want to wrap a simple C type which is does not fit in any of
the categories above, then G-Wrap provides a simple high-level
function for that purpose.

method: wrap-simple-type!(wrapset . <gw-wrapset>) . args

Add the type described by args to the list of types to be
wrapped by wrapset. The arguments in args must contain
the following named parameters:

#:name

a symbol that is the name for this wrapped type as used within the
G-Wrap framework;

#:c-type-name

a string that is the C name of this enumerate type;

#:type-check

a list representing C expression that returns true if the given Scheme
value’s type is this type; this list may contain strings (representing
part of the C expression) and the scm-var symbol which will be
expanded to the name of the C variable that holds the Scheme value;

#:ffspec

a symbol representing the libffi type name that describes this type
best; it may be, for instance, pointer for pointer types,
long for long integers, etc.; in other words, this is meant to
provide run-time type information, as described in See Wrapped Types.

#:unwrap

a list representing a C statement that assigns (and converts) the
value of a C variable holding a Scheme value to a C variable holding
the corresponding C value; as for #:type-check, this list may
only contain strings and symbols; the symbol scm-var will be
expanded to the name of the C variable that holds the Scheme value,
while the symbol c-var will be expanded to the C variables that
will hold the corresponding C value;

#:wrap

a list representing a C statement that assigns (and converts) the
value of a C variable holding a C value to a C variable holding the
corresponding Scheme value; the content and interpretation of the list
as the same as for #:unwrap;

#:description

an optional description of this type.

As an example, the simple scm wrapped type which lets the user
wrap C functions that take or return raw SCM objects
(see Guile’s SCM type in The GNU Guile
Reference Manual) is defined as follows: