1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main(int, char **);
6
toolbox_main(int argc,char ** argv)7 static int toolbox_main(int argc, char **argv)
8 {
9 // "toolbox foo ..." is equivalent to "foo ..."
10 if (argc > 1) {
11 return main(argc - 1, argv + 1);
12 } else {
13 printf("Toolbox!\n");
14 return 0;
15 }
16 }
17
18 #define TOOL(name) int name##_main(int, char**);
19 #include "tools.h"
20 #undef TOOL
21
22 static struct
23 {
24 const char *name;
25 int (*func)(int, char**);
26 } tools[] = {
27 { "toolbox", toolbox_main },
28 #define TOOL(name) { #name, name##_main },
29 #include "tools.h"
30 #undef TOOL
31 { 0, 0 },
32 };
33
main(int argc,char ** argv)34 int main(int argc, char **argv)
35 {
36 int i;
37 char *name = argv[0];
38
39 if((argc > 1) && (argv[1][0] == '@')) {
40 name = argv[1] + 1;
41 argc--;
42 argv++;
43 } else {
44 char *cmd = strrchr(argv[0], '/');
45 if (cmd)
46 name = cmd + 1;
47 }
48
49 for(i = 0; tools[i].name; i++){
50 if(!strcmp(tools[i].name, name)){
51 return tools[i].func(argc, argv);
52 }
53 }
54
55 printf("%s: no such tool\n", argv[0]);
56 return -1;
57 }
58