(define _ref_int (foreign-function "_ref_int" (unsigned-32 integer-32) integer-32)) (define _set_int (foreign-function "_set_int" (unsigned-32 integer-32 integer-32) void)) (define _ref_uint (foreign-function "_ref_uint" (unsigned-32 integer-32) integer-32)) (define _set_uint (foreign-function "_set_uint" (unsigned-32 integer-32 unsigned-32) void)) (define _ref_char (foreign-function "_ref_char" (unsigned-32 integer-32) char)) (define _set_char (foreign-function "_set_char" (unsigned-32 integer-32 char) void)) (define _ref_double (foreign-function "_ref_double" (unsigned-32 integer-32) double-float)) (define _set_double (foreign-function "_set_double" (unsigned-32 integer-32 double-float) void)) (define _ref_float (foreign-function "_ref_float" (unsigned-32 integer-32) single-float)) (define _set_float (foreign-function "_set_float" (unsigned-32 integer-32 single-float) void)) (define _memcpy (let ((memcpy-*-* (foreign-function "memcpy" (unsigned-32 unsigned-32 unsigned-32) void)) (memcpy-string-string (foreign-function "memcpy" (string string unsigned-32) void)) (memcpy-string-* (foreign-function "memcpy" (string unsigned-32 unsigned-32) void)) (memcpy-*-string (foreign-function "memcpy" (unsigned-32 string unsigned-32) void))) (lambda (a b count) (cond ((string? a) (cond ((string? b) (memcpy-string-string a b count)) ((integer? b) (memcpy-string-* a b count)) (else ???))) ((integer? a) (cond ((string? b) (memcpy-*-string a b count)) ((integer? b) (memcpy-*-* a b count)) (else ???))) (else ???)))))