Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 1 | #include "cache.h" |
| 2 | #include "parse-options.h" |
| 3 | |
| 4 | static int boolean = 0; |
Junio C Hamano | c4aca9c | 2008-07-30 12:53:45 -0700 | [diff] [blame] | 5 | static int integer = 0; |
| 6 | static unsigned long timestamp; |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 7 | static int abbrev = 7; |
| 8 | static int verbose = 0, dry_run = 0, quiet = 0; |
Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 9 | static char *string = NULL; |
| 10 | |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 11 | int length_callback(const struct option *opt, const char *arg, int unset) |
| 12 | { |
| 13 | printf("Callback: \"%s\", %d\n", |
| 14 | (arg ? arg : "not set"), unset); |
| 15 | if (unset) |
| 16 | return 1; /* do not support unset */ |
| 17 | |
Brandon Casey | 8caa3ac | 2008-08-13 19:48:57 -0500 | [diff] [blame] | 18 | *(int *)opt->value = strlen(arg); |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 19 | return 0; |
| 20 | } |
| 21 | |
Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 22 | int main(int argc, const char **argv) |
| 23 | { |
| 24 | const char *usage[] = { |
| 25 | "test-parse-options <options>", |
| 26 | NULL |
| 27 | }; |
| 28 | struct option options[] = { |
| 29 | OPT_BOOLEAN('b', "boolean", &boolean, "get a boolean"), |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 30 | OPT_BIT('4', "or4", &boolean, |
| 31 | "bitwise-or boolean with ...0100", 4), |
| 32 | OPT_GROUP(""), |
Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 33 | OPT_INTEGER('i', "integer", &integer, "get a integer"), |
| 34 | OPT_INTEGER('j', NULL, &integer, "get a integer, too"), |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 35 | OPT_SET_INT(0, "set23", &integer, "set integer to 23", 23), |
Junio C Hamano | c4aca9c | 2008-07-30 12:53:45 -0700 | [diff] [blame] | 36 | OPT_DATE('t', NULL, ×tamp, "get timestamp of <time>"), |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 37 | OPT_CALLBACK('L', "length", &integer, "str", |
| 38 | "get length of <str>", length_callback), |
| 39 | OPT_GROUP("String options"), |
Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 40 | OPT_STRING('s', "string", &string, "string", "get a string"), |
| 41 | OPT_STRING(0, "string2", &string, "str", "get another string"), |
Johannes Schindelin | 243e061 | 2007-11-05 13:15:21 +0000 | [diff] [blame] | 42 | OPT_STRING(0, "st", &string, "st", "get another string (pervert ordering)"), |
Pierre Habouzit | 3a9f0f4 | 2008-01-26 12:26:57 +0100 | [diff] [blame] | 43 | OPT_STRING('o', NULL, &string, "str", "get another string"), |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 44 | OPT_SET_PTR(0, "default-string", &string, |
| 45 | "set string to default", (unsigned long)"default"), |
| 46 | OPT_GROUP("Magic arguments"), |
Pierre Habouzit | 580d5bf | 2008-03-02 11:35:56 +0100 | [diff] [blame] | 47 | OPT_ARGUMENT("quux", "means --quux"), |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 48 | OPT_GROUP("Standard options"), |
| 49 | OPT__ABBREV(&abbrev), |
| 50 | OPT__VERBOSE(&verbose), |
| 51 | OPT__DRY_RUN(&dry_run), |
| 52 | OPT__QUIET(&quiet), |
Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 53 | OPT_END(), |
| 54 | }; |
| 55 | int i; |
| 56 | |
| 57 | argc = parse_options(argc, argv, options, usage, 0); |
| 58 | |
| 59 | printf("boolean: %d\n", boolean); |
Junio C Hamano | c4aca9c | 2008-07-30 12:53:45 -0700 | [diff] [blame] | 60 | printf("integer: %u\n", integer); |
| 61 | printf("timestamp: %lu\n", timestamp); |
Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 62 | printf("string: %s\n", string ? string : "(not set)"); |
Stephan Beyer | 010a2da | 2008-06-22 17:04:26 +0200 | [diff] [blame] | 63 | printf("abbrev: %d\n", abbrev); |
| 64 | printf("verbose: %d\n", verbose); |
| 65 | printf("quiet: %s\n", quiet ? "yes" : "no"); |
| 66 | printf("dry run: %s\n", dry_run ? "yes" : "no"); |
Johannes Schindelin | beb4743 | 2007-10-13 17:34:45 +0100 | [diff] [blame] | 67 | |
| 68 | for (i = 0; i < argc; i++) |
| 69 | printf("arg %02d: %s\n", i, argv[i]); |
| 70 | |
| 71 | return 0; |
| 72 | } |