31 #if defined (HAVE_CONFIG_H)
48 #if ! defined (OCTAVE_VERSION)
49 # define OCTAVE_VERSION %OCTAVE_VERSION%
52 #if ! defined (OCTAVE_ARCHLIBDIR)
53 # define OCTAVE_ARCHLIBDIR %OCTAVE_ARCHLIBDIR%
56 #if ! defined (OCTAVE_BINDIR)
57 # define OCTAVE_BINDIR %OCTAVE_BINDIR%
60 #if ! defined (OCTAVE_PREFIX)
61 # define OCTAVE_PREFIX %OCTAVE_PREFIX%
67 #if defined (HAVE_OCTAVE_QT_GUI) && ! defined (OCTAVE_USE_WINDOWS_API)
71 static pid_t gui_pid = 0;
73 static int caught_signal = -1;
76 gui_driver_sig_handler (
int sig)
83 gui_driver_set_signal_handler (
const char *signame,
92 gui_driver_set_signal_handler (
"SIGINT", gui_driver_sig_handler);
93 gui_driver_set_signal_handler (
"SIGBREAK", gui_driver_sig_handler);
94 gui_driver_set_signal_handler (
"SIGABRT", gui_driver_sig_handler);
95 gui_driver_set_signal_handler (
"SIGALRM", gui_driver_sig_handler);
96 gui_driver_set_signal_handler (
"SIGBUS", gui_driver_sig_handler);
102 gui_driver_set_signal_handler (
"SIGEMT", gui_driver_sig_handler);
103 gui_driver_set_signal_handler (
"SIGFPE", gui_driver_sig_handler);
104 gui_driver_set_signal_handler (
"SIGHUP", gui_driver_sig_handler);
105 gui_driver_set_signal_handler (
"SIGILL", gui_driver_sig_handler);
110 gui_driver_set_signal_handler (
"SIGIOT", gui_driver_sig_handler);
111 gui_driver_set_signal_handler (
"SIGLOST", gui_driver_sig_handler);
112 gui_driver_set_signal_handler (
"SIGPIPE", gui_driver_sig_handler);
113 gui_driver_set_signal_handler (
"SIGPOLL", gui_driver_sig_handler);
118 gui_driver_set_signal_handler (
"SIGQUIT", gui_driver_sig_handler);
119 gui_driver_set_signal_handler (
"SIGSEGV", gui_driver_sig_handler);
123 gui_driver_set_signal_handler (
"SIGSYS", gui_driver_sig_handler);
124 gui_driver_set_signal_handler (
"SIGTERM", gui_driver_sig_handler);
125 gui_driver_set_signal_handler (
"SIGTRAP", gui_driver_sig_handler);
132 gui_driver_set_signal_handler (
"SIGUSR1", gui_driver_sig_handler);
133 gui_driver_set_signal_handler (
"SIGUSR2", gui_driver_sig_handler);
134 gui_driver_set_signal_handler (
"SIGVTALRM", gui_driver_sig_handler);
135 gui_driver_set_signal_handler (
"SIGIO", gui_driver_sig_handler);
139 gui_driver_set_signal_handler (
"SIGXCPU", gui_driver_sig_handler);
140 gui_driver_set_signal_handler (
"SIGXFSZ", gui_driver_sig_handler);
177 std::cerr << argv[0] <<
": failed to exec '" << file <<
"'" << std::endl;
189 char *
tmp =
new char [len+1];
190 tmp = strcpy (tmp, s);
199 bool start_gui =
true;
200 bool gui_libs =
true;
208 #if defined (HAVE_OCTAVE_QT_GUI)
220 static char **new_argv =
new char * [argc + 1];
224 bool warn_display =
true;
225 bool no_display =
false;
229 if (!
strcmp (argv[
i],
"--no-gui-libs"))
241 else if (!
strcmp (argv[i],
"--no-gui"))
250 new_argv[k++] = argv[
i];
252 else if (!
strcmp (argv[i],
"--silent") || !
strcmp (argv[i],
"--quiet")
253 || !
strcmp (argv[i],
"-q"))
255 warn_display =
false;
256 new_argv[k++] = argv[
i];
258 else if (!
strcmp (argv[i],
"--no-window-system")
259 || !
strcmp (argv[i],
"-W"))
262 new_argv[k++] = argv[
i];
265 new_argv[k++] = argv[
i];
277 else if (gui_libs || start_gui)
292 if (! display_check_err_msg)
293 display_check_err_msg =
"graphical display unavailable";
295 std::cerr <<
"octave: " << display_check_err_msg << std::endl;
296 std::cerr <<
"octave: disabling GUI features" << std::endl;
301 #if defined (OCTAVE_USE_WINDOWS_API)
305 new_argv[0] =
strsave (file.c_str ());
307 #if defined (HAVE_OCTAVE_QT_GUI) && ! defined (OCTAVE_USE_WINDOWS_API)
309 if (gui_libs && start_gui)
327 std::cerr <<
"octave: fork failed!" << std::endl;
331 else if (gui_pid == 0)
337 std::cerr <<
"octave: error calling setsid!" << std::endl;
354 if (caught_signal > 0)
356 int sig = caught_signal;
369 std::cerr <<
"octave exited with signal "
381 std::cerr << argv[0] <<
": " << std::strerror (errno) << std::endl;
389 std::cerr << argv[0] <<
": " << std::strerror (errno) << std::endl;
bool octave_wifsignaled_wrapper(int status)
For example cd octave end example noindent changes the current working directory to file
#define OCTAVE_ARCHLIBDIR
bool octave_wifexited_wrapper(int status)
static std::string subst_octave_home(const std::string &s)
int octave_kill_wrapper(pid_t pid, int signum)
const char * display_available(int *dpy_avail)
void octave_sig_handler(int)
static int octave_exec(const std::string &file, char **argv)
int octave_wtermsig_wrapper(int status)
int main(int argc, char **argv)
bool strcmp(const T &str_a, const T &str_b)
True if strings are the same.
static const char dir_sep_char
pid_t octave_fork_wrapper(void)
pid_t octave_setsid_wrapper(void)
T::size_type strlen(const typename T::value_type *str)
int octave_wexitstatus_wrapper(int status)
static std::string get_octave_bindir(void)
static char * strsave(const char *s)
static std::string octave_getenv(const std::string &name)
=val(i)}if ode{val(i)}occurs in table i
int octave_execv_wrapper(const char *file, char *const *argv)
pid_t octave_waitpid_wrapper(pid_t pid, int *statusp, int options)
static std::string get_octave_archlibdir(void)
octave_sig_handler * octave_set_signal_handler_by_name(const char *signame, octave_sig_handler *handler, bool restart_syscalls)
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
void install_signal_handlers(void)