|
|
1.1 ! root 1: // sys_null.h -- null system driver to aid porting efforts ! 2: ! 3: #include "quakedef.h" ! 4: #include "winquake.h" ! 5: #include "errno.h" ! 6: #include <sys\types.h> ! 7: #include <sys\timeb.h> ! 8: ! 9: ! 10: /* ! 11: =============================================================================== ! 12: ! 13: FILE IO ! 14: ! 15: =============================================================================== ! 16: */ ! 17: ! 18: #define MAX_HANDLES 10 ! 19: FILE *sys_handles[MAX_HANDLES]; ! 20: ! 21: int findhandle (void) ! 22: { ! 23: int i; ! 24: ! 25: for (i=1 ; i<MAX_HANDLES ; i++) ! 26: if (!sys_handles[i]) ! 27: return i; ! 28: Sys_Error ("out of handles"); ! 29: return -1; ! 30: } ! 31: ! 32: /* ! 33: ================ ! 34: filelength ! 35: ================ ! 36: */ ! 37: int filelength (FILE *f) ! 38: { ! 39: int pos; ! 40: int end; ! 41: ! 42: pos = ftell (f); ! 43: fseek (f, 0, SEEK_END); ! 44: end = ftell (f); ! 45: fseek (f, pos, SEEK_SET); ! 46: ! 47: return end; ! 48: } ! 49: ! 50: int Sys_FileOpenRead (char *path, int *hndl) ! 51: { ! 52: FILE *f; ! 53: int i; ! 54: ! 55: i = findhandle (); ! 56: ! 57: f = fopen(path, "rb"); ! 58: if (!f) ! 59: { ! 60: *hndl = -1; ! 61: return -1; ! 62: } ! 63: sys_handles[i] = f; ! 64: *hndl = i; ! 65: ! 66: return filelength(f); ! 67: } ! 68: ! 69: int Sys_FileOpenWrite (char *path) ! 70: { ! 71: FILE *f; ! 72: int i; ! 73: ! 74: i = findhandle (); ! 75: ! 76: f = fopen(path, "wb"); ! 77: if (!f) ! 78: Sys_Error ("Error opening %s: %s", path,strerror(errno)); ! 79: sys_handles[i] = f; ! 80: ! 81: return i; ! 82: } ! 83: ! 84: void Sys_FileClose (int handle) ! 85: { ! 86: fclose (sys_handles[handle]); ! 87: sys_handles[handle] = NULL; ! 88: } ! 89: ! 90: void Sys_FileSeek (int handle, int position) ! 91: { ! 92: fseek (sys_handles[handle], position, SEEK_SET); ! 93: } ! 94: ! 95: int Sys_FileRead (int handle, void *dest, int count) ! 96: { ! 97: return fread (dest, 1, count, sys_handles[handle]); ! 98: } ! 99: ! 100: int Sys_FileWrite (int handle, void *data, int count) ! 101: { ! 102: return fwrite (data, 1, count, sys_handles[handle]); ! 103: } ! 104: ! 105: int Sys_FileTime (char *path) ! 106: { ! 107: FILE *f; ! 108: ! 109: f = fopen(path, "rb"); ! 110: if (f) ! 111: { ! 112: fclose(f); ! 113: return 1; ! 114: } ! 115: ! 116: return -1; ! 117: } ! 118: ! 119: void Sys_mkdir (char *path) ! 120: { ! 121: } ! 122: ! 123: ! 124: /* ! 125: =============================================================================== ! 126: ! 127: SYSTEM IO ! 128: ! 129: =============================================================================== ! 130: */ ! 131: ! 132: void Sys_MakeCodeWriteable (unsigned long startaddr, unsigned long length) ! 133: { ! 134: } ! 135: ! 136: ! 137: void Sys_DebugLog(char *file, char *fmt, ...) ! 138: { ! 139: } ! 140: ! 141: void Sys_Error (char *error, ...) ! 142: { ! 143: va_list argptr; ! 144: char text[1024]; ! 145: ! 146: va_start (argptr,error); ! 147: vsprintf (text, error,argptr); ! 148: va_end (argptr); ! 149: ! 150: // MessageBox(NULL, text, "Error", 0 /* MB_OK */ ); ! 151: printf ("ERROR: %s\n", text); ! 152: ! 153: exit (1); ! 154: } ! 155: ! 156: void Sys_Printf (char *fmt, ...) ! 157: { ! 158: va_list argptr; ! 159: ! 160: va_start (argptr,fmt); ! 161: vprintf (fmt,argptr); ! 162: va_end (argptr); ! 163: } ! 164: ! 165: void Sys_Quit (void) ! 166: { ! 167: exit (0); ! 168: } ! 169: ! 170: double Sys_FloatTime (void) ! 171: { ! 172: double t; ! 173: struct _timeb tstruct; ! 174: static int starttime; ! 175: ! 176: _ftime( &tstruct ); ! 177: ! 178: if (!starttime) ! 179: starttime = tstruct.time; ! 180: t = (tstruct.time-starttime) + tstruct.millitm*0.001; ! 181: ! 182: return t; ! 183: } ! 184: ! 185: void Sys_Sleep (void) ! 186: { ! 187: } ! 188: ! 189: ! 190: void Sys_SendKeyEvents (void) ! 191: { ! 192: } ! 193: ! 194: void Sys_HighFPPrecision (void) ! 195: { ! 196: } ! 197: ! 198: void Sys_LowFPPrecision (void) ! 199: { ! 200: } ! 201: ! 202: char *Sys_ConsoleInput (void) ! 203: { ! 204: static char text[256]; ! 205: static int len; ! 206: INPUT_RECORD recs[1024]; ! 207: int count; ! 208: int i; ! 209: int c; ! 210: ! 211: // read a line out ! 212: while (_kbhit()) ! 213: { ! 214: c = _getch(); ! 215: putch (c); ! 216: if (c == '\r') ! 217: { ! 218: text[len] = 0; ! 219: putch ('\n'); ! 220: len = 0; ! 221: return text; ! 222: } ! 223: if (c == 8) ! 224: { ! 225: putch (' '); ! 226: putch (c); ! 227: len--; ! 228: text[len] = 0; ! 229: continue; ! 230: } ! 231: text[len] = c; ! 232: len++; ! 233: text[len] = 0; ! 234: if (len == sizeof(text)) ! 235: len = 0; ! 236: } ! 237: ! 238: return NULL; ! 239: } ! 240: ! 241: ! 242: ! 243: /* ! 244: ================== ! 245: main ! 246: ! 247: ================== ! 248: */ ! 249: char *newargv[256]; ! 250: ! 251: int main (int argc, char **argv) ! 252: { ! 253: MSG msg; ! 254: quakeparms_t parms; ! 255: double time, oldtime; ! 256: static char cwd[1024]; ! 257: ! 258: memset (&parms, 0, sizeof(parms)); ! 259: ! 260: parms.memsize = 16384*1024; ! 261: parms.membase = malloc (parms.memsize); ! 262: ! 263: _getcwd (cwd, sizeof(cwd)); ! 264: if (cwd[Q_strlen(cwd)-1] == '\\') ! 265: cwd[Q_strlen(cwd)-1] = 0; ! 266: parms.basedir = cwd; //"f:/quake"; ! 267: // parms.basedir = "f:\\quake"; ! 268: ! 269: COM_InitArgv (argc, argv); ! 270: ! 271: // dedicated server ONLY! ! 272: if (!COM_CheckParm ("-dedicated")) ! 273: { ! 274: memcpy (newargv, argv, argc*4); ! 275: newargv[argc] = "-dedicated"; ! 276: argc++; ! 277: argv = newargv; ! 278: COM_InitArgv (argc, argv); ! 279: } ! 280: ! 281: parms.argc = argc; ! 282: parms.argv = argv; ! 283: ! 284: printf ("Host_Init\n"); ! 285: Host_Init (&parms); ! 286: ! 287: oldtime = Sys_FloatTime (); ! 288: ! 289: /* main window message loop */ ! 290: while (1) ! 291: { ! 292: time = Sys_FloatTime(); ! 293: if (time - oldtime < sys_ticrate.value ) ! 294: { ! 295: Sleep(1); ! 296: continue; ! 297: } ! 298: ! 299: Host_Frame ( time - oldtime ); ! 300: oldtime = time; ! 301: } ! 302: ! 303: /* return success of application */ ! 304: return TRUE; ! 305: } ! 306:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.