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