Hi Arnold
no I haven't tried to interface with tinyscheme yet, a little busy at the moment, however here's the output from fbfrog
scheme-private.bi
#pragma once
#include once "crt/long.bi"
#include once "crt/stdio.bi"
extern "C"
#define _SCHEME_PRIVATE_H
#define _SCHEME_H
const STANDALONE = 1
const USE_STRCASECMP = 1
const USE_STRLWR = 1
#define SCHEME_EXPORT
#define USE_SCHEME_STACK
const USE_MATH = 1
const USE_CHAR_CLASSIFIERS = 1
const USE_ASCII_NAMES = 1
const USE_STRING_PORTS = 1
const USE_TRACING = 1
const USE_PLIST = 0
const USE_ERROR_HOOK = 1
const USE_COLON_HOOK = 1
const STDIO_ADDS_CR = 0
#define INLINE
const USE_INTERFACE = 0
const SHOW_ERROR_LINE = 1
type cell as cell_
type pointer as cell ptr
type func_alloc as function(byval as uinteger) as any ptr
type func_dealloc as sub(byval as any ptr)
union num_value
ivalue as clong
rvalue as double
end union
type num
is_fixnum as byte
value as num_value
end type
type scheme as scheme_
declare function scheme_init_new() as scheme ptr
declare function scheme_init_new_custom_alloc(byval malloc as func_alloc, byval free as func_dealloc) as scheme ptr
declare function scheme_init(byval sc as scheme ptr) as long
declare function scheme_init_custom_alloc(byval sc as scheme ptr, byval as func_alloc, byval as func_dealloc) as long
declare sub scheme_deinit(byval sc as scheme ptr)
declare sub scheme_set_input_port_file(byval sc as scheme ptr, byval fin as FILE ptr)
declare sub scheme_set_input_port_string(byval sc as scheme ptr, byval start as zstring ptr, byval past_the_end as zstring ptr)
declare sub scheme_set_output_port_file(byval sc as scheme ptr, byval fin as FILE ptr)
declare sub scheme_set_output_port_string(byval sc as scheme ptr, byval start as zstring ptr, byval past_the_end as zstring ptr)
declare sub scheme_load_file(byval sc as scheme ptr, byval fin as FILE ptr)
declare sub scheme_load_named_file(byval sc as scheme ptr, byval fin as FILE ptr, byval filename as const zstring ptr)
declare sub scheme_load_string(byval sc as scheme ptr, byval cmd as const zstring ptr)
declare function scheme_apply0(byval sc as scheme ptr, byval procname as const zstring ptr) as pointer
declare function scheme_call(byval sc as scheme ptr, byval func as pointer, byval args as pointer) as pointer
declare function scheme_eval(byval sc as scheme ptr, byval obj as pointer) as pointer
declare sub scheme_set_external_data(byval sc as scheme ptr, byval p as any ptr)
declare sub scheme_define(byval sc as scheme ptr, byval env as pointer, byval symbol as pointer, byval value as pointer)
type foreign_func as function(byval as scheme ptr, byval as pointer) as pointer
declare function _cons(byval sc as scheme ptr, byval a as pointer, byval b as pointer, byval immutable as long) as pointer
declare function mk_integer(byval sc as scheme ptr, byval num as clong) as pointer
declare function mk_real(byval sc as scheme ptr, byval num as double) as pointer
declare function mk_symbol(byval sc as scheme ptr, byval name as const zstring ptr) as pointer
declare function gensym(byval sc as scheme ptr) as pointer
declare function mk_string(byval sc as scheme ptr, byval str as const zstring ptr) as pointer
declare function mk_counted_string(byval sc as scheme ptr, byval str as const zstring ptr, byval len as long) as pointer
declare function mk_empty_string(byval sc as scheme ptr, byval len as long, byval fill as byte) as pointer
declare function mk_character(byval sc as scheme ptr, byval c as long) as pointer
declare function mk_foreign_func(byval sc as scheme ptr, byval f as foreign_func) as pointer
declare sub putstr(byval sc as scheme ptr, byval s as const zstring ptr)
declare function list_length(byval sc as scheme ptr, byval a as pointer) as long
declare function eqv(byval a as pointer, byval b as pointer) as long
type scheme_port_kind as long
enum
port_free = 0
port_file = 1
port_string = 2
port_srfi6 = 4
port_input = 16
port_output = 32
port_saw_EOF = 64
end enum
type port_rep_stdio
file as FILE ptr
closeit as long
curr_line as long
filename as zstring ptr
end type
type port_rep_string
start as zstring ptr
past_the_end as zstring ptr
curr as zstring ptr
end type
union port_rep
stdio as port_rep_stdio
string as port_rep_string
end union
type port
kind as ubyte
rep as port_rep
end type
type cell__object__string
_svalue as zstring ptr
_length as long
end type
type cell__object__cons
_car as cell ptr
_cdr as cell ptr
end type
union cell__object
_string as cell__object__string
_number as num
_port as port ptr
_ff as foreign_func
_cons as cell__object__cons
end union
type cell_
_flag as ulong
_object as cell__object
end type
type scheme_
malloc as func_alloc
free as func_dealloc
retcode as long
tracing as long
alloc_seg(0 to 9) as zstring ptr
cell_seg(0 to 9) as pointer
last_cell_seg as long
args as pointer
envir as pointer
code as pointer
dump as pointer
interactive_repl as long
_sink as cell
sink as pointer
_NIL as cell
NIL as pointer
_HASHT as cell
T as pointer
_HASHF as cell
F as pointer
_EOF_OBJ as cell
EOF_OBJ as pointer
oblist as pointer
global_env as pointer
c_nest as pointer
LAMBDA as pointer
QUOTE as pointer
QQUOTE as pointer
UNQUOTE as pointer
UNQUOTESP as pointer
FEED_TO as pointer
COLON_HOOK as pointer
ERROR_HOOK as pointer
SHARP_HOOK as pointer
COMPILE_HOOK as pointer
free_cell as pointer
fcells as clong
inport as pointer
outport as pointer
save_inport as pointer
loadport as pointer
load_stack(0 to 63) as port
nesting_stack(0 to 63) as long
file_i as long
nesting as long
gc_verbose as byte
no_memory as byte
linebuff as zstring * 1024
strbuff as zstring * 256
tmpfp as FILE ptr
tok as long
print_flag as long
value as pointer
op as long
ext_data as any ptr
gensym_cnt as clong
vptr as scheme_interface ptr
dump_base as any ptr
dump_size as long
end type
const CELL_SEGSIZE = 5000
const CELL_NSEGMENT = 10
const MAXFIL = 64
const LINESIZE = 1024
const STRBUFFSIZE = 256
type scheme_opcodes as long
enum
OP_LOAD
OP_T0LVL
OP_T1LVL
OP_READ_INTERNAL
OP_GENSYM
OP_VALUEPRINT
OP_EVAL
OP_REAL_EVAL
OP_E0ARGS
OP_E1ARGS
OP_APPLY
OP_REAL_APPLY
OP_TRACING
OP_DOMACRO
OP_LAMBDA
OP_LAMBDA1
OP_MKCLOSURE
OP_QUOTE
OP_DEF0
OP_DEF1
OP_DEFP
OP_BEGIN
OP_IF0
OP_IF1
OP_SET0
OP_SET1
OP_LET0
OP_LET1
OP_LET2
OP_LET0AST
OP_LET1AST
OP_LET2AST
OP_LET0REC
OP_LET1REC
OP_LET2REC
OP_COND0
OP_COND1
OP_DELAY
OP_AND0
OP_AND1
OP_OR0
OP_OR1
OP_C0STREAM
OP_C1STREAM
OP_MACRO0
OP_MACRO1
OP_CASE0
OP_CASE1
OP_CASE2
OP_PEVAL
OP_PAPPLY
OP_CONTINUATION
OP_INEX2EX
OP_EXP
OP_LOG
OP_SIN
OP_COS
OP_TAN
OP_ASIN
OP_ACOS
OP_ATAN
OP_SQRT
OP_EXPT
OP_FLOOR
OP_CEILING
OP_TRUNCATE
OP_ROUND
OP_ADD
OP_SUB
OP_MUL
OP_DIV
OP_INTDIV
OP_REM
OP_MOD
OP_CAR
OP_CDR
OP_CONS
OP_SETCAR
OP_SETCDR
OP_CHAR2INT
OP_INT2CHAR
OP_CHARUPCASE
OP_CHARDNCASE
OP_SYM2STR
OP_ATOM2STR
OP_STR2SYM
OP_STR2ATOM
OP_MKSTRING
OP_STRLEN
OP_STRREF
OP_STRSET
OP_STRAPPEND
OP_SUBSTR
OP_VECTOR
OP_MKVECTOR
OP_VECLEN
OP_VECREF
OP_VECSET
OP_NOT
OP_BOOLP
OP_EOFOBJP
OP_NULLP
OP_NUMEQ
OP_LESS
OP_GRE
OP_LEQ
OP_GEQ
OP_SYMBOLP
OP_NUMBERP
OP_STRINGP
OP_INTEGERP
OP_REALP
OP_CHARP
OP_CHARAP
OP_CHARNP
OP_CHARWP
OP_CHARUP
OP_CHARLP
OP_PORTP
OP_INPORTP
OP_OUTPORTP
OP_PROCP
OP_PAIRP
OP_LISTP
OP_ENVP
OP_VECTORP
OP_EQ
OP_EQV
OP_FORCE
OP_SAVE_FORCED
OP_WRITE
OP_WRITE_CHAR
OP_DISPLAY
OP_NEWLINE
OP_ERR0
OP_ERR1
OP_REVERSE
OP_LIST_STAR
OP_APPEND
OP_QUIT
OP_GC
OP_GCVERB
OP_NEWSEGMENT
OP_OBLIST
OP_CURR_INPORT
OP_CURR_OUTPORT
OP_OPEN_INFILE
OP_OPEN_OUTFILE
OP_OPEN_INOUTFILE
OP_OPEN_INSTRING
OP_OPEN_INOUTSTRING
OP_OPEN_OUTSTRING
OP_GET_OUTSTRING
OP_CLOSE_INPORT
OP_CLOSE_OUTPORT
OP_INT_ENV
OP_CURR_ENV
OP_READ
OP_READ_CHAR
OP_PEEK_CHAR
OP_CHAR_READY
OP_SET_INPORT
OP_SET_OUTPORT
OP_RDSEXPR
OP_RDLIST
OP_RDDOT
OP_RDQUOTE
OP_RDQQUOTE
OP_RDQQUOTEVEC
OP_RDUNQUOTE
OP_RDUQTSP
OP_RDVEC
OP_P0LIST
OP_P1LIST
OP_PVECFROM
OP_LIST_LENGTH
OP_ASSQ
OP_GET_CLOSURE
OP_CLOSUREP
OP_MACROP
OP_MAXDEFINED
end enum
'' TODO: #define _OP_DEF(A,B,C,D,E,OP) OP,
#undef _OP_DEF
#define cons(sc, a, b) _cons(sc, a, b, 0)
#define immutable_cons(sc, a, b) _cons(sc, a, b, 1)
declare function is_string(byval p as pointer) as long
declare function string_value(byval p as pointer) as zstring ptr
declare function is_number(byval p as pointer) as long
declare function nvalue(byval p as pointer) as num
declare function ivalue(byval p as pointer) as clong
declare function rvalue(byval p as pointer) as double
declare function is_integer(byval p as pointer) as long
declare function is_real(byval p as pointer) as long
declare function is_character(byval p as pointer) as long
declare function charvalue(byval p as pointer) as clong
declare function is_vector(byval p as pointer) as long
declare function is_port(byval p as pointer) as long
declare function is_pair(byval p as pointer) as long
declare function pair_car(byval p as pointer) as pointer
declare function pair_cdr(byval p as pointer) as pointer
declare function set_car(byval p as pointer, byval q as pointer) as pointer
declare function set_cdr(byval p as pointer, byval q as pointer) as pointer
declare function is_symbol(byval p as pointer) as long
declare function symname(byval p as pointer) as zstring ptr
declare function hasprop(byval p as pointer) as long
declare function is_syntax(byval p as pointer) as long
declare function is_proc(byval p as pointer) as long
declare function is_foreign(byval p as pointer) as long
declare function syntaxname(byval p as pointer) as zstring ptr
declare function is_closure(byval p as pointer) as long
declare function closure_code(byval p as pointer) as pointer
declare function closure_env(byval p as pointer) as pointer
declare function is_continuation(byval p as pointer) as long
declare function is_promise(byval p as pointer) as long
declare function is_environment(byval p as pointer) as long
declare function is_immutable(byval p as pointer) as long
declare sub setimmutable(byval p as pointer)
end extern
scheme.bi
#pragma once
#include once "crt/long.bi"
#include once "crt/stdio.bi"
extern "C"
#define _SCHEME_H
const STANDALONE = 1
const USE_STRCASECMP = 1
const USE_STRLWR = 1
#define SCHEME_EXPORT
#define USE_SCHEME_STACK
const USE_MATH = 1
const USE_CHAR_CLASSIFIERS = 1
const USE_ASCII_NAMES = 1
const USE_STRING_PORTS = 1
const USE_TRACING = 1
const USE_PLIST = 0
const USE_ERROR_HOOK = 1
const USE_COLON_HOOK = 1
const STDIO_ADDS_CR = 0
#define INLINE
const USE_INTERFACE = 0
const SHOW_ERROR_LINE = 1
type pointer as cell ptr
type func_alloc as function(byval as uinteger) as any ptr
type func_dealloc as sub(byval as any ptr)
union num_value
ivalue as clong
rvalue as double
end union
type num
is_fixnum as byte
value as num_value
end type
declare function scheme_init_new() as scheme ptr
declare function scheme_init_new_custom_alloc(byval malloc as func_alloc, byval free as func_dealloc) as scheme ptr
declare function scheme_init(byval sc as scheme ptr) as long
declare function scheme_init_custom_alloc(byval sc as scheme ptr, byval as func_alloc, byval as func_dealloc) as long
declare sub scheme_deinit(byval sc as scheme ptr)
declare sub scheme_set_input_port_file(byval sc as scheme ptr, byval fin as FILE ptr)
declare sub scheme_set_input_port_string(byval sc as scheme ptr, byval start as zstring ptr, byval past_the_end as zstring ptr)
declare sub scheme_set_output_port_file(byval sc as scheme ptr, byval fin as FILE ptr)
declare sub scheme_set_output_port_string(byval sc as scheme ptr, byval start as zstring ptr, byval past_the_end as zstring ptr)
declare sub scheme_load_file(byval sc as scheme ptr, byval fin as FILE ptr)
declare sub scheme_load_named_file(byval sc as scheme ptr, byval fin as FILE ptr, byval filename as const zstring ptr)
declare sub scheme_load_string(byval sc as scheme ptr, byval cmd as const zstring ptr)
declare function scheme_apply0(byval sc as scheme ptr, byval procname as const zstring ptr) as pointer
declare function scheme_call(byval sc as scheme ptr, byval func as pointer, byval args as pointer) as pointer
declare function scheme_eval(byval sc as scheme ptr, byval obj as pointer) as pointer
declare sub scheme_set_external_data(byval sc as scheme ptr, byval p as any ptr)
declare sub scheme_define(byval sc as scheme ptr, byval env as pointer, byval symbol as pointer, byval value as pointer)
type foreign_func as function(byval as scheme ptr, byval as pointer) as pointer
declare function _cons(byval sc as scheme ptr, byval a as pointer, byval b as pointer, byval immutable as long) as pointer
declare function mk_integer(byval sc as scheme ptr, byval num as clong) as pointer
declare function mk_real(byval sc as scheme ptr, byval num as double) as pointer
declare function mk_symbol(byval sc as scheme ptr, byval name as const zstring ptr) as pointer
declare function gensym(byval sc as scheme ptr) as pointer
declare function mk_string(byval sc as scheme ptr, byval str as const zstring ptr) as pointer
declare function mk_counted_string(byval sc as scheme ptr, byval str as const zstring ptr, byval len as long) as pointer
declare function mk_empty_string(byval sc as scheme ptr, byval len as long, byval fill as byte) as pointer
declare function mk_character(byval sc as scheme ptr, byval c as long) as pointer
declare function mk_foreign_func(byval sc as scheme ptr, byval f as foreign_func) as pointer
declare sub putstr(byval sc as scheme ptr, byval s as const zstring ptr)
declare function list_length(byval sc as scheme ptr, byval a as pointer) as long
declare function eqv(byval a as pointer, byval b as pointer) as long
end extern