int main(void) { scheme *sc; // Init Scheme interpreter sc = scheme_init_new(); scheme_set_output_port_file(sc, stdout); // Load init.scm FILE *finit = fopen("../tinyscheme/init.scm", "r"); scheme_load_file(sc, finit); fclose(finit); SDECL("machine-create",sc_machine_create); SDECL("machine-peek",sc_machine_peek); SDECL("machine-poke",sc_machine_poke); SDECL("machine-run",sc_machine_run); SDECL("machine-say",sc_machine_say); SDECL("machine-start",sc_machine_start); SDECL("machine-say-addr",sc_machine_say_addr); SDECL("machine-say-size",sc_machine_say_size); FILE *fus = fopen("reactor.scm", "r"); scheme_load_file(sc, fus); fclose(fus); // Bye! scheme_deinit(sc); return 0; }
scheme *edelib_scheme_init(void) { scheme *s; pointer sym; s = scheme_init_new(); scheme_set_input_port_file(s, stdin); scheme_set_output_port_file(s, stdout); sym = edelib_scheme_mk_symbol(s, "*edelib-dir-separator*"); edelib_scheme_define(s, EDELIB_SCHEME_GLOBAL_ENV(s), sym, edelib_scheme_mk_string(s, E_DIR_SEPARATOR_STR)); sym = edelib_scheme_mk_symbol(s, "*edelib-version*"); edelib_scheme_define(s, EDELIB_SCHEME_GLOBAL_ENV(s), sym, edelib_scheme_mk_string(s, EDELIB_VERSION)); EDELIB_SCHEME_DEFINE(s, edelib_scheme_clock, "edelib-clock"); EDELIB_SCHEME_DEFINE(s, edelib_scheme_clock_diff, "edelib-clock-diff"); /* load init files; it is a list of files separated with ':' */ char *paths = getenv("EDELIB_SCHEME_INIT"); if(paths) { char *tmp = edelib_strndup(paths, 256); FILE *fd = NULL; for(char *p = strtok(tmp, ":"); p; p = strtok(NULL, ":")) { fd = fopen(p, "r"); if(!fd) { E_WARNING(E_STRLOC ": unable to open '%s'. Skipping...\n", p); continue; } edelib_scheme_load_file(s, fd); fclose(fd); fd = NULL; } free(tmp); } else { FILE *fd; char path[PATH_MAX]; const char *init_files[] = {"init.ss", "init-2.ss", 0}; bool found_files = false; for(int i = 0; init_files[i]; i++) { snprintf(path, sizeof(path), "%s/%s", EDELIB_SCHEME_DEFAULT_LIB_PATH, init_files[i]); fd = fopen(path, "r"); if(fd) { found_files = true; edelib_scheme_load_file(s, fd); fclose(fd); } } if(!found_files) E_WARNING(E_STRLOC ": EDELIB_SCHEME_INIT wasn't set. Interpreter will be loaded without init files\n"); } return s; }
Impl() : m_Scheme(scheme_init_new()) {}