Пример #1
0
        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);
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
 public InstructionForm(LuaFile.Instruction instruction, int index, string funcName) : this(funcName)
 {
     Result = instruction;
     Index  = index;
 }