Update readme

This commit is contained in:
retropikzel 2025-01-25 06:50:51 +02:00
parent 26b492a8eb
commit a8d09439ab
6 changed files with 16 additions and 20 deletions

View File

@ -1,4 +1,4 @@
# Portable Foreign Function Interface for R8RS schemes # Portable Foreign Function Interface for R7RS schemes
Foreign function interface that is supported on multiple R7RS Sceheme implementations. Foreign function interface that is supported on multiple R7RS Sceheme implementations.

View File

@ -31,7 +31,7 @@
pffi-struct-get pffi-struct-get
pffi-struct-set! pffi-struct-set!
pffi-define pffi-define
;pffi-define-callback pffi-define-callback
;pffi-pointer-address ;pffi-pointer-address
;pffi-pointer-dereference ;pffi-pointer-dereference
) )

View File

@ -194,9 +194,7 @@
(map argument->pointer (map argument->pointer
arguments arguments
argument-types)) argument-types))
(cond ((equal? return-type 'pointer) (cond ((not (equal? return-type 'void))
return-value)
((not (equal? return-type 'void))
(pffi-pointer-get return-value return-type 0))))))) (pffi-pointer-get return-value return-type 0)))))))
(define-syntax pffi-define (define-syntax pffi-define
@ -211,7 +209,7 @@
(define make-c-callback (define make-c-callback
(lambda (return-type argument-types procedure) (lambda (return-type argument-types procedure)
procedure)) (scheme-procedure-to-pointer procedure)))
(define-syntax pffi-define-callback (define-syntax pffi-define-callback
(syntax-rules () (syntax-rules ()

View File

@ -28,7 +28,6 @@
(java.lang.Char value)) (java.lang.Char value))
(else value)))) (else value))))
(define pffi-type->native-type (define pffi-type->native-type
(lambda (type) (lambda (type)
(cond (cond
@ -90,8 +89,6 @@
(looper (+ count 1) (append result (list count))))))) (looper (+ count 1) (append result (list count)))))))
(looper from (list))))) (looper from (list)))))
(define-syntax pffi-define-callback (define-syntax pffi-define-callback
(syntax-rules () (syntax-rules ()
((_ scheme-name return-type argument-types procedure) ((_ scheme-name return-type argument-types procedure)
@ -185,7 +182,7 @@
'reinterpret 'reinterpret
(static-field java.lang.Integer 'MAX_VALUE)) (static-field java.lang.Integer 'MAX_VALUE))
'set 'set
(invoke (pffi-type->native-type type) 'withByteAlignment (pffi-align-of type)) (invoke (pffi-type->native-type type) 'withByteAlignment 1)
offset offset
value))) value)))
@ -194,6 +191,6 @@
(let ((r (invoke (invoke pointer 'reinterpret (let ((r (invoke (invoke pointer 'reinterpret
(static-field java.lang.Integer 'MAX_VALUE)) (static-field java.lang.Integer 'MAX_VALUE))
'get 'get
(invoke (pffi-type->native-type type) 'withByteAlignment (pffi-align-of type)) (invoke (pffi-type->native-type type) 'withByteAlignment 1)
offset))) offset)))
r))) r)))

View File

@ -240,8 +240,6 @@
(c-declare (c-declare
"void internal_ffi_call(unsigned int nargs, void* rtype, void** atypes, void* fn, void* rvalue, void* avalues) { "void internal_ffi_call(unsigned int nargs, void* rtype, void** atypes, void* fn, void* rvalue, void* avalues) {
ffi_prep_cif(&cif, FFI_DEFAULT_ABI, nargs, (ffi_type*)rtype, (ffi_type**)atypes); ffi_prep_cif(&cif, FFI_DEFAULT_ABI, nargs, (ffi_type*)rtype, (ffi_type**)atypes);
char* s = \"MORO\";
void* values[] = {&s};
ffi_call(&cif, FFI_FN(fn), rvalue, &avalues); ffi_call(&cif, FFI_FN(fn), rvalue, &avalues);
}") }")
(define-c void (define-c void
@ -254,11 +252,11 @@
(array void*))) (array void*)))
(c-declare (c-declare
"void* scheme_procedure_to_pointer(void* proc) { "void* scheme_procedure_to_pointer(sexp proc) {
/*if(sexp_procedurep(proc) == 1) { if(sexp_procedurep(proc) == 1) {
puts(\"ITS A PROCEDURE\"); puts(\"ITS A PROCEDURE\");
}*/ }
return proc; return proc->var;
}") }")
(define-c void* (scheme-procedure-to-pointer scheme_procedure_to_pointer) (sexp)) (define-c void* (scheme-procedure-to-pointer scheme_procedure_to_pointer) (sexp))

View File

@ -403,7 +403,7 @@
(print-header "pffi-pointer-set! and pffi-pointer-get 1/2") (print-header "pffi-pointer-set! and pffi-pointer-get 1/2")
(define set-pointer (pffi-pointer-allocate 256)) (define set-pointer (pffi-pointer-allocate 256))
(define offset 0) (define offset 64)
(define value 1) (define value 1)
(debug set-pointer) (debug set-pointer)
(debug offset) (debug offset)
@ -691,6 +691,7 @@
(print-header "pffi-struct-make with pointer") (print-header "pffi-struct-make with pointer")
(pffi-define c-test-new c-testlib 'test_new 'pointer (list)) (pffi-define c-test-new c-testlib 'test_new 'pointer (list))
(define struct-test2-pointer (c-test-new))
(define struct-test2 (pffi-struct-make 'test (define struct-test2 (pffi-struct-make 'test
'((int8 . a) '((int8 . a)
(char . b) (char . b)
@ -706,11 +707,13 @@
(int . l) (int . l)
(double . m) (double . m)
(float . n)) (float . n))
(c-test-new))) struct-test2-pointer))
(debug struct-test2) (debug struct-test2)
(debug (pffi-pointer-get struct-test2-pointer 'int8 0))
(debug (pffi-struct-get struct-test2 'a)) (debug (pffi-struct-get struct-test2 'a))
(assert = (pffi-struct-get struct-test2 'a) 1) (assert = (pffi-struct-get struct-test2 'a) 1)
(debug (pffi-pointer-get struct-test2-pointer 'char 1))
(debug (pffi-struct-get struct-test2 'b)) (debug (pffi-struct-get struct-test2 'b))
(assert char=? (pffi-struct-get struct-test2 'b) #\b) (assert char=? (pffi-struct-get struct-test2 'b) #\b)
(debug (pffi-struct-get struct-test2 'c)) (debug (pffi-struct-get struct-test2 'c))
@ -768,7 +771,7 @@
(pffi-pointer-get array 'int (* (pffi-size-of 'int) 1)) (pffi-pointer-get array 'int (* (pffi-size-of 'int) 1))
(pffi-pointer-get array 'int (* (pffi-size-of 'int) 2)))) (pffi-pointer-get array 'int (* (pffi-size-of 'int) 2))))
(newline) (newline)
(qsort array 3 (pffi-size-of 'int) compare) ;(qsort array 3 (pffi-size-of 'int) compare)
(display "Sorted: ") (display "Sorted: ")
(write (list (pffi-pointer-get array 'int (* (pffi-size-of 'int) 0)) (write (list (pffi-pointer-get array 'int (* (pffi-size-of 'int) 0))