From: Martin Mares Date: Sun, 1 Apr 2018 22:16:32 +0000 (+0200) Subject: Trivial auto-generated help X-Git-Tag: v0.1~36 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=2bc1cb0f16c0871198cad5f787656b6c9dc2f842;p=paperjam.git Trivial auto-generated help --- diff --git a/jam.h b/jam.h index 2917aef..c985502 100644 --- a/jam.h +++ b/jam.h @@ -105,6 +105,7 @@ vector run_command_list(list &cmds, vector &pages); // parse.cc void parse(const char *in, list &cmds); +void help(); // cmds.cc diff --git a/paperjam.cc b/paperjam.cc index fa2c6dd..ba2bb3b 100644 --- a/paperjam.cc +++ b/paperjam.cc @@ -148,6 +148,12 @@ static void process(list &cmds, const char *in_name, const char *out_name int main(int argc, char **argv) { + if (argc <= 1 || argc > 1 && !strcmp(argv[1], "--help")) + { + help(); + return 0; + } + if (argc != 4) { fprintf(stderr, "Usage: paperjam \n"); diff --git a/parse.cc b/parse.cc index 3719a4e..1869b3a 100644 --- a/parse.cc +++ b/parse.cc @@ -459,3 +459,29 @@ void parse(const char *in, list &cmds) debug_cmds(cmds); instantiate(cmds); } + +void help() +{ + for (int i=0; cmd_table[i].name; i++) + { + const cmd_def *def = &cmd_table[i]; + printf("%s\n", def->name); + + const arg_def *arg = def->arg_defs; + static const char * const type_names[] = { + "string", "int", "double", "dimen" + }; + while (arg->name) + { + printf("\t%s (%s)%s%s\n", + arg->name, + type_names[arg->type & AT_TYPE_MASK], + (arg->type & AT_MANDATORY) ? " [mandatory]" : "", + (arg->type & AT_POSITIONAL) ? " [positional]" : ""); + arg++; + } + + if (def->has_pipeline) + printf("\t{ pipeline }\n"); + } +}