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

Reply via email to