X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=sys_shared.c;h=5b81ce0ea877c19e7fbb8eed83bbe09c50d2bdf7;hb=931cdde2eb5df5ab2c8e0b5f0832ef3b102c2fdd;hp=307c400b9ae62abf8903387d00d665eff664f0fd;hpb=ea7c24e1fb41f3b1df984ac0eed6881c9fde16f5;p=xonotic%2Fdarkplaces.git diff --git a/sys_shared.c b/sys_shared.c index 307c400b..5b81ce0e 100644 --- a/sys_shared.c +++ b/sys_shared.c @@ -1,10 +1,14 @@ #include "quakedef.h" #include -#ifndef WIN32 +#ifdef WIN32 +#include +#else +#include #include #include #endif +#include extern cvar_t timestamps; extern cvar_t timeformat; @@ -43,7 +47,7 @@ static char qfont_table[256] = { 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '<' }; @@ -53,7 +57,7 @@ extern HANDLE hinput, houtput; #endif #define MAX_PRINT_MSG 16384 -void Sys_Printf (char *fmt, ...) +void Sys_Printf (const char *fmt, ...) { va_list argptr; char start[MAX_PRINT_MSG]; // String we started with @@ -102,16 +106,148 @@ void Sys_Printf (char *fmt, ...) #endif } -char engineversion[40]; +// LordHavoc: 256 pak files (was 10) +#define MAX_HANDLES 256 +QFile *sys_handles[MAX_HANDLES]; + +int findhandle (void) +{ + int i; + + for (i = 1;i < MAX_HANDLES;i++) + if (!sys_handles[i]) + return i; + Sys_Error ("out of handles"); + return -1; +} + +/* +================ +Sys_FileLength +================ +*/ +int Sys_FileLength (QFile *f) +{ + int pos, end; + + pos = Qtell (f); + Qseek (f, 0, SEEK_END); + end = Qtell (f); + Qseek (f, pos, SEEK_SET); + + return end; +} + +int Sys_FileOpenRead (const char *path, int *handle) +{ + QFile *f; + int i, retval; + + i = findhandle (); + + f = Qopen(path, "rbz"); + + if (!f) + { + *handle = -1; + retval = -1; + } + else + { + sys_handles[i] = f; + *handle = i; + retval = Sys_FileLength(f); + } + + return retval; +} + +int Sys_FileOpenWrite (const char *path) +{ + QFile *f; + int i; + + i = findhandle (); + + f = Qopen(path, "wb"); + if (!f) + { + Con_Printf("Sys_FileOpenWrite: Error opening %s: %s", path, strerror(errno)); + return 0; + } + sys_handles[i] = f; + + return i; +} + +void Sys_FileClose (int handle) +{ + Qclose (sys_handles[handle]); + sys_handles[handle] = NULL; +} + +void Sys_FileSeek (int handle, int position) +{ + Qseek (sys_handles[handle], position, SEEK_SET); +} + +int Sys_FileRead (int handle, void *dest, int count) +{ + return Qread (sys_handles[handle], dest, count); +} + +int Sys_FileWrite (int handle, void *data, int count) +{ + return Qwrite (sys_handles[handle], data, count); +} + +int Sys_FileTime (const char *path) +{ +#if WIN32 + QFile *f; + + f = Qopen(path, "rb"); + if (f) + { + Qclose(f); + return 1; + } + + return -1; +#else + struct stat buf; + + if (stat (path,&buf) == -1) + return -1; + + return buf.st_mtime; +#endif +} + +void Sys_mkdir (const char *path) +{ +#if WIN32 + _mkdir (path); +#else + mkdir (path, 0777); +#endif +} + +char engineversion[128]; void Sys_Shared_EarlyInit(void) { + Memory_Init (); + + COM_InitArgv(); + COM_InitGameType(); + #if defined(__linux__) - sprintf (engineversion, "%s Linux GL build %s", gamename, buildstring); + sprintf (engineversion, "%s Linux %s", gamename, buildstring); #elif defined(WIN32) - sprintf (engineversion, "%s Windows GL build %s", gamename, buildstring); + sprintf (engineversion, "%s Windows %s", gamename, buildstring); #else - sprintf (engineversion, "%s Unknown GL build %s", gamename, buildstring); + sprintf (engineversion, "%s Unknown %s", gamename, buildstring); #endif if (COM_CheckParm("-nostdout"))