Updated documentation
This commit is contained in:
		
							parent
							
								
									0d4d026a96
								
							
						
					
					
						commit
						0da448614e
					
				| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
title: foreign-c a portable foreign function interface for R7RS
 | 
					title: foreign-c a portable foreign function interface for R7RS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
version: 0.10.0
 | 
					version: 0.10.0
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
<html lang="en">
 | 
					<html lang="en">
 | 
				
			||||||
    <head>
 | 
					    <head>
 | 
				
			||||||
        <meta charset="utf-8">
 | 
					        <meta charset="utf-8">
 | 
				
			||||||
        <title>(foreign c) a portable foreign function interface for
 | 
					        <title>foreign-c a portable foreign function interface for
 | 
				
			||||||
R7RS - 0.10.0</title>
 | 
					R7RS - 0.10.0</title>
 | 
				
			||||||
        <style>
 | 
					        <style>
 | 
				
			||||||
            table { width: 250%; }
 | 
					            table { width: 250%; }
 | 
				
			||||||
| 
						 | 
					@ -12,12 +12,19 @@ R7RS - 0.10.0</title>
 | 
				
			||||||
        </style>
 | 
					        </style>
 | 
				
			||||||
    </head>
 | 
					    </head>
 | 
				
			||||||
    <body>
 | 
					    <body>
 | 
				
			||||||
        <h1 id="foreign-c">(foreign c)</h1>
 | 
					        <h1 id="foreign-c">foreign-c</h1>
 | 
				
			||||||
        <p>(foreign c) is a C foreign function interface (FFI) library
 | 
					        <p>foreign-c is a C foreign function interface (FFI) library for
 | 
				
			||||||
        for R7RS. It is portable in the sense that it supports multiple
 | 
					        R7RS. It is portable in the sense that it supports multiple
 | 
				
			||||||
        implementations, as opposed to being portable by conforming to
 | 
					        implementations, as opposed to being portable by conforming to
 | 
				
			||||||
        some specification.</p>
 | 
					        some specification.</p>
 | 
				
			||||||
        <p>The new readme is a work in progress.</p>
 | 
					        <p><a
 | 
				
			||||||
 | 
					        href="https://todo.sr.ht/~retropikzel/r7rs-pffi">Project</a></p>
 | 
				
			||||||
 | 
					        <p><a href="https://sr.ht/~retropikzel/r7rs-pffi/trackers">Issue
 | 
				
			||||||
 | 
					        trackers</a></p>
 | 
				
			||||||
 | 
					        <p><a href="https://sr.ht/~retropikzel/r7rs-pffi/lists">Maling
 | 
				
			||||||
 | 
					        lists</a></p>
 | 
				
			||||||
 | 
					        <p><a
 | 
				
			||||||
 | 
					        href="https://jenkins.scheme.org/job/r7rs_pffi/job/r7rs-pffi/">Jenkins</a></p>
 | 
				
			||||||
        <ul>
 | 
					        <ul>
 | 
				
			||||||
        <li><a href="#installation">Installation</a></li>
 | 
					        <li><a href="#installation">Installation</a></li>
 | 
				
			||||||
        <li><a href="#documentation">Documentation</a>
 | 
					        <li><a href="#documentation">Documentation</a>
 | 
				
			||||||
| 
						 | 
					@ -272,9 +279,9 @@ R7RS - 0.10.0</title>
 | 
				
			||||||
        </table>
 | 
					        </table>
 | 
				
			||||||
        <h3 id="installation">Installation</h3>
 | 
					        <h3 id="installation">Installation</h3>
 | 
				
			||||||
        <p>Either download the latest release from <a
 | 
					        <p>Either download the latest release from <a
 | 
				
			||||||
        href="https://git.sr.ht/~retropikzel/foreign-c/refs">releases
 | 
					        href="https://git.sr.ht/~retropikzel/foreign-c/refs">https://git.sr.ht/~retropikzel/foreign-c/refs</a>
 | 
				
			||||||
        page</a> or git clone , preferably with a tag, and copy the
 | 
					        or git clone , preferably with a tag, and copy the “foreign”
 | 
				
			||||||
        “foreign” directory to your library directory.</p>
 | 
					        directory to your library directory.</p>
 | 
				
			||||||
        <p>As an example assuming you have a project and your libraries
 | 
					        <p>As an example assuming you have a project and your libraries
 | 
				
			||||||
        live in directory called snow in it:</p>
 | 
					        live in directory called snow in it:</p>
 | 
				
			||||||
        <pre><code>git clone https://git.sr.ht/~retropikzel/foreign-c --branch LATEST_VERSION
 | 
					        <pre><code>git clone https://git.sr.ht/~retropikzel/foreign-c --branch LATEST_VERSION
 | 
				
			||||||
