annotate toys/seq.c @ 304:93223118c813

Option parsing: stopearly is now a ^ prefix (not +), and an option string with no flags auto-enables stopearly (so seq doesn't have to specify it to avoid having negative number arguments eaten by the option parsing logic).
author Rob Landley <rob@landley.net>
date Thu, 26 Jun 2008 22:48:43 -0500
parents 8350d13fba01
children 15bad33d5ded
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
296
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* vi: set sw=4 ts=4:
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
2 *
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * seq.c - Count from first to last, by increment.
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 *
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 * Copyright 2006 Rob Landley <rob@landley.net>
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
6 *
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
7 * Not in SUSv3. (Don't ask me why not.)
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
8
304
93223118c813 Option parsing: stopearly is now a ^ prefix (not +), and an option string with
Rob Landley <rob@landley.net>
parents: 296
diff changeset
9 USE_SEQ(NEWTOY(seq, "<1>3?", TOYFLAG_USR|TOYFLAG_BIN))
296
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
10
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 config SEQ
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
12 bool "seq"
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 default y
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
14 help
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
15 usage: seq [first] [increment] last
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
16
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
17 Count from first to last, by increment. Omitted arguments default
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 to 1. Two arguments are used as first and last. Arguments can be
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
19 negative or floating point.
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 */
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
21
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
22 #include "toys.h"
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
23
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 void seq_main(void)
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 {
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 double first, increment, last, dd;
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
27
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
28 // Parse command line arguments, with appropriate defaults.
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
29 // Note that any non-numeric arguments are treated as zero.
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
30 first = increment = 1;
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
31 switch (toys.optc) {
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
32 case 3:
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 increment = atof(toys.optargs[1]);
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
34 case 2:
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
35 first = atof(*toys.optargs);
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 default:
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
37 last = atof(toys.optargs[toys.optc-1]);
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 }
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
39
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 // Yes, we're looping on a double. Yes rounding errors can accumulate if
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
41 // you use a non-integer increment. Deal with it.
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 for (dd=first; (increment>0 && dd<=last) || (increment <0 && dd>=last);
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 dd+=increment)
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
44 {
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
45 printf("%g\n", dd);
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
46 }
8350d13fba01 Add seq, and tests for it.
Rob Landley <rob@landley.net>
parents:
diff changeset
47 }