X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=inline;f=doc%2Fref.sgml;h=7c103ab77946a83446cb7ef106d7e4b476b54295;hb=fc7552128575d89debce4f4e32705efd26dfddc1;hp=81c75aad198724057b3791d17134ef4787403350;hpb=d9322041cff941cfa0ee5a4a916259177b6dbe61;p=uffi.git
diff --git a/doc/ref.sgml b/doc/ref.sgml
index 81c75aa..7c103ab 100644
--- a/doc/ref.sgml
+++ b/doc/ref.sgml
@@ -1,298 +1,1656 @@
-
- Programming Reference
+
+ Declarations
+
- Design Overview
-
- &uffi; was designed as a cross-implementation compatible
- Foreign Function Interface. Necessarily,
- only a common subset of functionality can be
- provided. Likewise, not every optimization for that a specific
- implementation provides can be supported. Wherever possible,
- though, implementation-specific optimizations are invoked.
-
-
-
-
- Declarations
-
- Overview
- Declarations are used to give the compiler optimizing
+ Overview
+ Declarations are used to give the compiler optimizing
information about foreign types. Currently, only &cmucl;
supports declarations. On &acl; and &lw;, these expressions
declare the type generically as &t;
-
-
+
+
+
-
- uffi-declare
-
- This is used wherever a declare
- expression can be placed. For example:
-
-
-
-(let ((my-structure (uffi:allocate-foreign-object 'a-struct)))
- (uffi:uffi-declare a-struct my-structure))
-
+
+
+ def-type
+ Defines a Common Lisp type.
+
+ Macro
+
+
+ Syntax
+
+ def-type name type
+
+
+
+ Arguments and Values
+
+
+ name
+
+ A symbol naming the type
+
+
+
+ type
+
+ A form that is evaluated that specifies the &uffi; type.
+
+
+
+
+
+
+ Description
+ Defines a Common Lisp type based on a &uffi; type.
-
+
+
+ Examples
+
+(def-type char-ptr '(* :char))
+...
+(defun foo (ptr)
+ (declare (type char-ptr ptr))
+ ...
+
+
+
+ Side Effects
+ Defines a new &cl; type.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
-
- slot-type
-
- This is used inside of defclass and
- defstruct expressions to set the type
- for a field. Because the type identifier is not evaluated in
- &cl;, the expression must be backquoted for effect. For
- example:
-
-
-
-(eval
- `(defclass a-class ()
- ((char-ptr :type ,(uffi:slot-type (* :char))))))
-
-
-
-
-
- Immediate Types
-
- Overview
+
+ Primitive Types
+
+ Overview
- Immediate types have a single value, these include
+ Primitive types have a single value, these include
characters, numbers, and pointers. They are all symbols in
the keyword package.
- :char - Signed 8-bits
+ :char - Signed 8-bits. A
+dereferenced :char pointer returns an character.
+
+
+ :unsigned-char - Unsigned 8-bits. A dereferenced :unsigned-char
+pointer returns an character.
- :unsigned-char - Unsigned 8-bits
+ :byte - Unsigned 8-bits. A
+dereferenced :byte pointer returns an integer.
- :short - Signed 16-bits
+ :short - Signed 16-bits.
- :unsigned-short - Unsigned 16-bits
+ :unsigned-short - Unsigned 16-bits.
- :int - Signed 32-bits
+ :int - Signed 32-bits.
- :unsigned-int - Unsigned 32-bits
+ :unsigned-int - Unsigned 32-bits.
- :long - Signed 32-bits
+ :long - Signed 32-bits.
- :unsigned-long - Unsigned 32-bits
+ :unsigned-long - Unsigned 32-bits.
- :float - 32-bit floating point
+ :float - 32-bit floating point.
- :double - 64-bit floating point
+ :double - 64-bit floating point.
:cstring -
-A null-terminated string used for passing and returning with a function.
+A &null; terminated string used for passing and returning characters strings with a &c; function.
:void -
-The absence of a value. Used in generic pointers and in return types from functions.
+The absence of a value. Used to indicate that a function does not return a value.
+
+
+ :pointer-void -
+Points to a generic object.
* - Used to declare a pointer to an object
-
-
- def-constant
+
+
+
+
+ def-constant
+ Binds a symbol to a constant.
+
+ Macro
+
+
+ Syntax
+
+ def-constant name value &key export
+
+
+
+ Arguments and Values
+
+
+ name
+
+ A symbol that will be bound to the value.
+
+
+
+
+ value
+
+ An evaluated form that is bound the the name.
+
+
+
+
+ export
+
+ When &t;, the name is exported from the current package. The default is &nil;
+
+
+
+
+
+ Description
This is a thin wrapper around
defconstant. It evaluates at
- compile-time and exports the symbol from the package.
-
-
-
- def-type
-
- This is the main function for creating new types.
-
-
- Examples
-
-
-(def-type my-generic-pointer (* :void))
-(def-type a-double-float :double-float)
-(def-type char-ptr (* :char))
-
-
-
-
-
- null-char-p
-
- A predicate testing if a pointer object is &null;
+ compile-time and optionally exports the symbol from the package.
-
-
+
+
+ Examples
+
+(def-constant pi2 (* 2 pi))
+(def-constant exported-pi2 (* 2 pi) :export t)
+
+
+
+ Side Effects
+ Creates a new special variable..
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
-
- Aggregate Types
-
- def-enum
-
- Declares a &c; enumeration. It generates constants for the
- elements of the enumeration.
-
-
-
- def-struct
-
- Declares a structure. A special type is available as a slot in the field. It is
- a pointer that points to an instance of the parent structure. It's type is
- :pointer-self.
-
-
- Examples
-
-
-(def-struct foo (a :unsigned-int) (b :array 10) (next :pointer-self))
-
-
-
-
-
- get-slot-value
-
- Accesses a slot value from a structure.
-
-
-
- get-slot-pointer
-
- This is similar to get-slot-value. It
- is used when the value of a slot is a pointer type.
-
-
-
- def-array
-
- Defines an array.
+
+
+ def-foreign-type
+ Defines a new foreign type.
+
+ Macro
+
+
+ Syntax
+
+ def-foreign-type name type
+
+
+
+ Arguments and Values
+
+
+ name
+
+ A symbol naming the new foreign type.
+
+
+
+
+ value
+
+ A form that is not evaluated that defines the new
+foreign type.
+
+
+
+
+
+
+ Description
+ Defines a new foreign type.
-
-
- deref-array
-
- Accesses an element of an array.
+
+
+ Examples
+
+(def-foreign-type my-generic-pointer :pointer-void)
+(def-foreign-type a-double-float :double-float)
+(def-foreign-type char-ptr (* :char))
+
+
+
+ Side Effects
+ Defines a new foreign type.
-
-
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
-
- Objects
-
- Overview
-
- Objects are entities that can allocated and freed.
-
-
-
- allocate-foreign-object
-
- Allocates an instance of a foreign object. It returns a pointer to the object.
-
-
-
- free-foreign-object
-
- Frees the memory used by a foreign object.
-
-
-
- pointer-address
-
- Returns the address as an integer of a pointer.
-
-
-
- deref-pointer
-
- Returns the object to which a pointer points.
-
-
-
- make-null-pointer
-
- Creates a &null; pointer of a specified type.
-
-
-
- null-pointer-p
+
+
+ null-char-p
+ Tests a character for &null; value.
+
+ Macro
+
+
+ Syntax
+
+ null-char-p char => is-null
+
+
+
+ Arguments and Values
+
+
+ char
+
+ A character or integer.
+
+
+
+
+ is-null
+
+ A boolean flag indicating if char is a &null; value.
+
+
+
+
+
+
+ Description
- A predicate testing if a pointer is has a &null; value.
+ A predicate testing if a character or integer is &null;. This
+abstracts the difference in implementations where some return a
+character and some return a
+integer whence dereferencing a
+C character pointer.
-
-
- +null-cstring-pointer+
-
- A constant &null; character pointer.
+
+
+ Examples
+
+(def-array-pointer ca :unsigned-char)
+(let ((fs (convert-to-foreign-string "ab")))
+ (values (null-char-p (deref-array fs 'ca 0))
+ (null-char-p (deref-array fs 'ca 2))))
+=> &nil;
+ &t;
+
+
+
+ Side Effects
+ None.
-
-
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
-
- Strings
-
- Overview
-
- &uffi; has functions to two types of C-compatible
- strings, cstring and foreign strings.
-cstrings are used as parameters to and from functions. An implementation, such as CMUCL,
-may not convert these to a foreign type for efficiency sake. Thus, it is not
-possible to "allocate" a cstring. In contrast, foreign strings
+
+ Aggregate Types
+
+ Overview
+
+ Aggregate types are comprised of one or more primitive types.
+
+
+
+
+
+ def-enum
+ Defines a &c; enumeration.
+
+ Macro
+
+
+ Syntax
+
+ def-enum name fields &key separator-string
+
+
+
+ Arguments and Values
+
+
+ name
+
+ A symbol that names the enumeration.
+
+
+
+
+ fields
+
+ A list of field defintions. Each definition can be
+a symbol or a list of two elements. Symbols get assigned a value of the
+current counter which starts at 0 and
+increments by 1 for each subsequent symbol. It the field definition is a list, the first position is the symbol and the second
+position is the value to assign the the symbol. The current counter gets set
+to 1+ this value.
+
+
+
+
+ separator-string
+
+ A string that governs the creation of constants. The
+default is "#".
+
+
+
+
+
+ Description
+
+ Declares a &c; enumeration. It generates constants with integer values for the elements of the enumeration. The symbols for the these constant
+values are created by the concatenation of the
+enumeration name, separator-string, and field symbol. Also creates
+a foreign type with the name name of type
+:int.
+
+
+
+ Examples
+
+(def-enum abc (:a :b :c))
+;; Creates constants abc#a (1), abc#b (2), abc#c (3) and defines
+;; the foreign type "abc" to be :int
+
+(def-enum efoo (:e1 (:e2 10) :e3) :separator-string "-")
+;; Creates constants efoo-e1 (1), efoo-e2 (10), efoo-e3 (11) and defines
+;; the foreign type efoo to be :int
+
+
+
+ Side Effects
+ Creates a :int foreign type, defines constants.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ def-struct
+ Defines a &c; structure.
+
+ Macro
+
+
+ Syntax
+
+ def-struct name &rest fields
+
+
+
+ Arguments and Values
+
+
+ name
+
+ A symbol that names the structure.
+
+
+
+
+ fields
+
+ A variable number of field defintions. Each definition is a list consisting of a symbol naming the field followed by its foreign type.
+
+
+
+
+
+
+ Description
+
+ Declares a structure. A special type is available as a slot
+in the field. It is a pointer that points to an instance of the parent
+structure. It's type is :pointer-self.
+
+
+
+
+ Examples
+
+(def-struct foo (a :unsigned-int)
+ (b (* :char))
+ (c (:array :int 10))
+ (next :pointer-self))
+
+
+
+ Side Effects
+ Creates a foreign type.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ get-slot-value
+ Retrieves a value from a slot of a structure.
+
+ Macro
+
+
+ Syntax
+
+ get-slot-value obj type field => value
+
+
+
+ Arguments and Values
+
+
+ obj
+
+ A pointer to foreign structure.
+
+
+
+
+ type
+
+ A name of the foreign structure.
+
+
+
+
+ field
+
+ A name of the desired field in foreign structure.
+
+
+
+
+ value
+
+ The value of the field in the structure.
+
+
+
+
+
+
+ Description
+
+ Accesses a slot value from a structure.
+
+
+
+ Examples
+
+(get-slot-value foo-ptr 'foo-structure 'field-name)
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+ get-slot-pointer
+ Retrieves a pointer from a slot of a structure.
+
+ Macro
+
+
+ Syntax
+
+ get-slot-pointer obj type field => pointer
+
+
+
+ Arguments and Values
+
+
+ obj
+
+ A pointer to foreign structure.
+
+
+
+
+ type
+
+ A name of the foreign structure.
+
+
+
+
+ field
+
+ A name of the desired field in foreign structure.
+
+
+
+
+ pointer
+
+ The value of the field in the structure.
+
+
+
+
+
+
+ Description
+
+ This is similar to get-slot-value. It
+ is used when the value of a slot is a pointer type.
+
+
+
+ Examples
+
+(get-slot-pointer foo-ptr 'foo-structure 'my-char-ptr)
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ def-array-pointer
+ Defines a pointer to a array of type.
+
+ Macro
+
+
+ Syntax
+
+ def-array-pointer name type
+
+
+
+ Arguments and Values
+
+
+ name
+
+ A name of the new foreign type.
+
+
+
+
+ type
+
+ The foreign type of the array elements.
+
+
+
+
+
+
+ Description
+
+ Defines a type tat is a pointer to an array of type.
+
+
+
+ Examples
+
+(def-array-pointer byte-array-pointer :unsigned-char)
+
+
+
+ Side Effects
+ Defines a new foreign type.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ deref-array
+ Deference an array.
+
+ Macro
+
+
+ Syntax
+
+ deref-array array type positon => value
+
+
+
+ Arguments and Values
+
+
+ array
+
+ A foreign array.
+
+
+
+
+ type
+
+ The foreign type of the array.
+
+
+
+
+ position
+
+ An integer specifying the position to retrieve from
+the array.
+
+
+
+
+ value
+
+ The value stored in the position of the array.
+
+
+
+
+
+
+ Description
+
+ Dereferences (retrieves) the value of an array element.
+
+
+
+ Examples
+
+(def-array ca :char)
+(let ((fs (convert-to-foreign-string "ab")))
+ (values (null-char-p (deref-array fs 'ca 0))
+ (null-char-p (deref-array fs 'ca 2))))
+=> &nil;
+ &t;
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+ def-union
+ Defines a foreign union type.
+
+ Macro
+
+
+ Syntax
+
+ def-union name &rest fields
+
+
+
+ Arguments and Values
+
+
+ name
+
+ A name of the new union type.
+
+
+
+
+ fields
+
+ A list of fields of the union.
+
+
+
+
+
+
+ Description
+
+ Defines a foreign union type.
+
+
+
+ Examples
+
+(def-union test-union
+ (a-char :char)
+ (an-int :int))
+
+(let ((u (allocate-foreign-object 'test-union))
+ (setf (get-slot-value u 'test-union 'an-int) (+ 65 (* 66 256)))
+ (prog1
+ (ensure-char-character (get-slot-value u 'test-union 'a-char))
+ (free-foreign-object u)))
+=> #\A
+
+
+
+ Side Effects
+ Defines a new foreign type.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+
+ Objects
+
+Overview
+
+ Objects are entities that can allocated, referred to by pointers, and
+can be freed.
+
+
+
+
+
+
+ allocate-foreign-object
+ Allocates an instance of a foreign object.
+
+ Macro
+
+
+ Syntax
+
+ allocate-foreign-object type &optional size => ptr
+
+
+
+ Arguments and Values
+
+
+ type
+
+ The type of foreign object to allocate. This parameter is evaluated.
+
+
+
+
+ size
+
+ An optional size parameter that is evaluated. If specified, allocates and returns an
+array of type that is size members long. This parameter is evaluated.
+
+
+
+
+ ptr
+
+ A pointer to the foreign object.
+
+
+
+
+
+
+ Description
+
+ Allocates an instance of a foreign object. It returns a pointer to the object.
+
+
+
+ Examples
+
+(def-struct ab (a :int) (b :double))
+(allocate-foreign-object 'ab)
+=> #<ptr>
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ free-foreign-object
+ Frees memory that was allocated for a foreign boject.
+
+ Macro
+
+
+ Syntax
+
+ free-foreign-object ptr
+
+
+
+ Arguments and Values
+
+
+ ptr
+
+ A pointer to the allocated foreign object to free.
+
+
+
+
+
+
+ Description
+
+ Frees the memory used by the allocation of a foreign object.
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ with-foreign-object
+ Wraps the allocation of a foreign object around a body of code.
+
+ Macro
+
+
+ Syntax
+
+ with-foreign-object (var type) &body body => form-return
+
+
+
+ Arguments and Values
+
+
+ var
+
+ The variable name to bind.
+
+
+
+
+ type
+
+ The type of foreign object to allocate. This parameter is evaluated.
+
+
+
+
+ form-return
+
+ The result of evaluating the body.
+
+
+
+
+
+
+ Description
+
+This function wraps the allocation, binding, and destruction of a foreign object.
+On &cmucl; and
+&lw; platforms the object is stack allocated for efficiency. Benchmarks show that &acl; performs
+much better with static allocation.
+
+
+
+ Examples
+
+(defun gethostname2 ()
+ "Returns the hostname"
+ (uffi:with-foreign-object (name '(:array :unsigned-char 256))
+ (if (zerop (c-gethostname (uffi:char-array-to-pointer name) 256))
+ (uffi:convert-from-foreign-string name)
+ (error "gethostname() failed."))))
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+ pointer-address
+ Returns the address of a pointer.
+
+ Macro
+
+
+ Syntax
+
+ pointer-address ptr => address
+
+
+
+ Arguments and Values
+
+
+ ptr
+
+ A pointer to a foreign object.
+
+
+
+
+ address
+
+ An integer representing the pointer's address.
+
+
+
+
+
+
+ Description
+
+ Returns the address as an integer of a pointer.
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ deref-pointer
+ Deferences a pointer.
+
+ Macro
+
+
+ Syntax
+
+ deref-pointer ptr type => value
+
+
+
+ Arguments and Values
+
+
+ ptr
+
+ A pointer to a foreign object.
+
+
+
+
+ type
+
+ A foreign type of the object being pointed to.
+
+
+
+
+ value
+
+ The value of the object where the pointer points.
+
+
+
+
+
+
+ Description
+
+ Returns the object to which a pointer points.
+
+
+
+ Examples
+
+
+(let ((intp (allocate-foreign-object :int)))
+ (setf (deref-pointer intp :int) 10)
+ (prog1
+ (deref-pointer intp :int)
+ (free-foreign-object intp)))
+=> 10
+
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+ ensure-char-character
+ Ensures that a dereferenced :char pointer is
+a character.
+
+ Macro
+
+
+ Syntax
+
+ ensure-char-character object => char
+
+
+
+ Arguments and Values
+
+
+ object
+
+ Either a character or a integer specifying a character code.
+
+
+
+
+ char
+
+ A character.
+
+
+
+
+
+
+ Description
+
+ Ensures that an object obtained by dereferencing a
+:char pointer is a character.
+
+
+
+ Examples
+
+
+(let ((fs (convert-to-foreign-string "a")))
+ (prog1
+ (ensure-char-character (deref-pointer fs :char))
+ (free-foreign-object fs)))
+=> #\a
+
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ Depending upon the implementation and what &uffi; expects, this
+macro may signal an error if the object is not a character or
+integer.
+
+
+
+
+
+ ensure-char-integer
+ Ensures that a dereferenced :char pointer is
+an integer.
+
+ Macro
+
+
+ Syntax
+
+ ensure-char-integer object => int
+
+
+
+ Arguments and Values
+
+
+ object
+
+ Either a character or a integer specifying a character code.
+
+
+
+
+ int
+
+ An integer.
+
+
+
+
+
+
+ Description
+
+ Ensures that an object obtained by dereferencing a
+:char pointer is an integer.
+
+
+
+ Examples
+
+
+(let ((fs (convert-to-foreign-string "a")))
+ (prog1
+ (ensure-char-integer (deref-pointer fs :char))
+ (free-foreign-object fs)))
+=> 96
+
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ Depending upon the implementation and what &uffi; expects, this
+macro may signal an error if the object is not a character or
+integer.
+
+
+
+
+
+ make-null-pointer
+ Create a &null; pointer.
+
+ Macro
+
+
+ Syntax
+
+ make-null-pointer type => ptr
+
+
+
+ Arguments and Values
+
+
+ type
+
+ A type of object to which the pointer refers.
+
+
+
+
+ ptr
+
+ The &null; pointer of type type.
+
+
+
+
+
+
+ Description
+
+ Creates a &null; pointer of a specified type.
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ null-pointer-p
+ Tests a pointer for &null; value.
+
+ Macro
+
+
+ Syntax
+
+ null-pointer-p ptr => is-null
+
+
+
+ Arguments and Values
+
+
+ ptr
+
+ A foreign object pointer.
+
+
+
+
+ is-null
+
+ The boolean flag.
+
+
+
+
+
+
+ Description
+
+ A predicate testing if a pointer is has a &null; value.
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ +null-cstring-pointer+
+ A constant &null; cstring pointer.
+
+ Constant
+
+
+ Description
+
+ A &null; cstring pointer. This can be used for testing
+if a cstring returned by a function is &null;.
+
+
+
+
+
+
+
+ Strings
+
+Overview
+
+ &uffi; has functions to two types of C-compatible
+ strings, cstring and foreign strings.
+cstrings are used as parameters to and from functions. An implementation, such as CMUCL,
+may not convert these to a foreign type for efficiency sake. Thus, it is not
+possible to "allocate" a cstring. In contrast, foreign strings
always need to have memory for them.
-
-
- convert-from-cstring
+
+
+
+
+ convert-from-cstring
+ Converts a cstring to a Lisp string.
+
+ Macro
+
+
+ Syntax
+
+ convert-from-cstring cstring => string
+
+
+
+ Arguments and Values
+
+
+ cstring
+
+ A cstring.
+
+
+
+
+ string
+
+ A Lisp string.
+
+
+
+
+
+
+ Description
- Converts a Lisp string to a cstring.
+ Converts a Lisp string to a cstring. This is
+most often used when processing the results of a foreign function
+that returns a cstring.
-
-
- convert-to-cstring
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ convert-to-cstring
+ Converts a Lisp string to a cstring.
+
+ Macro
+
+
+ Syntax
+
+ convert-to-cstring string => cstring
+
+
+
+ Arguments and Values
+
+
+ string
+
+ A Lisp string.
+
+
+
+
+ cstring
+
+ A cstring.
+
+
+
+
+
+
+ Description
Converts a Lisp string to a
cstring. The
cstring should be freed with
free-cstring.
-
-
- free-cstring
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ free-cstring
+ Free memory used by cstring.
+
+ Macro
+
+
+ Syntax
+
+ free-cstring cstring
+
+
+
+ Arguments and Values
+
+
+ cstring
+
+ A cstring.
+
+
+
+
+
+
+ Description
Frees any memory possibly allocated by
convert-to-cstring.
-
-
- with-cstring
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ with-cstring
+ Binds a newly created cstring.
+
+ Macro
+
+
+ Syntax
+
+ with-cstring (cstring string) {body}
+
+
+
+ Arguments and Values
+
+
+ cstring
+
+ A symbol naming the cstring to be created.
+
+
+
+
+ string
+
+ A Lisp string that will be translated to a cstring.
+
+
+
+
+ body
+
+ The body of where the cstring will be bound.
+
+
+
+
+
+
+ Description
Binds a lexical variable to a newly allocated cstring. Automatically frees cstring.
-
- Examples
-
+
+
+ Examples
+
(def-function ("getenv" c-getenv)
((name :cstring))
@@ -303,35 +1661,216 @@ always need to have memory for them.
(check-type key string)
(with-cstring (key-cstring key)
(convert-from-cstring (c-getenv key-cstring))))
-
-
-
-
-
- convert-from-foreign-string
+
+
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ convert-from-foreign-string
+ Converts a foreign string into a Lisp string.
+
+ Macro
+
+
+ Syntax
+
+ convert-from-foreign-string foreign-string &key length null-terminated-p => string
+
+
+
+ Arguments and Values
+
+
+ foreign-string
+
+ A foreign string.
+
+
+
+
+ length
+
+ The length of the foreign string to
+convert. The default is the length of the string until a &null;
+character is reached.
+
+
+
+
+ null-terminated-p
+
+ A boolean flag with a default value of &t; When true,
+the string is converted until the first &null; character is reached.
+
+
+
+
+ string
+
+ A Lisp string.
+
+
+
+
+
+
+ Description
- Returns a Lisp string from a foreign string. Has parameters
- to handle ASCII versus binary strings.
+ Returns a Lisp string from a foreign string.
+Can translated ASCII and binary strings.
-
-
- convert-to-foreign-string
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ convert-to-foreign-string
+ Converts a Lisp string to a foreign string.
+
+ Macro
+
+
+ Syntax
+
+ convert-to-foreign-string string => foreign-string
+
+
+
+ Arguments and Values
+
+
+ string
+
+ A Lisp string.
+
+
+
+
+ foreign-string
+
+ A foreign string.
+
+
+
+
+
+
+ Description
Converts a Lisp string to a foreign string. Memory should be
freed with free-foreign-object.
-
-
- allocate-foreign-string
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+
+ allocate-foreign-string
+ Allocates space for a foreign string.
+
+ Macro
+
+
+ Syntax
+
+ allocate-foreign-string size &key unsigned => foreign-string
+
+
+
+ Arguments and Values
+
+
+ size
+
+ The size of the space to be allocated in bytes.
+
+
+
+
+ unsigned
+
+ A boolean flag with a default value of &t;. When true,
+marks the pointer as an :unsigned-char.
+
+
+
+
+ foreign-string
+
+ A foreign string which has undefined contents.
+
+
+
+
+
+
+ Description
Allocates space for a foreign string. Memory should
be freed with free-foreign-object.
-
-
+
+
+ Side Effects
+ None.
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+
+
+
+ Functions & Libraries
-
- Functions
def-function
@@ -344,7 +1883,9 @@ always need to have memory for them.
def-function name args &key module returning
- Arguments and Values
+
+
+ Arguments and Values
name
@@ -356,7 +1897,7 @@ always need to have memory for them.
args
- A list of argument declarations. Use &nil; to specify no arguments.
+ A list of argument declarations. If &nil;, indicates that the function does not take any arguments.
@@ -370,12 +1911,12 @@ always need to have memory for them.
returning
A declaration specifying the result type of the
-foreign function.
+foreign function. If :void indicates module does not return any value.
-
+
Description
Declares a foreign function.
@@ -385,7 +1926,7 @@ foreign function.
Examples
(def-function "gethostname"
- ((name :cstring)
+ ((name (* :unsigned-char))
(len :int))
:returning :int)
@@ -403,10 +1944,7 @@ foreign function.
None.
-
-
- Libraries
load-foreign-library
@@ -417,7 +1955,7 @@ foreign function.
Syntax
- load-foreign-library filename module supporting-libraries => success
+ load-foreign-library filename &key module supporting-libraries => success
@@ -427,7 +1965,8 @@ foreign function.
filename
A string or pathname specifying the library location
-in the filesystem.
+in the filesystem. At least one implementation (&lw;) can not
+accept a logical pathname.
@@ -468,7 +2007,9 @@ a session.
Examples
- (load-foreign-library #p"/usr/lib/libmysqlclient.so" "mysql" '("c"))
+ (load-foreign-library #p"/usr/lib/libmysqlclient.so"
+ :module "mysql"
+ :supporting-libraries '("c"))
=> T
@@ -486,7 +2027,92 @@ a session.
None.
-
-
+
+
+
+ find-foreign-library
+ Finds a foreign library file.
+
+ Function
+
+
+ Syntax
+
+ find-foreign-library names directories & drive-letters types => path
+
+
+
+ Arguments and Values
+
+
+ names
+
+ A string or list of strings containing the base name of the library file.
+
+
+
+
+ directories
+
+ A string or list of strings containing the directory the library file.
+
+
+
+
+ drive-letters
+
+ A string or list of strings containing the drive letters for the library file.
+
+
+
+
+ types
+
+ A string or list of strings containing the file type of the library file. Default
+is &nil;. If &nil;, will use a default type based on the currently running implementation.
+
+
+
+
+ path
+
+ A path containing the path found, or &nil; if the library file was not found.
+
+
+
+
+
+
+ Description
+ Finds a foreign library by searching through a number of possible locations. Returns
+the path of the first found file.
+
+
+
+ Examples
+
+(find-foreign-library '("libmysqlclient" "libmysql")
+ '("/opt/mysql/lib/mysql/" "/usr/local/lib/" "/usr/lib/" "/mysql/lib/opt/")
+ :types '("so" "dll")
+ :drive-letters '("C" "D" "E"))
+=> #P"D:\\mysql\\lib\\opt\\libmysql.dll"
+
+
+
+ Side Effects
+ None.
+
+
+
+ Affected by
+ None.
+
+
+ Exceptional Situations
+ None.
+
+
+
+