chickadee » bind » bind-type

(bind-type TYPENAME SCHEMETYPE [CONVERTARGUMENT [CONVERTRESULT]])syntax

Declares a foreign type transformation, similar to define-foreign-type. There should be two to four arguments: a C type name, a Scheme foreign type specifier and optional argument- and result-value conversion procedures.

;;;; foreign type that converts to unicode (assumes 4-byte wchar_t):
;
; - Note: this is rather kludgy and is only meant to demonstrate the `bind-type'
;         syntax

(import srfi-4 bind)

(define mbstowcs (foreign-lambda int "mbstowcs" nonnull-u32vector c-string int))

(define (str->ustr str)
  (let* ([len (string-length str)]
         [us (make-u32vector (add1 len) 0)] )
    (mbstowcs us str len)
    us) )

(bind-type unicode nonnull-u32vector str->ustr)

(bind* #<<EOF
static void foo(unicode ws)
{
  printf("%ls\n", ws);
}
EOF
)

(foo "this is a test!")