ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/words.c
(Generate patch)

Comparing ray/src/common/words.c (file contents):
Revision 1.1 by greg, Mon Jul 22 14:34:27 1991 UTC vs.
Revision 2.7 by greg, Mon Mar 10 17:26:26 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1991 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char RCSid[] = "$Id";
3   #endif
6
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  
13 #ifdef  BSD
14 #define  strchr         index
15 #endif
15  
16 < #define  NULL           0
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 < extern char  *strchr();
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 < sskip(s)                        /* skip word in string */
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);
# Line 32 | Line 70 | register char  *s;
70  
71  
72   char *
73 < iskip(s)                        /* skip integer in string */
74 < char  *s;
73 > sskip2(s, n)                    /* skip word(s) in string, leaving on word */
74 > register char  *s;
75 > register int    n;
76   {
77 <        register char  *cp = s;
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 <        while (isspace(*cp))
89 <                cp++;
90 <        if (*cp == '-' || *cp == '+')
91 <                cp++;
92 <        while (isdigit(*cp))
93 <                cp++;
94 <        return(cp);
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 < char  *s;
108 > register char  *s;
109   {
110 <        register char  *cp = s;
110 >        register char  *cp;
111  
112 <        while (isspace(*cp))
113 <                cp++;
114 <        if (*cp == '-' || *cp == '+')
115 <                cp++;
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++;
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 > s && *cp == '\0');
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 > s && strchr(*cp, ds) != NULL);
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 > s && *cp == '\0');
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 > s && strchr(*cp, ds) != NULL);
172 >        return(cp != NULL && strchr(ds, *cp) != NULL);
173   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines