Remove wheel submodule - will re-add later with new URL
[dmon:dmon.git] / multicall.c
1 /*
2  * multicall.c
3  * Copyright (C) 2010 Adrian Perez <aperez@igalia.com>
4  *
5  * Distributed under terms of the MIT license.
6  */
7
8 #ifdef NO_MULTICALL
9 # error Cannot build __FILE__ with -DNO_MULTICALL
10 #endif /* NO_MULTICALL */
11
12
13 #include "wheel.h"
14 #include <string.h>
15
16
17 typedef int (*mainfunc_t)(int, char**);
18 #define APPLET_LIST_BEGIN   static mainfunc_t choose_applet (const char *name) {
19 #define APPLET(_n)          if (!strcmp (name, #_n)) return _n ## _main;
20 #define APPLET_LIST_END     return NULL; }
21
22
23 extern int dmon_main  (int, char**);
24 extern int dlog_main  (int, char**);
25 extern int dslog_main (int, char**);
26 extern int drlog_main (int, char**);
27
28
29 APPLET_LIST_BEGIN
30     APPLET (dmon)
31     APPLET (dlog)
32     APPLET (dslog)
33     APPLET (drlog)
34 APPLET_LIST_END
35
36
37 int
38 main (int argc, char **argv)
39 {
40     const char *argv0 = strrchr (argv[0], '/');
41     mainfunc_t mainfunc;
42
43     if (argv0 == NULL)
44         argv0 = argv[0];
45     else
46         argv0++;
47
48     mainfunc = choose_applet (argv0);
49
50     if (mainfunc == NULL)
51         w_die ("$s: No such applet in multicall binary.\n", argv0);
52
53     return (*mainfunc)(argc, argv);
54 }
55
56