annotate src/main.in.cc @ 19895:19755f4fc851

maint: Cleanup C++ code to follow Octave coding conventions. Try to wrap long lines to < 80 characters. Use GNU style and don't indent first brace of function definition. "case" statement is aligned flush left with brace of switch stmt. Remove trailing '\' line continuation from the end of #define macros. Use 2 spaces for indent. * files-dock-widget.cc, history-dock-widget.cc, main-window.cc, octave-cmd.cc, octave-dock-widget.cc, octave-gui.cc, resource-manager.cc, settings-dialog.cc, shortcut-manager.cc, welcome-wizard.cc, workspace-view.cc, cellfun.cc, data.cc, debug.cc, debug.h, dirfns.cc, error.h, file-io.cc, gl-render.cc, gl-render.h, gl2ps-renderer.h, graphics.cc, graphics.in.h, help.cc, input.cc, load-path.cc, load-path.h, lookup.cc, lu.cc, oct-stream.cc, octave-default-image.h, ordschur.cc, pr-output.cc, qz.cc, strfns.cc, symtab.cc, symtab.h, sysdep.cc, variables.cc, zfstream.h, __fltk_uigetfile__.cc, __init_fltk__.cc, __magick_read__.cc, __osmesa_print__.cc, audiodevinfo.cc, ov-classdef.cc, ov-classdef.h, ov-fcn.h, ov-float.cc, ov-flt-complex.cc, ov-java.cc, ov-range.cc, ov-re-mat.cc, ov-usr-fcn.h, ov.cc, op-int.h, options-usage.h, pt-eval.cc, Array-C.cc, Array-fC.cc, Array.cc, Array.h, PermMatrix.cc, Sparse.cc, chMatrix.h, dSparse.cc, dim-vector.h, bsxfun-decl.h, bsxfun-defs.cc, oct-norm.cc, Sparse-op-defs.h, oct-inttypes.cc, oct-inttypes.h, main.in.cc, mkoctfile.in.cc: Cleanup C++ code to follow Octave coding conventions.
author Rik <rik@octave.org>
date Wed, 25 Feb 2015 11:55:49 -0800
parents 299fe39163a2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 // %NO_EDIT_WARNING%
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2 /*
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3
19731
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 18756
diff changeset
4 Copyright (C) 2012-2015 John W. Eaton
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6 This file is part of Octave.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11 option) any later version.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16 for more details.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, see
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20 <http://www.gnu.org/licenses/>.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22 */
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 // NOTE: This program is supposed to be a small wrapper that exists
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25 // primarily to give up the controlling TTY and then exec Octave with
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 // its GUI. It may also execute Octave without the GUI or the command
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 // line version of Octave that is not linked with GUI libraries. So
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 // that it remains small, it should NOT depend on or be linked with
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29 // liboctave or libinterp.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31 #ifdef HAVE_CONFIG_H
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include <config.h>
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include <cstdlib>
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include <cstring>
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include <algorithm>
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 #include <iostream>
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 #include <string>
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41
17805
2a15970da7f0 allow main.cc to build again with --disable-gui
John W. Eaton <jwe@octave.org>
parents: 17803
diff changeset
42 #include <sys/types.h>
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 #include <unistd.h>
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44
18151
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
45 #ifndef OCTAVE_VERSION
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
46 #define OCTAVE_VERSION %OCTAVE_VERSION%
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
47 #endif
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
48
18162
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
49 #ifndef OCTAVE_ARCHLIBDIR
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
50 #define OCTAVE_ARCHLIBDIR %OCTAVE_ARCHLIBDIR%
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
51 #endif
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
52
18151
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
53 #ifndef OCTAVE_BINDIR
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
54 #define OCTAVE_BINDIR %OCTAVE_BINDIR%
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
55 #endif
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
56
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
57 #ifndef OCTAVE_PREFIX
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
58 #define OCTAVE_PREFIX %OCTAVE_PREFIX%
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
59 #endif
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
60
19819
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
61 #include "display-available.h"
18360
f1ee47866e6b use common code to get OCTAVE_HOME in main, octave-config and mkoctfile
John W. Eaton <jwe@octave.org>
parents: 18162
diff changeset
62 #include "shared-fcns.h"
17782
136a9e27256e automatically locate wrapper binary on Windows systems (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17780
diff changeset
63
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
64 #include <cstdlib>
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
65
17814
e50a3664bd45 make compilation of main.cc work again when not building GUI
John W. Eaton <jwe@octave.org>
parents: 17813
diff changeset
66 #if (defined (HAVE_OCTAVE_GUI) \
e50a3664bd45 make compilation of main.cc work again when not building GUI
John W. Eaton <jwe@octave.org>
parents: 17813
diff changeset
67 && ! defined (__WIN32__) || defined (__CYGWIN__))
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
68
17780
8b353af4a1ca allow octave main program to work on Windows systems
John W. Eaton <jwe@octave.org>
parents: 17778
diff changeset
69 #include <signal.h>
17813
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
70 #include <fcntl.h>
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
71
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
72 // This is a liboctave header, but it doesn't include any other Octave
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
73 // headers or declare any functions that are defined in liboctave.
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
74 #include "syswait.h"
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
75
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76 typedef void sig_handler (int);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
77
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
78 // Forward signals to the GUI process.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
79
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
80 static pid_t gui_pid = 0;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
81
17865
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
82 static int caught_signal = -1;
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
83
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
84 static void
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
85 gui_driver_sig_handler (int sig)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
86 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87 if (gui_pid > 0)
17865
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
88 caught_signal = sig;
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
89 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
90
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
91 static sig_handler *
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92 octave_set_signal_handler (int sig, sig_handler *handler)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
93 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
94 struct sigaction act, oact;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
95
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
96 act.sa_handler = handler;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
97 act.sa_flags = 0;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
98
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
99 gnulib::sigemptyset (&act.sa_mask);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
100 gnulib::sigemptyset (&oact.sa_mask);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
101
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
102 gnulib::sigaction (sig, &act, &oact);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
103
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
104 return oact.sa_handler;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
105 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
106
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
107 static void
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
108 install_signal_handlers (void)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
109 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
110
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
111 #ifdef SIGINT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
112 octave_set_signal_handler (SIGINT, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115 #ifdef SIGBREAK
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 octave_set_signal_handler (SIGBREAK, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 #ifdef SIGABRT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 octave_set_signal_handler (SIGABRT, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
121 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123 #ifdef SIGALRM
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 octave_set_signal_handler (SIGALRM, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
127 #ifdef SIGBUS
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128 octave_set_signal_handler (SIGBUS, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131 // SIGCHLD
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
132 // SIGCLD
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
133 // SIGCONT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
135 #ifdef SIGEMT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
136 octave_set_signal_handler (SIGEMT, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
138
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
139 #ifdef SIGFPE
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140 octave_set_signal_handler (SIGFPE, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
141 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
142
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143 #ifdef SIGHUP
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
144 octave_set_signal_handler (SIGHUP, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
145 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
147 #ifdef SIGILL
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
148 octave_set_signal_handler (SIGILL, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
150
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
151 // SIGINFO
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
152 // SIGINT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
153
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
154 #ifdef SIGIOT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155 octave_set_signal_handler (SIGIOT, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
156 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
157
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158 #ifdef SIGLOST
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
159 octave_set_signal_handler (SIGLOST, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
160 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
161
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
162 #ifdef SIGPIPE
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
163 octave_set_signal_handler (SIGPIPE, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
164 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
165
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
166 #ifdef SIGPOLL
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
167 octave_set_signal_handler (SIGPOLL, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170 // SIGPROF
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
171 // SIGPWR
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173 #ifdef SIGQUIT
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
174 octave_set_signal_handler (SIGQUIT, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
175 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 #ifdef SIGSEGV
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
178 octave_set_signal_handler (SIGSEGV, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
179 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
180
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
181 // SIGSTOP
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
182
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
183 #ifdef SIGSYS
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184 octave_set_signal_handler (SIGSYS, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
185 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 #ifdef SIGTERM
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
188 octave_set_signal_handler (SIGTERM, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
190
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191 #ifdef SIGTRAP
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192 octave_set_signal_handler (SIGTRAP, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
193 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
194
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195 // SIGTSTP
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
196 // SIGTTIN
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
197 // SIGTTOU
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
198 // SIGURG
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
199
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200 #ifdef SIGUSR1
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
201 octave_set_signal_handler (SIGUSR1, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
202 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
203
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
204 #ifdef SIGUSR2
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
205 octave_set_signal_handler (SIGUSR2, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
206 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
207
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
208 #ifdef SIGVTALRM
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
209 octave_set_signal_handler (SIGVTALRM, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
210 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
211
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
212 #ifdef SIGIO
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 octave_set_signal_handler (SIGIO, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
215
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
216 // SIGWINCH
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
217
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
218 #ifdef SIGXCPU
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
219 octave_set_signal_handler (SIGXCPU, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
220 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
221
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
222 #ifdef SIGXFSZ
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
223 octave_set_signal_handler (SIGXFSZ, gui_driver_sig_handler);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
224 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
225
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
226 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
227
17803
f5ada8597078 * main.in.cc (have_controlling_terminal): Return bool, not int.
John W. Eaton <jwe@octave.org>
parents: 17802
diff changeset
228 static bool
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
229 have_controlling_terminal (void)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
230 {
17803
f5ada8597078 * main.in.cc (have_controlling_terminal): Return bool, not int.
John W. Eaton <jwe@octave.org>
parents: 17802
diff changeset
231 int retval = false;
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
232
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
233 #if defined (HAVE_CTERMID)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
234 const char *ctty = ctermid (0);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
235 #else
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
236 const char *ctty = "/dev/tty";
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
237 #endif
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
238
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
239 int fd = gnulib::open (ctty, O_RDWR, 0);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
240
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
241 if (fd >= 0)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
242 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
243 gnulib::close (fd);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244
17803
f5ada8597078 * main.in.cc (have_controlling_terminal): Return bool, not int.
John W. Eaton <jwe@octave.org>
parents: 17802
diff changeset
245 retval = true;
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
246 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
247
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
248 return retval;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
249 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
250
17813
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
251 #endif
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
252
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
253 static std::string
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
254 get_octave_bindir (void)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
255 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
256 // Accept value from the environment literally, but substitute
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
257 // OCTAVE_HOME in the configuration value OCTAVE_BINDIR in case Octave
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258 // has been relocated to some installation directory other than the
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259 // one originally configured.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
260
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
261 std::string obd = octave_getenv ("OCTAVE_BINDIR");
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
262
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
263 return obd.empty () ? subst_octave_home (std::string (OCTAVE_BINDIR)) : obd;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
264 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
265
18162
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
266 static std::string
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
267 get_octave_archlibdir (void)
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
268 {
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
269 // Accept value from the environment literally, but substitute
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
270 // OCTAVE_HOME in the configuration value OCTAVE_ARCHLIBDIR in case
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
271 // Octave has been relocated to some installation directory other than
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
272 // the one originally configured.
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
273
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
274 std::string dir = octave_getenv ("OCTAVE_ARCHLIBDIR");
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
275
19895
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19819
diff changeset
276 return dir.empty () ? subst_octave_home (std::string (OCTAVE_ARCHLIBDIR))
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19819
diff changeset
277 : dir;
18162
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
278 }
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
279
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
280 // Adapted from libtool wrapper.
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
281 #if defined (__WIN32__) && ! defined (__CYGWIN__)
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
282
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
283 /* Prepares an argument vector before calling spawn().
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
284 Note that spawn() does not by itself call the command interpreter
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
285 (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
286 ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
287 GetVersionEx(&v);
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
288 v.dwPlatformId == VER_PLATFORM_WIN32_NT;
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
289 }) ? "cmd.exe" : "command.com").
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
290 Instead it simply concatenates the arguments, separated by ' ', and calls
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
291 CreateProcess(). We must quote the arguments since Win32 CreateProcess()
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
292 interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
293 special way:
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
294 - Space and tab are interpreted as delimiters. They are not treated as
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
295 delimiters if they are surrounded by double quotes: "...".
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
296 - Unescaped double quotes are removed from the input. Their only effect is
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
297 that within double quotes, space and tab are treated like normal
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
298 characters.
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
299 - Backslashes not followed by double quotes are not special.
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
300 - But 2*n+1 backslashes followed by a double quote become
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
301 n backslashes followed by a double quote (n >= 0):
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
302 \" -> "
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
303 \\\" -> \"
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
304 \\\\\" -> \\"
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
305 */
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
306 #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
307 #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
308 char **
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
309 prepare_spawn (char **argv)
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
310 {
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
311 size_t argc;
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
312 char **new_argv;
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
313 size_t i;
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
314
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
315 /* Count number of arguments. */
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
316 for (argc = 0; argv[argc] != NULL; argc++)
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
317 ;
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
318
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
319 /* Allocate new argument vector. */
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
320 new_argv = new char* [argc + 1];
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
321
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
322 /* Put quoted arguments into the new argument vector. */
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
323 for (i = 0; i < argc; i++)
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
324 {
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
325 const char *string = argv[i];
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
326
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
327 if (string[0] == '\0')
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
328 new_argv[i] = strdup ("\"\"");
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
329 else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
330 {
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
331 int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
332 size_t length;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
333 unsigned int backslashes;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
334 const char *s;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
335 char *quoted_string;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
336 char *p;
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
337
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
338 length = 0;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
339 backslashes = 0;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
340 if (quote_around)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
341 length++;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
342 for (s = string; *s != '\0'; s++)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
343 {
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
344 char c = *s;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
345 if (c == '"')
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
346 length += backslashes + 1;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
347 length++;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
348 if (c == '\\')
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
349 backslashes++;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
350 else
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
351 backslashes = 0;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
352 }
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
353 if (quote_around)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
354 length += backslashes + 1;
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
355
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
356 quoted_string = new char [length + 1];
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
357
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
358 p = quoted_string;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
359 backslashes = 0;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
360 if (quote_around)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
361 *p++ = '"';
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
362 for (s = string; *s != '\0'; s++)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
363 {
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
364 char c = *s;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
365 if (c == '"')
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
366 {
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
367 unsigned int j;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
368 for (j = backslashes + 1; j > 0; j--)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
369 *p++ = '\\';
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
370 }
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
371 *p++ = c;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
372 if (c == '\\')
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
373 backslashes++;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
374 else
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
375 backslashes = 0;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
376 }
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
377 if (quote_around)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
378 {
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
379 unsigned int j;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
380 for (j = backslashes; j > 0; j--)
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
381 *p++ = '\\';
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
382 *p++ = '"';
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
383 }
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
384 *p = '\0';
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
385
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
386 new_argv[i] = quoted_string;
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
387 }
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
388 else
18006
b992a17767fe main.in.cc: Replace tabs with spaces. Shorten lines > 80 chars.
Rik <rik@octave.org>
parents: 17994
diff changeset
389 new_argv[i] = (char *) string;
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
390 }
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
391 new_argv[argc] = NULL;
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
392
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
393 return new_argv;
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
394 }
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
395
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
396 #endif // __WIN32__ && ! __CYGWIN__
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
397
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
398 static int
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
399 octave_exec (const std::string& file, char **argv)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
400 {
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
401 #if defined (__WIN32__) && ! defined (__CYGWIN__)
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
402 argv = prepare_spawn (argv);
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
403 return _spawnv (_P_WAIT, file.c_str (), argv);
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
404 #else
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
405 execv (file.c_str (), argv);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
406
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
407 std::cerr << "octave: failed to exec '" << file << "'" << std::endl;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
408
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
409 return 1;
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
410 #endif
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
411 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
412
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
413 static char *
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
414 strsave (const char *s)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
415 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
416 if (! s)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
417 return 0;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
418
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
419 int len = strlen (s);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
420 char *tmp = new char [len+1];
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
421 tmp = strcpy (tmp, s);
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
422 return tmp;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
423 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
424
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
425 int
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
426 main (int argc, char **argv)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
427 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
428 int retval = 0;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
429
18014
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
430 bool start_gui = true;
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
431 bool gui_libs = true;
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
432
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
433 std::string octave_bindir = get_octave_bindir ();
18162
65e4e0569ed4 install octave-gui binary in libexec directory
John W. Eaton <jwe@octave.org>
parents: 18151
diff changeset
434 std::string octave_archlibdir = get_octave_archlibdir ();
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
435
18014
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
436 #if defined (HAVE_OCTAVE_GUI)
18163
eb51f47d9dee maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
parents: 18156 18162
diff changeset
437 // The Octave version number is already embedded in the
eb51f47d9dee maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
parents: 18156 18162
diff changeset
438 // octave_archlibdir directory name so we don't need to append it to
eb51f47d9dee maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
parents: 18156 18162
diff changeset
439 // the octave-gui file name.
eb51f47d9dee maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
parents: 18156 18162
diff changeset
440
eb51f47d9dee maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
parents: 18156 18162
diff changeset
441 std::string file = octave_archlibdir + dir_sep_char + "octave-gui";
18014
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
442 #else
18151
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
443 std::string file
18163
eb51f47d9dee maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
parents: 18156 18162
diff changeset
444 = octave_bindir + dir_sep_char + "octave-cli-" OCTAVE_VERSION;
18014
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
445 #endif
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
446
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
447 char **new_argv = new char * [argc + 1];
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
448
17959
1329866151be [Win32] Use spawn instead of exec for main octave wrapper executable.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17865
diff changeset
449 int k = 1;
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
450
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
451 bool warn_display = true;
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
452
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
453 for (int i = 1; i < argc; i++)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
454 {
18014
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
455 if (! strcmp (argv[i], "--no-gui-libs"))
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
456 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
457 // Run the version of Octave that is not linked with any GUI
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
458 // libraries. It may not be possible to do plotting or any
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
459 // ui* calls, but it will be a little faster to start and
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
460 // require less memory. Don't pass the --no-gui-libs option
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
461 // on as that option is not recognized by Octave.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
462
18014
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
463 start_gui = false;
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
464 gui_libs = false;
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
465 file = octave_bindir + dir_sep_char + "octave-cli";
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
466 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
467 else if (! strcmp (argv[i], "--no-gui"))
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
468 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
469 // If we see this option, then we can just exec octave; we
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
470 // don't have to create a child process and wait for it to
18151
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
471 // exit. But do exec "octave-gui", not "octave-cli", because
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
472 // even if the --no-gui option is given, we may be asked to do
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
473 // some plotting or ui* calls.
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
474
18014
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
475 start_gui = false;
6df05f2fd354 maint: Back out changeset 25b6fbe82827 and set default to GUI for 4.0 release.
Rik <rik@octave.org>
parents: 18008
diff changeset
476 new_argv[k++] = argv[i];
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
477 }
18008
2831a949a219 Restore passing '--silent' option from octave wrapper executable
Mike Miller <mtmiller@ieee.org>
parents: 18007
diff changeset
478 else if (! strcmp (argv[i], "--silent") || ! strcmp (argv[i], "--quiet")
2831a949a219 Restore passing '--silent' option from octave wrapper executable
Mike Miller <mtmiller@ieee.org>
parents: 18007
diff changeset
479 || ! strcmp (argv[i], "-q"))
18010
dc58d4810de6 main.in.cc: Respect --silent option and don't print startup message.
Rik <rik@octave.org>
parents: 18007
diff changeset
480 {
dc58d4810de6 main.in.cc: Respect --silent option and don't print startup message.
Rik <rik@octave.org>
parents: 18007
diff changeset
481 warn_display = false;
dc58d4810de6 main.in.cc: Respect --silent option and don't print startup message.
Rik <rik@octave.org>
parents: 18007
diff changeset
482 new_argv[k++] = argv[i];
dc58d4810de6 main.in.cc: Respect --silent option and don't print startup message.
Rik <rik@octave.org>
parents: 18007
diff changeset
483 }
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
484 else
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
485 new_argv[k++] = argv[i];
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
486 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
487
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
488 new_argv[k] = 0;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
489
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
490 if (gui_libs || start_gui)
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
491 {
19819
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
492 int dpy_avail;
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
493
19819
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
494 const char *display_check_err_msg = display_available (&dpy_avail);
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
495
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
496 if (! dpy_avail)
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
497 {
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
498 start_gui = false;
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
499 gui_libs = false;
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
500
18151
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
501 file = octave_bindir + dir_sep_char + "octave-cli-" OCTAVE_VERSION;
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
502
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
503 if (warn_display)
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
504 {
19819
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
505 if (! display_check_err_msg)
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
506 display_check_err_msg = "graphical display unavailable";
299fe39163a2 avoid C-style cast warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 19731
diff changeset
507
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
508 std::cerr << "octave: " << display_check_err_msg << std::endl;
18052
0c4a2e95c768 Correct typo in error message when no DISPLAY var set.
Rik <rik@octave.org>
parents: 18012
diff changeset
509 std::cerr << "octave: disabling GUI features" << std::endl;
17994
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
510 }
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
511 }
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
512 }
a99b7d656a6c start in CLI mode if display is not available (bug #40685)
John W. Eaton <jwe@octave.org>
parents: 17959
diff changeset
513
18151
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
514 #if defined (__WIN32__) && ! defined (__CYGWIN__)
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
515 file += ".exe";
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
516 #endif
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
517
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
518 new_argv[0] = strsave (file.c_str ());
91a3858ef8cf invoke versioned binaries from octave driver program (bug #40957)
John W. Eaton <jwe@octave.org>
parents: 18052
diff changeset
519
17814
e50a3664bd45 make compilation of main.cc work again when not building GUI
John W. Eaton <jwe@octave.org>
parents: 17813
diff changeset
520 #if (defined (HAVE_OCTAVE_GUI) \
e50a3664bd45 make compilation of main.cc work again when not building GUI
John W. Eaton <jwe@octave.org>
parents: 17813
diff changeset
521 && ! defined (__WIN32__) || defined (__CYGWIN__))
17813
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
522
17801
0b81d65d3c49 only fork and exec when starting gui
John W. Eaton <jwe@octave.org>
parents: 17789
diff changeset
523 if (gui_libs && start_gui && have_controlling_terminal ())
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
524 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
525 install_signal_handlers ();
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
526
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
527 gui_pid = fork ();
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
528
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
529 if (gui_pid < 0)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
530 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
531 std::cerr << "octave: fork failed!" << std::endl;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
532
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
533 retval = 1;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
534 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
535 else if (gui_pid == 0)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
536 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
537 // Child.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
538
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
539 if (setsid () < 0)
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
540 {
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
541 std::cerr << "octave: error calling setsid!" << std::endl;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
542
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
543 retval = 1;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
544 }
18756
f8203daed9d4 Abort Octave GUI if setsid() fails after fork().
Rik <rik@octave.org>
parents: 18361
diff changeset
545 else
f8203daed9d4 Abort Octave GUI if setsid() fails after fork().
Rik <rik@octave.org>
parents: 18361
diff changeset
546 retval = octave_exec (file, new_argv);
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
547 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
548 else
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
549 {
18007
25b6fbe82827 Make the CLI the default for the 3.8 release.
Rik <rik@octave.org>
parents: 18006
diff changeset
550 // Parent. Forward signals to child while waiting for it to exit.
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
551
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
552 int status;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
553
17865
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
554 while (true)
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
555 {
17780
8b353af4a1ca allow octave main program to work on Windows systems
John W. Eaton <jwe@octave.org>
parents: 17778
diff changeset
556 WAITPID (gui_pid, &status, 0);
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
557
17865
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
558 if (caught_signal > 0)
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
559 {
17865
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
560 int sig = caught_signal;
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
561
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
562 caught_signal = -1;
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
563
17865
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
564 kill (gui_pid, sig);
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
565 }
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
566 else if (WIFEXITED (status))
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
567 {
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
568 retval = WEXITSTATUS (status);
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
569 break;
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
570 }
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
571 else if (WIFSIGNALLED (status))
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
572 {
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
573 std::cerr << "octave exited with signal "
dde06c2ac6c6 improve signal handling in driver program
John W. Eaton <jwe@octave.org>
parents: 17814
diff changeset
574 << WTERMSIG (status) << std::endl;
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
575 break;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
576 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
577 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
578 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
579 }
17801
0b81d65d3c49 only fork and exec when starting gui
John W. Eaton <jwe@octave.org>
parents: 17789
diff changeset
580 else
0b81d65d3c49 only fork and exec when starting gui
John W. Eaton <jwe@octave.org>
parents: 17789
diff changeset
581 retval = octave_exec (file, new_argv);
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
582
17813
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
583 #else
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
584
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
585 retval = octave_exec (file, new_argv);
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
586
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
587 #endif
0a887758d1cc fix compilation of main.cc on Windows
John W. Eaton <jwe@octave.org>
parents: 17805
diff changeset
588
17778
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
589 return retval;
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
590 }
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
591
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
592 /*!
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
593 @mainpage Source code documentation for GNU Octave
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
594
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
595 GNU Octave is a high-level language, primarily intended for numerical
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
596 computations. It provides a convenient interactive command line
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
597 interface for solving linear and nonlinear problems numerically, and
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
598 for performing other numerical experiments. It may also be used as a
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
599 batch-oriented language for data processing.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
600
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
601 GNU Octave is free software. You may redistribute it and/or modify it
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
602 under the terms of the <a href="http://www.gnu.org/licenses/">GNU
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
603 General Public License</a> as published by the Free Software Foundation.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
604
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
605 This is the developer documentation for Octave's own source code. It is
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
606 intended to help for hacking Octave. It may also be useful for
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
607 understanding the Octave API when writing your own .oct files.
b5d58667d32d new main program wrapper to handle giving up controlling tty
John W. Eaton <jwe@octave.org>
parents:
diff changeset
608 */