xref: /plan9/sys/src/cmd/aux/usage.c (revision 84cb942240af4800dbdc464335ca92b2f5a6c727)
1*84cb9422SDavid du Colombier #include <u.h>
2*84cb9422SDavid du Colombier #include <libc.h>
3*84cb9422SDavid du Colombier 
4*84cb9422SDavid du Colombier void
main(void)5*84cb9422SDavid du Colombier main(void)
6*84cb9422SDavid du Colombier {
7*84cb9422SDavid du Colombier 	Fmt fmt;
8*84cb9422SDavid du Colombier 	char buf[512];
9*84cb9422SDavid du Colombier 	char *argv0, *args, *flags, *p, *p0;
10*84cb9422SDavid du Colombier 	int single;
11*84cb9422SDavid du Colombier 	Rune r;
12*84cb9422SDavid du Colombier 
13*84cb9422SDavid du Colombier 	argv0 = getenv("0");
14*84cb9422SDavid du Colombier 	if((p = strrchr(argv0, '/')) != nil)
15*84cb9422SDavid du Colombier 		argv0 = p+1;
16*84cb9422SDavid du Colombier 	flags = getenv("flagfmt");
17*84cb9422SDavid du Colombier 	args = getenv("args");
18*84cb9422SDavid du Colombier 
19*84cb9422SDavid du Colombier 	if(argv0 == nil){
20*84cb9422SDavid du Colombier 		fprint(2, "aux/usage: $0 not set\n");
21*84cb9422SDavid du Colombier 		exits("$0");
22*84cb9422SDavid du Colombier 	}
23*84cb9422SDavid du Colombier 	if(flags == nil)
24*84cb9422SDavid du Colombier 		flags = "";
25*84cb9422SDavid du Colombier 	if(args == nil)
26*84cb9422SDavid du Colombier 		args = "";
27*84cb9422SDavid du Colombier 
28*84cb9422SDavid du Colombier 	fmtfdinit(&fmt, 2, buf, sizeof buf);
29*84cb9422SDavid du Colombier 	fmtprint(&fmt, "usage: %s", argv0);
30*84cb9422SDavid du Colombier 	if(flags[0]){
31*84cb9422SDavid du Colombier 		single = 0;
32*84cb9422SDavid du Colombier 		for(p=flags; *p; ){
33*84cb9422SDavid du Colombier 			p += chartorune(&r, p);
34*84cb9422SDavid du Colombier 			if(*p == ',' || *p == 0){
35*84cb9422SDavid du Colombier 				if(!single){
36*84cb9422SDavid du Colombier 					fmtprint(&fmt, " [-");
37*84cb9422SDavid du Colombier 					single = 1;
38*84cb9422SDavid du Colombier 				}
39*84cb9422SDavid du Colombier 				fmtprint(&fmt, "%C", r);
40*84cb9422SDavid du Colombier 				if(*p == ',')
41*84cb9422SDavid du Colombier 					p++;
42*84cb9422SDavid du Colombier 				continue;
43*84cb9422SDavid du Colombier 			}
44*84cb9422SDavid du Colombier 			while(*p == ' ')
45*84cb9422SDavid du Colombier 				p++;
46*84cb9422SDavid du Colombier 			if(single){
47*84cb9422SDavid du Colombier 				fmtprint(&fmt, "]");
48*84cb9422SDavid du Colombier 				single = 0;
49*84cb9422SDavid du Colombier 			}
50*84cb9422SDavid du Colombier 			p0 = p;
51*84cb9422SDavid du Colombier 			p = strchr(p0, ',');
52*84cb9422SDavid du Colombier 			if(p == nil)
53*84cb9422SDavid du Colombier 				p = "";
54*84cb9422SDavid du Colombier 			else
55*84cb9422SDavid du Colombier 				*p++ = 0;
56*84cb9422SDavid du Colombier 			fmtprint(&fmt, " [-%C %s]", r, p0);
57*84cb9422SDavid du Colombier 		}
58*84cb9422SDavid du Colombier 		if(single)
59*84cb9422SDavid du Colombier 			fmtprint(&fmt, "]");
60*84cb9422SDavid du Colombier 	}
61*84cb9422SDavid du Colombier 	if(args)
62*84cb9422SDavid du Colombier 		fmtprint(&fmt, " %s", args);
63*84cb9422SDavid du Colombier 	fmtprint(&fmt, "\n");
64*84cb9422SDavid du Colombier 	fmtfdflush(&fmt);
65*84cb9422SDavid du Colombier 	exits("usage");
66*84cb9422SDavid du Colombier }
67