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