initial commit

This commit is contained in:
jpk 2021-04-18 16:40:31 +02:00
commit 22cbcb12c8
4 changed files with 81 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/target

5
Cargo.lock generated Normal file
View File

@ -0,0 +1,5 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "hd"
version = "0.1.0"

9
Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "hd"
version = "0.1.0"
authors = ["JayPiKay <jpk@goatpr0n.de>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

66
src/main.rs Normal file
View File

@ -0,0 +1,66 @@
use std::env;
use std::io::prelude::*;
use std::fs::File;
const GLOBAL_BUFFER_LENGTH: usize = 16;
fn get_file(filename: String) -> File {
match File::open(filename) {
Ok(f) => File::from(f),
Err(e) => {
panic!(e);
}
}
}
fn dump_to_hex(bytes: &mut [u8]) -> String {
let out_vec: Vec<String> = bytes.chunks(2)
.map(|c| {
if c.len() == 2 { format!("{:02x}{:02x}", c[0], c[1]) }
else { format!("{:02x}", c[0]) }
}).collect();
out_vec.join(" ")
}
fn dump_to_chr(bytes: &mut [u8]) -> String {
let out_vec: Vec<String> = bytes.iter().map(|ord| {
if *ord >= 32 && *ord <= 126 { (*ord as char).to_string() }
else { '.'.to_string() }
}).collect();
out_vec.join("")
}
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
panic!("Not enough arguments!");
}
let filename = &args[1];
let mut open_file = get_file(filename.to_string());
let mut buf = [0; GLOBAL_BUFFER_LENGTH];
let mut offset: usize = 0;
loop {
let bytes_read = open_file.read(&mut buf);
match bytes_read {
Ok(num) => {
if num == 0 {
break;
} else {
println!("{:08x}: {:40} {:10}",
offset,
dump_to_hex(&mut buf[0..num]),
dump_to_chr(&mut buf[0..num]));
offset += GLOBAL_BUFFER_LENGTH;
}
},
Err(e) => {
eprintln!("hd: {}", e);
break;
}
}
}
}