Laufzeit-Eingabe und Zonenzustand korrigieren und Change archivieren

This commit is contained in:
2026-09-06 08:04:22 +02:00
parent 815825dde7
commit c8b92f0619
36 changed files with 1104 additions and 91 deletions

View File

@@ -2570,8 +2570,9 @@ impl Vm {
if let Some(taste) = self.rt.gepufferte_taste() {
let eingabe = self.frames[caller].eingabe.as_mut().unwrap();
if let Some(rest) = &mut eingabe.rest {
let taste = self.rt.tastenanteil(taste, *rest);
*rest -= taste.chars().count();
eingabe.text.push_str(&taste);
*rest -= 1;
} else {
match taste.as_str() {
tb_runtime::host::taste::ENTER => {
@@ -2872,19 +2873,26 @@ impl Vm {
refs.reverse();
let nummer = self.pop_i32()?;
let Some(zeile) = self.rt.dateien.get(nummer)?.zeile_lesen()? else {
return Err(RuntimeError(62)); // Input past end of file
};
if line_mode {
let zeile = self
.rt
.dateien
.get(nummer)?
.zeile_lesen()?
.ok_or(RuntimeError(62))?;
let r = refs.first().ok_or(RuntimeError(51))?;
self.write_ref(r, Value::Str(Rc::from(zeile.as_str())))?;
return Ok(());
}
let felder = tb_runtime::fileio::felder_trennen(&zeile);
for (i, r) in refs.iter().enumerate() {
let text = felder.get(i).map(String::as_str).unwrap_or("");
for r in &refs {
let text = self.rt.dateien.get(nummer)?.feld_lesen()?;
let ziel = self.read_ref(r)?;
let wert = input_value(&ziel, text).ok_or(RuntimeError(64))?; // Bad file name
// Der Feldleser hat Quotes und äußeren Leerraum bereits ausgewertet.
let wert = if matches!(ziel, Value::Str(_)) {
Value::Str(Rc::from(text))
} else {
input_value(&ziel, &text).ok_or(RuntimeError(64))?
};
self.write_ref(r, wert)?;
}
Ok(())