abarbu / scheme2c-compatibility

Chicken egg that makes it more compatible with Scheme->C
3 stars 3 forks source link

== 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) : (twelfth x)

==== Strings ====

: (lines string)

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

: (unlines l)

Split a string into a list of lines.

: (words string)

Split a string into words.

: (unwords l)

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

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

==== System ====

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

==== File IO ====

: (read-object-from-file pathname) : (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''.

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

Read/write a text file.

: (fclose handle) : (fopen filename mode) : (fmemopen buffer size mode)

: popen : pclose

==== Paths ====

: (strip-directory pathname) : (has-extension? pathname) : (extension pathname) : (strip-extension pathname) : (default-extension pathname extension) : (replace-extension pathname extension) : (has-directory? pathname) : (get-directory pathname)

==== X11 ====

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

==== Temporary files ====

: tmp : (tmp pathname) : (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 ====

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

==== FFI compatibility ====

===== Sizeof =====

: c-sizeof-short : c-sizeof-int : c-sizeof-long : c-sizeof-float : c-sizeof-double : c-sizeof-tscp : c-sizeof-s2cuint : c-sizeof-pointer

===== Memory accesss =====

: (c-byte-ref ptr off) : (c-byte-set! ptr off val) : (c-double-ref ptr off) : (c-double-set! ptr off val) : (c-float-ref ptr off) : (c-float-set! ptr off val) : (c-int-ref ptr off) : (c-int-set! ptr off val) : (c-longint-ref ptr off) : (c-longint-set! ptr off val) : (c-longunsigned-ref ptr off) : (c-longunsigned-set! ptr off val) : (c-s2cuint-ref ptr off) : (c-s2cuint-set! ptr off val) : (c-shortint-ref ptr off) : (c-shortint-set! ptr off val) : (c-shortunsigned-ref ptr off) : (c-shortunsigned-set! ptr off val) : (c-unsigned-ref ptr off) : (c-unsigned-set! ptr off val) : (pointer-pointer-ref ptr-to-ptr) : (pointer-pointer-set! ptr-to-ptr val) : (c-string->string buf) : (c-null-separated-strings->strings c-strings)

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) : (c-array->vector array get-element element-size nr-elements) : (c-exact-array->list array element-size nr-elements signed?) : (c-exact-array->vector array element-size nr-elements signed?) : (c-inexact-array->list array element-size nr-elements signed?) : (c-inexact-array->vector array element-size nr-elements signed?) : (list->c-array array l set-element element-size) : (list->c-exact-array array l element-size signed?) : (list->c-inexact-array array l element-size signed?) : (vector->c-array array v set-element element-size) : (vector->c-exact-array array v element-size signed?) : (vector->c-inexact-array array v element-size signed?)

Various functions to convert to and from C arrays.

: (c-sized-int-ptr-ref size signed?) : (c-sized-int-ptr-set! size signed?) : (c-sized-inexact-ptr-ref size signed?) : (c-sized-inexact-ptr-set! size signed?)

Return functions which access arrays with elements of given sizes.

===== Scroped =====

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

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

===== misc =====

: (exact-round x) : (exact-ceiling x) : (exact-floor x)

Round/floor/ceiling and ''inexact->exact''.

: c-value : c-sizeof : c-function

: malloc : memcpy : bzero

: (unsigned-list->unsigneda l)

==== misc ====

: (fuck-up) : (panic format-string . &rest) : (xor a b) : panic? : program

: (read-from-string string)

''(read)'' from a string.

: 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. NOTOC