Ereigniszustellung und Hostgrenzen korrigieren und Change archivieren

This commit is contained in:
2026-09-05 19:15:31 +02:00
parent 57d6386a5a
commit 644a86212f
39 changed files with 2013 additions and 271 deletions

View File

@@ -57,6 +57,8 @@ pub struct Traps {
/// `EVENT OFF` klammert einen Abschnitt ohne Ereignisprüfung. Kein
/// dritter Zustand — den kennt das Vorbild nicht.
event_an: bool,
/// Menüsperre ohne Änderung der expliziten ON/OFF/STOP-Zustände.
suspendiert: bool,
/// Fälligkeit des Zeit-Traps: Intervall und der Zeitpunkt, an dem er
/// das nächste Mal fällig wird (beides in Millisekunden).
timer_intervall_ms: u64,
@@ -178,6 +180,27 @@ impl Traps {
self.aktiv
}
pub fn suspendieren(&mut self, gesperrt: bool) {
self.suspendiert = gesperrt;
}
pub fn ist_an(&self, q: Quelle) -> bool {
self.traps
.iter()
.any(|t| t.quelle == q && t.zustand == Zustand::An)
}
/// Nächste Hostfrist, sofern der Zeit-Trap überhaupt Zeit benötigt.
pub fn naechste_frist(&self) -> Option<u64> {
(self.event_an
&& !self.suspendiert
&& self.timer_intervall_ms > 0
&& self.traps.iter().any(|t| {
t.quelle == Quelle::Timer && t.ziel.is_some() && t.zustand != Zustand::Aus
}))
.then_some(self.timer_faellig_ms)
}
/// Benutzerdefinierte Taste erklären (`KEY n, CHR$(flag)+CHR$(scan)`,
/// n = 1525). `flag` ist das Tastaturflagbyte des Vorbilds.
pub fn benutzertaste(&mut self, n: u8, flag: u8, scancode: u8) {
@@ -193,7 +216,7 @@ impl Traps {
/// Liefert die Trap-Nummer, nicht nur „ja/nein": der Aufrufer muss
/// wissen, welche Quelle er melden soll.
pub fn taste_faengt(&self, scancode: u8, shift: u8) -> Option<u8> {
if !self.event_an {
if !self.event_an || self.suspendiert {
return None;
}
let treffer = |k: u8| -> bool {
@@ -218,7 +241,7 @@ impl Traps {
/// Nächstes zuzustellendes Ereignis: Quelle und Sprungziel. Liefert
/// höchstens eines je Aufruf; die übrigen bleiben anstehend.
pub fn naechstes(&mut self) -> Option<(Quelle, u32)> {
if !self.event_an {
if !self.event_an || self.suspendiert {
return None;
}
let mut kandidaten: Vec<usize> = (0..self.traps.len())