| 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 |
|
|