#include #include #include #include #include #include #include struct entry_point { const char *cmd; int (* main)(int argc, char *argv[]); }; struct entry_point entries[] = { { "pack", do_pack }, { "sign", do_sign }, { "unpack", do_unpack }, { "verify", do_verify }, { NULL, NULL }, }; int main(int argc, char *argv[]) { struct entry_point *entry; if (argc < 2) { fprintf(stderr, "usage: %s \n", argv[0]); return -1; } for (entry = entries; entry->cmd; ++entry) { if (strcmp(entry->cmd, argv[1]) == 0) return entry->main(argc, argv); } fprintf(stderr, "usage: %s \n", argv[0]); return -1; }