예제 #1
0
파일: Scheme.cpp 프로젝트: edeproject/svn
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;
}
예제 #2
0
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");
}
예제 #3
0
파일: Theme.cpp 프로젝트: edeproject/svn
void Theme::prompt(void) {
	init_interpreter();

	printf("Theme console (edelib %s). Type \"(quit)\" to exit.", EDELIB_VERSION);
	edelib_scheme_load_file(priv->sc, stdin);
}