]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/aux/getflags.c
exec(2): fix prototypes
[plan9front.git] / sys / src / cmd / aux / getflags.c
1 #include <u.h>
2 #include <libc.h>
3
4 void
5 usage(void)
6 {
7         print("status=usage\n");
8         exits(0);
9 }
10
11 char*
12 findarg(char *flags, Rune r)
13 {
14         char *p;
15         Rune rr;
16         
17         for(p=flags; p!=(char*)1; p=strchr(p, ',')+1){
18                 chartorune(&rr, p);
19                 if(rr == r)
20                         return p;
21         }
22         return nil;     
23 }
24
25 int
26 countargs(char *p)
27 {
28         int n;
29
30         n = 1;
31         while(*p == ' ')
32                 p++;
33         for(; *p && *p != ','; p++)
34                 if(*p == ' ' && *(p-1) != ' ')
35                         n++;
36         return n;
37 }
38
39 void
40 main(int argc, char *argv[])
41 {
42         char *flags, *p, buf[512];
43         int i, n;
44         Fmt fmt;
45         
46         doquote = needsrcquote;
47         quotefmtinstall();
48         argv0 = argv[0];        /* for sysfatal */
49         
50         flags = getenv("flagfmt");
51         if(flags == nil){
52                 fprint(2, "$flagfmt not set\n");
53                 print("exit 'missing flagfmt'");
54                 exits(0);
55         }
56
57         fmtfdinit(&fmt, 1, buf, sizeof buf);
58         for(p=flags; p!=(char*)1; p=strchr(p, ',')+1)
59                 fmtprint(&fmt, "flag%.1s=()\n", p);
60         ARGBEGIN{
61         default:
62                 if((p = findarg(flags, ARGC())) == nil)
63                         usage();
64                 p += runelen(ARGC());
65                 if(*p == ',' || *p == 0){
66                         fmtprint(&fmt, "flag%C=1\n", ARGC());
67                         break;
68                 }
69                 n = countargs(p);
70                 fmtprint(&fmt, "flag%C=(", ARGC());
71                 for(i=0; i<n; i++)
72                         fmtprint(&fmt, "%s%q", i ? " " : "", EARGF(usage()));
73                 fmtprint(&fmt, ")\n");
74         }ARGEND
75         
76         fmtprint(&fmt, "*=(");
77         for(i=0; i<argc; i++)
78                 fmtprint(&fmt, "%s%q", i ? " " : "", argv[i]);
79         fmtprint(&fmt, ")\n");
80         fmtprint(&fmt, "status=''\n");
81         fmtfdflush(&fmt);
82         exits(0);
83 }