Home | History | Annotate | Download | only in toolbox
      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 
      5 int main(int, char **);
      6 
      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 
     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