557 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Scheme
		
	
	
	
			
		
		
	
	
			557 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Scheme
		
	
	
	
(define-library
 | 
						|
  (retropikzel pffi)
 | 
						|
  (cond-expand
 | 
						|
    (chibi
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (chibi ast)
 | 
						|
              (chibi))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer-address
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback
 | 
						|
              scheme-procedure-to-pointer
 | 
						|
              )
 | 
						|
      (include-shared "pffi/chibi-pffi"))
 | 
						|
    (chicken-5
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (chicken foreign)
 | 
						|
              (chicken locative)
 | 
						|
              (chicken syntax)
 | 
						|
              (chicken memory)
 | 
						|
              (chicken random))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer-address
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback))
 | 
						|
    (chicken6
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (chicken foreign)
 | 
						|
              (chicken locative)
 | 
						|
              (chicken syntax)
 | 
						|
              (chicken memory)
 | 
						|
              (chicken random))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback))
 | 
						|
    (cyclone
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (cyclone foreign)
 | 
						|
              (scheme cyclone primitives))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (gambit
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (only (gambit) c-declare c-lambda c-define))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              ;pffi-pointer-null
 | 
						|
              ;pffi-pointer-null?
 | 
						|
              ;pffi-pointer-allocate
 | 
						|
              ;pffi-pointer?
 | 
						|
              ;pffi-pointer-free
 | 
						|
              ;pffi-pointer-set!
 | 
						|
              ;pffi-pointer-get
 | 
						|
              ;pffi-string->pointer
 | 
						|
              ;pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              ;pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (gauche
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (gauche base)
 | 
						|
              (retropikzel pffi gauche))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer-address
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (gerbil
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context))
 | 
						|
      (export pffi-init
 | 
						|
              ;pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              ;pffi-align-of
 | 
						|
              ;pffi-shared-object-auto-load
 | 
						|
              ;pffi-shared-object-load
 | 
						|
              ;pffi-pointer-null
 | 
						|
              ;pffi-pointer-null?
 | 
						|
              ;pffi-pointer-allocate
 | 
						|
              ;pffi-pointer?
 | 
						|
              ;pffi-pointer-free
 | 
						|
              ;pffi-pointer-set!
 | 
						|
              ;pffi-pointer-get
 | 
						|
              ;pffi-string->pointer
 | 
						|
              ;pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              ;pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (guile
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (rnrs bytevectors)
 | 
						|
              (system foreign)
 | 
						|
              (system foreign-library))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer-address
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback))
 | 
						|
    (kawa
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer-address
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback
 | 
						|
              ))
 | 
						|
    (larceny
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (rename (primitives r5rs:require) (r5rs:require require))
 | 
						|
              (primitives std-ffi)
 | 
						|
              (primitives foreign-procedure)
 | 
						|
              (primitives foreign-file)
 | 
						|
              (primitives foreign-stdlib)
 | 
						|
              )
 | 
						|
      (export pffi-init
 | 
						|
              ;pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              ;pffi-align-of
 | 
						|
              ;pffi-shared-object-auto-load
 | 
						|
              ;pffi-shared-object-load
 | 
						|
              ;pffi-pointer-null
 | 
						|
              ;pffi-pointer-null?
 | 
						|
              ;pffi-pointer-allocate
 | 
						|
              ;pffi-pointer?
 | 
						|
              ;pffi-pointer-free
 | 
						|
              ;pffi-pointer-set!
 | 
						|
              ;pffi-pointer-get
 | 
						|
              ;pffi-string->pointer
 | 
						|
              ;pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              ;pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (mosh
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (mosh ffi))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback))
 | 
						|
    (racket
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (only (racket base) system-type)
 | 
						|
              (ffi winapi)
 | 
						|
              (compatibility mlist)
 | 
						|
              (ffi unsafe)
 | 
						|
              (ffi vector))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer-address
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback))
 | 
						|
    (sagittarius
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (sagittarius ffi)
 | 
						|
              (sagittarius))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer-address
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              pffi-string->pointer
 | 
						|
              pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              pffi-define
 | 
						|
              pffi-define-callback))
 | 
						|
    (skint
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context))
 | 
						|
      (export pffi-init
 | 
						|
              ;pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              ;pffi-align-of
 | 
						|
              ;pffi-shared-object-auto-load
 | 
						|
              ;pffi-shared-object-load
 | 
						|
              ;pffi-pointer-null
 | 
						|
              ;pffi-pointer-null?
 | 
						|
              ;pffi-pointer-allocate
 | 
						|
              ;pffi-pointer?
 | 
						|
              ;pffi-pointer-free
 | 
						|
              ;pffi-pointer-set!
 | 
						|
              ;pffi-pointer-get
 | 
						|
              ;pffi-string->pointer
 | 
						|
              ;pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              ;pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (stklos
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context)
 | 
						|
              (stklos))
 | 
						|
      (export pffi-init
 | 
						|
              pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              pffi-align-of
 | 
						|
              pffi-shared-object-auto-load
 | 
						|
              pffi-shared-object-load
 | 
						|
              pffi-pointer-null
 | 
						|
              pffi-pointer-null?
 | 
						|
              pffi-pointer-allocate
 | 
						|
              pffi-pointer?
 | 
						|
              pffi-pointer-free
 | 
						|
              pffi-pointer-set!
 | 
						|
              pffi-pointer-get
 | 
						|
              ;pffi-string->pointer
 | 
						|
              ;pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              ;pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (tr7
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context))
 | 
						|
      (export pffi-init
 | 
						|
              ;pffi-size-of
 | 
						|
              pffi-type?
 | 
						|
              ;pffi-align-of
 | 
						|
              ;pffi-shared-object-auto-load
 | 
						|
              ;pffi-shared-object-load
 | 
						|
              ;pffi-pointer-null
 | 
						|
              ;pffi-pointer-null?
 | 
						|
              ;pffi-pointer-allocate
 | 
						|
              ;pffi-pointer?
 | 
						|
              ;pffi-pointer-free
 | 
						|
              ;pffi-pointer-set!
 | 
						|
              ;pffi-pointer-get
 | 
						|
              ;pffi-string->pointer
 | 
						|
              ;pffi-pointer->string
 | 
						|
              pffi-struct-make
 | 
						|
              pffi-struct-pointer
 | 
						|
              pffi-struct-offset-get
 | 
						|
              pffi-struct-get
 | 
						|
              pffi-struct-set!
 | 
						|
              ;pffi-define
 | 
						|
              ;pffi-define-callback
 | 
						|
              ))
 | 
						|
    (ypsilon
 | 
						|
      (import (scheme base)
 | 
						|
              (scheme write)
 | 
						|
              (scheme char)
 | 
						|
              (scheme file)
 | 
						|
              (scheme process-context))
 | 
						|
      (export ;pffi-init
 | 
						|
        ;pffi-size-of
 | 
						|
        pffi-type?
 | 
						|
        ;pffi-align-of
 | 
						|
        ;pffi-shared-object-auto-load
 | 
						|
        ;pffi-shared-object-load
 | 
						|
        ;pffi-pointer-null
 | 
						|
        ;pffi-pointer-null?
 | 
						|
        ;pffi-pointer-allocate
 | 
						|
        ;pffi-pointer?
 | 
						|
        ;pffi-pointer-free
 | 
						|
        ;pffi-pointer-set!
 | 
						|
        ;pffi-pointer-get
 | 
						|
        ;pffi-string->pointer
 | 
						|
        ;pffi-pointer->string
 | 
						|
        pffi-struct-make
 | 
						|
        pffi-struct-pointer
 | 
						|
        pffi-struct-offset-get
 | 
						|
        pffi-struct-get
 | 
						|
        pffi-struct-set!
 | 
						|
        ;pffi-define
 | 
						|
        ;pffi-define-callback
 | 
						|
        ))
 | 
						|
    (else (error "Unsupported implementation")))
 | 
						|
  (cond-expand
 | 
						|
    (chibi (include "pffi/chibi.scm"))
 | 
						|
    (chicken-5 (include "pffi/chicken5.scm"))
 | 
						|
    (chicken-6 (include "chicken6.scm"))
 | 
						|
    (cyclone (include "pffi/cyclone.scm"))
 | 
						|
    (gambit (include "pffi/gambit.scm"))
 | 
						|
    (gauche (include "pffi/gauche.scm"))
 | 
						|
    (gerbil (include "pffi/gerbil.scm"))
 | 
						|
    (guile (include "pffi/guile.scm"))
 | 
						|
    (kawa (include "pffi/kawa.scm"))
 | 
						|
    (larceny (include "pffi/larceny.scm"))
 | 
						|
    (mosh (include "pffi/mosh.scm"))
 | 
						|
    (racket (include "pffi/racket.scm"))
 | 
						|
    (sagittarius (include "pffi/sagittarius.scm"))
 | 
						|
    (skint (include "pffi/skint.scm"))
 | 
						|
    (stklos (include "pffi/stklos.scm"))
 | 
						|
    (tr7 (include "pffi/tr7.scm"))
 | 
						|
    (ypsilon (include "pffi/ypsilon.scm")))
 | 
						|
  (include "pffi/shared/struct.scm")
 | 
						|
  (include "pffi/shared/union.scm")
 | 
						|
  (include "pffi/shared/main.scm"))
 |