diff --git a/src/Tools/psxcdgen_ex/src/encoder/cd.rs b/src/Tools/psxcdgen_ex/src/encoder/cd.rs index 9c6d67dc..e915f5da 100644 --- a/src/Tools/psxcdgen_ex/src/encoder/cd.rs +++ b/src/Tools/psxcdgen_ex/src/encoder/cd.rs @@ -10,19 +10,21 @@ const ROOT_DIR_NAME:&'static str = "\x00"; pub mod size_of { use cdtypes::types::{sector::Mode0, helper::{sector_count_mode2_form1, sector_count_mode2_form2}}; use crate::types::FileType; - use super::{Directory, File, FullSizeInfo, SizeInfo, PathTable}; + use super::{Directory, File, FullSizeInfo, RealSizeInfo, SizeInfo, PathTable}; pub const SYSTEM_AREA_SECTOR_COUNT:usize = 16; pub const PVD_SECTOR_COUNT:usize = 2; pub const fn system_area() -> SizeInfo { SizeInfo{ + real_size: RealSizeInfo{bytes: None, sectors: SYSTEM_AREA_SECTOR_COUNT}, full_size: FullSizeInfo{bytes: None, sectors: SYSTEM_AREA_SECTOR_COUNT} } } pub const fn pvd() -> SizeInfo { SizeInfo{ + real_size: RealSizeInfo{bytes: None, sectors: PVD_SECTOR_COUNT}, full_size: FullSizeInfo{bytes: None, sectors: PVD_SECTOR_COUNT} } } @@ -30,27 +32,33 @@ pub mod size_of { pub fn path_tables(root: &Directory) -> SizeInfo { let path_table_size = PathTable::calculate_size_for(root); SizeInfo{ + real_size: RealSizeInfo{bytes: Some(path_table_size), sectors: sector_count_mode2_form1(path_table_size)}, full_size: FullSizeInfo{bytes: Some(path_table_size), sectors: sector_count_mode2_form1(path_table_size)} } } pub fn directory(dir: &Directory) -> SizeInfo { + let real_size_bytes = dir.properties.borrow().get_real_size(); let full_size_bytes = dir.get_extended_size(); SizeInfo{ + real_size: RealSizeInfo{bytes: Some(real_size_bytes), sectors: sector_count_mode2_form1(real_size_bytes)}, full_size: FullSizeInfo{bytes: Some(full_size_bytes), sectors: sector_count_mode2_form1(full_size_bytes)} } } pub fn file(file: &File) -> SizeInfo { + let real_size_bytes = file.properties.get_real_size(); let full_size_bytes = file.get_extended_size(); if matches!(file.content, FileType::XAAudio(_)) { SizeInfo{ + real_size: RealSizeInfo{bytes: Some(real_size_bytes), sectors: sector_count_mode2_form2(real_size_bytes)}, full_size: FullSizeInfo{bytes: Some(full_size_bytes), sectors: sector_count_mode2_form2(full_size_bytes)} } } else { SizeInfo{ + real_size: RealSizeInfo{bytes: Some(real_size_bytes), sectors: sector_count_mode2_form1(real_size_bytes)}, full_size: FullSizeInfo{bytes: Some(full_size_bytes), sectors: sector_count_mode2_form1(full_size_bytes)} } } @@ -58,6 +66,7 @@ pub mod size_of { pub fn lead_out(sectors: usize) -> SizeInfo { SizeInfo{ + real_size: RealSizeInfo{bytes: Some(sectors*Mode0::DATA_SIZE), sectors}, full_size: FullSizeInfo{bytes: Some(sectors*Mode0::DATA_SIZE), sectors} } } diff --git a/src/Tools/psxcdgen_ex/src/encoder/mod.rs b/src/Tools/psxcdgen_ex/src/encoder/mod.rs index 3bc5cb61..d93e18a2 100644 --- a/src/Tools/psxcdgen_ex/src/encoder/mod.rs +++ b/src/Tools/psxcdgen_ex/src/encoder/mod.rs @@ -4,10 +4,12 @@ pub mod cd; pub mod builder; pub struct SizeInfo { + pub real_size: RealSizeInfo, pub full_size: FullSizeInfo } pub struct FullSizeInfo { pub bytes: Option, pub sectors: usize, -} \ No newline at end of file +} +pub use FullSizeInfo as RealSizeInfo; \ No newline at end of file diff --git a/src/Tools/psxcdgen_ex/src/lib.rs b/src/Tools/psxcdgen_ex/src/lib.rs index c3bbb842..340e89ca 100644 --- a/src/Tools/psxcdgen_ex/src/lib.rs +++ b/src/Tools/psxcdgen_ex/src/lib.rs @@ -8,7 +8,7 @@ pub mod types; use crate::types::RawData; use cdtypes::types::sector::AudioSample; use config_reader::LZ4State; -use encoder::cd::{calculate_lbas, calculate_length_for}; +use encoder::{cd::{self, calculate_lbas, calculate_length_for}, SizeInfo}; use tool_helper::{format_if_error, Output, read_file}; use types::{layout::Layout, CDDesc, Directory, File, FileType, FileSystemMap, Properties, SharedPtr}; use std::path::PathBuf; @@ -22,7 +22,7 @@ struct ContentDumpAlignment { ex_size: usize, } -const DEFAULT_CONTENT_ALIGNMENT:ContentDumpAlignment = ContentDumpAlignment{name: 24, lba_pair: 16, size: 8, ex_size: 8}; +const DEFAULT_CONTENT_ALIGNMENT:ContentDumpAlignment = ContentDumpAlignment{name: 24, lba_pair: 16, size: 16, ex_size: 16}; pub fn process(config: config_reader::Configuration) -> Result<(CDDesc, LBAEmbeddedFiles), Error> { let (mut cd_desc, lba_embedded_files) = parse_configuration(config)?; @@ -81,12 +81,12 @@ pub fn dump_content(cd_desc: &CDDesc, mut out: Output) -> Result<(), Error> { } } - fn create_lba_display_string(rel_lba: T, abs_lba: T) -> String { + fn create_pair_display_string(rel_lba: T, abs_lba: T) -> String { format!("{}({})", rel_lba, abs_lba) } - fn write_file(out: &mut Output, indent: usize, file_name: String, properties: &Properties, file_rel_lba: usize, file_abs_lba: usize, file_size: usize, file_ex_size: usize) -> Result<(), Error> { - Ok(writeln!(out, "{:>indent$}File: ({}) {:{: Result<(), Error> { + Ok(writeln!(out, "{:>indent$}File: ({}) {:{: Result<(), Error> { indent=indent + ARROW.len(), name_align=DEFAULT_CONTENT_ALIGNMENT.name)?; if is_hidden { - Ok(writeln!(out, LBA_OUT!(), create_lba_display_string("", ""), lba_pair_align=DEFAULT_CONTENT_ALIGNMENT.lba_pair)?) + Ok(writeln!(out, LBA_OUT!(), create_pair_display_string("", ""), lba_pair_align=DEFAULT_CONTENT_ALIGNMENT.lba_pair)?) } else { - Ok(writeln!(out, LBA_OUT!(), create_lba_display_string(dir_rel_lba, dir_abs_lba), lba_pair_align=DEFAULT_CONTENT_ALIGNMENT.lba_pair)?) + Ok(writeln!(out, LBA_OUT!(), create_pair_display_string(dir_rel_lba, dir_abs_lba), lba_pair_align=DEFAULT_CONTENT_ALIGNMENT.lba_pair)?) } } fn write_intro(out: &mut Output) -> Result<(), Error> { - writeln!(out, "{:>indent$}Type: ( ) {:{:indent$}Type: ( ) {:{: Result<(), Error> { let properties = &file.properties; let file_rel_lba = file.get_track_rel_lba(); let file_abs_lba = file.get_absolute_lba(); - let file_size = file.properties.get_real_size(); - let file_ex_size = file.get_extended_size(); - - write_file(out, indent, file_name, properties, file_rel_lba, file_abs_lba, file_size, file_ex_size)?; + let file_size = cd::size_of::file(&file); + + write_file(out, indent, file_name, properties, file_rel_lba, file_abs_lba, file_size)?; } for dir in dir.dir_iter() {