OpenSpec-Review dokumentieren und ISAM-Vertragsabweichungen beheben

This commit is contained in:
2026-09-05 17:55:09 +02:00
parent 19804e0e2d
commit 57d6386a5a
61 changed files with 3087 additions and 86 deletions

View File

@@ -1283,6 +1283,9 @@ fn bi_open(
let nummer = arg_i32(a, 1)?;
let modus = fio::Modus::aus_text(&arg_str(a, 2)?).ok_or(RuntimeError::ILLEGAL_FUNCTION_CALL)?;
let reclen = arg_i32(a, 3)?.max(1) as usize;
if st.isam.ist_isam(nummer) {
return Err(RuntimeError::FILE_ALREADY_OPEN);
}
st.dateien
.oeffnen(nummer, &pfad, modus, reclen)
.map(|_| None)
@@ -1305,7 +1308,7 @@ fn bi_close_all(
_: &mut dyn Host,
_: &mut [Value],
) -> Result<Option<Value>, RuntimeError> {
st.isam.alles_schliessen();
st.isam.bindungen_schliessen();
st.dateien.alle_schliessen().map(|_| None)
}
@@ -1427,7 +1430,10 @@ fn bi_freefile(
_: &mut dyn Host,
_: &mut [Value],
) -> Result<Option<Value>, RuntimeError> {
Ok(Some(Value::Int(st.dateien.freie_nummer() as i16)))
let nummer = (st.dateien.freie_nummer()..=i16::MAX as i32)
.find(|n| !st.dateien.ist_offen(*n) && !st.isam.ist_isam(*n))
.ok_or(RuntimeError::TOO_MANY_FILES)?;
Ok(Some(Value::Int(nummer as i16)))
}
fn bi_fileattr(
@@ -2410,6 +2416,9 @@ fn bi_isam_open(
let tabelle = arg_str(a, 2)?;
let spalten = arg_str(a, 3)?;
let udt = arg_i32(a, 4)? as u16;
if st.dateien.ist_offen(nummer) {
return Err(RuntimeError::FILE_ALREADY_OPEN);
}
st.isam
.oeffnen(nummer, &datenbank, &tabelle, &spalten, udt)
.map(|_| None)