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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
1 /*
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
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
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
4
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
6
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
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
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
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
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
16
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 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: 6253
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: 6253
diff changeset
19 <http://www.gnu.org/licenses/>.
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
20
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
21 */
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
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
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
24 #define octave_f77_fcn_h 1
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
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
363d406ec86c [project @ 2003-01-03 15:55:01 by jwe]
jwe
parents: 4182
diff changeset
29 #include "quit.h"
363d406ec86c [project @ 2003-01-03 15:55:01 by jwe]
jwe
parents: 4182
diff changeset
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
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
36 extern "C" {
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
37 #endif
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
38
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23426
diff changeset
39 /* This macro is obsolete. */
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
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
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
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
028eb74026bc [project @ 2002-05-16 16:15:42 by jwe]
jwe
parents: 3887
diff changeset
46 #endif
028eb74026bc [project @ 2002-05-16 16:15:42 by jwe]
jwe
parents: 3887
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
103 #if defined (F77_USES_CRAY_CALLING_CONVENTION)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
104
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
105 #include <fortran.h>
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
113 octave_make_cray_const_ftn_ch_dsc (x, strlen (x))
4577
233512ebf15d [project @ 2003-10-31 06:31:14 by jwe]
jwe
parents: 4572
diff changeset
114 #define F77_CHAR_ARG2(x, l) octave_make_cray_ftn_ch_dsc (x, l)
233512ebf15d [project @ 2003-10-31 06:31:14 by jwe]
jwe
parents: 4572
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
117 octave_make_cray_const_ftn_ch_dsc (x.c_str (), x.length ())
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
233512ebf15d [project @ 2003-10-31 06:31:14 by jwe]
jwe
parents: 4572
diff changeset
121 #define F77_CHAR_ARG_DECL octave_cray_ftn_ch_dsc
233512ebf15d [project @ 2003-10-31 06:31:14 by jwe]
jwe
parents: 4572
diff changeset
122 #define F77_CONST_CHAR_ARG_DECL octave_cray_ftn_ch_dsc
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
123
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
124 /* Use these macros to write C-language functions that accept
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
125 Fortran-style character strings. */
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
126 #define F77_CHAR_ARG_DEF(s, len) octave_cray_ftn_ch_dsc s
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
131
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
148
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
149 typedef union
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
150 {
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
151 const char *const_ptr;
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
152 char *ptr;
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
153 struct
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
154 {
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
155 unsigned off : 6;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
156 unsigned len : 26;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
157 unsigned add : 32;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
158 } mask;
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
159 } octave_cray_descriptor;
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
160
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
161 typedef void *octave_cray_ftn_ch_dsc;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
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
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
167 #endif
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
168
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
169 static OCTAVE_F77_FCN_INLINE octave_cray_ftn_ch_dsc
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
170 octave_make_cray_ftn_ch_dsc (char *ptr_arg, unsigned long len_arg)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
171 {
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
172 octave_cray_descriptor desc;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
173 desc.ptr = ptr_arg;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
174 desc.mask.len = len_arg << 3;
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
175 return *((octave_cray_ftn_ch_dsc *) &desc);
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
176 }
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
177
4555
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
178 static OCTAVE_F77_FCN_INLINE octave_cray_ftn_ch_dsc
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
179 octave_make_cray_const_ftn_ch_dsc (const char *ptr_arg, unsigned long len_arg)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
180 {
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
181 octave_cray_descriptor desc;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
182 desc.const_ptr = ptr_arg;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
183 desc.mask.len = len_arg << 3;
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
184 return *((octave_cray_ftn_ch_dsc *) &desc);
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
185 }
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
189 #elif defined (F77_USES_VISUAL_FORTRAN_CALLING_CONVENTION)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
195 #define F77_CHAR_ARG(x) x, strlen (x)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
196 #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
197 #define F77_CHAR_ARG2(x, l) x, l
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
198 #define F77_CONST_CHAR_ARG2(x, l) F77_CHAR_ARG2 (x, l)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
199 #define F77_CXX_STRING_ARG(x) F77_CONST_CHAR_ARG2 (x.c_str (), x.length ())
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
209 #define F77_CHAR_ARG_USE(s) s
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
210 #define F77_CHAR_ARG_LEN_USE(s, len) len
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
211
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
228
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
229 #define F77_CHAR_ARG(x) x
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
230 #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
231 #define F77_CHAR_ARG2(x, l) x
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
232 #define F77_CONST_CHAR_ARG2(x, l) F77_CHAR_ARG2 (x, l)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
233 #define F77_CXX_STRING_ARG(x) F77_CONST_CHAR_ARG2 (x.c_str (), x.length ())
5760
8d7162924bd3 [project @ 2006-04-14 04:01:37 by jwe]
jwe
parents: 5701
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
237 #define F77_CHAR_ARG_DECL char *
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
238 #define F77_CONST_CHAR_ARG_DECL const char *
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
239
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
240 #define F77_CHAR_ARG_DEF(s, len) char *s
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
276 #define F77_CHAR_ARG_USE(s) s
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
277 #define F77_CHAR_ARG_LEN_USE(s, len) len
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
278
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
292 #endif
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
314 /* Build a C string local variable CS from the Fortran string parameter S
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
317 Needs to include <cstring> and <vector>. */
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
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
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
323
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
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
b022780ac0b4 [project @ 2004-02-25 04:40:54 by jwe]
jwe
parents: 4577
diff changeset
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
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
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
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
348 }
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
349 #endif
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
350
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
351 #endif