public object Calculation([FromBody] InputParameters inputParameters)
        {
            var adapted    = new Stats(inputParameters.NumberOfIterations);
            var notadapted = new Stats(inputParameters.NumberOfIterations);

            for (var i = 0; i < inputParameters.NumberOfIterations; i++)
            {
                var adaptedAloha = new AdaptedSlottedAloha.Engine(
                    inputParameters.NumberOfStations,
                    inputParameters.InputFlow,
                    inputParameters.NumberOfFrames, true);

                adapted.PackagesGenerated[i]           = adaptedAloha.Statistics.PackagesGenerated;
                adapted.PackagesLeavedSystem[i]        = adaptedAloha.Statistics.PackagesLeavedSystem;
                adapted.Collisions[i]                  = adaptedAloha.Statistics.Collisions;
                adapted.BackloggedPackages[i]          = adaptedAloha.Statistics.BackloggedPackages;
                adapted.AverageOfBackloggedPackages[i] = adaptedAloha.Statistics.AverageOfBackloggedPackages;
                adapted.AverageOfPackagesLifeTime[i]   = adaptedAloha.Statistics.AverageOfPackagesLifeTime;


                var notAdaptedAloha = new AdaptedSlottedAloha.Engine(
                    inputParameters.NumberOfStations,
                    inputParameters.InputFlow,
                    inputParameters.NumberOfFrames, false);

                notadapted.PackagesGenerated[i]           = notAdaptedAloha.Statistics.PackagesGenerated;
                notadapted.PackagesLeavedSystem[i]        = notAdaptedAloha.Statistics.PackagesLeavedSystem;
                notadapted.Collisions[i]                  = notAdaptedAloha.Statistics.Collisions;
                notadapted.BackloggedPackages[i]          = notAdaptedAloha.Statistics.BackloggedPackages;
                notadapted.AverageOfBackloggedPackages[i] = notAdaptedAloha.Statistics.AverageOfBackloggedPackages;
                notadapted.AverageOfPackagesLifeTime[i]   = notAdaptedAloha.Statistics.AverageOfPackagesLifeTime;
            }

            var adaptedAverage = new AverageStats
            {
                PackagesGenerated           = adapted.PackagesGenerated.Average(),
                PackagesLeavedSystem        = adapted.PackagesLeavedSystem.Average(),
                Collisions                  = adapted.Collisions.Average(),
                BackloggedPackages          = adapted.BackloggedPackages.Average(),
                AverageOfBackloggedPackages = adapted.AverageOfBackloggedPackages.Average(),
                AverageOfPackagesLifeTime   = adapted.AverageOfPackagesLifeTime.Average()
            };
            var notadaptedAverage = new AverageStats
            {
                PackagesGenerated           = notadapted.PackagesGenerated.Average(),
                PackagesLeavedSystem        = notadapted.PackagesLeavedSystem.Average(),
                Collisions                  = notadapted.Collisions.Average(),
                BackloggedPackages          = notadapted.BackloggedPackages.Average(),
                AverageOfBackloggedPackages = notadapted.AverageOfBackloggedPackages.Average(),
                AverageOfPackagesLifeTime   = notadapted.AverageOfPackagesLifeTime.Average()
            };

            var outputResults = new OutputResults <AverageStats>
            {
                Adapted    = adaptedAverage,
                NotAdapted = notadaptedAverage,
            };

            return(outputResults);
        }
Example #2
0
 public void PrintToFile_Scenario_SuccessfulPrintMinAvailable()
 {
     //Arrange
     List<KeyValuePair<string, int>> sortedIPList = new List<KeyValuePair<string, int>>();
     List<KeyValuePair<string, int>> sortedURLList = new List<KeyValuePair<string, int>>();
     string outputFolder = new string("");
     string fullPath = new string("");
     setVar(ref sortedIPList, ref sortedURLList, ref outputFolder, ref fullPath);
     //Act
     OutputResults.PrintToFile(sortedIPList, sortedURLList, outputFolder, append: false);
     //Act
     OutputResults.PrintToFile(sortedIPList, sortedURLList, outputFolder, numberOfResults: 10, append: false);
     //Assert
     Assert.IsTrue(File.Exists(fullPath));
     using (var sr = new StreamReader(fullPath))
     {
         string output = sr.ReadToEnd();
         Assert.IsTrue(output.Contains(string.Format("Number of unique IP Addresses:{0}", 3)));
         Assert.IsTrue(!output.Contains(string.Format("Number of unique URLs:{0}", 3)));
         Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "192.168.1.1", "100")));
         Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "192.168.1.10", "50")));
         Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "192.168.1.100", "25")));
         Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "/test/test1", "100")));
         Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "/test/test2", "50")));
         Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "/test/test3", "25")));
     }
 }
