-
+ FF0B30C650A38189BE4BB174A60143D1EA61061BC56838B49CBE63190CA0FCC15409E7CE7540B2A433EDE6BB1DFE97BAA901FDEA86D480224A36B69519E94171
bitcoin/src/shiva/scheme.h
(0 . 0)(1 . 253)
7261 /* SCHEME.H */
7262
7263 #ifndef _SCHEME_H
7264 #define _SCHEME_H
7265
7266 #include "scheme-knobs.h"
7267
7268 #define PACKAGE_VERSION "TRB"
7269
7270 #include <stdio.h>
7271
7272 #ifdef __cplusplus
7273 extern "C" {
7274 #endif
7275
7276 /*
7277 * Default values for #define'd symbols
7278 */
7279 #ifndef STANDALONE /* If used as standalone interpreter */
7280 # define STANDALONE 1
7281 #endif
7282
7283 #ifndef _MSC_VER
7284 # define USE_STRCASECMP 1
7285 # ifndef USE_STRLWR
7286 # define USE_STRLWR 1
7287 # endif
7288 # define SCHEME_EXPORT
7289 #else
7290 # define USE_STRCASECMP 0
7291 # define USE_STRLWR 0
7292 # ifdef _SCHEME_SOURCE
7293 # define SCHEME_EXPORT __declspec(dllexport)
7294 # else
7295 # define SCHEME_EXPORT __declspec(dllimport)
7296 # endif
7297 #endif
7298
7299 #if USE_NO_FEATURES
7300 # define USE_MATH 0
7301 # define USE_CHAR_CLASSIFIERS 0
7302 # define USE_ASCII_NAMES 0
7303 # define USE_STRING_PORTS 0
7304 # define USE_ERROR_HOOK 0
7305 # define USE_TRACING 0
7306 # define USE_COLON_HOOK 0
7307 # define USE_PLIST 0
7308 #endif
7309
7310 /*
7311 * Leave it defined if you want continuations, and also for the Sharp Zaurus.
7312 * Undefine it if you only care about faster speed and not strict Scheme compatibility.
7313 */
7314 #define USE_SCHEME_STACK
7315
7316 #ifndef USE_MATH /* If math support is needed */
7317 # define USE_MATH 1
7318 #endif
7319
7320 #ifndef USE_CHAR_CLASSIFIERS /* If char classifiers are needed */
7321 # define USE_CHAR_CLASSIFIERS 1
7322 #endif
7323
7324 #ifndef USE_ASCII_NAMES /* If extended escaped characters are needed */
7325 # define USE_ASCII_NAMES 1
7326 #endif
7327
7328 #ifndef USE_STRING_PORTS /* Enable string ports */
7329 # define USE_STRING_PORTS 1
7330 #endif
7331
7332 #ifndef USE_TRACING
7333 # define USE_TRACING 1
7334 #endif
7335
7336 #ifndef USE_PLIST
7337 # define USE_PLIST 0
7338 #endif
7339
7340 /* To force system errors through user-defined error handling (see *error-hook*) */
7341 #ifndef USE_ERROR_HOOK
7342 # define USE_ERROR_HOOK 1
7343 #endif
7344
7345 #ifndef USE_COLON_HOOK /* Enable qualified qualifier */
7346 # define USE_COLON_HOOK 1
7347 #endif
7348
7349 #ifndef USE_STRCASECMP /* stricmp for Unix */
7350 # define USE_STRCASECMP 0
7351 #endif
7352
7353 #ifndef USE_STRLWR
7354 # define USE_STRLWR 1
7355 #endif
7356
7357 #ifndef STDIO_ADDS_CR /* Define if DOS/Windows */
7358 # define STDIO_ADDS_CR 0
7359 #endif
7360
7361 #ifndef INLINE
7362 # define INLINE
7363 #endif
7364
7365 #ifndef USE_INTERFACE
7366 # define USE_INTERFACE 0
7367 #endif
7368
7369 #ifndef SHOW_ERROR_LINE /* Show error line in file */
7370 # define SHOW_ERROR_LINE 1
7371 #endif
7372
7373 typedef struct scheme scheme;
7374 typedef struct cell *pointer;
7375
7376 typedef void * (*func_alloc)(size_t);
7377 typedef void (*func_dealloc)(void *);
7378
7379 /* num, for generic arithmetic */
7380 typedef struct num {
7381 char is_fixnum;
7382 union {
7383 long ivalue;
7384 double rvalue;
7385 } value;
7386 } num;
7387
7388 SCHEME_EXPORT scheme *scheme_init_new();
7389 SCHEME_EXPORT scheme *scheme_init_new_custom_alloc(func_alloc malloc, func_dealloc free);
7390 SCHEME_EXPORT int scheme_init(scheme *sc);
7391 SCHEME_EXPORT int scheme_init_custom_alloc(scheme *sc, func_alloc, func_dealloc);
7392 SCHEME_EXPORT void scheme_deinit(scheme *sc);
7393 void scheme_set_input_port_file(scheme *sc, FILE *fin);
7394 void scheme_set_input_port_string(scheme *sc, char *start, char *past_the_end);
7395 SCHEME_EXPORT void scheme_set_output_port_file(scheme *sc, FILE *fin);
7396 void scheme_set_output_port_string(scheme *sc, char *start, char *past_the_end);
7397 SCHEME_EXPORT void scheme_load_file(scheme *sc, FILE *fin);
7398 SCHEME_EXPORT void scheme_load_named_file(scheme *sc, FILE *fin, const char *filename);
7399 SCHEME_EXPORT void scheme_load_string(scheme *sc, const char *cmd);
7400 SCHEME_EXPORT pointer scheme_apply0(scheme *sc, const char *procname);
7401 SCHEME_EXPORT pointer scheme_call(scheme *sc, pointer func, pointer args);
7402 SCHEME_EXPORT pointer scheme_eval(scheme *sc, pointer obj);
7403 void scheme_set_external_data(scheme *sc, void *p);
7404 SCHEME_EXPORT void scheme_define(scheme *sc, pointer env, pointer symbol, pointer value);
7405
7406 typedef pointer (*foreign_func)(scheme *, pointer);
7407
7408 pointer _cons(scheme *sc, pointer a, pointer b, int immutable);
7409 pointer mk_integer(scheme *sc, long num);
7410 pointer mk_real(scheme *sc, double num);
7411 pointer mk_symbol(scheme *sc, const char *name);
7412 pointer gensym(scheme *sc);
7413 pointer mk_string(scheme *sc, const char *str);
7414 pointer mk_counted_string(scheme *sc, const char *str, int len);
7415 pointer mk_empty_string(scheme *sc, int len, char fill);
7416 pointer mk_character(scheme *sc, int c);
7417 pointer mk_foreign_func(scheme *sc, foreign_func f);
7418 void putstr(scheme *sc, const char *s);
7419 int list_length(scheme *sc, pointer a);
7420 int eqv(pointer a, pointer b);
7421
7422
7423 #if USE_INTERFACE
7424 struct scheme_interface {
7425 void (*scheme_define)(scheme *sc, pointer env, pointer symbol, pointer value);
7426 pointer (*cons)(scheme *sc, pointer a, pointer b);
7427 pointer (*immutable_cons)(scheme *sc, pointer a, pointer b);
7428 pointer (*reserve_cells)(scheme *sc, int n);
7429 pointer (*mk_integer)(scheme *sc, long num);
7430 pointer (*mk_real)(scheme *sc, double num);
7431 pointer (*mk_symbol)(scheme *sc, const char *name);
7432 pointer (*gensym)(scheme *sc);
7433 pointer (*mk_string)(scheme *sc, const char *str);
7434 pointer (*mk_counted_string)(scheme *sc, const char *str, int len);
7435 pointer (*mk_character)(scheme *sc, int c);
7436 pointer (*mk_vector)(scheme *sc, int len);
7437 pointer (*mk_foreign_func)(scheme *sc, foreign_func f);
7438 void (*putstr)(scheme *sc, const char *s);
7439 void (*putcharacter)(scheme *sc, int c);
7440
7441 int (*is_string)(pointer p);
7442 char *(*string_value)(pointer p);
7443 int (*is_number)(pointer p);
7444 num (*nvalue)(pointer p);
7445 long (*ivalue)(pointer p);
7446 double (*rvalue)(pointer p);
7447 int (*is_integer)(pointer p);
7448 int (*is_real)(pointer p);
7449 int (*is_character)(pointer p);
7450 long (*charvalue)(pointer p);
7451 int (*is_list)(scheme *sc, pointer p);
7452 int (*is_vector)(pointer p);
7453 int (*list_length)(scheme *sc, pointer vec);
7454 long (*vector_length)(pointer vec);
7455 void (*fill_vector)(pointer vec, pointer elem);
7456 pointer (*vector_elem)(pointer vec, int ielem);
7457 pointer (*set_vector_elem)(pointer vec, int ielem, pointer newel);
7458 int (*is_port)(pointer p);
7459
7460 int (*is_pair)(pointer p);
7461 pointer (*pair_car)(pointer p);
7462 pointer (*pair_cdr)(pointer p);
7463 pointer (*set_car)(pointer p, pointer q);
7464 pointer (*set_cdr)(pointer p, pointer q);
7465
7466 int (*is_symbol)(pointer p);
7467 char *(*symname)(pointer p);
7468
7469 int (*is_syntax)(pointer p);
7470 int (*is_proc)(pointer p);
7471 int (*is_foreign)(pointer p);
7472 char *(*syntaxname)(pointer p);
7473 int (*is_closure)(pointer p);
7474 int (*is_macro)(pointer p);
7475 pointer (*closure_code)(pointer p);
7476 pointer (*closure_env)(pointer p);
7477
7478 int (*is_continuation)(pointer p);
7479 int (*is_promise)(pointer p);
7480 int (*is_environment)(pointer p);
7481 int (*is_immutable)(pointer p);
7482 void (*setimmutable)(pointer p);
7483 void (*load_file)(scheme *sc, FILE *fin);
7484 void (*load_string)(scheme *sc, const char *input);
7485 };
7486 #endif
7487
7488 #if !STANDALONE
7489 typedef struct scheme_registerable
7490 {
7491 foreign_func f;
7492 const char * name;
7493 }
7494 scheme_registerable;
7495
7496 void scheme_register_foreign_func_list(scheme * sc,
7497 scheme_registerable * list,
7498 int n);
7499
7500 #endif /* !STANDALONE */
7501
7502 #ifdef __cplusplus
7503 }
7504 #endif
7505
7506 #endif
7507
7508
7509 /*
7510 Local variables:
7511 c-file-style: "k&r"
7512 End:
7513 */