X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=inline;f=doc%2Fref.sgml;h=fcb08ebf8af2ca1e2e2e45629fcfe73eee1a7eef;hb=ca7e9a2299773cfbc927d71e6289549601438b24;hp=2eb2e1c438ca9bae4c460e9b8b29afba26bcf5e0;hpb=fb93b1923db347f01bdebc7226e5e1eaacacc9f9;p=uffi.git
diff --git a/doc/ref.sgml b/doc/ref.sgml
index 2eb2e1c..fcb08eb 100644
--- a/doc/ref.sgml
+++ b/doc/ref.sgml
@@ -90,13 +90,11 @@
:char - Signed 8-bits. A
dereferenced :char pointer returns an character.
-
:unsigned-char - Unsigned 8-bits. A dereferenced :unsigned-char
pointer returns an character.
-
:byte - Unsigned 8-bits. A
dereferenced :byte pointer returns an integer.
@@ -317,7 +315,7 @@ abstracts the difference in implementations where some return a
Examples
-(def-array ca :char)
+(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))))
@@ -498,7 +496,7 @@ structure. It's type is :pointer-self.
- def-slot-value
+ get-slot-value
Retrieves a value from a slot of a structure.
Macro
@@ -642,17 +640,17 @@ structure. It's type is :pointer-self.
-
+
- def-array
- Defines a foreign array type.
+ def-array-pointer
+ Defines a pointer to a array of type.
Macro
Syntax
- def-array name type
+ def-array-pointer name type
@@ -677,13 +675,13 @@ structure. It's type is :pointer-self.
Description
- Defines a foreign array type.
+ Defines a type tat is a pointer to an array of type.
Examples
-(def-array byte-array :unsigned-char)
+(def-array-pointer byte-array-pointer :unsigned-char)
@@ -778,6 +776,75 @@ the array.
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.
+
+
+
+
@@ -785,7 +852,8 @@ the array.
Overview
- Objects are entities that can allocated and freed.
+ Objects are entities that can allocated, referred to by pointers, and
+can be freed.
@@ -800,7 +868,7 @@ the array.
Syntax
- allocate-foreign-object type => ptr
+ allocate-foreign-object type &optional size => ptr
@@ -809,7 +877,15 @@ the array.
type
- A type of foreign object to allocate.
+ A unevaluated type of foreign object to allocate.
+
+
+
+
+ size
+
+ An optional size parameter. If specified, allocates and returns an
+array of type that is size members long.
@@ -832,7 +908,7 @@ the array.
Examples
(def-struct ab (a :int) (b :double))
-(allocate-foreign-object 'ab)
+(allocate-foreign-object ab)
=> #<ptr>
@@ -960,7 +1036,7 @@ the array.
Syntax
- def-pointer ptr type => value
+ deref-pointer ptr type => value
@@ -981,7 +1057,7 @@ the array.
- value
+ value
The value of the object where the pointer points.
@@ -999,9 +1075,76 @@ the array.
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 (deref-pointer fs :char))
+ (ensure-char-character (deref-pointer fs :char))
(free-foreign-object fs)))
=> #\a
@@ -1017,8 +1160,78 @@ the array.
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.
+
@@ -1640,7 +1853,7 @@ foreign function. If :void indicates module does not return
Examples
(def-function "gethostname"
- ((name :cstring)
+ ((name (* :unsigned-char))
(len :int))
:returning :int)