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
//
// GENERATED FILE
//
use super::*;
use crate::SpiceContext;
use f2rust_std::*;
const ISPACE: i32 = 32;
/// Last non-blank character
///
/// Return the index of the last non-blank character in
/// a character string.
///
/// # Brief I/O
///
/// ```text
/// VARIABLE I/O DESCRIPTION
/// -------- --- --------------------------------------------------
/// STRING I Input character string.
///
/// The function returns the index of the last non-blank character in
/// STRING.
/// ```
///
/// # Detailed Input
///
/// ```text
/// STRING is the input character string.
/// ```
///
/// # Detailed Output
///
/// ```text
/// The function returns the index of the last non-blank character in
/// the input string. If there are no non-blank characters in the
/// string, LASTNB is zero.
/// ```
///
/// # Exceptions
///
/// ```text
/// Error free.
/// ```
///
/// # Particulars
///
/// ```text
/// If the string is blank, return zero. Otherwise, step through
/// the string one character at a time until something other than
/// a blank is found. Return the index of that something within
/// the string.
/// ```
///
/// # Examples
///
/// ```text
/// The following examples illustrate the use of LASTNB.
///
/// LASTNB ( 'ABCDE' ) = 5
/// LASTNB ( 'AN EXAMPLE' ) = 10
/// LASTNB ( 'AN EXAMPLE ' ) = 10
/// LASTNB ( ' ' ) = 0
/// ```
///
/// # Author and Institution
///
/// ```text
/// J. Diaz del Rio (ODC Space)
/// K.R. Gehringer (JPL)
/// W.L. Taber (JPL)
/// I.M. Underwood (JPL)
/// ```
///
/// # Version
///
/// ```text
/// - SPICELIB Version 2.1.0, 08-APR-2021 (JDR)
///
/// Added IMPLICIT NONE statement.
///
/// Edited the header to comply with NAIF standard.
///
/// - SPICELIB Version 2.0.0, 12-MAR-1996 (KRG)
///
/// Modified the comparison to use integer values and the ICHAR()
/// function. This improves the performance of the subroutine.
///
/// - SPICELIB Version 1.0.2, 10-MAR-1992 (WLT)
///
/// Comment section for permuted index source lines was added
/// following the header.
///
/// - SPICELIB Version 1.0.1, 07-DEC-1990 (IMU)
///
/// Corrected a misprint in the description of LASTNB.
///
/// - SPICELIB Version 1.0.0, 31-JAN-1990 (IMU)
/// ```
pub fn lastnb(string: &str) -> i32 {
let ret = LASTNB(string.as_bytes());
ret
}
//$Procedure LASTNB ( Last non-blank character )
pub fn LASTNB(STRING: &[u8]) -> i32 {
let mut LASTNB: i32 = 0;
//
// Local parameters
//
//
// Local variables
//
//
// Just like it says in the header.
//
if fstr::eq(STRING, b" ") {
LASTNB = 0;
} else {
for I in intrinsics::range(intrinsics::LEN(STRING), 1, -1) {
if (intrinsics::ICHAR(fstr::substr(STRING, I..=I)) != ISPACE) {
LASTNB = I;
return LASTNB;
}
}
}
LASTNB
}