diff options
| author | Jakob L. Kreuze <jakob@memeware.net> | 2018-05-23 13:49:00 -0400 |
|---|---|---|
| committer | Jakob L. Kreuze <jakob@memeware.net> | 2018-05-23 13:49:00 -0400 |
| commit | eceb2ffe81aaf02191f441fa759699efbc5fe4e3 (patch) | |
| tree | 58ccb10e624597c57e3fe241e66d9b5fb57bab2b /src/main.rs | |
Initial GRP parser, which will likely be rewritten by the time it's actually needed.
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 39 |
1 files changed, 39 insertions, 0 deletions
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<u8> = 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(); + } + } +} |