#include #include #include #define X(name) int entry_ ## name (int argc, char **argv); PROGNAMES_XLIST #undef X static char* basename(char *path) { size_t len = strlen(path); for (size_t i = len - 1; i != 0; i--) { if (path[i] == '/') return path + (i + 1); } return path; } int main(int argc, char **argv) { // Ensure getopt(3) does not print an (English) error opterr = 0; const char *prognamearg = basename(argv[0]); if (strcmp(prognamearg, "drukkedoos") == 0) { argv++; argc--; if (argc == 0) { #define X(name) " " #name "\n" fprintf(stderr, "Gebruik: drukkedoos \n\n" "Hulpmiddelen:\n" PROGNAMES_XLIST); #undef X return 1; } prognamearg = basename(argv[0]); } #define X(name) if (strcmp(prognamearg, #name) == 0) return entry_ ## name (argc, argv); PROGNAMES_XLIST #undef X fprintf(stderr, "Onbekend hulpmiddel: '%s'\n", prognamearg); return 1; }