#include "escheme.h" #include #include #include #define NAME "sample-format" Scheme_Object* tag = NULL; static Scheme_Object *sample_format(int argc, Scheme_Object *argv[]) { Scheme_Object* thing = NULL; Scheme_Object* sample_format = NULL; ao_sample_format* self = NULL; Scheme_Object* result = NULL; // matrix is scheme pointer so NOT scheme_malloc_atomic self = scheme_malloc(sizeof(ao_sample_format)); sample_format = argv[0]; $arguments; if(tag==NULL) scheme_signal_error("Module didn't initialize???"); result = scheme_make_cptr(self,tag); return result; } Scheme_Object *scheme_reload(Scheme_Env *env) { Scheme_Env* mod; mod = scheme_primitive_module(scheme_module_name(),env); scheme_add_global("tag", tag, mod); scheme_add_global("build", scheme_make_prim_w_arity(sample_format, "build",1,1), mod); scheme_add_global("little-endian", scheme_make_integer(AO_FMT_LITTLE), mod); scheme_add_global("big-endian", scheme_make_integer(AO_FMT_BIG), mod); scheme_add_global("native-endian", scheme_make_integer(AO_FMT_NATIVE), mod); scheme_finish_primitive_module(mod); return scheme_void; } Scheme_Object *scheme_initialize(Scheme_Env *env) { // fuck... don't do this: // scheme_register_extension_global(tag,sizeof(Scheme_Object*)); // probably shouldn't intern, so tag is always unique if(tag==NULL) tag = scheme_make_symbol("sample-format-tag"); return scheme_reload(env); } Scheme_Object *scheme_module_name(void) { return scheme_intern_symbol(NAME); }