Example #1
0
        static Int32 Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("Pass a rom file, output file, start address (HEX) and length to search for (Base 10 Integer)");
                return(1);
            }
            var rom = new RomDataWrapper(new FileInfo(args[0]));

            var outputFile = new FileInfo(args[1]);

            var from     = Int32.Parse(args[2], NumberStyles.HexNumber);
            var distance = Int32.Parse(args[3]);

            var foundPointers = new List <PointerText>();

            for (int i = 0; i < distance; i++)
            {
                var foundPointer = rom.GetOriginalPointerInfo(from + i);
                if (foundPointer.ReferenceCount > 0)
                {
                    foundPointers.Add(foundPointer);
                }
            }

            PointerText.WritePointersToFile(outputFile, foundPointers);

            return(0);
        }
Example #2
0
        static void Main(string[] args)
        {
            var pointers         = LoadTranslationFileLines(args[0]);
            var strippedPointers = new Dictionary <Int32, PointerText>();

            foreach (var pointer in pointers)
            {
                if (strippedPointers.ContainsKey(pointer.Address))
                {
                    Console.WriteLine("Double pointer found at address {0:X6}", pointer.Address);
                    if (String.IsNullOrEmpty(strippedPointers[pointer.Address].TranslatedSingleLine) && !String.IsNullOrEmpty(pointer.TranslatedSingleLine))
                    {
                        strippedPointers[pointer.Address].TranslatedSingleLine = pointer.TranslatedSingleLine;
                    }
                }
                else
                {
                    strippedPointers.Add(pointer.Address, pointer);
                }
            }
            var outputFile = new FileInfo(args[1]);

            PointerText.WritePointersToFile(outputFile, strippedPointers.Values.OrderBy(p => p.Address));

            Console.WriteLine("Done...");
            Console.ReadLine();
        }
Example #3
0
        private void AutoSavetranslationFile()
        {
            if (TranslationFile == null)
            {
                return;
            }

            DirectoryInfo autosaveFolder = new DirectoryInfo("autosave");

            if (!autosaveFolder.Exists)
            {
                autosaveFolder.Create();
                autosaveFolder.Refresh();
            }
            var existingFiles = autosaveFolder.GetFiles("*_autosave.txt");

            foreach (var file in existingFiles.OrderByDescending(f => f.LastWriteTime).Skip(10)) //TODO: parameter?
            {
                file.Delete();
            }
            var baseName       = TranslationFile.Name.Substring(0, TranslationFile.Name.Length - TranslationFile.Extension.Length);
            var backupFileName = String.Format("{0}_{1:yyMMddHHmmss}_autosave.txt", baseName, DateTime.Now);
            var backupFileInfo = new FileInfo(Path.Combine(autosaveFolder.FullName, backupFileName));

            PointerText.WritePointersToFile(backupFileInfo, TranslationLines.Select(l => l.PointerText).OrderBy(l => l.Address));
        }
Example #4
0
 private void WriteTranslationFile(FileInfo outputFile)
 {
     PointerText.WritePointersToFile(outputFile, TranslationLines.Select(l => l.PointerText).OrderBy(l => l.Address));
     foreach (var line in TranslationLines)
     {
         line.HasChangesInMemory = false;
     }
     StatusMessage = String.Format("Saved translation to {0}", outputFile.Name);
 }
Example #5
0
        static void Main(string[] args)
        {
            var rom = new RomDataWrapper(new FileInfo(args[0]));

            var lines = LoadTranslationFileLines(args[1]);

            var linesWithReferences = LoadLinereferencesFromRom(rom, lines);

            var outputFile = new FileInfo(args[2]);

            PointerText.WritePointersToFile(outputFile, linesWithReferences.OrderBy(l => l.Address));
        }
Example #6
0
        private static void SplitFile(IEnumerable <PointerText> lines, Int32 level, Decimal from, Decimal to, DirectoryInfo outDir)
        {
            var newName = String.Format("{0:0.00}-{1:0.00}.txt", from, to);
            var newFile = new FileInfo(Path.Combine(outDir.FullName, newName));

            PointerText.WritePointersToFile(newFile, lines);

            level -= 1;
            if (level == 0)
            {
                return;
            }

            var halfwayLines = lines.Count() / 2;
            var halfway      = (from + to) / 2;

            SplitFile(lines.Take(halfwayLines), level, from, halfway, outDir);
            SplitFile(lines.Skip(halfwayLines), level, halfway, to, outDir);
        }
Example #7
0
        static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("Pass at elast one rom file, output file, and existing translation file");
            }
            var rom = new RomDataWrapper(new FileInfo(args[0]));

            var tmpRomData = new Byte[rom.RomContents.Length - (skipBlockEnd - skipBlockStart)];

            Array.Copy(rom.RomContents, tmpRomData, skipBlockStart);
            Array.Copy(rom.RomContents, skipBlockEnd, tmpRomData, skipBlockStart, rom.RomContents.Length - skipBlockEnd);

            var romWithHole = new RomDataWrapper(tmpRomData);

            FileInfo outputFile = new FileInfo(args[1]);

            var pointers = new List <PointerText>();

            for (int i = 2; i < args.Length; i++)
            {
                pointers.AddRange(PointerText.ReadPointersFromFile(new FileInfo(args[i])));
            }

            pointers = pointers.OrderBy(p => p.Address).ToList();

            foreach (var pointer in pointers)
            {
                if (pointer.Address > skipBlockEnd)
                {
                    pointer.Address -= (skipBlockEnd - skipBlockStart);
                }
            }

            var blocks = new List <ValueTuple <Int32, Int32> >();
            var block  = (pointers[0].Address, pointers[0].Address + pointers[0].AvailableLength);

            foreach (var pointer in pointers.Skip(1))
            {
                if (block.Item2 + 1 == pointer.Address)
                {
                    block = (block.Item1, pointer.Address + pointer.AvailableLength);
                }
                else
                {
                    blocks.Add(block);
                    block = (pointer.Address, pointer.Address + pointer.AvailableLength);
                }
            }

            ProcessBlocks(blocks, romWithHole);

            for (int i = 0; i < newTranslationLines.Count; i++)
            {
                if (newTranslationLines[i] > skipBlockStart)
                {
                    newTranslationLines[i] += (skipBlockEnd - skipBlockStart);
                }
            }

            var linesToTranslate = LoadNewTranslationLines(rom);

            Console.Write("\rReading progress: 100%   ");
            Console.WriteLine();

            Console.WriteLine("Writing missed text entries to file.");

            PointerText.WritePointersToFile(outputFile, linesToTranslate.OrderBy(l => l.Address));

            Console.WriteLine("Done, press any key to continue...");
            Console.ReadLine();
        }