ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/header.c
Revision: 1.2
Committed: Thu Apr 18 12:56:58 1991 UTC (33 years ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.1: +59 -10 lines
Log Message:
added format info to headers

File Contents

# User Rev Content
1 greg 1.1 /* Copyright (c) 1988 Regents of the University of California */
2    
3     #ifndef lint
4     static char SCCSid[] = "$SunId$ LBL";
5     #endif
6    
7     /*
8     * header.c - routines for reading and writing information headers.
9     *
10     * 8/19/88
11     */
12    
13     #include <stdio.h>
14    
15 greg 1.2 #define MAXLINE 512
16 greg 1.1
17 greg 1.2 char FMTSTR[] = "FORMAT=";
18     int FMTSTRL = 7;
19    
20    
21 greg 1.1 printargs(ac, av, fp) /* print arguments to a file */
22     int ac;
23     char **av;
24     FILE *fp;
25     {
26     while (ac-- > 0) {
27     fputs(*av++, fp);
28     putc(' ', fp);
29     }
30     putc('\n', fp);
31     }
32    
33    
34 greg 1.2 isformat(s) /* is line a format line? */
35     char *s;
36     {
37     return(!strncmp(s,FMTSTR,FMTSTRL));
38     }
39 greg 1.1
40 greg 1.2
41     formatval(r, s) /* return format value */
42     register char *r;
43     register char *s;
44     {
45     s += FMTSTRL;
46     while (*s && *s != '\n')
47     *r++ = *s++;
48     *r = '\0';
49     }
50    
51    
52     fputformat(s, fp) /* put out a format value */
53     char *s;
54 greg 1.1 FILE *fp;
55 greg 1.2 {
56     fputs(FMTSTR, fp);
57     fputs(s, fp);
58     putc('\n', fp);
59     }
60    
61    
62     getheader(fp, f, p) /* get header from file */
63     FILE *fp;
64 greg 1.1 int (*f)();
65 greg 1.2 char *p;
66 greg 1.1 {
67     char buf[MAXLINE];
68    
69     for ( ; ; ) {
70     buf[MAXLINE-2] = '\n';
71     if (fgets(buf, sizeof(buf), fp) == NULL)
72     return(-1);
73     if (buf[0] == '\n')
74     return(0);
75     if (buf[MAXLINE-2] != '\n') {
76     ungetc(buf[MAXLINE-2], fp); /* prevent false end */
77     buf[MAXLINE-2] = '\0';
78     }
79     if (f != NULL)
80 greg 1.2 (*f)(buf, p);
81 greg 1.1 }
82     }
83    
84    
85 greg 1.2 struct check {
86     FILE *fp;
87     char fs[32];
88     };
89 greg 1.1
90 greg 1.2
91 greg 1.1 static
92 greg 1.2 mycheck(s, cp) /* check a header line for format info. */
93 greg 1.1 char *s;
94 greg 1.2 register struct check *cp;
95 greg 1.1 {
96 greg 1.2 if (!strncmp(s,FMTSTR,FMTSTRL))
97     formatval(cp->fs, s);
98     else if (cp->fp != NULL) /* don't copy format info. */
99     fputs(s, cp->fp);
100 greg 1.1 }
101    
102    
103 greg 1.2 checkheader(fin, fmt, fout) /* check data format in header */
104     FILE *fin;
105     char *fmt;
106     FILE *fout;
107 greg 1.1 {
108 greg 1.2 struct check cdat;
109    
110     cdat.fp = fout;
111     cdat.fs[0] = '\0';
112     if (getheader(fin, mycheck, &cdat) < 0)
113     return(-1);
114     if (fmt != NULL && cdat.fs[0] != '\0')
115     return(strcmp(fmt, cdat.fs) ? -1 : 1);
116     return(0);
117 greg 1.1 }