| 1 |
< |
/* Copyright (c) 1986 Regents of the University of California */ |
| 1 |
> |
/* Copyright (c) 1991 Regents of the University of California */ |
| 2 |
|
|
| 3 |
|
#ifndef lint |
| 4 |
|
static char SCCSid[] = "$SunId$ LBL"; |
| 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 */ |
| 37 |
|
CUBE *scene; |
| 38 |
|
char *ofn[]; |
| 39 |
|
{ |
| 40 |
< |
char sbuf[128]; |
| 40 |
> |
extern int fputs(); |
| 41 |
> |
char sbuf[512]; |
| 42 |
|
int nf; |
| 43 |
+ |
OBJECT fnobjects; |
| 44 |
|
register int i; |
| 45 |
|
|
| 46 |
|
if (fname == NULL) { |
| 55 |
|
} |
| 56 |
|
} |
| 57 |
|
/* get header */ |
| 58 |
< |
if (load & IO_INFO) |
| 59 |
< |
copyheader(infp, stdout); |
| 58 |
< |
else |
| 59 |
< |
getheader(infp, NULL); |
| 58 |
> |
if (checkheader(infp, OCTFMT, load&IO_INFO ? stdout : NULL) < 0) |
| 59 |
> |
octerror(USER, "not an octree"); |
| 60 |
|
/* check format */ |
| 61 |
|
if (getint(2) != OCTMAGIC) |
| 62 |
< |
octerror(USER, "bad octree"); |
| 62 |
> |
octerror(USER, "incompatible octree format"); |
| 63 |
|
/* get boundaries */ |
| 64 |
|
if (load & IO_BOUNDS) { |
| 65 |
|
for (i = 0; i < 3; i++) |
| 80 |
|
} |
| 81 |
|
if (load & IO_FILES) |
| 82 |
|
ofn[nf] = NULL; |
| 83 |
+ |
/* get number of objects */ |
| 84 |
+ |
fnobjects = getint(sizeof(OBJECT)); |
| 85 |
|
|
| 86 |
|
if (load & IO_TREE) { |
| 87 |
|
/* get the octree */ |
| 96 |
|
} |
| 97 |
|
while (getobj() != OVOID) |
| 98 |
|
; |
| 99 |
+ |
} else if (load & IO_SCENE) { /* consistency checks */ |
| 100 |
+ |
/* check object count */ |
| 101 |
+ |
if (nobjects != objorig+fnobjects) |
| 102 |
+ |
octerror(USER, "bad object count; octree stale?"); |
| 103 |
+ |
/* check for non-surfaces */ |
| 104 |
+ |
if (nonsurfinset(objorig, fnobjects)) |
| 105 |
+ |
octerror(USER, "non-surface in set; octree stale?"); |
| 106 |
|
} |
| 107 |
|
} |
| 108 |
|
fclose(infp); |
| 148 |
|
register int c; |
| 149 |
|
register long r; |
| 150 |
|
|
| 151 |
< |
c = getc(infp); |
| 152 |
< |
r = c&0x80 ? -1L : 0L; /* sign extend */ |
| 153 |
< |
ungetc(c, infp); |
| 154 |
< |
while (siz--) { |
| 151 |
> |
if ((c = getc(infp)) == EOF) |
| 152 |
> |
goto end_file; |
| 153 |
> |
r = 0x80&c ? -1<<8|c : c; /* sign extend */ |
| 154 |
> |
while (--siz > 0) { |
| 155 |
|
if ((c = getc(infp)) == EOF) |
| 156 |
< |
octerror(USER, "truncated octree"); |
| 156 |
> |
goto end_file; |
| 157 |
|
r <<= 8; |
| 158 |
|
r |= c; |
| 159 |
|
} |
| 160 |
|
return(r); |
| 161 |
+ |
end_file: |
| 162 |
+ |
octerror(USER, "truncated octree"); |
| 163 |
|
} |
| 164 |
|
|
| 165 |
|
|
| 170 |
|
double d; |
| 171 |
|
|
| 172 |
|
d = (double)getint(4)/0x7fffffff; |
| 173 |
< |
return(ldexp(d, getint(1))); |
| 173 |
> |
return(ldexp(d, (int)getint(1))); |
| 174 |
|
} |
| 175 |
|
|
| 176 |
|
|