URI:
       tgetflags.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tgetflags.c (1380B)
       ---
            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 }