示例#1
0
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;
    
}
示例#2
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;
}