#include #include #include #include #include "capture.h" #include "replay.h" #include "can2dump.h" #include "pcap2can.h" #include "pcapreplay.h" #include "dash2can.h" typedef struct { const char *name; char *(*arglist)(void); int (*main)(int argc, char **argv); } hexagram_app; hexagram_app apps[] = { { "capture", hexagram_arglist_capture, hexagram_main_capture }, { "replay", hexagram_arglist_replay, hexagram_main_replay }, { "can2dump", hexagram_arglist_can2dump, hexagram_main_can2dump }, { "pcap2can", hexagram_arglist_pcap2can, hexagram_main_pcap2can }, { "pcapreplay", hexagram_arglist_pcapreplay, hexagram_main_pcapreplay }, { "dash2can", hexagram_arglist_dash2can, hexagram_main_dash2can }, { NULL, NULL, NULL } }; static int usage(int argc, char **argv, const char *message, ...) { hexagram_app *app; if (message) { va_list args; va_start(args, message); vfprintf(stderr, message, args); va_end(args); } fprintf(stderr, "usage: %s [command args ...]\n", argv[0]); for (app = apps; app->name != NULL; app++) { fprintf(stderr, " %s %s %s\n", argv[0], app->name, app->arglist()); } exit(1); } int main(int argc, char **argv) { hexagram_app *app; if (argc < 2) { return usage(argc, argv, "No command provided\n"); } for (app = apps; app->name != NULL; app++) { if (strcmp(argv[1], app->name) == 0) { return app->main(--argc, ++argv); } } return usage(argc, argv, NULL); }