modified: src/main.rs
This commit is contained in:
parent
daa1494526
commit
ed5b5638ba
53
src/main.rs
53
src/main.rs
@ -43,7 +43,7 @@ struct AlbumItem {
|
|||||||
#[derive(Archive, Deserialize, Serialize, Debug, PartialEq)]
|
#[derive(Archive, Deserialize, Serialize, Debug, PartialEq)]
|
||||||
#[rkyv(compare(PartialEq), derive(Debug))]
|
#[rkyv(compare(PartialEq), derive(Debug))]
|
||||||
struct TrackItem {
|
struct TrackItem {
|
||||||
number_of_strings: u32,
|
number_of_strings: u32, // number of mhod's count
|
||||||
unique_id: u32,
|
unique_id: u32,
|
||||||
visible: u32,
|
visible: u32,
|
||||||
filetype: u32,
|
filetype: u32,
|
||||||
@ -115,6 +115,18 @@ struct TrackItem {
|
|||||||
mhii_link: u32
|
mhii_link: u32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Archive, Deserialize, Serialize, Debug, PartialEq)]
|
||||||
|
#[rkyv(compare(PartialEq), derive(Debug))]
|
||||||
|
struct Entry { // mhod
|
||||||
|
entry_type: u32,
|
||||||
|
unk1: u32,
|
||||||
|
unk2: u32,
|
||||||
|
position: u32,
|
||||||
|
length: u32,
|
||||||
|
unknown: u32,
|
||||||
|
unk4: u32
|
||||||
|
}
|
||||||
|
|
||||||
enum ChunkState {
|
enum ChunkState {
|
||||||
Header,
|
Header,
|
||||||
Data
|
Data
|
||||||
@ -134,28 +146,57 @@ fn db(data: &[u8]) {
|
|||||||
},
|
},
|
||||||
ChunkState::Data => {
|
ChunkState::Data => {
|
||||||
let header = chunk_header.unwrap();
|
let header = chunk_header.unwrap();
|
||||||
|
let mut u = 0;
|
||||||
|
// usize::try_from(header.end_of_chunk).unwrap() - 12
|
||||||
match header.chunk_type {
|
match header.chunk_type {
|
||||||
[109, 104, 98, 100] => { //mhbd
|
[109, 104, 98, 100] => { //mhbd
|
||||||
info!("val: {:?}", rkyv::access::<ArchivedDatabase, Error>(&data[i..i+82]).unwrap());
|
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||||
|
info!("val: {:?}", rkyv::access::<ArchivedDatabase, Error>(&data[i..i+u]).unwrap());
|
||||||
},
|
},
|
||||||
[109, 104, 115, 100] => { //mhsd
|
[109, 104, 115, 100] => { //mhsd
|
||||||
info!("val: {:?}", rkyv::access::<ArchivedDataSet, Error>(&data[i..i+4]).unwrap());
|
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||||
|
info!("val: {:?}", rkyv::access::<ArchivedDataSet, Error>(&data[i..i+u]).unwrap());
|
||||||
},
|
},
|
||||||
[109, 104, 105, 97] => { // mhla
|
[109, 104, 105, 97] => { // mhla
|
||||||
info!("AlbumList");
|
info!("AlbumList");
|
||||||
|
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||||
},
|
},
|
||||||
[109, 104, 108, 97] => { // mhia
|
[109, 104, 108, 97] => { // mhia
|
||||||
info!("val: {:?}", rkyv::access::<ArchivedAlbumItem, Error>(&data[i..i+20]).unwrap());
|
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||||
|
info!("val: {:?}", rkyv::access::<ArchivedAlbumItem, Error>(&data[i..i+u]).unwrap());
|
||||||
},
|
},
|
||||||
[109, 104, 108, 116] => { // mhlt
|
[109, 104, 108, 116] => { // mhlt
|
||||||
info!("TrackList");
|
info!("TrackList");
|
||||||
|
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||||
},
|
},
|
||||||
[109, 104, 105, 116] => { // mhit
|
[109, 104, 105, 116] => { // mhit
|
||||||
info!("val: {:?}", rkyv::access::<ArchivedTrackItem, Error>(&data[i..]).unwrap());
|
//info!("head: {}, {}", header.end_of_chunk, header.children_count);
|
||||||
|
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||||
|
info!("val: {:?}", rkyv::access::<ArchivedTrackItem, Error>(&data[i..i+u]).unwrap());
|
||||||
|
},
|
||||||
|
[109, 104, 111, 100] => { // mhod
|
||||||
|
u = usize::try_from(header.children_count).unwrap() - 12;
|
||||||
|
//info!("head: {}, {}", header.end_of_chunk, header.children_count);
|
||||||
|
let header_offset: usize = (header.end_of_chunk + 4) as usize;
|
||||||
|
let str_end: usize = (header.children_count - 12) as usize;
|
||||||
|
let entry = rkyv::access::<ArchivedEntry, Error>(&data[i..]).unwrap();
|
||||||
|
info!("val: {:?}", &entry);
|
||||||
|
let mut bytes = Vec::new();
|
||||||
|
|
||||||
|
let mut h = i+header_offset;
|
||||||
|
while h < i+str_end {
|
||||||
|
if data[h] != 0 {
|
||||||
|
bytes.push(data[h]);
|
||||||
|
}
|
||||||
|
h+=1;
|
||||||
|
}
|
||||||
|
//info!("bytes: {:?}", &data[i+header_offset..i+str_end]);
|
||||||
|
let g = String::from_utf8(bytes).unwrap();
|
||||||
|
info!("str: {}", g);
|
||||||
}
|
}
|
||||||
_ => return
|
_ => return
|
||||||
}
|
}
|
||||||
i += usize::try_from(header.end_of_chunk).unwrap() - 12;
|
i += u;
|
||||||
chunk_header = None;
|
chunk_header = None;
|
||||||
ChunkState::Header
|
ChunkState::Header
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user