Example #3
0
        protected bool GetSplittedFromInputSidesLine(string inputSides, out string[] sidesLines)
        {
            sidesLines = new string[SIDES_NUMBER];

            if (string.IsNullOrEmpty(inputSides) && !inputSides.Contains(SEPARATOR))
            {
                OutputResults.OutputMessage(ERR_WRONG_DATA);
                return(false);
            }

            sidesLines = inputSides.Split(new char[] { SEPARATOR }, SIDES_NUMBER, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < sidesLines.Length; ++i)
            {
                if (string.IsNullOrEmpty(sidesLines[i]))
                {
                    OutputResults.OutputMessage(ERR_TOO_FEW_ARGS);
                    return(false);
                }

                sidesLines[i] = sidesLines[i].Trim(EMPTY_SPACE);

                if (sidesLines[i] == string.Empty)
                {
                    OutputResults.OutputMessage(ERR_TOO_FEW_ARGS);
                    return(false);
                }
            }

            return(true);
        }
Example #4
0
        static void Main(string[] args)
        {
            Application appTest = new Application();

            appTest.DemonstrateTrianglesCollectionOrdering();

            if (args.Length == 0)     //Arguments are not assidned. The user is prompted to continue with console entry data.
            {
                OutputResults.OutputMessage(OutputResults.NULL_ENTRY_PARAMETERS);

                if (!Input.AskContinue(OutputResults.ASK_CONTINUE_WITH_CONSOLE))  //User does not want to continue with console entry data
                {
                    OutputResults.OutputMessage(OutputResults.FINISH);
                    Input.Wait();

                    return;
                }

                Parser parser = new Parser();        //User want to continue with console entering

                bool ifContinue = true;

                while (ifContinue)
                {
                    ifContinue = parser.Process();
                }

                Input.Wait();

                return;
            }
            //Arguments are assigned.
            if (args.Length < Application.ARGS_TO_ACCEPT)
            {
                OutputResults.OutputMessage(Application.ERR_TOO_FEW_ARGS);
                OutputResults.OutputMessage(Application.RESTART);
                Input.Wait();

                return;
            }

            string[] argsResult;

            Parser app = new Parser();

            if (!app.GetNecessaryArgs(args, out argsResult))
            {
                OutputResults.OutputMessage(Application.ERR_TOO_FEW_ARGS);
                OutputResults.OutputMessage(Application.RESTART);
                Input.Wait();

                return;
            }

            app.Process(argsResult);
            OutputResults.OutputMessage(OutputResults.CAN_RESTART);
            OutputResults.OutputMessage(OutputResults.FINISH);
            Input.Wait();
            return;
        }
Example #5
0
 public void PrintToFile_Scenario_FileNotFound()
 {
     //Arrange
     List<KeyValuePair<string, int>> sortedIPList = new List<KeyValuePair<string, int>>();
     List<KeyValuePair<string, int>> sortedURLList = new List<KeyValuePair<string, int>>();
     string outputFolder = new string("");
     string fullPath = new string("");
     setVar(ref sortedIPList, ref sortedURLList, ref outputFolder, ref fullPath);
     //Act
     OutputResults.PrintToFile(sortedIPList, sortedURLList, outputFolder, append: false);
     outputFolder = @"..\..\..\Outiles";
     fullPath = outputFolder + @"\Output.txt";
     //Assert
     Assert.ThrowsException<DirectoryNotFoundException>(() => { OutputResults.PrintToFile(sortedIPList, sortedURLList, outputFolder, numberOfResults: 10, append: false); });
     
 }
