diff --git a/acconfig.h b/acconfig.h index e983115..bf8d1f9 100644 --- a/acconfig.h +++ b/acconfig.h @@ -82,6 +82,9 @@ /* Define if you have the dlopen function. */ #undef HAVE_DLOPEN +/* Define if you have zlib */ +#undef HAS_ZLIB + /* Define if you have pthread support. */ #undef HAVE_LIBPTHREAD diff --git a/configure.in b/configure.in index 900c51c..f121b86 100644 --- a/configure.in +++ b/configure.in @@ -182,6 +182,26 @@ fi dnl Checks for working -lm AC_CHECK_LIB(m, pow,, AC_MSG_ERROR([math library (-lm) appears broken])) +AC_ARG_ENABLE(zlib, +[ --disable-zlib disable zlib support], +) + +if test "x$enable_zlib" != "xno"; then + dnl Check for working -lz + dnl Note - must have gztell *and* gzgets in -lz *and* zlib.h + AC_CHECK_LIB(z, gztell, HAS_ZLIB=yes, HAS_ZLIB=no, [$LIBS]) + if test "x$HAS_ZLIB" = "xyes"; then + AC_CHECK_LIB(z, gzgets, HAS_ZLIB=yes, HAS_ZLIB=no, [$LIBS]) + if test "x$HAS_ZLIB" = "xyes"; then + AC_CHECK_HEADER(zlib.h, HAS_ZLIB=yes, HAS_ZLIB=no) + if test "x$HAS_ZLIB" = "xyes"; then + LIBS="-lz $LIBS" + AC_DEFINE(HAS_ZLIB) + fi + fi + fi +fi + dnl Checks for MGL support AC_ARG_WITH(mgl, [ --with-mgl[=DIR] use MGL found in DIR], diff --git a/include/cl_slist.h b/include/cl_slist.h index 647c3d6..4f3f78a 100644 --- a/include/cl_slist.h +++ b/include/cl_slist.h @@ -49,8 +49,8 @@ void SL_Swap(server_entry_t *swap1, server_entry_t *swap2); server_entry_t *SL_Get_By_Num(server_entry_t *start, int n); int SL_Len(server_entry_t *start); -server_entry_t *SL_LoadF(FILE *f, server_entry_t *start); -void SL_SaveF(FILE *f, server_entry_t *start); +server_entry_t *SL_LoadF(QFile *f, server_entry_t *start); +void SL_SaveF(QFile *f, server_entry_t *start); void SL_Del_All(server_entry_t *start); void SL_Shutdown(server_entry_t *start); diff --git a/include/client.h b/include/client.h index 8eae42d..f073bd6 100644 --- a/include/client.h +++ b/include/client.h @@ -199,7 +199,7 @@ typedef struct int qport; - FILE *download; // file transfer from server + QFile *download; // file transfer from server char downloadtempname[MAX_OSPATH]; char downloadname[MAX_OSPATH]; int downloadnumber; @@ -215,7 +215,7 @@ typedef struct qboolean demorecording; qboolean demoplayback; qboolean timedemo; - FILE *demofile; + QFile *demofile; float td_lastframe; // to meter out one message a frame int td_startframe; // host_framecount at start float td_starttime; // realtime at second frame of timedemo diff --git a/include/cvar.h b/include/cvar.h index 472a76b..ff7d392 100644 --- a/include/cvar.h +++ b/include/cvar.h @@ -113,7 +113,7 @@ qboolean Cvar_Command (void); // Writes lines containing "set variable value" for all variables // with the archive flag set to true. -void Cvar_WriteVariables (FILE *f); +void Cvar_WriteVariables (QFile *f); // Returns a pointer to the Cvar, NULL if not found cvar_t *Cvar_FindVar (char *var_name); diff --git a/include/keys.h b/include/keys.h index 28ad789..8c109dd 100644 --- a/include/keys.h +++ b/include/keys.h @@ -175,7 +175,7 @@ extern qboolean chat_team; void Key_Event (int key, qboolean down); void Key_Init (void); -void Key_WriteBindings (FILE *f); +void Key_WriteBindings (QFile *f); void Key_SetBinding (int keynum, char *binding); void Key_ClearStates (void); diff --git a/include/progs.h b/include/progs.h index c79b5e9..f001294 100644 --- a/include/progs.h +++ b/include/progs.h @@ -34,6 +34,7 @@ #include "pr_comp.h" // defs shared with qcc #include "progdefs.h" // generated by program cdefs #include "link.h" +#include "quakeio.h" typedef union eval_s { @@ -91,10 +92,10 @@ char *ED_NewString (char *string); // returns a copy of the string allocated from the server's string heap void ED_Print (edict_t *ed); -void ED_Write (FILE *f, edict_t *ed); +void ED_Write (QFile *f, edict_t *ed); char *ED_ParseEdict (char *data, edict_t *ent); -void ED_WriteGlobals (FILE *f); +void ED_WriteGlobals (QFile *f); void ED_ParseGlobals (char *data); void ED_LoadFromFile (char *data); diff --git a/include/quakefs.h b/include/quakefs.h index c88d973..9a1f763 100644 --- a/include/quakefs.h +++ b/include/quakefs.h @@ -49,9 +49,9 @@ extern char com_gamedir[MAX_OSPATH]; extern char gamedirfile[MAX_OSPATH]; void COM_WriteFile (char *filename, void *data, int len); -int COM_FOpenFile (char *filename, FILE **gzfile); -void COM_CloseFile (FILE *h); -int COM_filelength (FILE *f); +int COM_FOpenFile (char *filename, QFile **gzfile); +void COM_CloseFile (QFile *h); +int COM_filelength (QFile *f); void COM_FileBase (char *in, char *out); void COM_DefaultExtension (char *path, char *extension); char *COM_SkipPath (char *pathname); diff --git a/include/quakeio.h b/include/quakeio.h index 9004de7..2a73692 100644 --- a/include/quakeio.h +++ b/include/quakeio.h @@ -30,26 +30,39 @@ #ifndef _QUAKEIO_H #define _QUAKEIO_H -#include "gcc_attr.h" -#include +#ifdef HAVE_CONFIG_H +# include +#endif -#include +#include +#ifdef HAS_ZLIB +#include +#endif + +#include "gcc_attr.h" + +typedef struct { + FILE *file; +#ifdef HAS_ZLIB + gzFile *gzfile; +#endif +} QFile; void Qexpand_squiggle(const char *path, char *dest); int Qrename(const char *old, const char *new); -FILE *Qopen(const char *path, const char *mode); -FILE *Qdopen(int fd, const char *mode); -void Qclose(FILE *file); -int Qread(FILE *file, void *buf, int count); -int Qwrite(FILE *file, void *buf, int count); -int Qprintf(FILE *file, const char *fmt, ...) __attribute__((format(printf,2,3))); -char *Qgets(FILE *file, char *buf, int count); -int Qgetc(FILE *file); -int Qputc(FILE *file, int c); -int Qseek(FILE *file, long offset, int whence); -long Qtell(FILE *file); -int Qflush(FILE *file); -int Qeof(FILE *file); +QFile *Qopen(const char *path, const char *mode); +QFile *Qdopen(int fd, const char *mode); +void Qclose(QFile *file); +int Qread(QFile *file, void *buf, int count); +int Qwrite(QFile *file, void *buf, int count); +int Qprintf(QFile *file, const char *fmt, ...) __attribute__((format(printf,2,3))); +char *Qgets(QFile *file, char *buf, int count); +int Qgetc(QFile *file); +int Qputc(QFile *file, int c); +int Qseek(QFile *file, long offset, int whence); +long Qtell(QFile *file); +int Qflush(QFile *file); +int Qeof(QFile *file); #endif /*_QUAKEIO_H*/ diff --git a/include/server.h b/include/server.h index 93df363..dce7cc0 100644 --- a/include/server.h +++ b/include/server.h @@ -191,7 +191,7 @@ typedef struct client_s client_frame_t frames[UPDATE_BACKUP]; // updates can be deltad from here - FILE *download; // file being downloaded + QFile *download; // file being downloaded int downloadsize; // total bytes int downloadcount; // bytes sent @@ -203,7 +203,7 @@ typedef struct client_s qboolean upgradewarn; // did we warn him? - FILE *upload; + QFile *upload; char uploadfn[MAX_QPATH]; netadr_t snap_from; qboolean remote_snap; @@ -391,8 +391,8 @@ extern char localmodels[MAX_MODELS][5]; // inline model names for precache extern char localinfo[MAX_LOCALINFO_STRING+1]; extern int host_hunklevel; -extern FILE *sv_logfile; -extern FILE *sv_fraglogfile; +extern QFile *sv_logfile; +extern QFile *sv_fraglogfile; extern double sv_frametime; diff --git a/include/win32/version.h b/include/win32/version.h index 6376cb4..fd13f2b 100644 --- a/include/win32/version.h +++ b/include/win32/version.h @@ -30,7 +30,7 @@ /* Version strings */ #define PACKAGE "quakeforge" #define PROGRAM "QuakeForge" -#define VERSION "0.1.99pre2" +#define VERSION "0.2.99beta1" #define QW_VERSION "2.40" #define QSG_VERSION "2.0" diff --git a/source/cl_demo.c b/source/cl_demo.c index fd3ea31..0b48dd9 100644 --- a/source/cl_demo.c +++ b/source/cl_demo.c @@ -69,7 +69,7 @@ void CL_StopPlayback (void) if (!cls.demoplayback) return; - fclose (cls.demofile); + Qclose (cls.demofile); cls.demofile = NULL; cls.state = ca_disconnected; cls.demoplayback = 0; @@ -99,10 +99,10 @@ void CL_WriteDemoCmd (usercmd_t *pcmd) //Con_Printf("write: %ld bytes, %4.4f\n", msg->cursize, realtime); fl = LittleFloat((float)realtime); - fwrite (&fl, sizeof(fl), 1, cls.demofile); + Qwrite (cls.demofile, &fl, sizeof(fl)); c = dem_cmd; - fwrite (&c, sizeof(c), 1, cls.demofile); + Qwrite (cls.demofile, &c, sizeof(c)); // correct for byte order, bytes don't matter cmd = *pcmd; @@ -113,15 +113,15 @@ void CL_WriteDemoCmd (usercmd_t *pcmd) cmd.sidemove = LittleShort(cmd.sidemove); cmd.upmove = LittleShort(cmd.upmove); - fwrite(&cmd, sizeof(cmd), 1, cls.demofile); + Qwrite(cls.demofile, &cmd, sizeof(cmd)); for (i=0 ; i<3 ; i++) { fl = LittleFloat (cl.viewangles[i]); - fwrite (&fl, 4, 1, cls.demofile); + Qwrite (cls.demofile, &fl, 4); } - fflush (cls.demofile); + Qflush (cls.demofile); } /* @@ -143,16 +143,16 @@ void CL_WriteDemoMessage (sizebuf_t *msg) return; fl = LittleFloat((float)realtime); - fwrite (&fl, sizeof(fl), 1, cls.demofile); + Qwrite (cls.demofile, &fl, sizeof(fl)); c = dem_read; - fwrite (&c, sizeof(c), 1, cls.demofile); + Qwrite (cls.demofile, &c, sizeof(c)); len = LittleLong (msg->cursize); - fwrite (&len, 4, 1, cls.demofile); - fwrite (msg->data, msg->cursize, 1, cls.demofile); + Qwrite (cls.demofile, &len, 4); + Qwrite (cls.demofile, msg->data, msg->cursize); - fflush (cls.demofile); + Qflush (cls.demofile); } /* @@ -171,7 +171,7 @@ qboolean CL_GetDemoMessage (void) usercmd_t *pcmd; // read the time from the packet - fread(&demotime, sizeof(demotime), 1, cls.demofile); + Qread(cls.demofile, &demotime, sizeof(demotime)); demotime = LittleFloat(demotime); // decide if it is time to grab the next message @@ -181,7 +181,7 @@ qboolean CL_GetDemoMessage (void) else if (demotime > cls.td_lastframe) { cls.td_lastframe = demotime; // rewind back to time - fseek(cls.demofile, ftell(cls.demofile) - sizeof(demotime), + Qseek(cls.demofile, Qtell(cls.demofile) - sizeof(demotime), SEEK_SET); return 0; // allready read this frame's message } @@ -195,12 +195,12 @@ qboolean CL_GetDemoMessage (void) // too far back realtime = demotime - 1.0; // rewind back to time - fseek(cls.demofile, ftell(cls.demofile) - sizeof(demotime), + Qseek(cls.demofile, Qtell(cls.demofile) - sizeof(demotime), SEEK_SET); return 0; } else if (realtime < demotime) { // rewind back to time - fseek(cls.demofile, ftell(cls.demofile) - sizeof(demotime), + Qseek(cls.demofile, Qtell(cls.demofile) - sizeof(demotime), SEEK_SET); return 0; // don't need another message yet } @@ -211,15 +211,15 @@ qboolean CL_GetDemoMessage (void) Host_Error ("CL_GetDemoMessage: cls.state != ca_active"); // get the msg type - fread (&c, sizeof(c), 1, cls.demofile); + Qread (cls.demofile, &c, sizeof(c)); switch (c) { case dem_cmd : // user sent input i = cls.netchan.outgoing_sequence & UPDATE_MASK; pcmd = &cl.frames[i].cmd; - r = fread (pcmd, sizeof(*pcmd), 1, cls.demofile); - if (r != 1) + r = Qread (cls.demofile, pcmd, sizeof(*pcmd)); + if (r != sizeof(*pcmd)) { CL_StopPlayback (); return 0; @@ -235,21 +235,21 @@ qboolean CL_GetDemoMessage (void) cls.netchan.outgoing_sequence++; for (i=0 ; i<3 ; i++) { - r = fread (&f, 4, 1, cls.demofile); + Qread (cls.demofile, &f, 4); cl.viewangles[i] = LittleFloat (f); } break; case dem_read: // get the next message - fread (&net_message.cursize, 4, 1, cls.demofile); + Qread (cls.demofile, &net_message.cursize, 4); net_message.cursize = LittleLong (net_message.cursize); //Con_Printf("read: %ld bytes\n", net_message.cursize); if (net_message.cursize > MAX_MSGLEN) // Sys_Error ("Demo message > MAX_MSGLEN"); Host_EndGame ("Demo message > MAX_MSGLEN"); - r = fread (net_message.data, net_message.cursize, 1, cls.demofile); - if (r != 1) + r = Qread (cls.demofile, net_message.data, net_message.cursize); + if (r != net_message.cursize) { CL_StopPlayback (); return 0; @@ -257,9 +257,9 @@ qboolean CL_GetDemoMessage (void) break; case dem_set : - fread (&i, 4, 1, cls.demofile); + Qread (cls.demofile, &i, 4); cls.netchan.outgoing_sequence = LittleLong(i); - fread (&i, 4, 1, cls.demofile); + Qread (cls.demofile, &i, 4); cls.netchan.incoming_sequence = LittleLong(i); break; @@ -316,7 +316,7 @@ void CL_Stop_f (void) CL_WriteDemoMessage (&net_message); // finish up - fclose (cls.demofile); + Qclose (cls.demofile); cls.demofile = NULL; cls.demorecording = false; Con_Printf ("Completed demo\n"); @@ -343,21 +343,21 @@ void CL_WriteRecordDemoMessage (sizebuf_t *msg, int seq) return; fl = LittleFloat((float)realtime); - fwrite (&fl, sizeof(fl), 1, cls.demofile); + Qwrite (cls.demofile, &fl, sizeof(fl)); c = dem_read; - fwrite (&c, sizeof(c), 1, cls.demofile); + Qwrite (cls.demofile, &c, sizeof(c)); len = LittleLong (msg->cursize + 8); - fwrite (&len, 4, 1, cls.demofile); + Qwrite (cls.demofile, &len, 4); i = LittleLong(seq); - fwrite (&i, 4, 1, cls.demofile); - fwrite (&i, 4, 1, cls.demofile); + Qwrite (cls.demofile, &i, 4); + Qwrite (cls.demofile, &i, 4); - fwrite (msg->data, msg->cursize, 1, cls.demofile); + Qwrite (cls.demofile, msg->data, msg->cursize); - fflush (cls.demofile); + Qflush (cls.demofile); } @@ -373,17 +373,17 @@ void CL_WriteSetDemoMessage (void) return; fl = LittleFloat((float)realtime); - fwrite (&fl, sizeof(fl), 1, cls.demofile); + Qwrite (cls.demofile, &fl, sizeof(fl)); c = dem_set; - fwrite (&c, sizeof(c), 1, cls.demofile); + Qwrite (cls.demofile, &c, sizeof(c)); len = LittleLong(cls.netchan.outgoing_sequence); - fwrite (&len, 4, 1, cls.demofile); + Qwrite (cls.demofile, &len, 4); len = LittleLong(cls.netchan.incoming_sequence); - fwrite (&len, 4, 1, cls.demofile); + Qwrite (cls.demofile, &len, 4); - fflush (cls.demofile); + Qflush (cls.demofile); } @@ -432,7 +432,7 @@ void CL_Record_f (void) // COM_DefaultExtension (name, ".qwd"); - cls.demofile = fopen (name, "wb"); + cls.demofile = Qopen (name, "wb"); if (!cls.demofile) { Con_Printf ("ERROR: couldn't open.\n"); @@ -718,7 +718,7 @@ void CL_ReRecord_f (void) // COM_DefaultExtension (name, ".qwd"); - cls.demofile = fopen (name, "wb"); + cls.demofile = Qopen (name, "wb"); if (!cls.demofile) { Con_Printf ("ERROR: couldn't open.\n"); diff --git a/source/cl_main.c b/source/cl_main.c index 4eed520..ac15c23 100644 --- a/source/cl_main.c +++ b/source/cl_main.c @@ -493,7 +493,7 @@ void CL_Disconnect (void) Cam_Reset(); if (cls.download) { - fclose(cls.download); + Qclose(cls.download); cls.download = NULL; } @@ -1099,7 +1099,7 @@ void CL_Download_f (void) } strncpy (cls.downloadtempname, cls.downloadname, sizeof(cls.downloadtempname)); - cls.download = fopen (cls.downloadname, "wb"); + cls.download = Qopen (cls.downloadname, "wb"); cls.downloadtype = dl_single; MSG_WriteByte (&cls.netchan.message, clc_stringcmd); @@ -1128,7 +1128,7 @@ CL_Init */ void CL_Init (void) { - FILE *servlist; + QFile *servlist; char st[80]; char e_path[MAX_OSPATH]; @@ -1151,9 +1151,9 @@ void CL_Init (void) Pmove_Init (); Qexpand_squiggle(fs_userpath->string, e_path); - if ((servlist = fopen(va("%s/servers.txt", e_path), "r"))) { + if ((servlist = Qopen(va("%s/servers.txt", e_path), "r"))) { slist = SL_LoadF(servlist,slist); - fclose(servlist); + Qclose(servlist); } @@ -1342,11 +1342,11 @@ Writes key bindings and archived cvars to config.cfg */ void Host_WriteConfiguration (void) { - FILE *f; + QFile *f; if (host_initialized) { - f = fopen (va("%s/config.cfg",com_gamedir), "w"); + f = Qopen (va("%s/config.cfg",com_gamedir), "w"); if (!f) { Con_Printf ("Couldn't write config.cfg.\n"); @@ -1356,7 +1356,7 @@ void Host_WriteConfiguration (void) Key_WriteBindings (f); Cvar_WriteVariables (f); - fclose (f); + Qclose (f); } } diff --git a/source/cl_parse.c b/source/cl_parse.c index 328a408..45d9ce1 100644 --- a/source/cl_parse.c +++ b/source/cl_parse.c @@ -182,7 +182,7 @@ to start a download from the server. */ qboolean CL_CheckOrDownloadFile (char *filename) { - FILE *f; + QFile *f; if (strstr (filename, "..")) { @@ -193,7 +193,7 @@ qboolean CL_CheckOrDownloadFile (char *filename) COM_FOpenFile (filename, &f); if (f) { // it exists, no need to download - fclose (f); + Qclose (f); return true; } @@ -383,7 +383,7 @@ void CL_ParseDownload (void) if (cls.download) { Con_Printf ("cls.download shouldn't have been set\n"); - fclose (cls.download); + Qclose (cls.download); cls.download = NULL; } CL_RequestNextDownload (); @@ -400,7 +400,7 @@ void CL_ParseDownload (void) COM_CreatePath (name); - cls.download = fopen (name, "wb"); + cls.download = Qopen (name, "wb"); if (!cls.download) { msg_readcount += size; @@ -410,7 +410,7 @@ void CL_ParseDownload (void) } } - fwrite (net_message.data + msg_readcount, 1, size, cls.download); + Qwrite (cls.download, net_message.data + msg_readcount, size); msg_readcount += size; if (percent != 100) @@ -439,7 +439,7 @@ void CL_ParseDownload (void) Con_Printf ("100%%\n"); #endif - fclose (cls.download); + Qclose (cls.download); // rename the temp file to it's final name if (strcmp(cls.downloadtempname, cls.downloadname)) { @@ -557,7 +557,7 @@ CL_ParseServerData void CL_ParseServerData (void) { char *str; - FILE *f; + QFile *f; char fn[MAX_OSPATH]; qboolean cflag = false; extern char gamedirfile[MAX_OSPATH]; @@ -595,21 +595,21 @@ void CL_ParseServerData (void) if (cflag) { int cl_warncmd_val = cl_warncmd->value; snprintf(fn, sizeof(fn), "%s/%s", com_gamedir, "config.cfg"); - if ((f = fopen(fn, "r")) != NULL) { - fclose(f); + if ((f = Qopen(fn, "r")) != NULL) { + Qclose(f); Cbuf_AddText ("cl_warncmd 0\n"); Cbuf_AddText ("exec config.cfg\n"); } snprintf(fn, sizeof(fn), "%s/%s", com_gamedir, "frontend.cfg"); - if ((f = fopen(fn, "r")) != NULL) { - fclose(f); + if ((f = Qopen(fn, "r")) != NULL) { + Qclose(f); Cbuf_AddText ("cl_warncmd 0\n"); Cbuf_AddText ("exec frontend.cfg\n"); } if (cl_autoexec->value) { snprintf(fn, sizeof(fn), "%s/%s", com_gamedir, "autoexec.cfg"); - if ((f = fopen(fn, "r")) != NULL) { - fclose(f); + if ((f = Qopen(fn, "r")) != NULL) { + Qclose(f); Cbuf_AddText ("cl_warncmd 0\n"); Cbuf_AddText ("exec autoexec.cfg\n"); } diff --git a/source/cl_slist.c b/source/cl_slist.c index a5e38ec..3aac496 100644 --- a/source/cl_slist.c +++ b/source/cl_slist.c @@ -137,7 +137,7 @@ int SL_Len (server_entry_t *start) { return i; } -server_entry_t *SL_LoadF (FILE *f,server_entry_t *start) { // This could get messy +server_entry_t *SL_LoadF (QFile *f,server_entry_t *start) { // This could get messy char line[256]; /* Long lines get truncated. */ int c = ' '; /* int so it can be compared to EOF properly*/ int len; @@ -150,7 +150,7 @@ server_entry_t *SL_LoadF (FILE *f,server_entry_t *start) { // This could get mes i = 0; c = ' '; while (c != '\n' && c != EOF) { - c = getc(f); + c = Qgetc(f); if (i < 255) { line[i] = c; i++; @@ -174,23 +174,23 @@ server_entry_t *SL_LoadF (FILE *f,server_entry_t *start) { // This could get mes } } - void SL_SaveF (FILE *f,server_entry_t *start) { + void SL_SaveF (QFile *f,server_entry_t *start) { do { - fprintf(f,"%s %s\n",start->server,start->desc); + Qprintf(f,"%s %s\n",start->server,start->desc); start = start->next; } while (start); } void SL_Shutdown (server_entry_t *start) { - FILE *f; + QFile *f; char e_path[MAX_OSPATH]; if (start) { Qexpand_squiggle(fs_userpath->string, e_path); - if ((f = fopen(va("%s/servers.txt", e_path),"w"))) { + if ((f = Qopen(va("%s/servers.txt", e_path),"w"))) { SL_SaveF(f,start); - fclose(f); + Qclose(f); } SL_Del_All (start); } diff --git a/source/cl_sys_sdl.c b/source/cl_sys_sdl.c index 0255ce0..29fc81d 100644 --- a/source/cl_sys_sdl.c +++ b/source/cl_sys_sdl.c @@ -100,14 +100,14 @@ FILE IO int Sys_FileTime (char *path) { - FILE *f; + QFile *f; int t, retval; - f = fopen(path, "rb"); + f = Qopen(path, "rb"); if (f) { - fclose(f); + Qclose(f); retval = 1; } else diff --git a/source/cl_sys_win.c b/source/cl_sys_win.c index 8c06b4d..695c840 100644 --- a/source/cl_sys_win.c +++ b/source/cl_sys_win.c @@ -100,15 +100,15 @@ FILE IO wfilelength ================ */ -int wfilelength (FILE *f) +int wfilelength (QFile *f) { int pos; int end; - pos = ftell (f); - fseek (f, 0, SEEK_END); - end = ftell (f); - fseek (f, pos, SEEK_SET); + pos = Qtell (f); + Qseek (f, 0, SEEK_END); + end = Qtell (f); + Qseek (f, pos, SEEK_SET); return end; } @@ -116,16 +116,16 @@ int wfilelength (FILE *f) int Sys_FileTime (char *path) { - FILE *f; + QFile *f; int t, retval; t = VID_ForceUnlockedAndReturnState (); - f = fopen(path, "rb"); + f = Qopen(path, "rb"); if (f) { - fclose(f); + Qclose(f); retval = 1; } else diff --git a/source/cmd.c b/source/cmd.c index 24dea3f..63109b6 100644 --- a/source/cmd.c +++ b/source/cmd.c @@ -360,9 +360,9 @@ Cmd_Exec_File (char *path) int mark; int len; char base[32]; - FILE *file; + QFile *file; - if ((file = fopen (path, "r")) != NULL) { + if ((file = Qopen (path, "r")) != NULL) { // extract the filename base name for hunk tag COM_FileBase (path, base); len = COM_filelength (file); @@ -370,8 +370,8 @@ Cmd_Exec_File (char *path) f = (char *)Hunk_AllocName (len+1, base); if (f) { f[len] = 0; - fread (f, 1, len, file); - fclose (file); + Qread (file, f, len); + Qclose (file); Cbuf_InsertText (f); } Hunk_FreeToLowMark (mark); diff --git a/source/com.c b/source/com.c index 4c575ef..da7932c 100644 --- a/source/com.c +++ b/source/com.c @@ -62,7 +62,7 @@ being registered. */ void COM_CheckRegistered (void) { - FILE *h; + QFile *h; unsigned short check[128]; COM_FOpenFile("gfx/pop.lmp", &h); @@ -70,8 +70,8 @@ void COM_CheckRegistered (void) if (h) { static_registered = 1; - fread (check, 1, sizeof(check), h); - fclose (h); + Qread (h, check, sizeof(check)); + Qclose (h); } if (static_registered) { diff --git a/source/cvar.c b/source/cvar.c index 1f0d93c..7791ea4 100644 --- a/source/cvar.c +++ b/source/cvar.c @@ -282,13 +282,13 @@ Writes lines containing "set variable value" for all variables with the archive flag set to true. ============ */ -void Cvar_WriteVariables (FILE *f) +void Cvar_WriteVariables (QFile *f) { cvar_t *var; for (var = cvar_vars ; var ; var = var->next) if (var->flags&CVAR_ARCHIVE) - fprintf (f, "%s \"%s\"\n", var->name, var->string); + Qprintf (f, "%s \"%s\"\n", var->name, var->string); } void Cvar_Set_f(void) diff --git a/source/gl_mesh.c b/source/gl_mesh.c index 402c971..67a22f8 100644 --- a/source/gl_mesh.c +++ b/source/gl_mesh.c @@ -319,7 +319,7 @@ void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr) int *cmds; trivertx_t *verts; char cache[MAX_QPATH], fullpath[MAX_OSPATH]; - FILE *f; + QFile *f; aliasmodel = m; paliashdr = hdr; // (aliashdr_t *)Mod_Extradata (m); @@ -334,11 +334,11 @@ void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr) COM_FOpenFile (cache, &f); if (f) { - fread (&numcommands, 4, 1, f); - fread (&numorder, 4, 1, f); - fread (&commands, numcommands * sizeof(commands[0]), 1, f); - fread (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f); - fclose (f); + Qread (f, &numcommands, 4); + Qread (f, &numorder, 4); + Qread (f, &commands, numcommands * sizeof(commands[0])); + Qread (f, &vertexorder, numorder * sizeof(vertexorder[0])); + Qclose (f); } else { @@ -353,22 +353,22 @@ void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr) // save out the cached version // snprintf (fullpath, sizeof(fullpath), "%s/%s", com_gamedir, cache); - f = fopen (fullpath, "wb"); + f = Qopen (fullpath, "wb"); if (!f) { char gldir[MAX_OSPATH]; snprintf (gldir, sizeof(gldir), "%s/glquake", com_gamedir); Sys_mkdir (gldir); - f = fopen (fullpath, "wb"); + f = Qopen (fullpath, "wb"); } if (f) { - fwrite (&numcommands, 4, 1, f); - fwrite (&numorder, 4, 1, f); - fwrite (&commands, numcommands * sizeof(commands[0]), 1, f); - fwrite (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f); - fclose (f); + Qwrite (f, &numcommands, 4); + Qwrite (f, &numorder, 4); + Qwrite (f, &commands, numcommands * sizeof(commands[0])); + Qwrite (f, &vertexorder, numorder * sizeof(vertexorder[0])); + Qclose (f); } } diff --git a/source/gl_part.c b/source/gl_part.c index c183a4f..bf0ae7a 100644 --- a/source/gl_part.c +++ b/source/gl_part.c @@ -123,7 +123,7 @@ void R_ClearParticles (void) void R_ReadPointFile_f (void) { - FILE *f; + QFile *f; vec3_t org; int r; int c; @@ -143,7 +143,9 @@ void R_ReadPointFile_f (void) c = 0; for ( ;; ) { - r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]); + char buf[64]; + Qgets (f, buf, sizeof(buf)); + r = sscanf (buf,"%f %f %f\n", &org[0], &org[1], &org[2]); if (r != 3) break; c++; @@ -165,7 +167,7 @@ void R_ReadPointFile_f (void) VectorCopy (org, p->org); } - fclose (f); + Qclose (f); Con_Printf ("%i points read\n", c); } diff --git a/source/gl_warp.c b/source/gl_warp.c index 6d519bb..53bf0b3 100644 --- a/source/gl_warp.c +++ b/source/gl_warp.c @@ -280,7 +280,7 @@ byte *pcx_rgb; LoadPCX ============ */ -void LoadPCX (FILE *f) +void LoadPCX (QFile *f) { pcx_t *pcx, pcxbuf; byte palette[768]; @@ -292,7 +292,7 @@ void LoadPCX (FILE *f) // // parse the PCX file // - fread (&pcxbuf, 1, sizeof(pcxbuf), f); + Qread (f, &pcxbuf, sizeof(pcxbuf)); pcx = &pcxbuf; @@ -308,10 +308,10 @@ void LoadPCX (FILE *f) } // seek to palette - fseek (f, -768, SEEK_END); - fread (palette, 1, 768, f); + Qseek (f, -768, SEEK_END); + Qread (f, palette, 768); - fseek (f, sizeof(pcxbuf) - 4, SEEK_SET); + Qseek (f, sizeof(pcxbuf) - 4, SEEK_SET); count = (pcx->xmax+1) * (pcx->ymax+1); pcx_rgb = malloc( count * 4); @@ -321,12 +321,12 @@ void LoadPCX (FILE *f) pix = pcx_rgb + 4*y*(pcx->xmax+1); for (x=0 ; x<=pcx->ymax ; ) { - dataByte = fgetc(f); + dataByte = Qgetc(f); if((dataByte & 0xC0) == 0xC0) { runLength = dataByte & 0x3F; - dataByte = fgetc(f); + dataByte = Qgetc(f); } else runLength = 1; @@ -364,24 +364,24 @@ typedef struct _TargaHeader { TargaHeader targa_header; byte *targa_rgba; -int fgetLittleShort (FILE *f) +int fgetLittleShort (QFile *f) { byte b1, b2; - b1 = fgetc(f); - b2 = fgetc(f); + b1 = Qgetc(f); + b2 = Qgetc(f); return (short)(b1 + b2*256); } -int fgetLittleLong (FILE *f) +int fgetLittleLong (QFile *f) { byte b1, b2, b3, b4; - b1 = fgetc(f); - b2 = fgetc(f); - b3 = fgetc(f); - b4 = fgetc(f); + b1 = Qgetc(f); + b2 = Qgetc(f); + b3 = Qgetc(f); + b4 = Qgetc(f); return b1 + (b2<<8) + (b3<<16) + (b4<<24); } @@ -392,26 +392,26 @@ int fgetLittleLong (FILE *f) LoadTGA ============= */ -void LoadTGA (FILE *fin) +void LoadTGA (QFile *fin) { int columns, rows, numPixels; byte *pixbuf; int row, column; unsigned char red = 0, green = 0, blue = 0, alphabyte = 0; - targa_header.id_length = fgetc(fin); - targa_header.colormap_type = fgetc(fin); - targa_header.image_type = fgetc(fin); + targa_header.id_length = Qgetc(fin); + targa_header.colormap_type = Qgetc(fin); + targa_header.image_type = Qgetc(fin); targa_header.colormap_index = fgetLittleShort(fin); targa_header.colormap_length = fgetLittleShort(fin); - targa_header.colormap_size = fgetc(fin); + targa_header.colormap_size = Qgetc(fin); targa_header.x_origin = fgetLittleShort(fin); targa_header.y_origin = fgetLittleShort(fin); targa_header.width = fgetLittleShort(fin); targa_header.height = fgetLittleShort(fin); - targa_header.pixel_size = fgetc(fin); - targa_header.attributes = fgetc(fin); + targa_header.pixel_size = Qgetc(fin); + targa_header.attributes = Qgetc(fin); if (targa_header.image_type!=2 && targa_header.image_type!=10) @@ -428,7 +428,7 @@ void LoadTGA (FILE *fin) targa_rgba = malloc (numPixels*4); if (targa_header.id_length != 0) - fseek(fin, targa_header.id_length, SEEK_CUR); // skip TARGA image comment + Qseek(fin, targa_header.id_length, SEEK_CUR); // skip TARGA image comment if (targa_header.image_type==2) { // Uncompressed, RGB images for(row=rows-1; row>=0; row--) { @@ -437,19 +437,19 @@ void LoadTGA (FILE *fin) switch (targa_header.pixel_size) { case 24: - blue = getc(fin); - green = getc(fin); - red = getc(fin); + blue = Qgetc(fin); + green = Qgetc(fin); + red = Qgetc(fin); *pixbuf++ = red; *pixbuf++ = green; *pixbuf++ = blue; *pixbuf++ = 255; break; case 32: - blue = getc(fin); - green = getc(fin); - red = getc(fin); - alphabyte = getc(fin); + blue = Qgetc(fin); + green = Qgetc(fin); + red = Qgetc(fin); + alphabyte = Qgetc(fin); *pixbuf++ = red; *pixbuf++ = green; *pixbuf++ = blue; @@ -464,21 +464,21 @@ void LoadTGA (FILE *fin) for(row=rows-1; row>=0; row--) { pixbuf = targa_rgba + row*columns*4; for(column=0; columnfree) { - fprintf (f, "}\n"); + Qprintf (f, "}\n"); return; } @@ -540,11 +540,11 @@ void ED_Write (FILE *f, edict_t *ed) if (j == type_size[type]) continue; - fprintf (f,"\"%s\" ",name); - fprintf (f,"\"%s\"\n", PR_UglyValueString(d->type, (eval_t *)v)); + Qprintf (f,"\"%s\" ",name); + Qprintf (f,"\"%s\"\n", PR_UglyValueString(d->type, (eval_t *)v)); } - fprintf (f, "}\n"); + Qprintf (f, "}\n"); } void ED_PrintNum (int ent) @@ -637,14 +637,14 @@ FIXME: need to tag constants, doesn't really work ED_WriteGlobals ============= */ -void ED_WriteGlobals (FILE *f) +void ED_WriteGlobals (QFile *f) { ddef_t *def; int i; char *name; int type; - fprintf (f,"{\n"); + Qprintf (f,"{\n"); for (i=0 ; inumglobaldefs ; i++) { def = &pr_globaldefs[i]; @@ -659,10 +659,10 @@ void ED_WriteGlobals (FILE *f) continue; name = PR_GetString(def->s_name); - fprintf (f,"\"%s\" ", name); - fprintf (f,"\"%s\"\n", PR_UglyValueString(type, (eval_t *)&pr_globals[def->ofs])); + Qprintf (f,"\"%s\" ", name); + Qprintf (f,"\"%s\"\n", PR_UglyValueString(type, (eval_t *)&pr_globals[def->ofs])); } - fprintf (f,"}\n"); + Qprintf (f,"}\n"); } /* diff --git a/source/quakefs.c b/source/quakefs.c index 1bac15b..fd43841 100644 --- a/source/quakefs.c +++ b/source/quakefs.c @@ -124,7 +124,7 @@ typedef struct typedef struct pack_s { char filename[MAX_OSPATH]; - FILE *handle; + QFile *handle; int numfiles; packfile_t *files; } pack_t; @@ -189,15 +189,15 @@ COM_FileBase (char *in, char *out) COM_filelength */ int -COM_filelength (FILE *f) +COM_filelength (QFile *f) { int pos; int end; - pos = ftell (f); - fseek (f, 0, SEEK_END); - end = ftell (f); - fseek (f, pos, SEEK_SET); + pos = Qtell (f); + Qseek (f, 0, SEEK_END); + end = Qtell (f); + Qseek (f, pos, SEEK_SET); return end; } @@ -206,11 +206,11 @@ COM_filelength (FILE *f) COM_FileOpenRead */ int -COM_FileOpenRead (char *path, FILE **hndl) +COM_FileOpenRead (char *path, QFile **hndl) { - FILE *f; + QFile *f; - f = fopen(path, "rb"); + f = Qopen(path, "rbz"); if (!f) { *hndl = NULL; @@ -288,22 +288,22 @@ COM_Maplist_f ( void ) void COM_WriteFile ( char *filename, void *data, int len ) { - FILE *f; + QFile *f; char name[MAX_OSPATH]; snprintf(name, sizeof(name), "%s/%s", com_gamedir, filename); - f = fopen (name, "wb"); + f = Qopen (name, "wb"); if (!f) { Sys_mkdir(com_gamedir); - f = fopen (name, "wb"); + f = Qopen (name, "wb"); if (!f) Sys_Error ("Error opening %s", filename); } Sys_Printf ("COM_WriteFile: %s\n", name); - fwrite (data, 1, len, f); - fclose (f); + Qwrite (f, data, len); + Qclose (f); } @@ -341,13 +341,13 @@ COM_CreatePath ( char *path ) void COM_CopyFile (char *netpath, char *cachepath) { - FILE *in, *out; + QFile *in, *out; int remaining, count; char buf[4096]; remaining = COM_FileOpenRead (netpath, &in); COM_CreatePath (cachepath); // create directories up to the cache file - out = fopen(cachepath, "wb"); + out = Qopen(cachepath, "wb"); if (!out) Sys_Error ("Error opening %s", cachepath); @@ -357,19 +357,19 @@ COM_CopyFile (char *netpath, char *cachepath) count = remaining; else count = sizeof(buf); - fread (buf, 1, count, in); - fwrite (buf, 1, count, out); + Qread (in, buf, count); + Qwrite (out, buf, count); remaining -= count; } - fclose (in); - fclose (out); + Qclose (in); + Qclose (out); } /* COM_OpenRead */ -FILE * +QFile * COM_OpenRead (const char *path, int offs, int len) { int fd=open(path,O_RDONLY); @@ -385,6 +385,7 @@ COM_OpenRead (const char *path, int offs, int len) len=lseek(fd,0,SEEK_END); lseek(fd,0,SEEK_SET); } + lseek(fd,offs,SEEK_SET); read(fd,id,2); if (id[0]==0x1f && id[1]==0x8b) { lseek(fd,offs+len-4,SEEK_SET); @@ -400,7 +401,7 @@ COM_OpenRead (const char *path, int offs, int len) #ifdef WIN32 setmode(fd,O_BINARY); #endif - return fdopen(fd,"rb"); + return Qdopen(fd,"rbz"); return 0; } @@ -413,13 +414,21 @@ int file_from_pak; // global indicating file came from pack file ZOID Sets com_filesize and one of handle or file */ int -COM_FOpenFile (char *filename, FILE **gzfile) +COM_FOpenFile (char *filename, QFile **gzfile) { searchpath_t *search; char netpath[MAX_OSPATH]; pack_t *pak; int i; int findtime; +#ifdef HAS_ZLIB + char gzfilename[MAX_OSPATH]; + int filenamelen;; + + filenamelen = strlen(filename); + strncpy(gzfilename,filename,sizeof(gzfilename)); + strncat(gzfilename,".gz",sizeof(gzfilename)); +#endif file_from_pak = 0; @@ -435,11 +444,20 @@ COM_FOpenFile (char *filename, FILE **gzfile) pak = search->pack; for (i=0 ; inumfiles ; i++) { char *fn=0; +#ifdef HAS_ZLIB + if (!strncmp(pak->files[i].name, filename, filenamelen)) { + if (!pak->files[i].name[filenamelen]) + fn=filename; + else if (!strcmp (pak->files[i].name, gzfilename)) + fn=gzfilename; + } +#else if (!strcmp (pak->files[i].name, filename)) fn=filename; +#endif if (fn) { // found it! - if (developer->value) + if (developer->int_val) Sys_Printf ("PackFile: %s : %s\n",pak->filename, fn); // open a new file on the pakfile *gzfile=COM_OpenRead(pak->filename,pak->files[i].filepos, @@ -457,10 +475,16 @@ COM_FOpenFile (char *filename, FILE **gzfile) findtime = Sys_FileTime (netpath); if (findtime == -1) { +#ifdef HAS_ZLIB + snprintf(netpath, sizeof(netpath), "%s/%s",search->filename, + gzfilename); + findtime = Sys_FileTime (netpath); + if (findtime == -1) +#endif continue; } - if(developer->value) + if(developer->int_val) Sys_Printf ("FindFile: %s\n",netpath); *gzfile=COM_OpenRead(netpath,-1,-1); @@ -489,7 +513,7 @@ int loadsize; byte * COM_LoadFile (char *path, int usehunk) { - FILE *h; + QFile *h; byte *buf; char base[32]; int len; @@ -529,8 +553,8 @@ COM_LoadFile (char *path, int usehunk) if (!is_server) { Draw_BeginDisc(); } - fread (buf, 1, len, h); - fclose (h); + Qread (h, buf, len); + Qclose (h); if (!is_server) { Draw_EndDisc(); } @@ -586,13 +610,13 @@ COM_LoadPackFile (char *packfile) packfile_t *newfiles; int numpackfiles; pack_t *pack; - FILE *packhandle; + QFile *packhandle; dpackfile_t info[MAX_FILES_IN_PACK]; if (COM_FileOpenRead (packfile, &packhandle) == -1) return NULL; - fread (&header, 1, sizeof(header), packhandle); + Qread (packhandle, &header, sizeof(header)); if (header.id[0] != 'P' || header.id[1] != 'A' || header.id[2] != 'C' || header.id[3] != 'K') Sys_Error ("%s is not a packfile", packfile); @@ -606,8 +630,8 @@ COM_LoadPackFile (char *packfile) newfiles = calloc (1, numpackfiles * sizeof(packfile_t)); - fseek (packhandle, header.dirofs, SEEK_SET); - fread (info, 1, header.dirlen, packhandle); + Qseek (packhandle, header.dirofs, SEEK_SET); + Qread (packhandle, info, header.dirlen); // parse the directory @@ -819,7 +843,7 @@ COM_Gamedir (char *dir) { if (com_searchpaths->pack) { - fclose (com_searchpaths->pack->handle); + Qclose (com_searchpaths->pack->handle); free (com_searchpaths->pack->files); free (com_searchpaths->pack); } diff --git a/source/quakeio.c b/source/quakeio.c index 80a2aa6..45d2839 100644 --- a/source/quakeio.c +++ b/source/quakeio.c @@ -91,103 +91,247 @@ Qrename(const char *old, const char *new) return rename (e_old, e_new); } -FILE * +QFile * Qopen(const char *path, const char *mode) { - FILE *file; + QFile *file; + char m[80],*p; + int zip=0; char e_path[PATH_MAX]; Qexpand_squiggle (path, e_path); path = e_path; - file=fopen(path,mode); + for (p=m; *mode && p-m<(sizeof(m)-1); mode++) { + if (*mode=='z') { + zip=1; + continue; + } + *p++=*mode; + } + *p=0; + + file=calloc(sizeof(*file),1); + if (!file) + return 0; +#ifdef HAS_ZLIB + if (zip) { + file->gzfile=gzopen(path,m); + if (!file->gzfile) { + free(file); + return 0; + } + } else +#endif + { + file->file=fopen(path,m); + if (!file->file) { + free(file); + return 0; + } + } return file; } -FILE * +QFile * Qdopen(int fd, const char *mode) { - FILE *file; + QFile *file; + char m[80],*p; + int zip=0; - file=fdopen(fd,mode); + for (p=m; *mode && p-m<(sizeof(m)-1); mode++) { + if (*mode=='z') { + zip=1; + continue; + } + *p++=*mode; + } + + *p=0; + + file=calloc(sizeof(*file),1); + if (!file) + return 0; +#ifdef HAS_ZLIB + if (zip) { + file->gzfile=gzdopen(fd,m); + if (!file->gzfile) { + free(file); + return 0; + } + } else +#endif + { + file->file=fdopen(fd,m); + if (!file->file) { + free(file); + return 0; + } + } #ifdef WIN32 -# ifdef __BORLANDC__ - setmode(_fileno(file),O_BINARY); -# else - _setmode(_fileno(file),_O_BINARY); -# endif +#ifdef __BORLANDC__ + setmode(_fileno(file->file),O_BINARY); +#else + _setmode(_fileno(file->file),_O_BINARY); +#endif #endif return file; } void -Qclose(FILE *file) +Qclose(QFile *file) { - fclose(file); + if (file->file) + fclose(file->file); +#ifdef HAS_ZLIB + else + gzclose(file->gzfile); +#endif + free(file); } int -Qread(FILE *file, void *buf, int count) +Qread(QFile *file, void *buf, int count) { - return fread(buf, 1, count, file); + if (file->file) + return fread(buf, 1, count, file->file); +#ifdef HAS_ZLIB + else + return gzread(file->gzfile,buf,count); +#else + return -1; +#endif } int -Qwrite(FILE *file, void *buf, int count) +Qwrite (QFile *file, void *buf, int count) { - return fwrite(buf, 1, count, file); + if (file->file) + return fwrite(buf, 1, count, file->file); +#ifdef HAS_ZLIB + else + return gzwrite(file->gzfile,buf,count); +#else + return -1; +#endif } int -Qprintf(FILE *file, const char *fmt, ...) +Qprintf(QFile *file, const char *fmt, ...) { va_list args; int ret=-1; va_start(args,fmt); - ret=vfprintf(file, fmt, args); + if (file->file) + ret=vfprintf(file->file, fmt, args); +#ifdef HAS_ZLIB + else { + char buf[4096]; + va_start(args, fmt); +#ifdef HAVE_VSNPRINTF + (void)vsnprintf(buf, sizeof(buf), fmt, args); +#else + (void)vsprintf(buf, fmt, args); +#endif + va_end(args); + ret = strlen(buf); /* some *sprintf don't return the nb of bytes written */ + if (ret>0) + ret=gzwrite(file, buf, (unsigned)ret); + } +#endif va_end(args); return ret; } char * -Qgets(FILE *file, char *buf, int count) +Qgets(QFile *file, char *buf, int count) { - return fgets(buf, count, file); + if (file->file) + return fgets(buf, count, file->file); +#ifdef HAS_ZLIB + else + return gzgets(file->gzfile,buf,count); +#else + return 0; +#endif } int -Qgetc(FILE *file) +Qgetc(QFile *file) { - return fgetc(file); + if (file->file) + return fgetc(file->file); +#ifdef HAS_ZLIB + else + return gzgetc(file->gzfile); +#else + return -1; +#endif } int -Qputc(FILE *file, int c) +Qputc(QFile *file, int c) { - return fputc(c, file); + if (file->file) + return fputc(c, file->file); +#ifdef HAS_ZLIB + else + return gzputc(file->gzfile,c); +#else + return -1; +#endif } int -Qseek(FILE *file, long offset, int whence) +Qseek(QFile *file, long offset, int whence) { - return fseek(file, offset, whence); + if (file->file) + return fseek(file->file, offset, whence); +#ifdef HAS_ZLIB + else + return gzseek(file->gzfile,offset,whence); +#else + return -1; +#endif } long -Qtell(FILE *file) +Qtell(QFile *file) { - return ftell(file); + if (file->file) + return ftell(file->file); +#ifdef HAS_ZLIB + else + return gztell(file->gzfile); +#else + return -1; +#endif } int -Qflush(FILE *file) +Qflush(QFile *file) { - return fflush(file); + if (file->file) + return fflush(file->file); +#ifdef HAS_ZLIB + else + return gzflush(file->gzfile,Z_SYNC_FLUSH); +#else + return -1; +#endif } int -Qeof(FILE *file) +Qeof(QFile *file) { - return feof(file); + if (file->file) + return feof(file->file); +#ifdef HAS_ZLIB + else + return gzeof(file->gzfile); +#else + return -1; +#endif } diff --git a/source/r_part.c b/source/r_part.c index f7ab827..371f077 100644 --- a/source/r_part.c +++ b/source/r_part.c @@ -101,7 +101,7 @@ void R_ClearParticles (void) void R_ReadPointFile_f (void) { - FILE *f; + QFile *f; vec3_t org; int r; int c; @@ -121,7 +121,9 @@ void R_ReadPointFile_f (void) c = 0; for ( ;; ) { - r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]); + char buf[64]; + Qgets(f, buf, sizeof(buf)); + r = sscanf (buf,"%f %f %f\n", &org[0], &org[1], &org[2]); if (r != 3) break; c++; @@ -143,7 +145,7 @@ void R_ReadPointFile_f (void) VectorCopy (org, p->org); } - fclose (f); + Qclose (f); Con_Printf ("%i points read\n", c); } diff --git a/source/sv_ccmds.c b/source/sv_ccmds.c index b7ef10d..8e30fd0 100644 --- a/source/sv_ccmds.c +++ b/source/sv_ccmds.c @@ -128,14 +128,14 @@ void SV_Logfile_f (void) if (sv_logfile) { Con_Printf ("File logging off.\n"); - fclose (sv_logfile); + Qclose (sv_logfile); sv_logfile = NULL; return; } snprintf (name, sizeof(name), "%s/qconsole.log", com_gamedir); Con_Printf ("Logging text to %s.\n", name); - sv_logfile = fopen (name, "w"); + sv_logfile = Qopen (name, "w"); if (!sv_logfile) Con_Printf ("failed.\n"); } @@ -154,7 +154,7 @@ void SV_Fraglogfile_f (void) if (sv_fraglogfile) { Con_Printf ("Frag file logging off.\n"); - fclose (sv_fraglogfile); + Qclose (sv_fraglogfile); sv_fraglogfile = NULL; return; } @@ -163,15 +163,15 @@ void SV_Fraglogfile_f (void) for (i=0 ; i<1000 ; i++) { snprintf (name, sizeof(name), "%s/frag_%i.log", com_gamedir, i); - sv_fraglogfile = fopen (name, "r"); + sv_fraglogfile = Qopen (name, "r"); if (!sv_fraglogfile) { // can't read it, so create this one - sv_fraglogfile = fopen (name, "w"); + sv_fraglogfile = Qopen (name, "w"); if (!sv_fraglogfile) i=1000; // give error break; } - fclose (sv_fraglogfile); + Qclose (sv_fraglogfile); } if (i==1000) { @@ -333,7 +333,7 @@ void SV_Map_f (void) { char level[MAX_QPATH]; char expanded[MAX_QPATH]; - FILE *f; + QFile *f; if (Cmd_Argc() != 2) { @@ -355,7 +355,7 @@ void SV_Map_f (void) Cbuf_AddText (va("map %s", curlevel)); return; } - fclose (f); + Qclose (f); SV_BroadcastCommand ("changing\n"); SV_SendMessagesToAll (); diff --git a/source/sv_main.c b/source/sv_main.c index e2055ba..2b0e2aa 100644 --- a/source/sv_main.c +++ b/source/sv_main.c @@ -124,8 +124,8 @@ cvar_t *watervis; cvar_t *hostname; -FILE *sv_logfile; -FILE *sv_fraglogfile; +QFile *sv_logfile; +QFile *sv_fraglogfile; void SV_AcceptClient (netadr_t adr, int userid, char *userinfo); void Master_Shutdown (void); @@ -149,12 +149,12 @@ void SV_Shutdown (void) Master_Shutdown (); if (sv_logfile) { - fclose (sv_logfile); + Qclose (sv_logfile); sv_logfile = NULL; } if (sv_fraglogfile) { - fclose (sv_fraglogfile); + Qclose (sv_fraglogfile); sv_logfile = NULL; } NET_Shutdown (); @@ -259,12 +259,12 @@ void SV_DropClient (client_t *drop) if (drop->download) { - fclose (drop->download); + Qclose (drop->download); drop->download = NULL; } if (drop->upload) { - fclose (drop->upload); + Qclose (drop->upload); drop->upload = NULL; } *drop->uploadfn = 0; @@ -1142,7 +1142,7 @@ SV_WriteIP_f */ void SV_WriteIP_f (void) { - FILE *f; + QFile *f; char name[MAX_OSPATH]; byte b[4]; int i; @@ -1151,7 +1151,7 @@ void SV_WriteIP_f (void) Con_Printf ("Writing %s.\n", name); - f = fopen (name, "wb"); + f = Qopen (name, "wb"); if (!f) { Con_Printf ("Couldn't open %s\n", name); @@ -1161,10 +1161,10 @@ void SV_WriteIP_f (void) for (i=0 ; i0) { Sys_Printf ("Last message repeated %d times\n", msgcount); if (sv_logfile) - fprintf (sv_logfile, "Last message repeated %d times\n", msgcount); + Qprintf (sv_logfile, "Last message repeated %d times\n", msgcount); msgcount=0; } } @@ -179,7 +179,7 @@ void Con_Printf (char *fmt, ...) Sys_Printf ("%s", msg2); // also echo to debugging console if (sv_logfile) - fprintf (sv_logfile, "%s", msg2); + Qprintf (sv_logfile, "%s", msg2); } /* diff --git a/source/sv_sys_win.c b/source/sv_sys_win.c index 40132f4..72812fc 100644 --- a/source/sv_sys_win.c +++ b/source/sv_sys_win.c @@ -54,12 +54,12 @@ Sys_FileTime */ int Sys_FileTime (char *path) { - FILE *f; + QFile *f; - f = fopen(path, "rb"); + f = Qopen(path, "rb"); if (f) { - fclose(f); + Qclose(f); return 1; } diff --git a/source/sv_user.c b/source/sv_user.c index 4ddcc5a..8d292a8 100644 --- a/source/sv_user.c +++ b/source/sv_user.c @@ -573,7 +573,7 @@ void SV_NextDownload_f (void) r = host_client->downloadsize - host_client->downloadcount; if (r > 768) r = 768; - r = fread (buffer, 1, r, host_client->download); + r = Qread (host_client->download, buffer, r); ClientReliableWrite_Begin (host_client, svc_download, 6+r); ClientReliableWrite_Short (host_client, r); @@ -588,7 +588,7 @@ void SV_NextDownload_f (void) if (host_client->downloadcount != host_client->downloadsize) return; - fclose (host_client->download); + Qclose (host_client->download); host_client->download = NULL; } @@ -636,7 +636,7 @@ void SV_NextUpload (void) if (!host_client->upload) { - host_client->upload = fopen(host_client->uploadfn, "wb"); + host_client->upload = Qopen(host_client->uploadfn, "wb"); if (!host_client->upload) { Sys_Printf("Can't create %s\n", host_client->uploadfn); ClientReliableWrite_Begin (host_client, svc_stufftext, 8); @@ -649,7 +649,7 @@ void SV_NextUpload (void) OutofBandPrintf(host_client->snap_from, "Server receiving %s from %d...\n", host_client->uploadfn, host_client->userid); } - fwrite (net_message.data + msg_readcount, 1, size, host_client->upload); + Qwrite (host_client->upload, net_message.data + msg_readcount, size); msg_readcount += size; Con_DPrintf ("UPLOAD: %d received\n", size); @@ -658,7 +658,7 @@ Con_DPrintf ("UPLOAD: %d received\n", size); ClientReliableWrite_Begin (host_client, svc_stufftext, 8); ClientReliableWrite_String (host_client, "nextul\n"); } else { - fclose (host_client->upload); + Qclose (host_client->upload); host_client->upload = NULL; Sys_Printf("%s upload completed.\n", host_client->uploadfn); @@ -718,7 +718,7 @@ void SV_BeginDownload_f(void) } if (host_client->download) { - fclose (host_client->download); + Qclose (host_client->download); host_client->download = NULL; } @@ -740,7 +740,7 @@ void SV_BeginDownload_f(void) || (strncmp(name, "maps/", 5) == 0 && file_from_pak)) { if (host_client->download) { - fclose(host_client->download); + Qclose(host_client->download); host_client->download = NULL; } diff --git a/source/sys_null.c b/source/sys_null.c index a80c666..cceb119 100644 --- a/source/sys_null.c +++ b/source/sys_null.c @@ -38,15 +38,15 @@ filelength ================ */ -int filelength (FILE *f) +int filelength (QFile *f) { int pos; int end; - pos = ftell (f); - fseek (f, 0, SEEK_END); - end = ftell (f); - fseek (f, pos, SEEK_SET); + pos = Qtell (f); + Qseek (f, 0, SEEK_END); + end = Qtell (f); + Qseek (f, pos, SEEK_SET); return end; } @@ -54,12 +54,12 @@ int filelength (FILE *f) int Sys_FileTime (char *path) { - FILE *f; + QFile *f; - f = fopen(path, "rb"); + f = Qopen(path, "rb"); if (f) { - fclose(f); + Qclose(f); return 1; } diff --git a/source/vid_3dfxsvga.c b/source/vid_3dfxsvga.c index d5f4684..4accef6 100644 --- a/source/vid_3dfxsvga.c +++ b/source/vid_3dfxsvga.c @@ -159,7 +159,7 @@ void VID_SetPalette (unsigned char *palette) int k; unsigned short i; unsigned int *table; - FILE *f; + QFile *f; char s[255]; //#endif float dist, bestdist; @@ -196,8 +196,8 @@ void VID_SetPalette (unsigned char *palette) COM_FOpenFile("glquake/15to8.pal", &f); if (f) { - fread(d_15to8table, 1<<15, 1, f); - fclose(f); + Qread(f, d_15to8table, 1<<15); + Qclose(f); } else { for (i=0; i < (1<<15); i++) { @@ -226,9 +226,9 @@ void VID_SetPalette (unsigned char *palette) snprintf(s, sizeof(s), "%s/glquake", com_gamedir); Sys_mkdir (s); snprintf(s, sizeof(s), "%s/glquake/15to8.pal", com_gamedir); - if ((f = fopen(s, "wb")) != NULL) { - fwrite(d_15to8table, 1<<15, 1, f); - fclose(f); + if ((f = Qopen(s, "wb")) != NULL) { + Qwrite(f, d_15to8table, 1<<15); + Qclose(f); } } } diff --git a/source/vid_glx.c b/source/vid_glx.c index 99feb96..1195150 100644 --- a/source/vid_glx.c +++ b/source/vid_glx.c @@ -206,7 +206,7 @@ void VID_SetPalette (unsigned char *palette) int k; unsigned short i; unsigned int *table; - FILE *f; + QFile *f; char s[255]; float dist, bestdist; static qboolean palflag = false; @@ -240,8 +240,8 @@ void VID_SetPalette (unsigned char *palette) COM_FOpenFile("glquake/15to8.pal", &f); if (f) { - fread(d_15to8table, 1<<15, 1, f); - fclose(f); + Qread(f, d_15to8table, 1<<15); + Qclose(f); } else { for (i=0; i < (1<<15); i++) { /* Maps @@ -269,9 +269,9 @@ void VID_SetPalette (unsigned char *palette) snprintf(s, sizeof(s), "%s/glquake", com_gamedir); Sys_mkdir (s); snprintf(s, sizeof(s), "%s/glquake/15to8.pal", com_gamedir); - if ((f = fopen(s, "wb")) != NULL) { - fwrite(d_15to8table, 1<<15, 1, f); - fclose(f); + if ((f = Qopen(s, "wb")) != NULL) { + Qwrite(f, d_15to8table, 1<<15); + Qclose(f); } } } diff --git a/source/vid_sgl.c b/source/vid_sgl.c index 8a2ee70..d8d8e73 100644 --- a/source/vid_sgl.c +++ b/source/vid_sgl.c @@ -154,7 +154,7 @@ VID_SetPalette (unsigned char *palette) int k; unsigned short i; unsigned int *table; - FILE *f; + QFile *f; char s[256]; float dist, bestdist; static qboolean palflag = false; @@ -187,8 +187,8 @@ VID_SetPalette (unsigned char *palette) COM_FOpenFile("glquake/15to8.pal", &f); if (f) { - fread(d_15to8table, 1<<15, 1, f); - fclose(f); + Qread(f, d_15to8table, 1<<15); + Qclose(f); } else { for (i=0; i < (1<<15); i++) { /* Maps @@ -216,9 +216,9 @@ VID_SetPalette (unsigned char *palette) snprintf (s, sizeof (s), "%s/glquake", com_gamedir); Sys_mkdir (s); snprintf(s, sizeof (s), "%s/glquake/15to8.pal", com_gamedir); - if ((f = fopen (s, "wb")) != NULL) { - fwrite (d_15to8table, 1<<15, 1, f); - fclose (f); + if ((f = Qopen (s, "wb")) != NULL) { + Qwrite (f, d_15to8table, 1<<15); + Qclose (f); } } } diff --git a/source/vid_wgl.c b/source/vid_wgl.c index 3a08e68..03d9731 100644 --- a/source/vid_wgl.c +++ b/source/vid_wgl.c @@ -721,7 +721,7 @@ void VID_SetPalette (unsigned char *palette) int k; unsigned short i; unsigned int *table; - FILE *f; + QFile *f; char s[255]; float dist, bestdist; static qboolean palflag = false; @@ -755,8 +755,8 @@ void VID_SetPalette (unsigned char *palette) COM_FOpenFile("glquake/15to8.pal", &f); if (f) { - fread(d_15to8table, 1<<15, 1, f); - fclose(f); + Qread(f, d_15to8table, 1<<15); + Qclose(f); } else { for (i=0; i < (1<<15); i++) { /* Maps @@ -784,9 +784,9 @@ void VID_SetPalette (unsigned char *palette) snprintf(s, sizeof(s), "%s/glquake", com_gamedir); Sys_mkdir (s); snprintf(s, sizeof(s), "%s/glquake/15to8.pal", com_gamedir); - if ((f = fopen(s, "wb")) != NULL) { - fwrite(d_15to8table, 1<<15, 1, f); - fclose(f); + if ((f = Qopen(s, "wb")) != NULL) { + Qwrite(f, d_15to8table, 1<<15); + Qclose(f); } } }