extern crate memmap; extern crate generic_array; pub mod durandal; pub mod marathon; use std::{io, fs, env}; use std::io::Write; use memmap::Mmap; use marathon::wad; use durandal::pict::load_pict; fn main() -> io::Result<()> { let arg = env::args().nth(1).expect("need at least 1 argument"); let fp = fs::File::open(arg)?; let mm = unsafe{Mmap::map(&fp)?}; let wad = wad::Wad::new(&mm); println!("{:?}", wad); for (id, ent) in wad.ent { if let Some(c) = ent.map.get(b"PICT") { let im = load_pict(c); match im { Ok(im) => { let out = fs::File::create(format!("out_{}.ppm", id))?; let mut out = io::BufWriter::new(out); println!("entry {} has PICT {}x{}", id, im.w(), im.h()); write!(&mut out, "P3\n{} {}\n255\n", im.w(), im.h())?; for y in 0..im.h() { for x in 0..im.w() { let cr = &im[(x, y)]; write!(&mut out, "{} {} {} ", cr.r, cr.g, cr.b)?; } } }, Err(e) => println!("entry {} has PICT (invalid: {:?})", id, e), } } } Ok(()) } // EOF