1 ae03a48b 2009-08-15 rsc #include <u.h>
2 ae03a48b 2009-08-15 rsc #include <libc.h>
5 ae03a48b 2009-08-15 rsc main(int argc, char **argv)
8 ae03a48b 2009-08-15 rsc char buf[512];
9 ae03a48b 2009-08-15 rsc char *argv0, *args, *flags, *p, *p0;
13 ae03a48b 2009-08-15 rsc argv0 = getenv("0");
14 ae03a48b 2009-08-15 rsc if(argv0 == nil) {
16 ae03a48b 2009-08-15 rsc argv0 = argv[1];
18 ae03a48b 2009-08-15 rsc argv0 = "unknown-program-name";
20 ae03a48b 2009-08-15 rsc if((p = strrchr(argv0, '/')) != nil)
22 ae03a48b 2009-08-15 rsc flags = getenv("flagfmt");
23 ae03a48b 2009-08-15 rsc args = getenv("args");
25 ae03a48b 2009-08-15 rsc if(argv0 == nil){
26 ae03a48b 2009-08-15 rsc fprint(2, "aux/usage: $0 not set\n");
29 ae03a48b 2009-08-15 rsc if(flags == nil)
31 ae03a48b 2009-08-15 rsc if(args == nil)
34 ae03a48b 2009-08-15 rsc fmtfdinit(&fmt, 2, buf, sizeof buf);
35 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "usage: %s", argv0);
36 ae03a48b 2009-08-15 rsc if(flags[0]){
38 ae03a48b 2009-08-15 rsc for(p=flags; *p; ){
39 ae03a48b 2009-08-15 rsc p += chartorune(&r, p);
40 ae03a48b 2009-08-15 rsc if(*p == ',' || *p == 0){
42 ae03a48b 2009-08-15 rsc fmtprint(&fmt, " [-");
45 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "%C", r);
46 ae03a48b 2009-08-15 rsc if(*p == ',')
50 ae03a48b 2009-08-15 rsc while(*p == ' ')
53 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "]");
57 ae03a48b 2009-08-15 rsc p = strchr(p0, ',');
62 ae03a48b 2009-08-15 rsc fmtprint(&fmt, " [-%C %s]", r, p0);
65 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "]");
68 ae03a48b 2009-08-15 rsc fmtprint(&fmt, " %s", args);
69 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "\n");
70 ae03a48b 2009-08-15 rsc fmtfdflush(&fmt);
71 ae03a48b 2009-08-15 rsc exits("usage");