# HG changeset patch # User John W. Eaton # Date 1424422559 18000 # Node ID 299fe39163a23625a3631b8d1c1c4c7848a04ff8 # Parent a3577622952cc7e9aca2e49db0960c4687d36637 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. diff -r a3577622952c -r 299fe39163a2 src/Makefile.am --- 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 \ diff -r a3577622952c -r 299fe39163a2 src/display-available.c --- /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 +. + +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#if defined (OCTAVE_USE_WINDOWS_API) +#include +#elif defined (HAVE_FRAMEWORK_CARBON) +#include +#elif defined (HAVE_X_WINDOWS) +#include +#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; +} diff -r a3577622952c -r 299fe39163a2 src/display-available.h --- /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 +. + +*/ + +#ifdef __cplusplus +#include +extern "C" { +#endif + +extern const char *display_available (int *dpy_avail); + +#ifdef __cplusplus +} +#endif diff -r a3577622952c -r 299fe39163a2 src/main.in.cc --- 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 -#if defined (OCTAVE_USE_WINDOWS_API) -#include -#elif defined (HAVE_FRAMEWORK_CARBON) -#include -#elif defined (HAVE_X_WINDOWS) -#include -#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; }