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 2.1 by greg, Tue Nov 12 16:56:04 1991 UTC vs.
Revision 2.12 by greg, Sat Dec 28 18:05:14 2019 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  
14 < #ifdef  BSD
14 < #define  strchr         index
15 < #endif
14 > #include  "rtio.h"
15  
16 < #define  NULL           0
16 > char *
17 > atos(char *rs, int nb, char *s)         /* get word from string, returning rs */
18 > {
19 >        char  *cp = rs;
20  
21 < extern char  *strchr();
21 >        while (isspace(*s))
22 >                s++;
23 >        while (--nb > 0 && *s && !isspace(*s))
24 >                *cp++ = *s++;
25 >        *cp = '\0';
26 >        return(rs);
27 > }
28  
29  
30   char *
31 < atos(rs, nb, s)                 /* get next word from string */
24 < char  *rs;
25 < register int  nb;
26 < register char  *s;
31 > nextword(char *cp, int nb, char *s)     /* get (quoted) word, returning new s */
32   {
33 <        register char  *cp = rs;
33 >        int     quote = 0;
34  
35 +        if (s == NULL) return(NULL);
36          while (isspace(*s))
37                  s++;
38 <        while (--nb > 0 && *s && !isspace(*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 <        return(rs);
48 >        if (quote && *s==quote)
49 >                s++;
50 >        return(s);
51   }
52  
53  
54   char *
55 < sskip(s)                        /* skip word in string */
41 < register char  *s;
55 > sskip(char *s)                  /* skip word in string, leaving on space */
56   {
57          while (isspace(*s))
58                  s++;
# Line 49 | Line 63 | register char  *s;
63  
64  
65   char *
66 < iskip(s)                        /* skip integer in string */
53 < register char  *s;
66 > sskip2(char *s, int n)          /* skip word(s) in string, leaving on word */
67   {
68          while (isspace(*s))
69                  s++;
70 <        if (*s == '-' || *s == '+')
70 >        while (n-- > 0) {
71 >                while (*s && !isspace(*s))
72 >                        s++;
73 >                while (isspace(*s))
74 >                        s++;
75 >        }
76 >        return(s);
77 > }
78 >
79 >
80 > char *
81 > iskip(char *s)                  /* skip integer in string */
82 > {
83 >        while (isspace(*s))
84                  s++;
85 +        if ((*s == '-') | (*s == '+'))
86 +                s++;
87          if (!isdigit(*s))
88                  return(NULL);
89          do
# Line 66 | Line 94 | register char  *s;
94  
95  
96   char *
97 < fskip(s)                        /* skip float in string */
70 < register char  *s;
97 > fskip(char *s)                  /* skip float in string */
98   {
99 <        register char  *cp;
99 >        char  *cp;
100  
101          while (isspace(*s))
102                  s++;
103 <        if (*s == '-' || *s == '+')
103 >        if ((*s == '-') | (*s == '+'))
104                  s++;
105          cp = s;
106          while (isdigit(*cp))
# Line 85 | Line 112 | register char  *s;
112          }
113          if (cp == s)
114                  return(NULL);
115 <        if (*cp == 'e' || *cp == 'E')
116 <                return(iskip(cp+1));
115 >        if ((*cp == 'e') | (*cp == 'E'))
116 >                return(isspace(*++cp) ? NULL : iskip(cp));
117          return(cp);
118   }
119  
120  
121 < isint(s)                        /* check integer format */
122 < char  *s;
121 > int
122 > isint(char *s)                  /* check integer format */
123   {
124 <        register char  *cp;
124 >        char  *cp;
125  
126          cp = iskip(s);
127          return(cp != NULL && *cp == '\0');
128   }
129  
130  
131 < isintd(s, ds)                   /* check integer format with delimiter set */
132 < char  *s, *ds;
131 > int
132 > isintd(char *s, char *ds)       /* check integer format with delimiter set */
133   {
134 <        register char  *cp;
134 >        char  *cp;
135  
136          cp = iskip(s);
137          return(cp != NULL && strchr(ds, *cp) != NULL);
138   }
139  
140  
141 < isflt(s)                        /* check float format */
142 < char  *s;
141 > int
142 > isflt(char *s)                  /* check float format */
143   {
144 <        register char  *cp;
144 >        char  *cp;
145  
146          cp = fskip(s);
147          return(cp != NULL && *cp == '\0');
148   }
149  
150  
151 < isfltd(s, ds)                   /* check integer format with delimiter set */
152 < char  *s, *ds;
151 > int
152 > isfltd(char *s, char *ds)       /* check integer format with delimiter set */
153   {
154 <        register char  *cp;
154 >        char  *cp;
155  
156          cp = fskip(s);
157          return(cp != NULL && strchr(ds, *cp) != NULL);
158 + }
159 +
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   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines