1. scheme2c-compatibility
    1. Lists
    2. Strings
    3. System
    4. File IO
    5. Paths
    6. X11
    7. Temporary files
    8. Bitwise operations
    9. FFI compatibility
      1. Sizeof
      2. Memory accesss
      3. Arrays
      4. Scroped
      5. misc
    10. misc
    11. TODO
    12. License

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.