chickadee » scheme2c-compatibility

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

(eleventh x) procedure
(twelfth x) procedure

Strings

(lines string) procedure

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

(unlines l) procedure

Split a string into a list of lines.

(words string) procedure

Split a string into words.

(unwords l) procedure

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

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

System

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

File IO

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

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

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

Read/write a text file.

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

Paths

(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) procedure

X11

(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 procedure

Temporary files

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

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

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

FFI compatibility

Sizeof
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 procedure
Memory accesss
(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) procedure

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

Arrays
(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?) procedure

Various functions to convert to and from C arrays.

(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?) procedure

Return functions which access arrays with elements of given sizes.

Scroped
(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) procedure

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

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

Round/floor/ceiling and inexact->exact.

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

misc

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

(read) from a string.

flush-buffer procedure

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.

Contents »