From cb4bd2642263ab74ecc334169556ac9d97c437e7 Mon Sep 17 00:00:00 2001
From: William S Fulton
-The following table list the additional commandline options available for the CLISP module. They can also be seen by using: -
- --swig -cffi -help -
| CFFI specific options | @@ -621,192 +609,5 @@ Note that the block %{ ... %} is effectively a shortcut for -
|---|
| CLISP specific options | -|
|---|---|
| -extern-all | -If this option is given then clisp definitions for all the functions -and global variables will be created otherwise only definitions for -externed functions and variables are created. - |
-
| -generate-typedef | -If this option is given then def-c-type will be used to generate -shortcuts according to the typedefs in the input. - |
-
-As mentioned earlier the CLISP bindings generated by SWIG may need
-some modifications. The clisp module creates a lisp file with
-the same name as the module name. This
-lisp file contains a 'defpackage' declaration, with the
-package name same as the module name. This package uses the
-'common-lisp' and 'ffi' packages. Also, package exports all
-the functions, structures and variables for which an ffi
-binding was generated.
-After generating the defpackage statement, the clisp module also
-sets the default language.
-
-
-(defpackage :test - (:use :common-lisp :ffi) - (:export - :make-bar - :bar-x - :bar-y - :bar-a - :bar-b - :bar-z - :bar-n - :pointer_func - :func123 - :make-cfunr - :lispsort_double - :test123)) - -(in-package :test) - -(default-foreign-language :stdc) -
-The ffi wrappers for functions and variables are generated as shown - below. When functions have arguments of type "double * array", - SWIG doesn't knows whether it is an 'out' argument or it is - an array which will be passed, so SWIG plays it safe by - declaring it as an '(array (ffi:c-ptr DOUBLE-FLOAT))'. For - arguments of type "int **z[100]" where SWIG has more - information, i.e., it knows that 'z' is an array of pointers to - pointers of integers, SWIG defines it to be '(z (ffi:c-ptr - (ffi:c-array (ffi:c-ptr (ffi:c-ptr ffi:int)) 100)))' -
-
-extern "C" {
-int pointer_func(void (*ClosureFun)( void* _fun, void* _data, void* _evt ), int y);
-
-int func123(div_t * x, int **z[100], int y[][1000][10]);
-
-void lispsort_double (int n, double * array);
-
-void test123(float x , double y);
-
-}
--(ffi:def-call-out pointer_func - (:name "pointer_func") - (:arguments (ClosureFun (ffi:c-function (:arguments (arg0 (ffi:c-pointer NIL)) - (arg1 (ffi:c-pointer NIL)) - (arg2 (ffi:c-pointer NIL))) - (:return-type NIL))) - (y ffi:int)) - (:return-type ffi:int) - (:library +library-name+)) - -(ffi:def-call-out func123 - (:name "func123") - (:arguments (x (ffi:c-pointer div_t)) - (z (ffi:c-ptr (ffi:c-array (ffi:c-ptr (ffi:c-ptr ffi:int)) 100))) - (y (ffi:c-ptr (ffi:c-ptr (ffi:c-array ffi:int (1000 10)))))) - (:return-type ffi:int) - (:library +library-name+)) - - -(ffi:def-call-out lispsort_double - (:name "lispsort_double") - (:arguments (n ffi:int) - (array (ffi:c-ptr DOUBLE-FLOAT))) - (:return-type NIL) - (:library +library-name+)) - -(ffi:def-call-out test123 - (:name "test") - (:arguments (x SINGLE-FLOAT) - (y DOUBLE-FLOAT)) - (:return-type NIL) - (:library +library-name+)) - -
-The module also handles strutcures and #define constants as shown - below. SWIG automatically adds the constructors and accessors - created for the struct to the list of symbols exported by the - package. -
-
-struct bar {
- short x, y;
- char a, b;
- int *z[1000];
- struct bar * n;
-};
-
-#define max 1000
--(ffi:def-c-struct bar - (x :type ffi:short) - (y :type ffi:short) - (a :type character) - (b :type character) - (z :type (ffi:c-array (ffi:c-ptr ffi:int) 1000)) - (n :type (ffi:c-pointer bar))) - -(defconstant max 1000) - -