]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sys_sdl.c
deduplicate Sys_ConsoleInput()
[xonotic/darkplaces.git] / sys_sdl.c
index 982956b1bd942a22ef1016f61fe845390b57ccf6..4ce2d75e0d3d2734ce2ffa5308eac483f1447b13 100644 (file)
--- a/sys_sdl.c
+++ b/sys_sdl.c
@@ -1,8 +1,5 @@
-#include "darkplaces.h"
-
 #ifdef WIN32
-#include <io.h>
-#include "conio.h"
+#include <io.h> // Include this BEFORE darkplaces.h because it uses strncpy which trips DP_STATIC_ASSERT
 #else
 #include <unistd.h>
 #include <fcntl.h>
 #include <android/log.h>
 #endif
 
-#include <signal.h>
-
+/*
+ * Include this BEFORE darkplaces.h because it breaks wrapping
+ * _Static_assert. Cloudwalk has no idea how or why so don't ask.
+ */
 #include <SDL.h>
 
+#include "darkplaces.h"
+
 #ifdef WIN32
 #ifdef _MSC_VER
 #pragma comment(lib, "sdl2.lib")
@@ -42,7 +43,9 @@ void Sys_Shutdown (void)
        SDL_Quit();
 }
 
-static qbool nocrashdialog;
+// Sys_Error early in startup might screw with automated
+// workflows or something if we show the dialog by default.
+static qbool nocrashdialog = true;
 void Sys_Error (const char *error, ...)
 {
        va_list argptr;
@@ -59,14 +62,16 @@ void Sys_Error (const char *error, ...)
 
        Con_Printf(CON_ERROR "Engine Error: %s\n", string);
        
+       // don't want a dead window left blocking the OS UI or the crash dialog
+       Host_Shutdown();
+
        if(!nocrashdialog)
                SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Engine Error", string, NULL);
 
-       Host_Shutdown ();
        exit (1);
 }
 
-void Sys_PrintToTerminal(const char *text)
+void Sys_Print(const char *text)
 {
 #ifdef __ANDROID__
        if (developer.integer > 0)
@@ -101,66 +106,6 @@ void Sys_PrintToTerminal(const char *text)
 #endif
 }
 
-char *Sys_ConsoleInput(void)
-{
-//     if (cls.state == ca_dedicated)
-       {
-               static char text[MAX_INPUTLINE];
-               int len = 0;
-#ifdef WIN32
-               int c;
-
-               // read a line out
-               while (_kbhit ())
-               {
-                       c = _getch ();
-                       _putch (c);
-                       if (c == '\r')
-                       {
-                               text[len] = 0;
-                               _putch ('\n');
-                               len = 0;
-                               return text;
-                       }
-                       if (c == 8)
-                       {
-                               if (len)
-                               {
-                                       _putch (' ');
-                                       _putch (c);
-                                       len--;
-                                       text[len] = 0;
-                               }
-                               continue;
-                       }
-                       text[len] = c;
-                       len++;
-                       text[len] = 0;
-                       if (len == sizeof (text))
-                               len = 0;
-               }
-#else
-               fd_set fdset;
-               struct timeval timeout;
-               FD_ZERO(&fdset);
-               FD_SET(0, &fdset); // stdin
-               timeout.tv_sec = 0;
-               timeout.tv_usec = 0;
-               if (select (1, &fdset, NULL, NULL, &timeout) != -1 && FD_ISSET(0, &fdset))
-               {
-                       len = read (0, text, sizeof(text));
-                       if (len >= 1)
-                       {
-                               // rip off the \n and terminate
-                               text[len-1] = 0;
-                               return text;
-                       }
-               }
-#endif
-       }
-       return NULL;
-}
-
 char *Sys_GetClipboardData (void)
 {
        char *data = NULL;
@@ -178,55 +123,15 @@ char *Sys_GetClipboardData (void)
        return data;
 }
 
-void Sys_InitConsole (void)
+void Sys_SDL_Init(void)
 {
-}
-
-int main (int argc, char *argv[])
-{
-       signal(SIGFPE, SIG_IGN);
-
-#ifdef __ANDROID__
-       Sys_AllowProfiling(true);
-#endif
-
-       sys.selffd = -1;
-       sys.argc = argc;
-       sys.argv = (const char **)argv;
-
-       // Sys_Error this early in startup might screw with automated
-       // workflows or something if we show the dialog by default.
-       nocrashdialog = true;
-
-       Sys_ProvideSelfFD();
+       // we don't know which systems we'll want to init, yet...
+       if (SDL_Init(0) < 0)
+               Sys_Error("SDL_Init failed: %s\n", SDL_GetError());
 
-       // COMMANDLINEOPTION: -nocrashdialog disables "Engine Error" crash dialog boxes
+       // COMMANDLINEOPTION: sdl: -nocrashdialog disables "Engine Error" crash dialog boxes
        if(!Sys_CheckParm("-nocrashdialog"))
                nocrashdialog = false;
-       // COMMANDLINEOPTION: sdl: -noterminal disables console output on stdout
-       if(Sys_CheckParm("-noterminal"))
-               sys.outfd = -1;
-       // COMMANDLINEOPTION: sdl: -stderr moves console output to stderr
-       else if(Sys_CheckParm("-stderr"))
-               sys.outfd = 2;
-       else
-               sys.outfd = 1;
-
-#ifndef WIN32
-       fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | O_NONBLOCK);
-#endif
-
-       // we don't know which systems we'll want to init, yet...
-       SDL_Init(0);
-
-       // used by everything
-       Memory_Init();
-
-       Host_Main();
-
-       Sys_Quit(0);
-       
-       return 0;
 }
 
 qbool sys_supportsdlgetticks = true;