24 #if !defined(_MSC_VER) && !defined(__MINGW32__)
25 #define USE_STRCASECMP 1
29 #define USE_STRCASECMP 0
31 #if defined(__MINGW32__)
35 #define SCHEME_EXPORT __declspec(dllexport)
37 #define SCHEME_EXPORT __declspec(dllimport)
44 #define USE_CHAR_CLASSIFIERS 0
45 #define USE_ASCII_NAMES 0
46 #define USE_STRING_PORTS 0
47 #define USE_ERROR_HOOK 0
49 #define USE_COLON_HOOK 0
58 #define USE_SCHEME_STACK
61 #define USE_INTERFACE 1
68 #ifndef USE_CHAR_CLASSIFIERS
69 #define USE_CHAR_CLASSIFIERS 1
72 #ifndef USE_ASCII_NAMES
73 #define USE_ASCII_NAMES 1
76 #ifndef USE_STRING_PORTS
77 #define USE_STRING_PORTS 1
89 #ifndef USE_ERROR_HOOK
90 #define USE_ERROR_HOOK 1
93 #ifndef USE_COLON_HOOK
94 #define USE_COLON_HOOK 1
97 #ifndef USE_STRCASECMP
98 #define USE_STRCASECMP 0
105 #ifndef STDIO_ADDS_CR
106 #define STDIO_ADDS_CR 0
113 #ifndef USE_INTERFACE
114 #define USE_INTERFACE 0
117 typedef struct scheme scheme;
118 typedef struct cell* pointer;
120 typedef void* (*func_alloc)(size_t);
121 typedef void (*func_dealloc)(
void*);
133 SCHEME_EXPORT scheme* scheme_init_new();
134 SCHEME_EXPORT scheme* scheme_init_new_custom_alloc(func_alloc malloc, func_dealloc free);
135 SCHEME_EXPORT
int scheme_init(scheme* sc);
136 SCHEME_EXPORT
int scheme_init_custom_alloc(scheme* sc, func_alloc, func_dealloc);
137 SCHEME_EXPORT
void scheme_deinit(scheme* sc);
138 void scheme_set_input_port_file(scheme* sc, FILE* fin);
139 void scheme_set_input_port_string(scheme* sc,
char* start,
char* past_the_end);
140 SCHEME_EXPORT
void scheme_set_output_port_file(scheme* sc, FILE* fin);
141 void scheme_set_output_port_string(scheme* sc,
char* start,
char* past_the_end);
142 SCHEME_EXPORT
void scheme_load_file(scheme* sc, FILE* fin);
143 SCHEME_EXPORT
void scheme_load_string(scheme* sc,
const char* cmd);
144 void scheme_apply0(scheme* sc,
const char* procname);
145 SCHEME_EXPORT pointer scheme_apply1(scheme* sc,
const char* procname, pointer);
146 void scheme_set_external_data(scheme* sc,
void* p);
147 SCHEME_EXPORT
void scheme_define(scheme* sc, pointer env, pointer symbol, pointer value);
149 typedef pointer (*foreign_func)(scheme*, pointer);
151 pointer _cons(scheme* sc, pointer a, pointer b,
int immutable);
152 pointer mk_integer(scheme* sc,
long num);
153 pointer mk_real(scheme* sc,
double num);
154 pointer mk_symbol(scheme* sc,
const char* name);
155 pointer gensym(scheme* sc);
156 pointer mk_string(scheme* sc,
const char* str);
157 pointer mk_counted_string(scheme* sc,
const char* str,
int len);
158 pointer mk_character(scheme* sc,
int c);
159 pointer mk_foreign_func(scheme* sc, foreign_func f);
160 void putstr(scheme* sc,
const char* s);
163 struct scheme_interface {
164 void (*scheme_define)(scheme* sc, pointer env, pointer symbol, pointer value);
165 pointer (*cons)(scheme* sc, pointer a, pointer b);
166 pointer (*immutable_cons)(scheme* sc, pointer a, pointer b);
167 pointer (*mk_integer)(scheme* sc,
long num);
168 pointer (*mk_real)(scheme* sc,
double num);
169 pointer (*mk_symbol)(scheme* sc,
const char* name);
170 pointer (*gensym)(scheme* sc);
171 pointer (*mk_string)(scheme* sc,
const char* str);
172 pointer (*mk_counted_string)(scheme* sc,
const char* str,
int len);
173 pointer (*mk_character)(scheme* sc,
int c);
174 pointer (*mk_vector)(scheme* sc,
int len);
175 pointer (*mk_foreign_func)(scheme* sc, foreign_func f);
176 void (*putstr)(scheme* sc,
const char* s);
177 void (*putcharacter)(scheme* sc,
int c);
179 int (*is_string)(pointer p);
180 char* (*string_value)(pointer p);
181 int (*is_number)(pointer p);
182 num (*nvalue)(pointer p);
183 long (*ivalue)(pointer p);
184 double (*rvalue)(pointer p);
185 int (*is_integer)(pointer p);
186 int (*is_real)(pointer p);
187 int (*is_character)(pointer p);
188 long (*charvalue)(pointer p);
189 int (*is_vector)(pointer p);
190 long (*vector_length)(pointer vec);
191 void (*fill_vector)(pointer vec, pointer elem);
192 pointer (*vector_elem)(pointer vec,
int ielem);
193 pointer (*set_vector_elem)(pointer vec,
int ielem, pointer newel);
194 int (*is_port)(pointer p);
196 int (*is_pair)(pointer p);
197 pointer (*pair_car)(pointer p);
198 pointer (*pair_cdr)(pointer p);
199 pointer (*set_car)(pointer p, pointer q);
200 pointer (*set_cdr)(pointer p, pointer q);
202 int (*is_symbol)(pointer p);
203 char* (*symname)(pointer p);
205 int (*is_syntax)(pointer p);
206 int (*is_proc)(pointer p);
207 int (*is_foreign)(pointer p);
208 char* (*syntaxname)(pointer p);
209 int (*is_closure)(pointer p);
210 int (*is_macro)(pointer p);
211 pointer (*closure_code)(pointer p);
212 pointer (*closure_env)(pointer p);
214 int (*is_continuation)(pointer p);
215 int (*is_promise)(pointer p);
216 int (*is_environment)(pointer p);
217 int (*is_immutable)(pointer p);
218 void (*setimmutable)(pointer p);
219 void (*load_file)(scheme* sc, FILE* fin);
220 void (*load_string)(scheme* sc,
const char* input);