#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct LocalModeFlagSettings
{
pub terminal_mode: Option<TerminalMode>,
pub echo: Option<Echo>,
pub signal_raising: Option<SignalRaising>,
pub miscellaneous: MiscellaneousLocalModeFlagSettings,
}
impl Default for LocalModeFlagSettings
{
#[inline(always)]
fn default() -> Self
{
Self
{
terminal_mode: Some(TerminalMode::default()),
echo: Some(Echo::default()),
signal_raising: Some(SignalRaising::default()),
miscellaneous: MiscellaneousLocalModeFlagSettings::default(),
}
}
}
impl LocalModeFlagSettings
{
#[inline(always)]
pub(crate) fn change_mode_flags(&self, terminal_options: &mut termios)
{
let existing_flags = terminal_options.c_lflag;
let mut new_flags = existing_flags;
if let Some(ref terminal_mode) = self.terminal_mode
{
new_flags = terminal_mode.change_mode_flags(new_flags);
}
new_flags = MultipleBits::change_mode_flags(self.echo, new_flags);
new_flags = MultipleBits::change_mode_flags(self.signal_raising, new_flags);
new_flags = self.miscellaneous.change_mode_flags(new_flags);
terminal_options.c_lflag = new_flags;
}
}