use super::*;
use f2rust_std::*;
const FRNMLN: i32 = 32;
struct SaveVars {
SVREF: Vec<u8>,
SVET: f64,
SVSTAT: StackArray<f64, 6>,
SVCTR: i32,
}
impl SaveInit for SaveVars {
fn new() -> Self {
let mut SVREF = vec![b' '; FRNMLN as usize];
let mut SVET: f64 = 0.0;
let mut SVSTAT = StackArray::<f64, 6>::new(1..=6);
let mut SVCTR: i32 = 0;
Self {
SVREF,
SVET,
SVSTAT,
SVCTR,
}
}
}
pub fn ZZCVSTAT(
ET: f64,
REF: &[u8],
CENTER: i32,
STATE: &[f64],
ctx: &mut Context,
) -> f2rust_std::Result<()> {
CHKIN(b"ZZCVSTAT", ctx)?;
SIGERR(b"SPICE(BOGUSENTRY)", ctx)?;
CHKOUT(b"ZZCVSTAT", ctx)?;
Ok(())
}
pub fn ZZCVXSTA(
ET: f64,
REF: &[u8],
CENTER: &mut i32,
STATE: &mut [f64],
ctx: &mut Context,
) -> f2rust_std::Result<()> {
let save = ctx.get_vars::<SaveVars>();
let save = &mut *save.borrow_mut();
let mut STATE = DummyArrayMut::new(STATE, 1..=6);
let mut DELTA: f64 = 0.0;
let mut XSTATE = StackArray::<f64, 6>::new(1..=6);
let mut XF = StackArray2D::<f64, 36>::new(1..=6, 1..=6);
if RETURN(ctx) {
return Ok(());
}
CHKIN(b"ZZCVXSTA", ctx)?;
DELTA = (ET - save.SVET);
VLCOM(
1.0,
save.SVSTAT.subarray(1),
DELTA,
save.SVSTAT.subarray(4),
XSTATE.as_slice_mut(),
);
VEQU(save.SVSTAT.subarray(4), XSTATE.subarray_mut(4));
SXFORM(&save.SVREF, REF, ET, XF.as_slice_mut(), ctx)?;
if FAILED(ctx) {
CHKOUT(b"ZZCVXSTA", ctx)?;
return Ok(());
}
MXVG(XF.as_slice(), XSTATE.as_slice(), 6, 6, STATE.as_slice_mut());
*CENTER = save.SVCTR;
CHKOUT(b"ZZCVXSTA", ctx)?;
Ok(())
}
pub fn ZZCVSSTA(STATE: &[f64], CENTER: i32, ET: f64, REF: &[u8], ctx: &mut Context) {
let save = ctx.get_vars::<SaveVars>();
let save = &mut *save.borrow_mut();
let STATE = DummyArray::new(STATE, 1..=6);
if RETURN(ctx) {
return;
}
MOVED(STATE.as_slice(), 6, save.SVSTAT.as_slice_mut());
save.SVCTR = CENTER;
save.SVET = ET;
fstr::assign(&mut save.SVREF, REF);
}