1e5f1b1b1SPeter Dufault /* $FreeBSD$ */ 2e5f1b1b1SPeter Dufault #include <stdio.h> 3e5f1b1b1SPeter Dufault 4e5f1b1b1SPeter Dufault int fifo(int argc, char *argv[]); 5e5f1b1b1SPeter Dufault int memlock(int argc, char *argv[]); 6e5f1b1b1SPeter Dufault int p26(int argc, char *argv[]); 7e5f1b1b1SPeter Dufault int sched(int argc, char *argv[]); 8e5f1b1b1SPeter Dufault int yield(int argc, char *argv[]); 9e5f1b1b1SPeter Dufault 10e5f1b1b1SPeter Dufault static struct { 11e5f1b1b1SPeter Dufault const char *t; 12e5f1b1b1SPeter Dufault int (*f)(int, char *[]); 13e5f1b1b1SPeter Dufault int works; 14e5f1b1b1SPeter Dufault } tab[] = { 15e5f1b1b1SPeter Dufault { "fifo", fifo, 1 }, 16e5f1b1b1SPeter Dufault { "memlock", memlock, 0 }, 17e5f1b1b1SPeter Dufault { "p26", p26, 1 }, 18e5f1b1b1SPeter Dufault { "sched", sched, 1 }, 19e5f1b1b1SPeter Dufault { "yield", yield, 1 }, 20e5f1b1b1SPeter Dufault }; 21e5f1b1b1SPeter Dufault 22e5f1b1b1SPeter Dufault #define N(T) (sizeof (T)/ sizeof(T[0])) 23e5f1b1b1SPeter Dufault 24e5f1b1b1SPeter Dufault static int usage(int argc, char *argv[]) 25e5f1b1b1SPeter Dufault { 26e5f1b1b1SPeter Dufault int i; 27e5f1b1b1SPeter Dufault if (argc > 1) 28e5f1b1b1SPeter Dufault fprintf(stderr, "%s is unknown\n", argv[1]); 29e5f1b1b1SPeter Dufault 30e5f1b1b1SPeter Dufault fprintf(stderr, "usage: %s [-a] or one of [", argv[0]); 31e5f1b1b1SPeter Dufault for (i = 0; i < (sizeof(tab) / sizeof(tab[0])); i++) 32e5f1b1b1SPeter Dufault fprintf(stderr, "%s%s", (i)? " | " : "", tab[i].t); 33e5f1b1b1SPeter Dufault fprintf(stderr, "]\n"); 34e5f1b1b1SPeter Dufault 35e5f1b1b1SPeter Dufault return -1; 36e5f1b1b1SPeter Dufault } 37e5f1b1b1SPeter Dufault 38e5f1b1b1SPeter Dufault int main(int argc, char *argv[]) 39e5f1b1b1SPeter Dufault { 40e5f1b1b1SPeter Dufault int i; 41e5f1b1b1SPeter Dufault 42e5f1b1b1SPeter Dufault if (argc == 2 && strcmp(argv[1], "-a") == 0) { 43e5f1b1b1SPeter Dufault #if 1 44e5f1b1b1SPeter Dufault fprintf(stderr, 45e5f1b1b1SPeter Dufault "-a should but doesn't really work" 46e5f1b1b1SPeter Dufault " (my notes say \"because things detach\");\n" 47e5f1b1b1SPeter Dufault "meanwhile do these individual tests and look" 48e5f1b1b1SPeter Dufault " for a non-zero exit code:\n"); 49e5f1b1b1SPeter Dufault for (i = 0; i < N(tab); i++) 50e5f1b1b1SPeter Dufault if (tab[i].works) 51e5f1b1b1SPeter Dufault fprintf(stderr, "p1003_1b %s\n", tab[i].t); 52e5f1b1b1SPeter Dufault return -1; 53e5f1b1b1SPeter Dufault #else 54e5f1b1b1SPeter Dufault { 55e5f1b1b1SPeter Dufault int r; 56e5f1b1b1SPeter Dufault for (i = 0; i < N(tab); i++) { 57e5f1b1b1SPeter Dufault if (tab[i].works) { 58e5f1b1b1SPeter Dufault if ( (r = 59e5f1b1b1SPeter Dufault (*tab[i].f)(argc - 1, argv + 1)) ) { 60e5f1b1b1SPeter Dufault fprintf(stderr, 61e5f1b1b1SPeter Dufault "%s failed\n", tab[i].t); 62e5f1b1b1SPeter Dufault return r; 63e5f1b1b1SPeter Dufault } 64e5f1b1b1SPeter Dufault } 65e5f1b1b1SPeter Dufault } 66e5f1b1b1SPeter Dufault return 0; 67e5f1b1b1SPeter Dufault } 68e5f1b1b1SPeter Dufault #endif 69e5f1b1b1SPeter Dufault } 70e5f1b1b1SPeter Dufault 71e5f1b1b1SPeter Dufault if (argc > 1) { 72e5f1b1b1SPeter Dufault for (i = 0; i < N(tab); i++) 73e5f1b1b1SPeter Dufault if (strcmp(tab[i].t, argv[1]) == 0) 74e5f1b1b1SPeter Dufault return (*tab[i].f)(argc - 1, argv + 1); 75e5f1b1b1SPeter Dufault } 76e5f1b1b1SPeter Dufault 77e5f1b1b1SPeter Dufault return usage(argc, argv); 78e5f1b1b1SPeter Dufault } 79