2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
16 * Wrappers for physfs abstraction layer
33 #define CFILE PHYSFS_file
34 #define cfopen(f,m) PHYSFSX_openReadBuffered(f)
35 #define cfread(p,s,n,fp) ((int)PHYSFS_read(fp,p,s,n))
36 #define cfclose PHYSFS_close
37 #define cftell(f) ((int)PHYSFS_tell(f))
38 #define cfexist PHYSFS_exists
39 #define cfilelength(f) ((int)PHYSFS_fileLength(f))
41 //Specify the name of the hogfile. Returns 1 if hogfile found & had files
42 static inline int cfile_init(char *hogname)
44 char pathname[PATH_MAX];
46 if (!PHYSFSX_getRealPath(hogname, pathname))
49 return PHYSFS_addToSearchPath(pathname, 0);
52 static inline int cfile_close(char *hogname)
54 char pathname[PATH_MAX];
56 if (!PHYSFSX_getRealPath(hogname, pathname))
59 return PHYSFS_removeFromSearchPath(pathname);
63 static inline int cfile_size(char *hogname)
68 fp = PHYSFS_openRead(hogname);
71 size = (int)PHYSFS_fileLength(fp);
77 static inline int cfgetc(PHYSFS_file *const fp)
81 if (PHYSFS_read(fp, &c, 1, 1) != 1)
87 static inline int cfseek(PHYSFS_file *fp, int offset, int where)
94 goal_position = offset;
97 goal_position = (int)PHYSFS_tell(fp) + offset;
100 goal_position = (int)PHYSFS_fileLength(fp) + offset;
105 c = PHYSFS_seek(fp, goal_position);
109 static inline char * cfgets(char *buf, size_t n, PHYSFS_file *const fp)
114 for (i = 0; i < n - 1; i++)
125 if (c == 0 || c == 10) // Unix line ending
127 if (c == 13) // Mac or DOS line ending
132 if (c1 != EOF) // The file could end with a Mac line ending
133 cfseek(fp, -1, SEEK_CUR);
134 if (c1 == 10) // DOS line ending
136 else // Mac line ending
140 if (c == 13) // because cr-lf is a bad thing on the mac
141 c = '\n'; // and anyway -- 0xod is CR on mac, not 0x0a
153 * read some data types...
156 static inline int cfile_read_int(PHYSFS_file *file)
160 if (!PHYSFS_readSLE32(file, &i))
162 fprintf(stderr, "Error reading int in cfile_read_int()");
169 static inline short cfile_read_short(PHYSFS_file *file)
173 if (!PHYSFS_readSLE16(file, &s))
175 fprintf(stderr, "Error reading short in cfile_read_short()");
182 static inline sbyte cfile_read_byte(PHYSFS_file *file)
186 if (PHYSFS_read(file, &b, sizeof(b), 1) != 1)
188 fprintf(stderr, "Error reading byte in cfile_read_byte()");
195 static inline fix cfile_read_fix(PHYSFS_file *file)
197 int f; // a fix is defined as a long for Mac OS 9, and MPW can't convert from (long *) to (int *)
199 if (!PHYSFS_readSLE32(file, &f))
201 fprintf(stderr, "Error reading fix in cfile_read_fix()");
208 static inline fixang cfile_read_fixang(PHYSFS_file *file)
212 if (!PHYSFS_readSLE16(file, &f))
214 fprintf(stderr, "Error reading fixang in cfile_read_fixang()");
221 static inline void cfile_read_vector(vms_vector *v, PHYSFS_file *file)
223 v->x = cfile_read_fix(file);
224 v->y = cfile_read_fix(file);
225 v->z = cfile_read_fix(file);
228 static inline void cfile_read_angvec(vms_angvec *v, PHYSFS_file *file)
230 v->p = cfile_read_fixang(file);
231 v->b = cfile_read_fixang(file);
232 v->h = cfile_read_fixang(file);
235 static inline void cfile_read_matrix(vms_matrix *m,PHYSFS_file *file)
237 cfile_read_vector(&m->rvec,file);
238 cfile_read_vector(&m->uvec,file);
239 cfile_read_vector(&m->fvec,file);