Assuming this objective, four steps are needed to achieve it.
First, you need a way of representing your application-specific objects
— such as
shape in the previous example — when they are
passed into the Scheme world. Unless your objects are so simple that
they map naturally into builtin Scheme data types like numbers and
strings, you will probably want to use Guile's SMOB interface to
create a new Scheme data type for your objects.
Second, you need to write code for the basic operations like
square? such that they access and
manipulate your existing data structures correctly, and then make these
operations available as primitives on the Scheme level.
Third, you need to provide some mechanism within the Dia application that a user can hook into to cause arbitrary Scheme code to be evaluated.
Finally, you need to restructure your top-level application C code a little so that it initializes the Guile interpreter correctly and declares your SMOBs and primitives to the Scheme world.
The following subsections expand on these four points in turn.