5 |
* Licensed under GPLv2, see file LICENSE in this tarball for details. |
* Licensed under GPLv2, see file LICENSE in this tarball for details. |
6 |
*/ |
*/ |
7 |
#include <unistd.h> |
#include <unistd.h> |
8 |
|
#include <stdlib.h> |
9 |
|
#include <string.h> |
10 |
|
|
|
/* Just #include "autoconf.h" doesn't work for builds in separate |
|
|
* object directory */ |
|
11 |
#include "autoconf.h" |
#include "autoconf.h" |
12 |
|
|
13 |
/* Since we can't use platform.h, have to do this again by hand: */ |
/* Since we can't use platform.h, have to do this again by hand: */ |
21 |
# define USE_FOR_MMU(...) __VA_ARGS__ |
# define USE_FOR_MMU(...) __VA_ARGS__ |
22 |
#endif |
#endif |
23 |
|
|
|
static const char usage_messages[] = "" |
|
|
#define MAKE_USAGE |
|
24 |
#include "usage.h" |
#include "usage.h" |
25 |
|
#define MAKE_USAGE(aname, usage) { aname, usage }, |
26 |
|
static struct usage_data { |
27 |
|
const char *aname; |
28 |
|
const char *usage; |
29 |
|
} usage_array[] = { |
30 |
#include "applets.h" |
#include "applets.h" |
31 |
; |
}; |
32 |
|
|
33 |
|
static int compare_func(const void *a, const void *b) |
34 |
|
{ |
35 |
|
const struct usage_data *ua = a; |
36 |
|
const struct usage_data *ub = b; |
37 |
|
return strcmp(ua->aname, ub->aname); |
38 |
|
} |
39 |
|
|
40 |
int main(void) |
int main(void) |
41 |
{ |
{ |
42 |
write(STDOUT_FILENO, usage_messages, sizeof(usage_messages)); |
int i; |
43 |
|
int num_messages = sizeof(usage_array) / sizeof(usage_array[0]); |
44 |
|
|
45 |
|
if (num_messages == 0) |
46 |
|
return 0; |
47 |
|
|
48 |
|
qsort(usage_array, |
49 |
|
num_messages, sizeof(usage_array[0]), |
50 |
|
compare_func); |
51 |
|
for (i = 0; i < num_messages; i++) |
52 |
|
write(STDOUT_FILENO, usage_array[i].usage, strlen(usage_array[i].usage) + 1); |
53 |
|
|
54 |
return 0; |
return 0; |
55 |
} |
} |