int main(int argc, char **argv) { Scheme *sc = alloc_scheme(); Statement *st = NULL; String scheme = NULL; if (!scheme_init(sc)) { fprintf(stderr, "Initialize scheme environment error!\n"); return 1; } if (!funny_init()) { fprintf(stderr, "Initialize funny environment error!\n"); return 1; } printf("Welcome to FUNNY programming world. Type {exit} to exit.\n"); while (TRUE) { printf("> "); st = read_statement(stdin); if (empty_statement(st)) { printf("can't parse the statement.\n"); continue; } wait_to_exit(st); scheme = match(st); if (equals_string(scheme, "")) continue; //#ifdef DEBUG printf("TARGET: %s\n", scheme); //#endif Cell* result = eval(sc, scheme); printf("%s\n", cell2str(sc, result)); } return 0; }
int main(int argc, char *argv[]) { void *sc; sc = malloc(1024 * 1024 * 4); void *h = dlopen("/usr/lib/libsandbox.dylib", RTLD_LAZY); printf("h = %p\n", h); void *loaded_base = dlsym(h, "sandbox_compile_file"); printf("sandbox_compile_file = %p\n", loaded_base); unsigned int static_base = get_offset("_sandbox_compile_file"); base = (unsigned int) loaded_base - static_base; int (*scheme_init)(void *) = (int (*)(void *)) hidden_dlsym("_scheme_init"); void (*scheme_set_input_port_file)(void *, FILE *) = (void (*)(void *, FILE *)) hidden_dlsym("_scheme_set_input_port_file"); void (*scheme_set_output_port_file)(void *, FILE *) = (void (*)(void *, FILE *)) hidden_dlsym("_scheme_set_output_port_file"); void (*scheme_load_file)(void *, FILE *) = (void (*)(void *, FILE *)) hidden_dlsym("_scheme_load_file"); void (*scheme_deinit)(void *) = (void (*)(void *)) hidden_dlsym("_scheme_deinit"); if (!scheme_init(sc)) { fprintf(stderr, "Uh ohz!\n"); } else { scheme_set_input_port_file(sc, stdin); scheme_set_output_port_file(sc, stdout); scheme_load_file(sc, stdin); scheme_deinit(sc); } dlclose(h); free(sc); return 0; }
int main(int argc, char **argv) { FILE *fin = NULL; const char *expr = NULL; scheme sc; if(argc > 1) { if(argv[1][0] == '-') { if((strcmp(argv[1], "--help") == 0) || (strcmp(argv[1], "-h") == 0)) { help(); return 0; } else if((strcmp(argv[1], "--expression") == 0) || (strcmp(argv[1], "-e") == 0)) { if(!argv[2]) { printf("This option requires a parameter\n"); return 1; } expr = argv[2]; } else { printf("Unrecognized option. Use 'ede-scriptbus --help' for options\n"); return 1; } } if(!expr) { fin = fopen(argv[1], "r"); if(!fin) { fprintf(stderr, "Unable to load '%s' file!\n", argv[1]); return 1; } } } if(!scheme_init(&sc)) { fprintf(stderr, "Fatal: Unable to initialize interpreter!\n"); return 1; } scheme_set_input_port_file(&sc, stdin); scheme_set_output_port_file(&sc, stdout); /* load basic stuff */ scheme_load_string(&sc, init_scm_content); /* register additional functions */ register_sys_functions(&sc); register_communication_functions(&sc); register_string_functions(&sc); register_wm_functions(&sc); /* construct *args* */ pointer args = sc.NIL; for(int i = 0; i < argc; i++) { pointer value = mk_string(&sc, argv[i]); args = cons(&sc, value, args); } args = scheme_reverse(&sc, args); scheme_define(&sc, sc.global_env, mk_symbol(&sc, "*args*"), args); if(!expr) { /* load file or go into console */ if(!fin) { fin = stdin; printf("Type '(quit)' or press Ctrl-D to quit"); } scheme_load_file(&sc, fin); } else { /* or execute expression */ scheme_load_string(&sc, expr); if(sc.retcode != 0) printf("Bad expression: '%s'\n", expr); } scheme_deinit(&sc); return 0; }
int main(int argc, char **argv) { scheme sc; FILE *fin; char *file_name = INITFILE; int isfile = 1; if (argc == 1) { printf(BANNER); } if (argc == 2 && strcmp(argv[1], "-?") == 0) { usage(); return 1; } if (!scheme_init(&sc)) { fprintf(stderr, "Could not initialize!\n"); return 2; } scheme_set_input_port_file(&sc, stdin); scheme_set_output_port_file(&sc, stdout); #if USE_DL scheme_define(&sc, sc.global_env, mk_symbol(&sc, "load-extension"), mk_foreign_func(&sc, scm_load_ext)); #endif argv++; if (access(file_name, 0) != 0) { char *p = getenv("TINYSCHEMEINIT"); if (p != 0) { file_name = p; } } do { if (strcmp(file_name, "-") == 0) { fin = stdin; } else if (strcmp(file_name, "-1") == 0 || strcmp(file_name, "-c") == 0) { pointer args = sc.NIL; isfile = file_name[1] == '1'; file_name = *argv++; if (strcmp(file_name, "-") == 0) { fin = stdin; } else if (isfile) { fin = fopen(file_name, "r"); } for (; *argv; argv++) { pointer value = mk_string(&sc, *argv); args = cons(&sc, value, args); } args = reverse_in_place(&sc, sc.NIL, args); scheme_define(&sc, sc.global_env, mk_symbol(&sc, "*args*"), args); } else { fin = fopen(file_name, "r"); } if (isfile && fin == 0) { fprintf(stderr, "Could not open file %s\n", file_name); } else { if (isfile) { scheme_load_named_file(&sc, fin, file_name); } else { scheme_load_string(&sc, file_name); } if (!isfile || fin != stdin) { if (sc.retcode != 0) { fprintf(stderr, "Errors encountered reading %s\n", file_name); } if (isfile) { fclose(fin); } } } file_name = *argv++; } while (file_name != 0); if (argc == 1) { scheme_load_named_file(&sc, stdin, 0); } scheme_deinit(&sc); return sc.retcode; }