--- ray/src/common/words.c 2003/02/22 02:07:23 2.5 +++ ray/src/common/words.c 2019/12/28 18:05:14 2.12 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: words.c,v 2.5 2003/02/22 02:07:23 greg Exp $"; +static const char RCSid[] = "$Id: words.c,v 2.12 2019/12/28 18:05:14 greg Exp $"; #endif /* * Routines for recognizing and moving about words in strings. @@ -7,78 +7,16 @@ static const char RCSid[] = "$Id: words.c,v 2.5 2003/0 * External symbols declared in standard.h */ -/* ==================================================================== - * The Radiance Software License, Version 1.0 - * - * Copyright (c) 1990 - 2002 The Regents of the University of California, - * through Lawrence Berkeley National Laboratory. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes Radiance software - * (http://radsite.lbl.gov/) - * developed by the Lawrence Berkeley National Laboratory - * (http://www.lbl.gov/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Radiance," "Lawrence Berkeley National Laboratory" - * and "The Regents of the University of California" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact radiance@radsite.lbl.gov. - * - * 5. Products derived from this software may not be called "Radiance", - * nor may "Radiance" appear in their name, without prior written - * permission of Lawrence Berkeley National Laboratory. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of Lawrence Berkeley National Laboratory. For more - * information on Lawrence Berkeley National Laboratory, please see - * . - */ +#include "copyright.h" #include -#include -#ifdef BSD -#define strchr index -#endif +#include "rtio.h" - char * -atos(rs, nb, s) /* get word from string, returning rs */ -char *rs; -register int nb; -register char *s; +atos(char *rs, int nb, char *s) /* get word from string, returning rs */ { - register char *cp = rs; + char *cp = rs; while (isspace(*s)) s++; @@ -90,10 +28,7 @@ register char *s; char * -nextword(cp, nb, s) /* get (quoted) word, returning new s */ -register char *cp; -register int nb; -register char *s; +nextword(char *cp, int nb, char *s) /* get (quoted) word, returning new s */ { int quote = 0; @@ -117,8 +52,7 @@ register char *s; char * -sskip(s) /* skip word in string, leaving on space */ -register char *s; +sskip(char *s) /* skip word in string, leaving on space */ { while (isspace(*s)) s++; @@ -129,9 +63,7 @@ register char *s; char * -sskip2(s, n) /* skip word(s) in string, leaving on word */ -register char *s; -register int n; +sskip2(char *s, int n) /* skip word(s) in string, leaving on word */ { while (isspace(*s)) s++; @@ -146,12 +78,11 @@ register int n; char * -iskip(s) /* skip integer in string */ -register char *s; +iskip(char *s) /* skip integer in string */ { while (isspace(*s)) s++; - if (*s == '-' || *s == '+') + if ((*s == '-') | (*s == '+')) s++; if (!isdigit(*s)) return(NULL); @@ -163,14 +94,13 @@ register char *s; char * -fskip(s) /* skip float in string */ -register char *s; +fskip(char *s) /* skip float in string */ { - register char *cp; + char *cp; while (isspace(*s)) s++; - if (*s == '-' || *s == '+') + if ((*s == '-') | (*s == '+')) s++; cp = s; while (isdigit(*cp)) @@ -182,17 +112,16 @@ register char *s; } if (cp == s) return(NULL); - if (*cp == 'e' || *cp == 'E') - return(iskip(cp+1)); + if ((*cp == 'e') | (*cp == 'E')) + return(isspace(*++cp) ? NULL : iskip(cp)); return(cp); } int -isint(s) /* check integer format */ -char *s; +isint(char *s) /* check integer format */ { - register char *cp; + char *cp; cp = iskip(s); return(cp != NULL && *cp == '\0'); @@ -200,10 +129,9 @@ char *s; int -isintd(s, ds) /* check integer format with delimiter set */ -char *s, *ds; +isintd(char *s, char *ds) /* check integer format with delimiter set */ { - register char *cp; + char *cp; cp = iskip(s); return(cp != NULL && strchr(ds, *cp) != NULL); @@ -211,10 +139,9 @@ char *s, *ds; int -isflt(s) /* check float format */ -char *s; +isflt(char *s) /* check float format */ { - register char *cp; + char *cp; cp = fskip(s); return(cp != NULL && *cp == '\0'); @@ -222,11 +149,23 @@ char *s; int -isfltd(s, ds) /* check integer format with delimiter set */ -char *s, *ds; +isfltd(char *s, char *ds) /* check integer format with delimiter set */ { - register char *cp; + char *cp; cp = fskip(s); return(cp != NULL && strchr(ds, *cp) != NULL); +} + + +int +isname(char *s) /* check for legal identifier name */ +{ + while (*s == '_') /* skip leading underscores */ + s++; + if (!isascii(*s) || !isalpha(*s)) /* start with a letter */ + return(0); + while (isascii(*++s) && isgraph(*s)) /* all visible characters */ + ; + return(*s == '\0'); /* ending in nul */ }