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; }
MyEditor::MyEditor(int X, int Y, int W, int H, const char *l) : SchemeEditor(X, Y, W, H, l) { sc = edelib_scheme_init_raw(); FILE *fd; fd = fopen("../sslib/init.ss", "r"); if(fd) edelib_scheme_load_file(sc, fd); fd = fopen("../sslib/init-2.ss", "r"); if(fd) edelib_scheme_load_file(sc, fd); edelib_scheme_set_input_port_file(sc, stdin); edelib_scheme_set_output_port_string(sc, eval_buf, eval_buf + sizeof(eval_buf)); EDELIB_SCHEME_DEFINE(sc, quit_editor, "quit"); }
void Theme::prompt(void) { init_interpreter(); printf("Theme console (edelib %s). Type \"(quit)\" to exit.", EDELIB_VERSION); edelib_scheme_load_file(priv->sc, stdin); }