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