public void DisassembleFile(string outputfile)
        {
            bool _skipDisassembly = false;

            if (File.Exists(outputfile))
            {
                if (MessageBox.Show("Assemblerfile already exists, do you want to redo the disassembly?", "Question", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    _skipDisassembly = true;
                }
            }
            if (!_skipDisassembly)
            {
                Disassembler disasm = new Disassembler();
                disasm.onProgress += new Disassembler.Progress(disasm_onProgress);
                logger.Debug("Starting disassembly");
                disasm.DisassembleFile(filename, m_symbols);
                logger.Debug("Done disassembling: " + disasm.Mnemonics.Count.ToString());
                using (StreamWriter sw = new StreamWriter(outputfile))
                {
                    foreach (MNemonicHelper helper in disasm.Mnemonics)
                    {
                        if (helper.Mnemonic.Contains(":"))
                        {
                            //listBox1.Items.Add(helper.Mnemonic);
                            if (!helper.Mnemonic.Contains("LBL_"))
                            {
                                sw.WriteLine();
                            }
                            sw.WriteLine(helper.Mnemonic);
                        }
                        else
                        {
                            //listBox1.Items.Add(helper.Address.ToString("X8") + " " + helper.Mnemonic);
                            sw.WriteLine("0x" + helper.Address.ToString("X8") + "\t" + helper.Mnemonic);
                        }
                    }
                }
                // start the external viewer with the file
            }
            LoadFile(outputfile);
            string copyFile = filename + DateTime.Now.Ticks.ToString();
            File.Copy(filename, copyFile);
            LoadBinaryFile(copyFile, m_symbols);
        }
 void disasm_onProgress(object sender, Disassembler.ProgressEventArgs e)
 {
     switch (e.Type)
     {
         case Disassembler.ProgressType.DisassemblingVectors:
             toolStripProgressBar1.Value = e.Percentage;
             break;
         case Disassembler.ProgressType.DisassemblingFunctions:
             toolStripStatusLabel3.Text = e.Percentage.ToString("D3") + " functions disassembled";
             break;
         case Disassembler.ProgressType.TranslatingVectors:
         case Disassembler.ProgressType.TranslatingLabels:
         case Disassembler.ProgressType.SortingData:
             if (e.Percentage <= toolStripProgressBar2.Maximum)
             {
                 toolStripProgressBar2.Value = e.Percentage;
             }
             break;
     }
     Application.DoEvents();
 }