Blame


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