The nine files touched by the OPTIONS commits of 2026-09-03 (77f1d18,fda417a,3efe1cc,80042cb,4c24e06,a921c1e,41f1331,6b4b1df,edf8979), taken as of0148cb8, the tip of auto/port-p6-audio. The branch was deleted from the server on 2026-09-17 during the consolidation cleanup; issue #6 asks for this work as a reviewable PR, so it is recovered here before the commits are garbage collected. This is a review slice, not a self-consistent tree: the OPTIONS work and the F5/F6 work interleaved in the original history and cannot be separated by file, so each file carries whatever else had changed in it by 2026-09-04, and files it depends on are absent. The complete state is recover/port-f5-f6. Refs #6. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
43 lines
1.7 KiB
Rust
43 lines
1.7 KiB
Rust
//! Which disc archives contain UI screen builds?
|
|
//!
|
|
//! The exporter reads `dat/GP_TITLE.pak` and nothing else, so four of the five
|
|
//! main-menu destinations have no screen file to go to: `authored/flow.json`
|
|
//! records LOAD GAME as `GP_SAVE_LOAD`, OPTIONS as `GP_OPTIONS`, and NEW GAME's
|
|
//! chain as `DLG_SELECT_DIFFICULTY` -> `SELECT DATA`, all measured destinations
|
|
//! that this export cannot reach.
|
|
//!
|
|
//! This asks the cheap question before anyone refactors the exporter: does the
|
|
//! EXISTING build detector find anything in those archives? It changes nothing
|
|
//! and writes nothing.
|
|
//!
|
|
//! cargo run --release -p sylpheed-export --example probe_archives
|
|
use sylpheed_formats::{pak::PakArchive, ui_layout};
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let disc = std::env::var("SYLPHEED_DISC").unwrap_or_else(|_| "/disc".into());
|
|
let mut names: Vec<String> = std::fs::read_dir(format!("{disc}/dat"))?
|
|
.filter_map(|e| e.ok())
|
|
.map(|e| e.file_name().to_string_lossy().into_owned())
|
|
.filter(|n| n.ends_with(".pak"))
|
|
.collect();
|
|
names.sort();
|
|
println!("{:<32} {:>7} {:>8}", "archive", "entries", "builds");
|
|
for n in names {
|
|
let path = format!("{disc}/dat/{n}");
|
|
let Ok(ar) = PakArchive::open(&path) else {
|
|
println!("{n:<32} {:>7} {:>8}", "-", "open failed");
|
|
continue;
|
|
};
|
|
let total = ar.entries().len();
|
|
let builds = ar
|
|
.entries()
|
|
.iter()
|
|
.filter(|e| ar.read(e).map(|b| ui_layout::is_build(&b)).unwrap_or(false))
|
|
.count();
|
|
if builds > 0 || n.contains("OPTIONS") || n.contains("SAVE") || n.contains("DIALOG") {
|
|
println!("{n:<32} {total:>7} {builds:>8}");
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|