Write DirectoryRecord

This commit is contained in:
jaby 2022-10-26 21:43:54 +02:00
parent 5b1192fac3
commit b5b25a85d7
1 changed files with 19 additions and 14 deletions

View File

@ -45,8 +45,8 @@ pub fn calculate_psx_lbas(cd_desc: &mut CDDesc) {
},
Layout::Directory(dir) => {
let sector_count = sector_count_mode2_form1(dir.borrow().properties.borrow().get_extended_size());
let mut dir = dir.borrow_mut();
let sector_count = sector_count_mode2_form1(dir.borrow().properties.borrow().get_extended_size());
let dir = dir.borrow_mut();
cd_desc.vol_sector_count += sector_count;
cur_lba = update_lba(&mut dir.properties.borrow_mut(), cur_lba, sector_count);
@ -176,20 +176,32 @@ fn process_path_table(path_table: &PathTable, root_dir: SharedPtr<Directory>, se
Ok(())
}
fn process_directory_record(dir: &Directory, _sec_writer: &mut dyn SectorWriter) -> Result<(), Error> {
fn process_directory_record(dir: &Directory, sec_writer: &mut dyn SectorWriter) -> Result<(), Error> {
let mut dir_record = vec![0u8; dir.properties.borrow().get_real_size()];
let dir_length = dir_record.len();
let mut raw_data = &mut dir_record[0..dir_length];
for _member in dir.collect_member() {
for member in dir.collect_member() {
let raw_data_len = raw_data.len();
let bytes_written = {
0
};
let bytes_written = write_dir_record(raw_data, &member, true)?;
raw_data = &mut raw_data[bytes_written..raw_data_len];
}
let dir_record_sector_count = sector_count_mode2_form1(raw_data.len());
if dir_record_sector_count > 1 {
return Err(Error::from_text(format!("Directory Record for {} spans {} sectors but PSX doesn't support more then one sector", dir.name.as_str().unwrap_or("<No name>"), dir_record_sector_count)));
}
for sector in builder::create_xa_data_for_vec(None, dir_record) {
sec_writer.write_cd_xa_data(sector)?;
}
let extended_sector_count = sector_count_mode2_form1(dir.properties.borrow().get_extended_size()) - dir_record_sector_count;
for _ in 0..extended_sector_count {
sec_writer.write_cd_xa_data(builder::create_xa_data_zero())?;
}
Ok(())
}
@ -257,13 +269,6 @@ fn create_dir_record_raw<'a>(dst: &'a mut [u8], name: &str, track_rel_lba: u32,
}
fn write_dir_record(dir_record: &mut [u8], dir_member: &DirectoryRecordMember, has_system_use: bool) -> Result<usize, Error> {
fn create_file_system_use() -> CDXASystemUse {
let mut system_use = CDXASystemUse::default();
system_use.file_attribute.set_mode2();
system_use
}
match dir_member {
DirectoryRecordMember::Directory{name, track_rel_lba, real_size} => {
let system_use = {