1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
=encoding UTF-8
=head1 НАИМЕНОВАНИЕ
BH_Args - обработка аргументов командной строки
=head1 СИНТАКСИС
#include <BH/Args.h>
static BH_ArgsOption options[] =
{
{'h', "help", 0, "Display this help"},
{1000, "list", 0, "List files"},
{'i', "input", BH_ARGS_VALUE, "Input file"},
{'o', "output", BH_ARGS_VALUE | BH_ARGS_OPTIONAL, "Output file"},
{0, NULL, 0, NULL}
};
static int OptionsCallback(int key,
char *arg,
void *data)
{
switch (key)
{
case BH_ARGS_UNKNOWN:
/* Unknown options */
break;
case BH_ARGS_ARGUMENT:
/* Regular argument in arg */
break;
case 'h':
/* Named option without argument */
break;
case 1000:
/* Long-only option without argument */
break;
case 'i':
/* Option with argument in arg */
break;
case 'o':
/* Option with optional argument in arg */
break;
}
return BH_OK;
}
BH_ArgsParse(argc, argv, options, OptionsCallback, NULL);
BH_ArgsHelp(options, 0);
cc prog.c -o prog -lbh
=head1 ОПИСАНИЕ
Библиотека BH_Args предназначена для удобной обработки аргументов командной
строки в программах. Она позволяет определить набор опций, которые могут быть
указаны при запуске программы, и предоставляет механизмы для их анализа и
обработки.
Разбор аргументов происходит с учётом следующих правил:
=over
=item *
Если указан аргумент "--", последующий разбор аргументов прекращается.
=item *
Если указан аргумент "-", он обрабатывается как есть.
=item *
Для значений длинных аргументов будет использоваться строка после знака равно
или следующий аргумент ("--define=value" или "--define value").
=item *
Для значений коротких аргументов будет использоваться остаток строки после
символа параметра или следующий аргумент ("-dvalue" или "-d value").
=back
=head1 API ВЫЗОВЫ
=head2 BH_ArgsParse
int BH_ArgsParse(int argc,
char **argv,
BH_ArgsOption *options,
BH_ArgsCallback callback,
void *data);
Разбирает аргументы I<options> командной строки (заданные в I<argc> и I<argv>) и
вызывает указанный обработчик I<callback> (с пользовательскими данными I<data>).
Параметр I<options> ссылается на нуль-терминированный массив.
В случае успеха данная функция возвращает 0, в противном случае - код ошибки.
=head2 BH_ArgsHelp
void BH_ArgsHelp(BH_ArgsOption *options,
int padding);
Выводит в F<stdout> справочную информацию для аргументов I<options> (с указанным
выравниванием I<padding>).
В случае если параметр I<padding> равен 0, то будет использовано значение
по умолчанию (30).
=head1 СТРУКТУРЫ
=head2 BH_ArgsOption
typedef struct BH_ArgsOption
{
int key;
const char *name;
int flags;
const char *description;
} BH_ArgsOption;
Поле I<key> содержит идентификатор опции. В случае если идентификатор I<key>
является печатным символом ASCII, то он будет использоваться в качестве
короткого аргумента.
Опциональное поле I<name> содержит строку, которая будет использоваться в
качестве длинного аргумента.
Поле I<flags> содержит флаги аргумента. Возможна комбинация из следующих флагов:
=over
=item B<BH_ARGS_VALUE>
Аргумент принимает значение.
=item B<BH_ARGS_OPTIONAL>
Значение аргумента опционально.
=back
Поле I<description> содержит строку, которая будет использоваться при выводе
справочной информации при помощи функции L</BH_ArgsHelp>.
=head1 СМ. ТАКЖЕ
L<BH>
|