Mercurial > touhou
annotate formats/src/bin/dump_dat.rs @ 789:b5bca9274335
utils: Make some math functions const
Sadly f32::sqrt() isn’t const, so we can’t make normalize() const nor any
function which depends on it.
| author | Link Mauve <linkmauve@linkmauve.fr> |
|---|---|
| date | Sun, 04 Jan 2026 11:49:03 +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 } |
