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
//
// GENERATED FILE
//
use super::*;
use crate::SpiceContext;
use f2rust_std::*;
/// Swap character values
///
/// Swap the contents of two character strings.
///
/// # Brief I/O
///
/// ```text
/// VARIABLE I/O DESCRIPTION
/// -------- --- --------------------------------------------------
/// A I-O First string.
/// B I-O Second string.
/// ```
///
/// # Detailed Input
///
/// ```text
/// A,
/// B are two character strings, the contents of which
/// are to be swapped (exchanged).
/// ```
///
/// # Detailed Output
///
/// ```text
/// A,
/// B are the same two character strings, after their
/// contents have been exchanged.
/// ```
///
/// # Exceptions
///
/// ```text
/// Error free.
/// ```
///
/// # Particulars
///
/// ```text
/// This is just shorthand notation for the code fragment
///
/// TEMP = A
/// A = B
/// B = TEMP
///
/// The characters in the string are swapped one at a time, so
/// no intermediate string (TEMP) is needed. This means that the
/// strings may be of any length.
/// ```
///
/// # Examples
///
/// ```text
/// Let
/// A = 11.D0
/// B = 22.D0
///
/// Then after calling SWAPD (A,B),
///
/// A = 22.D0
/// B = 11.D0
/// ```
///
/// # Author and Institution
///
/// ```text
/// J. Diaz del Rio (ODC Space)
/// W.L. Taber (JPL)
/// I.M. Underwood (JPL)
/// ```
///
/// # Version
///
/// ```text
/// - SPICELIB Version 1.1.0, 18-MAR-2021 (JDR)
///
/// Added IMPLICIT NONE statement.
///
/// Edited the header to comply with NAIF standard.
///
/// - 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 (IMU)
/// ```
pub fn swapc(a: &mut str, b: &mut str) {
SWAPC(
fstr::StrBytes::new(a).as_mut(),
fstr::StrBytes::new(b).as_mut(),
);
}
//$Procedure SWAPC ( Swap character values )
pub fn SWAPC(A: &mut [u8], B: &mut [u8]) {
let mut ALEN: i32 = 0;
let mut BLEN: i32 = 0;
let mut SHORT: i32 = 0;
let mut TEMP = [b' '; 1];
//
// Local variables
//
//
// Get the lengths of the strings.
//
ALEN = intrinsics::LEN(A);
BLEN = intrinsics::LEN(B);
SHORT = intrinsics::MIN0(&[ALEN, BLEN]);
//
// Keep going until the end of the shorter string is reached.
//
for I in 1..=SHORT {
fstr::assign(&mut TEMP, fstr::substr(A, I..=I));
fstr::assign(fstr::substr_mut(A, I..=I), fstr::substr(B, I..=I));
fstr::assign(fstr::substr_mut(B, I..=I), &TEMP);
}
//
// If either string is longer than the shortest one, pad it
// with blanks.
//
if (ALEN > SHORT) {
fstr::assign(fstr::substr_mut(A, (SHORT + 1)..), b" ");
} else if (BLEN > SHORT) {
fstr::assign(fstr::substr_mut(B, (SHORT + 1)..), b" ");
}
}