The C header file scheme48.h
provides
access to Scheme 48 data structures.
The type s48_value
is used for Scheme values.
When the type of a value is known, such as the integer returned
by vector-length
or the boolean returned by pair?
,
the corresponding C procedure returns a C value of the appropriate
type, and not a s48_value
.
Predicates return 1
for true and 0
for false.
The following macros denote Scheme constants:
S48_FALSE
is #f
.
S48_TRUE
is #t
.
S48_NULL
is the empty list.
S48_UNSPECIFIC
is a value used for functions which have no
meaningful return value
(in Scheme 48 this value returned by the nullary procedure unspecific
in the structure util
).
S48_EOF
is the end-of-file object
(in Scheme 48 this value is returned by the nullary procedure eof-object
in the structure i/o-internal
).
The following macros and functions convert values between Scheme and C representations. The `extract' ones convert from Scheme to C and the `enter's go the other way.
int S48_EXTRACT_BOOLEAN(s48_value)
unsigned char s48_extract_char(s48_value)
char * s48_extract_string(s48_value)
char * s48_extract_byte_vector(s48_value)
long s48_extract_integer(s48_value)
double s48_extract_double(s48_value)
s48_value S48_ENTER_BOOLEAN(int)
s48_value s48_enter_char(unsigned char)
s48_value s48_enter_string(char *) | (may GC) |
s48_value s48_enter_byte_vector(char *, long) | (may GC) |
s48_value s48_enter_integer(long) | (may GC) |
s48_value s48_enter_double(double) | (may GC) |
S48_EXTRACT_BOOLEAN
is false if its argument is
#f
and true otherwise.
S48_ENTER_BOOLEAN
is #f
if its argument is zero
and #t
otherwise.
s48_extract_string
and s48_extract_byte_vector
return
pointers to the actual
storage used by the string or byte vector.
These pointers are valid only until the next
garbage collection.
The second argument to s48_enter_byte_vector
is the length of
byte vector.
s48_enter_integer()
needs to allocate storage when
its argument is too large to fit in a Scheme 48 fixnum.
In cases where the number is known to fit within a fixnum (currently 30 bits
including the sign), the following procedures can be used.
These have the disadvantage of only having a limited range, but
the advantage of never causing a garbage collection.
S48_FIXNUM_P
is a macro that true if its argument is a fixnum
and false otherwise.
int S48_TRUE_P(s48_value)
int S48_FALSE_P(s48_value)
S48_TRUE_P
is true if its argument is S48_TRUE
and S48_FALSE_P
is true if its argument is S48_FALSE
.
int S48_FIXNUM_P(s48_value)
long s48_extract_fixnum(s48_value)
s48_value s48_enter_fixnum(long)
long S48_MAX_FIXNUM_VALUE
long S48_MIN_FIXNUM_VALUE
An error is signalled if s48_extract_fixnum
's argument
is not a fixnum or if the argument to s48_enter_fixnum
is less than
S48_MIN_FIXNUM_VALUE
or greater than S48_MAX_FIXNUM_VALUE
(-229 and 229-1 in the current system).
The following macros and procedures are C versions of Scheme procedures.
The names were derived by replacing `-
' with `_
',
`?
' with `_P
', and dropping `!
.
int S48_EQ_P(s48_value, s48_VALUE)
int S48_CHAR_P(s48_value)
int S48_PAIR_P(s48_value)
s48_value S48_CAR(s48_value)
s48_value S48_CDR(s48_value)
void S48_SET_CAR(s48_value, s48_value)
void S48_SET_CDR(s48_value, s48_value)
s48_value s48_cons(s48_value, s48_value) | (may GC) |
long s48_length(s48_value)
int S48_VECTOR_P(s48_value)
long S48_VECTOR_LENGTH(s48_value)
s48_value S48_VECTOR_REF(s48_value, long)
void S48_VECTOR_SET(s48_value, long, s48_value)
s48_value s48_make_vector(long, s48_value) | (may GC) |
int S48_STRING_P(s48_value)
long S48_STRING_LENGTH(s48_value)
char S48_STRING_REF(s48_value, long)
void S48_STRING_SET(s48_value, long, char)
s48_value s48_make_string(long, char) | (may GC) |
int S48_SYMBOL_P(s48_value)
s48_value s48_SYMBOL_TO_STRING(s48_value)
int S48_BYTE_VECTOR_P(s48_value)
long S48_BYTE_VECTOR_LENGTH(s48_value)
char S48_BYTE_VECTOR_REF(s48_value, long)
void S48_BYTE_VECTOR_SET(s48_value, long, int)
s48_value s48_make_byte_vector(long, int) | (may GC) |
Previous: Accessing Scheme data from C | Next: Accessing Scheme data from C