Introduction
Introduction Statistics Contact Development Disclaimer Help
missing bit of getflags - 9base - revived minimalist port of Plan 9 userland to…
git clone git://git.suckless.org/9base
Log
Files
Refs
README
LICENSE
---
commit de8d58acf8db7718da376c928cbde0c3a24869a2
parent a5e01b5d6c03c220712198ce23f4b7fc25d43dfa
Author: [email protected] <unknown>
Date: Mon, 22 Mar 2010 08:08:16 +0000
missing bit of getflags
Diffstat:
A getflags/Makefile | 11 +++++++++++
A getflags/getflags.c | 82 +++++++++++++++++++++++++++++…
2 files changed, 93 insertions(+), 0 deletions(-)
---
diff --git a/getflags/Makefile b/getflags/Makefile
@@ -0,0 +1,11 @@
+# getflags - unix port from plan9
+#
+# Depends on ../lib9
+
+TARG = getflags
+
+include ../std.mk
+
+pre-uninstall:
+
+post-install:
diff --git a/getflags/getflags.c b/getflags/getflags.c
@@ -0,0 +1,82 @@
+#include <u.h>
+#include <libc.h>
+
+void
+usage(void)
+{
+ print("status=usage\n");
+ exits(0);
+}
+
+char*
+findarg(char *flags, Rune r)
+{
+ char *p;
+ Rune rr;
+
+ for(p=flags; p!=(char*)1; p=strchr(p, ',')+1){
+ chartorune(&rr, p);
+ if(rr == r)
+ return p;
+ }
+ return nil;
+}
+
+int
+countargs(char *p)
+{
+ int n;
+
+ n = 1;
+ while(*p == ' ')
+ p++;
+ for(; *p && *p != ','; p++)
+ if(*p == ' ' && *(p-1) != ' ')
+ n++;
+ return n;
+}
+
+void
+main(int argc, char *argv[])
+{
+ char *flags, *p, buf[512];
+ int i, n;
+ Fmt fmt;
+
+ quotefmtinstall();
+ argv0 = argv[0]; /* for sysfatal */
+
+ flags = getenv("flagfmt");
+ if(flags == nil){
+ fprint(2, "$flagfmt not set\n");
+ print("exit 'missing flagfmt'");
+ exits(0);
+ }
+
+ fmtfdinit(&fmt, 1, buf, sizeof buf);
+ for(p=flags; p!=(char*)1; p=strchr(p, ',')+1)
+ fmtprint(&fmt, "flag%.1s=()\n", p);
+ ARGBEGIN{
+ default:
+ if((p = findarg(flags, ARGC())) == nil)
+ usage();
+ p += runelen(ARGC());
+ if(*p == ',' || *p == 0){
+ fmtprint(&fmt, "flag%C=1\n", ARGC());
+ break;
+ }
+ n = countargs(p);
+ fmtprint(&fmt, "flag%C=(", ARGC());
+ for(i=0; i<n; i++)
+ fmtprint(&fmt, "%s%q", i ? " " : "", EARGF(usage()));
+ fmtprint(&fmt, ")\n");
+ }ARGEND
+
+ fmtprint(&fmt, "*=(");
+ for(i=0; i<argc; i++)
+ fmtprint(&fmt, "%s%q", i ? " " : "", argv[i]);
+ fmtprint(&fmt, ")\n");
+ fmtprint(&fmt, "status=''\n");
+ fmtfdflush(&fmt);
+ exits(0);
+}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.