157257Sdufault/* $FreeBSD$ */ 257257Sdufault#include <stdio.h> 357257Sdufault 457257Sdufaultint fifo(int argc, char *argv[]); 557257Sdufaultint memlock(int argc, char *argv[]); 657257Sdufaultint p26(int argc, char *argv[]); 757257Sdufaultint sched(int argc, char *argv[]); 857257Sdufaultint yield(int argc, char *argv[]); 957257Sdufault 1057257Sdufaultstatic struct { 1157257Sdufault const char *t; 1257257Sdufault int (*f)(int, char *[]); 1357257Sdufault int works; 1457257Sdufault} tab[] = { 1557257Sdufault { "fifo", fifo, 1 }, 1657257Sdufault { "memlock", memlock, 0 }, 1757257Sdufault { "p26", p26, 1 }, 1857257Sdufault { "sched", sched, 1 }, 1957257Sdufault { "yield", yield, 1 }, 2057257Sdufault}; 2157257Sdufault 2257257Sdufault#define N(T) (sizeof (T)/ sizeof(T[0])) 2357257Sdufault 2457257Sdufaultstatic int usage(int argc, char *argv[]) 2557257Sdufault{ 2657257Sdufault int i; 2757257Sdufault if (argc > 1) 2857257Sdufault fprintf(stderr, "%s is unknown\n", argv[1]); 2957257Sdufault 3057257Sdufault fprintf(stderr, "usage: %s [-a] or one of [", argv[0]); 3157257Sdufault for (i = 0; i < (sizeof(tab) / sizeof(tab[0])); i++) 3257257Sdufault fprintf(stderr, "%s%s", (i)? " | " : "", tab[i].t); 3357257Sdufault fprintf(stderr, "]\n"); 3457257Sdufault 3557257Sdufault return -1; 3657257Sdufault} 3757257Sdufault 3857257Sdufaultint main(int argc, char *argv[]) 3957257Sdufault{ 4057257Sdufault int i; 4157257Sdufault 4257257Sdufault if (argc == 2 && strcmp(argv[1], "-a") == 0) { 4357257Sdufault#if 1 4457257Sdufault fprintf(stderr, 4557257Sdufault "-a should but doesn't really work" 4657257Sdufault " (my notes say \"because things detach\");\n" 4757257Sdufault "meanwhile do these individual tests and look" 4857257Sdufault " for a non-zero exit code:\n"); 4957257Sdufault for (i = 0; i < N(tab); i++) 5057257Sdufault if (tab[i].works) 5157257Sdufault fprintf(stderr, "p1003_1b %s\n", tab[i].t); 5257257Sdufault return -1; 5357257Sdufault#else 5457257Sdufault { 5557257Sdufault int r; 5657257Sdufault for (i = 0; i < N(tab); i++) { 5757257Sdufault if (tab[i].works) { 5857257Sdufault if ( (r = 5957257Sdufault (*tab[i].f)(argc - 1, argv + 1)) ) { 6057257Sdufault fprintf(stderr, 6157257Sdufault "%s failed\n", tab[i].t); 6257257Sdufault return r; 6357257Sdufault } 6457257Sdufault } 6557257Sdufault } 6657257Sdufault return 0; 6757257Sdufault } 6857257Sdufault#endif 6957257Sdufault } 7057257Sdufault 7157257Sdufault if (argc > 1) { 7257257Sdufault for (i = 0; i < N(tab); i++) 7357257Sdufault if (strcmp(tab[i].t, argv[1]) == 0) 7457257Sdufault return (*tab[i].f)(argc - 1, argv + 1); 7557257Sdufault } 7657257Sdufault 7757257Sdufault return usage(argc, argv); 7857257Sdufault} 79