errval_t get_record(struct ast_object* ast, struct oct_query_state* sqs) { assert(ast != NULL); assert(sqs != NULL); struct skb_ec_terms sr; errval_t err = transform_record(ast, &sr); if (err_is_ok(err)) { // Calling get_object(Name, Attrs, Constraints, Y), print_object(Y). dident get_object = ec_did("get_first_object", 4); dident print_object = ec_did("print_object", 1); pword print_var = ec_newvar(); pword get_object_term = ec_term(get_object, sr.name, sr.attribute_list, sr.constraint_list, print_var); pword print_term = ec_term(print_object, print_var); ec_post_goal(get_object_term); ec_post_goal(print_term); err = run_eclipse(sqs); if (err_no(err) == SKB_ERR_GOAL_FAILURE) { err = err_push(err, OCT_ERR_NO_RECORD); } OCT_DEBUG(" get_record:\n"); debug_skb_output(sqs); } return err; }
void Winapi ec_post_string(const char *callstring) { ec_post_goal(ec_term(ec_.d.colon, ec_atom(ec_.d.kernel_sepia), ec_term(ec_did("exec_string",2), ec_string(callstring), ec_newvar()))); }
errval_t get_record_names(struct ast_object* ast, struct oct_query_state* dqs) { assert(ast != NULL); assert(dqs != NULL); struct skb_ec_terms sr; errval_t err = transform_record(ast, &sr); if (err_is_ok(err)) { // Calling findall(X, get_object(X, Attrs, Constraints, _), L), // prune_instances(L, PL), print_names(PL). dident prune_instances = ec_did("prune_instances", 2); dident findall = ec_did("findall", 3); dident get_object = ec_did("get_object", 4); dident print_names = ec_did("print_names", 1); pword var_l = ec_newvar(); pword var_pl = ec_newvar(); pword var_rec = ec_newvar(); pword get_object_term = ec_term(get_object, sr.name, sr.attribute_list, sr.constraint_list, var_rec); pword findall_term = ec_term(findall, var_rec, get_object_term, var_l); pword prune_results = ec_term(prune_instances, var_l, var_pl); pword print_names_term = ec_term(print_names, var_pl); ec_post_goal(findall_term); ec_post_goal(prune_results); ec_post_goal(print_names_term); err = run_eclipse(dqs); if (err_is_ok(err) && dqs->std_out.buffer[0] == '\0') { err = OCT_ERR_NO_RECORD; } else if (err_no(err) == SKB_ERR_GOAL_FAILURE) { assert(!"findall failed - should not happen!"); // see http://eclipseclp.org/doc/bips/kernel/allsols/findall-3.html } OCT_DEBUG(" get_record_names:\n"); debug_skb_output(dqs); } 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); }