summaryrefslogtreecommitdiff
path: root/src/hex.rs
diff options
context:
space:
mode:
authorAdandi <rwindowed@gmail.com>2025-03-21 15:57:22 +0200
committerGitHub <noreply@github.com>2025-03-21 15:57:22 +0200
commit018d4287dc2a564b2daf8d595692024b91681ea3 (patch)
tree8a84529a6f08138d2842718b21430475dca4b46a /src/hex.rs
parent1fcd3aa2098de576f5551af0c332665f9233eb4c (diff)
Add files via upload
Diffstat (limited to 'src/hex.rs')
-rw-r--r--src/hex.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/hex.rs b/src/hex.rs
new file mode 100644
index 0000000..6dfbe7f
--- /dev/null
+++ b/src/hex.rs
@@ -0,0 +1,35 @@
+use std::{fs, io};
+use std::io::stdout;
+use ratatui::{backend::CrosstermBackend, Terminal};
+use crossterm::{execute, terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}};
+use crate::{input, render};
+
+pub struct HexEditor {
+ filename: String,
+ data: Vec<u8>,
+ cursor: usize,
+ terminal: Terminal<CrosstermBackend<std::io::Stdout>>,
+}
+
+impl HexEditor {
+ pub fn new(filename: String, data: Vec<u8>) -> io::Result<Self> {
+ enable_raw_mode()?;
+ execute!(stdout(), EnterAlternateScreen)?;
+ let terminal = Terminal::new(CrosstermBackend::new(stdout()))?;
+ Ok(Self { filename, data, cursor: 0, terminal })
+ }
+
+ pub fn run(&mut self) -> io::Result<()> {
+ while input::handle_input(&mut self.cursor, &mut self.data[..])? {
+ render::draw(&mut self.terminal, &self.data, self.cursor, &self.filename)?;
+ }
+ self.cleanup()
+ }
+
+ pub fn cleanup(&mut self) -> io::Result<()> {
+ disable_raw_mode()?;
+ execute!(stdout(), LeaveAlternateScreen)?;
+ fs::write(&self.filename, &self.data)?;
+ Ok(())
+ }
+}