aboutsummaryrefslogtreecommitdiff
path: root/src/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input.c')
-rw-r--r--src/input.c129
1 files changed, 75 insertions, 54 deletions
diff --git a/src/input.c b/src/input.c
index 441fd47..e49eae6 100644
--- a/src/input.c
+++ b/src/input.c
@@ -7,67 +7,68 @@
/*
*
*char *prime_prompts[] = {"p:", "a:", "b:"};
- param_t prime_params[] = {PARAM_PRIME, PARAM_INT, PARAM_INT};
+ 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 *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 (args.prime_field) {
- prompts = prime_prompts;
- params = prime_params;
- length = 3;
- } else {
- prompts = binary_prompts;
- params = binary_params;
- length = 5;
- }
- GEN field;
- GEN domain[length];
+ 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 (args.random) {
- //random domain, might not define a curve... check disc
- if (args.prime_field) {
- field = ifield_prime(args.bits);
- } else {
- field = ifield_binary(args.bits);
- }
- } else {
- for (size_t i = 0; i < length; ++i) {
- domain[i] = fread_param(params[i], in, prompts[i], args.bits, in == stdin ? '\n' : ',');
- if (equalii(domain[i], gen_m1)) {
- fprintf(stderr, "Whoops?");
- return quit(1);
- }
- }
- if (args.prime_field) {
- field = field_prime(domain[0]);
- } else {
- field = field_binary(args.bits, domain[0], domain[1], domain[2]);
- }
- }
- pari_fprintf(out, "%Ps", field_params(field));
+ 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 (args.prime_field) {
- GEN field = prime_field(p);
- GEN curve = prime_weierstrass(a, b, field, 0);
- } else if (args.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:", args.bits, '\n');
+ 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(args.bits, e[0], e[1], e[2]);
- }
+ GEN field = binary_field(cfg.bits, e[0], e[1], e[2]);
+ }
*/
-
GEN fread_i(FILE *stream, const char *prompt, long bits, int delim,
- GEN (*rand_func)(long)) {
+ GEN (*rand_func)(long)) {
printf("%s ", prompt);
char *line = NULL;
size_t n = 0;
@@ -117,7 +118,8 @@ GEN fread_short(FILE *stream, const char *prompt, int delim) {
return fread_i(stream, prompt, 16, delim, NULL);
}
-GEN fread_param(param_t param, FILE *stream, const char *prompt, long bits, int delim) {
+GEN fread_param(param_t param, FILE *stream, const char *prompt, long bits,
+ int delim) {
switch (param) {
case PARAM_PRIME:
return fread_prime(stream, prompt, bits, delim);
@@ -133,3 +135,22 @@ GEN read_param(param_t param, const char *prompt, long bits, int delim) {
return fread_param(param, stdin, prompt, bits, delim);
}
+FILE *input_open(const char *input) {
+ if (input) {
+ FILE *in = fopen(input, "r");
+ if (!in) {
+ // fallback to stdin or quit?
+ in = stdin;
+ perror("Failed to open input file.");
+ }
+ return in;
+ } else {
+ return stdin;
+ }
+}
+
+void input_close(FILE *in) {
+ if (in != NULL && in != stdout) {
+ fclose(in);
+ }
+}