scheme.h

Go to the documentation of this file.
00001 /* SCHEME.H */
00002 
00008 #ifndef _SCHEME_H
00009 #define _SCHEME_H
00010 
00011 #include <stdio.h>
00012 
00013 #ifdef HAVE_CONFIG_H
00014 #include <config.h>
00015 #endif
00016 
00017 /*
00018  * Default values for #define'd symbols
00019  */
00020 #ifndef STANDALONE       /* If used as standalone interpreter */
00021 # define STANDALONE 1
00022 #endif
00023 
00024 
00025 #if !defined(_MSC_VER) && !defined(__MINGW32__)
00026 # define USE_STRCASECMP 1 
00027 # define USE_STRLWR 1 
00028 # define SCHEME_EXPORT
00029 #else 
00030 # define USE_STRCASECMP 0 
00031 # define USE_STRLWR 0 
00032 # if defined(__MINGW32__)
00033 #  define SCHEME_EXPORT
00034 # else
00035 #  ifdef _SCHEME_SOURCE
00036 #   define SCHEME_EXPORT __declspec(dllexport)
00037 #  else
00038 #   define SCHEME_EXPORT __declspec(dllimport)
00039 #  endif
00040 # endif
00041 #endif
00042 
00043 
00044 
00045 #if USE_NO_FEATURES
00046 # define USE_MATH 0
00047 # define USE_CHAR_CLASSIFIERS 0
00048 # define USE_ASCII_NAMES 0
00049 # define USE_STRING_PORTS 0
00050 # define USE_ERROR_HOOK 0
00051 # define USE_TRACING 0
00052 # define USE_COLON_HOOK 0
00053 # define USE_DL 0
00054 # define USE_PLIST 0
00055 #endif
00056 
00057 /*
00058  * Leave it defined if you want continuations, and also for the Sharp Zaurus.
00059  * Undefine it if you only care about faster speed and not strict Scheme compatibility.
00060  */
00061 #define USE_SCHEME_STACK
00062 
00063 #if USE_DL
00064 # define USE_INTERFACE 1
00065 #endif
00066 
00067 
00068 #ifndef USE_MATH         /* If math support is needed */
00069 # define USE_MATH 1
00070 #endif
00071 
00072 #ifndef USE_CHAR_CLASSIFIERS  /* If char classifiers are needed */
00073 # define USE_CHAR_CLASSIFIERS 1
00074 #endif
00075 
00076 #ifndef USE_ASCII_NAMES  /* If extended escaped characters are needed */
00077 # define USE_ASCII_NAMES 1
00078 #endif
00079 
00080 #ifndef USE_STRING_PORTS      /* Enable string ports */
00081 # define USE_STRING_PORTS 1
00082 #endif
00083 
00084 #ifndef USE_TRACING
00085 # define USE_TRACING 1
00086 #endif
00087 
00088 #ifndef USE_PLIST
00089 # define USE_PLIST 0
00090 #endif
00091 
00092 /* To force system errors through user-defined error handling (see *error-hook*) */
00093 #ifndef USE_ERROR_HOOK
00094 # define USE_ERROR_HOOK 1
00095 #endif
00096 
00097 #ifndef USE_COLON_HOOK   /* Enable qualified qualifier */
00098 # define USE_COLON_HOOK 1
00099 #endif
00100 
00101 #ifndef USE_STRCASECMP   /* stricmp for Unix */
00102 # define USE_STRCASECMP 0
00103 #endif
00104 
00105 #ifndef USE_STRLWR
00106 # define USE_STRLWR 1
00107 #endif
00108 
00109 #ifndef STDIO_ADDS_CR    /* Define if DOS/Windows */
00110 # define STDIO_ADDS_CR 0
00111 #endif
00112 
00113 #ifndef INLINE
00114 # define INLINE
00115 #endif
00116 
00117 #ifndef USE_INTERFACE
00118 # define USE_INTERFACE 0
00119 #endif
00120 
00121 typedef struct scheme scheme;
00122 typedef struct cell *pointer;
00123 
00124 typedef void * (*func_alloc)(size_t);
00125 typedef void (*func_dealloc)(void *);
00126 
00127 /* num, for generic arithmetic */
00128 typedef struct num {
00129      char is_fixnum;
00130      union {
00131           long ivalue;
00132           double rvalue;
00133      } value;
00134 } num;
00135 
00136 SCHEME_EXPORT scheme *scheme_init_new();
00137 SCHEME_EXPORT scheme *scheme_init_new_custom_alloc(func_alloc malloc, func_dealloc free);
00138 SCHEME_EXPORT int scheme_init(scheme *sc);
00139 SCHEME_EXPORT int scheme_init_custom_alloc(scheme *sc, func_alloc, func_dealloc);
00140 SCHEME_EXPORT void scheme_deinit(scheme *sc);
00141 void scheme_set_input_port_file(scheme *sc, FILE *fin);
00142 void scheme_set_input_port_string(scheme *sc, char *start, char *past_the_end);
00143 SCHEME_EXPORT void scheme_set_output_port_file(scheme *sc, FILE *fin);
00144 void scheme_set_output_port_string(scheme *sc, char *start, char *past_the_end);
00145 SCHEME_EXPORT void scheme_load_file(scheme *sc, FILE *fin);
00146 SCHEME_EXPORT void scheme_load_string(scheme *sc, const char *cmd);
00147 void scheme_apply0(scheme *sc, const char *procname);
00148 SCHEME_EXPORT pointer scheme_apply1(scheme *sc, const char *procname, pointer);
00149 void scheme_set_external_data(scheme *sc, void *p);
00150 SCHEME_EXPORT void scheme_define(scheme *sc, pointer env, pointer symbol, pointer value);
00151 
00152 typedef pointer (*foreign_func)(scheme *, pointer);
00153 
00154 pointer _cons(scheme *sc, pointer a, pointer b, int immutable);
00155 pointer mk_integer(scheme *sc, long num);
00156 pointer mk_real(scheme *sc, double num);
00157 pointer mk_symbol(scheme *sc, const char *name);
00158 pointer gensym(scheme *sc);
00159 pointer mk_string(scheme *sc, const char *str);
00160 pointer mk_counted_string(scheme *sc, const char *str, int len);
00161 pointer mk_character(scheme *sc, int c);
00162 pointer mk_foreign_func(scheme *sc, foreign_func f);
00163 void putstr(scheme *sc, const char *s);
00164 
00165 
00166 #if USE_INTERFACE
00167 struct scheme_interface {
00168   void (*scheme_define)(scheme *sc, pointer env, pointer symbol, pointer value);
00169   pointer (*cons)(scheme *sc, pointer a, pointer b);
00170   pointer (*immutable_cons)(scheme *sc, pointer a, pointer b);
00171   pointer (*mk_integer)(scheme *sc, long num);
00172   pointer (*mk_real)(scheme *sc, double num);
00173   pointer (*mk_symbol)(scheme *sc, const char *name);
00174   pointer (*gensym)(scheme *sc);
00175   pointer (*mk_string)(scheme *sc, const char *str);
00176   pointer (*mk_counted_string)(scheme *sc, const char *str, int len);
00177   pointer (*mk_character)(scheme *sc, int c);
00178   pointer (*mk_vector)(scheme *sc, int len);
00179   pointer (*mk_foreign_func)(scheme *sc, foreign_func f);
00180   void (*putstr)(scheme *sc, const char *s);
00181   void (*putcharacter)(scheme *sc, int c);
00182   
00183   int (*is_string)(pointer p);
00184   char *(*string_value)(pointer p);
00185   int (*is_number)(pointer p);
00186   num (*nvalue)(pointer p);
00187   long (*ivalue)(pointer p);
00188   double (*rvalue)(pointer p);
00189   int (*is_integer)(pointer p);
00190   int (*is_real)(pointer p);
00191   int (*is_character)(pointer p);
00192   long (*charvalue)(pointer p);
00193   int (*is_vector)(pointer p);
00194   long (*vector_length)(pointer vec);
00195   void (*fill_vector)(pointer vec, pointer elem);
00196   pointer (*vector_elem)(pointer vec, int ielem);
00197   pointer (*set_vector_elem)(pointer vec, int ielem, pointer newel);
00198   int (*is_port)(pointer p);
00199   
00200   int (*is_pair)(pointer p);
00201   pointer (*pair_car)(pointer p);
00202   pointer (*pair_cdr)(pointer p);
00203   pointer (*set_car)(pointer p, pointer q);
00204   pointer (*set_cdr)(pointer p, pointer q);
00205 
00206   int (*is_symbol)(pointer p);
00207   char *(*symname)(pointer p);
00208   
00209   int (*is_syntax)(pointer p);
00210   int (*is_proc)(pointer p);
00211   int (*is_foreign)(pointer p);
00212   char *(*syntaxname)(pointer p);
00213   int (*is_closure)(pointer p);
00214   int (*is_macro)(pointer p);
00215   pointer (*closure_code)(pointer p);
00216   pointer (*closure_env)(pointer p);
00217 
00218   int (*is_continuation)(pointer p);
00219   int (*is_promise)(pointer p);
00220   int (*is_environment)(pointer p);
00221   int (*is_immutable)(pointer p);
00222   void (*setimmutable)(pointer p);
00223   void (*load_file)(scheme *sc, FILE *fin);
00224   void (*load_string)(scheme *sc, const char *input);
00225 };
00226 #endif
00227 
00228 #endif
00229 

Generated on Tue Aug 19 00:14:50 2008 for gerbv by  doxygen 1.5.6