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.2 by greg, Tue Jul 23 11:36:42 1991 UTC vs.
Revision 2.11 by greg, Thu Apr 28 17:46:25 2011 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  
15 < #ifdef  BSD
14 < #define  strchr         index
15 < #endif
15 > #include  "rtio.h"
16  
17 < #define  NULL           0
17 > char *
18 > atos(char *rs, int nb, char *s)         /* get word from string, returning rs */
19 > {
20 >        char  *cp = rs;
21  
22 < extern char  *strchr();
22 >        while (isspace(*s))
23 >                s++;
24 >        while (--nb > 0 && *s && !isspace(*s))
25 >                *cp++ = *s++;
26 >        *cp = '\0';
27 >        return(rs);
28 > }
29  
30  
31   char *
32 < atos(rs, nb, s)                 /* get next word from string */
24 < char  *rs;
25 < register int  nb;
26 < register char  *s;
32 > nextword(char *cp, int nb, char *s)     /* get (quoted) word, returning new s */
33   {
34 <        register char  *cp = rs;
34 >        int     quote = 0;
35  
36 +        if (s == NULL) return(NULL);
37          while (isspace(*s))
38                  s++;
39 <        while (--nb > 0 && *s && !isspace(*s))
39 >        switch (*s) {
40 >        case '\0':
41 >                return(NULL);
42 >        case '"':
43 >        case '\'':
44 >                quote = *s++;
45 >        }
46 >        while (--nb > 0 && *s && (quote ? *s!=quote : !isspace(*s)))
47                  *cp++ = *s++;
48          *cp = '\0';
49 <        return(rs);
49 >        if (quote && *s==quote)
50 >                s++;
51 >        return(s);
52   }
53  
54  
55   char *
56 < sskip(s)                        /* skip word in string */
41 < register char  *s;
56 > sskip(char *s)                  /* skip word in string, leaving on space */
57   {
58          while (isspace(*s))
59                  s++;
# Line 49 | Line 64 | register char  *s;
64  
65  
66   char *
67 < iskip(s)                        /* skip integer in string */
53 < register char  *s;
67 > sskip2(char *s, int n)          /* skip word(s) in string, leaving on word */
68   {
69          while (isspace(*s))
70                  s++;
71 <        if (*s == '-' || *s == '+')
71 >        while (n-- > 0) {
72 >                while (*s && !isspace(*s))
73 >                        s++;
74 >                while (isspace(*s))
75 >                        s++;
76 >        }
77 >        return(s);
78 > }
79 >
80 >
81 > char *
82 > iskip(char *s)                  /* skip integer in string */
83 > {
84 >        while (isspace(*s))
85                  s++;
86 +        if ((*s == '-') | (*s == '+'))
87 +                s++;
88          if (!isdigit(*s))
89                  return(NULL);
90          do
# Line 66 | Line 95 | register char  *s;
95  
96  
97   char *
98 < fskip(s)                        /* skip float in string */
70 < register char  *s;
98 > fskip(char *s)                  /* skip float in string */
99   {
100 <        register char  *cp = s;
100 >        char  *cp;
101  
102 <        while (isspace(*cp))
103 <                cp++;
104 <        if (*cp == '-' || *cp == '+')
105 <                cp++;
106 <        s = cp;
102 >        while (isspace(*s))
103 >                s++;
104 >        if ((*s == '-') | (*s == '+'))
105 >                s++;
106 >        cp = s;
107          while (isdigit(*cp))
108                  cp++;
109          if (*cp == '.') {
# Line 85 | Line 113 | register char  *s;
113          }
114          if (cp == s)
115                  return(NULL);
116 <        if (*cp == 'e' || *cp == 'E')
117 <                return(iskip(cp+1));
116 >        if ((*cp == 'e') | (*cp == 'E'))
117 >                return(isspace(*++cp) ? NULL : iskip(cp));
118          return(cp);
119   }
120  
121  
122 < isint(s)                        /* check integer format */
123 < char  *s;
122 > int
123 > isint(char *s)                  /* check integer format */
124   {
125 <        register char  *cp;
125 >        char  *cp;
126  
127          cp = iskip(s);
128          return(cp != NULL && *cp == '\0');
129   }
130  
131  
132 < isintd(s, ds)                   /* check integer format with delimiter set */
133 < char  *s, *ds;
132 > int
133 > isintd(char *s, char *ds)       /* check integer format with delimiter set */
134   {
135 <        register char  *cp;
135 >        char  *cp;
136  
137          cp = iskip(s);
138 <        return(cp != NULL && strchr(*cp, ds) != NULL);
138 >        return(cp != NULL && strchr(ds, *cp) != NULL);
139   }
140  
141  
142 < isflt(s)                        /* check float format */
143 < char  *s;
142 > int
143 > isflt(char *s)                  /* check float format */
144   {
145 <        register char  *cp;
145 >        char  *cp;
146  
147          cp = fskip(s);
148          return(cp != NULL && *cp == '\0');
149   }
150  
151  
152 < isfltd(s, ds)                   /* check integer format with delimiter set */
153 < char  *s, *ds;
152 > int
153 > isfltd(char *s, char *ds)       /* check integer format with delimiter set */
154   {
155 <        register char  *cp;
155 >        char  *cp;
156  
157          cp = fskip(s);
158 <        return(cp != NULL && strchr(*cp, ds) != NULL);
158 >        return(cp != NULL && strchr(ds, *cp) != NULL);
159 > }
160 >
161 >
162 > int
163 > isname(char *s)                 /* check for legal identifier name */
164 > {
165 >        while (*s == '_')                       /* skip leading underscores */
166 >                s++;
167 >        if (!isascii(*s) || !isalpha(*s))       /* start with a letter */
168 >                return(0);
169 >        while (isascii(*++s) && isgraph(*s))    /* all visible characters */
170 >                ;
171 >        return(*s == '\0');                     /* ending in nul */
172   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines