]> git.cworth.org Git - grrobot/blob - src/args.c
Initial revision
[grrobot] / src / args.c
1 /* args.c - Parse command-line arguments for grrobot using argp
2  *
3  * Copyright © 2003 Carl Worth
4  *
5  * Permission to use, copy, modify, distribute, and sell this software
6  * and its documentation for any purpose is hereby granted without
7  * fee, provided that the above copyright notice appear in all copies
8  * and that both that copyright notice and this permission notice
9  * appear in supporting documentation, and that the name of Carl Worth
10  * not be used in advertising or publicity pertaining to distribution
11  * of the software without specific, written prior permission.
12  * Carl Worth makes no representations about the suitability of this
13  * software for any purpose.  It is provided "as is" without express
14  * or implied warranty.
15  * 
16  * CARL WORTH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
18  * NO EVENT SHALL CARL WORTH BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
20  * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
21  * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
22  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23  *
24  * Author: Carl Worth <carl@theworths.org>
25  */
26
27 #include <stdlib.h>
28 #include <argp.h>
29
30 #include "args.h"
31
32 const char *argp_program_version = "grrobot " VERSION;
33
34 const char *argp_program_bug_address = "<carl@theworths.org>";
35
36 static char doc[] = "grrobot - Ricochet Robot using GTK+ and Xr";
37
38 /* XXX: SAMPLE: */
39 static char args_doc[] = "<file>";
40
41 static struct argp_option options[] = {
42     /* name,            key, arg,       flags, doc */
43     {"host",            'h', "HOST", 0, "Host running RR server"},
44     {"port",            'p', "PORT", 0, "Port of server"},
45     {"user",            'u', "USERNAME", 0, "Username for conection"},
46     {"game",            'g', "GAME", 0, "Game to join"},
47     { 0 }
48 };
49
50 static error_t
51 parse_opt (int key, char *arg, struct argp_state *state)
52 {
53     struct args *args = state->input;
54
55     switch (key) {
56     case 'h':
57         args->host = arg;
58         break;
59     case 'p':
60         args->port = arg;
61         break;
62     case 'u':
63         args->user = arg;
64         break;
65     case 'g':
66         args->game = arg;
67         break;
68
69     case ARGP_KEY_ARG:
70         argp_usage (state);
71         break;
72
73 /*
74     case ARGP_KEY_END:
75         if (state->arg_num < 1)
76             argp_usage (state);
77         break;
78 */
79
80     default:
81         return ARGP_ERR_UNKNOWN;
82     }
83
84     return 0;
85 }
86             
87 static struct argp argp = { options, parse_opt, args_doc, doc };
88
89 error_t
90 args_parse(args_t *args, int argc, char *argv[])
91 {
92     args->host = getenv ("RR_HOST");
93     if (args->host == NULL)
94         args->host = ARGS_HOST_DEFAULT;
95     args->port = getenv ("RR_PORT");
96     if (args->port == NULL)
97         args->port = ARGS_PORT_DEFAULT;
98     args->user = getenv ("USER");
99     if (args->user == NULL)
100         args->user = ARGS_USER_DEFAULT;
101     args->game = getenv ("RR_GAME");
102     if (args->game == NULL)
103         args->game = ARGS_GAME_DEFAULT;
104
105     return argp_parse (&argp, argc, argv, 0, 0, args);
106 }