This is input.c in view mode; [Download] [Up]
#include <math.h> #include <stdio.h> #include "ray.h" input(s) char *s; {struct object *o; FILE *f; int i,sp,sd; char c; double fov; if((f=fopen(s,"r"))==0) { perror(s); exit(1); } o=objects; if(fscanf(f," f %lf ",&fov)!=1||fov<=0||fov>=180) { fprintf(stderr,"field of view format error\n"); exit(1); } fovf=tan(fov*3.14159/360)/sqrt(2.0); o->flags=EYE; o->center.x=o->center.y=o->center.z=0; o->radius=0; o++; lights=0; while(fscanf(f," l %lf %lf %lf ",&o->center.x,&o->center.y, &o->center.z)==3) { o->flags=LIGHT; o->radius=0; o++; lights++; } maxobj=lights+1; while(fscanf(f," o %d %d ",&sp,&sd)==2) { if(maxobj==MAXOBJECTS) { fprintf(stderr,"too many objects\n"); exit(1); } if(sp<0||sp>=nshapetab) { fprintf(stderr,"shape number range error\n"); exit(1); } if(sd<0||sd>=nshadetab) { fprintf(stderr,"shade number range error\n"); exit(1); } o= &objects[maxobj]; o->flags=0; o->shape=shapetab[sp].shapefunc; o->spparams=nalloc(double,shapetab[sp].nparams); for(i=0;i<shapetab[sp].nparams;i++) { if(fscanf(f," %lf ",&o->spparams[i])!=1) { fprintf(stderr,"shape parameter error\n"); exit(1); } } (*shapetab[sp].shapeinitfunc)(o); o->shade=shadetab[sd].shadefunc; o->sdparams=nalloc(double,shadetab[sd].nparams); for(i=0;i<shadetab[sd].nparams;i++) { if(fscanf(f," %lf ",&o->sdparams[i])!=1) { fprintf(stderr,"shade parameter error\n"); exit(1); } } (*shadetab[sd].shadeinitfunc)(o); maxobj++; } if(fscanf(f," %c",&c)!=1||c!='e') { fprintf(stderr,"end command not found\n"); exit(1); } (void) fclose(f); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.