changeset 19819:299fe39163a2

avoid C-style cast warnings from GCC * src/display-available.h, src/display-available.c: New files. Move display detection here from main.in.cc. * src/main.in.cc (main): Adapt to new C definition of display_available. * Makefile.am (octave_SOURCES): New variable.
author John W. Eaton <jwe@octave.org>
date Fri, 20 Feb 2015 03:55:59 -0500
parents a3577622952c
children d6652461dfbc
files src/Makefile.am src/display-available.c src/display-available.h src/main.in.cc
diffstat 4 files changed, 137 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile.am	Fri Feb 20 03:53:38 2015 -0500
+++ b/src/Makefile.am	Fri Feb 20 03:55:59 2015 -0500
@@ -68,6 +68,7 @@
 include ../libgui/link-deps.mk
 
 nodist_octave_SOURCES = main.cc
+octave_SOURCES = display-available.c
 
 octave_LDADD = \
   $(top_builddir)/libgnu/libgnu.la \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/display-available.c	Fri Feb 20 03:55:59 2015 -0500
@@ -0,0 +1,96 @@
+/*
+
+Copyright (C) 2012-2015 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#if defined (OCTAVE_USE_WINDOWS_API)
+#include <windows.h>
+#elif defined (HAVE_FRAMEWORK_CARBON)
+#include <Carbon/Carbon.h>
+#elif defined (HAVE_X_WINDOWS)
+#include <X11/Xlib.h>
+#endif
+
+#include "display-available.h"
+
+const char *
+display_available (int *dpy_avail)
+{
+  *dpy_avail = 0;
+
+  const char *err_msg = "";
+
+#if defined (OCTAVE_USE_WINDOWS_API)
+
+  HDC hdc = GetDC (0);
+
+  if (hdc)
+    *dpy_avail = 1;
+  else
+    err_msg = "no graphical display found";
+
+#elif defined (HAVE_FRAMEWORK_CARBON)
+
+  CGDirectDisplayID display = CGMainDisplayID ();
+
+  if (display)
+    *dpy_avail = 1;
+  else
+    err_msg = "no graphical display found";
+
+#elif defined (HAVE_X_WINDOWS)
+
+  const char *display_name = getenv ("DISPLAY");
+
+  if (display_name && *display_name)
+    {
+      Display *display = XOpenDisplay (display_name);
+
+      if (display)
+        {
+          Screen *screen = DefaultScreenOfDisplay (display);
+
+          if (! screen)
+            err_msg = "X11 display has no default screen";
+
+          XCloseDisplay (display);
+
+          *dpy_avail = 1;
+        }
+      else
+        err_msg = "unable to open X11 DISPLAY";
+    }
+  else
+    err_msg = "X11 DISPLAY environment variable not set";
+
+#else
+
+  err_msg = "no graphical display found";
+
+#endif
+
+  return err_msg;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/display-available.h	Fri Feb 20 03:55:59 2015 -0500
@@ -0,0 +1,32 @@
+/*
+
+Copyright (C) 2012-2015 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef __cplusplus
+#include <new>
+extern "C" {
+#endif
+
+extern const char *display_available (int *dpy_avail);
+
+#ifdef __cplusplus
+}
+#endif
--- a/src/main.in.cc	Fri Feb 20 03:53:38 2015 -0500
+++ b/src/main.in.cc	Fri Feb 20 03:55:59 2015 -0500
@@ -58,77 +58,11 @@
 #define OCTAVE_PREFIX %OCTAVE_PREFIX%
 #endif
 
+#include "display-available.h"
 #include "shared-fcns.h"
 
 #include <cstdlib>
 
-#if defined (OCTAVE_USE_WINDOWS_API)
-#include <windows.h>
-#elif defined (HAVE_FRAMEWORK_CARBON)
-#include <Carbon/Carbon.h>
-#elif defined (HAVE_X_WINDOWS)
-#include <X11/Xlib.h>
-#endif
-
-bool
-display_available (std::string& err_msg)
-{
-  bool dpy_avail = false;
-
-  err_msg = "";
-
-#if defined (OCTAVE_USE_WINDOWS_API)
-
-  HDC hdc = GetDC (0);
-
-  if (hdc)
-    dpy_avail = true;
-  else
-    err_msg = "no graphical display found";
-
-#elif defined (HAVE_FRAMEWORK_CARBON)
-
-  CGDirectDisplayID display = CGMainDisplayID ();
-
-  if (display)
-    dpy_avail = true;
-  else
-    err_msg = "no graphical display found";
-
-#elif defined (HAVE_X_WINDOWS)
-
-  const char *display_name = getenv ("DISPLAY");
-
-  if (display_name && *display_name)
-    {
-      Display *display = XOpenDisplay (display_name);
-
-      if (display)
-        {
-          Screen *screen = DefaultScreenOfDisplay (display);
-
-          if (! screen)
-            err_msg = "X11 display has no default screen";
-
-          XCloseDisplay (display);
-
-          dpy_avail = true;
-        }
-      else
-        err_msg = "unable to open X11 DISPLAY";
-    }
-  else
-    err_msg = "X11 DISPLAY environment variable not set";
-
-#else
-
-  err_msg = "no graphical display found";
-
-#endif
-
-  return dpy_avail;
-}
-
 #if (defined (HAVE_OCTAVE_GUI) \
      && ! defined (__WIN32__) || defined (__CYGWIN__))
 
@@ -555,9 +489,11 @@
 
   if (gui_libs || start_gui)
     {
-      std::string display_check_err_msg;
+      int dpy_avail;
 
-      if (! display_available (display_check_err_msg))
+      const char *display_check_err_msg = display_available (&dpy_avail);
+
+      if (! dpy_avail)
         {
           start_gui = false;
           gui_libs = false;
@@ -566,6 +502,9 @@
 
           if (warn_display)
             {
+              if (! display_check_err_msg)
+                display_check_err_msg = "graphical display unavailable";
+
               std::cerr << "octave: " << display_check_err_msg << std::endl;
               std::cerr << "octave: disabling GUI features" << std::endl;
             }