Mercurial > touhou
annotate formats/src/bin/dump_dat.rs @ 792:11bc22bad1bf default tip
python: Replace the image crate with png
We weren’t using any of its features anyway, so the png crate is exactly what
we need, without the many heavy dependencies of image.
https://github.com/image-rs/image-png/pull/670 will eventually make it even
faster to build.
| author | Link Mauve <linkmauve@linkmauve.fr> |
|---|---|
| date | Sat, 17 Jan 2026 22:22:25 +0100 |
| parents | ccb04468c5fa |
| children |
| rev | line source |
|---|---|
|
759
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
1 use touhou_formats::th06::pbg3::PBG3; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
2 use std::env; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
3 use std::path::Path; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
4 use std::fs::{File, create_dir_all}; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
5 use std::io::{self, BufReader, Write}; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
6 |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
7 fn main() -> io::Result<()> { |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
8 // Parse arguments. |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
9 let args: Vec<_> = env::args().collect(); |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
10 if args.len() != 3 { |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
11 eprintln!("Usage: {} <DAT file> <output dir>", args[0]); |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
12 std::process::exit(1); |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
13 } |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
14 |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
15 let filename = Path::new(&args[1]); |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
16 let output_filename = Path::new(&args[2]); |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
17 |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
18 let file = File::open(filename)?; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
19 let file = BufReader::new(file); |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
20 let mut pbg3 = PBG3::from_file(file)?; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
21 let list = pbg3.list_files().cloned().collect::<Vec<_>>(); |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
22 |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
23 create_dir_all(output_filename)?; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
24 for filename in list { |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
25 let data = pbg3.get_file(&filename, true)?; |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
26 let mut output = File::create(output_filename.join(filename))?; |
|
767
ccb04468c5fa
formats: Use Read::read_exact() and Write::write_all()
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
759
diff
changeset
|
27 output.write_all(&data)?; |
|
759
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
28 } |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
29 |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
30 Ok(()) |
|
abcb586566e6
formats: Add a dump_dat binary.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
31 } |
