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

Comparing ray/src/common/rexpr.c (file contents):
Revision 2.1 by greg, Tue Nov 12 16:54:41 1991 UTC vs.
Revision 2.7 by schorsch, Sat Jun 7 12:50:20 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1990 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
4 + /*
5 + * Regular expression parsing routines.
6 + *
7 + * External symbols declared in standard.h
8 + */
9  
10 + #include "copyright.h"
11 +
12   #include <stdio.h>
13 + #include <stdlib.h>
14   #include <ctype.h>
15 + #include <string.h>
16 +
17   /*
18   * rexpr.c - regular expression parser (ala grep)
19   */
# Line 107 | Line 115 | int iflg, wflag;
115                          if ((c = *sp++) == '\0')
116                                  return(-1);
117                          if (c == '<') {
118 <                                *ep++ = CBRC;
118 >                                if (ep == expbuf || ep[-1] != CBRC)
119 >                                        *ep++ = CBRC;
120                                  continue;
121                          }
122                          if (c == '>') {
# Line 125 | Line 134 | int iflg, wflag;
134   char *
135   expsave()                     /* save compiled string */
136   {
128        extern char  *malloc();
137          register char  *ep;
138  
139          if (explen == 0)
140                  return(NULL);
141 <        if ((ep = malloc(explen+3)) == NULL)
141 >        if ((ep = (char *)malloc(explen+3)) == NULL)
142                  return(NULL);
143          ep[0] = iflag;
144          ep[1] = circf;
# Line 139 | Line 147 | expsave()                    /* save compiled string */
147          return(ep);
148   }
149  
150 + void
151   expset(ep)                      /* install saved string */
152   register char  *ep;
153   {
# Line 148 | Line 157 | register char  *ep;
157   }
158  
159   char *
160 < eindex(sp)                    /* find the expression in str */
160 > eindex(sp)                    /* find the expression in string sp */
161   register char *sp;
162   {
163 <        if (circf) {
164 <                if (advance(sp, expbuf))
165 <                        return(sp);
163 >        /* check for match at beginning of line, watch CBRC */
164 >        if (advance(sp, expbuf[0]==CBRC ? expbuf+1 : expbuf))
165 >                return(sp);
166 >        if (circf)
167                  return(NULL);
158        }
168          /* fast check for first character */
169          if (expbuf[0]==CCHR) {
170                  register c = expbuf[1];
171 <                do {
171 >                while (*++sp)
172                          if (same(*sp, c) && advance(sp, expbuf))
173                                  return(sp);
165                } while (*sp++);
174                  return(NULL);
175          }
176          /* regular algorithm */
177 <        do {
177 >        while (*++sp)
178                  if (advance(sp, expbuf))
179                          return(sp);
172        } while (*sp++);
180          return(NULL);
181   }
182  
# Line 247 | Line 254 | register char *ep;
254                  return(0);
255  
256          case CBRC:
250                if (lp == alp)
251                        continue;
257                  if ((isalnum(*lp) || *lp == '_') && !(isalnum(lp[-1]) || lp[-1] == '_'))
258                          continue;
259                  return (0);
# Line 267 | Line 272 | static int
272   cclass(set, c, af)
273   register char *set;
274   register c;
275 + int af;
276   {
277          register n;
278  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines