annotate liboctave/util/f77-fcn.h @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents f3f3e3793fb5
children e88a07dec498
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
3 // Copyright (C) 1996-2022 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
25
20791
f7084eae3318 maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents: 20545
diff changeset
26 #if ! defined (octave_f77_fcn_h)
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
27 #define octave_f77_fcn_h 1
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
28
21244
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21229
diff changeset
29 #include "octave-config.h"
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21229
diff changeset
30
22843
a2809b2938d6 * f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents: 22842
diff changeset
31 #include "lo-error.h"
4268
363d406ec86c [project @ 2003-01-03 15:55:01 by jwe]
jwe
parents: 4182
diff changeset
32 #include "quit.h"
363d406ec86c [project @ 2003-01-03 15:55:01 by jwe]
jwe
parents: 4182
diff changeset
33
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21662
diff changeset
34 #if defined (__cplusplus)
29572
aef11bb4e6d1 use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
35 # include <cstddef>
22843
a2809b2938d6 * f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents: 22842
diff changeset
36 # include <limits>
29572
aef11bb4e6d1 use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
37 using std::size_t;
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
38 extern "C" {
29572
aef11bb4e6d1 use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
39 #else
aef11bb4e6d1 use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
40 # include <stddef.h>
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
41 #endif
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
42
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23426
diff changeset
43 /* This macro is obsolete. */
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
44
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23426
diff changeset
45 #define F77_XFCN(f, F, args) \
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23426
diff changeset
46 F77_FUNC (f, F) args
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
47
20791
f7084eae3318 maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents: 20545
diff changeset
48 #if ! defined (F77_FCN)
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23426
diff changeset
49 # 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
50 #endif
028eb74026bc [project @ 2002-05-16 16:15:42 by jwe]
jwe
parents: 3887
diff changeset
51
15128
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
52 /*
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
53
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
54 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
55 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
56 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
57 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
58 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
59 argument.
15128
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
60
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
61 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
62
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
63 F77_CHAR_ARG(x)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
64 F77_CONST_CHAR_ARG(x)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
65 F77_CXX_STRING_ARG(x)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
66 F77_CHAR_ARG_LEN(l)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
67 F77_CHAR_ARG_DECL
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
68 F77_CONST_CHAR_ARG_DECL
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
69 F77_CHAR_ARG_LEN_DECL
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
70
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
71 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
72 Fortran-style character strings:
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
73
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
74 F77_CHAR_ARG_DEF(s, len)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
75 F77_CONST_CHAR_ARG_DEF(s, len)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
76 F77_CHAR_ARG_LEN_DEF(len)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
77 F77_CHAR_ARG_USE(s)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
78 F77_CHAR_ARG_LEN_USE(s, len)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
79
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
80 Use these macros for C++ code
15128
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
81
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
82 F77_INT Equivalent to Fortran INTEGER type
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
83 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
84 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
85 F77_REAL Equivalent to Fortran REAL type
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
86 F77_CMPLX Equivalent to Fortran COMPLEX type
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
87 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
88 F77_LOGICAL Equivalent to Fortran LOGICAL type
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
89 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
90 Fortran subroutine.
15128
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
91
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
92 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
93 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
94 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
95 "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
96 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
97 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
98 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
99 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
100 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
101
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
102 F77_RETURN(retval)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
103 F77_NORETURN(retval)
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
104
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
105 */
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
106
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
107 #if defined (F77_USES_CRAY_CALLING_CONVENTION)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
108
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
109 #include <fortran.h>
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
110
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
111 /* 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
112 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
113 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
114
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
115 #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
116 #define F77_CONST_CHAR_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, strlen (x))
4577
233512ebf15d [project @ 2003-10-31 06:31:14 by jwe]
jwe
parents: 4572
diff changeset
118 #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
119 #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
120 #define F77_CXX_STRING_ARG(x) \
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
121 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
122 #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
123 #define F77_CHAR_ARG_LEN_TYPE
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
124 #define F77_CHAR_ARG_LEN_DECL
4577
233512ebf15d [project @ 2003-10-31 06:31:14 by jwe]
jwe
parents: 4572
diff changeset
125 #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
126 #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
127
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
128 /* 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
129 Fortran-style character strings. */
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
130 #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
131 #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
132 #define F77_CHAR_ARG_LEN_DEF(len)
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
133 #define F77_CHAR_ARG_USE(s) s.ptr
21662
5b9868c2e212 maint: Octave coding convention cleanups.
Rik <rik@octave.org>
parents: 21244
diff changeset
134 #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
135
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
136 #define F77_RET_T int
15128
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
137
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
138 /* 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
139 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
140 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
141 tagged with a "noreturn" attribute. */
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
142
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
143 #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
144 #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
145 # 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
146 #else
21202
f7121e111991 maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents: 21076
diff changeset
147 # 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
148 #endif
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
149
21066
258c787cd9ce maint: Use "FIXME:" consistently in code base.
Rik <rik@octave.org>
parents: 21040
diff changeset
150 /* 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
151 need to be changed for others. */
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
152
30184
51b1966816e5 maint: Backed out changeset 2f39642b9084
Rik <rik@octave.org>
parents: 30177
diff changeset
153 typedef union
30394
f3f3e3793fb5 maint: style check C++ files in liboctave/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30184
diff changeset
154 {
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
155 const char *const_ptr;
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
156 char *ptr;
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
157 struct
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
158 {
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
159 unsigned off : 6;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
160 unsigned len : 26;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
161 unsigned add : 32;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
162 } mask;
30184
51b1966816e5 maint: Backed out changeset 2f39642b9084
Rik <rik@octave.org>
parents: 30177
diff changeset
163 } octave_cray_descriptor;
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
164
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
165 typedef void *octave_cray_ftn_ch_dsc;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
166
25103
078b795c5219 maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents: 25054
diff changeset
167 #if defined (__cplusplus)
21202
f7121e111991 maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents: 21076
diff changeset
168 # define OCTAVE_F77_FCN_INLINE inline
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
169 #else
21202
f7121e111991 maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents: 21076
diff changeset
170 # define OCTAVE_F77_FCN_INLINE
4555
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
171 #endif
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
172
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
173 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
174 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
175 {
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
176 octave_cray_descriptor desc;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
177 desc.ptr = ptr_arg;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
178 desc.mask.len = len_arg << 3;
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
179 return *((octave_cray_ftn_ch_dsc *) &desc);
4552
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
4555
fe70d8074644 [project @ 2003-10-27 22:17:36 by jwe]
jwe
parents: 4552
diff changeset
182 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
183 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
184 {
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
185 octave_cray_descriptor desc;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
186 desc.const_ptr = ptr_arg;
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
187 desc.mask.len = len_arg << 3;
4558
239df9c618ef [project @ 2003-10-28 18:48:07 by jwe]
jwe
parents: 4555
diff changeset
188 return *((octave_cray_ftn_ch_dsc *) &desc);
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
189 }
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
190
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
191 #undef OCTAVE_F77_FCN_INLINE
22157
c5842206aaea maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 22135
diff changeset
192
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
193 #elif defined (F77_USES_VISUAL_FORTRAN_CALLING_CONVENTION)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
194
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
195 /* 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
196 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
197 argument. */
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
198
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
199 #define F77_CHAR_ARG(x) x, strlen (x)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
200 #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
201 #define F77_CHAR_ARG2(x, l) x, l
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
202 #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
203 #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
204 #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
205 #define F77_CHAR_ARG_LEN_TYPE int
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
206 #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
207 #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
208 #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
209
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
210 #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
211 #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
212 #define F77_CHAR_ARG_LEN_DEF(len)
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
213 #define F77_CHAR_ARG_USE(s) s
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
214 #define F77_CHAR_ARG_LEN_USE(s, len) len
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
215
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
216 #define F77_RET_T void
15128
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
217
15127
87411930d6c4 avoid "function declared 'noreturn' has a return statement" warning.
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
218 #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
219 #define F77_NORETURN(retval)
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
220
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
221 #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
222
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
223 /* 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
224 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
225 strings to the and ignores others.
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
226
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
227 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
228 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
229 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
230 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
231 case in Octave. */
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
232
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
233 #define F77_CHAR_ARG(x) x
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
234 #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
235 #define F77_CHAR_ARG2(x, l) x
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
236 #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
237 #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
238 #define F77_CHAR_ARG_LEN(l) , l
25364
bbc47fb89973 use size_t for f77 char arg length params with GCC 8 (bug #53872)
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
239 #if defined (__GNUC__) && __GNUC__ >= 8
bbc47fb89973 use size_t for f77 char arg length params with GCC 8 (bug #53872)
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
240 # define F77_CHAR_ARG_LEN_TYPE size_t
bbc47fb89973 use size_t for f77 char arg length params with GCC 8 (bug #53872)
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
241 #else
bbc47fb89973 use size_t for f77 char arg length params with GCC 8 (bug #53872)
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
242 # define F77_CHAR_ARG_LEN_TYPE int
bbc47fb89973 use size_t for f77 char arg length params with GCC 8 (bug #53872)
John W. Eaton <jwe@octave.org>
parents: 25103
diff changeset
243 #endif
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
244 #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
245 #define F77_CHAR_ARG_DECL char *
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
246 #define F77_CONST_CHAR_ARG_DECL const char *
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
247
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
248 #define F77_CHAR_ARG_DEF(s, len) char *s
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
249 #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
250 #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
251 #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
252 #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
253
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
254 #define F77_RET_T void
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
255
22410
bc38c1ff6698 fix definition of F77_RETURN for gfortran
John W. Eaton <jwe@octave.org>
parents: 22402
diff changeset
256 #define F77_RETURN(retval) return;
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
257 #if defined (HAVE_OCTAVE_NORETURN_ATTR)
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
258 # define F77_NORETURN(retval)
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
259 #else
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
260 # define F77_NORETURN(retval) return retval;
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
261 #endif
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
262
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
263 #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
264
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
265 /* Assume f2c-compatible calling convention. */
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
266
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
267 /* 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
268 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
269
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
270 #define F77_CHAR_ARG(x) x
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
271 #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
272 #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
273 #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
274 #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
275 #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
276 #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
277 #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
278 #define F77_CHAR_ARG_DECL char *
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
279 #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
280
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
281 #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
282 #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
283 #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
284 #define F77_CHAR_ARG_USE(s) s
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
285 #define F77_CHAR_ARG_LEN_USE(s, len) len
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
286
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
287 #define F77_RET_T int
15128
4d52239daef5 improve internal documentation of F77_ macros.
John W. Eaton <jwe@octave.org>
parents: 15127
diff changeset
288
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
289 #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
290 #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
291 # 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
292 #else
21202
f7121e111991 maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents: 21076
diff changeset
293 # 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
294 #endif
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
295
22134
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
296 #else
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
297
a51d5c5c71e6 handle gfortran and f2c calling conventions separately
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
298 #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
299
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
300 #endif
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
301
22841
5605a786086d use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
302 typedef double F77_DBLE;
5605a786086d use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
303 typedef float F77_REAL;
5605a786086d use typedefs instead of macros for F77 types
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
304 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
305 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
306 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
307 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
308 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
309
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22157
diff changeset
310 #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
311 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
312
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22157
diff changeset
313 #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
314 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
315
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22157
diff changeset
316 #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
317 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
318
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22157
diff changeset
319 #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
320 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
321
6072
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
322 /* 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
323 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
324 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
325 Needs to include <cstring> and <vector>. */
4036e6fca790 [project @ 2006-10-24 01:00:12 by jwe]
jwe
parents: 5775
diff changeset
326
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22157
diff changeset
327 #define F77_CSTRING(s, len, cs) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22157
diff changeset
328 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
329 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
330 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
331
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
332 OCTAVE_NORETURN OCTAVE_API extern
21076
b433f9990452 strip trailing whitespace from files
John W. Eaton <jwe@octave.org>
parents: 21066
diff changeset
333 F77_RET_T
4801
b022780ac0b4 [project @ 2004-02-25 04:40:54 by jwe]
jwe
parents: 4577
diff changeset
334 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
335 F77_CHAR_ARG_LEN_DECL);
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4268
diff changeset
336
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21662
diff changeset
337 #if defined (__cplusplus)
22843
a2809b2938d6 * f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents: 22842
diff changeset
338
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22944
diff changeset
339 namespace octave
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 inline F77_INT
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22944
diff changeset
342 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
343 {
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22944
diff changeset
344 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
345 || 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
346 (*current_liboctave_error_handler)
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22944
diff changeset
347 ("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
348
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22944
diff changeset
349 return static_cast<F77_INT> (x);
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22944
diff changeset
350 }
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22944
diff changeset
351 }
22843
a2809b2938d6 * f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents: 22842
diff changeset
352
a2809b2938d6 * f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents: 22842
diff changeset
353 #endif
a2809b2938d6 * f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents: 22842
diff changeset
354
a2809b2938d6 * f77-fcn.h (to_f77_int): New inline function.
John W. Eaton <jwe@octave.org>
parents: 22842
diff changeset
355 #if defined (__cplusplus)
2544
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
356 }
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
357 #endif
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
358
a33bbd3fadd7 [project @ 1996-11-20 05:09:29 by jwe]
jwe
parents:
diff changeset
359 #endif