diff --git a/Makefile b/Makefile index e1287ec..204f2b6 100644 --- a/Makefile +++ b/Makefile @@ -87,3 +87,4 @@ clean: @rm -rf test find . -name "core.1" -delete find . -name "*@gambit*" -delete + rm -rf retropikzel/pffi.c diff --git a/retropikzel/pffi/gambit.scm b/retropikzel/pffi/gambit.scm index bc5b647..54dfb88 100644 --- a/retropikzel/pffi/gambit.scm +++ b/retropikzel/pffi/gambit.scm @@ -20,8 +20,7 @@ (define size-of-double (c-lambda () int "___return(sizeof(double));")) (define size-of-void* (c-lambda () int "___return(sizeof(void*));")) - -#;(define size-of-type +(define size-of-type (lambda (type) (cond ((eq? type 'int8) (size-of-int8_t)) ((eq? type 'uint8) (size-of-uint8_t)) @@ -42,16 +41,23 @@ ((eq? type 'float) (size-of-float)) ((eq? type 'double) (size-of-double)) ((eq? type 'pointer) (size-of-void*)) + ((eq? type 'callback) (size-of-void*)) + ((eq? type 'void) (size-of-void*)) (else (error "Can not get size of unknown type" type))))) -#;(define-macro (pffi-shared-object-load headers) - `@,(map (lambda (header) - '(c-declare ,(string-append "#include <" header ">"))) - headers)) +#;(define-macro + (include-c-headers headers) + `(c-declare ,(apply string-append + (map + (lambda (header) + (string-append "#include <" header ">" (string #\newline))) + (list "stdio.h"))))) - -#;(define-syntax pffi-shared-object-load - (syntax-rules () - ((_ headers) - (c-declare "#include ")))) +(define-macro + (pffi-shared-object-auto-load headers object-name . options) + `(c-declare ,(apply string-append + (map + (lambda (header) + (string-append "#include <" header ">" (string #\newline))) + (cdr headers)))))