ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/words.c
Revision: 2.7
Committed: Mon Mar 10 17:26:26 2003 UTC (21 years, 1 month ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
Changes since 2.6: +1 -5 lines
Log Message:
Compile fixes for Linux

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id";
3 #endif
4 /*
5 * Routines for recognizing and moving about words in strings.
6 *
7 * External symbols declared in standard.h
8 */
9
10 #include "copyright.h"
11
12 #include <ctype.h>
13 #include <string.h>
14
15
16 char *
17 atos(rs, nb, s) /* get word from string, returning rs */
18 char *rs;
19 register int nb;
20 register char *s;
21 {
22 register char *cp = rs;
23
24 while (isspace(*s))
25 s++;
26 while (--nb > 0 && *s && !isspace(*s))
27 *cp++ = *s++;
28 *cp = '\0';
29 return(rs);
30 }
31
32
33 char *
34 nextword(cp, nb, s) /* get (quoted) word, returning new s */
35 register char *cp;
36 register int nb;
37 register char *s;
38 {
39 int quote = 0;
40
41 if (s == NULL) return(NULL);
42 while (isspace(*s))
43 s++;
44 switch (*s) {
45 case '\0':
46 return(NULL);
47 case '"':
48 case '\'':
49 quote = *s++;
50 }
51 while (--nb > 0 && *s && (quote ? *s!=quote : !isspace(*s)))
52 *cp++ = *s++;
53 *cp = '\0';
54 if (quote && *s==quote)
55 s++;
56 return(s);
57 }
58
59
60 char *
61 sskip(s) /* skip word in string, leaving on space */
62 register char *s;
63 {
64 while (isspace(*s))
65 s++;
66 while (*s && !isspace(*s))
67 s++;
68 return(s);
69 }
70
71
72 char *
73 sskip2(s, n) /* skip word(s) in string, leaving on word */
74 register char *s;
75 register int n;
76 {
77 while (isspace(*s))
78 s++;
79 while (n-- > 0) {
80 while (*s && !isspace(*s))
81 s++;
82 while (isspace(*s))
83 s++;
84 }
85 return(s);
86 }
87
88
89 char *
90 iskip(s) /* skip integer in string */
91 register char *s;
92 {
93 while (isspace(*s))
94 s++;
95 if (*s == '-' || *s == '+')
96 s++;
97 if (!isdigit(*s))
98 return(NULL);
99 do
100 s++;
101 while (isdigit(*s));
102 return(s);
103 }
104
105
106 char *
107 fskip(s) /* skip float in string */
108 register char *s;
109 {
110 register char *cp;
111
112 while (isspace(*s))
113 s++;
114 if (*s == '-' || *s == '+')
115 s++;
116 cp = s;
117 while (isdigit(*cp))
118 cp++;
119 if (*cp == '.') {
120 cp++; s++;
121 while (isdigit(*cp))
122 cp++;
123 }
124 if (cp == s)
125 return(NULL);
126 if (*cp == 'e' || *cp == 'E')
127 return(iskip(cp+1));
128 return(cp);
129 }
130
131
132 int
133 isint(s) /* check integer format */
134 char *s;
135 {
136 register char *cp;
137
138 cp = iskip(s);
139 return(cp != NULL && *cp == '\0');
140 }
141
142
143 int
144 isintd(s, ds) /* check integer format with delimiter set */
145 char *s, *ds;
146 {
147 register char *cp;
148
149 cp = iskip(s);
150 return(cp != NULL && strchr(ds, *cp) != NULL);
151 }
152
153
154 int
155 isflt(s) /* check float format */
156 char *s;
157 {
158 register char *cp;
159
160 cp = fskip(s);
161 return(cp != NULL && *cp == '\0');
162 }
163
164
165 int
166 isfltd(s, ds) /* check integer format with delimiter set */
167 char *s, *ds;
168 {
169 register char *cp;
170
171 cp = fskip(s);
172 return(cp != NULL && strchr(ds, *cp) != NULL);
173 }