Example #6
0
        static int Main(string[] args)
        {
            logEnabled = true;
            try
            {
                logEnabled = args.Length == 0 || Settings.Read("OutputLevel", "1") != "0";
            }
            catch { }

            Version v  = Assembly.GetEntryAssembly().GetName().Version;
            Version vl = Assembly.GetEntryAssembly().GetName().Version;

            logLine(string.Format("{0} v{1}.{2}, NKit.dll v{3}.{4} :: Nanook", Settings.ExeName, v.Major.ToString(), v.Minor.ToString(), vl.Major.ToString(), vl.Minor.ToString()));
            logLine("");

            try
            {
                if (args.Length == 0)
                {
                    logLine(string.Format(@"Recover Wii and GameCube image files back to the original state as ISO

Usage: {0} <files|paths|masks> ...

Parameters can be 1 or more filename and paths with or without masks.
Masks can search subfolders. Edit NKit.dll.config

Supported files:  iso, wbfs, gcm, iso.dec, zip, rar, 7z

If paths or filenames have spaces ensure they are enclosed in ""s

Examples
  {0} c:\temp\image.wbfs
  {0} c:\temp\scrubbed.iso
  {0} c:\temp
  {0} *.*
  {0} c:\temp\image.wbfs \temp\*.zip x*.iso.dec
  {0} ""c:\path 1\*.zip"" ""c:\path 2\*.gcm"" ""..\path 3\*.iso""

Edit 'NKit.dll.config' to specify all the required values
", Settings.ExeName));
                    return(2);
                }

                bool recurse = Settings.Read("SearchSubfolders", "true") == "true";

                logLine("Processing command line and scanning files...");
                SourceFile[] files = SourceFiles.Scan(args, recurse);
                logLine(string.Format("Found {0} file{1}", files.Length.ToString(), files.Length == 1 ? "" : "s"));
                logLine("");


                foreach (SourceFile src in files)
                {
                    Converter nkitConvert = new Converter(src, true);

                    try
                    {
                        nkitConvert.LogMessage  += dx_LogMessage;
                        nkitConvert.LogProgress += dx_LogProgress;

                        OutputResults results = nkitConvert.RecoverToIso(); //apps can use the results
                    }
                    catch (Exception ex)
                    {
                        outputExceptionDetails(ex);
                    }
                    finally
                    {
                        nkitConvert.LogMessage  -= dx_LogMessage;
                        nkitConvert.LogProgress -= dx_LogProgress;
                    }
                }
                if (files.Length == 0)
                {
                    logLine("No files found");
                }
            }
            catch (Exception ex)
            {
                outputExceptionDetails(ex);
            }

            if (logEnabled && Settings.Read("WaitForKeyAfterProcessing", "true") == "true")
            {
                logLine("");
                logLine("Press enter / return to exit . . .");
                Console.ReadLine();
            }

            Environment.ExitCode = 2;
            return(2);
        }
Example #7
0
        public void IntegrationTest_Scenario_AdditionalExampleFile()
        {
            string file         = "";
            string outputFile   = "";
            string regexPattern = "";

            string[] args = { "-f", @"..\..\..\TestFiles\ISLogFile.log", "-o", @"..\..\..\OutputFiles" };
            try
            {
                // Only run if the -h --help flags are not passed as arguments
                if (CommandLineArgumentParser.ParseCommandLineArguments(args, out outputFile, out regexPattern, out file))
                {
                    // Assert that Command Line arguments are parsed as expected
                    Assert.AreEqual(@"..\..\..\OutputFiles", outputFile);
                    Assert.AreEqual(@"(^(?:[0-9]{1,3}\.){3}[0-9]{1,3})(?:.+)(?:""{1}(?:GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE){1}\s{1}(.+)\s{1}(?:HTTP/1.1|HTTP/1.0|HTTP/2|HTTP/3){1}""{1})(?:.+$)", regexPattern);
                    Assert.AreEqual(@"..\..\..\TestFiles\ISLogFile.log", file);
                    ProcessedLogs pLogs = new ProcessedLogs();
                    // Process the log files
                    ProcessLogFile logger = new ProcessLogFile(file, regexPattern, pLogs);
                    logger.ReadFromFileAndStore();
                    // Assert - pLogs was populated as expected
                    Assert.AreEqual(10000, logger.successful);
                    Assert.AreEqual(0, logger.failed);
                    Assert.AreEqual(1753, pLogs.GetIpAddresses().Count);
                    Assert.AreEqual(1498, pLogs.GetUrls().Count);

                    // Sort the processed logs
                    SortProcessedLogs sort = new SortProcessedLogs(pLogs);
                    sort.BeginSort(thenBy: true);
                    Assert.IsTrue(sort.sortedIPList.ToArray()[0].Key == "66.249.73.135" && sort.sortedIPList.ToArray()[0].Value == 482);
                    Assert.IsTrue(sort.sortedIPList.ToArray()[1].Key == "46.105.14.53" && sort.sortedIPList.ToArray()[1].Value == 364);
                    Assert.IsTrue(sort.sortedIPList.ToArray()[2].Key == "130.237.218.86" && sort.sortedIPList.ToArray()[2].Value == 357);
                    Assert.IsTrue(sort.sortedUrlList.ToArray()[0].Key == "/favicon.ico" && sort.sortedUrlList.ToArray()[0].Value == 807);
                    Assert.IsTrue(sort.sortedUrlList.ToArray()[1].Key == "/style2.css" && sort.sortedUrlList.ToArray()[1].Value == 546);
                    Assert.IsTrue(sort.sortedUrlList.ToArray()[2].Key == "/reset.css" && sort.sortedUrlList.ToArray()[2].Value == 538);

                    string fileName = "AdditionalExampleOutputFile.txt";
                    if (!string.IsNullOrEmpty(outputFile))
                    {
                        OutputResults.PrintToFile(sort.sortedIPList, sort.sortedUrlList, outputFile, fileName: fileName, append: false);
                    }

                    string fullPath = outputFile + @"\" + fileName;
                    Assert.IsTrue(File.Exists(fullPath));
                    using (var sr = new StreamReader(fullPath))
                    {
                        string output = sr.ReadToEnd();
                        Assert.IsTrue(output.Contains(string.Format("Number of unique IP Addresses:{0}", 1753)));
                        Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "66.249.73.135", "482")));
                        Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "46.105.14.53", "364")));
                        Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "130.237.218.86", "357")));
                        Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "/favicon.ico", "807")));
                        Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "/style2.css", "546")));
                        Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "/reset.css", "538")));
                    }
                }
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }
Example #8
0
        public void IntegrationTest_Scenario_ProvidedExampleFile()
        {
            string file         = "";
            string outputFile   = "";
            string regexPattern = "";

            string[] args = { "-f", @"..\..\..\TestFiles\ProvidedExample.log", "-o", @"..\..\..\OutputFiles" };
            try
            {
                // Only run if the -h --help flags are not passed as arguments
                if (CommandLineArgumentParser.ParseCommandLineArguments(args, out outputFile, out regexPattern, out file))
                {
                    // Assert that Command Line arguments are parsed as expected
                    Assert.AreEqual(@"..\..\..\OutputFiles", outputFile);
                    Assert.AreEqual(@"(^(?:[0-9]{1,3}\.){3}[0-9]{1,3})(?:.+)(?:""{1}(?:GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE){1}\s{1}(.+)\s{1}(?:HTTP/1.1|HTTP/1.0|HTTP/2|HTTP/3){1}""{1})(?:.+$)", regexPattern);
                    Assert.AreEqual(@"..\..\..\TestFiles\ProvidedExample.log", file);
                    ProcessedLogs pLogs = new ProcessedLogs();
                    // Process the log files
                    ProcessLogFile logger = new ProcessLogFile(file, regexPattern, pLogs);
                    logger.ReadFromFileAndStore();
                    // Assert - pLogs was populated as expected
                    Assert.AreEqual(23, logger.successful);
                    Assert.AreEqual(0, logger.failed);
                    Assert.AreEqual(11, pLogs.GetIpAddresses().Count);
                    Assert.AreEqual(22, pLogs.GetUrls().Count);

                    // Sort the processed logs
                    SortProcessedLogs sort = new SortProcessedLogs(pLogs);
                    sort.BeginSort(thenBy: true);
                    Assert.IsTrue(sort.sortedIPList.ToArray()[0].Key == "168.41.191.40" && sort.sortedIPList.ToArray()[0].Value == 4);
                    Assert.IsTrue(sort.sortedIPList.ToArray()[1].Key == "72.44.32.10" && sort.sortedIPList.ToArray()[1].Value == 3);
                    Assert.IsTrue(sort.sortedIPList.ToArray()[2].Key == "50.112.00.11" && sort.sortedIPList.ToArray()[2].Value == 3);
                    Assert.IsTrue(sort.sortedUrlList.ToArray()[0].Key == "/docs/manage-websites/" && sort.sortedUrlList.ToArray()[0].Value == 2);
                    Assert.IsTrue(sort.sortedUrlList.ToArray()[1].Key == "http://example.net/faq/" && sort.sortedUrlList.ToArray()[1].Value == 1);
                    Assert.IsTrue(sort.sortedUrlList.ToArray()[2].Key == "http://example.net/blog/category/meta/" && sort.sortedUrlList.ToArray()[2].Value == 1);

                    string fileName = "ProvidedExampleOutputFile.txt";
                    if (!string.IsNullOrEmpty(outputFile))
                    {
                        OutputResults.PrintToFile(sort.sortedIPList, sort.sortedUrlList, outputFile, fileName: fileName, append: false);
                    }

                    string fullPath = outputFile + @"\" + fileName;
                    Assert.IsTrue(File.Exists(fullPath));
                    using (var sr = new StreamReader(fullPath))
                    {
                        string output = sr.ReadToEnd();
                        Assert.IsTrue(output.Contains(string.Format("Number of unique IP Addresses:{0}", 11)));
                        Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "168.41.191.40", "4")));
                        Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "72.44.32.10", "3")));
                        Assert.IsTrue(output.Contains(string.Format("Most Active IP Addresses:{0} - HITS:{1}", "50.112.00.11", "3")));
                        Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "/docs/manage-websites/", "2")));
                        Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "http://example.net/faq/", "1")));
                        Assert.IsTrue(output.Contains(string.Format("Most visited URLS:{0} - Occurences:{1}", "http://example.net/blog/category/meta/", "1")));
                    }
                }
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }
Example #9
0
		public void CreateGui () 
		{
			win = new Gtk.Window (ApplicationName);
			win.DeleteEvent += new Gtk.DeleteEventHandler (OnWindow_Delete);
			win.BorderWidth = 4;
			win.SetDefaultSize (600, 500);
			
			VBox vbox = new VBox (false, 4);
			win.Add (vbox);
			
			// Menu Bar
			MenuBar mb = CreateMenuBar ();
			vbox.PackStart (mb, false, false, 0);

			// Tool Bar
			toolbar = CreateToolbar ();
			toolbar.ShowAll();
			vbox.PackStart (toolbar, false, false, 0);
			
			// Panels

			tree = new DataTree (); // meta data tree view (left pane)
			tree.View.ButtonReleaseEvent += new Gtk.ButtonReleaseEventHandler (OnDataTreeButtonRelease);
			tree.View.RowExpanded  += new Gtk.RowExpandedHandler (OnDataTreeRowExpanded);

			// SQL Editor amd Results (right pane)
			outputResults = OutputResults.DataGrid;
			sourceFileNotebook = new Notebook();
			sourceFileNotebook.Scrollable = true;
			NewEditorTab();
			sourceFileNotebook.SwitchPage += new Gtk.SwitchPageHandler(OnEditorTabSwitched);

			HPaned hpaned = new HPaned ();
			vbox.PackStart (hpaned, true, true, 0);
			hpaned.Add1 (tree);
			hpaned.Add2 (sourceFileNotebook);

			statusBar = new Statusbar ();
			statusBar.HasResizeGrip = false;
			SetStatusBarText ("Ready!");
			vbox.PackEnd (statusBar, false, false, 0);

			queryMode = QueryMode.Query;
		}
