modified: src/main.rs

This commit is contained in:
Michael Wain 2025-01-25 23:33:48 +03:00
parent daa1494526
commit ed5b5638ba

View File

@ -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
} }