ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/words.c
Revision: 2.12
Committed: Sat Dec 28 18:05:14 2019 UTC (4 years, 4 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R3
Changes since 2.11: +1 -2 lines
Log Message:
Removed redundant include files

File Contents

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