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

# Content
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 }