;; -*- Mode: Irken -*- (include "lib/core.scm") (include "lib/pair.scm") (include "lib/string.scm") (include "lib/os.scm") ;; How this needs to be done: I should be able to say something like ;; (%%cexp (-> (buffer (struct utsname))) ...) ;; ... then have irken put all the rights casts in there. ;; Another thing: declaring the struct like we did in Pyrex? ;; Can we do that with rows? Clearly this could eat a lot of time, ;; so let's put it off until after self-hosting works. (define (make-buffer n) (%%cexp (int -> buffer) "alloc_no_clear (TC_BUFFER, HOW_MANY (%0, sizeof(object)))" n)) ;(make-buffer 20) (cinclude "sys/utsname.h") ;;(define (uname) ;; (%%cexp (-> int) "({ struct utsname uts; uname(&uts); fprintf (stderr, \"%%s\\n\", uts.sysname); 34;})")) (define (uname) (let ((buffer (%%cexp (-> buffer) "alloc_no_clear (TC_BUFFER, HOW_MANY (sizeof (struct utsname), sizeof (object)))"))) (printn (%%cexp (buffer -> int) "uname ((struct utsname*)%0)" buffer)) {sysname= (copy-cstring (%%cexp (buffer -> cstring) "((struct utsname *)%0)->sysname" buffer)) nodename= (copy-cstring (%%cexp (buffer -> cstring) "((struct utsname *)%0)->nodename" buffer)) release= (copy-cstring (%%cexp (buffer -> cstring) "((struct utsname *)%0)->release" buffer)) version= (copy-cstring (%%cexp (buffer -> cstring) "((struct utsname *)%0)->version" buffer)) machine= (copy-cstring (%%cexp (buffer -> cstring) "((struct utsname *)%0)->machine" buffer)) })) (uname)