diff options
Diffstat (limited to 'release/src/router/busybox/coreutils/seq.c')
-rw-r--r-- | release/src/router/busybox/coreutils/seq.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/release/src/router/busybox/coreutils/seq.c b/release/src/router/busybox/coreutils/seq.c new file mode 100644 index 00000000..4b853c69 --- /dev/null +++ b/release/src/router/busybox/coreutils/seq.c @@ -0,0 +1,53 @@ +/* vi: set sw=4 ts=4: */ +/* + * seq implementation for busybox + * + * Copyright (C) 2004, Glenn McGrath + * + * Licensed under the GPL v2, see the file LICENSE in this tarball. + */ + +#include "libbb.h" + +/* This is a NOFORK applet. Be very careful! */ + + +int seq_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; +int seq_main(int argc, char **argv) +{ + enum { + OPT_w = (1 << 0), + OPT_s = (1 << 1), + }; + double last, increment, i; + const char *sep, *opt_s = "\n"; + unsigned opt = getopt32(argv, "+ws:", &opt_s); + unsigned width = 0; + + argc -= optind; + argv += optind; + i = increment = 1; + switch (argc) { + case 3: + 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 */ + width = MAX(strlen(*argv), strlen(argv[argc-1])); + + /* You should note that this is pos-5.0.91 semantics, -- FK. */ + sep = ""; + while ((increment > 0 && i <= last) || (increment < 0 && i >= last)) { + printf("%s%0*g", sep, width, i); + sep = opt_s; + i += increment; + } + bb_putchar('\n'); + return fflush(stdout); +} |