From aa41cb9edf80e9a0a59a73cc7812fefb087d1707 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 18 Feb 2020 13:54:39 -0800 Subject: [PATCH] Clean up some of the psxt001z code (fixes #6) --- BurnOutSharp/BurnOutSharp.nuspec | 2 +- BurnOutSharp/External/psxt001z/LibCrypt.cs | 57 ++++++++++++---------- BurnOutSharp/Properties/AssemblyInfo.cs | 6 +-- 3 files changed, 36 insertions(+), 29 deletions(-) diff --git a/BurnOutSharp/BurnOutSharp.nuspec b/BurnOutSharp/BurnOutSharp.nuspec index 43da2377..4c01cc2f 100644 --- a/BurnOutSharp/BurnOutSharp.nuspec +++ b/BurnOutSharp/BurnOutSharp.nuspec @@ -2,7 +2,7 @@ BurnOutSharp - 1.03.9.0 + 1.03.9.1 BurnOutSharp Matt Nadareski, Gernot Knippen Matt Nadareski, Gernot Knippen diff --git a/BurnOutSharp/External/psxt001z/LibCrypt.cs b/BurnOutSharp/External/psxt001z/LibCrypt.cs index b500878a..cb0fde77 100644 --- a/BurnOutSharp/External/psxt001z/LibCrypt.cs +++ b/BurnOutSharp/External/psxt001z/LibCrypt.cs @@ -12,47 +12,54 @@ namespace BurnOutSharp.External.psxt001z { public static bool CheckSubfile(string subFilePath) { - // opening .sub - FileStream subfile; - try + // Check the file exists first + if (!File.Exists(subFilePath)) { - subfile = File.OpenRead(subFilePath); - } - catch - { - Console.WriteLine($"Error opening {subFilePath}"); + Console.WriteLine($"{subFilePath} could not be found"); return false; } - // checking extension + // Check the extension is a subfile string ext = Path.GetExtension(subFilePath).TrimStart('.').ToLowerInvariant(); if (ext != "sub") { Console.WriteLine($"{ext}: unknown file extension"); return false; } - - // filesize - long size = subfile.Length; - if (size % 96 != 0) + + // Open and check the subfile for LibCrypt + try { - Console.WriteLine($"{subFilePath}: wrong size"); + using (FileStream subfile = File.OpenRead(subFilePath)) + { + return CheckSubfile(subfile); + } + } + catch + { + Console.WriteLine($"Error processing {subFilePath}"); return false; } - - return CheckSubfile(subfile); } public static bool CheckSubfile(Stream subfile) { - // Variables + // Check the length is valid for subfiles + long size = subfile.Length; + if (size % 96 != 0) + { + Console.WriteLine($"Wrong size"); + return false; + } + + // Persistent values byte[] buffer = new byte[16]; byte[] sub = new byte[16]; int tpos = 0; - uint sector, psectors = 0; - long size = subfile.Length; + int modifiedSectors = 0; - for (sector = 150; sector < ((size / 96) + 150); sector++) + // Check each sector for modifications + for (uint sector = 150; sector < ((size / 96) + 150); sector++) { subfile.Seek(12, SeekOrigin.Current); if (subfile.Read(buffer, 0, 12) == 0) @@ -99,12 +106,12 @@ namespace BurnOutSharp.External.psxt001z sub[11] = crcBytes[1]; // TODO: This *was* a memcmp, but that's harder to do. Fix this for C# later - if (buffer[10] != sub[10] && buffer[11] != sub[11] && (buffer[3] != sub[3] || buffer[7] != sub[7] || buffer[4] != sub[4] || buffer[8] != sub[8] || buffer[5] != sub[5] || buffer[9] != sub[9])) + if (buffer[10] != sub[10] && buffer[11] != sub[11] && (buffer[3] != sub[3] || buffer[4] != sub[4] || buffer[5] != sub[5] || buffer[7] != sub[7] || buffer[8] != sub[8] || buffer[9] != sub[9])) { - if (buffer[10] != sub[10] || buffer[11] != sub[11] || buffer[3] != sub[3] || buffer[7] != sub[7] || buffer[4] != sub[4] || buffer[8] != sub[8] || buffer[5] != sub[5] || buffer[9] != sub[9]) + if (buffer[3] != sub[3] || buffer[4] != sub[4] || buffer[5] != sub[5] || buffer[7] != sub[7] || buffer[8] != sub[8] || buffer[9] != sub[9] || buffer[10] != sub[10] || buffer[11] != sub[11]) { Console.Write($"MSF: {sub[7]:x}:{sub[8]:x}:{sub[9]:x} Q-Data: {buffer[0]:x}{buffer[1]:x}{buffer[2]:x} {buffer[3]:x}:{buffer[4]:x}:{buffer[5]:x} {buffer[6]:x} {buffer[7]:x}:{buffer[8]:x}:{buffer[9]:x} {buffer[10]:x}{buffer[11]:x} xor {crc ^ ((buffer[10] << 8) + buffer[11]):x} % {CRC16.Calculate(buffer, 0, 10) ^ ((buffer[10] << 8) + buffer[11]):x}"); - //Console.Write("\nMSF: %02x:%02x:%02x Q-Data: %02x%02x%02x %02x:%02x:%02x %02x %02x:%02x:%02x %02x%02x", sub[7], sub[8], sub[9], sub[0], sub[1], sub[2], sub[3], sub[4], sub[5], sub[6], sub[7], sub[8], sub[9], sub[10], sub[11]); + //Console.Write($"\nMSF: {sub[7]:x}:{sub[8]:x}:{sub[9]:x} Q-Data: {sub[0]:x}{sub[1]:x}{sub[2]:x} {sub[3]:x}:{sub[4]:x}:{sub[5]:x} {sub[6]:x} {sub[7]:x}:{sub[8]:x}:{sub[9]:x} {sub[10]:x}{sub[11]:x}"); if (buffer[3] != sub[3] && buffer[7] != sub[7] && buffer[4] == sub[4] && buffer[8] == sub[8] && buffer[5] == sub[5] && buffer[9] == sub[9]) Console.Write($" P1 xor {buffer[3] ^ sub[3]:x} {buffer[7] ^ sub[7]:x}"); else if (buffer[3] == sub[3] && buffer[7] == sub[7] && buffer[4] != sub[4] && buffer[8] != sub[8] && buffer[5] == sub[5] && buffer[9] == sub[9]) @@ -115,12 +122,12 @@ namespace BurnOutSharp.External.psxt001z Console.Write(" ?"); Console.Write("\n"); - psectors++; + modifiedSectors++; } } } - Console.WriteLine($"Number of modified sectors: {psectors}"); + Console.WriteLine($"Number of modified sectors: {modifiedSectors}"); return true; } diff --git a/BurnOutSharp/Properties/AssemblyInfo.cs b/BurnOutSharp/Properties/AssemblyInfo.cs index 7591b112..adb8d4ec 100644 --- a/BurnOutSharp/Properties/AssemblyInfo.cs +++ b/BurnOutSharp/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Matt Nadareski, Gernot Knippen")] [assembly: AssemblyProduct("BurnOutSharp")] -[assembly: AssemblyCopyright("Copyright (c)2005-2010 Gernot Knippen, Copyright (c)2018 Matt Nadareski")] +[assembly: AssemblyCopyright("Copyright (c)2005-2010 Gernot Knippen, Copyright (c)2018-2020 Matt Nadareski")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.03.9.0")] -[assembly: AssemblyFileVersion("1.03.9.0")] +[assembly: AssemblyVersion("1.03.9.1")] +[assembly: AssemblyFileVersion("1.03.9.1")]