ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/wordfile.c
Revision: 2.8
Committed: Sat Feb 22 02:07:23 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.7: +60 -4 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 2.1 #ifndef lint
2 greg 2.8 static const char RCSid[] = "$Id$";
3 greg 2.1 #endif
4     /*
5     * Load whitespace separated words from a file into an array.
6     * Assume the passed pointer array is big enough to hold them all.
7 greg 2.8 *
8     * External symbols declared in standard.h
9     */
10    
11     /* ====================================================================
12     * The Radiance Software License, Version 1.0
13     *
14     * Copyright (c) 1990 - 2002 The Regents of the University of California,
15     * through Lawrence Berkeley National Laboratory. All rights reserved.
16     *
17     * Redistribution and use in source and binary forms, with or without
18     * modification, are permitted provided that the following conditions
19     * are met:
20     *
21     * 1. Redistributions of source code must retain the above copyright
22     * notice, this list of conditions and the following disclaimer.
23     *
24     * 2. Redistributions in binary form must reproduce the above copyright
25     * notice, this list of conditions and the following disclaimer in
26     * the documentation and/or other materials provided with the
27     * distribution.
28     *
29     * 3. The end-user documentation included with the redistribution,
30     * if any, must include the following acknowledgment:
31     * "This product includes Radiance software
32     * (http://radsite.lbl.gov/)
33     * developed by the Lawrence Berkeley National Laboratory
34     * (http://www.lbl.gov/)."
35     * Alternately, this acknowledgment may appear in the software itself,
36     * if and wherever such third-party acknowledgments normally appear.
37     *
38     * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
39     * and "The Regents of the University of California" must
40     * not be used to endorse or promote products derived from this
41     * software without prior written permission. For written
42     * permission, please contact [email protected].
43     *
44     * 5. Products derived from this software may not be called "Radiance",
45     * nor may "Radiance" appear in their name, without prior written
46     * permission of Lawrence Berkeley National Laboratory.
47     *
48     * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
49     * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
50     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
51     * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
52     * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
53     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
54     * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
55     * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
56     * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
57     * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
58     * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59     * SUCH DAMAGE.
60     * ====================================================================
61     *
62     * This software consists of voluntary contributions made by many
63     * individuals on behalf of Lawrence Berkeley National Laboratory. For more
64     * information on Lawrence Berkeley National Laboratory, please see
65     * <http://www.lbl.gov/>.
66 greg 2.1 */
67    
68 greg 2.2 #include <ctype.h>
69    
70 greg 2.1 #define NULL 0
71    
72 greg 2.3 #define MAXFLEN 8192 /* file must be smaller than this */
73 greg 2.1
74     extern char *bmalloc();
75    
76    
77     int
78     wordfile(words, fname) /* get words from fname, put in words */
79     char **words;
80     char *fname;
81     {
82     int fd;
83 greg 2.3 char buf[MAXFLEN];
84 greg 2.1 register int n;
85 greg 2.3 /* load file into buffer */
86 greg 2.7 if (fname == NULL)
87     return(-1); /* no filename */
88 greg 2.1 if ((fd = open(fname, 0)) < 0)
89 greg 2.3 return(-1); /* open error */
90 greg 2.2 n = read(fd, buf, MAXFLEN);
91 greg 2.1 close(fd);
92 greg 2.3 if (n < 0) /* read error */
93     return(-1);
94 greg 2.2 if (n == MAXFLEN) /* file too big, take what we can */
95 greg 2.1 while (!isspace(buf[--n]))
96 greg 2.3 if (n <= 0) /* one long word! */
97     return(-1);
98     buf[n] = '\0'; /* terminate */
99     return(wordstring(words, buf)); /* wordstring does the rest */
100     }
101    
102    
103     int
104     wordstring(avl, str) /* allocate and load argument list */
105     char **avl;
106     char *str;
107     {
108     register char *cp, **ap;
109    
110     if (str == NULL)
111     return(-1);
112     cp = bmalloc(strlen(str)+1);
113     if (cp == NULL) /* ENOMEM */
114     return(-1);
115     strcpy(cp, str);
116 greg 2.4 ap = avl; /* parse into words */
117     for ( ; ; ) {
118     while (isspace(*cp)) /* nullify spaces */
119     *cp++ = '\0';
120     if (!*cp) /* all done? */
121     break;
122     *ap++ = cp; /* add argument to list */
123 greg 2.6 while (*++cp && !isspace(*cp))
124     ;
125 greg 2.1 }
126 greg 2.3 *ap = NULL;
127     return(ap - avl);
128 greg 2.1 }