Mercurial > octave
annotate liboctave/util/f77-fcn.h @ 24520:c5c11b07598a
refactor signal handling (bug #52757)
Given that any library code may now be multi-threaded it is not likely
to be save to jump out of a signal handler when executing a call to a
library function. We are almost assured to fail if the call to
siglongjmp occurs in a different thread from the corresponding call to
sigsetjmp.
Similarly, we should avoid calling the interrupt signal handler
function in an arbitrary thread. This is already done by default on
Windows systems. On Posix systems, we now set up a separate thread to
handle asynchronous signals (not just SIGINT). We no longer attempt
to jump out of the signal handler. Instead, we only set global status
variables and respond to them in octave_quit. This means that some
external library functions are no longer interruptible. If that
becomes important, then we will need to look for other alternatives
such as setting up worker threads that can be canceled when a SIGINT
is detected.
* sighandlers.cc (interrupt_manager, base_interrupt_manager,
w32_interrupt_manager, posix_interrupt_manager): Delete classes and
all uses.
(respond_to_pending_signals): Rename from signal_handler. Change all
uses. Take action on more signals.
(generic_sig_handler): Simply record that a signal was caught and add
it to the list of caught signals.
(deadly_sig_handler): New function.
(fpe_sig_handler): Rename from sigfpe_handler. Don't make specific to
Alpha systems. Simply warn that an exception has occurred.
(sigint_handler): Simply record that an interrupt signal was caught.
(sigterm_handler, sigpipe_handler): Delete.
(install_signal_handlers): Rework actions for various signals.
(Vsigquit_dumps_octave_core): New static variable.
(Fsigquit_dumps_octave_core): New function.
* io.txi: Document sigquit_dumps_octave_core.
* f77-fcn.h, f77-fcn.c (xSTRINGIZE, STRINGIZE, F77_XFCN_ERROR):
Delete macros.
(F77_XFCN): Don't do setjmp/longjmp exception handling.
(f77_exception_encountered): Delete global variable.
(XSTOPX): Don't set f77_exception_encountered. If message is empty,
report "unknown error in fortran subroutine".
* eigs-base.cc, gsvd.cc: Delete all direct uses of
f77_exception_encountered.
* liboctave/util/f77-extern.cc: Delete file.
* liboctave/util/module.mk: Update.
* cmd-edit.h, cmd-edit.cc (command_editor::interrupt_exception): New class.
(command_editor::handle_interrupt_signal): New static function.
(command_editor::do_handle_interrupt_signal): New virtual function.
(command_editor::event_hanlder): Call handle_interrupt_signal if
octave_interrupt_state is not zero.
(command_editor::instance_ok): Set event hook here.
(command_editor::add_event_hook): Not here.
(command_editor::remove_event_hook): Never remove event hook.
(gnu_readline::do_handle_interrupt_signal): New function.
(gnu_readline::do_readline): Retry if an interrupt exception occurs
inside readline.
* oct-rl-edit.h, oct-rl-edit.c (octave_rl_recover_from_interrupt):
New function.
* quit.h, cquit.c (current_context, octave_save_current_context,
octave_restore_current_context, octave_jump_to_enclosing_context,
octave_interrupt_immediately, octave_jmp_buf): Delete.
* quit.h: Don't include <setjmp.h>
(octave_set_current_context): Delete macro.
(octave_exit_exception_status, octave_exit_exception_safe_to_return):
Mark as deprecated.
(BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE_1): Delete.
(BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE_2): Delete.
(BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE,
END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE): Define to only create a
dummy do-while scope.
(BEGIN_INTERRUPT_WITH_EXCEPTIONS, END_INTERRUPT_WITH_EXCEPTIONS):
Define to only create a dummy scope.
* interpreter.cc (interpreter::recover_from_exception):
Don't reset octave_interrupt_immediately.
* main-cli.cc (main): Call octave_block_async_signals.
* main.in.cc (main): Call octave_block_async_signals initially.
Only in install signal handlers and unblock signals if starting
managed subprocess.
* main-window.cc (octave_interpreter::executed):
Don't unblock interrupt signals.
* signal-wrappers.h, signal-wrappers.c
(signal_watcher, octave_async_signals, block_or_unblock_signal_by_name): New static functions.
(octave_set_default_signal_handler,
octave_set_default_signal_handler_by_name,
octave_block_signal_by_name, octave_unblock_signal_by_name,
octave_create_interrupt_watcher_thread, octave_block_async_signals,
octave_unblock_async_signals): New functions.
(octave_block_interrupt_signal, octave_unblock_interrupt_signal):
Treat SIGBREAK as an interrupt signal.
(octave_block_child): Also handle SIGCLD the same as SIGCHLD.
(print_sigset, print_sigmask): New static functions.
(octave_show_sigmask): New function.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 03 Jan 2018 07:52:11 -0500 |
parents | 58d56f52d50a |
children | 194eb4bd202b |
rev | line source |
---|---|
2544 | 1 /* |
2 | |
23219
3ac9f9ecfae5
maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents:
23083
diff
changeset
|
3 Copyright (C) 1996-2017 John W. Eaton |
2544 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22410
diff
changeset
|
8 under the terms of the GNU General Public License as published by |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22410
diff
changeset
|
9 the Free Software Foundation; either version 3 of the License, or |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22410
diff
changeset
|
10 (at your option) any later version. |
2544 | 11 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22410
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22410
diff
changeset
|
13 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22410
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22410
diff
changeset
|
15 GNU General Public License for more details. |
2544 | 16 |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
2544 | 20 |
21 */ | |
22 | |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
20545
diff
changeset
|
23 #if ! defined (octave_f77_fcn_h) |
2544 | 24 #define octave_f77_fcn_h 1 |
25 | |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
26 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
27 |
22843
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
28 #include "lo-error.h" |
4268 | 29 #include "quit.h" |
30 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21662
diff
changeset
|
31 #if defined (__cplusplus) |
22843
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
32 # include <limits> |
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
33 #endif |
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
34 |
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
35 #if defined (__cplusplus) |
2544 | 36 extern "C" { |
37 #endif | |
38 | |
24520
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
23426
diff
changeset
|
39 /* This macro is obsolete. */ |
2544 | 40 |
24520
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
23426
diff
changeset
|
41 #define F77_XFCN(f, F, args) \ |
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
23426
diff
changeset
|
42 F77_FUNC (f, F) args |
2544 | 43 |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
20545
diff
changeset
|
44 #if ! defined (F77_FCN) |
24520
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
23426
diff
changeset
|
45 # define F77_FCN(f, F) F77_FUNC (f, F) |
3938 | 46 #endif |
47 | |
15128
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
48 /* |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
49 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
50 The following macros are used for handling Fortran <-> C calling |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
51 conventions. They are defined below for three different types of |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
52 systems, Cray (possibly now obsolete), Visual Fortran, and gfortran. |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
53 Note that we don't attempt to handle Fortran functions, we always use |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
54 subroutine wrappers for them and pass the return value as an extra |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
55 argument. |
15128
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
56 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
57 Use these macros to pass character strings from C to Fortran: |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
58 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
59 F77_CHAR_ARG(x) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
60 F77_CONST_CHAR_ARG(x) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
61 F77_CXX_STRING_ARG(x) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
62 F77_CHAR_ARG_LEN(l) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
63 F77_CHAR_ARG_DECL |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
64 F77_CONST_CHAR_ARG_DECL |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
65 F77_CHAR_ARG_LEN_DECL |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
66 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
67 Use these macros to write C-language functions that accept |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
68 Fortran-style character strings: |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
69 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
70 F77_CHAR_ARG_DEF(s, len) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
71 F77_CONST_CHAR_ARG_DEF(s, len) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
72 F77_CHAR_ARG_LEN_DEF(len) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
73 F77_CHAR_ARG_USE(s) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
74 F77_CHAR_ARG_LEN_USE(s, len) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
75 |
22133
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
76 Use these macros for C++ code |
15128
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
77 |
22133
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
78 F77_INT Equivalent to Fortran INTEGER type |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
79 F77_INT4 Equivalent to Fortran INTEGER*4 type |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
80 F77_DBLE Equivalent to Fortran DOUBLE PRECISION type |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
81 F77_REAL Equivalent to Fortran REAL type |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
82 F77_CMPLX Equivalent to Fortran COMPLEX type |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
83 F77_DBLE_CMPLX Equivalent to Fortran DOUBLE COMPLEX type |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
84 F77_LOGICAL Equivalent to Fortran LOGICAL type |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
85 F77_RET_T Return type of a C++ function that acts like a |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
86 Fortran subroutine. |
15128
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
87 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
88 Use these macros to return from C-language functions that are supposed |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
89 to act like Fortran subroutines. F77_NORETURN is intended to be used |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
90 as the last statement of such a function that has been tagged with a |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
91 "noreturn" attribute. If the compiler supports the "noreturn" |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
92 attribute or if F77_RET_T is void, then it should expand to nothing so |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
93 that we avoid warnings about functions tagged as "noreturn" |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
94 containing a return statement. Otherwise, it should expand to a |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
95 statement that returns the given value so that we avoid warnings about |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
96 not returning a value from a function declared to return something. |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
97 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
98 F77_RETURN(retval) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
99 F77_NORETURN(retval) |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
100 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
101 */ |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
102 |
4552 | 103 #if defined (F77_USES_CRAY_CALLING_CONVENTION) |
104 | |
105 #include <fortran.h> | |
6072 | 106 |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
107 /* Use these macros to pass character strings from C to Fortran. Cray |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
108 Fortran uses a descriptor structure to pass a pointer to the string |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
109 and the length in a single argument. */ |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
110 |
4552 | 111 #define F77_CHAR_ARG(x) octave_make_cray_ftn_ch_dsc (x, strlen (x)) |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
112 #define F77_CONST_CHAR_ARG(x) \ |
4552 | 113 octave_make_cray_const_ftn_ch_dsc (x, strlen (x)) |
4577 | 114 #define F77_CHAR_ARG2(x, l) octave_make_cray_ftn_ch_dsc (x, l) |
115 #define F77_CONST_CHAR_ARG2(x, l) octave_make_cray_const_ftn_ch_dsc (x, l) | |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
116 #define F77_CXX_STRING_ARG(x) \ |
4552 | 117 octave_make_cray_const_ftn_ch_dsc (x.c_str (), x.length ()) |
118 #define F77_CHAR_ARG_LEN(l) | |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
119 #define F77_CHAR_ARG_LEN_TYPE |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
120 #define F77_CHAR_ARG_LEN_DECL |
4577 | 121 #define F77_CHAR_ARG_DECL octave_cray_ftn_ch_dsc |
122 #define F77_CONST_CHAR_ARG_DECL octave_cray_ftn_ch_dsc | |
6072 | 123 |
124 /* Use these macros to write C-language functions that accept | |
125 Fortran-style character strings. */ | |
126 #define F77_CHAR_ARG_DEF(s, len) octave_cray_ftn_ch_dsc s | |
127 #define F77_CONST_CHAR_ARG_DEF(s, len) octave_cray_ftn_ch_dsc s | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
128 #define F77_CHAR_ARG_LEN_DEF(len) |
6072 | 129 #define F77_CHAR_ARG_USE(s) s.ptr |
21662
5b9868c2e212
maint: Octave coding convention cleanups.
Rik <rik@octave.org>
parents:
21244
diff
changeset
|
130 #define F77_CHAR_ARG_LEN_USE(s, len) (s.mask.len >> 3) |
6072 | 131 |
4552 | 132 #define F77_RET_T int |
15128
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
133 |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
134 /* Use these macros to return from C-language functions that are |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
135 supposed to act like Fortran subroutines. F77_NORETURN is intended |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
136 to be used as the last statement of such a function that has been |
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
137 tagged with a "noreturn" attribute. */ |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
138 |
4552 | 139 #define F77_RETURN(retval) return retval; |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21227
diff
changeset
|
140 #if defined (HAVE_OCTAVE_NORETURN_ATTR) |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21076
diff
changeset
|
141 # define F77_NORETURN(retval) |
15127
87411930d6c4
avoid "function declared 'noreturn' has a return statement" warning.
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
142 #else |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21076
diff
changeset
|
143 # define F77_NORETURN(retval) return retval; |
15127
87411930d6c4
avoid "function declared 'noreturn' has a return statement" warning.
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
144 #endif |
4552 | 145 |
21066
258c787cd9ce
maint: Use "FIXME:" consistently in code base.
Rik <rik@octave.org>
parents:
21040
diff
changeset
|
146 /* FIXME: These should work for SV1 or Y-MP systems but will |
258c787cd9ce
maint: Use "FIXME:" consistently in code base.
Rik <rik@octave.org>
parents:
21040
diff
changeset
|
147 need to be changed for others. */ |
4552 | 148 |
4558 | 149 typedef union |
4552 | 150 { |
4558 | 151 const char *const_ptr; |
152 char *ptr; | |
4552 | 153 struct |
154 { | |
155 unsigned off : 6; | |
156 unsigned len : 26; | |
157 unsigned add : 32; | |
158 } mask; | |
4558 | 159 } octave_cray_descriptor; |
4552 | 160 |
161 typedef void *octave_cray_ftn_ch_dsc; | |
162 | |
22133
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
163 #if defined (__cplusplus) |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21076
diff
changeset
|
164 # define OCTAVE_F77_FCN_INLINE inline |
4558 | 165 #else |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21076
diff
changeset
|
166 # define OCTAVE_F77_FCN_INLINE |
4555 | 167 #endif |
168 | |
169 static OCTAVE_F77_FCN_INLINE octave_cray_ftn_ch_dsc | |
4552 | 170 octave_make_cray_ftn_ch_dsc (char *ptr_arg, unsigned long len_arg) |
171 { | |
172 octave_cray_descriptor desc; | |
173 desc.ptr = ptr_arg; | |
174 desc.mask.len = len_arg << 3; | |
4558 | 175 return *((octave_cray_ftn_ch_dsc *) &desc); |
4552 | 176 } |
177 | |
4555 | 178 static OCTAVE_F77_FCN_INLINE octave_cray_ftn_ch_dsc |
4552 | 179 octave_make_cray_const_ftn_ch_dsc (const char *ptr_arg, unsigned long len_arg) |
180 { | |
181 octave_cray_descriptor desc; | |
182 desc.const_ptr = ptr_arg; | |
183 desc.mask.len = len_arg << 3; | |
4558 | 184 return *((octave_cray_ftn_ch_dsc *) &desc); |
4552 | 185 } |
186 | |
22133
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
187 #undef OCTAVE_F77_FCN_INLINE |
22157
c5842206aaea
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
188 |
4552 | 189 #elif defined (F77_USES_VISUAL_FORTRAN_CALLING_CONVENTION) |
190 | |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
191 /* Use these macros to pass character strings from C to Fortran. |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
192 Visual Fortran inserts the length after each character string |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
193 argument. */ |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
194 |
4552 | 195 #define F77_CHAR_ARG(x) x, strlen (x) |
196 #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x) | |
197 #define F77_CHAR_ARG2(x, l) x, l | |
198 #define F77_CONST_CHAR_ARG2(x, l) F77_CHAR_ARG2 (x, l) | |
199 #define F77_CXX_STRING_ARG(x) F77_CONST_CHAR_ARG2 (x.c_str (), x.length ()) | |
200 #define F77_CHAR_ARG_LEN(l) | |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
201 #define F77_CHAR_ARG_LEN_TYPE int |
4552 | 202 #define F77_CHAR_ARG_LEN_DECL |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
203 #define F77_CHAR_ARG_DECL char *, F77_CHAR_ARG_LEN_TYPE |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
204 #define F77_CONST_CHAR_ARG_DECL const char *, F77_CHAR_ARG_LEN_TYPE |
6072 | 205 |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
206 #define F77_CHAR_ARG_DEF(s, len) char *s, F77_CHAR_ARG_LEN_TYPE len |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
207 #define F77_CONST_CHAR_ARG_DEF(s, len) const char *s, F77_CHAR_ARG_LEN_TYPE len |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
208 #define F77_CHAR_ARG_LEN_DEF(len) |
6072 | 209 #define F77_CHAR_ARG_USE(s) s |
210 #define F77_CHAR_ARG_LEN_USE(s, len) len | |
211 | |
4552 | 212 #define F77_RET_T void |
15128
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
213 |
15127
87411930d6c4
avoid "function declared 'noreturn' has a return statement" warning.
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
214 #define F77_RETURN(retval) return; |
87411930d6c4
avoid "function declared 'noreturn' has a return statement" warning.
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
215 #define F77_NORETURN(retval) |
4552 | 216 |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
217 #elif defined (F77_USES_GFORTRAN_CALLING_CONVENTION) |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
218 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
219 /* Use these macros to pass character strings from C to Fortran. |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
220 gfortran appends length arguments for assumed size character |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
221 strings to the and ignores others. |
4552 | 222 |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
223 FIXME: I don't think we correctly handle the case of mixing some |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
224 fixed-length and some assumed-length character string arguments as |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
225 we don't handle each case separately, so it seems there could be |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
226 mismatch? However, I don't think we currently have to handle this |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
227 case in Octave. */ |
4552 | 228 |
229 #define F77_CHAR_ARG(x) x | |
230 #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x) | |
231 #define F77_CHAR_ARG2(x, l) x | |
232 #define F77_CONST_CHAR_ARG2(x, l) F77_CHAR_ARG2 (x, l) | |
233 #define F77_CXX_STRING_ARG(x) F77_CONST_CHAR_ARG2 (x.c_str (), x.length ()) | |
5760 | 234 #define F77_CHAR_ARG_LEN(l) , l |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
235 #define F77_CHAR_ARG_LEN_TYPE int |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
236 #define F77_CHAR_ARG_LEN_DECL , F77_CHAR_ARG_LEN_TYPE |
4552 | 237 #define F77_CHAR_ARG_DECL char * |
238 #define F77_CONST_CHAR_ARG_DECL const char * | |
6072 | 239 |
240 #define F77_CHAR_ARG_DEF(s, len) char *s | |
241 #define F77_CONST_CHAR_ARG_DEF(s, len) const char *s | |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
242 #define F77_CHAR_ARG_LEN_DEF(len) , F77_CHAR_ARG_LEN_TYPE len |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
243 #define F77_CHAR_ARG_USE(s) s |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
244 #define F77_CHAR_ARG_LEN_USE(s, len) len |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
245 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
246 #define F77_RET_T void |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
247 |
22410
bc38c1ff6698
fix definition of F77_RETURN for gfortran
John W. Eaton <jwe@octave.org>
parents:
22402
diff
changeset
|
248 #define F77_RETURN(retval) return; |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
249 #if defined (HAVE_OCTAVE_NORETURN_ATTR) |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
250 # define F77_NORETURN(retval) |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
251 #else |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
252 # define F77_NORETURN(retval) return retval; |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
253 #endif |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
254 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
255 #elif defined (F77_USES_F2C_CALLING_CONVENTION) |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
256 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
257 /* Assume f2c-compatible calling convention. */ |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
258 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
259 /* Use these macros to pass character strings from C to Fortran. f2c |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
260 appends all length arguments at the end of the parameter list. */ |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
261 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
262 #define F77_CHAR_ARG(x) x |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
263 #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x) |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
264 #define F77_CHAR_ARG2(x, l) x |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
265 #define F77_CONST_CHAR_ARG2(x, l) F77_CHAR_ARG2 (x, l) |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
266 #define F77_CXX_STRING_ARG(x) F77_CONST_CHAR_ARG2 (x.c_str (), x.length ()) |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
267 #define F77_CHAR_ARG_LEN(l) , l |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
268 #define F77_CHAR_ARG_LEN_TYPE long |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
269 #define F77_CHAR_ARG_LEN_DECL , F77_CHAR_ARG_LEN_TYPE |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
270 #define F77_CHAR_ARG_DECL char * |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
271 #define F77_CONST_CHAR_ARG_DECL const char * |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
272 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
273 #define F77_CHAR_ARG_DEF(s, len) char *s |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
274 #define F77_CONST_CHAR_ARG_DEF(s, len) const char *s |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
275 #define F77_CHAR_ARG_LEN_DEF(len) , F77_CHAR_ARG_LEN_TYPE len |
6072 | 276 #define F77_CHAR_ARG_USE(s) s |
277 #define F77_CHAR_ARG_LEN_USE(s, len) len | |
278 | |
4552 | 279 #define F77_RET_T int |
15128
4d52239daef5
improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents:
15127
diff
changeset
|
280 |
4552 | 281 #define F77_RETURN(retval) return retval; |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21227
diff
changeset
|
282 #if defined (HAVE_OCTAVE_NORETURN_ATTR) |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21076
diff
changeset
|
283 # define F77_NORETURN(retval) |
15127
87411930d6c4
avoid "function declared 'noreturn' has a return statement" warning.
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
284 #else |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21076
diff
changeset
|
285 # define F77_NORETURN(retval) return retval; |
15127
87411930d6c4
avoid "function declared 'noreturn' has a return statement" warning.
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
286 #endif |
4552 | 287 |
22134
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
288 #else |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
289 |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
290 #error "unknown C++ to Fortran calling convention" |
a51d5c5c71e6
handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
291 |
4552 | 292 #endif |
293 | |
22841
5605a786086d
use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
294 typedef double F77_DBLE; |
5605a786086d
use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
295 typedef float F77_REAL; |
5605a786086d
use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
296 typedef double _Complex F77_DBLE_CMPLX; |
5605a786086d
use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
297 typedef float _Complex F77_CMPLX; |
22842
60405b73e439
provide separate typedefs for octave_idx_type and octave_f77_int_type
John W. Eaton <jwe@octave.org>
parents:
22841
diff
changeset
|
298 typedef octave_f77_int_type F77_INT; |
22841
5605a786086d
use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
299 typedef int32_t F77_INT4; |
22842
60405b73e439
provide separate typedefs for octave_idx_type and octave_f77_int_type
John W. Eaton <jwe@octave.org>
parents:
22841
diff
changeset
|
300 typedef octave_f77_int_type F77_LOGICAL; |
22133
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
301 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
302 #define F77_CMPLX_ARG(x) \ |
22135
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
303 reinterpret_cast<float _Complex *> (x) |
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
304 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
305 #define F77_CONST_CMPLX_ARG(x) \ |
22135
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
306 reinterpret_cast<const float _Complex *> (x) |
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
307 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
308 #define F77_DBLE_CMPLX_ARG(x) \ |
22135
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
309 reinterpret_cast<double _Complex *> (x) |
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
310 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
311 #define F77_CONST_DBLE_CMPLX_ARG(x) \ |
22135
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
312 reinterpret_cast<const double _Complex *> (x) |
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22134
diff
changeset
|
313 |
6072 | 314 /* Build a C string local variable CS from the Fortran string parameter S |
315 declared as F77_CHAR_ARG_DEF(s, len) or F77_CONST_CHAR_ARG_DEF(s, len). | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
316 The string will be cleaned up at the end of the current block. |
6072 | 317 Needs to include <cstring> and <vector>. */ |
318 | |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
319 #define F77_CSTRING(s, len, cs) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
320 OCTAVE_LOCAL_BUFFER (char, cs, F77_CHAR_ARG_LEN_USE (s, len) + 1); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
321 memcpy (cs, F77_CHAR_ARG_USE (s), F77_CHAR_ARG_LEN_USE (s, len)); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22157
diff
changeset
|
322 cs[F77_CHAR_ARG_LEN_USE(s, len)] = '\0' |
6072 | 323 |
21227 | 324 OCTAVE_NORETURN OCTAVE_API extern |
21076
b433f9990452
strip trailing whitespace from files
John W. Eaton <jwe@octave.org>
parents:
21066
diff
changeset
|
325 F77_RET_T |
4801 | 326 F77_FUNC (xstopx, XSTOPX) (F77_CONST_CHAR_ARG_DECL |
21029
e3b3bb522d62
maint: Move GCC_ attributes to start of declaration for future compatibility.
Rik <rik@octave.org>
parents:
20791
diff
changeset
|
327 F77_CHAR_ARG_LEN_DECL); |
4552 | 328 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21662
diff
changeset
|
329 #if defined (__cplusplus) |
22843
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
330 |
22988
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
331 namespace octave |
22843
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
332 { |
22988
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
333 inline F77_INT |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
334 to_f77_int (octave_idx_type x) |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
335 { |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
336 if (x < std::numeric_limits<F77_INT>::min () |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
337 || x > std::numeric_limits<F77_INT>::max ()) |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
338 (*current_liboctave_error_handler) |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
339 ("integer dimension or index out of range for Fortran INTEGER type"); |
22843
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
340 |
22988
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
341 return static_cast<F77_INT> (x); |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
342 } |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22944
diff
changeset
|
343 } |
22843
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
344 |
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
345 #endif |
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
346 |
a2809b2938d6
* f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents:
22842
diff
changeset
|
347 #if defined (__cplusplus) |
2544 | 348 } |
349 #endif | |
350 | |
351 #endif |