General refactor and cleanup.

This commit is contained in:
2024-05-01 04:05:22 +01:00
parent 185a8c3fd5
commit e46d21bde6
922 changed files with 36437 additions and 29485 deletions

View File

@@ -58,13 +58,11 @@ public sealed partial class Cdrdao
for(var i = 0; i < 512; i++)
{
if(i >= imageFilter.GetDataForkStream().Length)
break;
if(i >= imageFilter.GetDataForkStream().Length) break;
if(testArray[i] == 0)
{
if(twoConsecutiveNulls)
return false;
if(twoConsecutiveNulls) return false;
twoConsecutiveNulls = true;
}
@@ -88,8 +86,7 @@ public sealed partial class Cdrdao
Match cm = cr.Match(line ?? "");
// Skip comments at start of file
if(cm.Success)
continue;
if(cm.Success) continue;
return dm.Success;
}

View File

@@ -60,6 +60,7 @@ public sealed partial class Cdrdao
OpticalImageCapabilities.CanStoreIndexes;
/// <inheritdoc />
// ReSharper disable once ConvertToAutoProperty
public ImageInfo Info => _imageInfo;

View File

@@ -53,8 +53,7 @@ public sealed partial class Cdrdao
/// <inheritdoc />
public ErrorNumber Open(IFilter imageFilter)
{
if(imageFilter == null)
return ErrorNumber.NoSuchFile;
if(imageFilter == null) return ErrorNumber.NoSuchFile;
_cdrdaoFilter = imageFilter;
@@ -126,12 +125,12 @@ public sealed partial class Cdrdao
matchComment = regexComment.Match(line);
// Skip comments at start of file
if(matchComment.Success)
continue;
if(matchComment.Success) continue;
if(!matchDiskType.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Not_a_CDRDAO_TOC_or_TOC_type_not_in_line_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Not_a_CDRDAO_TOC_or_TOC_type_not_in_line_0,
lineNumber);
return ErrorNumber.InvalidArgument;
@@ -182,17 +181,20 @@ public sealed partial class Cdrdao
if(matchComment.Success)
{
// Ignore "// Track X" comments
if(matchComment.Groups["comment"].Value.StartsWith(" Track ", StringComparison.Ordinal))
continue;
if(matchComment.Groups["comment"].Value.StartsWith(" Track ", StringComparison.Ordinal)) continue;
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_comment_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_comment_1_at_line_0,
lineNumber,
matchComment.Groups["comment"].Value.Trim());
commentBuilder.AppendLine(matchComment.Groups["comment"].Value.Trim());
}
else if(matchDiskType.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_1_at_line_0,
lineNumber,
matchDiskType.Groups["type"].Value);
_discimage.Disktypestr = matchDiskType.Groups["type"].Value;
@@ -208,7 +210,9 @@ public sealed partial class Cdrdao
}
else if(matchMcn.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_CATALOG_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_CATALOG_1_at_line_0,
lineNumber,
matchMcn.Groups["catalog"].Value);
_discimage.Mcn = matchMcn.Groups["catalog"].Value;
@@ -219,12 +223,15 @@ public sealed partial class Cdrdao
{
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_TRACK_type_1_with_no_subchannel_at_line_0,
lineNumber, matchTrack.Groups["type"].Value);
lineNumber,
matchTrack.Groups["type"].Value);
}
else
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_TRACK_type_1_subchannel_2_at_line_0,
lineNumber, matchTrack.Groups["type"].Value,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_TRACK_type_1_subchannel_2_at_line_0,
lineNumber,
matchTrack.Groups["type"].Value,
matchTrack.Groups["subchan"].Value);
}
@@ -293,9 +300,9 @@ public sealed partial class Cdrdao
break;
default:
{
AaruConsole.
ErrorWriteLine(string.Format(Localization.Track_subchannel_mode_0_is_unsupported,
matchTrack.Groups["subchan"].Value));
AaruConsole.ErrorWriteLine(string.Format(Localization
.Track_subchannel_mode_0_is_unsupported,
matchTrack.Groups["subchan"].Value));
return ErrorNumber.NotSupported;
}
@@ -308,36 +315,45 @@ public sealed partial class Cdrdao
}
else if(matchCopy.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_1_COPY_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_1_COPY_at_line_0,
lineNumber,
matchCopy.Groups["no"].Value);
currentTrack.FlagDcp |= inTrack && matchCopy.Groups["no"].Value == "";
}
else if(matchEmphasis.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_1_PRE_EMPHASIS_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_1_PRE_EMPHASIS_at_line_0,
lineNumber,
matchEmphasis.Groups["no"].Value);
currentTrack.FlagPre |= inTrack && matchEmphasis.Groups["no"].Value == "";
}
else if(matchStereo.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_1_CHANNEL_AUDIO_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_1_CHANNEL_AUDIO_at_line_0,
lineNumber,
matchStereo.Groups["num"].Value);
currentTrack.Flag4Ch |= inTrack && matchStereo.Groups["num"].Value == "FOUR";
}
else if(matchIsrc.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_ISRC_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_ISRC_1_at_line_0,
lineNumber,
matchIsrc.Groups["isrc"].Value);
if(inTrack)
currentTrack.Isrc = matchIsrc.Groups["isrc"].Value;
if(inTrack) currentTrack.Isrc = matchIsrc.Groups["isrc"].Value;
}
else if(matchIndex.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_INDEX_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_INDEX_1_at_line_0,
lineNumber,
matchIndex.Groups["address"].Value);
string[] lengthString = matchFile.Groups["length"].Value.Split(':');
@@ -350,7 +366,9 @@ public sealed partial class Cdrdao
}
else if(matchPregap.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_START_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_START_1_at_line_0,
lineNumber,
matchPregap.Groups["address"].Value);
currentTrack.Indexes.Add(0, currentTrack.StartSector);
@@ -368,7 +386,9 @@ public sealed partial class Cdrdao
}
else if(matchZeroPregap.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_PREGAP_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_PREGAP_1_at_line_0,
lineNumber,
matchZeroPregap.Groups["length"].Value);
currentTrack.Indexes.Add(0, currentTrack.StartSector);
@@ -380,19 +400,25 @@ public sealed partial class Cdrdao
}
else if(matchZeroData.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_ZERO_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_ZERO_1_at_line_0,
lineNumber,
matchZeroData.Groups["length"].Value);
}
else if(matchZeroAudio.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_SILENCE_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_SILENCE_1_at_line_0,
lineNumber,
matchZeroAudio.Groups["length"].Value);
}
else
{
if(matchAudioFile.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_AUDIOFILE_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_AUDIOFILE_1_at_line_0,
lineNumber,
matchAudioFile.Groups["filename"].Value);
@@ -400,8 +426,8 @@ public sealed partial class Cdrdao
{
Datafilter =
PluginRegister.Singleton.GetFilter(Path.Combine(imageFilter.ParentFolder,
matchAudioFile.Groups["filename"].
Value)),
matchAudioFile.Groups["filename"]
.Value)),
Datafile = matchAudioFile.Groups["filename"].Value,
Offset = matchAudioFile.Groups["base_offset"].Value != ""
? ulong.Parse(matchAudioFile.Groups["base_offset"].Value)
@@ -441,15 +467,17 @@ public sealed partial class Cdrdao
}
else if(matchFile.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_DATAFILE_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_DATAFILE_1_at_line_0,
lineNumber,
matchFile.Groups["filename"].Value);
currentTrack.Trackfile = new CdrdaoTrackFile
{
Datafilter =
PluginRegister.Singleton.GetFilter(Path.Combine(imageFilter.ParentFolder,
matchFile.Groups["filename"].
Value)),
matchFile.Groups["filename"]
.Value)),
Datafile = matchAudioFile.Groups["filename"].Value,
Offset = matchFile.Groups["base_offset"].Value != ""
? ulong.Parse(matchFile.Groups["base_offset"].Value)
@@ -476,7 +504,9 @@ public sealed partial class Cdrdao
}
else if(matchTitle.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_TITLE_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_TITLE_1_at_line_0,
lineNumber,
matchTitle.Groups["title"].Value);
if(inTrack)
@@ -486,7 +516,9 @@ public sealed partial class Cdrdao
}
else if(matchPerformer.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_PERFORMER_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_PERFORMER_1_at_line_0,
lineNumber,
matchPerformer.Groups["performer"].Value);
if(inTrack)
@@ -496,7 +528,9 @@ public sealed partial class Cdrdao
}
else if(matchSongwriter.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_SONGWRITER_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_SONGWRITER_1_at_line_0,
lineNumber,
matchSongwriter.Groups["songwriter"].Value);
if(inTrack)
@@ -506,7 +540,9 @@ public sealed partial class Cdrdao
}
else if(matchComposer.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_COMPOSER_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_COMPOSER_1_at_line_0,
lineNumber,
matchComposer.Groups["composer"].Value);
if(inTrack)
@@ -516,7 +552,9 @@ public sealed partial class Cdrdao
}
else if(matchArranger.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_ARRANGER_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_ARRANGER_1_at_line_0,
lineNumber,
matchArranger.Groups["arranger"].Value);
if(inTrack)
@@ -526,7 +564,9 @@ public sealed partial class Cdrdao
}
else if(matchMessage.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_MESSAGE_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_MESSAGE_1_at_line_0,
lineNumber,
matchMessage.Groups["message"].Value);
if(inTrack)
@@ -536,19 +576,21 @@ public sealed partial class Cdrdao
}
else if(matchDiscId.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_DISC_ID_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_DISC_ID_1_at_line_0,
lineNumber,
matchDiscId.Groups["discid"].Value);
if(!inTrack)
_discimage.DiskId = matchDiscId.Groups["discid"].Value;
if(!inTrack) _discimage.DiskId = matchDiscId.Groups["discid"].Value;
}
else if(matchUpc.Success)
{
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_UPC_EAN_1_at_line_0, lineNumber,
AaruConsole.DebugWriteLine(MODULE_NAME,
Localization.Found_UPC_EAN_1_at_line_0,
lineNumber,
matchUpc.Groups["catalog"].Value);
if(!inTrack)
_discimage.Barcode = matchUpc.Groups["catalog"].Value;
if(!inTrack) _discimage.Barcode = matchUpc.Groups["catalog"].Value;
}
// Ignored fields
@@ -635,24 +677,31 @@ public sealed partial class Cdrdao
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Track_information);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Disc_contains_0_tracks,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t" + Localization.Disc_contains_0_tracks,
_discimage.Tracks.Count);
for(var i = 0; i < _discimage.Tracks.Count; i++)
{
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Track_0_information,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t" + Localization.Track_0_information,
_discimage.Tracks[i].Sequence);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization._0_bytes_per_sector,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization._0_bytes_per_sector,
_discimage.Tracks[i].Bps);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Pregap_0_sectors,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization.Pregap_0_sectors,
_discimage.Tracks[i].Pregap);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Data_0_sectors_starting_at_sector_1,
_discimage.Tracks[i].Sectors, _discimage.Tracks[i].StartSector);
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization.Data_0_sectors_starting_at_sector_1,
_discimage.Tracks[i].Sectors,
_discimage.Tracks[i].StartSector);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Postgap_0_sectors,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization.Postgap_0_sectors,
_discimage.Tracks[i].Postgap);
if(_discimage.Tracks[i].Flag4Ch)
@@ -675,7 +724,9 @@ public sealed partial class Cdrdao
foreach(KeyValuePair<int, ulong> kvp in _discimage.Tracks[i].Indexes)
{
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t\t" + Localization.Index_0_starts_at_sector_1, kvp.Key,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t\t" + Localization.Index_0_starts_at_sector_1,
kvp.Key,
kvp.Value);
}
@@ -688,7 +739,8 @@ public sealed partial class Cdrdao
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Arranger_is_not_set);
else
{
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Arranger_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization.Arranger_0,
_discimage.Tracks[i].Arranger);
}
@@ -696,7 +748,8 @@ public sealed partial class Cdrdao
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Composer_is_not_set);
else
{
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Composer_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization.Composer_0,
_discimage.Tracks[i].Composer);
}
@@ -704,7 +757,8 @@ public sealed partial class Cdrdao
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Performer_is_not_set);
else
{
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Performer_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization.Performer_0,
_discimage.Tracks[i].Performer);
}
@@ -712,7 +766,8 @@ public sealed partial class Cdrdao
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Songwriter_is_not_set);
else
{
AaruConsole.DebugWriteLine(MODULE_NAME, "\t\t" + Localization.Songwriter_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t\t" + Localization.Songwriter_0,
_discimage.Tracks[i].Songwriter);
}
@@ -779,17 +834,20 @@ public sealed partial class Cdrdao
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Partition_sequence_0, partition.Sequence);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Partition_name_0, partition.Name);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Partition_description_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t" + Localization.Partition_description_0,
partition.Description);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Partition_type_0, partition.Type);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Partition_starting_sector_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t" + Localization.Partition_starting_sector_0,
partition.Start);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Partition_sectors_0, partition.Length);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Partition_starting_offset_0,
AaruConsole.DebugWriteLine(MODULE_NAME,
"\t" + Localization.Partition_starting_offset_0,
partition.Offset);
AaruConsole.DebugWriteLine(MODULE_NAME, "\t" + Localization.Partition_size_in_bytes_0, partition.Size);
@@ -812,8 +870,7 @@ public sealed partial class Cdrdao
else
_imageInfo.SectorSize = 2352; // All others
if(_discimage.Mcn != null)
_imageInfo.ReadableMediaTags.Add(MediaTagType.CD_MCN);
if(_discimage.Mcn != null) _imageInfo.ReadableMediaTags.Add(MediaTagType.CD_MCN);
_imageInfo.Application = "CDRDAO";
@@ -928,8 +985,7 @@ public sealed partial class Cdrdao
{
case MediaTagType.CD_MCN:
{
if(_discimage.Mcn == null)
return ErrorNumber.NoData;
if(_discimage.Mcn == null) return ErrorNumber.NoData;
buffer = Encoding.ASCII.GetBytes(_discimage.Mcn);
@@ -1004,11 +1060,9 @@ public sealed partial class Cdrdao
break;
}
if(aaruTrack.Sequence == 0)
return ErrorNumber.SectorNotFound;
if(aaruTrack.Sequence == 0) return ErrorNumber.SectorNotFound;
if(length > aaruTrack.Sectors)
return ErrorNumber.OutOfRange;
if(length > aaruTrack.Sectors) return ErrorNumber.OutOfRange;
uint sectorOffset;
uint sectorSize;
@@ -1073,17 +1127,16 @@ public sealed partial class Cdrdao
return ErrorNumber.NotSupported;
}
if(aaruTrack.Subchannel)
sectorSkip += 96;
if(aaruTrack.Subchannel) sectorSkip += 96;
buffer = new byte[sectorSize * length];
_imageStream = aaruTrack.Trackfile.Datafilter.GetDataForkStream();
var br = new BinaryReader(_imageStream);
br.BaseStream.
Seek((long)aaruTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
br.BaseStream.Seek((long)aaruTrack.Trackfile.Offset +
(long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
if(mode2)
{
@@ -1115,8 +1168,7 @@ public sealed partial class Cdrdao
}
// cdrdao audio tracks are endian swapped corresponding to Aaru
if(aaruTrack.Tracktype != CDRDAO_TRACK_TYPE_AUDIO)
return ErrorNumber.NoError;
if(aaruTrack.Tracktype != CDRDAO_TRACK_TYPE_AUDIO) return ErrorNumber.NoError;
var swapped = new byte[buffer.Length];
@@ -1137,8 +1189,7 @@ public sealed partial class Cdrdao
{
buffer = null;
if(tag is SectorTagType.CdTrackFlags or SectorTagType.CdTrackIsrc)
track = (uint)sectorAddress;
if(tag is SectorTagType.CdTrackFlags or SectorTagType.CdTrackIsrc) track = (uint)sectorAddress;
var aaruTrack = new CdrdaoTrack
{
@@ -1152,18 +1203,15 @@ public sealed partial class Cdrdao
break;
}
if(aaruTrack.Sequence == 0)
return ErrorNumber.SectorNotFound;
if(aaruTrack.Sequence == 0) return ErrorNumber.SectorNotFound;
if(length > aaruTrack.Sectors)
return ErrorNumber.OutOfRange;
if(length > aaruTrack.Sectors) return ErrorNumber.OutOfRange;
uint sectorOffset = 0;
uint sectorSize = 0;
uint sectorSkip = 0;
if(!aaruTrack.Subchannel && tag == SectorTagType.CdSectorSubchannel)
return ErrorNumber.NoData;
if(!aaruTrack.Subchannel && tag == SectorTagType.CdSectorSubchannel) return ErrorNumber.NoData;
switch(tag)
{
@@ -1180,17 +1228,13 @@ public sealed partial class Cdrdao
{
CdFlags flags = 0;
if(aaruTrack.Tracktype != CDRDAO_TRACK_TYPE_AUDIO)
flags |= CdFlags.DataTrack;
if(aaruTrack.Tracktype != CDRDAO_TRACK_TYPE_AUDIO) flags |= CdFlags.DataTrack;
if(aaruTrack.FlagDcp)
flags |= CdFlags.CopyPermitted;
if(aaruTrack.FlagDcp) flags |= CdFlags.CopyPermitted;
if(aaruTrack.FlagPre)
flags |= CdFlags.PreEmphasis;
if(aaruTrack.FlagPre) flags |= CdFlags.PreEmphasis;
if(aaruTrack.Flag4Ch)
flags |= CdFlags.FourChannel;
if(aaruTrack.Flag4Ch) flags |= CdFlags.FourChannel;
buffer = new[]
{
@@ -1200,8 +1244,7 @@ public sealed partial class Cdrdao
return ErrorNumber.NoError;
}
case SectorTagType.CdTrackIsrc:
if(aaruTrack.Isrc == null)
return ErrorNumber.NoData;
if(aaruTrack.Isrc == null) return ErrorNumber.NoData;
buffer = Encoding.UTF8.GetBytes(aaruTrack.Isrc);
@@ -1214,8 +1257,7 @@ public sealed partial class Cdrdao
{
case CDRDAO_TRACK_TYPE_MODE1:
case CDRDAO_TRACK_TYPE_MODE2_FORM1:
if(tag != SectorTagType.CdSectorSubchannel)
return ErrorNumber.NoData;
if(tag != SectorTagType.CdSectorSubchannel) return ErrorNumber.NoData;
sectorOffset = 2048;
sectorSize = 96;
@@ -1223,16 +1265,14 @@ public sealed partial class Cdrdao
break;
case CDRDAO_TRACK_TYPE_MODE2_FORM2:
case CDRDAO_TRACK_TYPE_MODE2_MIX:
if(tag != SectorTagType.CdSectorSubchannel)
return ErrorNumber.NoData;
if(tag != SectorTagType.CdSectorSubchannel) return ErrorNumber.NoData;
sectorOffset = 2336;
sectorSize = 96;
break;
case CDRDAO_TRACK_TYPE_AUDIO:
if(tag != SectorTagType.CdSectorSubchannel)
return ErrorNumber.NoData;
if(tag != SectorTagType.CdSectorSubchannel) return ErrorNumber.NoData;
sectorOffset = 2352;
sectorSize = 96;
@@ -1304,8 +1344,7 @@ public sealed partial class Cdrdao
break;
}
case CDRDAO_TRACK_TYPE_MODE2_RAW: // Requires reading sector
if(tag != SectorTagType.CdSectorSubchannel)
return ErrorNumber.NotImplemented;
if(tag != SectorTagType.CdSectorSubchannel) return ErrorNumber.NotImplemented;
sectorOffset = 2352;
sectorSize = 96;
@@ -1320,9 +1359,9 @@ public sealed partial class Cdrdao
_imageStream = aaruTrack.Trackfile.Datafilter.GetDataForkStream();
var br = new BinaryReader(_imageStream);
br.BaseStream.
Seek((long)aaruTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
br.BaseStream.Seek((long)aaruTrack.Trackfile.Offset +
(long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
if(sectorOffset == 0 && sectorSkip == 0)
buffer = br.ReadBytes((int)(sectorSize * length));
@@ -1381,11 +1420,9 @@ public sealed partial class Cdrdao
break;
}
if(aaruTrack.Sequence == 0)
return ErrorNumber.SectorNotFound;
if(aaruTrack.Sequence == 0) return ErrorNumber.SectorNotFound;
if(length > aaruTrack.Sectors)
return ErrorNumber.OutOfRange;
if(length > aaruTrack.Sectors) return ErrorNumber.OutOfRange;
uint sectorOffset;
uint sectorSize;
@@ -1433,8 +1470,7 @@ public sealed partial class Cdrdao
return ErrorNumber.NotSupported;
}
if(aaruTrack.Subchannel)
sectorSkip += 96;
if(aaruTrack.Subchannel) sectorSkip += 96;
buffer = new byte[sectorSize * length];
@@ -1523,7 +1559,8 @@ public sealed partial class Cdrdao
for(uint i = 0; i < length; i++)
{
_sectorBuilder.ReconstructPrefix(ref fullSector, TrackType.CdMode2Formless,
_sectorBuilder.ReconstructPrefix(ref fullSector,
TrackType.CdMode2Formless,
(long)(sectorAddress + i));
Array.Copy(buffer, i * 2336, fullSector, 16, 2336);

View File

@@ -57,8 +57,7 @@ public sealed partial class Cdrdao
unknownLbas = new List<ulong>();
ErrorNumber errno = ReadSectorsLong(sectorAddress, length, out byte[] buffer);
if(errno != ErrorNumber.NoError)
return null;
if(errno != ErrorNumber.NoError) return null;
var bps = (int)(buffer.Length / length);
var sector = new byte[bps];
@@ -81,8 +80,7 @@ public sealed partial class Cdrdao
}
}
if(unknownLbas.Count > 0)
return null;
if(unknownLbas.Count > 0) return null;
return failingLbas.Count <= 0;
}
@@ -95,8 +93,7 @@ public sealed partial class Cdrdao
unknownLbas = new List<ulong>();
ErrorNumber errno = ReadSectorsLong(sectorAddress, length, track, out byte[] buffer);
if(errno != ErrorNumber.NoError)
return null;
if(errno != ErrorNumber.NoError) return null;
var bps = (int)(buffer.Length / length);
var sector = new byte[bps];
@@ -119,8 +116,7 @@ public sealed partial class Cdrdao
}
}
if(unknownLbas.Count > 0)
return null;
if(unknownLbas.Count > 0) return null;
return failingLbas.Count <= 0;
}

View File

@@ -199,9 +199,9 @@ public sealed partial class Cdrdao
data = swapped;
}
trackStream.
Seek((long)(track.FileOffset + (sectorAddress - track.StartSector) * (ulong)track.RawBytesPerSector),
SeekOrigin.Begin);
trackStream.Seek((long)(track.FileOffset +
(sectorAddress - track.StartSector) * (ulong)track.RawBytesPerSector),
SeekOrigin.Begin);
trackStream.Write(data, 0, data.Length);
@@ -275,9 +275,9 @@ public sealed partial class Cdrdao
switch(track.SubchannelType)
{
case TrackSubchannelType.None:
trackStream.
Seek((long)(track.FileOffset + (sectorAddress - track.StartSector) * (ulong)track.RawBytesPerSector),
SeekOrigin.Begin);
trackStream.Seek((long)(track.FileOffset +
(sectorAddress - track.StartSector) * (ulong)track.RawBytesPerSector),
SeekOrigin.Begin);
trackStream.Write(data, 0, data.Length);
@@ -286,9 +286,9 @@ public sealed partial class Cdrdao
return true;
case TrackSubchannelType.Raw:
case TrackSubchannelType.RawInterleaved:
trackStream.
Seek((long)(track.FileOffset + (sectorAddress - track.StartSector) * (ulong)(track.RawBytesPerSector + 96)),
SeekOrigin.Begin);
trackStream.Seek((long)(track.FileOffset +
(sectorAddress - track.StartSector) * (ulong)(track.RawBytesPerSector + 96)),
SeekOrigin.Begin);
for(uint i = 0; i < length; i++)
{
@@ -358,9 +358,10 @@ public sealed partial class Cdrdao
var subchannelSize = (uint)(track.SubchannelType != TrackSubchannelType.None ? 96 : 0);
trackStream.
Seek((long)(track.FileOffset + (sectorAddress - track.StartSector) * (ulong)(track.RawBytesPerSector + subchannelSize)),
SeekOrigin.Begin);
trackStream.Seek((long)(track.FileOffset +
(sectorAddress - track.StartSector) *
(ulong)(track.RawBytesPerSector + subchannelSize)),
SeekOrigin.Begin);
trackStream.Write(data, 0, data.Length);
@@ -428,9 +429,10 @@ public sealed partial class Cdrdao
for(uint i = 0; i < length; i++)
{
trackStream.
Seek((long)(track.FileOffset + (i + sectorAddress - track.StartSector) * (ulong)(track.RawBytesPerSector + subchannelSize)),
SeekOrigin.Begin);
trackStream.Seek((long)(track.FileOffset +
(i + sectorAddress - track.StartSector) *
(ulong)(track.RawBytesPerSector + subchannelSize)),
SeekOrigin.Begin);
trackStream.Write(data, (int)(i * track.RawBytesPerSector), track.RawBytesPerSector);
}
@@ -457,8 +459,7 @@ public sealed partial class Cdrdao
if(_writingTracks != null && _writingStreams != null)
{
foreach(FileStream oldTrack in _writingStreams.Select(t => t.Value).Distinct())
oldTrack.Close();
foreach(FileStream oldTrack in _writingStreams.Select(t => t.Value).Distinct()) oldTrack.Close();
}
ulong currentOffset = 0;
@@ -469,7 +470,8 @@ public sealed partial class Cdrdao
if(track.SubchannelType is TrackSubchannelType.Q16 or TrackSubchannelType.Q16Interleaved)
{
ErrorMessage = string.Format(Localization.Unsupported_subchannel_type_0_for_track_1,
track.SubchannelType, track.Sequence);
track.SubchannelType,
track.Sequence);
return false;
}
@@ -494,17 +496,20 @@ public sealed partial class Cdrdao
foreach(Track track in _writingTracks)
{
_writingStreams.Add(track.Sequence,
new FileStream(track.File, FileMode.OpenOrCreate, FileAccess.ReadWrite,
new FileStream(track.File,
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None));
}
}
else
{
var jointStream = new FileStream(_writingBaseName + ".bin", FileMode.OpenOrCreate, FileAccess.ReadWrite,
var jointStream = new FileStream(_writingBaseName + ".bin",
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None);
foreach(Track track in _writingTracks)
_writingStreams.Add(track.Sequence, jointStream);
foreach(Track track in _writingTracks) _writingStreams.Add(track.Sequence, jointStream);
}
return true;
@@ -537,8 +542,9 @@ public sealed partial class Cdrdao
bool data = _writingTracks.Count(t => t.Type != TrackType.Audio) > 0;
bool mode2 =
_writingTracks.Count(t => t.Type is TrackType.CdMode2Form1 or TrackType.CdMode2Form2
or TrackType.CdMode2Formless) >
_writingTracks.Count(t => t.Type is TrackType.CdMode2Form1
or TrackType.CdMode2Form2
or TrackType.CdMode2Formless) >
0;
if(mode2)
@@ -551,18 +557,17 @@ public sealed partial class Cdrdao
if(!string.IsNullOrWhiteSpace(_discimage.Comment))
{
string[] commentLines = _discimage.Comment.Split(new[]
{
'\n'
}, StringSplitOptions.RemoveEmptyEntries);
{
'\n'
},
StringSplitOptions.RemoveEmptyEntries);
foreach(string line in commentLines)
_descriptorStream.WriteLine("// {0}", line);
foreach(string line in commentLines) _descriptorStream.WriteLine("// {0}", line);
}
_descriptorStream.WriteLine();
if(!string.IsNullOrEmpty(_discimage.Mcn))
_descriptorStream.WriteLine("CATALOG {0}", _discimage.Mcn);
if(!string.IsNullOrEmpty(_discimage.Mcn)) _descriptorStream.WriteLine("CATALOG {0}", _discimage.Mcn);
foreach(Track track in _writingTracks)
{
@@ -610,7 +615,10 @@ public sealed partial class Cdrdao
(byte minute, byte second, byte frame) msf = LbaToMsf(track.EndSector - track.StartSector + 1);
_descriptorStream.WriteLine("DATAFILE \"{0}\" #{1} {2:D2}:{3:D2}:{4:D2} // length in bytes: {5}",
Path.GetFileName(track.File), track.FileOffset, msf.minute, msf.second,
Path.GetFileName(track.File),
track.FileOffset,
msf.minute,
msf.second,
msf.frame,
(track.EndSector - track.StartSector + 1) *
(ulong)(track.RawBytesPerSector +
@@ -689,8 +697,7 @@ public sealed partial class Cdrdao
}
case SectorTagType.CdTrackIsrc:
{
if(data != null)
_trackIsrcs[(byte)sectorAddress] = Encoding.UTF8.GetString(data);
if(data != null) _trackIsrcs[(byte)sectorAddress] = Encoding.UTF8.GetString(data);
return true;
}
@@ -721,9 +728,10 @@ public sealed partial class Cdrdao
return false;
}
trackStream.
Seek((long)(track.FileOffset + (sectorAddress - track.StartSector) * (ulong)(track.RawBytesPerSector + 96)) + track.RawBytesPerSector,
SeekOrigin.Begin);
trackStream.Seek((long)(track.FileOffset +
(sectorAddress - track.StartSector) * (ulong)(track.RawBytesPerSector + 96)) +
track.RawBytesPerSector,
SeekOrigin.Begin);
trackStream.Write(data, 0, data.Length);
@@ -790,9 +798,11 @@ public sealed partial class Cdrdao
for(uint i = 0; i < length; i++)
{
trackStream.
Seek((long)(track.FileOffset + (i + sectorAddress - track.StartSector) * (ulong)(track.RawBytesPerSector + 96)) + track.RawBytesPerSector,
SeekOrigin.Begin);
trackStream.Seek((long)(track.FileOffset +
(i + sectorAddress - track.StartSector) *
(ulong)(track.RawBytesPerSector + 96)) +
track.RawBytesPerSector,
SeekOrigin.Begin);
trackStream.Write(data, (int)(i * 96), 96);
}