From 0a2477e1b3c11afe88428d72e5becf00bf9fa547 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 1 Nov 2020 21:53:42 -0800 Subject: [PATCH] Remove console writes, make LibCrypt read better --- BurnOutSharp/External/psxt001z/LibCrypt.cs | 222 ++++++++++----------- BurnOutSharp/FileType/MPQ.cs | 1 - 2 files changed, 102 insertions(+), 121 deletions(-) diff --git a/BurnOutSharp/External/psxt001z/LibCrypt.cs b/BurnOutSharp/External/psxt001z/LibCrypt.cs index fc5874d6..0f9539a6 100644 --- a/BurnOutSharp/External/psxt001z/LibCrypt.cs +++ b/BurnOutSharp/External/psxt001z/LibCrypt.cs @@ -1,146 +1,128 @@ using System; using System.IO; +using System.Linq; namespace BurnOutSharp.External.psxt001z { - /// - /// LibCrypt detection code - /// Originally written by Dremora: https://github.com/Dremora/psxt001z - /// Ported and changed by darksabre76 - /// - public class LibCrypt + /// + /// LibCrypt detection code + /// Originally written by Dremora: https://github.com/Dremora/psxt001z + /// Ported and changed by darksabre76 + /// + public class LibCrypt { public static bool CheckSubfile(string subFilePath) { - // Check the file exists first - if (!File.Exists(subFilePath)) - { - Console.WriteLine($"{subFilePath} could not be found"); - return false; - } + // Check the file exists first + if (!File.Exists(subFilePath)) + return false; - // Check the extension is a subfile - string ext = Path.GetExtension(subFilePath).TrimStart('.').ToLowerInvariant(); - if (ext != "sub") - { - Console.WriteLine($"{ext}: unknown file extension"); - return false; - } + // Check the extension is a subfile + string ext = Path.GetExtension(subFilePath).TrimStart('.').ToLowerInvariant(); + if (ext != "sub") + return false; - // Open and check the subfile for LibCrypt - try - { - using (FileStream subfile = File.OpenRead(subFilePath)) - { - return CheckSubfile(subfile); - } - } - catch - { - Console.WriteLine($"Error processing {subFilePath}"); - return false; - } - } + // Open and check the subfile for LibCrypt + try + { + using (FileStream subfile = File.OpenRead(subFilePath)) + { + return CheckSubfile(subfile); + } + } + catch + { + return false; + } + } - public static bool CheckSubfile(Stream subfile) - { - // Check the length is valid for subfiles - long size = subfile.Length; - if (size % 96 != 0) - { - Console.WriteLine($"Wrong size"); - return false; - } + public static bool CheckSubfile(Stream subfile) + { + // Check the length is valid for subfiles + long size = subfile.Length; + if (size % 96 != 0) + return false; - // Persistent values - byte[] buffer = new byte[16]; - byte[] sub = new byte[16]; - int tpos = 0; - int modifiedSectors = 0; + // Persistent values + byte[] buffer = new byte[16]; + byte[] sub = new byte[16]; + int tpos = 0; + int modifiedSectors = 0; - // 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) - return modifiedSectors != 0; + // 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) + return modifiedSectors != 0; - subfile.Seek(72, SeekOrigin.Current); + subfile.Seek(72, SeekOrigin.Current); - // New track - if ((btoi(buffer[1]) == (btoi(sub[1]) + 1)) && (buffer[2] == 0 || buffer[2] == 1)) - { - Array.Copy(buffer, sub, 6); - tpos = ((btoi((byte)(buffer[3] * 60)) + btoi(buffer[4])) * 75) + btoi(buffer[5]); - } + // New track + if ((btoi(buffer[1]) == (btoi(sub[1]) + 1)) && (buffer[2] == 0 || buffer[2] == 1)) + { + Array.Copy(buffer, sub, 6); + tpos = ((btoi((byte)(buffer[3] * 60)) + btoi(buffer[4])) * 75) + btoi(buffer[5]); + } - // New index - else if (btoi(buffer[2]) == (btoi(sub[2]) + 1) && buffer[1] == sub[1]) - { - Array.Copy(buffer, 2, sub, 2, 4); - tpos = ((btoi((byte)(buffer[3] * 60)) + btoi(buffer[4])) * 75) + btoi(buffer[5]); - } + // New index + else if (btoi(buffer[2]) == (btoi(sub[2]) + 1) && buffer[1] == sub[1]) + { + Array.Copy(buffer, 2, sub, 2, 4); + tpos = ((btoi((byte)(buffer[3] * 60)) + btoi(buffer[4])) * 75) + btoi(buffer[5]); + } - // MSF1 [3-5] - else - { - if (sub[2] == 0) - tpos--; - else - tpos++; + // MSF1 [3-5] + else + { + if (sub[2] == 0) + tpos--; + else + tpos++; - sub[3] = itob((byte)(tpos / 60 / 75)); - sub[4] = itob((byte)((tpos / 75) % 60)); - sub[5] = itob((byte)(tpos % 75)); - } + sub[3] = itob((byte)(tpos / 60 / 75)); + sub[4] = itob((byte)((tpos / 75) % 60)); + sub[5] = itob((byte)(tpos % 75)); + } - // MSF2 [7-9] - sub[7] = itob((byte)(sector / 60 / 75)); - sub[8] = itob((byte)((sector / 75) % 60)); - sub[9] = itob((byte)(sector % 75)); + // MSF2 [7-9] + sub[7] = itob((byte)(sector / 60 / 75)); + sub[8] = itob((byte)((sector / 75) % 60)); + sub[9] = itob((byte)(sector % 75)); - // CRC-16 [10-11] - ushort crc = CRC16.Calculate(sub, 0, 10); - byte[] crcBytes = BitConverter.GetBytes(crc); - sub[10] = crcBytes[0]; - sub[11] = crcBytes[1]; + // CRC-16 [10-11] + ushort crc = CRC16.Calculate(sub, 0, 10); + byte[] crcBytes = BitConverter.GetBytes(crc); + sub[10] = crcBytes[0]; + 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[4] != sub[4] || buffer[5] != sub[5] || buffer[7] != sub[7] || buffer[8] != sub[8] || 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: {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]) - Console.Write($" P2 xor {buffer[4] ^ sub[4]:x} {buffer[8] ^ sub[8]: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]) - Console.Write($" P3 xor {buffer[5] ^ sub[5]:x} {buffer[9] ^ sub[9]:x}"); - else - Console.Write(" ?"); + // If any byte (except position 6) is different, it's a modified sector + for (int i = 0; i < 12; i++) + { + if (i == 6) + continue; - Console.Write("\n"); - modifiedSectors++; - } - } - } + if (buffer[i] != sub[i]) + { + modifiedSectors++; + break; + } + } + } - Console.WriteLine($"Number of modified sectors: {modifiedSectors}"); - return modifiedSectors != 0; - } + return modifiedSectors != 0; + } - private static byte btoi(byte b) - { - /* BCD to u_char */ - return (byte)((b) / 16 * 10 + (b) % 16); - } + private static byte btoi(byte b) + { + /* BCD to u_char */ + return (byte)((b) / 16 * 10 + (b) % 16); + } - private static byte itob(byte i) - { - /* u_char to BCD */ - return (byte)((i) / 10 * 16 + (i) % 10); - } - } + private static byte itob(byte i) + { + /* u_char to BCD */ + return (byte)((i) / 10 * 16 + (i) % 10); + } + } } diff --git a/BurnOutSharp/FileType/MPQ.cs b/BurnOutSharp/FileType/MPQ.cs index d9035197..d69e389e 100644 --- a/BurnOutSharp/FileType/MPQ.cs +++ b/BurnOutSharp/FileType/MPQ.cs @@ -33,7 +33,6 @@ namespace BurnOutSharp.FileType using (StreamReader sr = new StreamReader(listStream)) { listfile = sr.ReadToEnd(); - Console.WriteLine(listfile); } string sub = string.Empty;