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