Welcome to the CHICKEN Scheme pasting service
Is this FFI done right? pasted by C-Keen on Sat Oct 8 21:33:31 2011
(define-foreign-variable sizeof-cairo-text-extents int "sizeof(cairo_text_extents_t)") (define-record cairo-text-extents-type buffer) (let ((maker make-cairo-text-extents-type)) (set! make-cairo-text-extents-type (lambda () (maker (make-u8vector sizeof-cairo-text-extents))))) (define-record-printer (cairo-text-extents-type te out) (list "#<cairo-text-extents " (cairo-text-extents-x-bearing te)" " (cairo-text-extents-y-bearing te)" " (cairo-text-extents-width te)" " (cairo-text-extents-height te)" " (cairo-text-extents-x-advance te)" " (cairo-text-extents-y-advance te)">")))) (b (cairo-text-extents-type-buffer te))) (define cairo-text-extents-x-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->x_bearing);")) (define cairo-text-extents-y-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->y_bearing);")) (define cairo-text-extents-width (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->width);")) (define cairo-text-extents-height (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->height);")) (define cairo-text-extents-x-advance (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->x_advance);")) (define cairo-text-extents-y-advance (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->y_advance);")) (define cairo-text-extents-x-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->x_bearing = v;")) (define cairo-text-extents-y-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->y_bearing = v;")) (define cairo-text-extents-width-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->width = v;")) (define cairo-text-extents-height-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->height = v;")) (define cairo-text-extents-x-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->x_advance = v;")) (define cairo-text-extents-y-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->y_advance = v;")) (define cairo-text-extents (foreign-lambda void "cairo_text_extents" cairo_t c-string cairo_text_extents_t))
and the missing definition pasted by C-Keen on Sat Oct 8 21:35:36 2011
(define-foreign-type cairo_text_extents_t (c-pointer "cairo_text_extents_t")a possible fix? added by C-Keen on Sat Oct 8 22:13:29 2011
$ svn diff Index: cairo.scm =================================================================== --- cairo.scm (revision 25270) +++ cairo.scm (working copy) @@ -303,7 +303,7 @@ (define-record cairo-text-extents-type buffer) (let ((maker make-cairo-text-extents-type)) (set! make-cairo-text-extents-type - (lambda () (maker (make-u8vector sizeof-cairo-text-extents))))) + (lambda () (maker (make-blob sizeof-cairo-text-extents))))) (define-record-printer (cairo-text-extents-type te out) (for-each (lambda (x) (display x out) @@ -315,26 +315,21 @@ (cairo-text-extents-x-advance te)" " (cairo-text-extents-y-advance te)">")))) -(define-foreign-type cairo_text_extents_t (c-pointer "cairo_text_extents_t") - (lambda (te) - (let ((p (##sys#make-pointer)) - (b (cairo-text-extents-type-buffer te))) - (if b (##core#inline "C_pointer_to_block" p b)) - p))) +(define-foreign-type cairo_text_extents_t scheme-pointer) -(define cairo-text-extents-x-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->x_bearing);")) -(define cairo-text-extents-y-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->y_bearing);")) -(define cairo-text-extents-width (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->width);")) -(define cairo-text-extents-height (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->height);")) -(define cairo-text-extents-x-advance (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->x_advance);")) -(define cairo-text-extents-y-advance (foreign-lambda* double ((cairo_text_extents_t te)) "return(te->y_advance);")) +(define cairo-text-extents-x-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "return(((cairo_text_extents_t*)te)->x_bearing);")) +(define cairo-text-extents-y-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "return(((cairo_text_extents_t*)te)->y_bearing);")) +(define cairo-text-extents-width (foreign-lambda* double ((cairo_text_extents_t te)) "return(((cairo_text_extents_t*)te)->width);")) +(define cairo-text-extents-height (foreign-lambda* double ((cairo_text_extents_t te)) "return(((cairo_text_extents_t*)te)->height);")) +(define cairo-text-extents-x-advance (foreign-lambda* double ((cairo_text_extents_t te)) "return(((cairo_text_extents_t*)te)->x_advance);")) +(define cairo-text-extents-y-advance (foreign-lambda* double ((cairo_text_extents_t te)) "return(((cairo_text_extents_t*)te)->y_advance);")) -(define cairo-text-extents-x-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->x_bearing = v;")) -(define cairo-text-extents-y-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->y_bearing = v;")) -(define cairo-text-extents-width-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->width = v;")) -(define cairo-text-extents-height-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->height = v;")) -(define cairo-text-extents-x-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->x_advance = v;")) -(define cairo-text-extents-y-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "te->y_advance = v;")) +(define cairo-text-extents-x-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->x_bearing = v;")) +(define cairo-text-extents-y-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->y_bearing = v;")) +(define cairo-text-extents-width-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->width = v;")) +(define cairo-text-extents-height-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->height = v;")) +(define cairo-text-extents-x-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->x_advance = v;")) +(define cairo-text-extents-y-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->y_advance = v;")) (define-foreign-variable sizeof-cairo-font-extents int "sizeof(cairo_font_extents_t)")