#include <u.h> | |
#include <libc.h> | |
void | |
main(int argc, char **argv) | |
{ | |
Fmt fmt; | |
char buf[512]; | |
char *argv0, *args, *flags, *p, *p0; | |
int single; | |
Rune r; | |
argv0 = getenv("0"); | |
if(argv0 == nil) { | |
if(argc > 1) | |
argv0 = argv[1]; | |
else | |
argv0 = "unknown-program-name"; | |
} | |
if((p = strrchr(argv0, '/')) != nil) | |
argv0 = p+1; | |
flags = getenv("flagfmt"); | |
args = getenv("args"); | |
if(argv0 == nil){ | |
fprint(2, "aux/usage: $0 not set\n"); | |
exits("$0"); | |
} | |
if(flags == nil) | |
flags = ""; | |
if(args == nil) | |
args = ""; | |
fmtfdinit(&fmt, 2, buf, sizeof buf); | |
fmtprint(&fmt, "usage: %s", argv0); | |
if(flags[0]){ | |
single = 0; | |
for(p=flags; *p; ){ | |
p += chartorune(&r, p); | |
if(*p == ',' || *p == 0){ | |
if(!single){ | |
fmtprint(&fmt, " [-"); | |
single = 1; | |
} | |
fmtprint(&fmt, "%C", r); | |
if(*p == ',') | |
p++; | |
continue; | |
} | |
while(*p == ' ') | |
p++; | |
if(single){ | |
fmtprint(&fmt, "]"); | |
single = 0; | |
} | |
p0 = p; | |
p = strchr(p0, ','); | |
if(p == nil) | |
p = ""; | |
else | |
*p++ = 0; | |
fmtprint(&fmt, " [-%C %s]", r, p0); | |
} | |
if(single) | |
fmtprint(&fmt, "]"); | |
} | |
if(args) | |
fmtprint(&fmt, " %s", args); | |
fmtprint(&fmt, "\n"); | |
fmtfdflush(&fmt); | |
exits("usage"); | |
} |