From 06ef0348661571a3d153fe58462f8b3ca1f69032 Mon Sep 17 00:00:00 2001 From: "saarsena@gmail.com" Date: Sat, 18 Apr 2026 13:24:42 -0400 Subject: [PATCH] cli: add --help to genesis 2D CLI and reject unknown args Previously unknown flags were silently ignored; now they print usage to stderr and exit 2, matching the genesis3d behavior. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/genesis_main.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/genesis_main.c b/src/genesis_main.c index 6dbec6a..c50dcb6 100644 --- a/src/genesis_main.c +++ b/src/genesis_main.c @@ -148,6 +148,26 @@ static void print_summary(uint64_t seed, int depth, const run_stats_t *s) { s->floor_cells, s->connected, s->unreached); } +static void usage(FILE *f, const char *prog) { + fprintf(f, + "usage: %s [options]\n" + "\n" + "Generates a single Brogue-style 2D level and prints an ASCII map.\n" + "\n" + "options:\n" + " --seed N RNG seed (default 1234)\n" + " --depth N dungeon depth 1..26, biases lakes/machines (default 1)\n" + " --verify assert connectivity after each pipeline stage\n" + " --mark-unreached print '!' on passable cells BFS cannot reach from start\n" + " --verbose stream generator events to stderr\n" + " --quiet suppress ASCII map (summary only)\n" + " --emit=json, --json emit grid JSON to stdout instead of ASCII\n" + " --stress N run N seeds (from --stress-base) and report failures\n" + " --stress-base N starting seed for --stress (default 1)\n" + " -h, --help show this help and exit\n", + prog); +} + static int cmd_stress(int n, uint64_t base_seed, int depth) { grid_t g; int failures = 0; @@ -193,6 +213,13 @@ int main(int argc, char **argv) { g_mark_unreached = 1; } else if (!strcmp(argv[i], "--emit=json") || !strcmp(argv[i], "--json")) { g_emit_json = 1; + } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { + usage(stdout, argv[0]); + return 0; + } else { + fprintf(stderr, "unknown arg: %s\n", argv[i]); + usage(stderr, argv[0]); + return 2; } }