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/hex.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/hex.rs (limited to 'src/hex.rs') 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, + cursor: usize, + terminal: Terminal>, +} + +impl HexEditor { + pub fn new(filename: String, data: Vec) -> io::Result { + 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(()) + } +} -- cgit v1.2.3