]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/error.cpp
* fixed a lot of compiler warnings (mostly const char * stuff and use of uninitialize...
[xonotic/netradiant.git] / radiant / error.cpp
index 66794e7aa228b47708703ae0dd6cc306ed0f76d8..06d01f50905d03379ebe19125a3357c64b19ed99 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 1999-2006 Id Software, Inc. and contributors.
+Copyright (C) 1999-2007 id Software, Inc. and contributors.
 For a list of contributors, see the accompanying CONTRIBUTORS file.
 
 This file is part of GtkRadiant.
@@ -19,28 +19,13 @@ along with GtkRadiant; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-#include "error.h"
-
-#include "debugging/debugging.h"
-#include "igl.h"
-
-#include "gtkutil/messagebox.h"
-#include "console.h"
-#include "preferences.h"
-
-
-#ifdef WIN32
 #define UNICODE
-#include <windows.h>
-#endif
+#include "stdafx.h"
 
 #if defined (__linux__) || defined (__APPLE__)
-#include <errno.h>
 #include <unistd.h>
 #endif
 
-
-
 /*
 =================
 Error
@@ -50,8 +35,8 @@ For abnormal program terminations
 */
 
 /*!
-\todo 
-FIXME the prompt wether to do prefs dialog, may not even be possible 
+\todo
+FIXME the prompt wether to do prefs dialog, may not even be possible
 if the crash happens before the game is loaded
 */
 
@@ -75,20 +60,20 @@ void Error (const char *error, ...)
   }
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
   if (GetLastError() != 0)
   {
     LPVOID lpMsgBuf;
-    FormatMessage( 
-      FORMAT_MESSAGE_ALLOCATE_BUFFER | 
-      FORMAT_MESSAGE_FROM_SYSTEM | 
+    FormatMessage(
+      FORMAT_MESSAGE_ALLOCATE_BUFFER |
+      FORMAT_MESSAGE_FROM_SYSTEM |
       FORMAT_MESSAGE_IGNORE_INSERTS,
-      0,
+      NULL,
       GetLastError(),
       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
       (LPTSTR) &lpMsgBuf,
       0,
-      0 
+      NULL
       );
     strcat( text, "GetLastError: " );
     /*
@@ -102,7 +87,7 @@ void Error (const char *error, ...)
       scan = next;
       text[strlen(text)+1] = '\0';
       if ((scan[0] >= 0) && (scan[0] <= 127))
-        text[strlen(text)] = char(scan[0]);
+        text[strlen(text)] = scan[0];
       else
         text[strlen(text)] = '?';
       next = CharNext(scan);
@@ -112,30 +97,55 @@ void Error (const char *error, ...)
   }
 #endif
 
-#if 0
   // we need to have a current context to call glError()
-  if (g_glwindow_globals.d_glBase != 0)
+  if (g_qeglobals_gui.d_glBase != NULL)
   {
-    // glGetError .. can record several errors, clears after calling
+    // qglGetError .. can record several errors, clears after calling
     //++timo TODO: be able to deal with several errors if necessary, for now I'm just warning about pending error messages
     // NOTE: forget that, most boards don't seem to follow the OpenGL standard
-    GLenum iGLError = glGetError();
+    GLenum iGLError = qglGetError();
     if (iGLError != GL_NO_ERROR)
     {
       // use our own gluErrorString
-      strcat( text, "gluErrorString: " );
-      strcat( text, (char*)gluErrorString( iGLError ) );
+      strcat( text, "qgluErrorString: " );
+      strcat( text, (char*)qgluErrorString( iGLError ) );
       strcat( text, "\n" );
     }
   }
-#endif
 
-  strcat (text, "An unrecoverable error has occured.\n");
+  strcat (text, "An unrecoverable error has occured.\n"
+         "Would you like to edit Preferences before exiting Radiant?");
 
-  ERROR_MESSAGE(text);
+  Sys_Printf(text);
+
+  if (gtk_MessageBox(NULL, text, "Error", MB_YESNO) == IDYES)
+  {
+    Sys_Printf("Doing prefs..\n");
+    g_PrefsDlg.LoadPrefs ();
+    g_PrefsDlg.DoModal();
+  }
+
+  QGL_Shutdown();
+
+  g_PrefsDlg.Destroy ();
+  g_dlgSurface.Destroy ();
+  g_dlgFind.Destroy ();
 
   // force close logging if necessary
-       Sys_LogFile(false);
+  g_PrefsDlg.mGamesDialog.m_bLogConsole = false;
+       Sys_LogFile();
 
   _exit (1);
 }
+
+void WINAPI Error (char *error, ...)
+{
+  va_list argptr;
+  char text[1024];
+
+  va_start (argptr,error);
+  vsprintf (text, error,argptr);
+  va_end (argptr);
+
+       Error((const char *)text);
+}