Update dependencies
This commit is contained in:
parent
69da655ba1
commit
6686cc194c
|
@ -33,7 +33,7 @@
|
|||
(scheme process-context)
|
||||
(cyclone foreign)
|
||||
(scheme cyclone primitives)))
|
||||
#;(gambit
|
||||
(gambit
|
||||
(import (scheme base)
|
||||
(scheme write)
|
||||
(scheme char)
|
||||
|
@ -77,6 +77,13 @@
|
|||
(scheme file)
|
||||
(scheme inexact)
|
||||
(scheme process-context)))
|
||||
(mit-scheme
|
||||
(import (scheme base)
|
||||
(scheme write)
|
||||
(scheme char)
|
||||
(scheme file)
|
||||
(scheme inexact)
|
||||
(scheme process-context)))
|
||||
#;(larceny
|
||||
(import (scheme base)
|
||||
(scheme write)
|
||||
|
@ -194,7 +201,7 @@
|
|||
c-bytevector->bytevector
|
||||
|
||||
;;;; Utilities
|
||||
libc
|
||||
libc-name
|
||||
|
||||
;; TODO endianness
|
||||
native-endianness
|
||||
|
@ -304,11 +311,12 @@
|
|||
(include "c/primitives/chicken.scm"))
|
||||
(chicken-6 (include-relative "c/primitives/chicken.scm"))
|
||||
;(cyclone (include "c/primitives/cyclone.scm"))
|
||||
;(gambit (include "c/primitives/gambit.scm"))
|
||||
(gambit (include "c/primitives/gambit.scm"))
|
||||
(gauche (include "c/primitives/gauche/define-c-procedure.scm"))
|
||||
;(gerbil (include "c/primitives/gerbil.scm"))
|
||||
(guile (include "./c/primitives/guile.scm"))
|
||||
(kawa (include "c/primitives/kawa.scm"))
|
||||
(mit-scheme (include "c/primitives/mit-scheme.scm"))
|
||||
;(larceny (include "c/primitives/larceny.scm"))
|
||||
(mosh (include "c/primitives/mosh.scm"))
|
||||
(racket (include "c/primitives/racket.scm"))
|
||||
|
|
|
@ -1,13 +1,7 @@
|
|||
(cond-expand
|
||||
(windows (define-c-library libc
|
||||
'("stdlib.h" "stdio.h" "string.h")
|
||||
"ucrtbase"
|
||||
'()))
|
||||
(windows
|
||||
(define libc-name "ucrtbase"))
|
||||
(else
|
||||
(define c-library "c")
|
||||
(when (get-environment-variable "BE_HOST_CPU")
|
||||
(set! c-library "root"))
|
||||
(define-c-library libc
|
||||
'("stdlib.h" "stdio.h" "string.h")
|
||||
"c"
|
||||
'((additional-versions ("0" "6"))))))
|
||||
(define libc-name
|
||||
(cond ((get-environment-variable "BE_HOST_CPU") "root") ; Haiku
|
||||
(else "c")))))
|
||||
|
|
|
@ -1,11 +1,28 @@
|
|||
(define-c-library libc
|
||||
'("stdlib.h" "stdio.h" "string.h")
|
||||
libc-name
|
||||
'((additional-versions ("0" "6"))))
|
||||
|
||||
(define-c-procedure c-calloc libc 'calloc 'pointer '(int int))
|
||||
(cond-expand
|
||||
(chicken (define c-memset-address->pointer
|
||||
(gambit
|
||||
(define c-memset-address->pointer
|
||||
(c-lambda (unsigned-int64 unsigned-int8 int)
|
||||
(pointer void)
|
||||
"___return(memset((void*)___arg1, ___arg2, ___arg3));")))
|
||||
(chicken
|
||||
(define c-memset-address->pointer
|
||||
(lambda (address value offset)
|
||||
(address->pointer address))))
|
||||
(else (define-c-procedure c-memset-address->pointer libc 'memset 'pointer '(uint64 uint8 int))))
|
||||
(else
|
||||
(define-c-procedure c-memset-address->pointer libc 'memset 'pointer '(uint64 uint8 int))))
|
||||
|
||||
(cond-expand
|
||||
(gambit
|
||||
(define c-memset-pointer->address
|
||||
(c-lambda ((pointer void) unsigned-int8 int)
|
||||
unsigned-int64
|
||||
"___return((uint64_t)memset(___arg1, ___arg2, ___arg3));")))
|
||||
(chicken (define c-memset-pointer->address
|
||||
(lambda (pointer value offset)
|
||||
(pointer->address pointer))))
|
||||
|
@ -67,8 +84,8 @@
|
|||
(bytevector->c-bytevector (string->utf8 (string-append string-var (string #\null))))))
|
||||
|
||||
(cond-expand
|
||||
(kawa #t) ; FIXME
|
||||
(chicken #t) ; FIXME
|
||||
(kawa #t) ; FIXME
|
||||
(else (define make-c-null
|
||||
(lambda ()
|
||||
(cond-expand (stklos (let ((pointer (make-c-bytevector 1)))
|
||||
|
@ -77,8 +94,8 @@
|
|||
(else (c-memset-address->pointer 0 0 0)))))))
|
||||
|
||||
(cond-expand
|
||||
(kawa #t) ; FIXME
|
||||
(chicken #t) ; FIXME
|
||||
(kawa #t) ; FIXME
|
||||
(else (define c-null?
|
||||
(lambda (pointer)
|
||||
(if (c-bytevector? pointer)
|
||||
|
|
|
@ -35,57 +35,6 @@
|
|||
(or (equal? object #f) ; False can be null pointer
|
||||
(pointer? object))))
|
||||
|
||||
#;(define c-free
|
||||
(lambda (pointer)
|
||||
(pointer-free pointer)))
|
||||
|
||||
;(define c-bytevector-u8-set! pointer-set-c-uint8_t!)
|
||||
;(define c-bytevector-u8-ref pointer-ref-c-uint8_t)
|
||||
|
||||
#;(define pointer-set!
|
||||
(lambda (pointer type offset value)
|
||||
(cond ((equal? type 'int8) (pointer-set-c-int8_t! pointer offset value))
|
||||
((equal? type 'uint8) (pointer-set-c-uint8_t! pointer offset value))
|
||||
((equal? type 'int16) (pointer-set-c-int16_t! pointer offset value))
|
||||
((equal? type 'uint16) (pointer-set-c-uint16_t! pointer offset value))
|
||||
((equal? type 'int32) (pointer-set-c-int32_t! pointer offset value))
|
||||
((equal? type 'uint32) (pointer-set-c-uint32_t! pointer offset value))
|
||||
((equal? type 'int64) (pointer-set-c-int64_t! pointer offset value))
|
||||
((equal? type 'uint64) (pointer-set-c-uint64_t! pointer offset value))
|
||||
((equal? type 'char) (pointer-set-c-char! pointer offset (char->integer value)))
|
||||
((equal? type 'short) (pointer-set-c-short! pointer offset value))
|
||||
((equal? type 'unsigned-short) (pointer-set-c-unsigned-short! pointer offset value))
|
||||
((equal? type 'int) (pointer-set-c-int! pointer offset value))
|
||||
((equal? type 'unsigned-int) (pointer-set-c-unsigned-int! pointer offset value))
|
||||
((equal? type 'long) (pointer-set-c-long! pointer offset value))
|
||||
((equal? type 'unsigned-long) (pointer-set-c-unsigned-long! pointer offset value))
|
||||
((equal? type 'float) (pointer-set-c-float! pointer offset value))
|
||||
((equal? type 'double) (pointer-set-c-double! pointer offset value))
|
||||
((equal? type 'void) (pointer-set-c-pointer! pointer offset value))
|
||||
((equal? type 'pointer) (pointer-set-c-pointer! pointer offset value)))))
|
||||
|
||||
#;(define pointer-get
|
||||
(lambda (pointer type offset)
|
||||
(cond ((equal? type 'int8) (pointer-ref-c-int8_t pointer offset))
|
||||
((equal? type 'uint8) (pointer-ref-c-uint8_t pointer offset))
|
||||
((equal? type 'int16) (pointer-ref-c-int16_t pointer offset))
|
||||
((equal? type 'uint16) (pointer-ref-c-uint16_t pointer offset))
|
||||
((equal? type 'int32) (pointer-ref-c-int32_t pointer offset))
|
||||
((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 '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))
|
||||
((equal? type 'unsigned-int) (pointer-ref-c-unsigned-int pointer offset))
|
||||
((equal? type 'long) (pointer-ref-c-long pointer offset))
|
||||
((equal? type 'unsigned-long) (pointer-ref-c-unsigned-long pointer offset))
|
||||
((equal? type 'float) (pointer-ref-c-float pointer offset))
|
||||
((equal? type 'double) (pointer-ref-c-double pointer offset))
|
||||
((equal? type 'void) (pointer-ref-c-pointer pointer offset))
|
||||
((equal? type 'pointer) (pointer-ref-c-pointer pointer offset)))))
|
||||
|
||||
(define pffi-type->native-type
|
||||
(lambda (type)
|
||||
(cond ((equal? type 'int8) 'int8_t)
|
||||
|
@ -106,79 +55,26 @@
|
|||
((equal? type 'unsigned-long) 'unsigned-long)
|
||||
((equal? type 'float) 'float)
|
||||
((equal? type 'double) 'double)
|
||||
((equal? type 'pointer) '(maybe-null void*))
|
||||
((equal? type 'pointer-address) '(maybe-null void*))
|
||||
((equal? type 'pointer) '(maybe-null pointer void*))
|
||||
((equal? type 'pointer-address) '(maybe-null pointer void*))
|
||||
((equal? type 'void) 'void)
|
||||
((equal? type 'callback) '(maybe-null void*))
|
||||
((equal? type 'callback) '(maybe-null pointer void*))
|
||||
(else (error "pffi-type->native-type -- No such pffi type" type)))))
|
||||
|
||||
;; define-c-procedure
|
||||
|
||||
#;(define type->libffi-type
|
||||
(lambda (type)
|
||||
(cond ((equal? type 'int8) (get-ffi-type-int8))
|
||||
((equal? type 'uint8) (get-ffi-type-uint8))
|
||||
((equal? type 'int16) (get-ffi-type-int16))
|
||||
((equal? type 'uint16) (get-ffi-type-uint16))
|
||||
((equal? type 'int32) (get-ffi-type-int32))
|
||||
((equal? type 'uint32) (get-ffi-type-uint32))
|
||||
((equal? type 'int64) (get-ffi-type-int64))
|
||||
((equal? type 'uint64) (get-ffi-type-uint64))
|
||||
((equal? type 'char) (get-ffi-type-char))
|
||||
((equal? type 'unsigned-char) (get-ffi-type-uchar))
|
||||
((equal? type 'bool) (get-ffi-type-int8))
|
||||
((equal? type 'short) (get-ffi-type-short))
|
||||
((equal? type 'unsigned-short) (get-ffi-type-ushort))
|
||||
((equal? type 'int) (get-ffi-type-int))
|
||||
((equal? type 'unsigned-int) (get-ffi-type-uint))
|
||||
((equal? type 'long) (get-ffi-type-long))
|
||||
((equal? type 'unsigned-long) (get-ffi-type-ulong))
|
||||
((equal? type 'float) (get-ffi-type-float))
|
||||
((equal? type 'double) (get-ffi-type-double))
|
||||
((equal? type 'void) (get-ffi-type-void))
|
||||
((equal? type 'pointer) (get-ffi-type-pointer))
|
||||
((equal? type 'pointer-address) 1)
|
||||
((equal? type 'callback) (get-ffi-type-pointer)))))
|
||||
|
||||
#;(define type->libffi-type
|
||||
(lambda (type)
|
||||
(cond ((equal? type 'int8) 1)
|
||||
((equal? type 'uint8) 2)
|
||||
((equal? type 'int16) 3)
|
||||
((equal? type 'uint16) 4)
|
||||
((equal? type 'int32) 5)
|
||||
((equal? type 'uint32) 6)
|
||||
((equal? type 'int64) 7)
|
||||
((equal? type 'uint64) 8)
|
||||
((equal? type 'char) 9)
|
||||
((equal? type 'unsigned-char) 10)
|
||||
((equal? type 'short) 11)
|
||||
((equal? type 'unsigned-short) 12)
|
||||
((equal? type 'int) 13)
|
||||
((equal? type 'unsigned-int) 14)
|
||||
((equal? type 'long) 15)
|
||||
((equal? type 'unsigned-long) 16)
|
||||
((equal? type 'float) 17)
|
||||
((equal? type 'double) 18)
|
||||
((equal? type 'void) 19)
|
||||
((equal? type 'pointer) 20)
|
||||
((equal? type 'pointer-address) 21)
|
||||
((equal? type 'callback) 22)
|
||||
(else (error "Undefined type" type)))))
|
||||
|
||||
#;(define argument->pointer
|
||||
(lambda (value type)
|
||||
(cond ((procedure? value) (scheme-procedure-to-pointer value))
|
||||
(else (let ((pointer (pointer-allocate (size-of-type type))))
|
||||
(pointer-set! pointer type 0 value)
|
||||
pointer)))))
|
||||
|
||||
(define make-c-function
|
||||
(lambda (shared-object c-name return-type argument-types)
|
||||
(dlerror) ;; Clean all previous errors
|
||||
(let ((c-function (dlsym shared-object c-name))
|
||||
(maybe-dlerror (dlerror)))
|
||||
(lambda arguments
|
||||
(display "NAME: ")
|
||||
(display c-name)
|
||||
(newline)
|
||||
(display "ARGS: ")
|
||||
(write arguments)
|
||||
(newline)
|
||||
(let* ((return-pointer
|
||||
(internal-ffi-call (length argument-types)
|
||||
(type->libffi-type-number return-type)
|
||||
|
|
|
@ -4,6 +4,11 @@
|
|||
(c-system-include "dlfcn.h")
|
||||
(c-system-include "stdio.h")
|
||||
(c-system-include "ffi.h")
|
||||
(c-link "ffi")
|
||||
|
||||
;; make-c-null
|
||||
(c-declare "void* make_c_null() { return NULL; }")
|
||||
(define-c (maybe-null pointer void*) make-c-null ())
|
||||
|
||||
;; c-type-size
|
||||
(c-declare "
|
||||
|
@ -53,203 +58,25 @@
|
|||
(define-c (maybe-null pointer void*) dlopen (string int))
|
||||
(define-c (maybe-null pointer void*) dlerror ())
|
||||
|
||||
;(c-declare "void* pointer_null() { return NULL; }")
|
||||
;(define-c (pointer void*) (pointer-null pointer_null) ())
|
||||
|
||||
;(c-declare "int is_pointer_null(void* pointer) { if(pointer == NULL) { return 1; } else { return 0; }; }")
|
||||
;(define-c bool (is-pointer-null is_pointer_null) ((maybe-null pointer void*)))
|
||||
|
||||
;(c-declare "void* pointer_allocate(int size) { return malloc(size); }")
|
||||
;(define-c (maybe-null pointer void*) (pointer-allocate pointer_allocate) (int))
|
||||
|
||||
(c-declare "sexp is_pointer(struct sexp_struct* object) { if(sexp_cpointerp(object)) { return SEXP_TRUE; } else { return SEXP_FALSE; } }")
|
||||
(define-c sexp (pointer? is_pointer) (sexp))
|
||||
|
||||
(c-declare "void c_bytevector_u8_set(void* pointer, int offset, uint8_t value) { *(uint8_t*)((char*)pointer + offset) = value; }")
|
||||
(define-c void (c-bytevector-u8-set! c_bytevector_u8_set) ((pointer void*) int uint8_t))
|
||||
(define-c void (c-bytevector-u8-set! c_bytevector_u8_set) ((maybe-null pointer void*) int uint8_t))
|
||||
|
||||
(c-declare "int8_t c_bytevector_u8_ref (void* pointer, int offset) { return *(int8_t*)((char*)pointer + offset); }")
|
||||
(define-c int8_t (c-bytevector-u8-ref c_bytevector_u8_ref) ((pointer void*) int))
|
||||
(define-c int8_t (c-bytevector-u8-ref c_bytevector_u8_ref) ((maybe-null pointer void*) int))
|
||||
|
||||
(c-declare "void c_bytevector_pointer_set (void* pointer, int offset, void* value) { char* p = (char*)pointer + offset; *(char**)p = value; }")
|
||||
(define-c void (c-bytevector-pointer-set! c_bytevector_pointer_set) ((pointer void*) int (maybe-null pointer void*)))
|
||||
|
||||
(c-declare "void* c_bytevector_pointer_ref (void* pointer, int offset) { char* p = (char*)pointer + offset; return *(char**)p; }")
|
||||
(define-c (maybe-null pointer void*) (c-bytevector-pointer-ref c_bytevector_pointer_ref) ((pointer void*) int))
|
||||
|
||||
#;(c-declare "void* pointer_address(struct sexp_struct* pointer) {
|
||||
return &sexp_cpointer_value(pointer);
|
||||
}")
|
||||
;(define-c (maybe-null pointer void*) (pointer-address pointer_address) (sexp))
|
||||
|
||||
;(c-declare "void pointer_free(void* pointer) { free(pointer); }")
|
||||
;(define-c void (pointer-free pointer_free) ((maybe-null pointer void*)))
|
||||
|
||||
;; pointer-set!
|
||||
;(c-declare "void pointer_set_c_int8_t(void* pointer, int offset, int8_t value) { *(int8_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-int8_t! pointer_set_c_int8_t) ((pointer void*) int int8_t))
|
||||
;(c-declare "void pointer_set_c_uint8_t(void* pointer, int offset, uint8_t value) { *(uint8_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-uint8_t! pointer_set_c_uint8_t) ((pointer void*) int uint8_t))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_int16_t(void* pointer, int offset, int16_t value) { *(int16_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-int16_t! pointer_set_c_int16_t) ((pointer void*) int int16_t))
|
||||
;(c-declare "void pointer_set_c_uint16_t(void* pointer, int offset, uint16_t value) { *(uint16_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-uint16_t! pointer_set_c_uint16_t) ((pointer void*) int uint16_t))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_int32_t(void* pointer, int offset, int32_t value) { *(int32_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-int32_t! pointer_set_c_int32_t) ((pointer void*) int int32_t))
|
||||
;(c-declare "void pointer_set_c_uint32_t(void* pointer, int offset, uint32_t value) { *(uint32_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-uint32_t! pointer_set_c_uint32_t) ((pointer void*) int uint32_t))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_int64_t(void* pointer, int offset, int64_t value) { *(int64_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-int64_t! pointer_set_c_int64_t) ((pointer void*) int int64_t))
|
||||
;(c-declare "void pointer_set_c_uint64_t(void* pointer, int offset, uint64_t value) { *(uint64_t*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-uint64_t! pointer_set_c_uint64_t) ((pointer void*) int uint64_t))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_char(void* pointer, int offset, int8_t value) { *((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-char! pointer_set_c_char) ((pointer void*) int int8_t))
|
||||
;(c-declare "void pointer_set_c_unsigned_char(void* pointer, int offset, unsigned char value) { *(unsigned char*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-unsigned-char! pointer_set_c_unsigned_char) ((pointer void*) int unsigned-char))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_short(void* pointer, int offset, short value) { *(short*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-short! pointer_set_c_short) ((pointer void*) int short))
|
||||
;(c-declare "void pointer_set_c_unsigned_short(void* pointer, int offset, unsigned short value) { *(unsigned short*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-unsigned-short! pointer_set_c_unsigned_short) ((pointer void*) int unsigned-short))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_int(void* pointer, int offset, int value) { *(int*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-int! pointer_set_c_int) ((pointer void*) int int))
|
||||
;(c-declare "void pointer_set_c_unsigned_int(void* pointer, int offset, unsigned int value) { *(unsigned int*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-unsigned-int! pointer_set_c_unsigned_int) ((pointer void*) int unsigned-int))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_long(void* pointer, int offset, long value) { *(long*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-long! pointer_set_c_long) ((pointer void*) int long))
|
||||
;(c-declare "void pointer_set_c_unsigned_long(void* pointer, int offset, unsigned long value) { *(unsigned long*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-unsigned-long! pointer_set_c_unsigned_long) ((pointer void*) int unsigned-long))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_float(void* pointer, int offset, float value) { *(float*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-float! pointer_set_c_float) ((pointer void*) int float))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_double(void* pointer, int offset, double value) { *(double*)((char*)pointer + offset) = value; }")
|
||||
;(define-c void (pointer-set-c-double! pointer_set_c_double) ((pointer void*) int double))
|
||||
;
|
||||
;(c-declare "void pointer_set_c_pointer(void* pointer, int offset, void* value) { char* p = (char*)pointer + offset; *(char**)p = value; }")
|
||||
;(define-c void (pointer-set-c-pointer! pointer_set_c_pointer) ((pointer void*) int (maybe-null pointer void*)))
|
||||
;
|
||||
;;; pointer-get
|
||||
;(c-declare "int8_t pointer_ref_c_int8_t(void* pointer, int offset) { return *(int8_t*)((char*)pointer + offset); }")
|
||||
;(define-c int8_t (pointer-ref-c-int8_t pointer_ref_c_int8_t) ((pointer void*) int))
|
||||
;(c-declare "uint8_t pointer_ref_c_uint8_t(void* pointer, int offset) { return *(uint8_t*)((char*)pointer + offset); }")
|
||||
;(define-c uint8_t (pointer-ref-c-uint8_t pointer_ref_c_uint8_t) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "int16_t pointer_ref_c_int16_t(void* pointer, int offset) { return *(int16_t*)((char*)pointer + offset); }")
|
||||
;(define-c int16_t (pointer-ref-c-int16_t pointer_ref_c_int16_t) ((pointer void*) int))
|
||||
;(c-declare "uint16_t pointer_ref_c_uint16_t(void* pointer, int offset) { return *(uint16_t*)((char*)pointer + offset); }")
|
||||
;(define-c uint16_t (pointer-ref-c-uint16_t pointer_ref_c_uint16_t) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "int32_t pointer_ref_c_int32_t(void* pointer, int offset) { return *(int32_t*)((char*)pointer + offset); }")
|
||||
;(define-c int32_t (pointer-ref-c-int32_t pointer_ref_c_int32_t) ((pointer void*) int))
|
||||
;(c-declare "uint32_t pointer_ref_c_uint32_t(void* pointer, int offset) { return *(uint32_t*)((char*)pointer + offset); }")
|
||||
;(define-c uint32_t (pointer-ref-c-uint32_t pointer_ref_c_uint32_t) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "int64_t pointer_ref_c_int64_t(void* pointer, int offset) { return *(int64_t*)((char*)pointer + offset); }")
|
||||
;(define-c int64_t (pointer-ref-c-int64_t pointer_ref_c_int64_t) ((pointer void*) int))
|
||||
;(c-declare "uint64_t pointer_ref_c_uint64_t(void* pointer, int offset) { return *(uint64_t*)((char*)pointer + offset); }")
|
||||
;(define-c uint64_t (pointer-ref-c-uint64_t pointer_ref_c_uint64_t) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "int8_t pointer_ref_c_char(void* pointer, int offset) { return *(char*)((char*)pointer + offset); }")
|
||||
;(define-c int8_t (pointer-ref-c-char pointer_ref_c_char) ((pointer void*) int))
|
||||
;(c-declare "unsigned char pointer_ref_c_unsigned_char(void* pointer, int offset) { return *(unsigned char*)((char*)pointer + offset); }")
|
||||
;(define-c unsigned-char (pointer-ref-c-unsigned-char pointer_ref_c_unsigned_char) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "short pointer_ref_c_short(void* pointer, int offset) { return *(short*)((char*)pointer + offset); }")
|
||||
;(define-c short (pointer-ref-c-short pointer_ref_c_short) ((pointer void*) int))
|
||||
;(c-declare "unsigned short pointer_ref_c_unsigned_short(void* pointer, int offset) { return *(unsigned short*)((char*)pointer + offset); }")
|
||||
;(define-c unsigned-short (pointer-ref-c-unsigned-short pointer_ref_c_unsigned_short) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "int pointer_ref_c_int(void* pointer, int offset) { return *(int*)((char*)pointer + offset); }")
|
||||
;(define-c int (pointer-ref-c-int pointer_ref_c_int) ((pointer void*) int))
|
||||
;(c-declare "unsigned int pointer_ref_c_unsigned_int(void* pointer, int offset) { return *(unsigned int*)((char*)pointer + offset); }")
|
||||
;(define-c unsigned-int (pointer-ref-c-unsigned-int pointer_ref_c_unsigned_int) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "long pointer_ref_c_long(void* pointer, int offset) { return *(long*)((char*)pointer + offset); }")
|
||||
;(define-c long (pointer-ref-c-long pointer_ref_c_long) ((pointer void*) long))
|
||||
;(c-declare "unsigned long pointer_ref_c_unsigned_long(void* pointer, int offset) { return *(unsigned long*)((char*)pointer + offset); }")
|
||||
;(define-c unsigned-long (pointer-ref-c-unsigned-long pointer_ref_c_unsigned_long) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "float pointer_ref_c_float(void* pointer, int offset) { return *(float*)((char*)pointer + offset); }")
|
||||
;(define-c float (pointer-ref-c-float pointer_ref_c_float) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "double pointer_ref_c_double(void* pointer, int offset) { return *(double*)((char*)pointer + offset); }")
|
||||
;(define-c double (pointer-ref-c-double pointer_ref_c_double) ((pointer void*) int))
|
||||
;
|
||||
;(c-declare "void* pointer_ref_c_pointer(void* pointer, int offset) { char* p = (char*)pointer + offset; return *(char**)p; }")
|
||||
;(define-c (maybe-null pointer void*) (pointer-ref-c-pointer pointer_ref_c_pointer) ((pointer void*) int))
|
||||
|
||||
;; define-c-procedure
|
||||
(define-c (maybe-null pointer void*) (c-bytevector-pointer-ref c_bytevector_pointer_ref) ((maybe-null pointer void*) int))
|
||||
|
||||
(c-declare "ffi_cif cif;")
|
||||
(define-c (pointer void*) dlsym ((maybe-null pointer void*) string))
|
||||
|
||||
;(c-declare "void* get_ffi_type_int8() { return &ffi_type_sint8; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-int8 get_ffi_type_int8) ())
|
||||
;(c-declare "void* get_ffi_type_uint8() { return &ffi_type_uint8; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-uint8 get_ffi_type_uint8) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_int16() { return &ffi_type_sint16; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-int16 get_ffi_type_int16) ())
|
||||
;(c-declare "void* get_ffi_type_uint16() { return &ffi_type_uint16; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-uint16 get_ffi_type_uint16) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_int32() { return &ffi_type_sint32; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-int32 get_ffi_type_int32) ())
|
||||
;(c-declare "void* get_ffi_type_uint32() { return &ffi_type_uint32; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-uint32 get_ffi_type_uint32) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_int64() { return &ffi_type_sint64; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-int64 get_ffi_type_int64) ())
|
||||
;(c-declare "void* get_ffi_type_uint64() { return &ffi_type_uint64; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-uint64 get_ffi_type_uint64) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_char() { return &ffi_type_schar; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-char get_ffi_type_char) ())
|
||||
;(c-declare "void* get_ffi_type_uchar() { return &ffi_type_uchar; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-uchar get_ffi_type_uchar) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_short() { return &ffi_type_sshort; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-short get_ffi_type_short) ())
|
||||
;(c-declare "void* get_ffi_type_ushort() { return &ffi_type_ushort; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-ushort get_ffi_type_ushort) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_int() { return &ffi_type_sint; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-int get_ffi_type_int) ())
|
||||
;(c-declare "void* get_ffi_type_uint() { return &ffi_type_uint; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-uint get_ffi_type_uint) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_long() { return &ffi_type_slong; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-long get_ffi_type_long) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_ulong() { return &ffi_type_ulong; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-ulong get_ffi_type_ulong) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_float() { return &ffi_type_float; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-float get_ffi_type_float) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_double() { return &ffi_type_double; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-double get_ffi_type_double) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_void() { return &ffi_type_void; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-void get_ffi_type_void) ())
|
||||
;
|
||||
;(c-declare "void* get_ffi_type_pointer() { return &ffi_type_pointer; }")
|
||||
;(define-c (pointer void*) (get-ffi-type-pointer get_ffi_type_pointer) ())
|
||||
(define-c (maybe-null pointer void*) dlsym ((maybe-null pointer void*) string))
|
||||
|
||||
(define-c-const int (FFI-OK "FFI_OK"))
|
||||
#;(c-declare
|
||||
"int internal_ffi_prep_cif(unsigned int nargs, void* rtype, void* atypes[]) {
|
||||
printf(\"A1: %u, A2: %u, nargs: %u\\n\", &ffi_type_pointer, atypes[0], nargs);
|
||||
return ffi_prep_cif(&cif, FFI_DEFAULT_ABI, nargs, (ffi_type*)rtype, (ffi_type**)atypes);
|
||||
}")
|
||||
;(define-c int (internal-ffi-prep-cif internal_ffi_prep_cif) (unsigned-int (pointer void*) (array void*)))
|
||||
(c-declare
|
||||
"void* internal_ffi_call(
|
||||
unsigned int nargs,
|
||||
|
@ -282,7 +109,9 @@
|
|||
double vals18[nargs];
|
||||
void* vals20[nargs];
|
||||
|
||||
printf(\"nargs: %i\\n\", nargs);
|
||||
for(int i = 0; i < nargs; i++) {
|
||||
printf(\"i: %i\\n\", i);
|
||||
void* arg = NULL;
|
||||
switch(atypes[i]) {
|
||||
case 1:
|
||||
|
@ -365,18 +194,25 @@
|
|||
case 17:
|
||||
c_atypes[i] = &ffi_type_float;
|
||||
vals17[i] = (float)sexp_flonum_value(avalues[i]);
|
||||
c_avalues[i] = &vals17[i];
|
||||
break;
|
||||
case 18:
|
||||
c_atypes[i] = &ffi_type_double;
|
||||
vals18[i] = (double)sexp_flonum_value(avalues[i]);
|
||||
c_avalues[i] = &vals18[i];
|
||||
break;
|
||||
case 19:
|
||||
c_atypes[i] = &ffi_type_void;
|
||||
arg = NULL;
|
||||
c_avalues[i] = NULL;
|
||||
break;
|
||||
case 20:
|
||||
c_atypes[i] = &ffi_type_pointer;
|
||||
vals20[i] = sexp_cpointer_value(avalues[i]);
|
||||
if(sexp_cpointerp(avalues[i])) {
|
||||
vals20[i] = sexp_cpointer_value(avalues[i]);
|
||||
} else {
|
||||
vals20[i] = NULL;
|
||||
}
|
||||
c_avalues[i] = &vals20[i];
|
||||
break;
|
||||
default:
|
||||
|
@ -425,7 +261,7 @@
|
|||
(unsigned-int
|
||||
unsigned-int
|
||||
(array unsigned-int)
|
||||
(pointer void*)
|
||||
(maybe-null pointer void*)
|
||||
unsigned-int
|
||||
(array sexp)))
|
||||
|
||||
|
|
|
@ -46,6 +46,19 @@
|
|||
((eq? type 'void) (size-of-void*))
|
||||
(else (error "Can not get size of unknown type" type)))))
|
||||
|
||||
#;(define-macro
|
||||
(define-c-library name headers object-name options)
|
||||
(display "HERE: ")
|
||||
(write (cons `(define ,name #t)
|
||||
(map (lambda (header)
|
||||
`(c-declare ,(string-append "#include <" header ">")))
|
||||
(car (cdr headers)))))
|
||||
(newline)
|
||||
(cons `(define ,name #t)
|
||||
(map (lambda (header)
|
||||
`(c-declare ,(string-append "#include <" header ">")))
|
||||
(car (cdr headers)))))
|
||||
|
||||
(define-macro
|
||||
(define-c-library name headers object-name . options)
|
||||
(begin
|
||||
|
@ -66,7 +79,7 @@
|
|||
(lambda (x) #f)
|
||||
(lambda () (pointer? object)))))))
|
||||
|
||||
#;(define c-bytevector-u8-set! (c-lambda ((pointer void) int unsigned-int8) void "*(uint8_t*)((char*)___arg1 + ___arg2) = ___arg3;"))
|
||||
(define c-bytevector-u8-set! (c-lambda ((pointer void) int unsigned-int8) void "*(uint8_t*)((char*)___arg1 + ___arg2) = ___arg3;"))
|
||||
(define c-bytevector-u8-ref (c-lambda ((pointer void) int) unsigned-int8 "___return(*(uint8_t*)((char*)___arg1 + ___arg2));"))
|
||||
|
||||
(define pointer-set-c-int8_t! (c-lambda ((pointer void) int int8) void "*(int8_t*)((char*)___arg1 + ___arg2) = ___arg3;"))
|
||||
|
|
|
@ -1,10 +1,3 @@
|
|||
/*
|
||||
* spigot.h - calculate pi and e by spigot algorithm
|
||||
*
|
||||
* Written by Shiro Kawai (shiro@acm.org)
|
||||
* I put this program in public domain. Use it as you like.
|
||||
*/
|
||||
|
||||
extern ScmObj size_of_int8();
|
||||
extern ScmObj size_of_uint8();
|
||||
extern ScmObj size_of_int16();
|
||||
|
@ -34,52 +27,32 @@ extern ScmObj shared_object_load(ScmString* path, ScmObj options);
|
|||
extern ScmObj is_pointer(ScmObj pointer);
|
||||
//extern ScmObj pointer_free(ScmObj pointer);
|
||||
|
||||
|
||||
//extern ScmObj pointer_set_int8(ScmObj pointer, int offset, int8_t value);
|
||||
extern ScmObj pointer_set_uint8(ScmObj pointer, int offset, uint8_t value);
|
||||
/*
|
||||
extern ScmObj pointer_set_int16(ScmObj pointer, int offset, int16_t value);
|
||||
extern ScmObj pointer_set_uint16(ScmObj pointer, int offset, uint16_t value);
|
||||
extern ScmObj pointer_set_int32(ScmObj pointer, int offset, int32_t value);
|
||||
extern ScmObj pointer_set_uint32(ScmObj pointer, int offset, uint32_t value);
|
||||
extern ScmObj pointer_set_int64(ScmObj pointer, int offset, int64_t value);
|
||||
extern ScmObj pointer_set_uint64(ScmObj pointer, int offset, uint64_t value);
|
||||
extern ScmObj pointer_set_char(ScmObj pointer, int offset, char value);
|
||||
extern ScmObj pointer_set_unsigned_char(ScmObj pointer, int offset, unsigned char value);
|
||||
extern ScmObj pointer_set_short(ScmObj pointer, int offset, short value);
|
||||
extern ScmObj pointer_set_unsigned_short(ScmObj pointer, int offset, unsigned short value);
|
||||
extern ScmObj pointer_set_int(ScmObj pointer, int offset, int value);
|
||||
extern ScmObj pointer_set_unsigned_int(ScmObj pointer, int offset, unsigned int value);
|
||||
extern ScmObj pointer_set_long(ScmObj pointer, int offset, long value);
|
||||
extern ScmObj pointer_set_unsigned_long(ScmObj pointer, int offset, unsigned long value);
|
||||
extern ScmObj pointer_set_float(ScmObj pointer, int offset, float value);
|
||||
extern ScmObj pointer_set_double(ScmObj pointer, int offset, double value);
|
||||
*/
|
||||
extern ScmObj pointer_set_pointer(ScmObj pointer, int offset, ScmObj value);
|
||||
* extern ScmObj pointer_set_int16(ScmObj pointer, int offset, int16_t value);
|
||||
* extern ScmObj pointer_set_uint16(ScmObj pointer, int offset, uint16_t value);
|
||||
* extern ScmObj pointer_set_int32(ScmObj pointer, int offset, int32_t value);
|
||||
* extern ScmObj pointer_set_uint32(ScmObj pointer, int offset, uint32_t value);
|
||||
* extern ScmObj pointer_set_int64(ScmObj pointer, int offset, int64_t value);
|
||||
* extern ScmObj pointer_set_uint64(ScmObj pointer, int offset, uint64_t value);
|
||||
* extern ScmObj pointer_set_char(ScmObj pointer, int offset, char value);
|
||||
* extern ScmObj pointer_set_unsigned_char(ScmObj pointer, int offset, unsigned char value);
|
||||
* extern ScmObj pointer_set_short(ScmObj pointer, int offset, short value);
|
||||
* extern ScmObj pointer_set_unsigned_short(ScmObj pointer, int offset, unsigned short value);
|
||||
* extern ScmObj pointer_set_int(ScmObj pointer, int offset, int value);
|
||||
* extern ScmObj pointer_set_unsigned_int(ScmObj pointer, int offset, unsigned int value);
|
||||
* extern ScmObj pointer_set_long(ScmObj pointer, int offset, long value);
|
||||
* extern ScmObj pointer_set_unsigned_long(ScmObj pointer, int offset, unsigned long value);
|
||||
* extern ScmObj pointer_set_float(ScmObj pointer, int offset, float value);
|
||||
* extern ScmObj pointer_set_double(ScmObj pointer, int offset, double value);
|
||||
* */
|
||||
|
||||
//extern ScmObj pointer_get_int8(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_uint8(ScmObj pointer, int offset);
|
||||
/*
|
||||
extern ScmObj pointer_get_int16(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_uint16(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_int32(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_uint32(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_int64(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_uint64(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_char(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_unsigned_char(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_short(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_unsigned_short(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_int(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_unsigned_int(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_long(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_unsigned_long(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_float(ScmObj pointer, int offset);
|
||||
extern ScmObj pointer_get_double(ScmObj pointer, int offset);
|
||||
*/
|
||||
extern ScmObj pointer_get_pointer(ScmObj pointer, int offset);
|
||||
|
||||
//extern ScmObj string_to_pointer(ScmObj string);
|
||||
//extern ScmObj pointer_to_string(ScmObj pointer);
|
||||
|
||||
extern ScmObj internal_dlerror();
|
||||
extern ScmObj internal_dlsym(ScmObj shared_object, ScmObj c_name);
|
||||
extern ScmObj internal_ffi_call(ScmObj nargs, ScmObj rtype, ScmObj atypes, ScmObj fn, ScmObj rvalue, ScmObj avalues);
|
||||
|
@ -107,3 +80,4 @@ extern ScmObj get_ffi_type_void();
|
|||
extern ScmObj get_ffi_type_pointer();
|
||||
|
||||
extern void Scm_Init_gauchelib(void);
|
||||
|
||||
|
|
|
@ -36,50 +36,6 @@
|
|||
(define c-bytevector-pointer-set! pointer-set-c-pointer!)
|
||||
(define c-bytevector-pointer-ref pointer-ref-c-pointer)
|
||||
|
||||
#;(define pointer-set!
|
||||
(lambda (pointer type offset value)
|
||||
(cond ((equal? type 'int8) (pointer-set-c-int8! pointer offset value))
|
||||
((equal? type 'uint8) (pointer-set-c-uint8! pointer offset value))
|
||||
((equal? type 'int16) (pointer-set-c-int16! pointer offset value))
|
||||
((equal? type 'uint16) (pointer-set-c-uint16! pointer offset value))
|
||||
((equal? type 'int32) (pointer-set-c-int32! pointer offset value))
|
||||
((equal? type 'uint32) (pointer-set-c-uint32! pointer offset value))
|
||||
((equal? type 'int64) (pointer-set-c-int64! pointer offset value))
|
||||
((equal? type 'uint64) (pointer-set-c-uint64! pointer offset value))
|
||||
((equal? type 'char) (pointer-set-c-char! pointer offset (char->integer value)))
|
||||
((equal? type 'short) (pointer-set-c-short! pointer offset value))
|
||||
((equal? type 'unsigned-short) (pointer-set-c-short! pointer offset value))
|
||||
((equal? type 'int) (pointer-set-c-int! pointer offset value))
|
||||
((equal? type 'unsigned-int) (pointer-set-c-int! pointer offset value))
|
||||
((equal? type 'long) (pointer-set-c-long! pointer offset value))
|
||||
((equal? type 'unsigned-long) (pointer-set-c-long! pointer offset value))
|
||||
((equal? type 'float) (pointer-set-c-float! pointer offset value))
|
||||
((equal? type 'double) (pointer-set-c-double! pointer offset value))
|
||||
((equal? type 'void) (pointer-set-c-pointer! pointer offset value))
|
||||
((equal? type 'pointer) (pointer-set-c-pointer! pointer offset value)))))
|
||||
|
||||
#;(define pointer-get
|
||||
(lambda (pointer type offset)
|
||||
(cond ((equal? type 'int8) (pointer-ref-c-int8 pointer offset))
|
||||
((equal? type 'uint8) (pointer-ref-c-uint8 pointer offset))
|
||||
((equal? type 'int16) (pointer-ref-c-int16 pointer offset))
|
||||
((equal? type 'uint16) (pointer-ref-c-uint16 pointer offset))
|
||||
((equal? type 'int32) (pointer-ref-c-int32 pointer offset))
|
||||
((equal? type 'uint32) (pointer-ref-c-uint32 pointer offset))
|
||||
((equal? type 'int64) (pointer-ref-c-int64 pointer offset))
|
||||
((equal? type 'uint64) (pointer-ref-c-uint64 pointer offset))
|
||||
((equal? type 'char) (integer->char (pointer-ref-c-signed-char pointer offset)))
|
||||
((equal? type 'short) (pointer-ref-c-signed-short pointer offset))
|
||||
((equal? type 'unsigned-short) (pointer-ref-c-unsigned-short pointer offset))
|
||||
((equal? type 'int) (pointer-ref-c-signed-int pointer offset))
|
||||
((equal? type 'unsigned-int) (pointer-ref-c-unsigned-int pointer offset))
|
||||
((equal? type 'long) (pointer-ref-c-signed-long pointer offset))
|
||||
((equal? type 'unsigned-long) (pointer-ref-c-unsigned-long pointer offset))
|
||||
((equal? type 'float) (pointer-ref-c-float pointer offset))
|
||||
((equal? type 'double) (pointer-ref-c-double pointer offset))
|
||||
((equal? type 'void) (pointer-ref-c-pointer pointer offset))
|
||||
((equal? type 'pointer) (pointer-ref-c-pointer pointer offset)))))
|
||||
|
||||
(define type->native-type
|
||||
(lambda (type)
|
||||
(cond ((equal? type 'int8) 'int8_t)
|
||||
|
|
|
@ -1,19 +1,5 @@
|
|||
(define slash (cond-expand (windows "\\") (else "/")))
|
||||
|
||||
(cond-expand
|
||||
(windows (define-c-library srfi-170-libc
|
||||
'("dirent.h" "stdlib.h" "stdio.h" "string.h")
|
||||
"ucrtbase"
|
||||
'()))
|
||||
(else
|
||||
(define c-library "c")
|
||||
(when (get-environment-variable "BE_HOST_CPU")
|
||||
(set! c-library "root"))
|
||||
(define-c-library srfi-170-libc
|
||||
'("dirent.h" "stdlib.h" "stdio.h" "string.h")
|
||||
"c"
|
||||
'((additional-versions ("0" "6"))))))
|
||||
|
||||
(define-c-procedure c-perror libc 'perror 'void '(pointer))
|
||||
(define-c-procedure c-mkdir libc 'mkdir 'int '(pointer int))
|
||||
(define-c-procedure c-rmdir libc 'rmdir 'int '(pointer))
|
||||
|
|
Loading…
Reference in New Issue