xref: /plan9/sys/lib/dist/cmd/multi/multi.c (revision 1ee3cffaa7e3c1b699746f1d489ecd9b6a7d4d76)
1*1ee3cffaSDavid du Colombier #include <u.h>
2*1ee3cffaSDavid du Colombier #include <libc.h>
3*1ee3cffaSDavid du Colombier 
4*1ee3cffaSDavid du Colombier #include "multiproto.h"
5*1ee3cffaSDavid du Colombier struct {
6*1ee3cffaSDavid du Colombier 	char *name;
7*1ee3cffaSDavid du Colombier 	void (*fn)(int, char**);
8*1ee3cffaSDavid du Colombier } mains[] =
9*1ee3cffaSDavid du Colombier {
10*1ee3cffaSDavid du Colombier #include "multi.h"
11*1ee3cffaSDavid du Colombier };
12*1ee3cffaSDavid du Colombier 
13*1ee3cffaSDavid du Colombier void
main(int argc,char ** argv)14*1ee3cffaSDavid du Colombier main(int argc, char **argv)
15*1ee3cffaSDavid du Colombier {
16*1ee3cffaSDavid du Colombier 	int i;
17*1ee3cffaSDavid du Colombier 	char *cmd, *p;
18*1ee3cffaSDavid du Colombier 
19*1ee3cffaSDavid du Colombier 	if(argc == 1){
20*1ee3cffaSDavid du Colombier 		fprint(2, "usage: multi cmd args...\n");
21*1ee3cffaSDavid du Colombier 		exits("usage");
22*1ee3cffaSDavid du Colombier 	}
23*1ee3cffaSDavid du Colombier 
24*1ee3cffaSDavid du Colombier 	cmd = argv[1];
25*1ee3cffaSDavid du Colombier 	if(p = strrchr(cmd, '/'))
26*1ee3cffaSDavid du Colombier 		cmd = p+1;
27*1ee3cffaSDavid du Colombier 	argv++;
28*1ee3cffaSDavid du Colombier 	argc--;
29*1ee3cffaSDavid du Colombier 
30*1ee3cffaSDavid du Colombier 	for(i=0; i<nelem(mains); i++){
31*1ee3cffaSDavid du Colombier 		if(strcmp(cmd, mains[i].name) == 0){
32*1ee3cffaSDavid du Colombier 			mains[i].fn(argc, argv);
33*1ee3cffaSDavid du Colombier 			return;
34*1ee3cffaSDavid du Colombier 		}
35*1ee3cffaSDavid du Colombier 	}
36*1ee3cffaSDavid du Colombier 	fprint(2, "multi: no such cmd %s\n", cmd);
37*1ee3cffaSDavid du Colombier 	exits("no cmd");
38*1ee3cffaSDavid du Colombier }
39