84 lines
1.7 KiB
C
84 lines
1.7 KiB
C
/*
|
|
* fractal
|
|
* Written in 2020 by Lucas
|
|
* CC0 1.0 Universal/Public domain - No rights reserved
|
|
*
|
|
* To the extent possible under law, the author(s) have dedicated all
|
|
* copyright and related and neighboring rights to this software to the
|
|
* public domain worldwide. This software is distributed without any
|
|
* warranty. You should have received a copy of the CC0 Public Domain
|
|
* Dedication along with this software. If not, see
|
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
|
*/
|
|
/* gepopt visibility for GLIBC */
|
|
#if !defined(__OpenBSD__)
|
|
#define _DEFAULT_SOURCE
|
|
#endif
|
|
|
|
#include <errno.h>
|
|
#include <inttypes.h>
|
|
#include <limits.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <unistd.h>
|
|
|
|
#include "util.h"
|
|
|
|
int palette_main(int, char *[]);
|
|
int julia_main(int, char *[]);
|
|
|
|
static void
|
|
usage(void)
|
|
{
|
|
fprintf(stderr, "Usage: %s [-s seed] <prog> [prog_args]\n",
|
|
xgetprogname());
|
|
exit(1);
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
char *end;
|
|
intmax_t v;
|
|
long seed;
|
|
int ch;
|
|
|
|
seed = time(NULL);
|
|
while ((ch = getopt(argc, argv, "s:")) != -1)
|
|
switch (ch) {
|
|
case 's':
|
|
errno = 0;
|
|
v = strtoimax(optarg, &end, 0);
|
|
if (*end != '\0' || errno != 0 || v > LONG_MAX ||
|
|
v < LONG_MIN) {
|
|
fprintf(stderr, "-s: Invalid value \"%s\".",
|
|
optarg);
|
|
exit(1);
|
|
}
|
|
seed = (long)v;
|
|
break;
|
|
default:
|
|
usage();
|
|
}
|
|
argc -= optind;
|
|
argv += optind;
|
|
optind = 1;
|
|
|
|
if (argc == 0)
|
|
usage();
|
|
|
|
fprintf(stderr, "seed=%ld\n", seed);
|
|
xsrand48(seed);
|
|
|
|
if (strcmp(argv[0], "palette") == 0)
|
|
return palette_main(argc, argv);
|
|
else if (strcmp(argv[0], "julia") == 0)
|
|
return julia_main(argc, argv);
|
|
else
|
|
usage();
|
|
|
|
return 1; /* UNREACHABLE */
|
|
}
|