Example #10
0
		void OnToolbar_ToggleResultsOutput (System.Object obj, EventArgs ea) 
		{
			if (outputResults == OutputResults.TextView) 
				outputResults = OutputResults.DataGrid;
			else if (outputResults == OutputResults.DataGrid) 
				outputResults = OutputResults.TextView;
		}
        public void ProcessMemory()
        {
            while (InstructionPointer < Memory.Length)
            {
                var optCode = (OptCode)(Memory[InstructionPointer] % 100);

                switch (optCode)
                {
                case OptCode.Add:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) + GetParameter(2);
                    MoveToNextPointer();
                    break;

                case OptCode.Multiply:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) * GetParameter(2);
                    MoveToNextPointer();
                    break;

                case OptCode.Input:
                    Memory[Memory[InstructionPointer + 1]] = ProgramId;
                    MoveToNextPointer(2);
                    break;

                case OptCode.Output:
                    OutputResults.Add(GetParameter(1));
                    MoveToNextPointer(2);
                    break;

                case OptCode.JumpIfTrue:
                    if (GetParameter(1) != 0)
                    {
                        InstructionPointer = GetParameter(2);
                    }
                    else
                    {
                        MoveToNextPointer(3);
                    }
                    break;

                case OptCode.JumpIfFalse:
                    if (GetParameter(1) == 0)
                    {
                        InstructionPointer = GetParameter(2);
                    }
                    else
                    {
                        MoveToNextPointer(3);
                    }
                    break;

                case OptCode.LessThan:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) < GetParameter(2) ? 1 : 0;
                    MoveToNextPointer();
                    break;

                case OptCode.Equals:
                    Memory[Memory[InstructionPointer + 3]] = GetParameter(1) == GetParameter(2) ? 1 : 0;
                    MoveToNextPointer();
                    break;

                case OptCode.Halt:
                    Console.WriteLine($"OptCode 99 at position {InstructionPointer}. Halting...");
                    Processed = true;
                    return;

                default:
                    Console.WriteLine($"Invalid Opt Code at position {InstructionPointer} of {optCode}");
                    Processed = true;
                    return;
                }
            }
        }
