string GetParamString(LuaFile.Instruction ins) { string paramStr; switch (ins.GetOpMode()) { case LuaFile.OpMode.iABC: uint[] ABC = ins.GetiABC(); paramStr = ABC[0] + ", " + ABC[1] + ", " + ABC[2]; break; case LuaFile.OpMode.iABx: uint[] ABx = ins.GetiABx(); paramStr = ABx[0] + ", " + ABx[1]; break; case LuaFile.OpMode.iAsBx: int[] AsBx = ins.GetiAsBx(); paramStr = AsBx[0] + ", " + AsBx[1]; break; default: paramStr = ins.Params.ToString(); break; } return(paramStr); }
private void listViewMain_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] dragFileNames = (string[])e.Data.GetData(DataFormats.FileDrop); if (curFunction != null) { if (MessageBox.Show("Open file \"" + dragFileNames[0] + "\"?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } } closeToolStripMenuItem_Click(sender, e); LoadFile(dragFileNames[0]); } else if (e.Data.GetDataPresent(typeof(ListViewItem))) { ListViewItem dragItem = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; int dragIndex = dragItem.Index; int dropIndex; Point dropPoint = listViewMain.PointToClient(new Point(e.X, e.Y)); ListViewItem dropItem = listViewMain.GetItemAt(dropPoint.X, dropPoint.Y); if (dropItem == null) { if (e.Y < dragPoint.Y) { dropIndex = 0; } else { dropIndex = listViewMain.Items.Count; } } else { dropIndex = dropItem.Index; } LuaFile.Instruction dragIns = curFunction.Code[dragIndex]; curFunction.Code.RemoveAt(dragIndex); curFunction.Code.Insert(dropItem == null ? dropIndex - 1 : dropIndex, dragIns); UpdateControls(); } }
private void UpdateControls() { listViewMain.Items.Clear(); LuaFile.LuaFunction curFunction = Global.luaFile.FindFunction(curFuncName); for (int i = 0; i < curFunction.Code.Count; ++i) { LuaFile.Instruction curIns = curFunction.Code[i]; string paramStr = GetParamString(curIns); string[] curItemStr = { i.ToString(), curIns.Operation.ToString(), paramStr, curIns.GetOpMode().ToString(), "" }; ListViewItem curItem = new ListViewItem(curItemStr); listViewMain.Items.Add(curItem); } }
private void ExportFunction(LuaFile.FuncNode curNode, FileStream fs) { /// export current function // export function name byte[] buffer = Encoding.UTF8.GetBytes("@" + Global.fileName + ": " + curNode.Function.Header.LineDefined + "," + curNode.Function.Header.LastLineDefined + "\r\n"); fs.Write(buffer, 0, buffer.Length); // export function header ExportFunctionHeader(curNode.Function.Header, fs); buffer = Encoding.UTF8.GetBytes("<Disassambling>\r\n"); fs.Write(buffer, 0, buffer.Length); // export code for (int i = 0; i < curNode.Function.Code.Count; ++i) { LuaFile.Instruction curIns = curNode.Function.Code[i]; // export index buffer = Encoding.UTF8.GetBytes("[" + i + "]\t"); fs.Write(buffer, 0, buffer.Length); // export operation buffer = Encoding.UTF8.GetBytes(Enum.GetName(typeof(LuaFile.OpCode), curIns.Operation) + "\t\t"); fs.Write(buffer, 0, buffer.Length); // export params buffer = Encoding.UTF8.GetBytes(GetParamString(curIns) + "\t"); fs.Write(buffer, 0, buffer.Length); // change line buffer = Encoding.UTF8.GetBytes("\r\n"); fs.Write(buffer, 0, buffer.Length); } buffer = Encoding.UTF8.GetBytes("\r\n"); fs.Write(buffer, 0, buffer.Length); /// export children foreach (var cur in curNode.Children) { ExportFunction(cur, fs); } }
public InstructionForm(LuaFile.Instruction instruction, int index, string funcName) : this(funcName) { Result = instruction; Index = index; }