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