diff options
Diffstat (limited to 'coreutils')
-rw-r--r-- | coreutils/seq.c | 15 |
1 files changed, 11 insertions, 4 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 | ||