14 #include <proto/dos.h>
15 #include <proto/exec.h>
17 #include <exec/lists.h>
18 #include <exec/memory.h>
21 #include <utility/tagitem.h>
32 char *cachedir
= "/tmp";
34 cvar_t sys_linerefresh
= {"sys_linerefresh","0"};// set for entity display
37 // =======================================================================
38 // AROS Specific types
39 // =======================================================================
48 // =======================================================================
49 // AROS Specific variables
50 // =======================================================================
52 APTR aros_membase
= NULL
;
54 // =======================================================================
56 // =======================================================================
60 void Sys_DebugNumber(int y
, int val
)
65 void Sys_Printf (char *fmt, ...)
70 va_start (argptr,fmt);
71 vsprintf (text,fmt,argptr);
73 fprintf(stderr, "%s", text);
78 void Sys_Printf (char *fmt, ...)
82 char text[1024], *t_p;
88 va_start (argptr,fmt);
89 vsprintf (text,fmt,argptr);
95 // make sure everything goes through, even though we are non-blocking
98 r = write (1, text, l);
111 void Sys_Printf (char *fmt
, ...)
117 va_start (argptr
,fmt
);
118 vsprintf (text
,fmt
,argptr
);
121 if (strlen(text
) > sizeof(text
))
122 Sys_Error("memory overwrite in Sys_Printf");
127 for (p
= (unsigned char *)text
; *p
; p
++) {
129 if ((*p
> 128 || *p
< 32) && *p
!= 10 && *p
!= 13 && *p
!= 9)
130 printf("[%02x]", *p
);
138 "\x1b[?7h\x1b[40m\x1b[2J\x1b[0;1;41m\x1b[1;1H QUAKE: The Doomed Dimension \x1b[33mby \x1b[44mid\x1b[41m Software \x1b[2;1H ---------------------------------------------------------------------------- \x1b[3;1H CALL 1-800-IDGAMES TO ORDER OR FOR TECHNICAL SUPPORT \x1b[4;1H PRICE: $45.00 (PRICES MAY VARY OUTSIDE THE US.) \x1b[5;1H \x1b[6;1H \x1b[37mYes! You only have one fourth of this incredible epic. That is because most \x1b[7;1H of you have paid us nothing or at most, very little. You could steal the \x1b[8;1H game from a friend. But we both know you'll be punished by God if you do. \x1b[9;1H \x1b[33mWHY RISK ETERNAL DAMNATION? CALL 1-800-IDGAMES AND BUY NOW! \x1b[10;1H \x1b[37mRemember, we love you almost as much as He does. \x1b[11;1H \x1b[12;1H \x1b[33mProgramming: \x1b[37mJohn Carmack, Michael Abrash, John Cash \x1b[13;1H \x1b[33mDesign: \x1b[37mJohn Romero, Sandy Petersen, American McGee, Tim Willits \x1b[14;1H \x1b[33mArt: \x1b[37mAdrian Carmack, Kevin Cloud \x1b[15;1H \x1b[33mBiz: \x1b[37mJay Wilbur, Mike Wilson, Donna Jackson \x1b[16;1H \x1b[33mProjects: \x1b[37mShawn Green \x1b[33mSupport: \x1b[37mBarrett Alexander \x1b[17;1H \x1b[33mSound Effects: \x1b[37mTrent Reznor and Nine Inch Nails \x1b[18;1H For other information or details on ordering outside the US, check out the \x1b[19;1H files accompanying QUAKE or our website at http://www.idsoftware.com. \x1b[20;1H \x1b[0;41mQuake is a trademark of Id Software, inc., (c)1996 Id Software, inc. \x1b[21;1H All rights reserved. NIN logo is a registered trademark licensed to \x1b[22;1H Nothing Interactive, Inc. All rights reserved. \x1b[40m\x1b[23;1H\x1b[0m";
140 "\x1b[?7h\x1b[40m\x1b[2J\x1b[0;1;41m\x1b[1;1H QUAKE \x1b[33mby \x1b[44mid\x1b[41m Software \x1b[2;1H ----------------------------------------------------------------------------- \x1b[3;1H \x1b[37mWhy did you quit from the registered version of QUAKE? Did the \x1b[4;1H scary monsters frighten you? Or did Mr. Sandman tug at your \x1b[5;1H little lids? No matter! What is important is you love our \x1b[6;1H game, and gave us your money. Congratulations, you are probably \x1b[7;1H not a thief. \x1b[8;1H Thank You. \x1b[9;1H \x1b[33;44mid\x1b[41m Software is: \x1b[10;1H PROGRAMMING: \x1b[37mJohn Carmack, Michael Abrash, John Cash \x1b[11;1H \x1b[33mDESIGN: \x1b[37mJohn Romero, Sandy Petersen, American McGee, Tim Willits \x1b[12;1H \x1b[33mART: \x1b[37mAdrian Carmack, Kevin Cloud \x1b[13;1H \x1b[33mBIZ: \x1b[37mJay Wilbur, Mike Wilson \x1b[33mPROJECTS MAN: \x1b[37mShawn Green \x1b[14;1H \x1b[33mBIZ ASSIST: \x1b[37mDonna Jackson \x1b[33mSUPPORT: \x1b[37mBarrett Alexander \x1b[15;1H \x1b[33mSOUND EFFECTS AND MUSIC: \x1b[37mTrent Reznor and Nine Inch Nails \x1b[16;1H \x1b[17;1H If you need help running QUAKE refer to the text files in the \x1b[18;1H QUAKE directory, or our website at http://www.idsoftware.com. \x1b[19;1H If all else fails, call our technical support at 1-800-IDGAMES. \x1b[20;1H \x1b[0;41mQuake is a trademark of Id Software, inc., (c)1996 Id Software, inc. \x1b[21;1H All rights reserved. NIN logo is a registered trademark licensed \x1b[22;1H to Nothing Interactive, Inc. All rights reserved. \x1b[23;1H\x1b[40m\x1b[0m";
145 printf("Sys_Quit\n");
149 /* Set stdin as non-blocking */
150 fcntl (0, F_SETFL
, fcntl (0, F_GETFL
, 0) & ~FNDELAY
);
153 if (registered
.value
)
159 if (NULL
!= aros_membase
) {
160 FreeVec(aros_membase
);
173 void Sys_Error (char *error
, ...)
178 // change stdin to non blocking
180 fcntl (0, F_SETFL
, fcntl (0, F_GETFL
, 0) & ~FNDELAY
);
183 va_start (argptr
,error
);
184 vsprintf (string
,error
,argptr
);
186 fprintf(stderr
, "Error: %s\n", string
);
197 void Sys_Warn (char *warning
, ...)
202 va_start (argptr
,warning
);
203 vsprintf (string
,warning
,argptr
);
205 fprintf(stderr
, "Warning: %s", string
);
212 returns -1 if not present
215 int Sys_FileTime (char *path
)
219 if (stat (path
,&buf
) == -1)
226 void Sys_mkdir (char *path
)
233 int Sys_FileOpenRead (char *path
, int *handle
)
236 struct stat fileinfo
;
239 h
= open (path
, O_RDONLY
, 0666);
244 if (fstat (h
,&fileinfo
) == -1)
245 Sys_Error ("Error fstating %s", path
);
247 return fileinfo
.st_size
;
250 int Sys_FileOpenWrite (char *path
)
256 handle
= open(path
,O_RDWR
| O_CREAT
| O_TRUNC
260 Sys_Error ("Error opening %s: %s", path
,strerror(errno
));
265 int Sys_FileWrite (int handle
, void *src
, int count
)
267 return write (handle
, src
, count
);
270 void Sys_FileClose (int handle
)
275 void Sys_FileSeek (int handle
, int position
)
277 lseek (handle
, position
, SEEK_SET
);
280 int Sys_FileRead (int handle
, void *dest
, int count
)
282 return read (handle
, dest
, count
);
285 void Sys_DebugLog(char *file
, char *fmt
, ...)
287 static char data
[1024];
291 printf("Sys_DebugLog\n");
293 va_start(argptr
, fmt
);
294 vsprintf(data
, fmt
, argptr
);
297 fd
= open(file
, O_WRONLY
| O_CREAT
| O_APPEND
, 0666);
298 write(fd
, data
, strlen(data
));
302 void Sys_EditFile(char *filename
)
306 sprintf(cmd
, "edit %s", filename
);
307 Execute(cmd
, BNULL
, BNULL
);
312 term
= getenv("TERM");
313 if (term
&& !strcmp(term
, "xterm"))
315 editor
= getenv("VISUAL");
317 editor
= getenv("EDITOR");
319 editor
= getenv("EDIT");
322 sprintf(cmd
, "xterm -e %s %s", editor
, filename
);
328 double Sys_FloatTime (void)
334 gettimeofday(&tp
, &tzp
);
339 return tp
.tv_usec
/1000000.0;
342 return (tp
.tv_sec
- secbase
) + tp
.tv_usec
/1000000.0;
345 // =======================================================================
346 // Sleeps for microseconds
347 // =======================================================================
349 static volatile int oktogo
;
351 void alarm_handler(int x
)
356 void Sys_LineRefresh(void)
361 void floating_point_exception_handler(int whatever
)
363 // Sys_Warn("floating point exception\n");
364 signal(SIGFPE
, floating_point_exception_handler
);
367 char *Sys_ConsoleInput(void)
369 static char text
[256];
371 // printf("Sys_ConsoleInput\n");
373 if (cls
.state
== ca_dedicated
) {
375 FGets(Input(), text
, 256);
384 static char text
[256];
387 struct timeval timeout
;
389 if (cls
.state
== ca_dedicated
) {
391 FD_SET(0, &fdset
); // stdin
394 if (select (1, &fdset
, NULL
, NULL
, &timeout
) == -1 || !FD_ISSET(0, &fdset
))
397 len
= read (0, text
, sizeof(text
));
400 text
[len
-1] = 0; // rip off the /n and terminate
409 void Sys_HighFPPrecision (void)
413 void Sys_LowFPPrecision (void)
418 int main (int c
, char **v
)
421 double time
, oldtime
, newtime
;
424 extern int recording
;
427 static char cwd
[1024];
429 // signal(SIGFPE, floating_point_exception_handler);
431 signal(SIGFPE
, SIG_IGN
);
434 memset(&parms
, 0, sizeof(parms
));
437 parms
.argc
= com_argc
;
438 parms
.argv
= com_argv
;
441 parms
.memsize
= 16*1024*1024;
443 parms
.memsize
= 8*1024*1024;
446 j
= COM_CheckParm("-mem");
448 parms
.memsize
= (int) (Q_atof(com_argv
[j
+1]) * 1024 * 1024);
449 parms
.membase
= AllocVec (parms
.memsize
, MEMF_ANY
);
451 aros_membase
= parms
.membase
;
452 printf("parms.membase: %p\n", parms
.membase
);
454 /* get name of current directory */
455 GetCurrentDirName(cwd
,128);
457 // caching is disabled by default, use -cachedir to enable
458 // parms.cachedir = cachedir;
461 /* Set stdin as non-blocking */
462 fcntl(0, F_SETFL
, fcntl (0, F_GETFL
, 0) | FNDELAY
);
465 printf("Initing host, memsize=%d\n", parms
.memsize
);
468 printf("Initing syst\n");
471 printf("Check for nostdout\n");
472 if (COM_CheckParm("-nostdout"))
476 /* Set stdin as non-blocking */
477 fcntl(0, F_SETFL
, fcntl (0, F_GETFL
, 0) | FNDELAY
);
479 printf ("Linux Quake -- Version %0.3f\n", LINUX_VERSION
);
481 printf("Entering main loop\n");
482 oldtime
= Sys_FloatTime () - 0.1;
485 // find time spent rendering last frame
486 newtime
= Sys_FloatTime ();
487 time
= newtime
- oldtime
;
489 if (cls
.state
== ca_dedicated
)
490 { // play vcrfiles at max speed
491 if (time
< sys_ticrate
.value
&& (vcrFile
== -1 || recording
) )
494 continue; // not time to run a server only tic yet
496 time
= sys_ticrate
.value
;
499 if (time
> sys_ticrate
.value
*2)
506 // graphic debugging aids
507 if (sys_linerefresh
.value
)
516 Sys_MakeCodeWriteable
519 void Sys_MakeCodeWriteable (unsigned long startaddr
, unsigned long length
)
524 int psize
= getpagesize();
526 addr
= (startaddr
& ~(psize
-1)) - psize
;
528 // fprintf(stderr, "writable code %lx(%lx)-%lx, length=%lx\n", startaddr,
529 // addr, startaddr+length, length);
531 r
= mprotect((char*)addr
, length
+ startaddr
- addr
+ psize
, 7);
534 Sys_Error("Protection change failed\n");