ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/portio.c
Revision: 2.7
Committed: Tue Feb 25 02:47:21 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
Changes since 2.6: +1 -56 lines
Log Message:
Replaced inline copyright notice with #include "copyright.h"

File Contents

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