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

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id$";
3 #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 *
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 */
67
68 #include <ctype.h>
69
70 #define NULL 0
71
72 #define MAXFLEN 8192 /* file must be smaller than this */
73
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 char buf[MAXFLEN];
84 register int n;
85 /* load file into buffer */
86 if (fname == NULL)
87 return(-1); /* no filename */
88 if ((fd = open(fname, 0)) < 0)
89 return(-1); /* open error */
90 n = read(fd, buf, MAXFLEN);
91 close(fd);
92 if (n < 0) /* read error */
93 return(-1);
94 if (n == MAXFLEN) /* file too big, take what we can */
95 while (!isspace(buf[--n]))
96 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 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 while (*++cp && !isspace(*cp))
124 ;
125 }
126 *ap = NULL;
127 return(ap - avl);
128 }