[hackers] [9base] missing bit of getflags || anselm

From: <hg_AT_suckless.org>
Date: Mon, 22 Mar 2010 08:08:21 +0000 (UTC)

changeset: 53:b47a5a6e5d0b
tag: tip
user: anselm_AT_garbe.us
date: Mon Mar 22 08:08:16 2010 +0000
files: getflags/Makefile getflags/getflags.c
description:
missing bit of getflags

diff -r 17dddf8fcdca -r b47a5a6e5d0b getflags/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/getflags/Makefile Mon Mar 22 08:08:16 2010 +0000
@@ -0,0 +1,11 @@
+# getflags - unix port from plan9
+#
+# Depends on ../lib9
+
+TARG = getflags
+
+include ../std.mk
+
+pre-uninstall:
+
+post-install:
diff -r 17dddf8fcdca -r b47a5a6e5d0b getflags/getflags.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/getflags/getflags.c Mon Mar 22 08:08:16 2010 +0000
@@ -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);
+}
Received on Mon Mar 22 2010 - 08:08:21 UTC

This archive was generated by hypermail 2.2.0 : Mon Mar 22 2010 - 08:12:08 UTC