diff options
Diffstat (limited to 'fractal-gen.c')
-rw-r--r-- | fractal-gen.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/fractal-gen.c b/fractal-gen.c index 0d2e1a3..c4be171 100644 --- a/fractal-gen.c +++ b/fractal-gen.c @@ -37,6 +37,8 @@ #include <sys/mman.h> #include <string.h> +struct frame f; + static struct section_generator generators[] = { { "mandelbrot-gen" , &generate_mandelbrot_section }, { "burning-ship-gen" , &generate_burning_ship_section }, @@ -48,6 +50,13 @@ char *ram_units[] = { }; +void +defaultsd(double *who, double def) +{ + if (isnan(*who)) + *who = def; +} + int main(int argc, char **argv) { @@ -129,8 +138,12 @@ main(int argc, char **argv) munmap(sections, sizeof(data_section)*cores); return 1; } + /* FIXME repetition */ sections[i].core = i; sections[i].width = width; + sections[i].parent_frame.top = f.top; + sections[i].parent_frame.left = f.left; + sections[i].parent_frame.scale = f.scale; sections[i].datasize = toalloc; fprintf(stderr, " -> Thread %lu\r", i); pthread_create(§ions[i].thread, NULL, generator, &(sections[i])); @@ -195,20 +208,31 @@ parse_args(int argc, char **argv) clust_id = 0; clust_total = 1; + f.left = nan(""); + f.top = nan(""); + f.scale = nan(""); + /* bail out early if no arguments are supplied */ if (argc <= 1) return 1; - while ( (opt = getopt(argc, argv, "s:i:e:c:t:N:T:")) != -1 ) { + while ( (opt = getopt(argc, argv, "s:i:e:c:t:N:T:x:y:z:")) != -1 ) { switch (opt) { case 's': size = atoi(optarg); break; case 'i': iterat = atoi(optarg); break; case 'e': power = atof(optarg); break; + case 'c': cores = atoi(optarg); break; case 't': thread_mult = atof(optarg); break; + case 'N': clust_id = atoi(optarg); break; case 'T': clust_total = atoi(optarg); break; + + case 'x': f.left = atof(optarg); break; + case 'y': f.top = atof(optarg); break; + case 'z': f.scale = atof(optarg); break; + /* redundant case for '?', but explicitness is best */ case '?': default: |