mirror of
https://github.com/redstrate/Physis.git
synced 2025-04-20 11:47:46 +00:00
Add a simple extractor example
This commit is contained in:
parent
349a194060
commit
f818cf5376
1 changed files with 48 additions and 0 deletions
48
examples/extractor.rs
Normal file
48
examples/extractor.rs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
// SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::Write;
|
||||||
|
use physis::common::Platform;
|
||||||
|
use physis::gamedata::GameData;
|
||||||
|
|
||||||
|
/// A simple program that allows a user to extract raw files from the game
|
||||||
|
fn main() {
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
if args.len() != 4 {
|
||||||
|
println!("Usage: extractor [game dir] [filepath_to_extract] [destination]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Collect our arguments
|
||||||
|
let game_dir = &args[1];
|
||||||
|
let file_path = &args[2];
|
||||||
|
let destination_path = &args[3];
|
||||||
|
|
||||||
|
/// Create a GameData struct, this manages the repositories. It allows us to easily extract files.
|
||||||
|
let Some(mut game_data) = GameData::from_existing(Platform::Win32, game_dir) else {
|
||||||
|
println!("Invalid game directory ({})!", game_dir);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Extract said file:
|
||||||
|
let Some(game_file) = game_data.extract(file_path) else {
|
||||||
|
println!("File {} not found!", file_path);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Create the file to write into.
|
||||||
|
let Ok(mut file) = File::create(destination_path) else {
|
||||||
|
println!("Failed to open file {} for writing.", destination_path);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Since GameData::extract returns a byte buffer, it's trivial to write that to a file on disk.
|
||||||
|
if !file.write_all(&game_file).is_ok() {
|
||||||
|
println!("Failed to write to file {}.", destination_path);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
println!("Successfully extracted {} to {}!", file_path, destination_path);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue