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
//
// GENERATED FILE
//
use super::*;
use crate::SpiceContext;
use f2rust_std::*;
const STLEN: i32 = 7;
const FAILUR: i32 = 1;
const SUCCES: i32 = 0;
/// Exit a program indicating an error status
///
/// Exit an executing program returning a success or failure status
/// to the operating system, if this capability is supported, or
/// simply exit the program.
///
/// # Brief I/O
///
/// ```text
/// VARIABLE I/O DESCRIPTION
/// -------- --- --------------------------------------------------
/// STATUS I A string indicating the exit status of a program.
/// ```
///
/// # Detailed Input
///
/// ```text
/// STATUS is a character string which indicates the status
/// to use when exiting a program. The two status values
/// currently supported are 'SUCCESS' and 'FAILURE', which
/// have their obvious meanings. The case of the input is
/// not important, i.e., 'Success' or 'failure' are accepted.
///
/// If STATUS has a value of 'SUCCESS', then the calling
/// program will be terminated with a status that indicates
/// success.
///
/// If STATUS has a value of 'FAILURE', then the calling
/// program will be terminated with a status that indicates
/// failure.
///
/// If STATUS has a value that is not recognized, the calling
/// program will be terminated with a status that indicates
/// failure.
///
/// For environments which do not support the passage of a
/// status indicator to the operating system the value of
/// STATUS is not significant; an executing program will be
/// terminated using the Fortran STOP statement.
///
/// See the value of the parameter STLEN declared in the
/// Local $Parameters section for the maximum significant
/// length of an exit status string.
/// ```
///
/// # Exceptions
///
/// ```text
/// Error free.
/// ```
///
/// # Particulars
///
/// ```text
/// This subroutine is called by SIGERR to exit a program
/// returning a success or failure indication to the operating
/// system when this is possible. If returning a status
/// indication to the operating system is not possible, this
/// subroutine simply executes a Fortran STOP statement.
/// ```
///
/// # Examples
///
/// ```text
/// To exit a program indicating success:
///
/// CALL BYEBYE ( 'SUCCESS' )
///
/// To exit a program indicating failure:
///
/// CALL BYEBYE ( 'FAILURE' )
/// ```
///
/// # Author and Institution
///
/// ```text
/// N.J. Bachman (JPL)
/// J. Diaz del Rio (ODC Space)
/// K.R. Gehringer (JPL)
/// B.V. Semenov (JPL)
/// W.L. Taber (JPL)
/// E.D. Wright (JPL)
/// ```
///
/// # Version
///
/// ```text
/// - SPICELIB Version 2.16.0, 13-AUG-2021 (JDR)
///
/// Added IMPLICIT NONE statement.
///
/// Edited the header to comply with NAIF standard. Removed
/// unnecessary $Revisions section.
///
/// - SPICELIB Version 2.15.0, 10-MAR-2014 (BVS)
///
/// Updated for SUN-SOLARIS-64BIT-INTEL.
///
/// - SPICELIB Version 2.14.0, 10-MAR-2014 (BVS)
///
/// Updated for PC-LINUX-64BIT-IFORT.
///
/// - SPICELIB Version 2.13.0, 10-MAR-2014 (BVS)
///
/// Updated for PC-CYGWIN-GFORTRAN.
///
/// - SPICELIB Version 2.12.0, 10-MAR-2014 (BVS)
///
/// Updated for PC-CYGWIN-64BIT-GFORTRAN.
///
/// - SPICELIB Version 2.11.0, 13-MAY-2010 (BVS)
///
/// Updated for SUN-SOLARIS-INTEL.
///
/// - SPICELIB Version 2.10.0, 13-MAY-2010 (BVS)
///
/// Updated for PC-WINDOWS-64BIT-IFORT.
///
/// - SPICELIB Version 2.9.0, 13-MAY-2010 (BVS)
///
/// Updated for PC-LINUX-64BIT-GFORTRAN.
///
/// - SPICELIB Version 2.8.0, 13-MAY-2010 (BVS)
///
/// Updated for MAC-OSX-64BIT-IFORT.
///
/// - SPICELIB Version 2.7.0, 13-MAY-2010 (BVS)
///
/// Updated for MAC-OSX-64BIT-GFORTRAN.
///
/// - SPICELIB Version 2.6.0, 18-MAR-2009 (BVS)
///
/// Updated for PC-LINUX-GFORTRAN.
///
/// - SPICELIB Version 2.5.0, 18-MAR-2009 (BVS)
///
/// Updated for MAC-OSX-GFORTRAN.
///
/// - SPICELIB Version 2.4.0, 19-FEB-2008 (BVS)
///
/// Updated for PC-LINUX-IFORT.
///
/// - SPICELIB Version 2.3.0, 14-NOV-2006 (BVS)
///
/// Updated for MAC-OSX-IFORT.
///
/// - SPICELIB Version 2.2.0, 14-NOV-2006 (BVS)
///
/// Updated for PC-WINDOWS-IFORT.
///
/// - SPICELIB Version 2.1.0, 03-JAN-2005 (BVS)
///
/// Updated for PC-CYGWIN.
///
/// - SPICELIB Version 2.0.5, 17-JUL-2002 (BVS)
///
/// Added MAC-OSX environments.
///
/// - SPICELIB Version 2.0.4, 28-AUG-2000 (EDW)
///
/// Included PROMPT call for MAC Absoft environment.
/// Without something to pause execution, the output window
/// collapses at program end.
///
/// - SPICELIB Version 2.0.3, 08-OCT-1999 (WLT)
///
/// The environment lines were expanded so that the supported
/// environments are now explicitly given. New
/// environments are WIN-NT
///
/// - SPICELIB Version 2.0.2, 28-JUL-1999 (WLT)
///
/// The environment lines were expanded so that the supported
/// environments are now explicitly given. New
/// environments are PC-DIGITAL, SGI-O32 and SGI-N32.
///
/// The success flag for SGI-N32 is '0', failure '1'. These
/// were simply 0 and 1 respectively when the environment was
/// just SGI.
///
/// - SPICELIB Version 2.0.1, 18-MAR-1999 (WLT)
///
/// The environment lines were expanded so that the supported
/// environments are now explicitly given. Previously,
/// environments such as SUN-SUNOS and SUN-SOLARIS were implied
/// by the environment label SUN.
///
/// - SPICELIB Version 2.0.0, 05-APR-1998 (NJB)
///
/// Added the PC-LINUX environment.
///
/// - SPICELIB Version 1.0.0, 25-APR-1996 (KRG)
/// ```
pub fn byebye(ctx: &mut SpiceContext, status: &str) -> crate::Result<()> {
BYEBYE(status.as_bytes(), ctx.raw_context())?;
ctx.handle_errors()?;
Ok(())
}
//$Procedure BYEBYE ( Exit a program indicating an error status )
pub fn BYEBYE(STATUS: &[u8], ctx: &mut Context) -> f2rust_std::Result<()> {
let mut CHSTAT = [b' '; STLEN as usize];
let mut MYSTAT: bool = false;
//
// Local Parameters
//
// Define the maximum length for the usable portion of a status
// string.
//
//
// Define the notion of 'SUCCESS' and 'FAILURE'.
//
LJUST(STATUS, &mut CHSTAT);
UCASE(&CHSTAT.clone(), &mut CHSTAT, ctx);
if fstr::eq(&CHSTAT, b"SUCCESS") {
MYSTAT = true;
} else {
MYSTAT = false;
}
if MYSTAT {
ctx.exit(&[SUCCES])?;
} else {
ctx.exit(&[FAILUR])?;
}
//
// We never really get here, but for pedantic reasons we must
// have a RETURN statement in a subroutine.
//
Ok(())
}