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
//
// GENERATED FILE
//
use super::*;
use f2rust_std::*;
//$Procedure QTRAN
pub fn QTRAN(
INPUT: &[u8],
OUTPUT: &mut [u8],
TRAN: &mut bool,
ctx: &mut Context,
) -> f2rust_std::Result<()> {
let mut EQUOTE = [b' '; 1 as usize];
let mut DELIM = [b' '; 1 as usize];
let mut QUERY = [b' '; 33];
let mut LOC: i32 = 0;
let mut QLEN: i32 = 0;
let mut REPLY = [b' '; 128];
let mut RLEN: i32 = 0;
let mut PROMPT = [b' '; 55];
let mut I: i32 = 0;
//
// OPTLIB functions
//
//
// Local variables
//
//
// Look up the special marker used for suppressing query
// evaluation.
//
GETEQ(&mut EQUOTE, ctx);
GETDEL(&mut DELIM, ctx);
//
// Look at each word. If a word ends with '?', it's a query.
// (QUERY is a character longer than a valid query. So any
// valid query will have at least one blank at the end.)
//
*TRAN = false;
I = 1;
NTHUQW(INPUT, I, &EQUOTE, &mut QUERY, &mut LOC);
while (!*TRAN && fstr::ne(&QUERY, b" ")) {
//
// First we have to look for the translation supression
// character.
//
*TRAN = ((intrinsics::INDEX(&QUERY, b"? ") > 0) && fstr::ne(&QUERY, b"?"));
if !*TRAN {
I = (I + 1);
NTHUQW(INPUT, I, &EQUOTE, &mut QUERY, &mut LOC);
}
}
fstr::assign(OUTPUT, INPUT);
//
// If we found a query, get the user's response, and insert it
// in place of the query.
//
if *TRAN {
QLEN = spicelib::LASTNB(&QUERY);
fstr::assign(
&mut PROMPT,
&fstr::concat(
&fstr::concat(b"Enter value for ", fstr::substr(&QUERY, 1..=(QLEN - 1))),
b" > ",
),
);
RDSTMN(&PROMPT, &DELIM, &mut REPLY, ctx)?;
RLEN = intrinsics::MAX0(&[1, spicelib::LASTNB(&REPLY)]);
spicelib::REPSUB(
&OUTPUT.to_vec(),
LOC,
((LOC + QLEN) - 1),
fstr::substr(&REPLY, 1..=RLEN),
OUTPUT,
ctx,
)?;
}
Ok(())
}