bhd: sort out basic nom parsing
This commit is contained in:
parent
dec77551e2
commit
817c8491ef
21
src/main.rs
21
src/main.rs
|
@ -1,12 +1,14 @@
|
||||||
extern crate clap;
|
|
||||||
|
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufReader, Error, Read};
|
use std::io::{Error, Read};
|
||||||
|
|
||||||
//use std::path::Path;
|
|
||||||
|
|
||||||
|
extern crate clap;
|
||||||
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
|
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
|
||||||
|
|
||||||
|
mod parsers {
|
||||||
|
pub mod bhd;
|
||||||
|
}
|
||||||
|
use parsers::*;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let matches = App::new("Rusted Iron Ring")
|
let matches = App::new("Rusted Iron Ring")
|
||||||
.setting(AppSettings::ArgRequiredElseHelp)
|
.setting(AppSettings::ArgRequiredElseHelp)
|
||||||
|
@ -34,11 +36,10 @@ fn cmd_bhd(args: &ArgMatches) -> Result::<(), Error> {
|
||||||
println!("File: {:?}", filepath);
|
println!("File: {:?}", filepath);
|
||||||
println!("Output: {:?}", outputpath);
|
println!("Output: {:?}", outputpath);
|
||||||
|
|
||||||
let bhd_data: File = File::open(filepath)?;
|
let mut bhd_file: File = File::open(filepath)?;
|
||||||
let mut bhd_reader = BufReader::new(bhd_data);
|
let mut bhd_data = vec![0u8; bhd_file.metadata()?.len() as usize];
|
||||||
let mut magic: [u8; 4] = [0; 4];
|
bhd_file.read_to_end(&mut bhd_data)?;
|
||||||
bhd_reader.read(&mut magic)?;
|
|
||||||
|
|
||||||
println!("First byte: 0x{:X}", magic[0]);
|
bhd::parse(&bhd_data);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,23 @@
|
||||||
extern crate nom;
|
extern crate nom;
|
||||||
|
use nom::{IResult, named, verify};
|
||||||
|
use nom::number::complete::*;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct BhdHeader {
|
pub struct BhdHeader {
|
||||||
pub magic: u8[4];
|
pub magic: u32,
|
||||||
pub unk04: i8;
|
// pub unk04: i8,
|
||||||
pub unk05: i8;
|
// pub unk05: i8,
|
||||||
pub unk06: i8;
|
// pub unk06: i8,
|
||||||
pub unk07: i8;
|
// pub unk07: i8,
|
||||||
pub unk08: u32;
|
// pub unk08: u32,
|
||||||
pub num_buckets: u32;
|
// pub num_buckets: u32,
|
||||||
pub ofs_buckets: u32;
|
// pub ofs_buckets: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
const MAGIC: u32 = 0x35444842;
|
||||||
|
named!(check_magic<&[u8], u32>, verify!(le_u32, |m| *m == MAGIC));
|
||||||
|
|
||||||
|
pub fn parse(i: &[u8]) -> IResult<&[u8], BhdHeader> {
|
||||||
|
let (i, magic) = check_magic(i)?;
|
||||||
|
Ok((i, BhdHeader { magic }))
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue