Пример #1
0
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; 
}
Пример #2
0
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;
}
Пример #3
0
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);
    }
}