Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
 
4
void
5
usage(void)
6
{
7
	print("status=usage\n");
8
	exits(0);
9
}
10
 
11
char*
12
findarg(char *flags, Rune r)
13
{
14
	char *p;
15
	Rune rr;
16
 
17
	for(p=flags; p!=(char*)1; p=strchr(p, ',')+1){
18
		chartorune(&rr, p);
19
		if(rr == r)
20
			return p;
21
	}
22
	return nil;	
23
}
24
 
25
int
26
countargs(char *p)
27
{
28
	int n;
29
 
30
	n = 1;
31
	while(*p == ' ')
32
		p++;
33
	for(; *p && *p != ','; p++)
34
		if(*p == ' ' && *(p-1) != ' ')
35
			n++;
36
	return n;
37
}
38
 
39
void
40
main(int argc, char *argv[])
41
{
42
	char *flags, *p, buf[512];
43
	int i, n;
44
	Fmt fmt;
45
 
46
	doquote = needsrcquote;
47
	quotefmtinstall();
48
	argv0 = argv[0];	/* for sysfatal */
49
 
50
	flags = getenv("flagfmt");
51
	if(flags == nil){
52
		fprint(2, "$flagfmt not set\n");
53
		print("exit 'missing flagfmt'");
54
		exits(0);
55
	}
56
 
57
	fmtfdinit(&fmt, 1, buf, sizeof buf);
58
	for(p=flags; p!=(char*)1; p=strchr(p, ',')+1)
59
		fmtprint(&fmt, "flag%.1s=()\n", p);
60
	ARGBEGIN{
61
	default:
62
		if((p = findarg(flags, ARGC())) == nil)
63
			usage();
64
		p += runelen(ARGC());
65
		if(*p == ',' || *p == 0){
66
			fmtprint(&fmt, "flag%C=1\n", ARGC());
67
			break;
68
		}
69
		n = countargs(p);
70
		fmtprint(&fmt, "flag%C=(", ARGC());
71
		for(i=0; i<n; i++)
72
			fmtprint(&fmt, "%s%q", i ? " " : "", EARGF(usage()));
73
		fmtprint(&fmt, ")\n");
74
	}ARGEND
75
 
76
	fmtprint(&fmt, "*=(");
77
	for(i=0; i<argc; i++)
78
		fmtprint(&fmt, "%s%q", i ? " " : "", argv[i]);
79
	fmtprint(&fmt, ")\n");
80
	fmtprint(&fmt, "status=''\n");
81
	fmtfdflush(&fmt);
82
	exits(0);
83
}