1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
//
// GENERATED FILE
//
use super::*;
use crate::SpiceContext;
use f2rust_std::*;
const IRETRN: i32 = 3;
/// Immediate Return Indicator
///
/// Return .TRUE. if SPICELIB routines should return immediately upon
/// entry.
///
/// # Required Reading
///
/// * [ERROR](crate::required_reading::error)
///
/// # Brief I/O
///
/// ```text
/// The function returns the value .TRUE. if and only if SPICELIB
/// routines should return immediately upon entry.
/// ```
///
/// # Detailed Output
///
/// ```text
/// The function returns the value .TRUE. if and only if SPICELIB
/// routines should return immediately upon entry. The criterion
/// for this is that the error response action is set to
/// 'RETURN', and an error condition exists.
/// ```
///
/// # Exceptions
///
/// ```text
/// Error free.
///
/// 1) This routine does not detect any errors.
///
/// However, this routine is part of the SPICELIB error
/// handling mechanism.
/// ```
///
/// # Particulars
///
/// ```text
/// Please read the "required reading" first!
///
/// This routine can be referenced in non-toolkit code; in
/// fact, its use is encouraged. Its purpose is to signal
/// to the routine calling it that the caller should
/// return immediately. The reference to RETURN should
/// be the first executable line of the calling program.
///
/// In 'RETURN' mode, SPICELIB routines
/// that have external references, or that can
/// detect errors, return immediately upon entry when an
/// error condition exists. They use RETURN to determine
/// when these conditions are met. Non--toolkit routines
/// can do the same.
///
/// Additionally, when an error is signaled in 'RETURN' mode,
/// no further errors can be signaled until the error condition
/// is reset by a call to RESET. Calls to SIGERR simply have
/// no effect. Therefore, the error messages set in response
/// to the FIRST error that was detected will be saved until
/// RESET is called. These messages can be retrieved by
/// calls to GETMSG.
///
/// There are a number of advantages to using this mechanism.
/// First, the likelihood of an error resulting in crash
/// in a different routine is greatly reduced. Second,
/// a program does not have to test the error status
/// (using a reference to FAILED) after each call to a toolkit
/// routine, but rather can make one test of status at the end
/// of a series of calls. See "Examples" below.
///
/// See the subroutine ERRACT for definitions of the error action
/// codes.
/// ```
///
/// # Examples
///
/// ```text
/// 1. In this example, we show how to place a reference
/// to RETURN in your code:
///
/// C
/// C No executable lines precede this one.
/// C
/// C Test whether to return before doing
/// C anything else.
/// C
///
/// IF ( RETURN() ) RETURN
///
///
/// [ rest of code goes here]
///
/// .
/// .
/// .
///
///
/// 2. Here's how one might code a sequence of calls
/// to routines with code that follows the pattern
/// given in example #1 above:
///
/// .
/// .
/// .
///
/// [ code may go here ]
///
/// C
/// C We call routines A, B, and C; then we
/// C test for errors, using the SPICELIB error
/// C status indicator, FAILED:
/// C
///
/// CALL A
/// CALL B
/// CALL C
///
/// IF ( FAILED() ) THEN
///
/// C
/// C If we're here, an error occurred. The
/// C error might have been detected by A, B, C,
/// C or by a routine called by one of them.
/// C Get the explanation of the short error message
/// C and output it using the routine, USER_OUT
/// C [USER_OUT is a fictitious routine]:
/// C
///
/// CALL GETMSG ( 'EXPLAIN', MSG )
///
/// CALL USER_OUT ( MSG )
///
/// END IF
///
/// [ rest of code goes here ]
///
/// .
/// .
/// .
/// ```
///
/// # Restrictions
///
/// ```text
/// 1) This routine has no effect unless the error action is
/// 'RETURN'!
/// ```
///
/// # Author and Institution
///
/// ```text
/// N.J. Bachman (JPL)
/// J. Diaz del Rio (ODC Space)
/// K.R. Gehringer (JPL)
/// W.L. Taber (JPL)
/// ```
///
/// # Version
///
/// ```text
/// - SPICELIB Version 2.1.1, 26-OCT-2021 (JDR)
///
/// Edited the header to comply with NAIF standard.
///
/// - SPICELIB Version 2.1.0, 04-APR-2014 (NJB)
///
/// Re-organized code to improve efficiency in the non-error
/// case.
///
/// - SPICELIB Version 2.0.0, 22-APR-1996 (KRG)
///
/// This subroutine has been modified in an attempt to improve
/// the general performance of the SPICELIB error handling
/// mechanism. The specific modification has been to change the
/// type of error action from a short character string to an
/// integer. This change is backwardly incompatible because the
/// type has changed.
///
/// - SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)
///
/// Comment section for permuted index source lines was added
/// following the header.
///
/// - SPICELIB Version 1.0.0, 31-JAN-1990 (NJB)
/// ```
///
/// # Revisions
///
/// ```text
/// - SPICELIB Version 2.0.0, 22-APR-1996 (KRG)
///
/// This subroutine has been modified in an attempt to improve
/// the general performance of the SPICELIB error handling
/// mechanism. The specific modification has been to change the
/// type of error action from a short character string to an
/// integer. This change is backwardly incompatible because the
/// type has changed.
///
/// - SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)
///
/// Comment section for permuted index source lines was added
/// following the header.
///
/// - Beta Version 1.1.0, 17-FEB-1989 (NJB)
///
/// Added parentheses to the declaration of RETURN.
/// ```
pub fn return_(ctx: &mut SpiceContext) -> bool {
let ret = RETURN(ctx.raw_context());
ret
}
//$Procedure RETURN ( Immediate Return Indicator )
pub fn RETURN(ctx: &mut Context) -> bool {
let mut RETURN: bool = false;
let mut ACTION: i32 = 0;
//
// SPICELIB functions
//
//
// Local Parameters
//
// Define the mnemonic for the return action.
//
//
// Local Variables
//
//
// Immediate return is indicated only in 'RETURN' mode,
// when an error condition is in effect:
//
if !FAILED(ctx) {
RETURN = false;
return RETURN;
}
//
// At this point, we know a SPICE error condition exists.
//
GETACT(&mut ACTION, ctx);
RETURN = (ACTION == IRETRN);
RETURN
}