use super::*;
use f2rust_std::*;
const ADSCSZ: i32 = 6;
const ATTCLS: i32 = 1;
const ATTTYP: i32 = (ATTCLS + 1);
const ATTLEN: i32 = (ATTTYP + 1);
const ATTSIZ: i32 = (ATTLEN + 1);
const ATTIDX: i32 = (ATTSIZ + 1);
const ATTNFL: i32 = (ATTIDX + 1);
const ITRUE: i32 = 1;
const IFALSE: i32 = -1;
const CTRUE: &[u8] = b"T";
const CFALSE: &[u8] = b"F";
const CNAMSZ: i32 = 32;
const MXCLSG: i32 = 100;
const MAXQRY: i32 = 2000;
const MAXSEL: i32 = 50;
const MAXTAB: i32 = 10;
const MAXCON: i32 = 1000;
const MXJOIN: i32 = 10;
const MXJCON: i32 = 100;
const MAXORD: i32 = 10;
const MAXTOK: i32 = 500;
const MAXQNM: i32 = 100;
const MAXCLN: i32 = MAXQRY;
const MAXSTR: i32 = 1024;
const TNAMSZ: i32 = 64;
const CHR: i32 = 1;
const DP: i32 = 2;
const INT: i32 = 3;
const TIME: i32 = 4;
const LMSGLN: i32 = (23 * 80);
const SMSGLN: i32 = 25;
const FTSIZE: i32 = 5000;
const RSVUNT: i32 = 2;
const SCRUNT: i32 = 1;
const UTSIZE: i32 = ((20 + SCRUNT) + RSVUNT);
const READ: i32 = 1;
const WRITE: i32 = 2;
const SCRTCH: i32 = 3;
const NEW: i32 = 4;
const NUMAMH: i32 = 4;
const BIGI3E: i32 = 1;
const LTLI3E: i32 = 2;
const VAXGFL: i32 = 3;
const VAXDFL: i32 = 4;
const NUMBFF: i32 = 4;
const STRSIZ: i32 = 8;
const STRLEN: i32 = ((STRSIZ + 1) * NUMBFF);
const DAF: i32 = 1;
const DAS: i32 = 2;
const NUMARC: i32 = 2;
const RECL: i32 = 1024;
const FILEN: i32 = 255;
const CBFSIZ: i32 = 1024;
const EK1: &[u8] = b"test1nn.ek";
const EK1NAT: &[u8] = b"test1.ek";
const EK2: &[u8] = b"test2nn.ek";
const EK2NAT: &[u8] = b"test2.ek";
const DECLEN: i32 = 200;
const MAXROW: i32 = 20;
pub fn F_NNEK03(OK: &mut bool, ctx: &mut Context) -> f2rust_std::Result<()> {
let mut CNAMES = ActualCharArray::new(CNAMSZ, 1..=MXCLSG);
let mut COLNAM = [b' '; CNAMSZ as usize];
let mut DECLS = ActualCharArray::new(DECLEN, 1..=MXCLSG);
let mut MSG = [b' '; LMSGLN as usize];
let mut TABNAM = [b' '; TNAMSZ as usize];
let mut ATTDSC = StackArray::<i32, 6>::new(1..=ADSCSZ);
let mut DIMS = StackArray::<i32, 100>::new(1..=MXCLSG);
let mut DTYPES = StackArray::<i32, 100>::new(1..=MXCLSG);
let mut CCLASS = StackArray::<i32, 100>::new(1..=MXCLSG);
let mut FILENO: i32 = 0;
let mut HANDLE: i32 = 0;
let mut NATBFF: i32 = 0;
let mut NCOLS: i32 = 0;
let mut NNBFF: i32 = 0;
let mut NROWS: i32 = 0;
let mut NSEG: i32 = 0;
let mut NTAB: i32 = 0;
let mut SEGTYP: i32 = 0;
let mut STLENS = StackArray::<i32, 100>::new(1..=MXCLSG);
let mut XNCOLS: i32 = 0;
let mut BOOL: bool = false;
let mut INDEXD = StackArray::<bool, 100>::new(1..=MXCLSG);
let mut NULLOK = StackArray::<bool, 100>::new(1..=MXCLSG);
testutil::TOPEN(b"F_NNEK03", ctx)?;
testutil::TCASE(b"Set native and non-native binary file format codes.", ctx)?;
spicelib::ZZDDHNFC(&mut NATBFF, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
if (NATBFF == LTLI3E) {
NNBFF = BIGI3E;
} else {
NNBFF = LTLI3E;
}
testutil::TCASE(b"Setup: create an EK.", ctx)?;
FILENO = 1;
testutil::TSTEK(EK1NAT, FILENO, MAXROW, false, &mut HANDLE, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(b"Create non-native EK from native version.", ctx)?;
T_BINGO(EK1NAT, EK1, NNBFF, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::DELFIL(EK1NAT, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TFILES(EK1, ctx);
testutil::TCASE(
b"Test EKNTAB: make sure the number of tables matches the number of segments in EK1.",
ctx,
)?;
spicelib::EKOPR(EK1, &mut HANDLE, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
NSEG = spicelib::EKNSEG(HANDLE, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::EKCLS(HANDLE, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::FURNSH(EK1, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(b"Continuing previous case; creating EK2", ctx)?;
testutil::TSTEK(EK2NAT, FILENO, MAXROW, false, &mut HANDLE, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
T_BINGO(EK2NAT, EK2, NNBFF, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::DELFIL(EK2NAT, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TFILES(EK2, ctx);
testutil::TCASE(b"Continuing previous case; using EK2", ctx)?;
spicelib::FURNSH(EK2, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::EKNTAB(&mut NTAB, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::CHCKSI(
b"Number of loaded tables NTAB",
NTAB,
b"=",
NSEG,
0,
OK,
ctx,
)?;
for TAB in 1..=NTAB {
fstr::assign(&mut MSG, b"Testing EKTNAM, EKCCNT, EKCII for table #");
spicelib::REPMI(&MSG.clone(), b"#", TAB, &mut MSG, ctx);
testutil::TCASE(&MSG, ctx)?;
spicelib::EKTNAM(TAB, &mut TABNAM, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TSTSCH(
&TABNAM,
MAXROW,
&mut SEGTYP,
&mut NROWS,
&mut XNCOLS,
CNAMES.as_arg_mut(),
CCLASS.as_slice_mut(),
DTYPES.as_slice_mut(),
STLENS.as_slice_mut(),
DIMS.as_slice_mut(),
INDEXD.as_slice_mut(),
NULLOK.as_slice_mut(),
DECLS.as_arg_mut(),
ctx,
)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::EKCCNT(&TABNAM, &mut NCOLS, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::CHCKSI(b"NCOLS from EKCCNT", NCOLS, b"=", XNCOLS, 0, OK, ctx)?;
for I in 1..=NCOLS {
spicelib::EKCII(&TABNAM, I, &mut COLNAM, ATTDSC.as_slice_mut(), ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::CHCKSC(b"COLNAM", &COLNAM, b"=", &CNAMES[I], OK, ctx)?;
testutil::CHCKSI(b"COLNAM class", ATTDSC[ATTCLS], b"=", CCLASS[I], 0, OK, ctx)?;
testutil::CHCKSI(
b"COLNAM data type",
ATTDSC[ATTTYP],
b"=",
DTYPES[I],
0,
OK,
ctx,
)?;
if (ATTDSC[ATTTYP] == CHR) {
testutil::CHCKSI(
b"COLNAM string length",
ATTDSC[ATTLEN],
b"=",
STLENS[I],
0,
OK,
ctx,
)?;
}
testutil::CHCKSI(
b"COLNAM entry size",
ATTDSC[ATTSIZ],
b"=",
DIMS[I],
0,
OK,
ctx,
)?;
BOOL = (ATTDSC[ATTIDX] == ITRUE);
testutil::CHCKSL(b"COLNAM index flag", BOOL, INDEXD[I], OK, ctx)?;
BOOL = (ATTDSC[ATTNFL] == ITRUE);
testutil::CHCKSL(b"COLNAM null ok flag", BOOL, NULLOK[I], OK, ctx)?;
}
}
testutil::TCASE(b"Unload EKs from query system.", ctx)?;
spicelib::UNLOAD(EK1, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::UNLOAD(EK2, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::T_SUCCESS(OK, ctx);
Ok(())
}