1 ae03a48b 2009-08-15 rsc #include <u.h>
2 ae03a48b 2009-08-15 rsc #include <libc.h>
7 a4af25bc 2022-09-06 crossd fprint(2, "status=usage\n");
12 ae03a48b 2009-08-15 rsc findarg(char *flags, Rune r)
17 ae03a48b 2009-08-15 rsc for(p=flags; p!=(char*)1; p=strchr(p, ',')+1){
18 ae03a48b 2009-08-15 rsc chartorune(&rr, p);
22 fa325e9b 2020-01-10 cross return nil;
26 ae03a48b 2009-08-15 rsc countargs(char *p)
31 ae03a48b 2009-08-15 rsc while(*p == ' ')
33 ae03a48b 2009-08-15 rsc for(; *p && *p != ','; p++)
34 ae03a48b 2009-08-15 rsc if(*p == ' ' && *(p-1) != ' ')
40 ae03a48b 2009-08-15 rsc main(int argc, char *argv[])
42 ae03a48b 2009-08-15 rsc char *flags, *p, buf[512];
46 fa325e9b 2020-01-10 cross doquote = needsrcquote;
47 ae03a48b 2009-08-15 rsc quotefmtinstall();
48 ae03a48b 2009-08-15 rsc argv0 = argv[0]; /* for sysfatal */
50 ae03a48b 2009-08-15 rsc flags = getenv("flagfmt");
51 ae03a48b 2009-08-15 rsc if(flags == nil){
52 ae03a48b 2009-08-15 rsc fprint(2, "$flagfmt not set\n");
53 ae03a48b 2009-08-15 rsc print("exit 'missing flagfmt'");
57 ae03a48b 2009-08-15 rsc fmtfdinit(&fmt, 1, buf, sizeof buf);
58 ae03a48b 2009-08-15 rsc for(p=flags; p!=(char*)1; p=strchr(p, ',')+1)
59 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "flag%.1s=()\n", p);
62 ae03a48b 2009-08-15 rsc if((p = findarg(flags, ARGC())) == nil)
64 ae03a48b 2009-08-15 rsc p += runelen(ARGC());
65 ae03a48b 2009-08-15 rsc if(*p == ',' || *p == 0){
66 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "flag%C=1\n", ARGC());
69 ae03a48b 2009-08-15 rsc n = countargs(p);
70 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "flag%C=(", ARGC());
71 ae03a48b 2009-08-15 rsc for(i=0; i<n; i++)
72 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "%s%q", i ? " " : "", EARGF(usage()));
73 ae03a48b 2009-08-15 rsc fmtprint(&fmt, ")\n");
76 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "*=(");
77 ae03a48b 2009-08-15 rsc for(i=0; i<argc; i++)
78 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "%s%q", i ? " " : "", argv[i]);
79 ae03a48b 2009-08-15 rsc fmtprint(&fmt, ")\n");
80 ae03a48b 2009-08-15 rsc fmtprint(&fmt, "status=''\n");
81 ae03a48b 2009-08-15 rsc fmtfdflush(&fmt);