Wed, 28 May 2003 23:48:16 +0200
trunk: changeset 57
License changed to Artistic/LGPL dual license.
| 5 | 1 | /* |
| 2 | * libtu/optparser.h | |
| 3 | * | |
| 36 | 4 | * Copyright (c) Tuomo Valkonen 1999-2002. |
| 53 | 5 | * |
| 6 | * You may distribute and modify this library under the terms of either | |
| 7 | * the Clarified Artistic License or the GNU LGPL, version 2.1 or later. | |
| 5 | 8 | */ |
| 9 | ||
| 8 | 10 | #ifndef LIBTU_OPTPARSER_H |
| 11 | #define LIBTU_OPTPARSER_H | |
| 5 | 12 | |
| 13 | #include "types.h" | |
| 14 | ||
| 15 | ||
| 12 | 16 | #define OPT_ID_NOSHORT_FLAG 0x10000 |
| 17 | #define OPT_ID_RESERVED_FLAG 0x20000 | |
| 18 | ||
| 19 | #define OPT_ID(X) ((X)|OPT_ID_NOSHORT_FLAG) | |
| 20 | #define OPT_ID_RESERVED(X) ((X)|OPT_ID_RESERVED_FLAG) | |
| 5 | 21 | |
| 22 | /* OPTP_CHAIN is the normal behavior, i.e. single-letter options can be | |
| 23 | * "chained" together: 'lr -lR'. Use for normal command line programs. | |
| 24 | * OPTP_MIDLONG allows '-display foo' -like args but disables chaining | |
| 25 | * of single-letter options. X programs should probably use this. | |
| 26 | * OPTP_IMMEDIATE allows immediate arguments (-I/usr/include) (and disables | |
| 27 | * chaining and midlong options). | |
| 28 | * OPTP_NO_DASH is the same as OPTP_CHAIN but allows the dash to be omitted | |
| 29 | * for 'tar xzf foo' -like behavior. | |
| 30 | * Long '--foo=bar' options are supported in all of the modes. | |
| 31 | */ | |
| 32 | ||
| 33 | enum{ | |
| 34 | OPTP_CHAIN=0, | |
| 12 | 35 | OPTP_DEFAULT=0, |
| 5 | 36 | OPTP_MIDLONG=1, |
| 37 | OPTP_IMMEDIATE=2, | |
| 38 | OPTP_NO_DASH=3 | |
| 39 | }; | |
| 40 | ||
| 41 | enum{ | |
| 42 | OPT_ARG=1, /* option has an argument */ | |
| 43 | OPT_OPT_ARG=3 /* option may have an argument */ | |
| 44 | }; | |
| 45 | ||
| 46 | ||
| 39 | 47 | #define END_OPTPARSEROPTS {0, NULL, 0, NULL, NULL} |
| 37 | 48 | |
| 12 | 49 | typedef struct _OptParserOpt{ |
| 5 | 50 | int optid; |
| 51 | const char *longopt; | |
| 52 | int flags; | |
| 12 | 53 | const char *argname; |
| 54 | const char *descr; | |
| 5 | 55 | } OptParserOpt; |
| 56 | ||
| 57 | ||
| 12 | 58 | typedef struct _OptParserCommonInfo{ |
| 59 | const char *version; | |
| 60 | const char *usage_tmpl; | |
| 61 | const char *about; | |
| 62 | } OptParserCommonInfo; | |
| 63 | ||
| 64 | ||
| 5 | 65 | enum{ |
| 66 | OPT_ID_END=0, | |
| 67 | OPT_ID_ARGUMENT=1, | |
| 68 | ||
| 69 | E_OPT_INVALID_OPTION=-1, | |
| 70 | E_OPT_INVALID_CHAIN_OPTION=-2, | |
| 71 | E_OPT_SYNTAX_ERROR=-3, | |
| 72 | E_OPT_MISSING_ARGUMENT=-4, | |
| 73 | E_OPT_UNEXPECTED_ARGUMENT=-5 | |
| 74 | }; | |
| 75 | ||
| 76 | ||
| 77 | extern void optparser_init(int argc, char *const argv[], int mode, | |
| 12 | 78 | const OptParserOpt *opts, |
| 79 | const OptParserCommonInfo *cinfo); | |
| 80 | ||
| 5 | 81 | extern int optparser_get_opt(); |
| 82 | extern const char* optparser_get_arg(); | |
| 83 | extern void optparser_print_error(); | |
| 84 | ||
| 8 | 85 | #endif /* LIBTU_OPTPARSER_H */ |