From 8c2e9c4ec51d2a800b6e4f6aa5077024638ea179 Mon Sep 17 00:00:00 2001 From: retropikzel Date: Fri, 24 Jan 2025 21:57:45 +0200 Subject: [PATCH] Improvements for Sagittarius --- Makefile | 5 ++++- retropikzel/r7rs-pffi/kawa.scm | 4 ++-- retropikzel/r7rs-pffi/sagittarius.scm | 16 ++++++++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 7791d93..3c7bfe3 100644 --- a/Makefile +++ b/Makefile @@ -114,10 +114,13 @@ test-mosh-podman-amd64: libtest.so test-mosh: libtest.so ${MOSH} test.scm -SASH=sash -r7 -L . -L ./schubert +SASH=sash --clean-cache -r7 -L . -L ./schubert test-sagittarius-podman-amd64: libtest.so podman run --arch=amd64 -it -v ${PWD}:/workdir docker.io/schemers/sagittarius bash -c "cd /workdir && ${SASH} test.scm" +test-sagittarius-docker: libtest.so + docker run -it -v ${PWD}:/workdir docker.io/schemers/sagittarius bash -c "cd /workdir && ${SASH} test.scm" + test-sagittarius: libtest.so ${SASH} test.scm diff --git a/retropikzel/r7rs-pffi/kawa.scm b/retropikzel/r7rs-pffi/kawa.scm index 1889f2c..3a1c6c7 100644 --- a/retropikzel/r7rs-pffi/kawa.scm +++ b/retropikzel/r7rs-pffi/kawa.scm @@ -185,7 +185,7 @@ 'reinterpret (static-field java.lang.Integer 'MAX_VALUE)) 'set - (invoke (pffi-type->native-type type) 'withByteAlignment 1) + (invoke (pffi-type->native-type type) 'withByteAlignment (pffi-align-of type)) offset value))) @@ -194,6 +194,6 @@ (let ((r (invoke (invoke pointer 'reinterpret (static-field java.lang.Integer 'MAX_VALUE)) 'get - (invoke (pffi-type->native-type type) 'withByteAlignment 1) + (invoke (pffi-type->native-type type) 'withByteAlignment (pffi-align-of type)) offset))) r))) diff --git a/retropikzel/r7rs-pffi/sagittarius.scm b/retropikzel/r7rs-pffi/sagittarius.scm index 9cef412..9d41969 100644 --- a/retropikzel/r7rs-pffi/sagittarius.scm +++ b/retropikzel/r7rs-pffi/sagittarius.scm @@ -87,9 +87,17 @@ (lambda () (empty-pointer))) +(define (string->c-string s) + (let* ((bv (string->utf8 s)) + (p (allocate-pointer (+ (bytevector-length bv) 1)))) + (do ((i 0 (+ i 1))) + ((= i (bytevector-length bv)) p) + (pointer-set-c-uint8! p i (bytevector-u8-ref bv i))) + p)) + (define pffi-string->pointer (lambda (string-content) - string-content)) + (string->c-string string-content))) (define pffi-pointer->string (lambda (pointer) @@ -140,7 +148,11 @@ ((equal? type 'uint32) (pointer-ref-c-uint32_t pointer offset)) ((equal? type 'int64) (pointer-ref-c-int64_t pointer offset)) ((equal? type 'uint64) (pointer-ref-c-uint64_t pointer offset)) - ((equal? type 'char) (integer->char (pointer-ref-c-char pointer offset))) + ((equal? type 'char) + (display "HERE: ") + (write pointer) + (newline) + (integer->char (pointer-ref-c-char pointer offset))) ((equal? type 'short) (pointer-ref-c-short pointer offset)) ((equal? type 'unsigned-short) (pointer-ref-c-unsigned-short pointer offset)) ((equal? type 'int) (pointer-ref-c-int pointer offset))