On Mon, Nov 10, 2008 at 12:02:12PM +0100, Natanael Copa wrote:
>attatched is a patch that adds support for the -w option to seq.
Didn't work for 10 -1 8 (missing ^+ in getopt32)
and forgot to update the usage.
What about separator support? Would need to suppress printing the sep if
it was the last occurance..
>
># ./busybox seq -w 001 010
>001
>002
>003
>004
>005
>006
>007
>008
>009
>010
>
># make bloatcheck
>function old new delta
>seq_main 268 320 +52
>.rodata 169558 169564 +6
>------------------------------------------------------------------------------
>(add/remove: 0/0 grow/shrink: 2/0 up/down: 58/0) Total: 58
>bytes
> text data bss dec hex filename
> 942990 9145 5288 957423 e9bef busybox_old
> 943048 9145 5288 957481 e9c29 busybox_unstripped
>
>-nc
>Index: coreutils/seq.c
>===================================================================
>--- coreutils/seq.c (revision 23942)
>+++ coreutils/seq.c (working copy)
>@@ -16,6 +16,10 @@
> int seq_main(int argc, char **argv)
> {
> double last, increment, i;
>+ int width = getopt32(argv, "w");
>+
>+ argc -= optind;
>+ argv += optind;
>
> i = increment = 1;
> switch (argc) {
>@@ -29,10 +33,12 @@
> default:
> bb_show_usage();
> }
>+ if (width)
>+ width = strlen(argv[argc-1]);
>
> /* You should note that this is pos-5.0.91 semantics, -- FK. */
> while ((increment > 0 && i <= last) || (increment < 0 && i >= last)) {
>- printf("%g\n", i);
>+ printf("%0*g\n", width, i);
> i += increment;
> }
>
>_______________________________________________
>busybox mailing list
>[email protected]
>http://busybox.net/cgi-bin/mailman/listinfo/busybox
Index: coreutils/seq.c
===================================================================
--- coreutils/seq.c (revision 23935)
+++ coreutils/seq.c (working copy)
@@ -16,23 +16,30 @@ int seq_main(int argc, char **argv) MAIN
int seq_main(int argc, char **argv)
{
double last, increment, i;
+ enum { OPT_w = 1, OPT_s };
+ const char *sep = "\n";
+ unsigned opt = getopt32(argv, "+ws:", &sep);
+ argc -= optind;
+ argv += optind;
i = increment = 1;
switch (argc) {
- case 4:
- increment = atof(argv[2]);
case 3:
- i = atof(argv[1]);
+ increment = atof(argv[1]);
case 2:
+ i = atof(*argv);
+ case 1:
last = atof(argv[argc-1]);
break;
default:
bb_show_usage();
}
+ if (opt & OPT_w) /* Pad to length of start or last */
+ opt = MAX(strlen(*argv), strlen(argv[argc-1]));
/* You should note that this is pos-5.0.91 semantics, -- FK. */
while ((increment > 0 && i <= last) || (increment < 0 && i >= last)) {
- printf("%g\n", i);
+ printf("%0*g%s", opt, i, sep);
i += increment;
}
Index: include/usage.h
===================================================================
--- include/usage.h (revision 23935)
+++ include/usage.h (working copy)
@@ -3508,11 +3508,13 @@
"\nOther options are silently ignored; -oi is implied" \
#define seq_trivial_usage \
- "[first [increment]] last"
+ "[-w] [-s separator] [first [increment]] last"
#define seq_full_usage "\n\n" \
"Print numbers from FIRST to LAST, in steps of INCREMENT.\n" \
"FIRST, INCREMENT default to 1\n" \
"\nArguments:" \
+ "\n -w Pad to last with leading zeros" \
+ "\n -s <string> Use string separator" \
"\n LAST" \
"\n FIRST LAST" \
"\n FIRST INCREMENT LAST" \
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox