private static void DumpInfo(RgssArchive archive) { const string headFormat = "\x1B[39m{0,-6}|{1,-8}|{2,-42}|{3,-10}|{4,-8}\x1B[39m"; const string rowFormat = "\x1B[39m{0,6}\x1B[39m|\x1B[31m{1:X8}\x1B[39m|{2}\x1B[39m|\x1B[40m{3,-10}\x1B[39m|\x1B[32m{4:X8}\x1B[39m"; var header = string.Format(headFormat, "Num", "Offset", "Name", "Size Bytes", "Key"); var footer = string.Format(headFormat, new string('-', 6), new string('-', 8), new string('-', 42), new string('-', 10), new string('-', 8)); Console.WriteLine(header); Console.WriteLine(footer); for (int i = 0; i < archive.FilePointers.Count; i++) { var pointer = archive.FilePointers[i]; var clipName = Right(pointer.Name, 42); var rem = 42 - clipName.Length; var nameHighlight = "\x1B[30;1m" + clipName.Insert(clipName.LastIndexOf('\\') + 1, "\x1B[37;1m") + new string(' ', rem) + "\x1B[0m"; Console.WriteLine(rowFormat, i, pointer.Offset, nameHighlight, pointer.Size, pointer.Key); } Console.WriteLine(footer); }
private static bool TryOpenArchive(ProgramArguments args, out RgssArchive archive) { var ver = RgssArchive.GetVersion(args.RgssArchive); if (string.IsNullOrEmpty(args.RgssArchive)) { archive = null; return(false); } switch (ver) { case 1: archive = new RgssArchiveV1(args.RgssArchive); return(true); case 3: archive = new RgssArchiveV3(args.RgssArchive); return(true); case -1: Console.WriteLine("\x1B[31mInvalid RGSSAD Archive\x1B[39m"); archive = null; return(false); default: Console.WriteLine("\x1B[31mUnknown RGSSAD Version\x1B[39m"); archive = null; return(false); } }
private static void ExtractFiles(RgssArchive archive, string outDir, bool supress) { var fileCount = archive.FilePointers.Count; var fileCurr = 0; Console.WriteLine("------"); Console.WriteLine("{0} Files Found", fileCount); Console.WriteLine("Output Folder: {0}", outDir); Console.WriteLine("------"); foreach (var pointer in archive.FilePointers) { var targetPath = Path.Combine(outDir, pointer.Name); if (!supress) { var digits = Math.Floor(Math.Log10(fileCount) + 1); var fmt = File.Exists(targetPath) ? "\x1B[31m[{1," + digits + "}/{2}] Overwrite:\x1B[37m {0}\x1B[0m\x1B[39m" : "\x1B[32m[{1," + digits + "}/{2}] Create :\x1B[37m {0}\x1B[0m\x1B[39m"; var nameHighlight = "\x1B[1;30m" + pointer.Name.Insert(pointer.Name.LastIndexOf('\\') + 1, "\x1B[37m") + "\x1B[2;37m"; Console.WriteLine(fmt, nameHighlight, ++fileCurr, fileCount); } var targetDir = Path.GetDirectoryName(targetPath); Directory.CreateDirectory(targetDir); using (var ps = RgssArchive.GetFile(pointer)) using (var fs = File.Create(targetPath)) CopyStream(ps, fs); } }