From 0c62e2e14f5b32c8b0ce8a72647cbdac977819a5 Mon Sep 17 00:00:00 2001 From: Jaby Date: Thu, 17 Nov 2022 02:52:32 +0100 Subject: [PATCH] Prepare content dump --- src/Tools/psxcdgen_ex/src/lib.rs | 28 ++++++++++++++++++++++++-- src/Tools/psxcdgen_ex/src/main.rs | 18 +++++------------ src/Tools/psxcdgen_ex/src/types/mod.rs | 8 ++++++++ 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/Tools/psxcdgen_ex/src/lib.rs b/src/Tools/psxcdgen_ex/src/lib.rs index 741b905d..134be4d8 100644 --- a/src/Tools/psxcdgen_ex/src/lib.rs +++ b/src/Tools/psxcdgen_ex/src/lib.rs @@ -5,8 +5,8 @@ pub mod encoder; pub mod file_writer; pub mod types; -use tool_helper::read_file; -use types::CDDesc; +use tool_helper::{format_if_error, Output, read_file}; +use types::{CDDesc, Directory}; pub type CalculateLBAFunction = fn(&mut types::CDDesc); @@ -17,6 +17,30 @@ pub fn process(config: config_reader::Configuration, calculate_lba: CalculateLBA Ok(cd_desc) } +pub fn dump_content(cd_desc: &CDDesc, out: Output) -> Result<(), Error> { + fn dump_dir(dir: &Directory, mut out: Output) -> Result<(), Error> { + for file in dir.file_iter() { + let file = file.borrow(); + let file_name = file.name.as_string().unwrap_or("".to_owned()); + let file_lba = file.get_track_rel_lba(); + + writeln!(out, "File: {} @{}", file_name, file_lba)?; + } + + for dir in dir.dir_iter() { + let dir = dir.borrow(); + let dir_name = dir.name.as_str().unwrap_or(""); + let dir_lba = dir.get_track_rel_lba(); + + writeln!(out, "Dir: {} @{}", dir_name, dir_lba)?; + } + + Ok(()) + } + + format_if_error!(dump_dir(&cd_desc.root.borrow(), out), "Creating content dump failed with: {error_text}") +} + fn parse_configuration(config: config_reader::Configuration) -> Result { fn parse_dir(dst_dir: &mut types::Directory, src_dir: config_reader::Directory) -> Result<(), Error> { for member in src_dir.into_iter() { diff --git a/src/Tools/psxcdgen_ex/src/main.rs b/src/Tools/psxcdgen_ex/src/main.rs index 1e885f16..fe1d446b 100644 --- a/src/Tools/psxcdgen_ex/src/main.rs +++ b/src/Tools/psxcdgen_ex/src/main.rs @@ -1,5 +1,5 @@ use clap::{Parser, ValueEnum}; -use psxcdgen_ex::{encoder::{EncodingFunctions, psx::{encode_psx_image, calculate_psx_lbas}}, file_writer::{ImageType, write_image}, types::{layout::Layout}, config_reader}; +use psxcdgen_ex::{encoder::{EncodingFunctions, psx::{encode_psx_image, calculate_psx_lbas}}, file_writer::{ImageType, write_image}, config_reader}; use std::{path::PathBuf, }; use tool_helper::Error; @@ -35,22 +35,14 @@ impl SystemType { fn run_main(cmd_line: CommandLine) -> Result<(), Error> { let encoding_functions = cmd_line.system_type.get_encoding_functions(); let desc = psxcdgen_ex::process(config_reader::parse_xml(std::fs::read_to_string(cmd_line.input_file)?)?, encoding_functions.lba_calculator)?; - - println!("\n<== Planschbecken ==>"); - for element in desc.get_memory_layout().iter() { - match element { - Layout::SystemArea(_) => println!("SystemArea:"), - Layout::PVD(_) => println!("PVD:"), - Layout::PathTables(_) => println!("PathTables:"), - Layout::Directory(dir) => println!("Dir: {} @{}-{}", dir.borrow().name, dir.borrow().get_track_rel_lba(), dir.borrow().get_extended_size()), - Layout::File(file) => println!("File: {} @{}-{}", file.borrow().name, file.borrow().get_track_rel_lba(), file.borrow().get_extended_size()), - } - } + println!("\n<== Planschbecken ==>"); for rand_item in desc.create_file_map() { println!("{}", rand_item.0); } - + println!("\n<== Planschbecken ==>"); + + psxcdgen_ex::dump_content(&desc, tool_helper::open_output(None)?)?; println!("\n<== Planschbecken ==>\nStart encoding"); write_image(desc, encoding_functions.encoder, cmd_line.output_type, cmd_line.output_file) } diff --git a/src/Tools/psxcdgen_ex/src/types/mod.rs b/src/Tools/psxcdgen_ex/src/types/mod.rs index 079fb816..d20cf8cb 100644 --- a/src/Tools/psxcdgen_ex/src/types/mod.rs +++ b/src/Tools/psxcdgen_ex/src/types/mod.rs @@ -156,6 +156,14 @@ impl Directory { self.properties.borrow_mut().size_bytes = size_bytes; } + + pub(super) fn file_iter(&self) -> core::slice::Iter> { + self.files.iter() + } + + pub(super) fn dir_iter(&self) -> core::slice::Iter> { + self.dirs.iter() + } } impl std::fmt::Display for Directory {