]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sys_sdl.c
deduplicate Sys_ConsoleInput()
[xonotic/darkplaces.git] / sys_sdl.c
index 1bf22cd08463c11279ddb3a70c93252a38994e9e..4ce2d75e0d3d2734ce2ffa5308eac483f1447b13 100644 (file)
--- a/sys_sdl.c
+++ b/sys_sdl.c
@@ -1,6 +1,5 @@
 #ifdef WIN32
 #include <io.h> // Include this BEFORE darkplaces.h because it uses strncpy which trips DP_STATIC_ASSERT
-#include "conio.h"
 #else
 #include <unistd.h>
 #include <fcntl.h>
@@ -11,8 +10,6 @@
 #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.
@@ -46,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;
@@ -63,10 +62,12 @@ 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);
 }
 
@@ -105,63 +106,6 @@ void Sys_Print(const char *text)
 #endif
 }
 
-char *Sys_ConsoleInput(void)
-{
-       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;
@@ -179,51 +123,15 @@ char *Sys_GetClipboardData (void)
        return data;
 }
 
-int main (int argc, char *argv[])
+void Sys_SDL_Init(void)
 {
-       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;