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