commit 3f9e501f6b8bd747ac8127ca56e34db0409e03d1
parent 2046778bc915fcbad8b8a9354febcc0b9ccdf683
Author: dsp <dsp@2f30.org>
Date: Mon, 11 Nov 2013 19:53:01 +0000
Add ARGNUM and ARGNUMF(base)
This is useful to support the obsolete syntax -NUM for tools like
head, tail and fold.
Diffstat:
4 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/arg.h b/arg.h
@@ -29,11 +29,25 @@ extern char *argv0;
_argc = argv[0][0];\
switch (_argc)
+/* Handles obsolete -NUM syntax */
+#define ARGNUM case '0':\
+ case '1':\
+ case '2':\
+ case '3':\
+ case '4':\
+ case '5':\
+ case '6':\
+ case '7':\
+ case '8':\
+ case '9'
+
#define ARGEND }\
}
#define ARGC() _argc
+#define ARGNUMF(base) (brk = 1, estrtol(argv[0], (base)))
+
#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\
((x), abort(), (char *)0) :\
(brk = 1, (argv[0][1] != '\0')?\
@@ -47,4 +61,3 @@ extern char *argv0;
(argc--, argv++, argv[0])))
#endif
-
diff --git a/fold.c b/fold.c
@@ -35,6 +35,9 @@ main(int argc, char *argv[])
case 'w':
width = estrtol(EARGF(usage()), 0);
break;
+ ARGNUM:
+ width = ARGNUMF(0);
+ break;
default:
usage();
} ARGEND;
@@ -102,4 +105,3 @@ foldline(const char *str, long width)
putchar('\n');
} while(str[i = n] && str[i] != '\n');
}
-
diff --git a/head.c b/head.c
@@ -23,6 +23,9 @@ main(int argc, char *argv[])
case 'n':
n = estrtol(EARGF(usage()), 0);
break;
+ ARGNUM:
+ n = ARGNUMF(0);
+ break;
default:
usage();
} ARGEND;
@@ -53,4 +56,3 @@ head(FILE *fp, const char *str, long n)
if(ferror(fp))
eprintf("%s: read error:", str);
}
-
diff --git a/tail.c b/tail.c
@@ -30,6 +30,9 @@ main(int argc, char *argv[])
if(lines[0] == '+')
tail = dropinit;
break;
+ ARGNUM:
+ n = ARGNUMF(0);
+ break;
default:
usage();
} ARGEND;