ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/portio.c
Revision: 2.1
Committed: Mon Jul 13 15:36:01 1992 UTC (31 years, 9 months ago) by greg
Content type: text/plain
Branch: MAIN
Log Message:
Initial revision

File Contents

# User Rev Content
1 greg 2.1 /* Copyright (c) 1992 Regents of the University of California */
2    
3     #ifndef lint
4     static char SCCSid[] = "$SunId$ LBL";
5     #endif
6    
7     /*
8     * Portable i/o for binary files
9     */
10    
11     #include <stdio.h>
12    
13    
14     putstr(s, fp) /* write null-terminated string to fp */
15     register char *s;
16     register FILE *fp;
17     {
18     do
19     putc(*s, fp);
20     while (*s++);
21     }
22    
23    
24     putint(i, siz, fp) /* write a siz-byte integer to fp */
25     long i;
26     register int siz;
27     register FILE *fp;
28     {
29     while (siz--)
30     putc(i>>(siz<<3) & 0xff, fp);
31     }
32    
33    
34     putflt(f, fp) /* put out floating point number */
35     double f;
36     {
37     extern double frexp();
38     int e;
39    
40     putint((long)(frexp(f,&e)*0x7fffffff), 4, fp);
41     putint((long)e, 1, fp);
42     }
43    
44    
45     char *
46     getstr(s, fp) /* get null-terminated string */
47     char *s;
48     register FILE *fp;
49     {
50     register char *cp;
51     register int c;
52    
53     cp = s;
54     while ((c = getc(fp)) != EOF)
55     if ((*cp++ = c) == '\0')
56     return(s);
57    
58     return(NULL);
59     }
60    
61    
62     long
63     getint(siz, fp) /* get a siz-byte integer */
64     int siz;
65     register FILE *fp;
66     {
67     register int c;
68     register long r;
69    
70     if ((c = getc(fp)) == EOF)
71     return(EOF);
72     r = 0x80&c ? -1<<8|c : c; /* sign extend */
73     while (--siz > 0) {
74     if ((c = getc(fp)) == EOF)
75     return(EOF);
76     r <<= 8;
77     r |= c;
78     }
79     return(r);
80     }
81    
82    
83     double
84     getflt(fp) /* get a floating point number */
85     FILE *fp;
86     {
87     extern double ldexp();
88     double d;
89    
90     d = (double)getint(4, fp)/0x7fffffff;
91     return(ldexp(d, (int)getint(1, fp)));
92     }