/* * Processes codes in the string array splitList */ public static Form1.CodeDB ParseCodeString(string data, Form1.CodeDB db) { if (data == null) { return(db); } Form1.CodeDB ret = db; splitList = data.Split('\n'); ret.CData = new Form1.ncCode[0]; foreach (string s in splitList) { if (s != "" && s != "\r" && s.Split(' ').Length > 2) { Form1.ncCode temp = new Form1.ncCode(); Form1.ncCodeType tempCT = ncCodeTypes.Where(i => i.Command == s[0]).FirstOrDefault(); if (tempCT.Command != '\0') { temp = tempCT.ParseCode(s.Replace("\r", "")); } if (temp.codeArg2 != null) { Array.Resize(ref ret.CData, ret.CData.Length + 1); ret.CData[ret.CData.Length - 1] = temp; } } } return(ret); }
public static bool isCodeValid(Form1.ncCode c) { if (c.codeType != null && c.codeType != '\0') //valid code { if (c.codeArg2 != null && c.codeArg2.Length != 0) { if (c.codeArg1_BA != null && c.codeArg1_BA.Length != 0) { return(true); } } } return(false); }
/* * Processes joker code types (both D and E type) */ /* * public static int ParseJokerD(string[] splitList, int cnt, ref Form1.CodeDB Code, int ind2) * { * String code = misc.sLeft(splitList[cnt], 19); * String val = misc.sRight(code, 8); * if (val.IndexOf(' ') >= 0) * return 0; * Code.CData[ind2].jsize = int.Parse(misc.sLeft(val, 2), NumberStyles.HexNumber); * Array.Resize(ref Code.CData, Code.CData.Length + Code.CData[ind2].jsize); * int x = 0, y = 0, ret = Code.CData[ind2].jsize; * * Code.CData[ind2].jbool = BitConverter.GetBytes(int.Parse(misc.ReverseE("00" + misc.sRight(val, 6), 8), NumberStyles.HexNumber)); * * ind2++; * for (x = 0; x < ret; x++) * { * do * { * y++; * if ((cnt + y) >= splitList.Length) * return ind2; * code = misc.sLeft(splitList[cnt + y], 19); * } while (code == null || code == "" || CheckForComment(code) == 1); * * int len = 0; * Code.CData[ind2].type = code[0]; * * switch (Code.CData[ind2].type) * { * case '0': * len = 2; * break; * case '1': * len = 4; * break; * case '2': case '6': case 'D': case 'E': * len = 8; * break; * } * * Code.CData[ind2].addr = ulong.Parse(misc.sMid(code, 2, 8), NumberStyles.HexNumber); * Code.CData[ind2].val = BitConverter.GetBytes(int.Parse(misc.ReverseE(misc.sRight(code, len), 8), NumberStyles.HexNumber)); * ind2++; * } * * return ind2; * } */ #region CodeType Parsers public static Form1.ncCode parseTextCode(string code) { Form1.ncCode ret = parseCode(code); if (code == null || code == "" || ret.codeArg2 == null) { return(new Form1.ncCode()); } string[] codeArr = code.Split(' '); string writeStr = ""; for (int off = 2; off < codeArr.Length; off++) { writeStr += codeArr[off] + " "; } writeStr = writeStr.TrimEnd(' '); ret.codeArg2 = misc.StringToByteArray(writeStr); Array.Resize(ref ret.codeArg2, ret.codeArg2.Length + 1); return(ret); }
private void ConditionalEditor_Shown(object sender, EventArgs e) { cbType.SelectedIndex = 0; cbComp.SelectedIndex = 0; if (!isEditing) { tbCodes.Text = String.Join("\r\n", code.Split(new char[] { '\r', '\n' })); cond = new CondCode(); cond.addr = 0; cond.codes = tbCodes.Text; cond.value = "00000000"; cond.type = CodeType.Hex; } else { Form1.ncCode ncCd = codes.ParseCodeStringFull(code)[0]; string text = ""; // ncCd.codeType.ToString() + " " + ncCd.codeArg1.ToString("X8") + " " + misc.ByteAToStringHex(ncCd.codeArg2, "") + "\r\n"; int selStart = rtb.SelectionStart, selEnd = 0; SelStart = selStart; while (rtb.Text[selStart] != '\n') { selStart++; } selStart++; for (int x = (int)ncCd.codeArg0; x > 0;) { if (selStart >= rtb.Text.Length) { break; } selEnd = selStart + 1; while (selEnd < rtb.Text.Length && rtb.Text[selEnd] != '\n') { selEnd++; } string line = rtb.Text.Substring(selStart, selEnd - selStart); if (codes.ParseCodeStringFull(line)[0].codeType != '\0') { text += line + "\r\n"; x--; } else { text += ((line.IndexOf("\n") >= 0 && line.IndexOf("\r") < 0) ? line.Replace("\n", "\r\n") : line) + "\r\n"; } selStart = selEnd + 1; } SelEnd = selEnd; cond = new CondCode(); cond.addr = (uint)ncCd.codeArg1; cond.codes = text; cond.value = misc.ByteAToStringHex(ncCd.codeArg2, ""); cond.type = CodeType.Hex; tbCodes.Text = text; tbAddr.Text = ncCd.codeArg1.ToString("X8"); tbValue.Text = cond.value; cbType.SelectedIndex = 0; cbComp.SelectedIndex = ncCd.codeType.ToString().ToUpper() == "D" ? 0 : 1; } }
public static Form1.ncCode parseCode(string code) { Form1.ncCode ret = new Form1.ncCode(); if (code == null || code == "") { return(ret); } string[] codeArr = code.Split(' '); for (int x = 0; x < 3; x++) { if (codeArr[x] != "") { try { switch (x) { case 0: ret.codeType = codeArr[0][0]; if (codeArr[0].Length > 1) { ret.codeArg0 = uint.Parse(misc.sRight(codeArr[0], codeArr[0].Length - 1), System.Globalization.NumberStyles.HexNumber); } break; case 1: try { ret.codeArg1 = ulong.Parse(codeArr[1], System.Globalization.NumberStyles.HexNumber); } catch { } ret.codeArg1_BA = misc.StringBAToBA(codeArr[1]); break; case 2: switch (ret.codeType) { case '1': ret.codeArg2 = new byte[0]; break; case '2': Single flt = Single.Parse(codeArr[2]); ret.codeArg2 = BitConverter.GetBytes(flt); Array.Reverse(ret.codeArg2); break; default: ret.codeArg2 = misc.StringBAToBA(codeArr[2]); break; } break; } } catch { } } } if (ret.codeType != '\0' && ret.codeArg2 != null) { return(ret); } else { return(new Form1.ncCode()); } }
/* * Loops through each code (if it is a write) it grabs what the data is */ public static Form1.ncCode[] CreateBackupPS3(Form1.CodeDB Codes) { if (Codes.CData == null) { return(new Form1.ncCode[0]); } Form1.ncCode[] ret = new Form1.ncCode[0]; int isPointerWrite = 0; ulong arg1 = 0; foreach (Form1.ncCode nC in Codes.CData) { if (nC.codeType == '0' || nC.codeType == '1' || nC.codeType == '2') { Array.Resize(ref ret, ret.Length + 1); int ind = ret.Length - 1; ret[ind] = new Form1.ncCode(); ret[ind].codeType = nC.codeType; ret[ind].codeArg0 = nC.codeArg0; if (isPointerWrite == 1) { ret[ind].codeArg1 = arg1; isPointerWrite = 0; } else if (isPointerWrite == 2) { byte[] arg1_BA = BitConverter.GetBytes((uint)arg1); if (BitConverter.IsLittleEndian) { Array.Reverse(arg1_BA); } ret[ind].codeArg2 = arg1_BA; isPointerWrite = 0; } else { ret[ind].codeArg1 = nC.codeArg1; } ret[ind].codeArg2 = new byte[nC.codeArg2.Length]; Form1.apiGetMem(ret[ind].codeArg1, ref ret[ind].codeArg2); } else if (nC.codeType == '6') { byte[] arg1_BA = BitConverter.GetBytes((uint)arg1); if (BitConverter.IsLittleEndian) { Array.Reverse(arg1_BA); } byte[] addr = new byte[4]; ulong arg1Addr = (isPointerWrite == 1) ? arg1 : nC.codeArg1; byte[] arg2Off = (isPointerWrite == 2) ? arg1_BA : nC.codeArg2; Form1.apiGetMem(arg1Addr, ref addr); if (!Form1.doFlipArray) { Array.Reverse(addr); } ulong newAddrUL = BitConverter.ToUInt32(addr, 0); newAddrUL += misc.ByteArrayToLong(arg2Off, 0, arg2Off.Length); arg1 = newAddrUL; isPointerWrite = ((nC.codeArg0 == 1) ? 2 : 1); } } return(ret); }