static errval_t run_eclipse(struct oct_query_state* st) { assert(st != NULL); long int qid; // Contains Queue ID in case of PFLUSHIO ec_ref retval = ec_ref_create_newvar(); //ec_post_goal(ec_term(ec_did("flush", 1), ec_long(1))); //ec_post_goal(ec_term(ec_did("flush", 1), ec_long(2))); //ec_post_goal(ec_term(ec_did("garbage_collect", 0))); while ((st->exec_res = ec_resume1(retval)) == PFLUSHIO) { ec_get_long(ec_ref_get(retval), &qid); switch (qid) { case STDOUT_QID: read_eclipse_queue(STDOUT_QID, &st->std_out); break; case STDERR_QID: read_eclipse_queue(STDERR_QID, &st->std_err); break; } } // atm. ignore all subsequent results if (st->exec_res == PSUCCEED) { ec_cut_to_chp(retval); ec_resume1(retval); } ec_ref_destroy(retval); errval_t err = transform_ec_error(st->exec_res); if (err_no(err) == SKB_ERR_EXECUTION) { err = err_push(err, OCT_ERR_ENGINE_FAIL); } return err; }
int Winapi ec_exec_string( char *callstring, ec_ref varsref) /* NULL is allowed */ { pword vars; dident exec_string_2 = enter_dict("exec_string",2); vars = ec_newvar(); if (varsref) ec_ref_set(varsref, vars); ec_post_goal(ec_term(ec_.d.colon, ec_atom(ec_.d.kernel_sepia), ec_term(exec_string_2, ec_string(callstring), vars))); return ec_resume1(0); }
int Winapi ec_resume(void) { return ec_resume1(0); }