annotate libinterp/interpfcn/toplev.cc @ 16149:49dfba4fd3c5

use pure parser and reentrant lexer interfaces Making the Octave parser and lexer properly reentrant (and perhaps eventually thread safe as well) is still a work in progress. With the current set of changes the parser and lexer still use many global variables, so these changes alone do NOT make the Octave parser reentrant unless you take care to properly save and restore (typically with an unwind_protect object) relevant global values before and after calling the parser. Even if global variables are properly saved and restored, the parser will NOT be thread safe. * lex.ll: Use %option reentrant an %option bison-bridge. (yylval): Delete macro. (YY_EXTRA_TYPE, curr_lexer): New macros. Undefine curr_lexer (YY_FATAL_ERROR): Update decl for reentrant scanner. (lexical_feedback::reset): Update call to yyrestart for reentrant scanner interface. (lexical_feedback::fatal_error): Update call to yy_fatal_error for reentrant scanner interface. (lexical_feedback::text_yyinput): Update calls to yyinput and yyunput for reentrant scanner interface. (lexical_feedback::flex_yyleng): Use function interface to access yyleng. (lexical_feedback::flex_yytext): Use function interface to access yytext. (lexical_feedback::push_token, lexical_feedback::current_token): Use function interface to access yylval. * oct-parse.yy: Use %define api.pure, %parse-param, and %lex-param options. (curr_lexer): Define for syntax rules section. (scanner): New macro. * oct-parse.yy: Include oct-parse.h. (octave_lex): Declare. (yyerror): Update declaration for pure parser. * parse.h (octave_lex): Delete decl. * oct-parse.yy (octave_parser::run): Pass pointer to octave_parser object to octave_parse. * lex.ll (lexical_feedback::octave_read): Call fatal_error directly instead of using YY_FATAL_ERROR. * oct-parse.yy (parse_fcn_file): Pass line and column info for lexter to gobble_leading_whitespace. Access prep_for_script_file, prep_for_function_file, parsing_class_method, input_line_number, and current_input_column through curr_parser. * parse.h, oct-parse.yy (YY_BUFFER_STATE, create_buffer, current_buffer, switch_to_buffer, delete_buffer, clear_all_buffers): Delete. * toplev.cc (main_loop): Don't create new buffer for lexer. * input.cc (get_debug_input): Likewise. * oct-parse.yy (eval_string, parse_fcn_file): Likewise. * octave.cc (octave_initialize_interpreter): Likewise. * input.cc (get_debug_input): Likewise. * oct-parse.yy (eval_string, parse_fcn_file): Create parser as needed. * octave.cc (octave_initialize_interpreter): Likewise. * input.cc (get_debug_input): Likewise. * input.cc (input_even_hook): Allow function to run even if currently defining a function. * lex.h, lex.ll (curr_lexer): Delete global variable. * parse.h, oct-parse.yy (octave_parser::curr_lexer): New data member. (octave_parser::octave_parser): Create lexer here. (curr_parser): Delete global variable. * toplev.cc (main_loop): Don't protect global curr_lexer and curr_parser variables. * oct-parse.yy (eval_string, parse_fcn_file): Likewise. * input.cc (get_debug_input): Likewise. * lex.h, lex.ll (curr_lexer): Delete global variable. * parse.h, oct-parse.yy (CURR_LEXER): New temporary global. (octave_parser::octave_parser): Set global CURR_LEXER here. * toplev.cc (main_loop): Protect CURR_LEXER prior to constructing new parser object. * input.cc (get_debug_input): Likewise. * oct-parse.yy (eval_string, parse_fcn_file): Likewise. * lex.h, lex.ll (lexical_feedback::scanner): New data member. (lexical_feedback::init): Create it. Call yylex_set_extra to store pointer to lexical_feedback object in scanner data. (lexical_feedback::~lexical_feedback): Delete it. * lex.ll (YYG): New macro. (lexical_feedback::reset, lexical_feedback::prep_for_script_file, lexical_feedback::prep_for_function_file, lexical_feedback::process_comment, lexical_feedback::handle_close_bracket, lexical_feedback::handle_identifier, lexical_feedback::lexer_debug): Use it to access scanner data.
author John W. Eaton <jwe@octave.org>
date Wed, 27 Feb 2013 18:49:16 -0500
parents 2fd39ab12209
children e309eb7940be
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1 /*
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
2
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 14073
diff changeset
3 Copyright (C) 1995-2012 John W. Eaton
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
4
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
6
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7013
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7013
diff changeset
10 option) any later version.
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
11
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
15 for more details.
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
16
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7013
diff changeset
18 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7013
diff changeset
19 <http://www.gnu.org/licenses/>.
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
20
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
21 */
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
22
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
24 #include <config.h>
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
25 #endif
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
26
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
27 #include <cassert>
4489
a90c3cbded0d [project @ 2003-08-28 16:08:26 by jwe]
jwe
parents: 4440
diff changeset
28 #include <cerrno>
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
29 #include <cstdlib>
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
30 #include <cstring>
4221
a7d8e5dd87ad [project @ 2002-12-06 22:34:47 by jwe]
jwe
parents: 4217
diff changeset
31 #include <new>
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
32
3503
d14c483b3c12 [project @ 2000-02-01 04:06:07 by jwe]
jwe
parents: 3446
diff changeset
33 #include <fstream>
d14c483b3c12 [project @ 2000-02-01 04:06:07 by jwe]
jwe
parents: 3446
diff changeset
34 #include <iostream>
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5744
diff changeset
35 #include <sstream>
1728
42b4f904f1af [project @ 1996-01-09 11:36:01 by jwe]
jwe
parents: 1704
diff changeset
36 #include <string>
42b4f904f1af [project @ 1996-01-09 11:36:01 by jwe]
jwe
parents: 1704
diff changeset
37
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
38 #include <sys/types.h>
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
39 #include <unistd.h>
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
40
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2910
diff changeset
41 #include "cmd-edit.h"
12989
00235a6446da eliminate duplication of internal variables controlling command history
John W. Eaton <jwe@octave.org>
parents: 12846
diff changeset
42 #include "cmd-hist.h"
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2910
diff changeset
43 #include "file-ops.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
44 #include "lo-error.h"
2370
a45c7d64b5e3 [project @ 1996-10-11 23:51:15 by jwe]
jwe
parents: 2322
diff changeset
45 #include "lo-mappers.h"
3020
f491f232cb09 [project @ 1997-06-03 22:15:08 by jwe]
jwe
parents: 3014
diff changeset
46 #include "oct-env.h"
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
47 #include "oct-locbuf.h"
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
48 #include "quit.h"
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
49 #include "singleton-cleanup.h"
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1751
diff changeset
50 #include "str-vec.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
51
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
52 #include "defaults.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
53 #include "defun.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
54 #include "error.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
55 #include "file-io.h"
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
56 #include "graphics.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
57 #include "input.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
58 #include "lex.h"
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
59 #include "oct-conf.h"
1742
a02f140ed897 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents: 1728
diff changeset
60 #include "oct-hist.h"
2162
a940dcdfe9de [project @ 1996-05-13 10:31:51 by jwe]
jwe
parents: 2145
diff changeset
61 #include "oct-map.h"
2862
95e85daad148 [project @ 1997-04-15 22:00:57 by jwe]
jwe
parents: 2859
diff changeset
62 #include "oct-obj.h"
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
63 #include "ov.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
64 #include "pager.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
65 #include "parse.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
66 #include "pathsearch.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
67 #include "procstream.h"
8658
73c4516fae10 New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents: 8581
diff changeset
68 #include "pt-eval.h"
2985
aa9d0c0e0458 [project @ 1997-05-16 06:54:18 by jwe]
jwe
parents: 2982
diff changeset
69 #include "pt-jump.h"
2982
20f5cec4f11c [project @ 1997-05-16 03:29:26 by jwe]
jwe
parents: 2973
diff changeset
70 #include "pt-stmt.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
71 #include "sighandlers.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
72 #include "sysdep.h"
2693
f4d0604cbcc4 [project @ 1997-02-18 15:25:21 by jwe]
jwe
parents: 2692
diff changeset
73 #include "syswait.h"
1750
fd0d12493223 [project @ 1996-01-13 09:31:07 by jwe]
jwe
parents: 1742
diff changeset
74 #include "toplev.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
75 #include "unwind-prot.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
76 #include "utils.h"
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
77 #include "variables.h"
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
78 #include "version.h"
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
79
15756
ea1a1fb00744 Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents: 15596
diff changeset
80 #ifndef SHELL_PATH
ea1a1fb00744 Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents: 15596
diff changeset
81 #define SHELL_PATH "/bin/sh"
ea1a1fb00744 Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents: 15596
diff changeset
82 #endif
ea1a1fb00744 Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents: 15596
diff changeset
83
9217
ee7cf4d963f3 smarter handling of quit()
Jaroslav Hajek <highegg@gmail.com>
parents: 9187
diff changeset
84 void (*octave_exit) (int) = ::exit;
ee7cf4d963f3 smarter handling of quit()
Jaroslav Hajek <highegg@gmail.com>
parents: 9187
diff changeset
85
9255
1c2d2c9f4a8d don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents: 9217
diff changeset
86 // TRUE means the quit() call is allowed.
1c2d2c9f4a8d don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents: 9217
diff changeset
87 bool quit_allowed = true;
1c2d2c9f4a8d don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents: 9217
diff changeset
88
3020
f491f232cb09 [project @ 1997-06-03 22:15:08 by jwe]
jwe
parents: 3014
diff changeset
89 // TRUE means we are exiting via the builtin exit or quit functions.
9383
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
90 bool quitting_gracefully = false;
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
91 // This stores the exit status.
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
92 int exit_status = 0;
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
93
4217
301cc4cf87e9 [project @ 2002-12-05 03:33:01 by jwe]
jwe
parents: 4214
diff changeset
94 // TRUE means we are ready to interpret commands, but not everything
301cc4cf87e9 [project @ 2002-12-05 03:33:01 by jwe]
jwe
parents: 4214
diff changeset
95 // is ready for interactive use.
301cc4cf87e9 [project @ 2002-12-05 03:33:01 by jwe]
jwe
parents: 4214
diff changeset
96 bool octave_interpreter_ready = false;
301cc4cf87e9 [project @ 2002-12-05 03:33:01 by jwe]
jwe
parents: 4214
diff changeset
97
4172
2e94b2abfe6d [project @ 2002-11-12 21:14:04 by jwe]
jwe
parents: 4171
diff changeset
98 // TRUE means we've processed all the init code and we are good to go.
2e94b2abfe6d [project @ 2002-11-12 21:14:04 by jwe]
jwe
parents: 4171
diff changeset
99 bool octave_initialized = false;
2e94b2abfe6d [project @ 2002-11-12 21:14:04 by jwe]
jwe
parents: 4171
diff changeset
100
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
101 // Current command to execute.
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
102 tree_statement_list *global_command = 0;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
103
5743
a527e0f77aa5 [project @ 2006-04-06 08:20:21 by jwe]
jwe
parents: 5717
diff changeset
104 octave_call_stack *octave_call_stack::instance = 0;
a527e0f77aa5 [project @ 2006-04-06 08:20:21 by jwe]
jwe
parents: 5717
diff changeset
105
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
106 void
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
107 octave_call_stack::create_instance (void)
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
108 {
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
109 instance = new octave_call_stack ();
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
110
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
111 if (instance)
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
112 {
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
113 instance->do_push (0, symbol_table::top_scope (), 0);
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
114
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
115 singleton_cleanup_list::add (cleanup_instance);
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
116 }
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
117 }
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 13981
diff changeset
118
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
119 int
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
120 octave_call_stack::do_current_line (void) const
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
121 {
9484
bbe033dcfe13 make dbwhere work when called at keyboard prompt
John W. Eaton <jwe@octave.org>
parents: 9483
diff changeset
122 tree_statement *stmt = do_current_statement ();
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
123
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
124 return stmt ? stmt->line () : -1;
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
125 }
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
126
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
127 int
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
128 octave_call_stack::do_current_column (void) const
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
129 {
9484
bbe033dcfe13 make dbwhere work when called at keyboard prompt
John W. Eaton <jwe@octave.org>
parents: 9483
diff changeset
130 tree_statement *stmt = do_current_statement ();
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
131
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
132 return stmt ? stmt->column () : -1;
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
133 }
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
134
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
135 int
7923
c3d21b9b94b6 eliminate octave_call_stack member functions caller_user_script and caller_user_function, and unused difference_type args
John W. Eaton <jwe@octave.org>
parents: 7913
diff changeset
136 octave_call_stack::do_caller_user_code_line (void) const
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
137 {
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
138 int retval = -1;
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
139
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
140 const_iterator p = cs.end ();
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
141
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
142 while (p != cs.begin ())
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
143 {
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
144 const call_stack_elt& elt = *(--p);
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
145
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
146 octave_function *f = elt.fcn;
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
147
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
148 if (f && f->is_user_code ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
149 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
150 tree_statement *stmt = elt.stmt;
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
151
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
152 if (stmt)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
153 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
154 retval = stmt->line ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
155 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
156 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
157 }
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
158 }
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
159
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
160 return retval;
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
161 }
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
162
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
163 int
7923
c3d21b9b94b6 eliminate octave_call_stack member functions caller_user_script and caller_user_function, and unused difference_type args
John W. Eaton <jwe@octave.org>
parents: 7913
diff changeset
164 octave_call_stack::do_caller_user_code_column (void) const
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
165 {
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
166 int retval = -1;
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
167
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
168 const_iterator p = cs.end ();
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
169
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
170 while (p != cs.begin ())
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
171 {
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
172 const call_stack_elt& elt = *(--p);
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
173
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
174 octave_function *f = elt.fcn;
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
175
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
176 if (f && f->is_user_code ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
177 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
178 tree_statement *stmt = elt.stmt;
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
179
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
180 if (stmt)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
181 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
182 retval = stmt->column ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
183 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
184 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
185 }
7877
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
186 }
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
187
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
188 return retval;
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
189 }
59031cfe331b lasterror fixes
John W. Eaton <jwe@octave.org>
parents: 7818
diff changeset
190
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
191 size_t
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
192 octave_call_stack::do_num_user_code_frames (octave_idx_type& curr_user_frame) const
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
193 {
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
194 size_t retval = 0;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
195
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
196 curr_user_frame = 0;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
197
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
198 // Look for the caller of dbstack.
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
199 size_t frame = cs[curr_frame].prev;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
200
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
201 bool found = false;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
202
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
203 size_t k = cs.size ();
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
204
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
205 for (const_reverse_iterator p = cs.rbegin (); p != cs.rend (); p++)
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
206 {
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
207 octave_function *f = (*p).fcn;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
208
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
209 if (--k == frame)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
210 found = true;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
211
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
212 if (f && f->is_user_code ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
213 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
214 if (! found)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
215 curr_user_frame++;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
216
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
217 retval++;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
218 }
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
219 }
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
220
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
221 // We counted how many user frames were not the one, in reverse.
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
222 // Now set curr_user_frame to be the index in the other direction.
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
223 curr_user_frame = retval - curr_user_frame - 1;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
224
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
225 return retval;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
226 }
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
227
7719
87eda1f8faaa octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents: 7552
diff changeset
228 octave_user_code *
7923
c3d21b9b94b6 eliminate octave_call_stack member functions caller_user_script and caller_user_function, and unused difference_type args
John W. Eaton <jwe@octave.org>
parents: 7913
diff changeset
229 octave_call_stack::do_caller_user_code (size_t nskip) const
5744
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
230 {
7719
87eda1f8faaa octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents: 7552
diff changeset
231 octave_user_code *retval = 0;
5744
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
232
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
233 const_iterator p = cs.end ();
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
234
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
235 while (p != cs.begin ())
5744
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
236 {
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
237 const call_stack_elt& elt = *(--p);
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
238
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
239 octave_function *f = elt.fcn;
5744
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
240
7719
87eda1f8faaa octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents: 7552
diff changeset
241 if (f && f->is_user_code ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
242 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
243 if (nskip > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
244 nskip--;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
245 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
246 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
247 retval = dynamic_cast<octave_user_code *> (f);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
248 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
249 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
250 }
5744
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
251 }
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
252
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
253 return retval;
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
254 }
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
255
10767
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
256 // Use static fields for the best efficiency.
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
257 // NOTE: C++0x will allow these two to be merged into one.
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
258 static const char *bt_fieldnames[] = { "file", "name", "line",
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
259 "column", "scope", "context", 0 };
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
260 static const octave_fields bt_fields (bt_fieldnames);
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
261
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
262 octave_map
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
263 octave_call_stack::empty_backtrace (void)
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
264 {
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
265 return octave_map (dim_vector (0, 1), bt_fields);
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
266 }
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
267
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
268 octave_map
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
269 octave_call_stack::do_backtrace (size_t nskip,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
270 octave_idx_type& curr_user_frame) const
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
271 {
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
272 size_t user_code_frames = do_num_user_code_frames (curr_user_frame);
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
273
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
274 size_t nframes = nskip <= user_code_frames ? user_code_frames - nskip : 0;
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
275
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
276 // Our list is reversed.
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
277 curr_user_frame = nframes - curr_user_frame - 1;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
278
10767
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
279 octave_map retval (dim_vector (nframes, 1), bt_fields);
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
280
10767
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
281 Cell& file = retval.contents (0);
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
282 Cell& name = retval.contents (1);
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
283 Cell& line = retval.contents (2);
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
284 Cell& column = retval.contents (3);
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
285 Cell& scope = retval.contents (4);
2b041d3995a3 modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10411
diff changeset
286 Cell& context = retval.contents (5);
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
287
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
288 if (nframes > 0)
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
289 {
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
290 int k = 0;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
291
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
292 for (const_reverse_iterator p = cs.rbegin (); p != cs.rend (); p++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
293 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
294 const call_stack_elt& elt = *p;
7752
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
295
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
296 octave_function *f = elt.fcn;
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
297
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
298 if (f && f->is_user_code ())
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
299 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
300 if (nskip > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
301 nskip--;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
302 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
303 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
304 scope(k) = elt.scope;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
305 context(k) = elt.context;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
306
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
307 file(k) = f->fcn_file_name ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
308 std::string parent_fcn_name = f->parent_fcn_name ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
309 if (parent_fcn_name == std::string ())
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
310 name(k) = f->name ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
311 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
312 name(k) = f->parent_fcn_name () + Vfilemarker + f->name ();
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
313
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
314 tree_statement *stmt = elt.stmt;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
315
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
316 if (stmt)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
317 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
318 line(k) = stmt->line ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
319 column(k) = stmt->column ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
320 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
321 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
322 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
323 line(k) = -1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
324 column(k) = -1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
325 }
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
326
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
327 k++;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
328 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
329 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
330 }
7734
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
331 }
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
332
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
333 return retval;
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
334 }
2dee19385d32 eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents: 7733
diff changeset
335
7752
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
336 bool
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
337 octave_call_stack::do_goto_frame (size_t n, bool verbose)
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
338 {
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
339 bool retval = false;
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
340
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
341 if (n < cs.size ())
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
342 {
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
343 retval = true;
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
344
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
345 curr_frame = n;
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
346
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
347 const call_stack_elt& elt = cs[n];
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
348
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
349 symbol_table::set_scope_and_context (elt.scope, elt.context);
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
350
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
351 if (verbose)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
352 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
353 octave_function *f = elt.fcn;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
354 std::string nm = f ? f->name () : std::string ("<unknown>");
7752
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
355
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
356 tree_statement *s = elt.stmt;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
357 int l = -1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
358 int c = -1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
359 if (s)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
360 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
361 l = s->line ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
362 c = s->column ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
363 }
7752
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
364
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
365 octave_stdout << "stopped in " << nm
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
366 << " at line " << l << " column " << c
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
367 << " (" << elt.scope << "[" << elt.context << "])"
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
368 << std::endl;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
369 }
7752
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
370 }
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
371
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
372 return retval;
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
373 }
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
374
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
375 bool
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
376 octave_call_stack::do_goto_frame_relative (int nskip, bool verbose)
7752
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
377 {
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
378 bool retval = false;
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
379
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
380 int incr = 0;
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
381
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
382 if (nskip < 0)
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
383 incr = -1;
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
384 else if (nskip > 0)
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
385 incr = 1;
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
386
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
387 // Start looking with the caller of dbup/dbdown/keyboard.
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
388 size_t frame = cs[curr_frame].prev;
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
389
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
390 while (true)
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
391 {
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
392 if ((incr < 0 && frame == 0) || (incr > 0 && frame == cs.size () - 1))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
393 break;
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
394
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
395 frame += incr;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
396
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
397 const call_stack_elt& elt = cs[frame];
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
398
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
399 octave_function *f = elt.fcn;
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
400
9990
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
401 if (frame == 0 || (f && f->is_user_code ()))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
402 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
403 if (nskip > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
404 nskip--;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
405 else if (nskip < 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
406 nskip++;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
407
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
408 if (nskip == 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
409 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
410 curr_frame = frame;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
411 cs[cs.size () - 1].prev = curr_frame;
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
412
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
413 symbol_table::set_scope_and_context (elt.scope, elt.context);
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
414
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
415 if (verbose)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
416 {
9990
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
417 std::ostringstream buf;
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
418
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
419 if (f)
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
420 {
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
421 tree_statement *s = elt.stmt;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
422
9990
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
423 int l = s ? s->line () : -1;
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
424
10839
65bc065bec95 still more debugger fixes
John W. Eaton <jwe@octave.org>
parents: 10767
diff changeset
425 buf << "stopped in " << f->name ()
65bc065bec95 still more debugger fixes
John W. Eaton <jwe@octave.org>
parents: 10767
diff changeset
426 << " at line " << l << std::endl;
9990
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
427 }
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
428 else
2b008f1d3794 octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents: 9981
diff changeset
429 buf << "at top level" << std::endl;
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
430
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
431 octave_stdout << buf.str ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
432 }
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
433
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
434 retval = true;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
435 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
436 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
437 }
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
438
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
439 // There is no need to set scope and context here. That will
9483
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
440 // happen when the dbup/dbdown/keyboard frame is popped and we
25c2e92ee03c correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents: 9452
diff changeset
441 // jump to the new "prev" frame set above.
7890
73ef513855e7 dbstack fixes
John W. Eaton <jwe@octave.org>
parents: 7877
diff changeset
442 }
7752
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
443
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
444 return retval;
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
445 }
40c428ea3408 initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents: 7736
diff changeset
446
5744
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5743
diff changeset
447 void
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
448 octave_call_stack::do_goto_caller_frame (void)
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
449 {
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
450 size_t frame = curr_frame;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
451
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
452 bool skipped = false;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
453
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
454 while (frame != 0)
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
455 {
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
456 frame = cs[frame].prev;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
457
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
458 const call_stack_elt& elt = cs[frame];
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
459
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
460 octave_function *f = elt.fcn;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
461
8581
6adcafc70c32 toplev.cc (octave_call_stack::do_goto_caller_frame): allow caller frame to be base frame
John W. Eaton <jwe@octave.org>
parents: 8574
diff changeset
462 if (frame == 0 || (f && f->is_user_code ()))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
463 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
464 if (! skipped)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
465 // We found the current user code frame, so skip it.
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
466 skipped = true;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
467 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
468 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
469 // We found the caller user code frame.
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
470 call_stack_elt tmp (elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
471 tmp.prev = curr_frame;
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
472
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
473 curr_frame = cs.size ();
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
474
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
475 cs.push_back (tmp);
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
476
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
477 symbol_table::set_scope_and_context (tmp.scope, tmp.context);
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
478
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
479 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
480 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
481 }
7901
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
482 }
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
483 }
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
484
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
485 void
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
486 octave_call_stack::do_goto_base_frame (void)
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
487 {
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
488 call_stack_elt tmp (cs[0]);
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
489 tmp.prev = curr_frame;
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
490
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
491 curr_frame = cs.size ();
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
492
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
493 cs.push_back (tmp);
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
494
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
495 symbol_table::set_scope_and_context (tmp.scope, tmp.context);
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
496 }
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
497
3e4c9b69069d call stack changes
John W. Eaton <jwe@octave.org>
parents: 7890
diff changeset
498 void
8013
b3e667f1ab4c call backtrace_error_message in eval functions, not when popping stack
John W. Eaton <jwe@octave.org>
parents: 8011
diff changeset
499 octave_call_stack::do_backtrace_error_message (void) const
8011
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
500 {
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
501 if (error_state > 0)
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
502 {
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
503 error_state = -1;
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
504
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
505 error ("called from:");
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
506 }
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
507
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
508 if (! cs.empty ())
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
509 {
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
510 const call_stack_elt& elt = cs.back ();
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
511
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
512 octave_function *fcn = elt.fcn;
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
513 tree_statement *stmt = elt.stmt;
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
514
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
515 std::string fcn_name = "?unknown?";
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
516
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
517 if (fcn)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
518 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
519 fcn_name = fcn->fcn_file_name ();
8011
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
520
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
521 if (fcn_name.empty ())
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
522 fcn_name = fcn->name ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
523 }
8011
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
524
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
525 int line = stmt ? stmt->line () : -1;
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
526 int column = stmt ? stmt->column () : -1;
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
527
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
528 error (" %s at line %d, column %d",
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
529 fcn_name.c_str (), line, column);
8011
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
530 }
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
531 }
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
532
3100283874d7 improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
533 void
4180
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
534 recover_from_exception (void)
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
535 {
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
536 can_interrupt = true;
4182
4d1d7c51205c [project @ 2002-11-15 20:33:47 by jwe]
jwe
parents: 4181
diff changeset
537 octave_interrupt_immediately = 0;
4180
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
538 octave_interrupt_state = 0;
5142
0f9108f298ab [project @ 2005-02-12 02:29:34 by jwe]
jwe
parents: 5102
diff changeset
539 octave_signal_caught = 0;
7481
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7409
diff changeset
540 octave_exception_state = octave_no_exception;
4180
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
541 octave_restore_signal_mask ();
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
542 octave_catch_interrupts ();
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
543 }
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
544
1907
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
545 int
5189
85b315ad5f7d [project @ 2005-03-04 02:46:08 by jwe]
jwe
parents: 5169
diff changeset
546 main_loop (void)
1907
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
547 {
2016
6f3428b0d2c7 [project @ 1996-03-22 09:48:38 by jwe]
jwe
parents: 1996
diff changeset
548 octave_save_signal_mask ();
6f3428b0d2c7 [project @ 1996-03-22 09:48:38 by jwe]
jwe
parents: 1996
diff changeset
549
3020
f491f232cb09 [project @ 1997-06-03 22:15:08 by jwe]
jwe
parents: 3014
diff changeset
550 can_interrupt = true;
1907
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
551
5142
0f9108f298ab [project @ 2005-02-12 02:29:34 by jwe]
jwe
parents: 5102
diff changeset
552 octave_signal_hook = octave_signal_handler;
10066
2cd940306a06 make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents: 9990
diff changeset
553 octave_interrupt_hook = 0;
2cd940306a06 make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents: 9990
diff changeset
554 octave_bad_alloc_hook = 0;
4429
c1f6200b5f0e [project @ 2003-06-17 04:36:08 by jwe]
jwe
parents: 4399
diff changeset
555
2554
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2552
diff changeset
556 octave_catch_interrupts ();
1907
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
557
4172
2e94b2abfe6d [project @ 2002-11-12 21:14:04 by jwe]
jwe
parents: 4171
diff changeset
558 octave_initialized = true;
2e94b2abfe6d [project @ 2002-11-12 21:14:04 by jwe]
jwe
parents: 4171
diff changeset
559
1907
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
560 // The big loop.
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
561
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
562 int retval = 0;
1907
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
563 do
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
564 {
4180
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4173
diff changeset
565 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
566 {
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
567 unwind_protect frame;
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
568
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
569 // octave_parser constructor sets this for us.
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
570 frame.protect_var (CURR_LEXER);
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
571
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
572 octave_parser *curr_parser = new octave_parser ();
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
573 frame.add_fcn (octave_parser::cleanup, curr_parser);
9260
9c2349a51218 properly unmark forced variables
John W. Eaton <jwe@octave.org>
parents: 9255
diff changeset
574
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
575 reset_error_handler ();
4318
115bffcecfd3 [project @ 2003-02-13 05:52:16 by jwe]
jwe
parents: 4254
diff changeset
576
16139
2fd39ab12209 move a function and data member from lexical_feedback to octave_parser
John W. Eaton <jwe@octave.org>
parents: 16138
diff changeset
577 curr_parser->reset ();
2620
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2614
diff changeset
578
10186
095a1e670e68 make dbstep work with keyboard function
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
579 if (symbol_table::at_top_level ())
095a1e670e68 make dbstep work with keyboard function
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
580 tree_evaluator::reset_debug_state ();
095a1e670e68 make dbstep work with keyboard function
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
581
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
582 // Do this with an unwind-protect cleanup function so that
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
583 // the forced variables will be unmarked in the event of an
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
584 // interrupt.
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
585 symbol_table::scope_id scope = symbol_table::top_scope ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
586 frame.add_fcn (symbol_table::unmark_forced_variables, scope);
9260
9c2349a51218 properly unmark forced variables
John W. Eaton <jwe@octave.org>
parents: 9255
diff changeset
587
11258
795c97ace02c eliminate some possible memory leaks
John W. Eaton <jwe@octave.org>
parents: 11123
diff changeset
588 frame.protect_var (global_command);
795c97ace02c eliminate some possible memory leaks
John W. Eaton <jwe@octave.org>
parents: 11123
diff changeset
589
795c97ace02c eliminate some possible memory leaks
John W. Eaton <jwe@octave.org>
parents: 11123
diff changeset
590 global_command = 0;
795c97ace02c eliminate some possible memory leaks
John W. Eaton <jwe@octave.org>
parents: 11123
diff changeset
591
16138
284e2ca86ef7 execute parser using member function of octave_parser class
John W. Eaton <jwe@octave.org>
parents: 16133
diff changeset
592 retval = curr_parser->run ();
2620
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2614
diff changeset
593
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
594 if (retval == 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
595 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
596 if (global_command)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
597 {
13970
c93b953f7d54 plug some memory leaks
John W. Eaton <jwe@octave.org>
parents: 13016
diff changeset
598 // Use an unwind-protect cleanup function so that the
c93b953f7d54 plug some memory leaks
John W. Eaton <jwe@octave.org>
parents: 13016
diff changeset
599 // global_command list will be deleted in the event of
c93b953f7d54 plug some memory leaks
John W. Eaton <jwe@octave.org>
parents: 13016
diff changeset
600 // an interrupt.
3883
69b6bd271277 [project @ 2002-04-02 21:05:10 by jwe]
jwe
parents: 3881
diff changeset
601
13970
c93b953f7d54 plug some memory leaks
John W. Eaton <jwe@octave.org>
parents: 13016
diff changeset
602 frame.add_fcn (cleanup_statement_list, &global_command);
3883
69b6bd271277 [project @ 2002-04-02 21:05:10 by jwe]
jwe
parents: 3881
diff changeset
603
13970
c93b953f7d54 plug some memory leaks
John W. Eaton <jwe@octave.org>
parents: 13016
diff changeset
604 global_command->accept (*current_evaluator);
3883
69b6bd271277 [project @ 2002-04-02 21:05:10 by jwe]
jwe
parents: 3881
diff changeset
605
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
606 octave_quit ();
4171
04694e5b4239 [project @ 2002-11-12 20:27:24 by jwe]
jwe
parents: 4155
diff changeset
607
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
608 if (! (interactive || forced_interactive))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
609 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
610 bool quit = (tree_return_command::returning
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
611 || tree_break_command::breaking);
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
612
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
613 if (tree_return_command::returning)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
614 tree_return_command::returning = 0;
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
615
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
616 if (tree_break_command::breaking)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
617 tree_break_command::breaking--;
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
618
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
619 if (quit)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
620 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
621 }
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
622
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
623 if (error_state)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
624 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
625 if (! (interactive || forced_interactive))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
626 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
627 // We should exit with a non-zero status.
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
628 retval = 1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
629 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
630 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
631 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
632 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
633 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
634 if (octave_completion_matches_called)
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
635 octave_completion_matches_called = false;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
636 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
637 command_editor::increment_current_command_number ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
638 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
639 }
16139
2fd39ab12209 move a function and data member from lexical_feedback to octave_parser
John W. Eaton <jwe@octave.org>
parents: 16138
diff changeset
640 else if (curr_parser->end_of_input)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
641 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
642 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
643 }
4182
4d1d7c51205c [project @ 2002-11-15 20:33:47 by jwe]
jwe
parents: 4181
diff changeset
644 catch (octave_interrupt_exception)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
645 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
646 recover_from_exception ();
9383
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
647 octave_stdout << "\n";
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
648 if (quitting_gracefully)
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
649 {
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
650 clean_up_and_exit (exit_status);
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
651 break; // If user has overriden the exit func.
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
652 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
653 }
8704
236ff50db90f load-path.cc: catch execution exception in getcwd
John W. Eaton <jwe@octave.org>
parents: 8669
diff changeset
654 catch (octave_execution_exception)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
655 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
656 recover_from_exception ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
657 std::cerr
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
658 << "error: unhandled execution exception -- trying to return to prompt"
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
659 << std::endl;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
660 }
4181
dd2abf428f5d [project @ 2002-11-15 18:33:41 by jwe]
jwe
parents: 4180
diff changeset
661 catch (std::bad_alloc)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
662 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
663 recover_from_exception ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
664 std::cerr
15244
c16357c4bdbb attempt to display location of out of memory errors in interpreted code
John W. Eaton <jwe@octave.org>
parents: 15221
diff changeset
665 << "error: out of memory -- trying to return to prompt"
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
666 << std::endl;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
667 }
1907
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
668 }
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
669 while (retval == 0);
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
670
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
671 return retval;
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
672 }
8c6cea97eb80 [project @ 1996-02-10 01:12:46 by jwe]
jwe
parents: 1884
diff changeset
673
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
674 // Fix up things before exiting.
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
675
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
676 void
3162
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3147
diff changeset
677 clean_up_and_exit (int retval)
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3147
diff changeset
678 {
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
679 do_octave_atexit ();
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
680
9217
ee7cf4d963f3 smarter handling of quit()
Jaroslav Hajek <highegg@gmail.com>
parents: 9187
diff changeset
681 if (octave_exit)
ee7cf4d963f3 smarter handling of quit()
Jaroslav Hajek <highegg@gmail.com>
parents: 9187
diff changeset
682 (*octave_exit) (retval == EOF ? 0 : retval);
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
683 }
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
684
11023
cb62c7401ea2 toplev.cc (Fquit): allow any number of output paramters
John W. Eaton <jwe@octave.org>
parents: 10890
diff changeset
685 DEFUN (quit, args, ,
3332
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
686 "-*- texinfo -*-\n\
10840
89f4d7e294cc Grammarcheck .cc files
Rik <octave@nomad.inbox5.com>
parents: 10839
diff changeset
687 @deftypefn {Built-in Function} {} exit (@var{status})\n\
3332
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
688 @deftypefnx {Built-in Function} {} quit (@var{status})\n\
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
689 Exit the current Octave session. If the optional integer value\n\
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
690 @var{status} is supplied, pass that value to the operating system as the\n\
6615
687ae48b2253 [project @ 2007-05-13 06:24:57 by jwe]
jwe
parents: 6556
diff changeset
691 Octave's exit status. The default value is zero.\n\
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 3332
diff changeset
692 @end deftypefn")
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
693 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 2084
diff changeset
694 octave_value_list retval;
2068
18365b6332a8 [project @ 1996-04-17 23:37:35 by jwe]
jwe
parents: 2016
diff changeset
695
9255
1c2d2c9f4a8d don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents: 9217
diff changeset
696 if (! quit_allowed)
11590
4ced6b90fffb style fixes for warning and error messages in source files
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
697 error ("quit: not supported in embedded mode");
11023
cb62c7401ea2 toplev.cc (Fquit): allow any number of output paramters
John W. Eaton <jwe@octave.org>
parents: 10890
diff changeset
698 else
2068
18365b6332a8 [project @ 1996-04-17 23:37:35 by jwe]
jwe
parents: 2016
diff changeset
699 {
3180
c17387059fd3 [project @ 1998-09-24 18:59:11 by jwe]
jwe
parents: 3162
diff changeset
700 if (args.length () > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
701 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
702 int tmp = args(0).nint_value ();
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
703
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
704 if (! error_state)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
705 exit_status = tmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
706 }
3180
c17387059fd3 [project @ 1998-09-24 18:59:11 by jwe]
jwe
parents: 3162
diff changeset
707
9383
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
708 if (! error_state)
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
709 {
13981
5f8bc2f145f5 clean up octave_chunk_buffer storage before exit
John W. Eaton <jwe@octave.org>
parents: 13973
diff changeset
710 // Instead of simply calling exit, we simulate an interrupt
5f8bc2f145f5 clean up octave_chunk_buffer storage before exit
John W. Eaton <jwe@octave.org>
parents: 13973
diff changeset
711 // with a request to exit cleanly so that no matter where the
5f8bc2f145f5 clean up octave_chunk_buffer storage before exit
John W. Eaton <jwe@octave.org>
parents: 13973
diff changeset
712 // call to quit occurs, we will run the unwind_protect stack,
5f8bc2f145f5 clean up octave_chunk_buffer storage before exit
John W. Eaton <jwe@octave.org>
parents: 13973
diff changeset
713 // clear the OCTAVE_LOCAL_BUFFER allocations, etc. before
5f8bc2f145f5 clean up octave_chunk_buffer storage before exit
John W. Eaton <jwe@octave.org>
parents: 13973
diff changeset
714 // exiting.
9383
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
715
13981
5f8bc2f145f5 clean up octave_chunk_buffer storage before exit
John W. Eaton <jwe@octave.org>
parents: 13973
diff changeset
716 quitting_gracefully = true;
9383
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
717
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
718 octave_interrupt_state = -1;
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
719
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
720 octave_throw_interrupt_exception ();
d57f0c56195f improve error handling
Jaroslav Hajek <highegg@gmail.com>
parents: 9377
diff changeset
721 }
2068
18365b6332a8 [project @ 1996-04-17 23:37:35 by jwe]
jwe
parents: 2016
diff changeset
722 }
18365b6332a8 [project @ 1996-04-17 23:37:35 by jwe]
jwe
parents: 2016
diff changeset
723
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
724 return retval;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
725 }
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
726
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
727 DEFALIAS (exit, quit);
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
728
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1907
diff changeset
729 DEFUN (warranty, , ,
3446
5ee5afb3981a [project @ 2000-01-17 09:42:43 by jwe]
jwe
parents: 3402
diff changeset
730 "-*- texinfo -*-\n\
5ee5afb3981a [project @ 2000-01-17 09:42:43 by jwe]
jwe
parents: 3402
diff changeset
731 @deftypefn {Built-in Function} {} warranty ()\n\
5ee5afb3981a [project @ 2000-01-17 09:42:43 by jwe]
jwe
parents: 3402
diff changeset
732 Describe the conditions for copying and distributing Octave.\n\
5ee5afb3981a [project @ 2000-01-17 09:42:43 by jwe]
jwe
parents: 3402
diff changeset
733 @end deftypefn")
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
734 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 2084
diff changeset
735 octave_value_list retval;
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
736
3922
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3892
diff changeset
737 octave_stdout << "\n" \
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3892
diff changeset
738 OCTAVE_NAME_VERSION_AND_COPYRIGHT "\n\
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3892
diff changeset
739 \n\
11104
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 11066
diff changeset
740 GNU Octave free software; you can redistribute it and/or modify\n\
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
741 it under the terms of the GNU General Public License as published by\n\
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7013
diff changeset
742 the Free Software Foundation; either version 3 of the License, or\n\
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
743 (at your option) any later version.\n\
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
744 \n\
11104
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 11066
diff changeset
745 GNU Octave is distributed in the hope that it will be useful,\n\
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
746 but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
747 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
748 GNU General Public License for more details.\n\
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
749 \n\
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
750 You should have received a copy of the GNU General Public License\n\
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7013
diff changeset
751 along with this program. If not, see <http://www.gnu.org/licenses/>.\n\
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
752 \n";
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
753
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
754 return retval;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
755 }
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
756
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
757 // Execute a shell command.
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
758
6316
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
759 static int
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
760 wait_for_input (int fid)
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
761 {
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
762 int retval = -1;
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
763
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
764 #if defined (HAVE_SELECT)
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
765 if (fid >= 0)
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
766 {
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
767 fd_set set;
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
768
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
769 FD_ZERO (&set);
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
770 FD_SET (fid, &set);
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
771
10411
479cc8a0a846 use gnulib namespace
John W. Eaton <jwe@octave.org>
parents: 10331
diff changeset
772 retval = gnulib::select (FD_SETSIZE, &set, 0, 0, 0);
6316
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
773 }
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
774 #else
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
775 retval = 1;
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
776 #endif
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
777
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
778 return retval;
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
779 }
a3a2580435c2 [project @ 2007-02-16 07:23:49 by jwe]
jwe
parents: 6311
diff changeset
780
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 2084
diff changeset
781 static octave_value_list
3523
b80bbb43a1a9 [project @ 2000-02-02 10:25:52 by jwe]
jwe
parents: 3503
diff changeset
782 run_command_and_return_output (const std::string& cmd_str)
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
783 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 2084
diff changeset
784 octave_value_list retval;
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
785 unwind_protect frame;
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
786
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
787 iprocstream *cmd = new iprocstream (cmd_str.c_str ());
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
788
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
789 frame.add_delete (cmd);
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
790 frame.add_fcn (octave_child_list::remove, cmd->pid ());
3060
9c6cd52f3f5a [project @ 1997-06-25 18:30:40 by jwe]
jwe
parents: 3020
diff changeset
791
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
792 if (*cmd)
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
793 {
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
794 int fid = cmd->file_number ();
2095
36903d507b0e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents: 2086
diff changeset
795
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
796 std::ostringstream output_buf;
4494
93ad80b6eef6 [project @ 2003-09-03 20:27:00 by jwe]
jwe
parents: 4489
diff changeset
797
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
798 char ch;
3147
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 3141
diff changeset
799
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
800 for (;;)
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
801 {
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
802 if (cmd->get (ch))
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
803 output_buf.put (ch);
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
804 else
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
805 {
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
806 if (! cmd->eof () && errno == EAGAIN)
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
807 {
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
808 cmd->clear ();
3147
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 3141
diff changeset
809
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
810 if (wait_for_input (fid) != 1)
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
811 break;
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
812 }
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
813 else
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
814 break;
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
815 }
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
816 }
3147
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 3141
diff changeset
817
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
818 int cmd_status = cmd->close ();
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
819
15221
a83b7b2f95ee avoid C-style cast warnings from GCC for wait-related macros
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
820 if (octave_wait::ifexited (cmd_status))
a83b7b2f95ee avoid C-style cast warnings from GCC for wait-related macros
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
821 cmd_status = octave_wait::exitstatus (cmd_status);
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
822 else
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
823 cmd_status = 127;
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
824
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
825 retval(1) = output_buf.str ();
10212
56f7734f5448 fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents: 10186
diff changeset
826 retval(0) = cmd_status;
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
827 }
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
828 else
15466
d174210ce1ec use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents: 14156
diff changeset
829 error ("unable to start subprocess for '%s'", cmd_str.c_str ());
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
830
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
831 return retval;
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
832 }
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
833
5285
fe5ee25a5e6c [project @ 2005-04-19 15:02:49 by jwe]
jwe
parents: 5275
diff changeset
834 enum system_exec_type { et_sync, et_async };
fe5ee25a5e6c [project @ 2005-04-19 15:02:49 by jwe]
jwe
parents: 5275
diff changeset
835
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1907
diff changeset
836 DEFUN (system, args, nargout,
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
837 "-*- texinfo -*-\n\
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
838 @deftypefn {Built-in Function} {} system (\"@var{string}\")\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
839 @deftypefnx {Built-in Function} {} system (\"@var{string}\", @var{return_output})\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
840 @deftypefnx {Built-in Function} {} system (\"@var{string}\", @var{return_output}, @var{type})\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
841 @deftypefnx {Built-in Function} {[@var{status}, @var{output}] =} system (@dots{})\n\
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
842 Execute a shell command specified by @var{string}.\n\
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
843 If the optional argument @var{type} is \"async\", the process\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
844 is started in the background and the process ID of the child process\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
845 is returned immediately. Otherwise, the child process is started and\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
846 Octave waits until it exits. If the @var{type} argument is omitted, it\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
847 defaults to the value \"sync\".\n\
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
848 \n\
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
849 If @var{system} is called with one or more output arguments, or if the\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
850 optional argument @var{return_output} is true and the subprocess is started\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
851 synchronously, then the output from the command is returned as a variable. \n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
852 Otherwise, if the subprocess is executed synchronously, its output is sent\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
853 to the standard output. To send the output of a command executed with\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
854 @code{system} through the pager, use a command like\n\
2321
dac9933079e6 [project @ 1996-07-15 21:08:05 by jwe]
jwe
parents: 2299
diff changeset
855 \n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
856 @example\n\
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
857 @group\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
858 [output, text] = system (\"cmd\");\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
859 disp (text);\n\
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
860 @end group\n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
861 @end example\n\
2321
dac9933079e6 [project @ 1996-07-15 21:08:05 by jwe]
jwe
parents: 2299
diff changeset
862 \n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
863 @noindent\n\
2321
dac9933079e6 [project @ 1996-07-15 21:08:05 by jwe]
jwe
parents: 2299
diff changeset
864 or\n\
dac9933079e6 [project @ 1996-07-15 21:08:05 by jwe]
jwe
parents: 2299
diff changeset
865 \n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
866 @example\n\
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
867 printf (\"%s\\n\", nthargout (2, \"system\", \"cmd\"));\n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
868 @end example\n\
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
869 \n\
5659
960f4b9a26af [project @ 2006-03-10 15:35:20 by jwe]
jwe
parents: 5655
diff changeset
870 The @code{system} function can return two values. The first is the\n\
960f4b9a26af [project @ 2006-03-10 15:35:20 by jwe]
jwe
parents: 5655
diff changeset
871 exit status of the command and the second is any output from the\n\
960f4b9a26af [project @ 2006-03-10 15:35:20 by jwe]
jwe
parents: 5655
diff changeset
872 command that was written to the standard output stream. For example,\n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
873 \n\
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
874 @example\n\
5717
34cda7d94c08 [project @ 2006-03-27 22:26:18 by jwe]
jwe
parents: 5672
diff changeset
875 [status, output] = system (\"echo foo; exit 2\");\n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
876 @end example\n\
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
877 \n\
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
878 @noindent\n\
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
879 will set the variable @code{output} to the string @samp{foo}, and the\n\
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
880 variable @code{status} to the integer @samp{2}.\n\
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
881 \n\
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
882 For commands run asynchronously, @var{status} is the process id of the\n\
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
883 command shell that is started to run the command.\n\
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
884 @seealso{unix, dos}\n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
885 @end deftypefn")
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
886 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 2084
diff changeset
887 octave_value_list retval;
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
888
10066
2cd940306a06 make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents: 9990
diff changeset
889 unwind_protect frame;
3834
414e694c9e6a [project @ 2001-05-17 13:45:41 by jwe]
jwe
parents: 3822
diff changeset
890
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
891 int nargin = args.length ();
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
892
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
893 if (nargin > 0 && nargin < 4)
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
894 {
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
895 bool return_output = (nargin == 1 && nargout > 1);
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
896
5285
fe5ee25a5e6c [project @ 2005-04-19 15:02:49 by jwe]
jwe
parents: 5275
diff changeset
897 system_exec_type type = et_sync;
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
898
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
899 if (nargin == 3)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
900 {
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
901 std::string type_str = args(2).string_value ();
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
902
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
903 if (! error_state)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
904 {
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
905 if (type_str == "sync")
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
906 type = et_sync;
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
907 else if (type_str == "async")
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
908 type = et_async;
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
909 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
910 {
12483
7a5aacf65f81 Rewrite error strings in src/ to use variables named in documentation.
Rik <octave@nomad.inbox5.com>
parents: 12208
diff changeset
911 error ("system: TYPE must be \"sync\" or \"async\"");
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
912 return retval;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
913 }
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
914 }
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
915 else
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
916 {
12483
7a5aacf65f81 Rewrite error strings in src/ to use variables named in documentation.
Rik <octave@nomad.inbox5.com>
parents: 12208
diff changeset
917 error ("system: TYPE must be a character string");
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
918 return retval;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
919 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
920 }
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
921
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
922 if (nargin > 1)
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
923 {
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
924 return_output = args(1).is_true ();
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
925
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
926 if (error_state)
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
927 {
12483
7a5aacf65f81 Rewrite error strings in src/ to use variables named in documentation.
Rik <octave@nomad.inbox5.com>
parents: 12208
diff changeset
928 error ("system: RETURN_OUTPUT must be boolean value true or false");
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
929 return retval;
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
930 }
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
931 }
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
932
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
933 if (return_output && type == et_async)
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
934 {
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
935 error ("system: can't return output from commands run asynchronously");
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
936 return retval;
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
937 }
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
938
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
939 std::string cmd_str = args(0).string_value ();
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
940
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
941 if (! error_state)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
942 {
7104
b26d0cd10a42 [project @ 2007-11-06 17:18:41 by jwe]
jwe
parents: 7017
diff changeset
943 #if defined (__WIN32__) && ! defined (__CYGWIN__)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
944 // Work around weird double-quote handling on Windows systems.
7104
b26d0cd10a42 [project @ 2007-11-06 17:18:41 by jwe]
jwe
parents: 7017
diff changeset
945 if (type == et_sync)
b26d0cd10a42 [project @ 2007-11-06 17:18:41 by jwe]
jwe
parents: 7017
diff changeset
946 cmd_str = "\"" + cmd_str + "\"";
b26d0cd10a42 [project @ 2007-11-06 17:18:41 by jwe]
jwe
parents: 7017
diff changeset
947 #endif
b26d0cd10a42 [project @ 2007-11-06 17:18:41 by jwe]
jwe
parents: 7017
diff changeset
948
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
949 if (type == et_async)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
950 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
951 // FIXME -- maybe this should go in sysdep.cc?
4086
ddc722b38e87 [project @ 2002-10-03 19:08:45 by jwe]
jwe
parents: 4084
diff changeset
952 #ifdef HAVE_FORK
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
953 pid_t pid = fork ();
2083
679d7262a525 [project @ 1996-04-25 04:29:27 by jwe]
jwe
parents: 2078
diff changeset
954
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
955 if (pid < 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
956 error ("system: fork failed -- can't create child process");
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
957 else if (pid == 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
958 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
959 // FIXME -- should probably replace this
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
960 // call with something portable.
3273
eb27ea9b7ff8 [project @ 1999-10-12 02:22:25 by jwe]
jwe
parents: 3258
diff changeset
961
15756
ea1a1fb00744 Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents: 15596
diff changeset
962 execl (SHELL_PATH, "sh", "-c", cmd_str.c_str (),
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
963 static_cast<void *> (0));
3273
eb27ea9b7ff8 [project @ 1999-10-12 02:22:25 by jwe]
jwe
parents: 3258
diff changeset
964
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
965 panic_impossible ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
966 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
967 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
968 retval(0) = pid;
6222
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
969 #elif defined (__WIN32__)
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
970 STARTUPINFO si;
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
971 PROCESS_INFORMATION pi;
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
972 ZeroMemory (&si, sizeof (si));
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
973 ZeroMemory (&pi, sizeof (pi));
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14429
diff changeset
974 OCTAVE_LOCAL_BUFFER (char, xcmd_str, cmd_str.length ()+1);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
975 strcpy (xcmd_str, cmd_str.c_str ());
6222
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
976
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
977 if (! CreateProcess (0, xcmd_str, 0, 0, FALSE, 0, 0, 0, &si, &pi))
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
978 error ("system: CreateProcess failed -- can't create child process");
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
979 else
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
980 {
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
981 retval(0) = pi.dwProcessId;
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
982 CloseHandle (pi.hProcess);
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
983 CloseHandle (pi.hThread);
07d967f75dba [project @ 2007-01-03 20:15:15 by jwe]
jwe
parents: 6124
diff changeset
984 }
4086
ddc722b38e87 [project @ 2002-10-03 19:08:45 by jwe]
jwe
parents: 4084
diff changeset
985 #else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
986 error ("asynchronous system calls are not supported");
4086
ddc722b38e87 [project @ 2002-10-03 19:08:45 by jwe]
jwe
parents: 4084
diff changeset
987 #endif
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
988 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
989 else if (return_output)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
990 retval = run_command_and_return_output (cmd_str);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
991 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
992 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
993 int status = system (cmd_str.c_str ());
2321
dac9933079e6 [project @ 1996-07-15 21:08:05 by jwe]
jwe
parents: 2299
diff changeset
994
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
995 // The value in status is as returned by waitpid. If
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
996 // the process exited normally, extract the actual exit
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
997 // status of the command. Otherwise, return 127 as a
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
998 // failure code.
2321
dac9933079e6 [project @ 1996-07-15 21:08:05 by jwe]
jwe
parents: 2299
diff changeset
999
15221
a83b7b2f95ee avoid C-style cast warnings from GCC for wait-related macros
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
1000 if (octave_wait::ifexited (status))
a83b7b2f95ee avoid C-style cast warnings from GCC for wait-related macros
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
1001 status = octave_wait::exitstatus (status);
2321
dac9933079e6 [project @ 1996-07-15 21:08:05 by jwe]
jwe
parents: 2299
diff changeset
1002
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1003 retval(0) = status;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1004 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1005 }
11123
fbec4b3be59f toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents: 11104
diff changeset
1006 else
12483
7a5aacf65f81 Rewrite error strings in src/ to use variables named in documentation.
Rik <octave@nomad.inbox5.com>
parents: 12208
diff changeset
1007 error ("system: expecting string as first argument");
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1008 }
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1009 else
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5814
diff changeset
1010 print_usage ();
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1011
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1012 return retval;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1013 }
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1014
12846
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1015 /*
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1016 %!test
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
1017 %! cmd = ls_command ();
12846
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1018 %! [status, output] = system (cmd);
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
1019 %! assert (status, 0);
12846
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1020 %! assert (ischar (output));
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1021 %! assert (! isempty (output));
14018
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
1022
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
1023 %!error system ()
5d5685216876 Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents: 14016
diff changeset
1024 %!error system (1, 2, 3)
12846
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1025 */
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1026
5775
ace8d8d26933 [project @ 2006-04-24 19:13:06 by jwe]
jwe
parents: 5765
diff changeset
1027 // FIXME -- this should really be static, but that causes
2614
ae47b0911863 [project @ 1997-01-21 03:57:46 by jwe]
jwe
parents: 2554
diff changeset
1028 // problems on some systems.
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1029 std::list<std::string> octave_atexit_functions;
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1030
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1031 void
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1032 do_octave_atexit (void)
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1033 {
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1034 static bool deja_vu = false;
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1035
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1036 while (! octave_atexit_functions.empty ())
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1037 {
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1038 std::string fcn = octave_atexit_functions.front ();
4214
b9317f3973ec [project @ 2002-12-04 04:57:01 by jwe]
jwe
parents: 4208
diff changeset
1039
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1040 octave_atexit_functions.pop_front ();
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1041
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1042 OCTAVE_SAFE_CALL (reset_error_handler, ());
5237
652e8aa49fa7 [project @ 2005-03-23 21:28:45 by jwe]
jwe
parents: 5235
diff changeset
1043
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1044 OCTAVE_SAFE_CALL (feval, (fcn, octave_value_list (), 0));
3215
bc3fdfe311a3 [project @ 1998-11-10 14:06:21 by jwe]
jwe
parents: 3202
diff changeset
1045
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1046 OCTAVE_SAFE_CALL (flush_octave_stdout, ());
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1047 }
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1048
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1049 if (! deja_vu)
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1050 {
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1051 deja_vu = true;
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1052
6068
c9f0839c583f [project @ 2006-10-20 16:54:30 by jwe]
jwe
parents: 6043
diff changeset
1053 // Do this explicitly so that destructors for mex file objects
c9f0839c583f [project @ 2006-10-20 16:54:30 by jwe]
jwe
parents: 6043
diff changeset
1054 // are called, so that functions registered with mexAtExit are
c9f0839c583f [project @ 2006-10-20 16:54:30 by jwe]
jwe
parents: 6043
diff changeset
1055 // called.
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1056 OCTAVE_SAFE_CALL (clear_mex_functions, ());
6068
c9f0839c583f [project @ 2006-10-20 16:54:30 by jwe]
jwe
parents: 6043
diff changeset
1057
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1058 OCTAVE_SAFE_CALL (command_editor::restore_terminal_state, ());
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1059
5775
ace8d8d26933 [project @ 2006-04-24 19:13:06 by jwe]
jwe
parents: 5765
diff changeset
1060 // FIXME -- is this needed? Can it cause any trouble?
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1061 OCTAVE_SAFE_CALL (raw_mode, (0));
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1062
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1063 OCTAVE_SAFE_CALL (octave_history_write_timestamp, ());
5305
539428e4606a [project @ 2005-04-26 02:59:08 by jwe]
jwe
parents: 5285
diff changeset
1064
12989
00235a6446da eliminate duplication of internal variables controlling command history
John W. Eaton <jwe@octave.org>
parents: 12846
diff changeset
1065 if (! command_history::ignoring_entries ())
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1066 OCTAVE_SAFE_CALL (command_history::clean_up_and_save, ());
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1067
14073
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1068 OCTAVE_SAFE_CALL (gh_manager::close_all_figures, ());
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1069
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1070 OCTAVE_SAFE_CALL (gtk_manager::unload_all_toolkits, ());
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1071
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1072 OCTAVE_SAFE_CALL (close_files, ());
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1073
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1074 OCTAVE_SAFE_CALL (cleanup_tmp_files, ());
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1075
14073
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1076 OCTAVE_SAFE_CALL (symbol_table::cleanup, ());
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1077
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1078 OCTAVE_SAFE_CALL (cleanup_parser, ());
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1079
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1080 OCTAVE_SAFE_CALL (sysdep_cleanup, ());
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1081
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1082 OCTAVE_SAFE_CALL (flush_octave_stdout, ());
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1083
5305
539428e4606a [project @ 2005-04-26 02:59:08 by jwe]
jwe
parents: 5285
diff changeset
1084 if (! quitting_gracefully && (interactive || forced_interactive))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1085 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1086 octave_stdout << "\n";
5629
489a475073d7 [project @ 2006-02-20 21:47:12 by jwe]
jwe
parents: 5510
diff changeset
1087
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1088 // Yes, we want this to be separate from the call to
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1089 // flush_octave_stdout above.
5629
489a475073d7 [project @ 2006-02-20 21:47:12 by jwe]
jwe
parents: 5510
diff changeset
1090
14014
907d03def9d5 explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents: 13983
diff changeset
1091 OCTAVE_SAFE_CALL (flush_octave_stdout, ());
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1092 }
14073
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1093
14156
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1094 // Don't call singleton_cleanup_list::cleanup until we have the
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1095 // problems with registering/unregistering types worked out. For
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1096 // example, uncomment the following line, then use the make_int
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1097 // function from the examples directory to create an integer
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1098 // object and then exit Octave. Octave should crash with a
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1099 // segfault when cleaning up the typinfo singleton. We need some
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1100 // way to force new octave_value_X types that are created in
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1101 // .oct files to be unregistered when the .oct file shared library
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1102 // is unloaded.
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1103 //
d5d3037cbc11 don't call singleton_cleanup_list::cleanup on exit.
John W. Eaton <jwe@octave.org>
parents: 14144
diff changeset
1104 // OCTAVE_SAFE_CALL (singleton_cleanup_list::cleanup, ());
14073
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1105
5cbc978a27e8 close all figures before closing all files (bug #35064)
John W. Eaton <jwe@octave.org>
parents: 14021
diff changeset
1106 OCTAVE_SAFE_CALL (octave_chunk_buffer::clear, ());
3216
60a89a69a70a [project @ 1998-11-11 20:47:03 by jwe]
jwe
parents: 3215
diff changeset
1107 }
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1108 }
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1109
7409
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1110 void
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1111 octave_add_atexit_function (const std::string& fname)
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1112 {
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1113 octave_atexit_functions.push_front (fname);
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1114 }
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1115
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1116 bool
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1117 octave_remove_atexit_function (const std::string& fname)
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1118 {
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1119 bool found = false;
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1120
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1121 for (std::list<std::string>::iterator p = octave_atexit_functions.begin ();
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1122 p != octave_atexit_functions.end (); p++)
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1123 {
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1124 if (*p == fname)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1125 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1126 octave_atexit_functions.erase (p);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1127 found = true;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1128 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1129 }
7409
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1130 }
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1131
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1132 return found;
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1133 }
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1134
73036cdd855d [project @ 2008-01-22 20:31:59 by jwe]
jwe
parents: 7361
diff changeset
1135
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1136 DEFUN (atexit, args, nargout,
3332
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1137 "-*- texinfo -*-\n\
10840
89f4d7e294cc Grammarcheck .cc files
Rik <octave@nomad.inbox5.com>
parents: 10839
diff changeset
1138 @deftypefn {Built-in Function} {} atexit (@var{fcn})\n\
9133
c0cef1436788 Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents: 9079
diff changeset
1139 @deftypefnx {Built-in Function} {} atexit (@var{fcn}, @var{flag})\n\
3332
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1140 Register a function to be called when Octave exits. For example,\n\
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1141 \n\
3332
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1142 @example\n\
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1143 @group\n\
9035
57649dcecb55 Documentation cleanup of basics.texi
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
1144 function last_words ()\n\
6620
bf4bdc21dc8d [project @ 2007-05-14 17:35:46 by jwe]
jwe
parents: 6615
diff changeset
1145 disp (\"Bye bye\");\n\
3332
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1146 endfunction\n\
9035
57649dcecb55 Documentation cleanup of basics.texi
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
1147 atexit (\"last_words\");\n\
3332
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1148 @end group\n\
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1149 @end example\n\
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1150 \n\
7c03933635c6 [project @ 1999-11-02 06:57:12 by jwe]
jwe
parents: 3325
diff changeset
1151 @noindent\n\
6620
bf4bdc21dc8d [project @ 2007-05-14 17:35:46 by jwe]
jwe
parents: 6615
diff changeset
1152 will print the message \"Bye bye\" when Octave exits.\n\
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1153 \n\
9133
c0cef1436788 Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents: 9079
diff changeset
1154 The additional argument @var{flag} will register or unregister\n\
c0cef1436788 Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents: 9079
diff changeset
1155 @var{fcn} from the list of functions to be called when Octave\n\
c0cef1436788 Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents: 9079
diff changeset
1156 exits. If @var{flag} is true, the function is registered, and if\n\
c0cef1436788 Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents: 9079
diff changeset
1157 @var{flag} is false, it is unregistered. For example,\n\
c0cef1436788 Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents: 9079
diff changeset
1158 after registering the function @code{last_words} above,\n\
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1159 \n\
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1160 @example\n\
9035
57649dcecb55 Documentation cleanup of basics.texi
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
1161 atexit (\"last_words\", false);\n\
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1162 @end example\n\
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1163 \n\
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1164 @noindent\n\
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1165 will remove the function from the list and Octave will not call\n\
9133
c0cef1436788 Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents: 9079
diff changeset
1166 @code{last_words} when it exits.\n\
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1167 \n\
7001
8b0cfeb06365 [project @ 2007-10-10 18:02:59 by jwe]
jwe
parents: 6789
diff changeset
1168 Note that @code{atexit} only removes the first occurrence of a function\n\
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1169 from the list, so if a function was placed in the list multiple\n\
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1170 times with @code{atexit}, it must also be removed from the list\n\
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1171 multiple times.\n\
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 3332
diff changeset
1172 @end deftypefn")
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1173 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 2084
diff changeset
1174 octave_value_list retval;
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1175
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1176 int nargin = args.length ();
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1177
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1178 if (nargin == 1 || nargin == 2)
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1179 {
3523
b80bbb43a1a9 [project @ 2000-02-02 10:25:52 by jwe]
jwe
parents: 3503
diff changeset
1180 std::string arg = args(0).string_value ();
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1181
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1182 if (! error_state)
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1183 {
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1184 bool add_mode = true;
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1185
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1186 if (nargin == 2)
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1187 {
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1188 add_mode = args(1).bool_value ();
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1189
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1190 if (error_state)
12483
7a5aacf65f81 Rewrite error strings in src/ to use variables named in documentation.
Rik <octave@nomad.inbox5.com>
parents: 12208
diff changeset
1191 error ("atexit: FLAG argument must be a logical value");
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1192 }
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1193
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1194 if (! error_state)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1195 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1196 if (add_mode)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1197 octave_add_atexit_function (arg);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1198 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1199 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1200 bool found = octave_remove_atexit_function (arg);
6680
cd39d4a0b671 [project @ 2007-05-31 20:23:45 by jwe]
jwe
parents: 6676
diff changeset
1201
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1202 if (nargout > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1203 retval(0) = found;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1204 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1205 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1206 }
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1207 else
12483
7a5aacf65f81 Rewrite error strings in src/ to use variables named in documentation.
Rik <octave@nomad.inbox5.com>
parents: 12208
diff changeset
1208 error ("atexit: FCN argument must be a string");
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1209 }
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1210 else
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5814
diff changeset
1211 print_usage ();
2077
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1212
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1213 return retval;
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1214 }
2d03b8eb891d [project @ 1996-04-24 00:21:21 by jwe]
jwe
parents: 2068
diff changeset
1215
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1216 DEFUN (octave_config_info, args, ,
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
1217 "-*- texinfo -*-\n\
12208
9611014e7cf1 Add function compare_versions to documentation.
Rik <octave@nomad.inbox5.com>
parents: 12195
diff changeset
1218 @deftypefn {Built-in Function} {} octave_config_info ()\n\
9611014e7cf1 Add function compare_versions to documentation.
Rik <octave@nomad.inbox5.com>
parents: 12195
diff changeset
1219 @deftypefnx {Built-in Function} {} octave_config_info (@var{option})\n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
1220 Return a structure containing configuration and installation\n\
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
1221 information for Octave.\n\
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1222 \n\
12208
9611014e7cf1 Add function compare_versions to documentation.
Rik <octave@nomad.inbox5.com>
parents: 12195
diff changeset
1223 If @var{option} is a string, return the configuration information for the\n\
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1224 specified option.\n\
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1225 \n\
3301
02866242d3ae [project @ 1999-10-20 04:10:46 by jwe]
jwe
parents: 3273
diff changeset
1226 @end deftypefn")
2162
a940dcdfe9de [project @ 1996-05-13 10:31:51 by jwe]
jwe
parents: 2145
diff changeset
1227 {
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1228 octave_value retval;
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1229
4128
919b2f6573ee [project @ 2002-10-25 20:36:14 by jwe]
jwe
parents: 4111
diff changeset
1230 #if defined (ENABLE_DYNAMIC_LINKING)
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1231 bool octave_supports_dynamic_linking = true;
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1232 #else
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1233 bool octave_supports_dynamic_linking = false;
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1234 #endif
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1235
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1236 static bool initialized = false;
11066
e678346a47d9 toplev.cc, sighandlers.cc, utils.cc, octave.cc, pt-eval.cc pt-idx.cc: Octave_map to octave_map and octave_scalar_map conversion
John W. Eaton <jwe@octave.org>
parents: 11023
diff changeset
1237 static octave_scalar_map m;
2162
a940dcdfe9de [project @ 1996-05-13 10:31:51 by jwe]
jwe
parents: 2145
diff changeset
1238
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1239 struct conf_info_struct
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1240 {
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1241 bool subst_home;
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1242 const char *key;
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1243 const char *val;
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1244 };
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1245
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1246 static const conf_info_struct conf_info[] =
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1247 {
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1248 { false, "ALL_CFLAGS", OCTAVE_CONF_ALL_CFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1249 { false, "ALL_CXXFLAGS", OCTAVE_CONF_ALL_CXXFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1250 { false, "ALL_FFLAGS", OCTAVE_CONF_ALL_FFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1251 { false, "ALL_LDFLAGS", OCTAVE_CONF_ALL_LDFLAGS },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1252 { false, "AMD_CPPFLAGS", OCTAVE_CONF_AMD_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1253 { false, "AMD_LDFLAGS", OCTAVE_CONF_AMD_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1254 { false, "AMD_LIBS", OCTAVE_CONF_AMD_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1255 { false, "AR", OCTAVE_CONF_AR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1256 { false, "ARFLAGS", OCTAVE_CONF_ARFLAGS },
14144
834df9f10963 remove ARPACK files from sources and restore configure checks for external ARPACK library
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1257 { false, "ARPACK_CPPFLAGS", OCTAVE_CONF_ARPACK_CPPFLAGS },
834df9f10963 remove ARPACK files from sources and restore configure checks for external ARPACK library
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1258 { false, "ARPACK_LDFLAGS", OCTAVE_CONF_ARPACK_LDFLAGS },
834df9f10963 remove ARPACK files from sources and restore configure checks for external ARPACK library
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1259 { false, "ARPACK_LIBS", OCTAVE_CONF_ARPACK_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1260 { false, "BLAS_LIBS", OCTAVE_CONF_BLAS_LIBS },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1261 { false, "CAMD_CPPFLAGS", OCTAVE_CONF_CAMD_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1262 { false, "CAMD_LDFLAGS", OCTAVE_CONF_CAMD_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1263 { false, "CAMD_LIBS", OCTAVE_CONF_CAMD_LIBS },
15424
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1264 { false, "CARBON_LIBS", OCTAVE_CONF_CARBON_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1265 { false, "CC", OCTAVE_CONF_CC },
15167
1c711a646fa7 Deprecate configure variables CC_VERSION, CXX_VERSION.
Rik <rik@octave.org>
parents: 15154
diff changeset
1266 // FIXME: CC_VERSION is deprecated. Remove in version 3.12
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1267 { false, "CC_VERSION", OCTAVE_CONF_CC_VERSION },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1268 { false, "CCOLAMD_CPPFLAGS", OCTAVE_CONF_CCOLAMD_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1269 { false, "CCOLAMD_LDFLAGS", OCTAVE_CONF_CCOLAMD_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1270 { false, "CCOLAMD_LIBS", OCTAVE_CONF_CCOLAMD_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1271 { false, "CFLAGS", OCTAVE_CONF_CFLAGS },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1272 { false, "CHOLMOD_CPPFLAGS", OCTAVE_CONF_CHOLMOD_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1273 { false, "CHOLMOD_LDFLAGS", OCTAVE_CONF_CHOLMOD_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1274 { false, "CHOLMOD_LIBS", OCTAVE_CONF_CHOLMOD_LIBS },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1275 { false, "COLAMD_CPPFLAGS", OCTAVE_CONF_COLAMD_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1276 { false, "COLAMD_LDFLAGS", OCTAVE_CONF_COLAMD_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1277 { false, "COLAMD_LIBS", OCTAVE_CONF_COLAMD_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1278 { false, "CPICFLAG", OCTAVE_CONF_CPICFLAG },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1279 { false, "CPPFLAGS", OCTAVE_CONF_CPPFLAGS },
9519
ee99f9f37505 improve configure checks for qhull and curl libs
John W. Eaton <jwe@octave.org>
parents: 9515
diff changeset
1280 { false, "CURL_CPPFLAGS", OCTAVE_CONF_CURL_CPPFLAGS },
ee99f9f37505 improve configure checks for qhull and curl libs
John W. Eaton <jwe@octave.org>
parents: 9515
diff changeset
1281 { false, "CURL_LDFLAGS", OCTAVE_CONF_CURL_LDFLAGS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1282 { false, "CURL_LIBS", OCTAVE_CONF_CURL_LIBS },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1283 { false, "CXSPARSE_CPPFLAGS", OCTAVE_CONF_CXSPARSE_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1284 { false, "CXSPARSE_LDFLAGS", OCTAVE_CONF_CXSPARSE_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1285 { false, "CXSPARSE_LIBS", OCTAVE_CONF_CXSPARSE_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1286 { false, "CXX", OCTAVE_CONF_CXX },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1287 { false, "CXXCPP", OCTAVE_CONF_CXXCPP },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1288 { false, "CXXFLAGS", OCTAVE_CONF_CXXFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1289 { false, "CXXPICFLAG", OCTAVE_CONF_CXXPICFLAG },
15167
1c711a646fa7 Deprecate configure variables CC_VERSION, CXX_VERSION.
Rik <rik@octave.org>
parents: 15154
diff changeset
1290 // FIXME: CXX_VERSION is deprecated. Remove in version 3.12
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1291 { false, "CXX_VERSION", OCTAVE_CONF_CXX_VERSION },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1292 { false, "DEFAULT_PAGER", OCTAVE_DEFAULT_PAGER },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1293 { false, "DEFS", OCTAVE_CONF_DEFS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1294 { false, "DL_LD", OCTAVE_CONF_DL_LD },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1295 { false, "DL_LDFLAGS", OCTAVE_CONF_DL_LDFLAGS },
9515
eee9b3150446 more configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9514
diff changeset
1296 { false, "DL_LIBS", OCTAVE_CONF_DL_LIBS },
15167
1c711a646fa7 Deprecate configure variables CC_VERSION, CXX_VERSION.
Rik <rik@octave.org>
parents: 15154
diff changeset
1297 { false, "GCC_VERSION", OCTAVE_CONF_GCC_VERSION },
1c711a646fa7 Deprecate configure variables CC_VERSION, CXX_VERSION.
Rik <rik@octave.org>
parents: 15154
diff changeset
1298 { false, "GXX_VERSION", OCTAVE_CONF_GXX_VERSION },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1299 { false, "ENABLE_DYNAMIC_LINKING", OCTAVE_CONF_ENABLE_DYNAMIC_LINKING },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1300 { false, "EXEEXT", OCTAVE_CONF_EXEEXT },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1301 { false, "F77", OCTAVE_CONF_F77 },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1302 { false, "F77_FLOAT_STORE_FLAG", OCTAVE_CONF_F77_FLOAT_STORE_FLAG },
10331
6a50aa2cdf00 never compile ranlib with 8-byte integers
John W. Eaton <jwe@octave.org>
parents: 10315
diff changeset
1303 { false, "F77_INTEGER_8_FLAG", OCTAVE_CONF_F77_INTEGER_8_FLAG },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1304 { false, "FC", OCTAVE_CONF_FC },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1305 { false, "FFLAGS", OCTAVE_CONF_FFLAGS },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1306 { false, "FFTW3_CPPFLAGS", OCTAVE_CONF_FFTW3_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1307 { false, "FFTW3_LDFLAGS", OCTAVE_CONF_FFTW3_LDFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1308 { false, "FFTW3_LIBS", OCTAVE_CONF_FFTW3_LIBS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1309 { false, "FFTW3F_CPPFLAGS", OCTAVE_CONF_FFTW3F_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1310 { false, "FFTW3F_LDFLAGS", OCTAVE_CONF_FFTW3F_LDFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1311 { false, "FFTW3F_LIBS", OCTAVE_CONF_FFTW3F_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1312 { false, "FLIBS", OCTAVE_CONF_FLIBS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1313 { false, "FPICFLAG", OCTAVE_CONF_FPICFLAG },
15424
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1314 { false, "FT2_CFLAGS", OCTAVE_CONF_FT2_CFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1315 { false, "FT2_LIBS", OCTAVE_CONF_FT2_LIBS },
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1316 { false, "GLPK_CPPFLAGS", OCTAVE_CONF_GLPK_CPPFLAGS },
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9519
diff changeset
1317 { false, "GLPK_LDFLAGS", OCTAVE_CONF_GLPK_LDFLAGS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1318 { false, "GLPK_LIBS", OCTAVE_CONF_GLPK_LIBS },
7361
a2870fd8ac58 [project @ 2008-01-12 07:50:54 by jwe]
jwe
parents: 7336
diff changeset
1319 { false, "GNUPLOT", OCTAVE_CONF_GNUPLOT },
15424
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1320 { false, "GRAPHICS_CFLAGS", OCTAVE_CONF_GRAPHICS_CFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1321 { false, "GRAPHICS_LIBS", OCTAVE_CONF_GRAPHICS_LIBS },
9542
f5ec5dc66824 use OCTAVE_CHECK_LIBRARY to check for HDF5
John W. Eaton <jwe@octave.org>
parents: 9538
diff changeset
1322 { false, "HDF5_CPPFLAGS", OCTAVE_CONF_HDF5_CPPFLAGS },
f5ec5dc66824 use OCTAVE_CHECK_LIBRARY to check for HDF5
John W. Eaton <jwe@octave.org>
parents: 9538
diff changeset
1323 { false, "HDF5_LDFLAGS", OCTAVE_CONF_HDF5_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1324 { false, "HDF5_LIBS", OCTAVE_CONF_HDF5_LIBS },
9794
0d4613a736e9 convert build system to use automake and libtool
John W. Eaton <jwe@octave.org>
parents: 9575
diff changeset
1325 { false, "LAPACK_LIBS", OCTAVE_CONF_LAPACK_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1326 { false, "LDFLAGS", OCTAVE_CONF_LDFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1327 { false, "LD_CXX", OCTAVE_CONF_LD_CXX },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1328 { false, "LD_STATIC_FLAG", OCTAVE_CONF_LD_STATIC_FLAG },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1329 { false, "LEX", OCTAVE_CONF_LEX },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1330 { false, "LEXLIB", OCTAVE_CONF_LEXLIB },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1331 { false, "LFLAGS", OCTAVE_CONF_LFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1332 { false, "LIBEXT", OCTAVE_CONF_LIBEXT },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1333 { false, "LIBFLAGS", OCTAVE_CONF_LIBFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1334 { false, "LIBOCTAVE", OCTAVE_CONF_LIBOCTAVE },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1335 { false, "LIBOCTINTERP", OCTAVE_CONF_LIBOCTINTERP },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1336 { false, "LIBS", OCTAVE_CONF_LIBS },
15424
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1337 { false, "LLVM_CPPFLAGS", OCTAVE_CONF_LLVM_CPPFLAGS },
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1338 { false, "LLVM_LDFLAGS", OCTAVE_CONF_LLVM_LDFLAGS },
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1339 { false, "LLVM_LIBS", OCTAVE_CONF_LLVM_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1340 { false, "LN_S", OCTAVE_CONF_LN_S },
9575
55ecaefb7d0f Use pkg-config to configure GraphicsMagick++.
David Grundberg <individ@acc.umu.se>
parents: 9572
diff changeset
1341 { false, "MAGICK_CPPFLAGS", OCTAVE_CONF_MAGICK_CPPFLAGS },
55ecaefb7d0f Use pkg-config to configure GraphicsMagick++.
David Grundberg <individ@acc.umu.se>
parents: 9572
diff changeset
1342 { false, "MAGICK_LDFLAGS", OCTAVE_CONF_MAGICK_LDFLAGS },
7926
d74f996e005d __magick_read__.cc: configuration and style fixes
John W. Eaton <jwe@octave.org>
parents: 7923
diff changeset
1343 { false, "MAGICK_LIBS", OCTAVE_CONF_MAGICK_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1344 { false, "MKOCTFILE_DL_LDFLAGS", OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS },
13010
edc5ec6e949b maint: allow --enable-static --disable-dl to work again
John W. Eaton <jwe@octave.org>
parents: 12989
diff changeset
1345 { false, "OCTAVE_LINK_DEPS", OCTAVE_CONF_OCTAVE_LINK_DEPS },
edc5ec6e949b maint: allow --enable-static --disable-dl to work again
John W. Eaton <jwe@octave.org>
parents: 12989
diff changeset
1346 { false, "OCTAVE_LINK_OPTS", OCTAVE_CONF_OCTAVE_LINK_OPTS },
edc5ec6e949b maint: allow --enable-static --disable-dl to work again
John W. Eaton <jwe@octave.org>
parents: 12989
diff changeset
1347 { false, "OCT_LINK_DEPS", OCTAVE_CONF_OCT_LINK_DEPS },
edc5ec6e949b maint: allow --enable-static --disable-dl to work again
John W. Eaton <jwe@octave.org>
parents: 12989
diff changeset
1348 { false, "OCT_LINK_OPTS", OCTAVE_CONF_OCT_LINK_OPTS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1349 { false, "OPENGL_LIBS", OCTAVE_CONF_OPENGL_LIBS },
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1350 { false, "PTHREAD_CFLAGS", OCTAVE_CONF_PTHREAD_CFLAGS },
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1351 { false, "PTHREAD_LIBS", OCTAVE_CONF_PTHREAD_LIBS },
9519
ee99f9f37505 improve configure checks for qhull and curl libs
John W. Eaton <jwe@octave.org>
parents: 9515
diff changeset
1352 { false, "QHULL_CPPFLAGS", OCTAVE_CONF_QHULL_CPPFLAGS },
ee99f9f37505 improve configure checks for qhull and curl libs
John W. Eaton <jwe@octave.org>
parents: 9515
diff changeset
1353 { false, "QHULL_LDFLAGS", OCTAVE_CONF_QHULL_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1354 { false, "QHULL_LIBS", OCTAVE_CONF_QHULL_LIBS },
9570
1ab56c73ec7c use OCTAVE_CHECK_LIBRARY to check for qrupdate library
John W. Eaton <jwe@octave.org>
parents: 9568
diff changeset
1355 { false, "QRUPDATE_CPPFLAGS", OCTAVE_CONF_QRUPDATE_CPPFLAGS },
1ab56c73ec7c use OCTAVE_CHECK_LIBRARY to check for qrupdate library
John W. Eaton <jwe@octave.org>
parents: 9568
diff changeset
1356 { false, "QRUPDATE_LDFLAGS", OCTAVE_CONF_QRUPDATE_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1357 { false, "QRUPDATE_LIBS", OCTAVE_CONF_QRUPDATE_LIBS },
15596
5f031158c693 Use pkg-config to discover Qt (pkg-config is already a requirement anyway).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15467
diff changeset
1358 { false, "QT_CPPFLAGS", OCTAVE_CONF_QT_CPPFLAGS },
5f031158c693 Use pkg-config to discover Qt (pkg-config is already a requirement anyway).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15467
diff changeset
1359 { false, "QT_LDFLAGS", OCTAVE_CONF_QT_LDFLAGS },
5f031158c693 Use pkg-config to discover Qt (pkg-config is already a requirement anyway).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15467
diff changeset
1360 { false, "QT_LIBS", OCTAVE_CONF_QT_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1361 { false, "RANLIB", OCTAVE_CONF_RANLIB },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1362 { false, "RDYNAMIC_FLAG", OCTAVE_CONF_RDYNAMIC_FLAG },
9515
eee9b3150446 more configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9514
diff changeset
1363 { false, "READLINE_LIBS", OCTAVE_CONF_READLINE_LIBS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1364 { false, "REGEX_LIBS", OCTAVE_CONF_REGEX_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1365 { false, "SED", OCTAVE_CONF_SED },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1366 { false, "SHARED_LIBS", OCTAVE_CONF_SHARED_LIBS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1367 { false, "SHLEXT", OCTAVE_CONF_SHLEXT },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1368 { false, "SHLEXT_VER", OCTAVE_CONF_SHLEXT_VER },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1369 { false, "SH_LD", OCTAVE_CONF_SH_LD },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1370 { false, "SH_LDFLAGS", OCTAVE_CONF_SH_LDFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1371 { false, "SONAME_FLAGS", OCTAVE_CONF_SONAME_FLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1372 { false, "STATIC_LIBS", OCTAVE_CONF_STATIC_LIBS },
9515
eee9b3150446 more configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9514
diff changeset
1373 { false, "TERM_LIBS", OCTAVE_CONF_TERM_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1374 { false, "UGLY_DEFS", OCTAVE_CONF_UGLY_DEFS },
9572
ab8a163f2052 use OCTAVE_CHECK_LIB to check for UMFPACK
John W. Eaton <jwe@octave.org>
parents: 9570
diff changeset
1375 { false, "UMFPACK_CPPFLAGS", OCTAVE_CONF_UMFPACK_CPPFLAGS },
ab8a163f2052 use OCTAVE_CHECK_LIB to check for UMFPACK
John W. Eaton <jwe@octave.org>
parents: 9570
diff changeset
1376 { false, "UMFPACK_LDFLAGS", OCTAVE_CONF_UMFPACK_LDFLAGS },
9514
af86991d8d47 configure tweaks
John W. Eaton <jwe@octave.org>
parents: 9484
diff changeset
1377 { false, "UMFPACK_LIBS", OCTAVE_CONF_UMFPACK_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1378 { false, "USE_64_BIT_IDX_T", OCTAVE_CONF_USE_64_BIT_IDX_T },
15424
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1379 { false, "WARN_CFLAGS", OCTAVE_CONF_WARN_CFLAGS },
cabe2fa4566c build: Add and organize octave_config_info variables.
Rik <rik@octave.org>
parents: 15307
diff changeset
1380 { false, "WARN_CXXFLAGS", OCTAVE_CONF_WARN_CXXFLAGS },
8772
aeedc045cfe3 toplev.cc (Foctave_config_info): add CARBON_LIBS, X11_INCFLAGS, and X11_LIBS to the struct
John W. Eaton <jwe@octave.org>
parents: 8735
diff changeset
1381 { false, "X11_INCFLAGS", OCTAVE_CONF_X11_INCFLAGS },
aeedc045cfe3 toplev.cc (Foctave_config_info): add CARBON_LIBS, X11_INCFLAGS, and X11_LIBS to the struct
John W. Eaton <jwe@octave.org>
parents: 8735
diff changeset
1382 { false, "X11_LIBS", OCTAVE_CONF_X11_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1383 { false, "XTRA_CFLAGS", OCTAVE_CONF_XTRA_CFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1384 { false, "XTRA_CXXFLAGS", OCTAVE_CONF_XTRA_CXXFLAGS },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1385 { false, "YACC", OCTAVE_CONF_YACC },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1386 { false, "YFLAGS", OCTAVE_CONF_YFLAGS },
9538
d0239bddf621 use OCTAVE_CHECK_LIB to check for zlib
John W. Eaton <jwe@octave.org>
parents: 9523
diff changeset
1387 { false, "Z_CPPFLAGS", OCTAVE_CONF_Z_CPPFLAGS },
d0239bddf621 use OCTAVE_CHECK_LIB to check for zlib
John W. Eaton <jwe@octave.org>
parents: 9523
diff changeset
1388 { false, "Z_LDFLAGS", OCTAVE_CONF_Z_LDFLAGS },
d0239bddf621 use OCTAVE_CHECK_LIB to check for zlib
John W. Eaton <jwe@octave.org>
parents: 9523
diff changeset
1389 { false, "Z_LIBS", OCTAVE_CONF_Z_LIBS },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1390 { false, "api_version", OCTAVE_API_VERSION },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1391 { true, "archlibdir", OCTAVE_ARCHLIBDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1392 { true, "bindir", OCTAVE_BINDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1393 { false, "canonical_host_type", OCTAVE_CANONICAL_HOST_TYPE },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1394 { false, "config_opts", OCTAVE_CONF_config_opts },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1395 { true, "datadir", OCTAVE_DATADIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1396 { true, "datarootdir", OCTAVE_DATAROOTDIR },
6276
d26c558691cd [project @ 2007-02-07 09:01:24 by jwe]
jwe
parents: 6274
diff changeset
1397 { true, "exec_prefix", OCTAVE_EXEC_PREFIX },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1398 { true, "fcnfiledir", OCTAVE_FCNFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1399 { true, "imagedir", OCTAVE_IMAGEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1400 { true, "includedir", OCTAVE_INCLUDEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1401 { true, "infodir", OCTAVE_INFODIR },
6276
d26c558691cd [project @ 2007-02-07 09:01:24 by jwe]
jwe
parents: 6274
diff changeset
1402 { true, "infofile", OCTAVE_INFOFILE },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1403 { true, "libdir", OCTAVE_LIBDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1404 { true, "libexecdir", OCTAVE_LIBEXECDIR },
6311
e2a1aca62551 [project @ 2007-02-15 21:18:34 by jwe]
jwe
parents: 6276
diff changeset
1405 { true, "localapiarchlibdir", OCTAVE_LOCALAPIARCHLIBDIR },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1406 { true, "localapifcnfiledir", OCTAVE_LOCALAPIFCNFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1407 { true, "localapioctfiledir", OCTAVE_LOCALAPIOCTFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1408 { true, "localarchlibdir", OCTAVE_LOCALARCHLIBDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1409 { true, "localfcnfiledir", OCTAVE_LOCALFCNFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1410 { true, "localoctfiledir", OCTAVE_LOCALOCTFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1411 { true, "localstartupfiledir", OCTAVE_LOCALSTARTUPFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1412 { true, "localverarchlibdir", OCTAVE_LOCALVERARCHLIBDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1413 { true, "localverfcnfiledir", OCTAVE_LOCALVERFCNFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1414 { true, "localveroctfiledir", OCTAVE_LOCALVEROCTFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1415 { true, "man1dir", OCTAVE_MAN1DIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1416 { false, "man1ext", OCTAVE_MAN1EXT },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1417 { true, "mandir", OCTAVE_MANDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1418 { true, "octfiledir", OCTAVE_OCTFILEDIR },
8719
679c270b7584 install DOC and NEWS in $octetcdir
John W. Eaton <jwe@octave.org>
parents: 8704
diff changeset
1419 { true, "octetcdir", OCTAVE_OCTETCDIR },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1420 { true, "octincludedir", OCTAVE_OCTINCLUDEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1421 { true, "octlibdir", OCTAVE_OCTLIBDIR },
16019
5b2126a8c84f install tests and functions to run them
John W. Eaton <jwe@octave.org>
parents: 15756
diff changeset
1422 { true, "octtestsdir", OCTAVE_OCTTESTSDIR },
6276
d26c558691cd [project @ 2007-02-07 09:01:24 by jwe]
jwe
parents: 6274
diff changeset
1423 { true, "prefix", OCTAVE_PREFIX },
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1424 { true, "startupfiledir", OCTAVE_STARTUPFILEDIR },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1425 { false, "version", OCTAVE_VERSION },
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1426 { false, 0, 0 }
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1427 };
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1428
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1429 if (! initialized)
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1430 {
4675
f6d6335c08f6 [project @ 2003-12-16 05:11:26 by jwe]
jwe
parents: 4494
diff changeset
1431 m.assign ("dld", octave_value (octave_supports_dynamic_linking));
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1432
4697
c26904f532f1 [project @ 2004-01-16 17:49:20 by jwe]
jwe
parents: 4691
diff changeset
1433 oct_mach_info::float_format ff = oct_mach_info::native_float_format ();
c26904f532f1 [project @ 2004-01-16 17:49:20 by jwe]
jwe
parents: 4691
diff changeset
1434 m.assign ("float_format",
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1435 octave_value (oct_mach_info::float_format_as_string (ff)));
4697
c26904f532f1 [project @ 2004-01-16 17:49:20 by jwe]
jwe
parents: 4691
diff changeset
1436
c26904f532f1 [project @ 2004-01-16 17:49:20 by jwe]
jwe
parents: 4691
diff changeset
1437 m.assign ("words_big_endian",
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1438 octave_value (oct_mach_info::words_big_endian ()));
4697
c26904f532f1 [project @ 2004-01-16 17:49:20 by jwe]
jwe
parents: 4691
diff changeset
1439
c26904f532f1 [project @ 2004-01-16 17:49:20 by jwe]
jwe
parents: 4691
diff changeset
1440 m.assign ("words_little_endian",
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1441 octave_value (oct_mach_info::words_little_endian ()));
4697
c26904f532f1 [project @ 2004-01-16 17:49:20 by jwe]
jwe
parents: 4691
diff changeset
1442
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1443 int i = 0;
4440
0bca8443db39 [project @ 2003-07-02 22:45:29 by jwe]
jwe
parents: 4429
diff changeset
1444
0bca8443db39 [project @ 2003-07-02 22:45:29 by jwe]
jwe
parents: 4429
diff changeset
1445 while (true)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1446 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1447 const conf_info_struct& elt = conf_info[i++];
6274
d42abdfcb8e9 [project @ 2007-02-07 07:22:02 by jwe]
jwe
parents: 6222
diff changeset
1448
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1449 const char *key = elt.key;
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1450
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1451 if (key)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1452 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1453 if (elt.subst_home)
11066
e678346a47d9 toplev.cc, sighandlers.cc, utils.cc, octave.cc, pt-eval.cc pt-idx.cc: Octave_map to octave_map and octave_scalar_map conversion
John W. Eaton <jwe@octave.org>
parents: 11023
diff changeset
1454 m.assign (key, subst_octave_home (elt.val));
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1455 else
11066
e678346a47d9 toplev.cc, sighandlers.cc, utils.cc, octave.cc, pt-eval.cc pt-idx.cc: Octave_map to octave_map and octave_scalar_map conversion
John W. Eaton <jwe@octave.org>
parents: 11023
diff changeset
1456 m.assign (key, elt.val);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1457 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1458 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1459 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1460 }
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1461
4691
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1462 bool unix_system = true;
7013
f943e9635115 [project @ 2007-10-11 19:39:02 by jwe]
jwe
parents: 7010
diff changeset
1463 bool mac_system = false;
4691
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1464 bool windows_system = false;
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1465
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1466 #if defined (WIN32)
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1467 windows_system = true;
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1468 #if !defined (__CYGWIN__)
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1469 unix_system = false;
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1470 #endif
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1471 #endif
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1472
8574
83b8c739d626 toplev.cc: check OCTAVE_USE_OS_X_API instead of __APPLE__ && __MACH__
John W. Eaton <jwe@octave.org>
parents: 8377
diff changeset
1473 #if defined (OCTAVE_USE_OS_X_API)
7010
f7d2f54008f5 [project @ 2007-10-11 17:50:34 by jwe]
jwe
parents: 7001
diff changeset
1474 mac_system = true;
f7d2f54008f5 [project @ 2007-10-11 17:50:34 by jwe]
jwe
parents: 7001
diff changeset
1475 #endif
f7d2f54008f5 [project @ 2007-10-11 17:50:34 by jwe]
jwe
parents: 7001
diff changeset
1476
4691
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1477 m.assign ("unix", octave_value (unix_system));
7010
f7d2f54008f5 [project @ 2007-10-11 17:50:34 by jwe]
jwe
parents: 7001
diff changeset
1478 m.assign ("mac", octave_value (mac_system));
4691
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1479 m.assign ("windows", octave_value (windows_system));
bdc51b369a78 [project @ 2004-01-10 18:16:02 by jwe]
jwe
parents: 4675
diff changeset
1480
4357
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1481 initialized = true;
d700cfed902a [project @ 2003-02-22 18:48:18 by jwe]
jwe
parents: 4356
diff changeset
1482 }
2162
a940dcdfe9de [project @ 1996-05-13 10:31:51 by jwe]
jwe
parents: 2145
diff changeset
1483
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1484 int nargin = args.length ();
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1485
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1486 if (nargin == 1)
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1487 {
3523
b80bbb43a1a9 [project @ 2000-02-02 10:25:52 by jwe]
jwe
parents: 3503
diff changeset
1488 std::string arg = args(0).string_value ();
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1489
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1490 if (! error_state)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1491 {
15307
b516da00c5e4 don't insert unknonwn parameters in internal octave_config_info struct
John W. Eaton <jwe@octave.org>
parents: 15271
diff changeset
1492 if (m.isfield (arg))
b516da00c5e4 don't insert unknonwn parameters in internal octave_config_info struct
John W. Eaton <jwe@octave.org>
parents: 15271
diff changeset
1493 {
b516da00c5e4 don't insert unknonwn parameters in internal octave_config_info struct
John W. Eaton <jwe@octave.org>
parents: 15271
diff changeset
1494 Cell c = m.contents (arg);
5199
16a6247730d9 [project @ 2005-03-10 20:24:45 by jwe]
jwe
parents: 5189
diff changeset
1495
15307
b516da00c5e4 don't insert unknonwn parameters in internal octave_config_info struct
John W. Eaton <jwe@octave.org>
parents: 15271
diff changeset
1496 if (c.is_empty ())
15467
049e8bbff782 maint: periodic merge of stable to default
John W. Eaton <jwe@octave.org>
parents: 15466 15451
diff changeset
1497 error ("octave_config_info: no info for '%s'", arg.c_str ());
15307
b516da00c5e4 don't insert unknonwn parameters in internal octave_config_info struct
John W. Eaton <jwe@octave.org>
parents: 15271
diff changeset
1498 else
b516da00c5e4 don't insert unknonwn parameters in internal octave_config_info struct
John W. Eaton <jwe@octave.org>
parents: 15271
diff changeset
1499 retval = c(0);
b516da00c5e4 don't insert unknonwn parameters in internal octave_config_info struct
John W. Eaton <jwe@octave.org>
parents: 15271
diff changeset
1500 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1501 else
15467
049e8bbff782 maint: periodic merge of stable to default
John W. Eaton <jwe@octave.org>
parents: 15466 15451
diff changeset
1502 error ("octave_config_info: invalid parameter '%s'", arg.c_str ());
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10212
diff changeset
1503 }
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1504 }
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1505 else if (nargin == 0)
4233
ccfdb55c8156 [project @ 2002-12-20 22:43:54 by jwe]
jwe
parents: 4221
diff changeset
1506 retval = m;
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1507 else
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5814
diff changeset
1508 print_usage ();
2689
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1509
8c7955a8d49f [project @ 1997-02-18 09:06:10 by jwe]
jwe
parents: 2675
diff changeset
1510 return retval;
2162
a940dcdfe9de [project @ 1996-05-13 10:31:51 by jwe]
jwe
parents: 2145
diff changeset
1511 }
a940dcdfe9de [project @ 1996-05-13 10:31:51 by jwe]
jwe
parents: 2145
diff changeset
1512
12846
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1513 /*
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14156
diff changeset
1514 %!assert (ischar (octave_config_info ("version")))
12846
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1515 %!test
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1516 %! x = octave_config_info ();
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1517 %! assert (isstruct (x));
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1518 %! assert (! isempty (x));
14429
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14156
diff changeset
1519
eff4a5933e28 Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14156
diff changeset
1520 %!error octave_config_info (1, 2)
12846
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1521 */
9ce9e1e2d2c8 codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
1522
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1523 #if defined (__GNUG__) && defined (DEBUG_NEW_DELETE)
2806
187d5321cfa3 [project @ 1997-03-11 05:13:15 by jwe]
jwe
parents: 2802
diff changeset
1524
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1525 int debug_new_delete = 0;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1526
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1527 typedef void (*vfp)(void);
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1528 extern vfp __new_handler;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1529
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1530 void *
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1531 __builtin_new (size_t sz)
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1532 {
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1533 void *p;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1534
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1535 /* malloc (0) is unpredictable; avoid it. */
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1536 if (sz == 0)
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1537 sz = 1;
15451
219479b461b8 build: Add missing tests and gnulib modules suggested by autoscan.
Rik <rik@octave.org>
parents: 15424
diff changeset
1538 p = gnulib::malloc (sz);
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1539 while (p == 0)
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1540 {
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1541 (*__new_handler) ();
15451
219479b461b8 build: Add missing tests and gnulib modules suggested by autoscan.
Rik <rik@octave.org>
parents: 15424
diff changeset
1542 p = gnulib::malloc (sz);
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1543 }
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1544
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1545 if (debug_new_delete)
5629
489a475073d7 [project @ 2006-02-20 21:47:12 by jwe]
jwe
parents: 5510
diff changeset
1546 std::cerr << "__builtin_new: " << p << std::endl;
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1547
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1548 return p;
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1549 }
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1550
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1551 void
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1552 __builtin_delete (void *ptr)
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1553 {
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1554 if (debug_new_delete)
5629
489a475073d7 [project @ 2006-02-20 21:47:12 by jwe]
jwe
parents: 5510
diff changeset
1555 std::cerr << "__builtin_delete: " << ptr << std::endl;
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1556
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1557 if (ptr)
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1558 free (ptr);
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1559 }
2806
187d5321cfa3 [project @ 1997-03-11 05:13:15 by jwe]
jwe
parents: 2802
diff changeset
1560
1683
5282f171363d [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents:
diff changeset
1561 #endif