Ereigniszustellung und Hostgrenzen korrigieren und Change archivieren
This commit is contained in:
@@ -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 = 15–25). `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())
|
||||
|
||||
Reference in New Issue
Block a user