bool XEvalNode::applyNode(SchemeThread* schemethread, double curtime) { Console* console=Console::getInstance(); s7_scheme* sc=schemethread->scheme; // console->setEvaling(true); //// console->postAsyncMessage(CommandIDs::ConsoleIsEvaling, 1, true); // install the begin_hook that allows s7 to quit current eval schemethread->setSchemeInterrupt(false); s7_set_begin_hook(sc, cm_begin_hook); s7_pointer val=s7_eval_c_string(sc, (char *)expr.toUTF8()); s7_set_begin_hook(sc,NULL); if (schemethread->isSchemeInterrupt()) { console->printWarning(T("Scheme interrupted!\n")); } else if (val != schemethread->schemeError) { String str=String(s7_object_to_c_string(sc, val)); #ifdef GRACE str << T("\n"); #endif console->printValues(str); } // console->setEvaling(false); //// console->postAsyncMessage(CommandIDs::ConsoleIsEvaling, 0, true); return false; }
int main(int argc, char **argv) { s7_scheme *s7; char *buffer; char response[1024]; GetLine *gl; /* The tecla line editor */ gl = new_GetLine(500, 5000); s7 = s7_init(); if (argc == 2) { fprintf(stderr, "load %s\n", argv[1]); s7_load(s7, argv[1]); } else { while (1) { buffer = gl_get_line(gl, "> ", NULL, 0); if ((buffer[0] != '\n') || (strlen(buffer) > 1)) { sprintf(response, "(write %s)", buffer); s7_eval_c_string(s7, response); fprintf(stdout, "\n"); } } gl = del_GetLine(gl); } return EXIT_SUCCESS; }
void ReplWindow::evaluate(Glib::ustring &expression) { Scheme *scm = Application::get()->get_scheme(); if (!expression.empty()) { const char *errmsg; s7_pointer old_port, result; int gc_loc = -1; // // Open a port to catch error info // old_port = s7_set_current_error_port(scm, s7_open_output_string(scm)); if (old_port != s7_nil(scm)) { gc_loc = s7_gc_protect(scm, old_port); } result = s7_eval_c_string(scm, expression.data()); errmsg = s7_get_output_string(scm, s7_current_error_port(scm)); append_text( "\n" ); if ((errmsg) && (*errmsg)) { append_text(errmsg); } else { char *result_as_string; result_as_string = s7_object_to_c_string(scm, result); if (result_as_string) { append_text(result_as_string); free(result_as_string); } } s7_close_output_port(scm, s7_current_error_port(scm)); s7_set_current_error_port(scm, old_port); if (gc_loc != -1) s7_gc_unprotect_at(scm, gc_loc); } }