aboutsummaryrefslogtreecommitdiff
path: root/src/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input.c')
-rw-r--r--src/input.c88
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;
}