static int __init calc_simple_test_init(void) { int result; //variable names and placeholer for their values const char* vars[] = {"x", "y"}; kedr_calc_int_t values[2]; // kedr_calc_t* calc = NULL; if(expr == NULL || x_str == NULL || y_str == NULL) { pr_err("Parameters 'expr', 'x' and 'y' should be passed to the module.\n"); return -1; } pr_debug("Expression is '%s'.", expr); calc = kedr_calc_parse(expr, all_constants_size, all_constants, 2, vars, 0, NULL); if(calc == NULL) { printk(KERN_ERR "Cannot parse expression for some reason.\n"); return -1; } if(evaluate_str(x_str, &values[0])) { printk(KERN_ERR "Cannot evaluate 'x'\n"); kedr_calc_delete(calc); return -1; } if(evaluate_str(y_str, &values[1])) { pr_err("Cannot evaluate 'y'\n"); kedr_calc_delete(calc); return -1; } result = kedr_calc_evaluate(calc, values); kedr_calc_delete(calc); snprintf(str_result, sizeof(str_result), "%d", result); return 0; }
int main(int argc, char *argv[]) { char *cmd; interactive = argc==1; cmd = nullptr; out_phys = fopen("/tmp/ep2.mem", "wb+"); out_virt = fopen("/tmp/ep2.vir", "wb+"); if (!interactive) parse(argv[1]); using_history(); while (true) { cmd = readline(PROMPT); add_history(cmd); extract_args(cmd); switch(evaluate_str(args_table[0])) { case evaluate_str("carrega"): parse(args_table[1]); break; case evaluate_str("espaco"): set_mem_mgr(atoi(args_table[1])); break; case evaluate_str("substitui"): set_page_mgr(atoi(args_table[1])); break; case evaluate_str("executa"): run_mem_mgr(atoi(args_table[1])); break; case evaluate_str("sai"): goto cleanup; break; default: fputs("Erro.\n", stderr); break; } delete cmd; for (int i=0;args_table[i]!=NULL;++i) { delete[] args_table[i]; args_table[i] = NULL; } } cleanup: fclose(out_phys); fclose(out_virt); return 0; }