void run_scp_program(sc_memory_context *context, scp_operand *scp_program) { scp_operand arc1, arc2, quest, params; MAKE_DEFAULT_ARC_ASSIGN(arc1); MAKE_DEFAULT_ARC_ASSIGN(arc2); MAKE_DEFAULT_NODE_ASSIGN(quest); scp_program->param_type = SCP_FIXED; genElStr5(context, &quest, &arc1, scp_program, &arc2, ordinal_rrels + 1); quest.param_type = SCP_FIXED; MAKE_DEFAULT_NODE_ASSIGN(params); genElStr5(context, &quest, &arc1, ¶ms, &arc2, ordinal_rrels + 2); set_author(context, &quest, &abstract_scp_machine); genElStr3(context, &question_scp_interpretation_request, &arc1, &quest); genElStr3(context, &question_initiated, &arc1, &quest); }
void set_author(sc_memory_context *context, scp_operand *quest, scp_operand *author) { scp_operand authors, arc1, arc3; MAKE_DEFAULT_ARC_ASSIGN(arc1); MAKE_COMMON_ARC_ASSIGN(arc3); MAKE_DEFAULT_NODE_ASSIGN(authors); genElStr5(context, &authors, &arc3, quest, &arc1, &nrel_authors); authors.param_type = SCP_FIXED; genElStr3(context, &authors, &arc1, author); }
sc_result preprocess_scp_procedure(const sc_event *event, sc_addr arg) { scp_operand arc1, arc2, arc3, scp_procedure_node, node1, scp_procedure_params, scp_procedure_consts, scp_procedure_copying_consts, scp_procedure_vars, scp_procedure_operators, scp_procedure_operators_copying_pattern; MAKE_DEFAULT_OPERAND_FIXED(arc1); MAKE_DEFAULT_ARC_ASSIGN(arc2); arc1.addr = arg; arc1.element_type = scp_type_arc_pos_const_perm; MAKE_DEFAULT_NODE_ASSIGN(node1); MAKE_DEFAULT_OPERAND_ASSIGN(scp_procedure_node); if (SCP_RESULT_TRUE != ifVarAssign(s_default_ctx, &arc1)) { return SC_RESULT_ERROR; } if (SCP_RESULT_TRUE != ifType(s_default_ctx, &arc1)) { return SC_RESULT_OK; } if (SCP_RESULT_TRUE != searchElStr3(s_default_ctx, &node1, &arc1, &scp_procedure_node)) { return SCP_RESULT_ERROR; } scp_procedure_node.param_type = SCP_FIXED; if (SCP_RESULT_TRUE != ifVarAssign(s_default_ctx, &scp_procedure_node)) { return SC_RESULT_ERROR; } arc1.erase = SCP_TRUE; eraseEl(s_default_ctx, &arc1); MAKE_DEFAULT_ARC_ASSIGN(arc1); MAKE_COMMON_ARC_ASSIGN(arc3); if (SCP_RESULT_TRUE == searchElStr3(s_default_ctx, &prepared_scp_program, &arc1, &scp_procedure_node)) { return SC_RESULT_OK; } //Debug info printf("PREPROCESSING: "); MAKE_DEFAULT_OPERAND_ASSIGN(node1); searchElStr5(s_default_ctx, &scp_procedure_node, &arc3, &node1, &arc2, &nrel_system_identifier); printNl(s_default_ctx, &node1); MAKE_DEFAULT_OPERAND_ASSIGN(scp_procedure_operators); searchElStr5(s_default_ctx, &scp_procedure_node, &arc1, &scp_procedure_operators, &arc2, &rrel_operators); scp_procedure_operators.param_type = SCP_FIXED; MAKE_DEFAULT_OPERAND_ASSIGN(scp_procedure_params); searchElStr5(s_default_ctx, &scp_procedure_node, &arc1, &scp_procedure_params, &arc2, &rrel_params); scp_procedure_params.param_type = SCP_FIXED; MAKE_DEFAULT_NODE_ASSIGN(scp_procedure_consts); genElStr5(s_default_ctx, &scp_procedure_node, &arc3, &scp_procedure_consts, &arc2, &nrel_scp_program_const); scp_procedure_consts.param_type = SCP_FIXED; MAKE_DEFAULT_NODE_ASSIGN(scp_procedure_copying_consts); genElStr5(s_default_ctx, &scp_procedure_node, &arc3, &scp_procedure_copying_consts, &arc2, &nrel_scp_program_copied_const); scp_procedure_copying_consts.param_type = SCP_FIXED; MAKE_DEFAULT_NODE_ASSIGN(scp_procedure_vars); genElStr5(s_default_ctx, &scp_procedure_node, &arc3, &scp_procedure_vars, &arc2, &nrel_scp_program_var); scp_procedure_vars.param_type = SCP_FIXED; MAKE_DEFAULT_NODE_ASSIGN(scp_procedure_operators_copying_pattern); genElStr5(s_default_ctx, &scp_procedure_node, &arc3, &scp_procedure_operators_copying_pattern, &arc2, &nrel_template_of_scp_process_creation); scp_procedure_operators_copying_pattern.param_type = SCP_FIXED; if (SCP_RESULT_TRUE == gen_system_structures(s_default_ctx, &scp_procedure_operators, &scp_procedure_params, &scp_procedure_vars, &scp_procedure_consts, &scp_procedure_copying_consts, &scp_procedure_operators_copying_pattern)) { genElStr3(s_default_ctx, &prepared_scp_program, &arc1, &scp_procedure_node); //printf("PREPROCESSING FINISHED\n"); return SC_RESULT_OK; } else { return SC_RESULT_ERROR; } }