You are looking at historical revision 29459 of this page. It may differ significantly from its current revision.

This page is maintained in the package's github repository.

scheme2c-compatibility

This implements miscellaneous functions and macros that make Chicken more compatible with Scheme->C. Some of this comes from from Jeff Siskind's QobiScheme. Much of this functionality is redundant with that offered by other Chicken eggs but is offered with a Scheme->C-compatible API and naming scheme.

Lists

[procedure] (eleventh x)
[procedure] (twelfth x)

Strings

[procedure] (lines string)

Combine a list of lines into a string separated by newlines.

[procedure] (unlines l)

Split a string into a list of lines.

[procedure] (words string)

Split a string into words.

[procedure] (unwords l)

Combine a list of words into a string separated by spaces.

[procedure] (number-of-fields string)
[procedure] (field-ref string n)
[procedure] (fields string)

System

[procedure] (usleep microseconds)
[procedure] (directory-list d)

File IO

[procedure] (read-object-from-file pathname)
[procedure] (write-object-to-file object pathname)

Read/write a single scheme object to/from a file. This is not the same as chicken's read-file.

[procedure] (read-text-file pathname)
[procedure] (write-text-file lines pathname)

Read/write a text file.

[procedure] (fclose handle)
[procedure] (fopen filename mode)
[procedure] (fmemopen buffer size mode)
[procedure] popen
[procedure] pclose

Paths

[procedure] (strip-directory pathname)
[procedure] (has-extension? pathname)
[procedure] (extension pathname)
[procedure] (strip-extension pathname)
[procedure] (default-extension pathname extension)
[procedure] (replace-extension pathname extension)
[procedure] (has-directory? pathname)
[procedure] (get-directory pathname)

X11

[procedure] (c-docolordither pic24 w h rdisp gdisp bdisp idisp maplen)
[procedure] (ylookupstring event . opt)
[procedure] (xallocnamedcolor3 dpy cmap colorname)
[procedure] (xquerypointer2 dpy w)
[procedure] getenv

Temporary files

[parameter] *tmp*
[procedure] (tmp pathname)
[procedure] (with-temporary-file prefix f)

Call f with a unique filename that will be removed once f returns. The extension of prefix is honored, but not its base filename.

Bitwise operations

[procedure] (bit-not n)
[procedure] (bit-and n)
[procedure] (bit-or n)
[procedure] (bit-lsh n offset)
[procedure] (bit-rsh n offset)

FFI compatibility

Sizeof
[procedure] c-sizeof-short
[procedure] c-sizeof-int
[procedure] c-sizeof-long
[procedure] c-sizeof-float
[procedure] c-sizeof-double
[procedure] c-sizeof-tscp
[procedure] c-sizeof-s2cuint
[procedure] c-sizeof-pointer
Memory accesss
[procedure] (c-byte-ref ptr off)
[procedure] (c-byte-set! ptr off val)
[procedure] (c-double-ref ptr off)
[procedure] (c-double-set! ptr off val)
[procedure] (c-float-ref ptr off)
[procedure] (c-float-set! ptr off val)
[procedure] (c-int-ref ptr off)
[procedure] (c-int-set! ptr off val)
[procedure] (c-longint-ref ptr off)
[procedure] (c-longint-set! ptr off val)
[procedure] (c-longunsigned-ref ptr off)
[procedure] (c-longunsigned-set! ptr off val)
[procedure] (c-s2cuint-ref ptr off)
[procedure] (c-s2cuint-set! ptr off val)
[procedure] (c-shortint-ref ptr off)
[procedure] (c-shortint-set! ptr off val)
[procedure] (c-shortunsigned-ref ptr off)
[procedure] (c-shortunsigned-set! ptr off val)
[procedure] (c-unsigned-ref ptr off)
[procedure] (c-unsigned-set! ptr off val)
[procedure] (pointer-pointer-ref ptr-to-ptr)
[procedure] (pointer-pointer-set! ptr-to-ptr val)
[procedure] (c-string->string buf)
[procedure] (c-null-separated-strings->strings c-strings)

Access buffers containg various standard types. s2cuint is the same size as a pointer.

Arrays
[procedure] (c-array->list array get-element element-size nr-elements)
[procedure] (c-array->vector array get-element element-size nr-elements)
[procedure] (c-exact-array->list array element-size nr-elements signed?)
[procedure] (c-exact-array->vector array element-size nr-elements signed?)
[procedure] (c-inexact-array->list array element-size nr-elements signed?)
[procedure] (c-inexact-array->vector array element-size nr-elements signed?)
[procedure] (list->c-array array l set-element element-size)
[procedure] (list->c-exact-array array l element-size signed?)
[procedure] (list->c-inexact-array array l element-size signed?)
[procedure] (vector->c-array array v set-element element-size)
[procedure] (vector->c-exact-array array v element-size signed?)
[procedure] (vector->c-inexact-array array v element-size signed?)

Various functions to convert to and from C arrays.

[procedure] (c-sized-int-ptr-ref size signed?)
[procedure] (c-sized-int-ptr-set! size signed?)
[procedure] (c-sized-inexact-ptr-ref size signed?)
[procedure] (c-sized-inexact-ptr-set! size signed?)

Return functions which access arrays with elements of given sizes.

Scroped
[procedure] (with-alloc x f)
[procedure] (with-buffer-stream f buffer size mode)
[procedure] (with-c-string str f)
[procedure] (with-file-stream f filename mode)
[procedure] (with-array elements element-size f)
[procedure] (with-c-pointers f v)
[procedure] (with-vector->c-array f set-element element-size v)

Perform many of the operations above automatically cleaning up once the procedure returns.

misc
[procedure] (exact-round x)
[procedure] (exact-ceiling x)
[procedure] (exact-floor x)

Round/floor/ceiling and inexact->exact.

[syntax] c-value
[syntax] c-sizeof
[syntax] c-function
[procedure] malloc
[procedure] memcpy
[procedure] bzero
[procedure] (unsigned-list->unsigneda l)

misc

[procedure] (fuck-up)
[procedure] (panic format-string . &rest)
[procedure] (xor a b)
[parameter] *panic?*
[parameter] *program*
[procedure] (read-from-string string)

(read) from a string.

[procedure] flush-buffer

flush-output

TODO

with-temporary-file is wrong! It ignores the prefix and more importantly its extension and will lead to breakage.

License

  Copyright 1993-1995 University of Toronto. All rights reserved.
  Copyright 1996 Technion. All rights reserved.
  Copyright 1996 and 1997 University of Vermont. All rights reserved.
  Copyright 1997-2001 NEC Research Institute, Inc. All rights reserved.
  Copyright 2002-2012 Purdue University. All rights reserved.
  Contact Andrei Barbu, andrei@0xab.com.
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU Lesser General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Lesser General Public License for more details.
  You should have received a copy of the GNU Lesser General Public License
  along with this program.  If not, see http://www.gnu.org/licenses.