X-Git-Url: https://git.cworth.org/git?p=ttt;a=blobdiff_plain;f=src%2Fttt-args.c;h=0f3e8fed47839a1ef7dbc042c81dfff2eb684e9c;hp=302e3011de717c6ffd14876cde366f63e8e3a73e;hb=3dfae8f4b1127a62f3acc299683a8fbd63b908df;hpb=c425d769ad013c2f76bd15e433fbda4e66436e05 diff --git a/src/ttt-args.c b/src/ttt-args.c index 302e301..0f3e8fe 100644 --- a/src/ttt-args.c +++ b/src/ttt-args.c @@ -29,10 +29,9 @@ 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[] = ""; +static const char TTT_ARGS_PROGRAM_BUG_ADDRESS[] = ""; -/* XXX: SAMPLE: */ -static char TTT_ARGS_PROGRAM_ARGDOC[] = ""; +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,25 @@ static char TTT_ARGS_PROGRAM_ARGDOC[] = ""; * 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:u:"; 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'}, + {"user", 1, 0, 'u'}, + {"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 +73,48 @@ 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 (" -u USER, --user=USER\tUser the server should run as.\n"); + 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->user = NULL; + 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 +122,36 @@ 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 'u': + args->user = optarg; + break; + case TTT_ARGS_VAL_LOG_FILE: + args->log_file = optarg; + break; case 'd': - args->display = optarg; + args->detach = TRUE; + break; + case TTT_ARGS_VAL_PID_FILE: + args->pid_file = optarg; break; - */ - case 'V': + 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 +161,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;