ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/wordfile.c
Revision: 2.15
Committed: Fri Jun 10 16:42:11 2005 UTC (18 years, 10 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad4R2P2, rad5R0, rad3R7P2, rad3R7P1, rad4R2, rad4R1, rad4R0, rad3R8, rad3R9, rad4R2P1
Changes since 2.14: +2 -2 lines
Log Message:
Added rtcontrib -M option to read modifier list from a file

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: wordfile.c,v 2.14 2004/11/05 17:36:55 greg Exp $";
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 #include "copyright.h"
12
13 #include <ctype.h>
14 #include <string.h>
15 #include <stdio.h>
16 #include <sys/types.h>
17 #include <sys/stat.h>
18 #include <fcntl.h>
19
20 #include "platform.h"
21 #include "standard.h"
22
23
24 #ifndef MAXFLEN
25 #define MAXFLEN 65536 /* file must be smaller than this */
26 #endif
27
28
29 int
30 wordfile(words, fname) /* get words from fname, put in words */
31 char **words;
32 char *fname;
33 {
34 int fd;
35 char buf[MAXFLEN];
36 register int n;
37 /* load file into buffer */
38 if (fname == NULL)
39 return(-1); /* no filename */
40 if ((fd = open(fname, 0)) < 0)
41 return(-1); /* open error */
42 n = read(fd, buf, MAXFLEN);
43 close(fd);
44 if (n < 0) /* read error */
45 return(-1);
46 if (n == MAXFLEN) /* file too big, take what we can */
47 while (!isspace(buf[--n]))
48 if (n <= 0) /* one long word! */
49 return(-1);
50 buf[n] = '\0'; /* terminate */
51 return(wordstring(words, buf)); /* wordstring does the rest */
52 }
53
54
55 int
56 wordstring(avl, str) /* allocate and load argument list */
57 char **avl;
58 char *str;
59 {
60 register char *cp, **ap;
61
62 if (str == NULL)
63 return(-1);
64 cp = bmalloc(strlen(str)+1);
65 if (cp == NULL) /* ENOMEM */
66 return(-1);
67 strcpy(cp, str);
68 ap = avl; /* parse into words */
69 for ( ; ; ) {
70 while (isspace(*cp)) /* nullify spaces */
71 *cp++ = '\0';
72 if (!*cp) /* all done? */
73 break;
74 *ap++ = cp; /* add argument to list */
75 while (*++cp && !isspace(*cp))
76 ;
77 }
78 *ap = NULL;
79 return(ap - avl);
80 }