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