;; -*- Mode: Irken -*-

(include "lib/basis.scm")

;; (define (pointer-deref p)
;;   (%%cexp ((ptr 'a) -> 'a) "*(%0)" p))

;; (define (as-pint x)
;;   (%%cexp ('a -> (ptr int)) "(int*)%0" x))

;; how about something that can allocate a number of objects of a certain
;;   size.  For example, an array of 100 8-bit unsigned bytes?

;; we want to be able to allocate and use C structs without having to know
;;   their exact layout.

(cinclude "sys/socket.h")

(define (make-sockaddr)
  (%callocate (struct sockaddr) 5))

(printn (make-sockaddr))

(let ((ui100 (%callocate uint8_t 100))
      (ul10 (%callocate uint64_t 10)))
  (printn (%cget #f ui100 0))
  (printn (%cget #f ul10 5))
  (printn (%cset #f ul10 5 314159))
  (printn (%cget #f ul10 5))
  )

;;(let ((ob #(1 2 3)))
;;   (printn (%%cexp (-> int) "sizeof(struct sockaddr)"))
;;   (printn (%%cexp (-> int) "sizeof(uint8_t[100])"))
;;   (pointer-deref (as-pint ob)))