18 |
|
|
19 |
|
#include "otypes.h" |
20 |
|
|
21 |
< |
double atof(); |
22 |
< |
double getflt(); |
23 |
< |
long getint(); |
24 |
< |
char *getstr(); |
25 |
< |
OCTREE getfullnode(), gettree(); |
21 |
> |
extern double atof(); |
22 |
> |
static double getflt(); |
23 |
> |
static long getint(); |
24 |
> |
static char *getstr(); |
25 |
> |
static OCTREE getfullnode(), gettree(); |
26 |
|
|
27 |
|
static char *infn; /* input file name */ |
28 |
|
static FILE *infp; /* input file stream */ |
39 |
|
{ |
40 |
|
char sbuf[128]; |
41 |
|
int nf; |
42 |
+ |
OBJECT fnobjects; |
43 |
|
register int i; |
44 |
|
|
45 |
|
if (fname == NULL) { |
60 |
|
getheader(infp, NULL); |
61 |
|
/* check format */ |
62 |
|
if (getint(2) != OCTMAGIC) |
63 |
< |
octerror(USER, "bad octree"); |
63 |
> |
octerror(USER, "invalid octree format"); |
64 |
|
/* get boundaries */ |
65 |
|
if (load & IO_BOUNDS) { |
66 |
|
for (i = 0; i < 3; i++) |
81 |
|
} |
82 |
|
if (load & IO_FILES) |
83 |
|
ofn[nf] = NULL; |
84 |
+ |
/* get number of objects */ |
85 |
+ |
fnobjects = getint(sizeof(OBJECT)); |
86 |
|
|
87 |
|
if (load & IO_TREE) { |
88 |
|
/* get the octree */ |
100 |
|
} |
101 |
|
} |
102 |
|
fclose(infp); |
103 |
+ |
/* consistency checks */ |
104 |
+ |
if (load & IO_SCENE) { |
105 |
+ |
/* check object count */ |
106 |
+ |
if (nobjects != objorig+fnobjects) |
107 |
+ |
octerror(USER, "bad object count -- stale octree?"); |
108 |
+ |
/* check for non-surfaces */ |
109 |
+ |
if (nonsurfinset(objorig, fnobjects)) |
110 |
+ |
octerror(USER, "non-surface in set -- stale octree?"); |
111 |
+ |
} |
112 |
|
return(nf); |
113 |
|
} |
114 |
|
|
151 |
|
register int c; |
152 |
|
register long r; |
153 |
|
|
154 |
< |
c = getc(infp); |
155 |
< |
r = c&0x80 ? -1L : 0L; /* sign extend */ |
156 |
< |
ungetc(c, infp); |
157 |
< |
while (siz--) { |
154 |
> |
if ((c = getc(infp)) == EOF) |
155 |
> |
goto end_file; |
156 |
> |
r = 0x80&c ? -1<<8|c : c; /* sign extend */ |
157 |
> |
while (--siz > 0) { |
158 |
|
if ((c = getc(infp)) == EOF) |
159 |
< |
octerror(USER, "truncated octree"); |
159 |
> |
goto end_file; |
160 |
|
r <<= 8; |
161 |
|
r |= c; |
162 |
|
} |
163 |
|
return(r); |
164 |
+ |
end_file: |
165 |
+ |
octerror(USER, "truncated octree"); |
166 |
|
} |
167 |
|
|
168 |
|
|