using System.IO; using SabreTools.Data.Extensions; using SabreTools.Data.Models.CDROM; using SabreTools.IO.Extensions; using SabreTools.Numerics.Extensions; #pragma warning disable IDE0017 // Simplify object initialization namespace SabreTools.Serialization.Readers { /// /// This intentionally does not inherit from /// public class CDROM { /// /// Parse a Stream into a DataSector /// /// Stream to parse /// Filled DataSector on success, null on error /// Assumes a seekable stream public static DataSector? ParseDataSector(Stream data) { SectorMode sectorMode = data.GetSectorMode(); return sectorMode switch { SectorMode.MODE0 => ParseMode0(data), SectorMode.MODE1 => ParseMode1(data), SectorMode.MODE2 => ParseMode2Formless(data), SectorMode.MODE2_FORM1 => ParseMode2Form1(data), SectorMode.MODE2_FORM2 => ParseMode2Form2(data), SectorMode.UNKNOWN => null, _ => null, }; } /// /// Parse a Stream into a Mode0 /// /// Stream to parse /// Filled Mode0 on success, null on error public static Mode0 ParseMode0(Stream data) { var obj = new Mode0(); obj.SyncPattern = data.ReadBytes(12); obj.Address = data.ReadBytes(3); obj.Mode = data.ReadByteValue(); obj.UserData = data.ReadBytes(2336); return obj; } /// /// Parse a Stream into a Mode1 /// /// Stream to parse /// Filled Mode1 on success, null on error public static Mode1 ParseMode1(Stream data) { var obj = new Mode1(); obj.SyncPattern = data.ReadBytes(12); obj.Address = data.ReadBytes(3); obj.Mode = data.ReadByteValue(); obj.UserData = data.ReadBytes(2048); obj.EDC = data.ReadBytes(4); obj.Intermediate = data.ReadBytes(8); obj.ECC = data.ReadBytes(276); return obj; } /// /// Parse a Stream into a Mode2Formless /// /// Stream to parse /// Filled Mode2Formless on success, null on error public static Mode2Formless ParseMode2Formless(Stream data) { var obj = new Mode2Formless(); obj.SyncPattern = data.ReadBytes(12); obj.Address = data.ReadBytes(3); obj.Mode = data.ReadByteValue(); obj.UserData = data.ReadBytes(2336); return obj; } /// /// Parse a Stream into a Mode2Form1 /// /// Stream to parse /// Filled Mode2Form1 on success, null on error public static Mode2Form1 ParseMode2Form1(Stream data) { var obj = new Mode2Form1(); obj.SyncPattern = data.ReadBytes(12); obj.Address = data.ReadBytes(3); obj.Mode = data.ReadByteValue(); obj.Subheader = data.ReadBytes(8); obj.UserData = data.ReadBytes(2048); obj.EDC = data.ReadBytes(4); obj.ECC = data.ReadBytes(276); return obj; } /// /// Parse a Stream into a Mode2Form2 /// /// Stream to parse /// Filled Mode2Form2 on success, null on error public static Mode2Form2 ParseMode2Form2(Stream data) { var obj = new Mode2Form2(); obj.SyncPattern = data.ReadBytes(12); obj.Address = data.ReadBytes(3); obj.Mode = data.ReadByteValue(); obj.Subheader = data.ReadBytes(8); obj.UserData = data.ReadBytes(2324); obj.EDC = data.ReadBytes(4); return obj; } } }