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

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id$";
3 #endif
4 /*
5 * Portable i/o for binary files
6 *
7 * External symbols declared in standard.h
8 */
9
10 #include "copyright.h"
11
12 #include <stdio.h>
13
14 #ifndef frexp
15 extern double frexp();
16 #endif
17 #ifndef ldexp
18 extern double ldexp();
19 #endif
20
21
22 void
23 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 void
34 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 putc((int)(i>>(siz<<3) & 0xff), fp);
41 }
42
43
44 void
45 putflt(f, fp) /* put out floating point number */
46 double f;
47 FILE *fp;
48 {
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 long l;
99 double d;
100
101 l = getint(4, fp);
102 d = (l + (l > 0 ? .5 : -.5)) * (1./0x7fffffff);
103 return(ldexp(d, (int)getint(1, fp)));
104 }