-#include <unistd.h>
-#include <signal.h>
#include <stdlib.h>
-#include <limits.h>
-#include <sys/time.h>
+#include <stdio.h>
+#include <stdarg.h>
+
#include <sys/types.h>
+#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
-#include <stdarg.h>
-#include <stdio.h>
+
+#include <signal.h>
+#include <limits.h>
#include <sys/ipc.h>
#include <sys/shm.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <ctype.h>
+#include <sys/time.h>
#include <sys/wait.h>
#include <sys/mman.h>
+#include <string.h>
+#include <ctype.h>
#include <errno.h>
+#include <time.h>
#include "quakedef.h"
int nostdout = 0;
char *basedir = ".";
+#if CACHEENABLE
char *cachedir = "/tmp";
+#endif
-cvar_t sys_linerefresh = {"sys_linerefresh","0"};// set for entity display
+extern cvar_t timestamps;
+extern cvar_t timeformat;
+
+/* The translation table between the graphical font and plain ASCII --KB */
+static char qfont_table[256] = {
+ '\0', '#', '#', '#', '#', '.', '#', '#',
+ '#', 9, 10, '#', ' ', 13, '.', '.',
+ '[', ']', '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9', '.', '<', '=', '>',
+ ' ', '!', '"', '#', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', ':', ';', '<', '=', '>', '?',
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ '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',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+ 'x', 'y', 'z', '{', '|', '}', '~', '<',
+
+ '<', '=', '>', '#', '#', '.', '#', '#',
+ '#', '#', ' ', '#', ' ', '>', '.', '.',
+ '[', ']', '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9', '.', '<', '=', '>',
+ ' ', '!', '"', '#', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', ':', ';', '<', '=', '>', '?',
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ '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',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+ 'x', 'y', 'z', '{', '|', '}', '~', '<'
+};
// =======================================================================
// General routines
}
*/
-char sysprintfbuf1[1024];
-char sysprintfbuf2[4096];
-char sysprintfhextable[] = "0123456789ABCDEF";
+#define MAX_PRINT_MSG 4096
void Sys_Printf (char *fmt, ...)
{
va_list argptr;
- char c, *o;
- int i;
+ char start[MAX_PRINT_MSG]; // String we started with
+ char stamp[MAX_PRINT_MSG]; // Time stamp
+ char final[MAX_PRINT_MSG]; // String we print
- va_start (argptr,fmt);
- vsprintf (sysprintfbuf1,fmt,argptr);
- va_end (argptr);
+ time_t mytime = 0;
+ struct tm *local = NULL;
- if (strlen(sysprintfbuf1) > 1023)
- Sys_Error("memory overwrite in Sys_Printf");
+ unsigned char *p;
+
+ va_start (argptr, fmt);
+ vsnprintf (start, sizeof(start), fmt, argptr);
+ va_end (argptr);
if (nostdout)
return;
- o = sysprintfbuf2;
- for (i = 0;i < 1023 && sysprintfbuf1[i];i++)
- {
- c = sysprintfbuf1[i] & 0x7f;
- if (c < 32 && c != 10 && c != 13 && c != 9)
- {
- *o++ = '[';
- *o++ = sysprintfhextable[(c >> 4)];
- *o++ = sysprintfhextable[c & 0x0F];
- *o++ = ']';
- }
- else
- *o++ = c;
+ if (timestamps.value) {
+ mytime = time (NULL);
+ local = localtime (&mytime);
+ strftime (stamp, sizeof (stamp), timeformat.string, local);
+
+ snprintf (final, sizeof (final), "%s%s", stamp, start);
+ } else {
+ snprintf (final, sizeof (final), "%s", start);
+ }
+
+ for (p = (unsigned char *) final; *p; p++) {
+ putc (qfont_table[*p], stdout);
}
- *o++ = 0;
- puts(sysprintfbuf2);
+ fflush (stdout);
}
#if 0
static char end1[] =
-"\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";
+"\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 r
+egistered trademark licensed to \x1b[22;1H Nothing Interactive, Inc. All rights reserved. \x1b[40m\x1b[23;1H\x1b[0m";
static char end2[] =
-"\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";
+"\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. N
+IN logo is a registered trademark licensed \x1b[22;1H to Nothing Interactive, Inc. All rights reserved. \x1b[23;1H\x1b[40m\x1b[0m";
#endif
void Sys_Quit (void)
exit(0);
}
-void Sys_Init(void)
-{
-#if id386
- Sys_SetFPCW();
-#endif
-}
-
void Sys_Error (char *error, ...)
{
va_list argptr;
close(fd);
}
-void Sys_EditFile(char *filename)
+double Sys_DoubleTime (void)
{
+ static int first = true;
+ static double oldtime = 0.0, basetime = 0.0;
+ double newtime;
+ struct timeval tp;
+ struct timezone tzp;
+
+ gettimeofday(&tp, &tzp);
- char cmd[256];
- char *term;
- char *editor;
+ newtime = (double) ((unsigned long) tp.tv_sec) + tp.tv_usec/1000000.0 - basetime;
- term = getenv("TERM");
- if (term && !strcmp(term, "xterm"))
+ if (first)
{
- editor = getenv("VISUAL");
- if (!editor)
- editor = getenv("EDITOR");
- if (!editor)
- editor = getenv("EDIT");
- if (!editor)
- editor = "vi";
- sprintf(cmd, "xterm -e %s %s", editor, filename);
- system(cmd);
+ first = false;
+ basetime = newtime;
+ newtime = 0.0;
}
-}
-
-double Sys_FloatTime (void)
-{
- struct timeval tp;
- struct timezone tzp;
- static int secbase;
-
- gettimeofday(&tp, &tzp);
+ if (newtime < oldtime)
+ Sys_Error("Sys_DoubleTime: time running backwards??\n");
- if (!secbase)
- {
- secbase = tp.tv_sec;
- return tp.tv_usec/1000000.0;
- }
+ oldtime = newtime;
- return (tp.tv_sec - secbase) + tp.tv_usec/1000000.0;
+ return newtime;
}
// =======================================================================
oktogo=1;
}
-void Sys_LineRefresh(void)
-{
-}
-
void floating_point_exception_handler(int whatever)
{
// Sys_Warn("floating point exception\n");
return NULL;
}
-#if !id386
-void Sys_HighFPPrecision (void)
-{
-}
-
-void Sys_LowFPPrecision (void)
+void Sys_Sleep(void)
{
+ usleep(1);
}
-#endif
int main (int c, char **v)
{
- double time, oldtime, newtime;
- quakeparms_t parms;
- extern int vcrFile;
- extern int recording;
- int j;
+ double oldtime, newtime;
// static char cwd[1024];
// signal(SIGFPE, floating_point_exception_handler);
signal(SIGFPE, SIG_IGN);
- memset(&parms, 0, sizeof(parms));
+ memset(&host_parms, 0, sizeof(host_parms));
COM_InitArgv(c, v);
- parms.argc = com_argc;
- parms.argv = com_argv;
-
- parms.memsize = 24*1024*1024;
+ host_parms.argc = com_argc;
+ host_parms.argv = com_argv;
- j = COM_CheckParm("-mem");
- if (j)
- parms.memsize = (int) (atof(com_argv[j+1]) * 1024 * 1024);
- parms.membase = malloc (parms.memsize);
- if (!parms.membase)
- {
- printf("Unable to allocate heap memory\n");
- return 1;
- }
+ host_parms.memsize = DEFAULTMEM * 1024*1024;
- parms.basedir = basedir;
-// caching is disabled by default, use -cachedir to enable
-// parms.cachedir = cachedir;
+ host_parms.basedir = basedir;
fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
- Host_Init(&parms);
-
- Sys_Init();
+ Host_Init();
if (COM_CheckParm("-nostdout"))
nostdout = 1;
else
{
fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
- printf ("Linux DarkPlaces -- Version %0.3f\n", VERSION);
+ printf ("Linux DarkPlaces -- Version %0.3f (build %i)\n", VERSION, buildnumber);
}
- oldtime = Sys_FloatTime () - 0.1;
+ oldtime = Sys_DoubleTime () - 0.1;
while (1)
{
// find time spent rendering last frame
- newtime = Sys_FloatTime ();
- time = newtime - oldtime;
-
- if (cls.state == ca_dedicated)
- { // play vcrfiles at max speed
- if (time < sys_ticrate.value && (vcrFile == -1 || recording) )
- {
- usleep(1);
- continue; // not time to run a server only tic yet
- }
- time = sys_ticrate.value;
- }
-
- if (time > sys_ticrate.value*2)
- oldtime = newtime;
- else
- oldtime += time;
-
- Host_Frame (time);
-
- // graphic debugging aids
- if (sys_linerefresh.value)
- Sys_LineRefresh ();
- }
- return 0;
-}
-
-
-/*
-================
-Sys_MakeCodeWriteable
-================
-*/
-void Sys_MakeCodeWriteable (unsigned long startaddr, unsigned long length)
-{
-
- int r;
- unsigned long addr;
- int psize = getpagesize();
-
- addr = (startaddr & ~(psize-1)) - psize;
-
-// fprintf(stderr, "writable code %lx(%lx)-%lx, length=%lx\n", startaddr,
-// addr, startaddr+length, length);
+ newtime = Sys_DoubleTime ();
- r = mprotect((char*)addr, length + startaddr - addr + psize, 7);
-
- if (r < 0)
- Sys_Error("Protection change failed\n");
+ Host_Frame (newtime - oldtime);
+ oldtime = newtime;
+ }
+ return 0;
}
-