/* vi: set sw=4 ts=4: * * seq.c - Count from first to last, by increment. * * Copyright 2006 Rob Landley * * Not in SUSv3. (Don't ask me why not.) USE_SEQ(NEWTOY(seq, "<1>3?", TOYFLAG_USR|TOYFLAG_BIN)) config SEQ bool "seq" default y help usage: seq [first] [increment] last Count from first to last, by increment. Omitted arguments default to 1. Two arguments are used as first and last. Arguments can be negative or floating point. */ #include "toys.h" void seq_main(void) { double first, increment, last, dd; // Parse command line arguments, with appropriate defaults. // Note that any non-numeric arguments are treated as zero. first = increment = 1; switch (toys.optc) { case 3: increment = atof(toys.optargs[1]); case 2: first = atof(*toys.optargs); default: last = atof(toys.optargs[toys.optc-1]); } // Yes, we're looping on a double. Yes rounding errors can accumulate if // you use a non-integer increment. Deal with it. for (dd=first; (increment>0 && dd<=last) || (increment <0 && dd>=last); dd+=increment) { printf("%g\n", dd); } }