/* * 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 * . */ /* gepopt visibility for GLIBC */ #if !defined(__OpenBSD__) #define _DEFAULT_SOURCE #endif #include #include #include #include #include #include #include #include #include "util.h" int palette_main(int, char *[]); int julia_main(int, char *[]); static void usage(void) { fprintf(stderr, "Usage: %s [-s seed] [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 */ }