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 1.4 by greg, Mon Oct 28 09:47:25 1991 UTC vs.
Revision 2.4 by greg, Sat Feb 22 02:07:22 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 + /* ====================================================================
11 + * The Radiance Software License, Version 1.0
12 + *
13 + * Copyright (c) 1990 - 2002 The Regents of the University of California,
14 + * through Lawrence Berkeley National Laboratory.   All rights reserved.
15 + *
16 + * Redistribution and use in source and binary forms, with or without
17 + * modification, are permitted provided that the following conditions
18 + * are met:
19 + *
20 + * 1. Redistributions of source code must retain the above copyright
21 + *         notice, this list of conditions and the following disclaimer.
22 + *
23 + * 2. Redistributions in binary form must reproduce the above copyright
24 + *       notice, this list of conditions and the following disclaimer in
25 + *       the documentation and/or other materials provided with the
26 + *       distribution.
27 + *
28 + * 3. The end-user documentation included with the redistribution,
29 + *           if any, must include the following acknowledgment:
30 + *             "This product includes Radiance software
31 + *                 (http://radsite.lbl.gov/)
32 + *                 developed by the Lawrence Berkeley National Laboratory
33 + *               (http://www.lbl.gov/)."
34 + *       Alternately, this acknowledgment may appear in the software itself,
35 + *       if and wherever such third-party acknowledgments normally appear.
36 + *
37 + * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
38 + *       and "The Regents of the University of California" must
39 + *       not be used to endorse or promote products derived from this
40 + *       software without prior written permission. For written
41 + *       permission, please contact [email protected].
42 + *
43 + * 5. Products derived from this software may not be called "Radiance",
44 + *       nor may "Radiance" appear in their name, without prior written
45 + *       permission of Lawrence Berkeley National Laboratory.
46 + *
47 + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
48 + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
49 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
50 + * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
51 + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
52 + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
53 + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
54 + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
55 + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
56 + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
57 + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 + * SUCH DAMAGE.
59 + * ====================================================================
60 + *
61 + * This software consists of voluntary contributions made by many
62 + * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
63 + * information on Lawrence Berkeley National Laboratory, please see
64 + * <http://www.lbl.gov/>.
65 + */
66 +
67   #include <stdio.h>
68 + #include <stdlib.h>
69   #include <ctype.h>
70   /*
71   * rexpr.c - regular expression parser (ala grep)
# Line 107 | Line 168 | int iflg, wflag;
168                          if ((c = *sp++) == '\0')
169                                  return(-1);
170                          if (c == '<') {
171 <                                *ep++ = CBRC;
171 >                                if (ep == expbuf || ep[-1] != CBRC)
172 >                                        *ep++ = CBRC;
173                                  continue;
174                          }
175                          if (c == '>') {
# Line 125 | Line 187 | int iflg, wflag;
187   char *
188   expsave()                     /* save compiled string */
189   {
128        extern char  *malloc();
190          register char  *ep;
191  
192          if (explen == 0)
193                  return(NULL);
194 <        if ((ep = malloc(explen+3)) == NULL)
194 >        if ((ep = (char *)malloc(explen+3)) == NULL)
195                  return(NULL);
196          ep[0] = iflag;
197          ep[1] = circf;
# Line 139 | Line 200 | expsave()                    /* save compiled string */
200          return(ep);
201   }
202  
203 + void
204   expset(ep)                      /* install saved string */
205   register char  *ep;
206   {
# Line 148 | Line 210 | register char  *ep;
210   }
211  
212   char *
213 < eindex(sp)                    /* find the expression in str */
213 > eindex(sp)                    /* find the expression in string sp */
214   register char *sp;
215   {
216 <        if (circf) {
217 <                if (advance(sp, expbuf))
218 <                        return(sp);
216 >        /* check for match at beginning of line, watch CBRC */
217 >        if (advance(sp, expbuf[0]==CBRC ? expbuf+1 : expbuf))
218 >                return(sp);
219 >        if (circf)
220                  return(NULL);
158        }
221          /* fast check for first character */
222          if (expbuf[0]==CCHR) {
223                  register c = expbuf[1];
224 <                do {
224 >                while (*++sp)
225                          if (same(*sp, c) && advance(sp, expbuf))
226                                  return(sp);
165                } while (*sp++);
227                  return(NULL);
228          }
229          /* regular algorithm */
230 <        do {
230 >        while (*++sp)
231                  if (advance(sp, expbuf))
232                          return(sp);
172        } while (*sp++);
233          return(NULL);
234   }
235  
# Line 247 | Line 307 | register char *ep;
307                  return(0);
308  
309          case CBRC:
250                if (lp == alp)
251                        continue;
310                  if ((isalnum(*lp) || *lp == '_') && !(isalnum(lp[-1]) || lp[-1] == '_'))
311                          continue;
312                  return (0);
# Line 267 | Line 325 | static int
325   cclass(set, c, af)
326   register char *set;
327   register c;
328 + int af;
329   {
330          register n;
331  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines