From 018d4287dc2a564b2daf8d595692024b91681ea3 Mon Sep 17 00:00:00 2001 From: Adandi Date: Fri, 21 Mar 2025 15:57:22 +0200 Subject: Add files via upload --- src/input.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/input.rs (limited to 'src/input.rs') diff --git a/src/input.rs b/src/input.rs new file mode 100644 index 0000000..0db7e16 --- /dev/null +++ b/src/input.rs @@ -0,0 +1,23 @@ +use std::{io, time::Duration}; +use crossterm::{event::{self, KeyCode, KeyEvent}}; + +pub fn handle_input(cursor: &mut usize, data: &mut [u8]) -> io::Result { + if event::poll(Duration::from_millis(100))? { + if let event::Event::Key(KeyEvent { code, .. }) = event::read()? { + match code { + KeyCode::Esc => return Ok(false), + KeyCode::Left if *cursor > 0 => *cursor -= 1, + KeyCode::Right if *cursor < data.len() * 2 - 1 => *cursor += 1, + KeyCode::Up if *cursor >= 32 => *cursor -= 32, + KeyCode::Down if *cursor + 32 < data.len() * 2 => *cursor += 32, + KeyCode::Char(c) if c.is_ascii_hexdigit() => { + let byte_index = *cursor / 2; + let shift = if *cursor % 2 == 0 { 4 } else { 0 }; + data[byte_index] = (data[byte_index] & (0x0F << (4 - shift))) | (c.to_digit(16).unwrap() as u8) << shift; + } + _ => {} + } + } + } + Ok(true) +} -- cgit v1.2.3