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