Add jenkins link to readme

This commit is contained in:
retropikzel 2025-06-08 08:50:47 +03:00
parent 089bc7641e
commit b776994b36
3 changed files with 41 additions and 36 deletions

View File

@ -13,6 +13,8 @@ to being portable by conforming to some specification.
[Maling lists](https://sr.ht/~retropikzel/foreign-c/lists) [Maling lists](https://sr.ht/~retropikzel/foreign-c/lists)
[Jenkins](https://jenkins.scheme.org/job/foreign_c/job/foreign-c/)
- [Installation](#installation) - [Installation](#installation)
- [Documentation](#documentation) - [Documentation](#documentation)
- [Types](#types) - [Types](#types)
@ -295,21 +297,21 @@ Example:
(define-c-procedure qsort libc-stdlib 'qsort 'void '(pointer int int callback)) (define-c-procedure qsort libc-stdlib 'qsort 'void '(pointer int int callback))
; Define our callback ; Define our callback
(pffi-define-callback compare (define-c-callback compare
'int 'int
'(pointer pointer) '(pointer pointer)
(lambda (pointer-a pointer-b) (lambda (pointer-a pointer-b)
(let ((a (pffi-pointer-get pointer-a 'int 0)) (let ((a (c-bytevector-sint-get pointer-a (native-endianness) 0))
(b (pffi-pointer-get pointer-b 'int 0))) (b (c-bytevector-sint-get pointer-b (native-endianness) 0)))
(cond ((> a b) 1) (cond ((> a b) 1)
((= a b) 0) ((= a b) 0)
((< a b) -1))))) ((< a b) -1)))))
; Create new array of ints to be sorted ; Create new array of ints to be sorted
(define array (make-c-bytevector (* (c-type-size 'int) 3))) (define array (make-c-bytevector (* (c-type-size 'int) 3)))
(pffi-pointer-set! array 'int (* (c-type-size 'int) 0) 3) (c-bytevector-s32-native-set! array (* (c-type-size 'int) 0) 3)
(pffi-pointer-set! array 'int (* (c-type-size 'int) 1) 2) (c-bytevector-s32-native-set! array (* (c-type-size 'int) 1) 2)
(pffi-pointer-set! array 'int (* (c-type-size 'int) 2) 1) (c-bytevector-s32-native-set! array (* (c-type-size 'int) 2) 1)
(display array) (display array)
(newline) (newline)
@ -564,10 +566,11 @@ encoded by the given c-bytevector.
Setting environment variables like this on Windows works for this library: Setting environment variables like this on Windows works for this library:
set "PFFI_LOAD_PATH=C:\Program Files (x86)/foo/bar" set "FOREIGN_C_LOAD_PATH=C:\Program Files (x86)/foo/bar"
#### PFFI\_LOAD\_PATH #### FOREIGN_C_\_LOAD\_PATH
To add more paths to where pffi looks for libraries set PFFI\_LOAD\_PATH to To add more paths to where foreign c looks for libraries set
paths separated by ; on windows, and : on other operating systems. FOREIGN_C\_LOAD\_PATH to paths separated by ; on windows, and : on other
operating systems.

View File

@ -112,7 +112,7 @@ Schemes - 0.10.0</title>
<thead> <thead>
<tr class="header"> <tr class="header">
<th></th> <th></th>
<th style="text-align: center;">c-size-of</th> <th style="text-align: center;">c-type-size</th>
<th style="text-align: center;">c-bytevector-u8-set!</th> <th style="text-align: center;">c-bytevector-u8-set!</th>
<th style="text-align: center;">c-bytevector-u8-ref</th> <th style="text-align: center;">c-bytevector-u8-ref</th>
<th style="text-align: center;">define-c-library</th> <th style="text-align: center;">define-c-library</th>
@ -338,9 +338,9 @@ Schemes - 0.10.0</title>
</tbody> </tbody>
</table> </table>
<h2 id="installation">Installation</h2> <h2 id="installation">Installation</h2>
<p>Either download the latest release from <a <p>Eithe download the latest release from <a
href="https://git.sr.ht/~retropikzel/foreign-c/refs">https://git.sr.ht/~retropikzel/foreign-c/refs</a> href="https://git.sr.ht/~retropikzel/foreign-c/refs">https://git.sr.ht/~retropikzel/foreign-c/refs</a>
or git clone , preferably with a tag, and copy the or git clone, preferably with a tag, and copy the
<em>foreign</em> directory to your library directory.</p> <em>foreign</em> directory to your library directory.</p>
<p>Example assuming libraries in directory <em>snow</em>:</p> <p>Example assuming libraries in directory <em>snow</em>:</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
@ -503,36 +503,36 @@ make -C snow/foreign/c SCHEME_IMPLEMENTATION_NAME</code></pre>
(define-c-procedure qsort libc-stdlib &#39;qsort &#39;void &#39;(pointer int int callback)) (define-c-procedure qsort libc-stdlib &#39;qsort &#39;void &#39;(pointer int int callback))
; Define our callback ; Define our callback
(pffi-define-callback compare (define-c-callback compare
&#39;int &#39;int
&#39;(pointer pointer) &#39;(pointer pointer)
(lambda (pointer-a pointer-b) (lambda (pointer-a pointer-b)
(let ((a (pffi-pointer-get pointer-a &#39;int 0)) (let ((a (c-bytevector-sint-get pointer-a (native-endianness) 0))
(b (pffi-pointer-get pointer-b &#39;int 0))) (b (c-bytevector-sint-get pointer-b (native-endianness) 0)))
(cond ((&gt; a b) 1) (cond ((&gt; a b) 1)
((= a b) 0) ((= a b) 0)
((&lt; a b) -1))))) ((&lt; a b) -1)))))
; Create new array of ints to be sorted ; Create new array of ints to be sorted
(define array (make-c-bytevector (* (c-size-of &#39;int) 3))) (define array (make-c-bytevector (* (c-type-size &#39;int) 3)))
(pffi-pointer-set! array &#39;int (* (c-size-of &#39;int) 0) 3) (c-bytevector-s32-native-set! array (* (c-type-size &#39;int) 0) 3)
(pffi-pointer-set! array &#39;int (* (c-size-of &#39;int) 1) 2) (c-bytevector-s32-native-set! array (* (c-type-size &#39;int) 1) 2)
(pffi-pointer-set! array &#39;int (* (c-size-of &#39;int) 2) 1) (c-bytevector-s32-native-set! array (* (c-type-size &#39;int) 2) 1)
(display array) (display array)
(newline) (newline)
;&gt; (3 2 1) ;&gt; (3 2 1)
; Sort the array ; Sort the array
(qsort array 3 (c-size-of &#39;int) compare) (qsort array 3 (c-type-size &#39;int) compare)
(display array) (display array)
(newline) (newline)
;&gt; (1 2 3)</code></pre> ;&gt; (1 2 3)</code></pre>
<h3 id="c-bytevector">c-bytevector</h3> <h3 id="c-bytevector">c-bytevector</h3>
<p>Foreign-c c-bytevector interface is copied from R6RS <p>Foreign-c c-bytevector interface is copied from R6RS
bytevectors, with some added functionality for C null bytevectors, with some added functionality for C null pointers
pointers.</p> and manual memory management.</p>
<p>(<strong>make-c-null</strong>)</p> <p>(<strong>make-c-null</strong>)</p>
<p>Returns a null C pointer.</p> <p>Returns a null C pointer.</p>
<p>(<strong>c-null?</strong> <em>obj</em>)</p> <p>(<strong>c-null?</strong> <em>obj</em>)</p>
@ -545,8 +545,8 @@ make -C snow/foreign/c SCHEME_IMPLEMENTATION_NAME</code></pre>
<p>Calls <em>thunk</em> with address pointer of <p>Calls <em>thunk</em> with address pointer of
<em>c-bytevector</em>.</p> <em>c-bytevector</em>.</p>
<p>Since the support for calling C functions taking pointer <p>Since the support for calling C functions taking pointer
address arguments, the ones you would prefix with &amp;, varies, address arguments, ones prefixrd with &amp; in C, varies, some
some additional ceremony is needed on the Scheme side.</p> additional ceremony is needed on the Scheme side.</p>
<p>Example:</p> <p>Example:</p>
<p>Calling from C:</p> <p>Calling from C:</p>
<pre><code>//void func(int** i); <pre><code>//void func(int** i);
@ -585,14 +585,16 @@ func(&amp;i);</code></pre>
the bytes of the c-bytevector</p> the bytes of the c-bytevector</p>
<p>(<strong>c-bytevector-s8-set!</strong> <em>c-bytevector</em> <p>(<strong>c-bytevector-s8-set!</strong> <em>c-bytevector</em>
<em>k</em> <em>byte</em>)</p> <em>k</em> <em>byte</em>)</p>
<p>If K is not a valid index of c-bytevector the behaviour is <p>If <em>k</em> is not a valid index of c-bytevector the
undefined.</p> behaviour is undefined.</p>
<p>Stores the byte in element k of c-bytevector.</p> <p>Stores the <em>byte</em> in element <em>k</em> of
<em>c-bytevector</em>.</p>
<p>(<strong>c-bytevector-s8-ref</strong> <em>c-bytevector</em> <p>(<strong>c-bytevector-s8-ref</strong> <em>c-bytevector</em>
<em>k</em> <em>byte</em>)</p> <em>k</em>)</p>
<p>If K is not a valid index of c-bytevector the behaviour is <p>If <em>k</em> is not a valid index of c-bytevector the
undefined.</p> behaviour is undefined.</p>
<p>Returns the byte at index k of c-bytevector.</p> <p>Returns the byte at index <em>k</em> of
<em>c-bytevector</em>.</p>
<p>(<strong>c-bytevector-uint-ref</strong> <em>c-bytevector</em> <p>(<strong>c-bytevector-uint-ref</strong> <em>c-bytevector</em>
<em>k</em> <em>endianness</em> <em>size</em>)</br> <em>k</em> <em>endianness</em> <em>size</em>)</br>
(<strong>c-bytevector-sint-ref</strong> <em>c-bytevector</em> (<strong>c-bytevector-sint-ref</strong> <em>c-bytevector</em>
@ -763,10 +765,10 @@ func(&amp;i);</code></pre>
<h3 id="environment-variables">Environment variables</h3> <h3 id="environment-variables">Environment variables</h3>
<p>Setting environment variables like this on Windows works for <p>Setting environment variables like this on Windows works for
this library:</p> this library:</p>
<pre><code>set &quot;PFFI_LOAD_PATH=C:\Program Files (x86)/foo/bar&quot;</code></pre> <pre><code>set &quot;FOREIGN_C_LOAD_PATH=C:\Program Files (x86)/foo/bar&quot;</code></pre>
<h4 id="pffi_load_path">PFFI_LOAD_PATH</h4> <h4 id="foreign_c__load_path">FOREIGN_C__LOAD_PATH</h4>
<p>To add more paths to where pffi looks for libraries set <p>To add more paths to where foreign c looks for libraries set
PFFI_LOAD_PATH to paths separated by ; on windows, and : on FOREIGN_C_LOAD_PATH to paths separated by ; on windows, and : on
other operating systems.</p> other operating systems.</p>
</body> </body>
</html> </html>

Binary file not shown.