X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=sys_shared.c;h=28529c596d625d3c7c8838e728f564dede386201;hb=f4ca2e493b0fbe2e91293c727ac119c371feffda;hp=01fd0fbabee12a34fb4509fc4dcafcd9c171688b;hpb=45982a9894c5bff60ff494a0f82865ec267d52f7;p=xonotic%2Fdarkplaces.git diff --git a/sys_shared.c b/sys_shared.c index 01fd0fba..28529c59 100644 --- a/sys_shared.c +++ b/sys_shared.c @@ -1,130 +1,137 @@ #include "quakedef.h" -#include +# include #ifndef WIN32 -#include -#include +# include +# include +# include #endif -extern cvar_t timestamps; -extern cvar_t timeformat; - -static int sys_nostdout = false; - -/* 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', '{', '|', '}', '~', '<' -}; +qboolean sys_nostdout = false; -#ifdef WIN32 -extern HANDLE hinput, houtput; -#endif +static char sys_timestring[128]; +char *Sys_TimeString(const char *timeformat) +{ + time_t mytime = time(NULL); + strftime(sys_timestring, sizeof(sys_timestring), timeformat, localtime(&mytime)); + return sys_timestring; +} -#define MAX_PRINT_MSG 16384 -void Sys_Printf (char *fmt, ...) + +extern qboolean host_shuttingdown; +void Sys_Quit (void) { - va_list argptr; - char start[MAX_PRINT_MSG]; // String we started with - char stamp[MAX_PRINT_MSG]; // Time stamp - char final[MAX_PRINT_MSG]; // String we print + host_shuttingdown = true; + Host_Shutdown(); + exit(0); +} - time_t mytime = 0; - struct tm *local = NULL; +char engineversion[128]; - unsigned char *p; -#ifdef WIN32 - DWORD dummy; -#endif +void Sys_Shared_EarlyInit(void) +{ + const char* os; - va_start (argptr, fmt); -#ifdef HAVE_VSNPRINTF - vsnprintf (start, sizeof(start), fmt, argptr); + Memory_Init (); + Log_Init (); + + COM_InitArgv(); + COM_InitGameType(); + +#if defined(__linux__) + os = "Linux"; +#elif defined(WIN32) + os = "Windows"; +#elif defined(__FreeBSD__) + os = "FreeBSD"; +#elif defined(__NetBSD__) + os = "NetBSD"; +#elif defined(__OpenBSD__) + os = "OpenBSD"; +#elif defined(MACOSX) + os = "Mac OS X"; #else - vsprintf (start, fmt, argptr); + os = "Unknown"; #endif - va_end (argptr); + snprintf (engineversion, sizeof (engineversion), "%s %s %s", gamename, os, buildstring); - if (sys_nostdout) - return; +// COMMANDLINEOPTION: Console: -nostdout disables text output to the terminal the game was launched from + if (COM_CheckParm("-nostdout")) + sys_nostdout = 1; + else + Con_Printf("%s\n", engineversion); +} - if (timestamps.value) - { - mytime = time (NULL); - local = localtime (&mytime); - strftime (stamp, sizeof (stamp), timeformat.string, local); +void Sys_Shared_LateInit(void) +{ +} - snprintf (final, sizeof (final), "%s%s", stamp, start); - } - else - snprintf (final, sizeof (final), "%s", start); +/* +=============================================================================== - // LordHavoc: make sure the string is terminated - final[MAX_PRINT_MSG - 1] = 0; - for (p = (unsigned char *) final;*p; p++) - *p = qfont_table[*p]; +DLL MANAGEMENT + +=============================================================================== +*/ + +qboolean Sys_LoadLibrary (const char* dllname, dllhandle_t* handle, const dllfunction_t *fcts) +{ + const dllfunction_t *func; + dllhandle_t dllhandle; + + if (handle == NULL) + return false; + + // Initializations + for (func = fcts; func && func->name != NULL; func++) + *func->funcvariable = NULL; + + // Load the DLL #ifdef WIN32 - if (cls.state == ca_dedicated) - WriteFile(houtput, final, strlen (final), &dummy, NULL); + dllhandle = LoadLibrary (dllname); #else - printf("%s", final); + dllhandle = dlopen (dllname, RTLD_LAZY); #endif -// for (p = (unsigned char *) final; *p; p++) -// putc (qfont_table[*p], stdout); -//#ifndef WIN32 -// fflush (stdout); -//#endif -} + if (! dllhandle) + { + Con_Printf ("Can't load \"%s\".\n", dllname); + return false; + } -char engineversion[40]; + // Get the function adresses + for (func = fcts; func && func->name != NULL; func++) + if (!(*func->funcvariable = (void *) Sys_GetProcAddress (dllhandle, func->name))) + { + Con_Printf ("Missing function \"%s\" - broken library!\n", func->name); + Sys_UnloadLibrary (&dllhandle); + return false; + } + + *handle = dllhandle; + Con_Printf("\"%s\" loaded.\n", dllname); + return true; +} -void Sys_Shared_EarlyInit(void) +void Sys_UnloadLibrary (dllhandle_t* handle) { -#if defined(__linux__) - sprintf (engineversion, "%s Linux GL build %3i", gamename, buildnumber); -#elif defined(WIN32) - sprintf (engineversion, "%s Windows GL build %3i", gamename, buildnumber); + if (handle == NULL || *handle == NULL) + return; + +#ifdef WIN32 + FreeLibrary (*handle); #else - sprintf (engineversion, "%s Unknown GL build %3i", gamename, buildnumber); + dlclose (*handle); #endif - if (COM_CheckParm("-nostdout")) - sys_nostdout = 1; - else - printf("%s\n", engineversion); + *handle = NULL; } -void Sys_Shared_LateInit(void) +void* Sys_GetProcAddress (dllhandle_t handle, const char* name) { +#ifdef WIN32 + return (void *)GetProcAddress (handle, name); +#else + return (void *)dlsym (handle, name); +#endif } +