1 #include <errno.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <dieharder/libdieharder.h>
5
6 /*
7 * This is a wrapping of stdin.
8 */
9
10 static unsigned long int stdin_input_raw_get (void *vstate);
11 static double stdin_input_raw_get_double (void *vstate);
12 static void stdin_input_raw_set (void *vstate, unsigned long int s);
13
14 static unsigned long int
stdin_input_raw_get(void * vstate)15 stdin_input_raw_get (void *vstate)
16 {
17 unsigned int j;
18 if (fread(&j,sizeof(j),1,stdin) != 1) {
19 if (feof(stdin)) {
20 fprintf(stderr,"# stdin_input_raw(): Error: EOF\n");
21 } else {
22 fprintf(stderr,"# stdin_input_raw(): Error: %s\n", strerror(errno));
23 }
24 exit(0);
25 }
26 /* printf("raw: %10u\n",j); */
27 return j;
28 }
29
30 static double
stdin_input_raw_get_double(void * vstate)31 stdin_input_raw_get_double (void *vstate)
32 {
33 return stdin_input_raw_get(vstate) / (double)UINT_MAX;
34 }
35
36 static void
stdin_input_raw_set(void * vstate,unsigned long int s)37 stdin_input_raw_set (void *vstate, unsigned long int s)
38 {
39 /* empty */
40 }
41
42 static const gsl_rng_type stdin_input_raw_type =
43 {"stdin_input_raw", /* name */
44 UINT_MAX, /* RAND_MAX */
45 0, /* RAND_MIN */
46 0,
47 stdin_input_raw_set,
48 stdin_input_raw_get,
49 stdin_input_raw_get_double};
50
51 const gsl_rng_type *gsl_rng_stdin_input_raw = &stdin_input_raw_type;
52