diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-11-12 12:59:56 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-11-12 12:59:56 +0000 |
commit | 2598f761bb526afd8ec0de06071fcd6f1a897cd5 (patch) | |
tree | 563c08c1abfbab669dcacf51e76a6e5221fb192d | |
parent | 1ad4db1d8e47b8835f19ad8fe44475db51cf01f9 (diff) | |
download | busybox-w32-2598f761bb526afd8ec0de06071fcd6f1a897cd5.tar.gz busybox-w32-2598f761bb526afd8ec0de06071fcd6f1a897cd5.tar.bz2 busybox-w32-2598f761bb526afd8ec0de06071fcd6f1a897cd5.zip |
- add seq -w support (Natanael Copa)
-rw-r--r-- | coreutils/seq.c | 15 | ||||
-rw-r--r-- | include/usage.h | 3 | ||||
-rwxr-xr-x | testsuite/seq.tests | 7 |
3 files changed, 19 insertions, 6 deletions
diff --git a/coreutils/seq.c b/coreutils/seq.c index 01d71f256..899cd696b 100644 --- a/coreutils/seq.c +++ b/coreutils/seq.c | |||
@@ -16,23 +16,30 @@ int seq_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |||
16 | int seq_main(int argc, char **argv) | 16 | int seq_main(int argc, char **argv) |
17 | { | 17 | { |
18 | double last, increment, i; | 18 | double last, increment, i; |
19 | enum { OPT_w = 1 }; | ||
20 | unsigned opt = getopt32(argv, "+w"); | ||
21 | unsigned width = 0; | ||
19 | 22 | ||
23 | argc -= optind; | ||
24 | argv += optind; | ||
20 | i = increment = 1; | 25 | i = increment = 1; |
21 | switch (argc) { | 26 | switch (argc) { |
22 | case 4: | ||
23 | increment = atof(argv[2]); | ||
24 | case 3: | 27 | case 3: |
25 | i = atof(argv[1]); | 28 | increment = atof(argv[1]); |
26 | case 2: | 29 | case 2: |
30 | i = atof(*argv); | ||
31 | case 1: | ||
27 | last = atof(argv[argc-1]); | 32 | last = atof(argv[argc-1]); |
28 | break; | 33 | break; |
29 | default: | 34 | default: |
30 | bb_show_usage(); | 35 | bb_show_usage(); |
31 | } | 36 | } |
37 | if (opt & OPT_w) /* Pad to length of start or last */ | ||
38 | width = MAX(strlen(*argv), strlen(argv[argc-1])); | ||
32 | 39 | ||
33 | /* You should note that this is pos-5.0.91 semantics, -- FK. */ | 40 | /* You should note that this is pos-5.0.91 semantics, -- FK. */ |
34 | while ((increment > 0 && i <= last) || (increment < 0 && i >= last)) { | 41 | while ((increment > 0 && i <= last) || (increment < 0 && i >= last)) { |
35 | printf("%g\n", i); | 42 | printf("%0*g\n", width, i); |
36 | i += increment; | 43 | i += increment; |
37 | } | 44 | } |
38 | 45 | ||
diff --git a/include/usage.h b/include/usage.h index 71f221828..4360edba6 100644 --- a/include/usage.h +++ b/include/usage.h | |||
@@ -3594,11 +3594,12 @@ | |||
3594 | "\nOther options are silently ignored; -oi is implied" \ | 3594 | "\nOther options are silently ignored; -oi is implied" \ |
3595 | 3595 | ||
3596 | #define seq_trivial_usage \ | 3596 | #define seq_trivial_usage \ |
3597 | "[first [increment]] last" | 3597 | "[-w] [first [increment]] last" |
3598 | #define seq_full_usage "\n\n" \ | 3598 | #define seq_full_usage "\n\n" \ |
3599 | "Print numbers from FIRST to LAST, in steps of INCREMENT.\n" \ | 3599 | "Print numbers from FIRST to LAST, in steps of INCREMENT.\n" \ |
3600 | "FIRST, INCREMENT default to 1\n" \ | 3600 | "FIRST, INCREMENT default to 1\n" \ |
3601 | "\nArguments:" \ | 3601 | "\nArguments:" \ |
3602 | "\n -w Pad to last with leading zeros" \ | ||
3602 | "\n LAST" \ | 3603 | "\n LAST" \ |
3603 | "\n FIRST LAST" \ | 3604 | "\n FIRST LAST" \ |
3604 | "\n FIRST INCREMENT LAST" \ | 3605 | "\n FIRST INCREMENT LAST" \ |
diff --git a/testsuite/seq.tests b/testsuite/seq.tests index ebb44e7a6..cea4eefb8 100755 --- a/testsuite/seq.tests +++ b/testsuite/seq.tests | |||
@@ -29,8 +29,13 @@ testing "seq count up by 2" "seq 4 2 8" "4\n6\n8\n" "" "" | |||
29 | testing "seq count down by 2" "seq 8 -2 4" "8\n6\n4\n" "" "" | 29 | testing "seq count down by 2" "seq 8 -2 4" "8\n6\n4\n" "" "" |
30 | testing "seq count wrong way #1" "seq 4 -2 8" "" "" "" | 30 | testing "seq count wrong way #1" "seq 4 -2 8" "" "" "" |
31 | testing "seq count wrong way #2" "seq 8 2 4" "" "" "" | 31 | testing "seq count wrong way #2" "seq 8 2 4" "" "" "" |
32 | testing "seq count by .3" "seq 3 .3 4" "3\n3.3\n3.6\n3.9\n" "" "" | 32 | testing "seq count by .3" "seq 3 .3 4" "3.0\n3.3\n3.6\n3.9\n" "" "" |
33 | testing "seq count by -.9" "seq .7 -.9 -2.2" "0.7\n-0.2\n-1.1\n-2\n" "" "" | 33 | testing "seq count by -.9" "seq .7 -.9 -2.2" "0.7\n-0.2\n-1.1\n-2\n" "" "" |
34 | testing "seq count by zero" "seq 4 0 8 | head -n 10" "" "" "" | 34 | testing "seq count by zero" "seq 4 0 8 | head -n 10" "" "" "" |
35 | 35 | ||
36 | testing "seq one argument with padding" "seq -w 003" "001\n002\n003\n" "" "" | ||
37 | testing "seq two arguments with padding" "seq -w 005 7" "005\n006\n007\n" "" "" | ||
38 | testing "seq count down by 3 with padding" "seq -w 8 -3 04" "08\n05\n" "" "" | ||
39 | testing "seq count by .3 with padding" "seq -w 03 .3 0004" "003.0\n003.3\n003.6\n003.9\n" "" "" | ||
40 | |||
36 | exit $FAILCOUNT | 41 | exit $FAILCOUNT |