static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("mas2extract.exe filename.MAS [-s] [target_directory]"); Console.WriteLine("MAS2 extractor tool for rFactor 2 MAS game files."); Console.WriteLine(""); Console.WriteLine("Parameter -s will only show all files inside the archive, but not extract them"); Console.WriteLine("If no extract directory is entered, the location of mas2extract.exe will be used."); return; } var f= args[0]; if(File.Exists(f) == false) { Console.WriteLine("Cannot find target MAS file!"); return; } string target = ""; if (args.Length == 2) target = args[1]; else target = "./"; bool unpack = true; if (target == "-s") { unpack = false; }else { if (!Directory.Exists(target)) { Console.WriteLine("Target extract directory doesn't exist"); return; } } MAS2Reader reader; try { reader = new MAS2Reader(f); Console.WriteLine(reader.Count + " files in archive"); Console.WriteLine( "+-----------------------------------------------------------------------------+"); Console.Write(PatchString("| Name", 38) + " | "); Console.Write(PatchString("Compressed", 10) + " | "); Console.Write(PatchString("Raw Size", 10) + " | "); Console.Write(PatchString("Ratio", 10) + " |"); Console.WriteLine(); Console.WriteLine( "+-----------------------------------------------------------------------------+"); foreach(MAS2File file in reader.Files) { double ratio = 1 - file.CompressedSize/file.UncompressedSize; Console.Write(PatchString("| "+file.Filename, 38) + " | "); Console.Write(PatchString(file.CompressedSize.ToString(), 10) + " | "); Console.Write(PatchString(file.UncompressedSize.ToString(), 10) + " | "); Console.Write(PatchString(Math.Round(100*ratio,1).ToString(), 10) + " |"); try { if (unpack) reader.ExtractFile(file, Path.Combine(target + "\\", file.Filename)); }catch(Exception ex) { Console.Write("FAIL"); } Console.WriteLine(); } Console.WriteLine( "+-----------------------------------------------------------------------------+"); Console.WriteLine("Press ENTER to terminate"); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("Failed to open MAS archive. Is it a rFactor 2 archive?"); } }
static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine(usageText); Environment.ExitCode = 1; // Parameter Error return; } // parse the command line for options and other arguments var options = new List<string>(); var arguments = new List<string>(); bool endOfOptions = false; foreach (string arg in args) { if (endOfOptions) arguments.Add(arg); else if (arg[0] == '-') options.Add(arg.TrimStart(new char[] { '-' })); else { arguments.Add(arg); endOfOptions = true; } } bool optionShowOnly = options.IndexOf("s") >= 0; bool optionNotCreate = options.IndexOf("c") >= 0; string sourceFile = arguments.Count > 0 ? arguments[0] : null; string targetDir = arguments.Count > 1 ? arguments[1] : null; if(sourceFile == null || !File.Exists(sourceFile)) { Console.Error.WriteLine("Cannot find target MAS file!"); Environment.ExitCode = 2; // Runtime Error return; } if (!optionShowOnly) { if(targetDir == null) { // build targetDir from filename and create if not already exists targetDir = "./" + Path.GetFileNameWithoutExtension(sourceFile) + ".masdir"; optionNotCreate = false; // true makes no sense and will be ignored } if (!Directory.Exists(targetDir)) { if (optionNotCreate) { Console.Error.WriteLine("Target extract directory doesn't exist"); Environment.ExitCode = 2; // Runtime Error return; } Directory.CreateDirectory(targetDir); } } MAS2Reader reader; try { reader = new MAS2Reader(sourceFile); Console.WriteLine(reader.Count + " files in archive"); Console.WriteLine("+{0}+", new string('-', 77)); Console.WriteLine("| {0,-33} | {1,-10} | {2,-9} | {3,-6} | {4,-5} |", "Name", "Compressed", "Raw Size", "Ratio", "Type"); Console.WriteLine("+{0}+", new string('-', 77)); foreach(MAS2File file in reader.Files) { double ratio = (file.UncompressedSize == 0) ? 0.0 : 1.0 - (double)file.CompressedSize / (double)file.UncompressedSize; Console.Write("| {0,-33} | {1,10} | {2,9} | {3,6:P1} | {5,1}{4,4} |", LimitString(file.Filename, 33), file.CompressedSize, file.UncompressedSize, ratio, file.FileType & ~0x10010, // "Z" = Zlib deflate, "M" = MAS2 encoded, " " = plain (file.FileType & 0x10) != 0 ? "Z" : ((file.FileType & 0x10000)!=0 ? "M" : " ") ); if (!optionShowOnly) { try { reader.ExtractFile(file, Path.Combine(targetDir, file.Filename)); } catch (Exception ex) { Console.Write("FAIL"); } } Console.WriteLine(); } Console.WriteLine("+{0}+", new string('-', 77)); Console.WriteLine("Press ENTER to terminate"); Console.ReadLine(); Environment.ExitCode = 0; } catch (Exception ex) { Console.Error.WriteLine("Failed to open MAS archive. Is it a rFactor 2 archive?"); Environment.ExitCode = 2; } }