]> git.cworth.org Git - ttt/blobdiff - src/ttt-args.c
2005-12-08 Carl Worth <cworth@cworth.org>
[ttt] / src / ttt-args.c
index 302e3011de717c6ffd14876cde366f63e8e3a73e..f367716c6b70e8e28326d1223c3d1e914424a54e 100644 (file)
 
 static const char TTT_ARGS_PROGRAM_VERSION[] = VERSION;
 static const char TTT_ARGS_PROGRAM_DESCRIPTION[] = "client-server tic-tac-toe game";
-static const char TTT_ARGS_PROGRAM_BUG_ADDRESS[] = "<cworth@cworth.org>";
+static const char TTT_ARGS_PROGRAM_BUG_ADDRESS[] = "<carl@theworths.org>";
 
-/* XXX: SAMPLE: */
-static char TTT_ARGS_PROGRAM_ARGDOC[] = "<file>";
+static char TTT_ARGS_PROGRAM_ARGDOC[] = "";
 
 /* XXX: getopt is rather annoying in that you must maintain a
  * string-encoding of the options in addition to the table. For
@@ -46,14 +45,24 @@ static char TTT_ARGS_PROGRAM_ARGDOC[] = "<file>";
  * strings, so the args_help function below must also be maintained
  * manually.
  */
-static char ttt_args_optstring[] = "hV";
+
+enum {
+    TTT_ARGS_VAL_LOG_FILE = 256,
+    TTT_ARGS_VAL_PID_FILE,
+    TTT_ARGS_VAL_HELP,
+    TTT_ARGS_VAL_VERSION,
+};
+
+static char ttt_args_optstring[] = "dh:p:";
 static struct option ttt_args_options[] = {
     /* name,           has_arg,        flag,   val */
-    /* XXX: SAMPLE:
-    {"display",                1,              0,      'd'},
-    */
-    {"help",           0,              0,      'h'},
-    {"version",                0,              0,      'V'},
+    {"host",           1,              0,      'h'},
+    {"port",           1,              0,      'p'},
+    {"detach",         0,              0,      'd'},
+    {"log-file",       1,              0,      TTT_ARGS_VAL_LOG_FILE},
+    {"pid-file",       1,              0,      TTT_ARGS_VAL_PID_FILE},
+    {"help",           0,              0,      TTT_ARGS_VAL_HELP},
+    {"version",                0,              0,      TTT_ARGS_VAL_VERSION},
     { 0 }
 };
 
@@ -63,31 +72,46 @@ ttt_args_help (const char *argv0)
     printf ("Usage: %s [OPTION] %s\n", argv0, TTT_ARGS_PROGRAM_ARGDOC);
     printf ("%s - %s\n", argv0, TTT_ARGS_PROGRAM_DESCRIPTION);
     puts ("");
-    printf ("  -h, --help\t\tGive this help list\n");
-    printf ("  -V, --version\t\tPrint program version\n");
-    /* XXX: SAMPLE:
-    printf ("  -d, --display=DISPLAY\tX server to connect to");
-    */
+    printf ("Options that are common to both client and server:\n");
+    puts ("");
+    printf ("  -h HOST, --host=HOST\tHost to connect/bind to [%s]\n",
+           TTT_ARGS_HOST_DEFAULT);
+    printf ("  -p PORT, --port=PORT\tPort to connect/bind to [%s]\n",
+           TTT_ARGS_PORT_DEFAULT);
+    printf ("           --help\tGive this help list\n");
+    printf ("           --version\tPrint program version\n");
+    puts ("");
+    printf ("Options that are specific to the server:\n");
+    puts ("");
+    printf ("           --log-file=FILE\tFile to use for logging [stderr]\n");
+    printf ("       -d, --detach\tDetach and daemonize\n");
+    printf ("           --pid-file=FILE\tFile in which to save PID (if -d given)\n"
+           "                          \t[%s]\n",
+           TTT_ARGS_PID_FILE_DEFAULT);
 }
 
+#if 0
 static void
 ttt_args_usage (const char *argv0)
 {
     printf ("Usage: %s [OPTION] %s\n", argv0, TTT_ARGS_PROGRAM_ARGDOC);
     printf ("Try `%s --help' for more information.\n", argv0);
 }
+#endif
 
 int
-ttt_args_parse(ttt_args_t *args, int argc, char *argv[], int *args_first)
+ttt_args_parse(ttt_args_t *args, int argc, char *argv[])
 {
     char *argv0_copy = strdup (argv[0]);
     char *argv0 = basename (argv0_copy);
 
     int c;
 
-    /* XXX: SAMPLE:
-    args->display = NULL;
-    */
+    args->host = TTT_ARGS_HOST_DEFAULT;
+    args->port = TTT_ARGS_PORT_DEFAULT;
+    args->log_file = TTT_ARGS_LOG_FILE_DEFAULT;
+    args->detach = FALSE;
+    args->pid_file = TTT_ARGS_PID_FILE_DEFAULT;
 
     while (1) {
        c = getopt_long (argc, argv, ttt_args_optstring, ttt_args_options, NULL);
@@ -95,23 +119,33 @@ ttt_args_parse(ttt_args_t *args, int argc, char *argv[], int *args_first)
            break;
 
        switch (c) {
-       /* XXX: SAMPLE:
+       case 'h':
+           args->host = optarg;
+           break;
+       case 'p':
+           args->port = optarg;
+           break;
+       case TTT_ARGS_VAL_LOG_FILE:
+           args->log_file = optarg;
+           break;
        case 'd':
-           args->display = optarg;
+           args->detach = TRUE;
            break;
-       */
-       case 'V':
+       case TTT_ARGS_VAL_PID_FILE:
+           args->pid_file = optarg;
+           break;
+       case TTT_ARGS_VAL_VERSION:
            printf ("%s\n", VERSION);
            exit (0);
            break;
 
-       case 'h':
-           args_help (argv0);
+       case TTT_ARGS_VAL_HELP:
+           ttt_args_help (argv0);
            exit (0);
            break;
 
        case '?':
-           args_help (argv0);
+           ttt_args_help (argv0);
            exit (1);
            break;
 
@@ -121,17 +155,6 @@ ttt_args_parse(ttt_args_t *args, int argc, char *argv[], int *args_first)
        }
     }
 
-    /* XXX: SAMPLE:
-    if (argc - optind == 1) {
-       args->file = argv[optind];
-    } else {
-       args_usage (argv0);
-    }
-    */
-
-    if (args_first)
-       *args_first = optind;
-
     free (argv0_copy);
 
     return 0;