aboutsummaryrefslogtreecommitdiff
path: root/src/io/input.c
diff options
context:
space:
mode:
authorJ08nY2017-02-16 21:31:50 +0100
committerJ08nY2017-02-16 21:31:50 +0100
commit7ae0d913d7bbfb286aaa9a5c9984e9bd7eb81df2 (patch)
treeb0f2d97310b9d0a3e4ba2e0a1cfbcf31d608383e /src/io/input.c
parent5d9d12811441930169b0517318dcf21c51b72e2d (diff)
downloadecgen-7ae0d913d7bbfb286aaa9a5c9984e9bd7eb81df2.tar.gz
ecgen-7ae0d913d7bbfb286aaa9a5c9984e9bd7eb81df2.tar.zst
ecgen-7ae0d913d7bbfb286aaa9a5c9984e9bd7eb81df2.zip
Diffstat (limited to 'src/io/input.c')
-rw-r--r--src/io/input.c47
1 files changed, 22 insertions, 25 deletions
diff --git a/src/io/input.c b/src/io/input.c
index 780e4d3..34aeb5a 100644
--- a/src/io/input.c
+++ b/src/io/input.c
@@ -2,24 +2,29 @@
* ecgen, tool for generating Elliptic curve domain parameters
* Copyright (C) 2017 J08nY
*/
+#define _POSIX_C_SOURCE 200809L
#include "input.h"
#include <parson/parson.h>
+#include "output.h"
FILE *in;
int delim;
-GEN fread_i(FILE *stream, const char *prompt, long bits) {
- if (prompt) {
- printf("%s ", prompt);
+GEN input_i(const char *prompt, long bits) {
+ if (prompt && out == stdout) {
+ fprintf(out, "%s ", prompt);
}
char *line = NULL;
size_t n = 0;
- ssize_t len = getdelim(&line, &n, delim, stream);
+ ssize_t len = getdelim(&line, &n, delim, in);
if (len == 1) {
free(line);
return gen_m1;
}
+ for (size_t i = 0, j = 0; (line[j] = line[i]); j += !isspace(line[i++]))
+ ;
+
pari_sp ltop = avma;
GEN in = strtoi(line);
free(line);
@@ -34,8 +39,8 @@ GEN fread_i(FILE *stream, const char *prompt, long bits) {
}
}
-GEN fread_prime(FILE *stream, const char *prompt, long bits) {
- GEN read = fread_i(stream, prompt, bits);
+GEN input_prime(const char *prompt, long bits) {
+ GEN read = input_i(prompt, bits);
if (equalii(read, gen_m1)) {
return read;
} else {
@@ -48,22 +53,18 @@ GEN fread_prime(FILE *stream, const char *prompt, long bits) {
}
}
-GEN fread_int(FILE *stream, const char *prompt, long bits) {
- return fread_i(stream, prompt, bits);
-}
+GEN input_int(const char *prompt, long bits) { return input_i(prompt, bits); }
-GEN fread_short(FILE *stream, const char *prompt) {
- return fread_i(stream, prompt, 16);
-}
+GEN input_short(const char *prompt) { return input_i(prompt, 16); }
-GEN fread_string(FILE *stream, const char *prompt) {
- if (prompt) {
- printf("%s ", prompt);
+GEN input_string(const char *prompt) {
+ if (prompt && out == stdout) {
+ fprintf(out, "%s ", prompt);
}
char *line = NULL;
size_t n = 0;
- ssize_t len = getdelim(&line, &n, delim, stream);
+ ssize_t len = getdelim(&line, &n, delim, in);
if (len == 1) {
free(line);
return strtoGENstr("");
@@ -75,24 +76,20 @@ GEN fread_string(FILE *stream, const char *prompt) {
return result;
}
-GEN fread_param(param_t param, FILE *stream, const char *prompt, long bits) {
+GEN input_param(param_t param, const char *prompt, long bits) {
switch (param) {
case PARAM_PRIME:
- return fread_prime(stream, prompt, bits);
+ return input_prime(prompt, bits);
case PARAM_INT:
- return fread_int(stream, prompt, bits);
+ return input_int(prompt, bits);
case PARAM_SHORT:
- return fread_short(stream, prompt);
+ return input_short(prompt);
case PARAM_STRING:
- return fread_string(stream, prompt);
+ return input_string(prompt);
}
return gen_m1;
}
-GEN read_param(param_t param, const char *prompt, long bits) {
- return fread_param(param, stdin, prompt, bits);
-}
-
void input_init(config_t *cfg) {
json_set_allocation_functions(pari_malloc, pari_free);