This branch predates CI on `main`. `cargo fmt --all` only; no behaviour. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
46 lines
1.6 KiB
Rust
46 lines
1.6 KiB
Rust
//! Which elements carry which values at the low-cardinality declaration words?
|
|
//!
|
|
//! `decl_entry_diff` found nothing separating `ptframe1`/`ptframe2` except their
|
|
//! NAME — +0x00 and +0x08 are the name string ("ptfr", ".t32"), so those two hits
|
|
//! are a false positive of that test, not a field.
|
|
//!
|
|
//! The remaining candidates for a per-element mode flag are the words with few
|
|
//! distinct values: +0x28 (3) and +0x2C (6). This prints who has what.
|
|
//!
|
|
//! cargo run -p sylpheed-formats --example decl_flag_words
|
|
use std::path::PathBuf;
|
|
use sylpheed_formats::{pak::PakArchive, ui_layout};
|
|
|
|
const AT: usize = 0x20;
|
|
const N: usize = 60;
|
|
|
|
fn main() {
|
|
let root = PathBuf::from(std::env::var("SYLPHEED_DISC").expect("SYLPHEED_DISC"));
|
|
let ar = PakArchive::open(root.join("dat/GP_TITLE.pak")).expect("GP_TITLE");
|
|
let by = ar.read(&ar.entries()[5]).expect("entry 5");
|
|
let b = ui_layout::parse_build(&by).expect("build");
|
|
let w = |i: usize, off: usize| -> u32 {
|
|
let o = AT + i * N + off;
|
|
u32::from_be_bytes([by[o], by[o + 1], by[o + 2], by[o + 3]])
|
|
};
|
|
println!(
|
|
"{:<22} {:>10} {:>10} {:>10} {:>10}",
|
|
"element", "+0x28", "+0x2C", "+0x34", "kind"
|
|
);
|
|
for (i, e) in b.elements.iter().enumerate() {
|
|
let mark = if e.name.starts_with("ptframe") {
|
|
" <- FRAME"
|
|
} else {
|
|
""
|
|
};
|
|
println!(
|
|
"{:<22} {:>10} {:>10} {:>10} {:>#10x}{mark}",
|
|
e.name,
|
|
w(i, 0x28),
|
|
w(i, 0x2C) as i32,
|
|
w(i, 0x34),
|
|
e.kind
|
|
);
|
|
}
|
|
}
|