Revision: | 2.2 |
Committed: | Sat Feb 22 02:07:30 2003 UTC (22 years, 2 months ago) by greg |
Content type: | text/plain |
Branch: | MAIN |
CVS Tags: | rad3R5 |
Changes since 2.1: | +1 -4 lines |
Log Message: | Changes and check-in for 3.5 release Includes new source files and modifications not recorded for many years See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release |
# | User | Rev | Content |
---|---|---|---|
1 | greg | 1.3 | #ifndef lint |
2 | greg | 2.2 | static const char RCSid[] = "$Id$"; |
3 | greg | 1.3 | #endif |
4 | /* | ||
5 | * Convert angle ranges of the form a-b:s,c to discrete values | ||
6 | */ | ||
7 | greg | 1.1 | |
8 | #include <ctype.h> | ||
9 | |||
10 | greg | 1.3 | #include "setscan.h" |
11 | |||
12 | greg | 1.1 | |
13 | setscan(ang, arg) /* set up scan according to arg */ | ||
14 | register ANGLE *ang; | ||
15 | register char *arg; | ||
16 | { | ||
17 | int state = ','; | ||
18 | int start, finish, step; | ||
19 | |||
20 | while (state) { | ||
21 | switch (state) { | ||
22 | case ',': | ||
23 | start = atoi(arg); | ||
24 | finish = start; | ||
25 | step = 1; | ||
26 | break; | ||
27 | case '-': | ||
28 | finish = atoi(arg); | ||
29 | if (finish < start) | ||
30 | return(-1); | ||
31 | break; | ||
32 | case ':': | ||
33 | step = atoi(arg); | ||
34 | break; | ||
35 | default: | ||
36 | return(-1); | ||
37 | } | ||
38 | greg | 1.2 | if (!isdigit(*arg)) |
39 | greg | 1.1 | return(-1); |
40 | do | ||
41 | arg++; | ||
42 | while (isdigit(*arg)); | ||
43 | state = *arg++; | ||
44 | if (!state || state == ',') | ||
45 | while (start <= finish) { | ||
46 | *ang++ = start; | ||
47 | start += step; | ||
48 | } | ||
49 | } | ||
50 | *ang = AEND; | ||
51 | return(0); | ||
52 | } |