Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5131 | clevermous | 1 | /* |
2 | Copyright (C) 1996-1997 Id Software, Inc. |
||
3 | |||
4 | This program is free software; you can redistribute it and/or |
||
5 | modify it under the terms of the GNU General Public License |
||
6 | as published by the Free Software Foundation; either version 2 |
||
7 | of the License, or (at your option) any later version. |
||
8 | |||
9 | This program is distributed in the hope that it will be useful, |
||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
12 | |||
13 | See the GNU General Public License for more details. |
||
14 | |||
15 | You should have received a copy of the GNU General Public License |
||
16 | along with this program; if not, write to the Free Software |
||
17 | Foundation, 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 |
||
26 | #include |
||
27 | |||
28 | |||
29 | /* |
||
30 | =============================================================================== |
||
31 | |||
32 | FILE IO |
||
33 | |||
34 | =============================================================================== |
||
35 | */ |
||
36 | |||
37 | #define MAX_HANDLES 10 |
||
38 | FILE *sys_handles[MAX_HANDLES]; |
||
39 | |||
40 | int findhandle (void) |
||
41 | { |
||
42 | int i; |
||
43 | |||
44 | for (i=1 ; i |
||
45 | if (!sys_handles[i]) |
||
46 | return i; |
||
47 | Sys_Error ("out of handles"); |
||
48 | return -1; |
||
49 | } |
||
50 | |||
51 | /* |
||
52 | ================ |
||
53 | filelength |
||
54 | ================ |
||
55 | */ |
||
56 | int 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 | |||
69 | int 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 | |||
88 | int 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 | |||
103 | void Sys_FileClose (int handle) |
||
104 | { |
||
105 | fclose (sys_handles[handle]); |
||
106 | sys_handles[handle] = NULL; |
||
107 | } |
||
108 | |||
109 | void Sys_FileSeek (int handle, int position) |
||
110 | { |
||
111 | fseek (sys_handles[handle], position, SEEK_SET); |
||
112 | } |
||
113 | |||
114 | int Sys_FileRead (int handle, void *dest, int count) |
||
115 | { |
||
116 | return fread (dest, 1, count, sys_handles[handle]); |
||
117 | } |
||
118 | |||
119 | int Sys_FileWrite (int handle, void *data, int count) |
||
120 | { |
||
121 | return fwrite (data, 1, count, sys_handles[handle]); |
||
122 | } |
||
123 | |||
124 | int 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 | |||
138 | void Sys_mkdir (char *path) |
||
139 | { |
||
140 | } |
||
141 | |||
142 | |||
143 | /* |
||
144 | =============================================================================== |
||
145 | |||
146 | SYSTEM IO |
||
147 | |||
148 | =============================================================================== |
||
149 | */ |
||
150 | |||
151 | void Sys_MakeCodeWriteable (unsigned long startaddr, unsigned long length) |
||
152 | { |
||
153 | } |
||
154 | |||
155 | |||
156 | void Sys_DebugLog(char *file, char *fmt, ...) |
||
157 | { |
||
158 | } |
||
159 | |||
160 | void 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 | |||
175 | void 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 | |||
184 | void Sys_Quit (void) |
||
185 | { |
||
186 | exit (0); |
||
187 | } |
||
188 | |||
189 | double 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 | |||
204 | void Sys_Sleep (void) |
||
205 | { |
||
206 | } |
||
207 | |||
208 | |||
209 | void Sys_SendKeyEvents (void) |
||
210 | { |
||
211 | } |
||
212 | |||
213 | void Sys_HighFPPrecision (void) |
||
214 | { |
||
215 | } |
||
216 | |||
217 | void Sys_LowFPPrecision (void) |
||
218 | { |
||
219 | } |
||
220 | |||
221 | char *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 | ================== |
||
264 | main |
||
265 | |||
266 | ================== |
||
267 | */ |
||
268 | char *newargv[256]; |
||
269 | |||
270 | int 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 |