ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/fgetval.c
Revision: 2.9
Committed: Wed Dec 13 20:53:27 2023 UTC (4 months, 2 weeks ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 2.8: +8 -8 lines
Log Message:
refactor: ansification

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: fgetval.c,v 2.8 2004/03/28 20:33:12 schorsch Exp $";
3 #endif
4 /*
5 * Read white space separated values from stream
6 *
7 * External symbols declared in rtio.h
8 */
9
10 #include "rtio.h"
11
12 #include <stdlib.h>
13 #include <ctype.h>
14
15 int
16 fgetval( /* get specified data word */
17 FILE *fp,
18 int ty,
19 void *vp /* type depends on ty */
20 )
21 {
22 char wrd[64];
23 char *cp;
24 int c;
25 /* elide comments (# to EOL) */
26 do {
27 while ((c = getc(fp)) != EOF && isspace(c))
28 ;
29 if (c == '#')
30 while ((c = getc(fp)) != EOF && c != '\n')
31 ;
32 } while (c == '\n');
33 if (c == EOF)
34 return(EOF);
35 /* get word */
36 cp = wrd;
37 do {
38 *cp++ = c;
39 if (cp - wrd >= sizeof(wrd))
40 return(0);
41 } while ((c = getc(fp)) != EOF && !isspace(c) && c != '#');
42 if (c != EOF)
43 ungetc(c, fp);
44 *cp = '\0';
45 switch (ty) { /* check and convert it */
46 case 'h': /* short */
47 if (!isint(wrd))
48 return(0);
49 *(short *)vp = c = atoi(wrd);
50 if (*(short *)vp != c)
51 return(0);
52 return(1);
53 case 'i': /* integer */
54 if (!isint(wrd))
55 return(0);
56 *(int *)vp = atoi(wrd);
57 return(1);
58 case 'l': /* long */
59 if (!isint(wrd))
60 return(0);
61 *(long *)vp = atol(wrd);
62 return(1);
63 case 'f': /* float */
64 if (!isflt(wrd))
65 return(0);
66 *(float *)vp = atof(wrd);
67 return(1);
68 case 'd': /* double */
69 if (!isflt(wrd))
70 return(0);
71 *(double *)vp = atof(wrd);
72 return(1);
73 case 's': /* string */
74 strcpy(vp, wrd);
75 return(1);
76 default: /* unsupported type */
77 return(0);
78 }
79 }