use super::*;
use f2rust_std::*;
const EPARCH: i32 = 1;
const EPNIPT: i32 = 5;
const EPPSZC: i32 = (EPARCH + 1);
const EPBASC: i32 = (EPPSZC + 1);
const EPNPC: i32 = (EPBASC + 1);
const EPNFPC: i32 = (EPNPC + 1);
const EPFPC: i32 = (EPNFPC + 1);
const EPPSZD: i32 = (EPPSZC + EPNIPT);
const EPBASD: i32 = (EPPSZD + 1);
const EPNPD: i32 = (EPBASD + 1);
const EPNFPD: i32 = (EPNPD + 1);
const EPFPD: i32 = (EPNFPD + 1);
const EPPSZI: i32 = (EPPSZD + EPNIPT);
const EPBASI: i32 = (EPPSZI + 1);
const EPNPI: i32 = (EPBASI + 1);
const EPNFPI: i32 = (EPNPI + 1);
const EPFPI: i32 = (EPNFPI + 1);
const EPMDSZ: i32 = (1 + (3 * EPNIPT));
const PGSIZC: i32 = 1024;
const PGSIZD: i32 = 128;
const PGSIZI: i32 = 256;
const PGBASC: i32 = 0;
const PGBASD: i32 = 0;
const PGBASI: i32 = 256;
const ARCHID: i32 = 8;
const CHR: i32 = 1;
const DP: i32 = 2;
const INT: i32 = 3;
const TIME: i32 = 4;
pub fn ZZEKPGCH(HANDLE: i32, ACCESS: &[u8], ctx: &mut Context) -> f2rust_std::Result<()> {
let mut ID: i32 = 0;
let mut LASTC: i32 = 0;
let mut LASTD: i32 = 0;
let mut LASTI: i32 = 0;
let mut NPC: i32 = 0;
let mut NPD: i32 = 0;
let mut NPI: i32 = 0;
let mut TOPC: i32 = 0;
let mut TOPD: i32 = 0;
let mut TOPI: i32 = 0;
CHKIN(b"ZZEKPGCH", ctx)?;
DASSIH(HANDLE, ACCESS, ctx)?;
if FAILED(ctx) {
CHKOUT(b"ZZEKPGCH", ctx)?;
return Ok(());
}
DASRDI(HANDLE, EPARCH, EPARCH, std::slice::from_mut(&mut ID), ctx)?;
if (ID != ARCHID) {
SETMSG(b"File # has architecture #, which is invalid for paged access. You are using EK software version #.", ctx);
ERRHAN(b"#", HANDLE, ctx)?;
ERRINT(b"#", ID, ctx);
ERRINT(b"#", ARCHID, ctx);
SIGERR(b"SPICE(WRONGARCHITECTURE)", ctx)?;
CHKOUT(b"ZZEKPGCH", ctx)?;
return Ok(());
}
DASRDI(HANDLE, EPNPC, EPNPC, std::slice::from_mut(&mut NPC), ctx)?;
DASRDI(HANDLE, EPNPD, EPNPD, std::slice::from_mut(&mut NPD), ctx)?;
DASRDI(HANDLE, EPNPI, EPNPI, std::slice::from_mut(&mut NPI), ctx)?;
TOPC = (NPC * PGSIZC);
TOPD = (NPD * PGSIZD);
TOPI = ((NPI * PGSIZI) + PGBASI);
DASLLA(HANDLE, &mut LASTC, &mut LASTD, &mut LASTI, ctx)?;
if (LASTC > TOPC) {
SETMSG(b"File # has last char address #; `top\' = #.", ctx);
ERRHAN(b"#", HANDLE, ctx)?;
ERRINT(b"#", LASTC, ctx);
ERRINT(b"#", TOPC, ctx);
SIGERR(b"SPICE(INVALIDFORMAT)", ctx)?;
CHKOUT(b"ZZEKPGCH", ctx)?;
return Ok(());
} else if (LASTD > TOPD) {
SETMSG(b"File # has last d.p. address #; `top\' = #.", ctx);
ERRHAN(b"#", HANDLE, ctx)?;
ERRINT(b"#", LASTD, ctx);
ERRINT(b"#", TOPD, ctx);
SIGERR(b"SPICE(INVALIDFORMAT)", ctx)?;
CHKOUT(b"ZZEKPGCH", ctx)?;
return Ok(());
} else if (LASTI > TOPI) {
SETMSG(b"File # has last int. address #; `top\' = #.", ctx);
ERRHAN(b"#", HANDLE, ctx)?;
ERRINT(b"#", LASTI, ctx);
ERRINT(b"#", TOPI, ctx);
SIGERR(b"SPICE(INVALIDFORMAT)", ctx)?;
CHKOUT(b"ZZEKPGCH", ctx)?;
return Ok(());
}
CHKOUT(b"ZZEKPGCH", ctx)?;
Ok(())
}