Example #12
0
		void ToggleResultsOutput () 
		{
			if (outputResults == OutputResults.TextView) {
				outputResults = OutputResults.DataGrid;
			}
			else if (outputResults == OutputResults.DataGrid) {
				outputResults = OutputResults.TextView;
			}
		}
Example #13
0
		public void CreateGui() 
		{
			win = new Gtk.Window (ApplicationName);
			win.DeleteEvent += new GtkSharp.DeleteEventHandler(OnWindow_Delete);
			win.BorderWidth = 4;
			win.DefaultSize = new Size (450, 300);
			
			VBox vbox = new VBox (false, 4);
			win.Add (vbox);
			
			// Menu Bar
			MenuBar mb = CreateMenuBar ();
			vbox.PackStart(mb, false, false, 0);

			// Tool Bar
			toolbar = CreateToolbar ();
			vbox.PackStart (toolbar, false, false, 0);
			
			// Panels
			VPaned paned = new VPaned ();
			vbox.PackStart (paned, true, true, 0);

			// SQL Editor (top TextView panel)
			sourceFileNotebook = new Notebook();
			sourceFileNotebook.Scrollable = true;
			NewEditorTab();
			paned.Add1 (sourceFileNotebook);
			sourceFileNotebook.SwitchPage += new 
				GtkSharp.SwitchPageHandler(OnEditorTabSwitched);

			// bottom panel
			resultsNotebook = CreateOutputResultsGui ();
			paned.Add2 (resultsNotebook);

			statusBar = new Statusbar ();
			vbox.PackEnd (statusBar, false, false, 0);
			
			outputResults = OutputResults.TextView;
			ToggleResultsOutput ();
		}