diff options
Diffstat (limited to 'src/input.c')
| -rw-r--r-- | src/input.c | 88 |
1 files changed, 25 insertions, 63 deletions
diff --git a/src/input.c b/src/input.c index e49eae6..beff9e5 100644 --- a/src/input.c +++ b/src/input.c @@ -4,72 +4,13 @@ */ #include "input.h" -/* - * - *char *prime_prompts[] = {"p:", "a:", "b:"}; - param_t prime_params[] = {PARAM_PRIME, PARAM_INT, PARAM_INT}; - - char *binary_prompts[] = {"e1:", "e2:", "e3:", "a:", "b:"}; - param_t binary_params[] = {PARAM_SHORT, PARAM_SHORT, PARAM_SHORT, PARAM_INT, - PARAM_INT}; - - char **prompts; - param_t *params; - size_t length; - if (cfg.prime_field) { - prompts = prime_prompts; - params = prime_params; - length = 3; - } else { - prompts = binary_prompts; - params = binary_params; - length = 5; - } - GEN field; - GEN domain[length]; - - if (cfg.random) { - //random domain, might not define a curve... check disc - if (cfg.prime_field) { - field = ifield_prime(cfg.bits); - } else { - field = ifield_binary(cfg.bits); - } - } else { - for (size_t i = 0; i < length; ++i) { - domain[i] = fread_param(params[i], in, prompts[i], cfg.bits, in == - stdin ? '\n' : ','); - if (equalii(domain[i], gen_m1)) { - fprintf(stderr, "Whoops?"); - return quit(1); - } - } - if (cfg.prime_field) { - field = field_prime(domain[0]); - } else { - field = field_binary(cfg.bits, domain[0], domain[1], domain[2]); - } - } - pari_fprintf(out, "%Ps", field_params(field)); - - if (cfg.prime_field) { - GEN field = prime_field(p); - GEN curve = prime_weierstrass(a, b, field, 0); - } else if (cfg.binary_field) { - GEN e[3]; - for (size_t i = 0; i < 3; ++i) { - char prompt[] = {'e', (char) ('1' + i), ':', 0}; - e[i] = read_short(prompt, '\n'); - } - GEN a = read_int("a:", cfg.bits, '\n'); - - GEN field = binary_field(cfg.bits, e[0], e[1], e[2]); - } -*/ +FILE *in; GEN fread_i(FILE *stream, const char *prompt, long bits, int delim, GEN (*rand_func)(long)) { - printf("%s ", prompt); + if (prompt) { + printf("%s ", prompt); + } char *line = NULL; size_t n = 0; @@ -118,6 +59,25 @@ GEN fread_short(FILE *stream, const char *prompt, int delim) { return fread_i(stream, prompt, 16, delim, NULL); } +GEN fread_string(FILE *stream, const char *prompt, int delim) { + if (prompt) { + printf("%s ", prompt); + } + char *line = NULL; + size_t n = 0; + + ssize_t len = getdelim(&line, &n, delim, stream); + if (len == 1) { + free(line); + return strtoGENstr(""); + } + + line[len - 1] = 0; + GEN result = strtoGENstr(line); + free(line); + return result; +} + GEN fread_param(param_t param, FILE *stream, const char *prompt, long bits, int delim) { switch (param) { @@ -127,6 +87,8 @@ GEN fread_param(param_t param, FILE *stream, const char *prompt, long bits, return fread_int(stream, prompt, bits, delim); case PARAM_SHORT: return fread_short(stream, prompt, delim); + case PARAM_STRING: + return fread_string(stream, prompt, delim); } return gen_m1; } |
