]> mj.ucw.cz Git - paperjam.git/commitdiff
Trivial auto-generated help
authorMartin Mares <mj@ucw.cz>
Sun, 1 Apr 2018 22:16:32 +0000 (00:16 +0200)
committerMartin Mares <mj@ucw.cz>
Sun, 1 Apr 2018 22:16:32 +0000 (00:16 +0200)
jam.h
paperjam.cc
parse.cc

diff --git a/jam.h b/jam.h
index 2917aef225a89473803db5c784929dfa2a29130c..c985502f745420505200d74573257c972e65ce69 100644 (file)
--- a/jam.h
+++ b/jam.h
@@ -105,6 +105,7 @@ vector<page *> run_command_list(list<cmd *> &cmds, vector<page *> &pages);
 // parse.cc
 
 void parse(const char *in, list<cmd *> &cmds);
+void help();
 
 // cmds.cc
 
index fa2c6ddaf63d266217998a14fb528025b6c7d79d..ba2bb3bf8bd6b55a3dea24f90da74cb85a27d39c 100644 (file)
@@ -148,6 +148,12 @@ static void process(list<cmd *> &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 <commands> <input> <output>\n");
index 3719a4e5ccbf1927ccfd6495d2cedbcd88c914d0..1869b3a76ef04345ffd4d0ead54f7bbe2314eba6 100644 (file)
--- a/parse.cc
+++ b/parse.cc
@@ -459,3 +459,29 @@ void parse(const char *in, list<cmd *> &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");
+    }
+}