| 
						 | 
					@ -317,10 +324,56 @@ make -C snow/foreign/c <SCHEME_IMPLEMENTATION_NAME></code></pre>
 | 
				
			||||||
        <p>(<strong>c-type-size</strong> <em>type</em>)</p>
 | 
					        <p>(<strong>c-type-size</strong> <em>type</em>)</p>
 | 
				
			||||||
        <p>Returns the size of given C type.</p>
 | 
					        <p>Returns the size of given C type.</p>
 | 
				
			||||||
        <p>(<strong>define-c-library</strong> <em>scheme-name</em>
 | 
					        <p>(<strong>define-c-library</strong> <em>scheme-name</em>
 | 
				
			||||||
        <em>headers</em> <em>object-name</em> <em>options</em>)
 | 
					        <em>headers</em> <em>object-name</em> <em>options</em>)</p>
 | 
				
			||||||
        define-c-procedure define-c-callback c-bytevector?
 | 
					        <p>Takes a scheme-name to bind the library to, list of C headers
 | 
				
			||||||
        c-bytevector-u8-set! c-bytevector-u8-ref
 | 
					        as strings, shared-object name and options.</p>
 | 
				
			||||||
        c-bytevector-pointer-set! c-bytevector-pointer-ref</p>
 | 
					        <p>The C header strings should not contain “<” or “>”,
 | 
				
			||||||
 | 
					        they are added automatically.</p>
 | 
				
			||||||
 | 
					        <p>The name of the shared object should not contain suffix like
 | 
				
			||||||
 | 
					        .so or .dll. Nor should it contain any prefix like “lib”.</p>
 | 
				
			||||||
 | 
					        <p>The options are:</p>
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					        <li>additional-versions
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					        <li>Search for additional versions of shared object, given
 | 
				
			||||||
 | 
					        shared object “c” and additional versions “6” “7” on linux the
 | 
				
			||||||
 | 
					        files “libc”, “libc.6”, “libc.7” are searched for.</li>
 | 
				
			||||||
 | 
					        <li>Can be either numbers or strings</li>
 | 
				
			||||||
 | 
					        </ul></li>
 | 
				
			||||||
 | 
					        <li>additional-paths
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					        <li>Give additional paths to search shared objects from</li>
 | 
				
			||||||
 | 
					        </ul></li>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					        <p>Example:</p>
 | 
				
			||||||
 | 
					        <pre><code>(cond-expand
 | 
				
			||||||
 | 
					  (windows (define-c-library libc-stdlib
 | 
				
			||||||
 | 
					                                '("stdlib.h")
 | 
				
			||||||
 | 
					                                "ucrtbase"
 | 
				
			||||||
 | 
					                                '((additional-versions ("0" "6"))
 | 
				
			||||||
 | 
					                                  (additiona-paths (".")))))
 | 
				
			||||||
 | 
					  (else (define-c-library libc-stdlib
 | 
				
			||||||
 | 
					                             (list "stdlib.h")
 | 
				
			||||||
 | 
					                             "c"
 | 
				
			||||||
 | 
					                             '((additional-versions ("0" "6"))
 | 
				
			||||||
 | 
					                               (additiona-paths ("."))))))</code></pre>
 | 
				
			||||||
 | 
					        <h4 id="notes">Notes</h4>
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					        <li>Do not cond-expand inside the arguments, that might lead to
 | 
				
			||||||
 | 
					        problems on some implementations.</li>
 | 
				
			||||||
 | 
					        <li>Do not store options in variables, that might lead to
 | 
				
			||||||
 | 
					        problems on some implementations.</li>
 | 
				
			||||||
 | 
					        <li>Do pass the headers using quote
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					        <li>As ’(… and not (list…</li>
 | 
				
			||||||
 | 
					        </ul></li>
 | 
				
			||||||
 | 
					        <li>Do pass the options using quote
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					        <li>As ’(… and not (list… define-c-procedure define-c-callback
 | 
				
			||||||
 | 
					        c-bytevector? c-bytevector-u8-set! c-bytevector-u8-ref
 | 
				
			||||||
 | 
					        c-bytevector-pointer-set! c-bytevector-pointer-ref</li>
 | 
				
			||||||
 | 
					        </ul></li>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
        <h3 id="c-bytevector">c-bytevector</h3>
 | 
					        <h3 id="c-bytevector">c-bytevector</h3>
 | 
				
			||||||
        <p>make-c-bytevector make-c-null c-null? c-free
 | 
					        <p>make-c-bytevector make-c-null c-null? c-free
 | 
				
			||||||
        native-endianness c-bytevector-s8-set! c-bytevector-s8-ref
 | 
					        native-endianness c-bytevector-s8-set! c-bytevector-s8-ref
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue