From eceb2ffe81aaf02191f441fa759699efbc5fe4e3 Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Wed, 23 May 2018 13:49:00 -0400 Subject: Initial GRP parser, which will likely be rewritten by the time it's actually needed. --- src/main.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..29c3e1e --- /dev/null +++ b/src/main.rs @@ -0,0 +1,39 @@ +mod fmt; + +use std::fs::File; +use std::io::Read; +use std::io::Write; // Temporary + +fn main() { + let filename = "/tmp/DUKE3D.GRP"; + + let mut file = match File::open(filename) { + Ok(file) => file, + Err(err) => { + panic!("Couldn't open {}", filename); + } + }; + + let mut bytes: Vec = Vec::new(); + + match file.read_to_end(&mut bytes) { + Ok(count) => println!("Read {} bytes", count), + Err(err) => panic!("Couldn't read."), + } + + let grp = fmt::Group::new(&bytes).unwrap(); + + println!("Files: {}", grp.file_count); + + for entry in grp { + println!("{}", entry.name); + if entry.name.contains("MID") { + let mut filename = String::from("/tmp/"); + filename.push_str(&entry.name); + filename = filename[..filename.find('\x00').unwrap()].to_string(); + + let mut file = File::create(filename).unwrap(); + file.write_all(&entry.data).unwrap(); + } + } +} -- cgit v1.3