示例#1
0
        // Utility
        internal static bool isValid(string exeFS, string romFS, string exeheader, string path, string serial, bool Card2)
        {
            bool isSerialValid = true;

            if (serial.Length <= 10 && serial.Length >= 3)
            {
                foreach (char c in serial.Where(c => !Char.IsLetterOrDigit(c) && c != '-'))
                {
                    isSerialValid = false;
                }
            }
            else
            {
                isSerialValid = false;
            }
            if (exeFS == string.Empty ||
                romFS == string.Empty ||
                exeheader == string.Empty ||
                path == string.Empty ||
                !isSerialValid)
            {
                return(false);
            }

            Exheader exh = new Exheader(exeheader);

            return(!exh.isPokemon() || Card2);
        }
示例#2
0
        // Utility
        internal static bool isValid(string exeFS, string romFS, string exeheader, string path, string serial, bool Card2)
        {
            bool isSerialValid = true;

            if (serial.Length == 10)
            {
                string[] subs = serial.Split('-');
                if (subs.Length != 3)
                {
                    isSerialValid = false;
                }
                else
                {
                    if (subs[0].Length != 3 || subs[1].Length != 1 || subs[2].Length != 4)
                    {
                        isSerialValid = false;
                    }
                    else if (subs[0] != "CTR" && subs[0] != "KTR")
                    {
                        isSerialValid = false;
                    }
                    else if (subs[1] != "P" && subs[1] != "N" && subs[2] != "U")
                    {
                        isSerialValid = false;
                    }
                    else
                    {
                        foreach (char c in subs[2].Where(c => !Char.IsLetterOrDigit(c)))
                        {
                            isSerialValid = false;
                        }
                    }
                }
            }
            else
            {
                isSerialValid = false;
            }
            if (exeFS == string.Empty ||
                romFS == string.Empty ||
                exeheader == string.Empty ||
                path == string.Empty ||
                !isSerialValid)
            {
                return(false);
            }

            Exheader exh = new Exheader(exeheader);

            return(!exh.isPokemon() || Card2);
        }
示例#3
0
        // Form Load - Used to handle commandline arguments.
        private async void Form1_Load(object sender, EventArgs e)
        {
            var args = Environment.GetCommandLineArgs();
            // Remove the control box
            //if (args.Length > 3)
            //{
            //    this.ControlBox = false;
            //}
            if (args.Length > 3 && args[1] == "-romfs")
            {
                //Build just the romfs, for use with Hans
                string ROMFS_PATH = args[2].Replace("/", "\\");
                string SAVE_PATH = args[3].Replace("/", "\\");
                await Task.Run(() => CTR_ROM.buildRomfs(ROMFS_PATH, SAVE_PATH, RTB_Progress, PB_Show));
                this.Close();
            }
            else if (args.Length > 4)
            {
                //Build the entire 3DS ROM using commandline input.

                string exefsPath = args[1].Replace("/", "\\");
                string romfsPath = args[2].Replace("/", "\\");
                string exheaderPath = args[3].Replace("/", "\\");

                //romfs
                TB_Romfs.Text = romfsPath;

                //exefs
                string[] files = (new DirectoryInfo(exefsPath).GetFiles().Select(f => Path.GetFileNameWithoutExtension(f.FullName)).ToArray());
                if (((files.Contains("code") || files.Contains(".code")) && !(files.Contains(".code") && files.Contains("code"))) && files.Contains("banner") && files.Contains("icon") && files.Length < 10)
                {
                    FileInfo fi = (new DirectoryInfo(exefsPath)).GetFiles()[Math.Max(Array.IndexOf(files, "code"), Array.IndexOf(files, ".code"))];
                    if (fi.Name == "code.bin")
                    {
                        string newName = fi.DirectoryName + Path.DirectorySeparatorChar + ".code.bin";
                        File.Move(fi.FullName, newName);
                        fi = new FileInfo(newName);
                    }
                    if (args.Contains("-compressCode"))
                    {
                        if (fi.Length % 0x200 == 0)
                        {
                            SetPrebuiltBoxes(false);
                            await Task.Run(() =>
                            {
                                var blz = new BLZCoder();
                                blz.CompressCode(new[] { "-en", fi.FullName }, PB_Show);
                            });
                            SetPrebuiltBoxes(true);
                        }
                    }
                    if (files.Contains("logo"))
                    {
                        File.Delete((new DirectoryInfo(exefsPath)).GetFiles()[Array.IndexOf(files, "logo")].FullName);
                    }
                    TB_Exefs.Text = exefsPath;
                    //Validate_Go();
                }
                else
                {
                    //Skipping alert because to avoid interacting with the user.

                    //Alert("Your selected ExeFS is missing something essential.");
                }

                FileInfo exfi = new FileInfo(exheaderPath);
                TB_Exheader.Text = exheaderPath;
                Exheader exh = new Exheader(TB_Exheader.Text);
                if (RecognizedGames.ContainsKey(exh.TitleID))
                {
                    TB_Serial.Text = exh.GetSerial();
                }

                //Replacing / with \ because somewhere in buildROM, / doesn't work, while \ does.
                TB_SavePath.Text = args[4].Replace("/", "\\");

                //Build the ROM
                await CTR_ROM.buildROM(Card2, LOGO_NAME, exefsPath, romfsPath, exheaderPath, TB_Serial.Text, TB_SavePath.Text, PB_Show, RTB_Progress);

                //Close the form
                this.Close();      
            }
        }
示例#4
0
        private void B_Exheader_Click(object sender, EventArgs e)
        {

            if (threads > 0) { Alert("Please wait for all operations to finish first."); return; }

            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                FileInfo fi = new FileInfo(ofd.FileName);
                if (fi.Length < 0x800)
                {
                    Alert("Selected Exheader is too short. Correct size is 0x800 for Exheader and AccessDescriptor.");
                    return;
                }
                TB_Exheader.Text = ofd.FileName;
                Exheader exh = new Exheader(TB_Exheader.Text);
                if (RecognizedGames.ContainsKey(exh.TitleID))
                {
                    if (Prompt(MessageBoxButtons.YesNo, "Detected " + RecognizedGames[exh.TitleID][1] + ". Load Defaults?") == DialogResult.Yes)
                        TB_Serial.Text = exh.GetSerial();
                }
            }
            Validate_Go();
        }
示例#5
0
        // Utility
        internal static bool isValid(string exeFS, string romFS, string exeheader, string path, string serial, bool Card2)
        {
            bool isSerialValid = true;
            if (serial.Length == 10)
            {
                string[] subs = serial.Split('-');
                if (subs.Length != 3)
                    isSerialValid = false;
                else
                {
                    if (subs[0].Length != 3 || subs[1].Length != 1 || subs[2].Length != 4)
                        isSerialValid = false;
                    else if (subs[0] != "CTR" && subs[0] != "KTR")
                        isSerialValid = false;
                    else if (subs[1] != "P" && subs[1] != "N" && subs[2] != "U")
                        isSerialValid = false;
                    else
                    {
                        foreach (char c in subs[2].Where(c => !Char.IsLetterOrDigit(c)))
                            isSerialValid = false;
                    }
                }
            }
            else
            {
                isSerialValid = false;
            }
            if (exeFS == string.Empty
                || romFS == string.Empty
                || exeheader == string.Empty
                || path == string.Empty
                || !isSerialValid)
                return false;

            Exheader exh = new Exheader(exeheader);
            return !exh.isPokemon() || Card2;
        }