/* 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); }