Here is a test case for write-struct:
---cut here---
(use-modules (system foreign))
(use-modules (rnrs))
(use-modules (srfi srfi-43))
(define (dbg x)
(display x)
(newline)
(flush-all-ports))
(define (make-c-pointer-array v-src)
(dbg "make-c-pointer-array")
(assert (and (vector? v-src) (vector-every pointer? v-src)))
(let* ((i-len (vector-length v-src))
(i-element-size (sizeof '*))
(i-bv-size (* i-len i-element-size))
(bv (make-bytevector i-bv-size 0)))
(dbg i-element-size)
(dbg i-bv-size)
(do ((i-element 0 (+ i-element 1))) ((>= i-element i-len))
(let ((x-element (vector-ref v-src i-element)))
(dbg "make-c-pointer-array/1")
(dbg x-element)
(dbg i-element)
(write-c-struct
bv
(* i-element i-element-size)
((x-element '*)))))
(bytevector->pointer bv)))
(define (main args)
(display (make-c-pointer-array (vector %null-pointer %null-pointer)))
(newline))
---cut-here---
and here for read-struct:
---cut here---
(use-modules (rnrs bytevectors)
(system foreign))
(define bv (make-bytevector 16 0))
(define struct1 (make-c-struct (list '* '*) (list %null-pointer
%null-pointer)))
(define (main args)
(display (read-c-struct bv 0 ((fld1 '*)) list))
(newline))
---cut-here---
Both tests are executed by command guile -e main -s FILENAME.scm.
- Tommi
--
Kotisivu / Homepage: http://www.iki.fi/tohoyn/
Sähköposti / E-Mail: [email protected]
GPG-sormenjälki / GPG fingerprint:
55F4 2477 7155 3528 5CB2 2B7A BB86 1FDE 4046 0F83
FT, Debian-ylläpitäjä / PhD, Debian Maintainer