On Jan 10, 2008 10:17 PM, Mark Fredrickson <[EMAIL PROTECTED]> wrote:

> 1. Many of the GEOS functions return 'char', even though the actual
> data should be a bool. Is there a way to tell easyffi to treat these
> characters as #t/#f? I'm thinking there might be a __declare() for it,
> but I didn't see anything that made immediate sense to me.

Try using the ___bool return type instead of char.

> 2. Several of the functions return ints to represent success, errors,
> and take a "return" argument by reference.

> extern int GEOSLength(const GEOSGeometry* g1, double *length);

You can use the ___out modifier on the length argument; search for it
in the easyffi doc.   This will allocate temporary storage and return
2 values you access with let-values.

(let-values (((rv len) (GEOSLength g1)))
  (and rv (print "length: " len)))

Alternatively, without changing the prototype you can use let-location
to allocate the storage yourself (see
http://chicken.wiki.br/Locations)

(let-location ((len double))
  (and (GEOSLength g1 (location len))
       (print "length: " len)))

> 3. How do you get those cool <#TYPENAME> print outs in the the
> interpreter?

Use define-record-printer for output, and (probably easiest) SRFI-10's
define-reader-ctor for input.  If you use the latter, you should
output in corresponding format, i.e. #,(...) so it can be read back
in.

The best way to learn about this stuff is to grep through the egg
repository code.
Also study that code in general.


_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to