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



Reply via email to