00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef ARGLEX_H
00021 #define ARGLEX_H
00022
00028 #include <common/main.h>
00029
00030 #define ARGLEX_END_MARKER { (const char *)0, 0, }
00031
00032 enum
00033 {
00034 ARGLEX_PREFETCH_FAIL = -99,
00035 arglex_token_eoln = -20,
00036 arglex_token_help,
00037 arglex_token_number,
00038 arglex_token_number_incomplete,
00039 arglex_token_option,
00040 arglex_token_option_incomplete,
00041 arglex_token_page_length,
00042 arglex_token_page_width,
00043 arglex_token_stdio,
00044 arglex_token_string,
00045 arglex_token_string_incomplete,
00046 arglex_token_trace,
00047 arglex_token_version
00048 };
00049
00050 struct arglex_table_ty
00051 {
00052 const char *t_name;
00053 int t_token;
00054 };
00055
00056 struct arglex_value_ty
00057 {
00058 const char *alv_string;
00059 long alv_number;
00060 };
00061
00062 extern int arglex_token;
00063 extern arglex_value_ty arglex_value;
00064
00065 void arglex_init(int, char **, arglex_table_ty *);
00066 int arglex(void);
00067 int arglex_prefetch(int *, int);
00068
00111 bool arglex_compare(const char *formal, const char *actual,
00112 const char **partial);
00113
00114 const char *arglex_token_name(int);
00115
00116 arglex_table_ty *arglex_table_catenate(arglex_table_ty *, arglex_table_ty *);
00117
00118
00119 struct arglex_dispatch_ty
00120 {
00121 int token;
00122 void (*func)(void);
00123 int priority;
00124 };
00125
00126 void arglex_dispatch(arglex_dispatch_ty *table, int table_len,
00127 void (*usage)(void));
00128
00129 void arglex_synthetic(int, char **, int);
00130 void arglex_retable(arglex_table_ty *);
00131 int arglex_get_string(void);
00132
00134 #endif // ARGLEX_H