Contents
Preface
1 Introduction to the FLI
1.1 An example of interfacing to a foreign function
1.1.1 Defining the FLI function
1.1.2 Loading foreign code
1.1.3 Calling foreign code
1.2 Using the FLI to get the cursor position
1.2.1 Defining FLI types
1.2.2 Defining a FLI function
1.2.3 Accessing the results
1.3 Using the FLI to set the cursor position
1.4 An example of dynamic memory allocation
1.5 Summary
2 FLI Types
2.1 Immediate types
2.1.1 Integral types
2.1.2 Floating point types
2.1.3 Character types
2.1.4 Boolean types
2.1.5 Pointer types
2.2 Aggregate types
2.2.1 Arrays
2.2.2 Strings
2.2.3 Structures and unions
2.2.4 Vector types
2.2.4.1 Vector type names
2.2.4.2 Vector type values
2.2.4.3 Using a foreign pointer to a vector type
2.2.4.4 Notes on foreign vector types
2.3 Parameterized types
2.4 Encapsulated types
2.4.1 Passing Lisp objects to C
2.4.2 An example
2.5 The void type
2.6 Summary
3 FLI Pointers
3.1 Creating and copying pointers
3.1.1 Creating pointers
3.1.2 Copying pointers
3.1.3 Allocation of FLI memory
3.2 Pointer testing functions
3.3 Pointer dereferencing and coercing
3.4 An example of dynamic pointer allocation
3.5 More examples of allocation and pointer allocation
3.5.1 Allocating an integer
3.5.2 Allocating a pointer to a pointer to a void
3.6 Summary
4 Defining foreign functions and callables
4.1 Foreign callables and foreign functions
4.1.1 Strings and foreign callables
4.2 Specifying a calling convention.
4.2.1 Windows 32-bit calling conventions
4.2.2 ARM 32-bit calling conventions
4.2.3 ARM 64-bit calling conventions
4.2.4 Fastcall on 32-bit x86 platforms
5 Advanced Uses of the FLI
5.1 Passing a string to a Windows function
5.2 Passing and returning strings
5.2.1 Use of Reference Arguments
5.2.2 Passing a string
5.2.3 Returning a string via a buffer
5.2.4 Modifying a string in a C function
5.2.5 Calling a C function that takes an array of strings
5.2.6 Foreign string encodings
5.2.7 Foreign string line terminators
5.2.8 Win32 API functions that handle strings
5.2.9 Mapping Nil to a Null Pointer
5.3 Lisp integers
5.4 Defining new types
5.5 Using DLLs within the LispWorks FLI
5.5.1 Using C DLLs
5.5.1.1 Testing whether a function is defined
5.5.2 Using C++ DLLs
5.6 Incorporating a foreign module into a LispWorks image
5.7 Block objects in C (foreign blocks)
5.7.1 Calling foreign code that receives a block as argument
5.7.2 Operations on foreign blocks
5.7.3 Scope of invocation
5.8 Interfacing to graphics functions
5.9 Summary
6 Self-contained examples
6.1 Foreign block examples
6.2 Miscellaneous examples
7 Function, Macro and Variable Reference
align-of
alloca
allocate-dynamic-foreign-object
allocate-foreign-block
allocate-foreign-object
cast-integer
connected-module-pathname
convert-from-foreign-string
convert-integer-to-dynamic-foreign-object
convert-to-foreign-string
convert-to-dynamic-foreign-string
copy-pointer
decf-pointer
define-c-enum
define-c-struct
define-c-typedef
define-c-union
define-foreign-block-callable-type
define-foreign-block-invoker
define-foreign-callable
define-foreign-converter
define-foreign-forward-reference-type
define-foreign-funcallable
define-foreign-function
define-foreign-pointer
define-foreign-type
define-foreign-variable
define-opaque-pointer
dereference
disconnect-module
enum-symbol-value
enum-value-symbol
enum-values
enum-symbols
enum-symbol-value-pairs
fill-foreign-object
foreign-aref
foreign-array-dimensions
foreign-array-element-type
foreign-array-pointer
foreign-block-copy
foreign-block-release
foreign-function-pointer
foreign-slot-names
foreign-slot-offset
foreign-slot-pointer
foreign-slot-type
foreign-slot-value
foreign-type-equal-p
foreign-type-error
foreign-typed-aref
free
free-foreign-block
free-foreign-object
get-embedded-module
get-embedded-module-data
incf-pointer
install-embedded-module
*locale-external-formats*
make-integer-from-bytes
make-pointer
malloc
module-unresolved-symbols
*null-pointer*
null-pointer-p
pointer-address
pointer-element-size
pointer-element-type
pointer-element-type-p
pointer-eq
pointer-pointer-type
pointerp
print-collected-template-info
print-foreign-modules
register-module
replace-foreign-array
replace-foreign-object
set-locale
set-locale-encodings
setup-embedded-module
size-of
start-collecting-template-info
*use-sse2-for-ext-vector-type*
with-coerced-pointer
with-dynamic-foreign-objects
with-dynamic-lisp-array-pointer
with-foreign-block
with-foreign-slots
with-foreign-string
with-integer-bytes
with-local-foreign-block
8 Type Reference
:boolean
:byte
:c-array
:char
:const
:double
:ef-mb-string
:ef-wc-string
:enum
:enumeration
:fixnum
:float
:foreign-array
foreign-block-pointer
:function
:int
:int8
:int16
:int32
:int64
:intmax
:intptr
:lisp-array
:lisp-double-float
:lisp-float
:lisp-simple-1d-array
:lisp-single-float
:long
:long-long
:one-of
:pointer
:ptr
:ptrdiff-t
:reference
:reference-pass
:reference-return
released-foreign-block-pointer
:short
:signed
:size-t
:ssize-t
:struct
:time-t
:uint8
:uint16
:uint32
:uint64
:uintmax
:uintptr
:union
:unsigned
vector-char2
vector-char3
vector-char4
vector-char8
vector-char16
vector-char32
vector-uchar2
vector-uchar3
vector-uchar4
vector-uchar8
vector-uchar16
vector-uchar32
vector-short2
vector-short3
vector-short4
vector-short8
vector-short16
vector-short32
vector-ushort2
vector-ushort3
vector-ushort4
vector-ushort8
vector-ushort16
vector-ushort32
vector-int2
vector-int3
vector-int4
vector-int8
vector-int16
vector-uint2
vector-uint3
vector-uint4
vector-uint8
vector-uint16
vector-long1
vector-long2
vector-long3
vector-long4
vector-long8
vector-ulong1
vector-ulong2
vector-ulong3
vector-ulong4
vector-ulong8
vector-float2
vector-float3
vector-float4
vector-float8
vector-float16
vector-double2
vector-double3
vector-double4
vector-double8
:void
:volatile
:wchar-t
:wrapper
9 The Foreign Parser
9.1 Introduction
9.1.1 Requirements
9.2 Loading the Foreign Parser
9.3 Using the Foreign Parser
9.4 Using the LispWorks Editor
9.4.1 Processing Foreign Code with the Editor
9.4.2 Compiling and Loading Foreign Code with the Editor
9.5 Foreign Parser Reference
*preprocessor*
*preprocessor-format-string*
*preprocessor-include-path*
*preprocessor-options*
process-foreign-file
Glossary
Index
LispWorks Foreign Language Interface User Guide and Reference Manual - 29 Sep 2017