--- 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 */
}