summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob@memeware.net>2018-05-23 13:49:00 -0400
committerJakob L. Kreuze <jakob@memeware.net>2018-05-23 13:49:00 -0400
commiteceb2ffe81aaf02191f441fa759699efbc5fe4e3 (patch)
tree58ccb10e624597c57e3fe241e66d9b5fb57bab2b /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.rs39
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();
+ }
+ }
+}