int main(int argc, char const *argv[]) { ZAPPER_LIB_PATH = getenv("ZLIB_PATH"); if (ZAPPER_LIB_PATH == NULL) { printf("$ZLIB_PATH is not set. Using cwd for libraries and imports\n"); ZAPPER_LIB_PATH = "lib/"; } NAMESPACE = ""; // these next lines are used to read a file in for evaluation char *buffer = 0; long length; FILE *f; if (argc > 1) { f = fopen(argv[1], "rb"); if (f) { fseek(f, 0, SEEK_END); length = ftell(f); fseek(f, 0, SEEK_SET); buffer = malloc(length); if (buffer) { fread(buffer, 1, length, f); } fclose(f); } } else { CRASH_ON_EXCEPTION = 0; repl_init(); return 0; } if (buffer) { init_system(); symboltable_t* context = newSymbolTable(); list_t* expressions = parse(buffer)->value->value.l; object_t* value = eval(expressions, context); free(expressions); free(value); if (clib_functions->head != clib_functions->tail) { collecsymboltable_t(clib_functions); } } else { exception("No input file was specified.", newObject()); } return 0; }
void run_repl(Module *state, const char *in_file) { printf("EaRing. Copyright 2008 Zed A. Shaw.\n"); printf("Done compiling %s. Enter ? to get the function list.\n", in_file); char *cmd = NULL; current_module = state; repl_init(NULL); while((cmd = repl_prompt())) { if(cmd[0] == '?') { tst_traverse(state->functions, (tst_traverse_cb)query_functions, NULL); } else { run_function(state, cmd); } } }
int main(int argc, char** argv) { DBusConnection* conn; DBusMessage* msg; DBusMessage* reply; DBusMessageIter args; DBusError err; dbus_uint32_t serial = 0; int ret; const char * lib_file; const char * init_fn; repl_result repl_result; dbus_error_init(&err); repl_init(); conn = dbus_bus_get(DBUS_BUS_SESSION, &err); CHECK_FOR_ERRORS("Connection error: %s\n"); ASSERT(conn != NULL); ret = dbus_bus_request_name(conn, "cljc.repl.runtime", DBUS_NAME_FLAG_REPLACE_EXISTING , &err); CHECK_FOR_ERRORS("Name error: %s\n"); ASSERT(ret == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER); while (true) { dbus_connection_read_write(conn, 0); msg = dbus_connection_pop_message(conn); if (msg == NULL) { usleep(10000); continue; } if (dbus_message_is_method_call(msg, "cljc.repl.runtime", "eval")) { ASSERT(dbus_message_iter_init(msg, &args)); ASSERT(dbus_message_iter_get_arg_type(&args) == DBUS_TYPE_STRING); dbus_message_iter_get_basic(&args, &lib_file); ASSERT(dbus_message_iter_next(&args)); ASSERT(dbus_message_iter_get_arg_type(&args) == DBUS_TYPE_STRING); dbus_message_iter_get_basic(&args, &init_fn); repl_result = repl_eval(lib_file, init_fn); fflush(stdout); reply = dbus_message_new_method_return(msg); dbus_message_iter_init_append(reply, &args); ASSERT(dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &repl_result.status)); ASSERT(dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &repl_result.buffer)); ASSERT(dbus_connection_send(conn, reply, &serial)); dbus_connection_flush(conn); dbus_message_unref(reply); } dbus_message_unref(msg); } }