TMP CHANGES

This commit is contained in:
Jaby 2023-01-26 19:37:02 +01:00 committed by Jaby
parent cac66eaece
commit 8ef46b3ffc
6 changed files with 35 additions and 7 deletions

View File

@ -22,6 +22,7 @@ pub struct CommonProperties {
pub enum FileKind { pub enum FileKind {
Regular, Regular,
RegularLBA(PathBuf),
Overlay(PathBuf) Overlay(PathBuf)
} }

View File

@ -53,15 +53,24 @@ fn parse_description(description: roxmltree::Node, config: &mut Configuration) {
fn parse_track(track: roxmltree::Node, config: &mut Configuration) -> Result<(), Error> { fn parse_track(track: roxmltree::Node, config: &mut Configuration) -> Result<(), Error> {
fn parse_regular_file(file: roxmltree::Node, is_hidden: bool) -> Result<File, Error> { fn parse_regular_file(file: roxmltree::Node, is_hidden: bool) -> Result<File, Error> {
let kind = {
if let Some(path) = file.attribute(attribute_names::LBA_SOURCE) {
FileKind::RegularLBA(PathBuf::from(path))
}
else {
FileKind::Regular
}
};
Ok(File{ Ok(File{
common: read_common_properties(&file, is_hidden)?, common: read_common_properties(&file, is_hidden)?,
path: PathBuf::from(file.text().unwrap_or_default()), path: PathBuf::from(file.text().unwrap_or_default()),
kind: FileKind::Regular kind
}) })
} }
fn parse_overlay_file(file: roxmltree::Node, is_hidden: bool) -> Result<File, Error> { fn parse_overlay_file(file: roxmltree::Node, is_hidden: bool) -> Result<File, Error> {
Ok(File{ Ok(File{
common: read_common_properties(&file, is_hidden)?, common: read_common_properties(&file, is_hidden)?,
path: PathBuf::from(file.text().unwrap_or_default()), path: PathBuf::from(file.text().unwrap_or_default()),

View File

@ -329,9 +329,12 @@ fn process_file(file: &File, sec_writer: &mut dyn SectorWriter) -> Result<(), Er
let content_sectors = { let content_sectors = {
match &file.content { match &file.content {
FileType::Regular(raw) => builder::create_xa_data_for_vec(None, raw), FileType::Regular(raw) => builder::create_xa_data_for_vec(None, raw),
FileType::RegularOverlay(_, _) => {
return Err(Error::from_str("Trying to encode an unprocssed regular overlay file"));
},
FileType::Overlay(_, _) => { FileType::Overlay(_, _) => {
return Err(Error::from_str("Trying to encode an unprocessed overlay file")); return Err(Error::from_str("Trying to encode an unprocessed overlay file"));
} },
} }
}; };
let content_sector_count = content_sectors.len(); let content_sector_count = content_sectors.len();

View File

@ -38,6 +38,9 @@ pub fn process_files(file_map: FileSystemMap, lba_embedded_files: LBAEmbeddedFil
Some(new_content) Some(new_content)
}, },
FileType::RegularOverlay(_, _) => {
return Err(Error::not_implemented("process_files => RegularOverlay"));
},
_ => None _ => None
} }
}; };
@ -156,7 +159,8 @@ fn parse_configuration(config: config_reader::Configuration) -> Result<(CDDesc,
let (mut desc_file, needs_treatment) = { let (mut desc_file, needs_treatment) = {
match file.kind { match file.kind {
config_reader::FileKind::Regular => (types::File::new_regular(file.common.name.as_str(), read_file(&file.path)?)?, false), config_reader::FileKind::Regular => (types::File::new_regular(file.common.name.as_str(), read_file(&file.path)?)?, false),
config_reader::FileKind::Overlay(lba_source) => (types::overlay::load_from(file.common.name.as_str(), file.path, lba_source)?, true) config_reader::FileKind::RegularLBA(lba_source) => (types::overlay::dino_wuff(file.common.name.as_str(), read_file(&file.path)?, lba_source)?, true),
config_reader::FileKind::Overlay(lba_source) => (types::overlay::load_from(file.common.name.as_str(), file.path, lba_source)?, true),
} }
}; };

View File

@ -177,6 +177,7 @@ impl std::fmt::Display for Directory {
pub(super) enum FileType { pub(super) enum FileType {
Regular(Vec<u8>), Regular(Vec<u8>),
RegularOverlay(Vec<u8>, overlay::LBANameVec),
Overlay(Vec<u8>, overlay::LBANameVec), Overlay(Vec<u8>, overlay::LBANameVec),
} }
@ -194,6 +195,12 @@ impl File {
Self::new_from_content(file_name, FileType::Regular(content), content_size) Self::new_from_content(file_name, FileType::Regular(content), content_size)
} }
pub fn new_regular_overlay(file_name: &str, content: Vec<u8>, lba_names: overlay::LBANameVec) -> Result<File, Error> {
let content_size = content.len();
Self::new_from_content(file_name, FileType::RegularOverlay(content, lba_names), content_size)
}
pub fn new_overlay(file_name: &str, content: Vec<u8>, lba_names: overlay::LBANameVec, content_size: usize) -> Result<File, Error> { pub fn new_overlay(file_name: &str, content: Vec<u8>, lba_names: overlay::LBANameVec, content_size: usize) -> Result<File, Error> {
Self::new_from_content(file_name, FileType::Overlay(content, lba_names), content_size) Self::new_from_content(file_name, FileType::Overlay(content, lba_names), content_size)
} }

View File

@ -52,6 +52,10 @@ pub fn load_from(file_name: &str, file_path: PathBuf, lba_source: PathBuf) -> Re
Ok(File::new_overlay(file_name, content, lba_names, content_size)?) Ok(File::new_overlay(file_name, content, lba_names, content_size)?)
} }
pub fn dino_wuff(file_name: &str, content: Vec<u8>, lba_source: PathBuf) -> Result<File, Error> {
File::new_regular_overlay(file_name, content, load_lba_names(lba_source)?)
}
pub fn update_content(content: &mut Vec<u8>, lba_names: &LBANameVec, file_map: &FileSystemMap, length_func: LengthCalculatorFunction) -> Result<Vec<u8>, Error> { pub fn update_content(content: &mut Vec<u8>, lba_names: &LBANameVec, file_map: &FileSystemMap, length_func: LengthCalculatorFunction) -> Result<Vec<u8>, Error> {
let (lba_header, lba_count) = skip_to_lba_header(content); let (lba_header, lba_count) = skip_to_lba_header(content);
let lba_header = unsafe{std::slice::from_raw_parts_mut(lba_header.as_mut_ptr() as *mut LBAEntry, lba_count)}; let lba_header = unsafe{std::slice::from_raw_parts_mut(lba_header.as_mut_ptr() as *mut LBAEntry, lba_count)};