private void generateButton_Click(object sender, System.EventArgs e)
        {
            DirectoryInfo outputDir = new DirectoryInfo(outputPathTextBox.Text);
            if (outputDir.Exists == false)
            {
                MessageBox.Show(this,"Output Path is invalid","Code Generator");
                return;
            }

            // POSIX, Windows, PocketPC Code Generation
            LibraryGenerator libgen = new LibraryGenerator();
            genOutputTextBox.Clear();

            switch (platformComboBox.SelectedIndex)
            {
                case 0:
                    libgen.Platform = LibraryGenerator.PLATFORMS.POSIX;
                    libgen.SubTarget = LibraryGenerator.SUBTARGETS.NONE;
                    break;
                case 1:
                    libgen.Platform = LibraryGenerator.PLATFORMS.WINDOWS;
                    libgen.SubTarget = LibraryGenerator.SUBTARGETS.NONE;
                    libgen.WinSock = 1;
                    break;
                case 2:
                    libgen.Platform = LibraryGenerator.PLATFORMS.WINDOWS;
                    libgen.SubTarget = LibraryGenerator.SUBTARGETS.NONE;
                    libgen.WinSock = 2;
                    break;
                case 3:
                    libgen.Platform = LibraryGenerator.PLATFORMS.WINDOWS;
                    libgen.SubTarget = LibraryGenerator.SUBTARGETS.PPC2003;
                    libgen.WinSock = 1;
                    break;
            }

            switch (languageComboBox.SelectedIndex)
            {
                case 0:
                    libgen.Language = LibraryGenerator.LANGUAGES.C;
                    break;
                case 1:
                    libgen.Language = LibraryGenerator.LANGUAGES.CPP;
                    break;
            }

            switch (newLineComboBox.SelectedIndex)
            {
                case 0:
                    libgen.CodeNewLine = "\r\n";
                    break;
                case 1:
                    libgen.CodeNewLine = "\n";
                    break;
            }

            switch (callConventionComboBox.SelectedIndex)
            {
                case 0:
                    libgen.CallingConvention = ""; break;
                case 1:
                    libgen.CallingConvention = "_stdcall "; break;
                case 2:
                    libgen.CallingConvention = "_fastcall "; break;
            }

            switch (indentComboBox.SelectedIndex)
            {
                case 0:
                    libgen.CodeTab = "\t"; break;
                case 1:
                    libgen.CodeTab = " "; break;
                case 2:
                    libgen.CodeTab = "  "; break;
                case 3:
                    libgen.CodeTab = "   "; break;
                case 4:
                    libgen.CodeTab = "    "; break;
                case 5:
                    libgen.CodeTab = "     "; break;
                case 6:
                    libgen.CodeTab = "      "; break;
            }

            libgen.CallPrefix = libPrefixTextBox.Text;
            libgen.CallLibPrefix = libPrefixTextBox.Text;
            libgen.VersionString = "Intel DeviceBuilder Build#" + Application.ProductVersion;
            libgen.ClassName = classNameTextBox.Text;

            // Setup License
            string license = licenseTextBox.Text;
            license = license.Replace("<AUTHOR>","Intel Corporation, Intel Device Builder");
            license = license.Replace("<REVISION>","#" + Application.ProductVersion);
            license = license.Replace("<DATE>",DateTime.Now.ToLongDateString());
            libgen.License = license;

            string lib;

            if(modulesCheckedListBox.GetItemCheckState(3)==CheckState.Checked)
            {
                SourceCodeRepository.Generate_AsyncSocket(libPrefixTextBox.Text,outputDir);
            }
            if(modulesCheckedListBox.GetItemCheckState(4)==CheckState.Checked)
            {
                SourceCodeRepository.Generate_AsyncServerSocket(libPrefixTextBox.Text,outputDir);
            }
            if(modulesCheckedListBox.GetItemCheckState(5)==CheckState.Checked)
            {
                SourceCodeRepository.Generate_WebClient(libPrefixTextBox.Text,outputDir,false);
            }
            if(modulesCheckedListBox.GetItemCheckState(6)==CheckState.Checked)
            {
                SourceCodeRepository.Generate_WebServer(libPrefixTextBox.Text,outputDir,false);
            }

            libgen.OnLogOutput += new LibraryGenerator.LogOutputHandler(Log);
            try
            {
                if (modulesCheckedListBox.GetItemCheckState(0) == CheckState.Checked)
                {
                    SourceCodeRepository.Generate_Parsers(libPrefixTextBox.Text,outputDir);
                }
                if (modulesCheckedListBox.GetItemCheckState(1) == CheckState.Checked) libgen.Build_UPnPHTTPClient(outputDir);
                if (modulesCheckedListBox.GetItemCheckState(2) == CheckState.Checked)
                {
                    SourceCodeRepository.Generate_SSDPClient(libPrefixTextBox.Text,outputDir,true);
                }
            }
            catch
            {
                MessageBox.Show(this,"Error Generating Code","Code Generator");
            }

            libgen.OnLogOutput -= new LibraryGenerator.LogOutputHandler(Log);
        }
        public void generateButton_Click(object sender, System.EventArgs e)
        {
            DirectoryInfo outputDir = new DirectoryInfo(outputPathTextBox.Text);
            if (outputDir.Exists == false)
            {
                MessageBox.Show(this,"Output Path is invalid","Code Generator");
                return;
            }

            string buttonText = generateButton.Text;
            generateButton.Text = "Generating Stack...";
            generateButton.Enabled = false;

            if(UPnP1dot1Enabled.Checked==true)
            {
                device.ArchitectureVersion = "1.1";
            }
            else
            {
                device.ArchitectureVersion = "1.0";
            }

            if(platformComboBox.SelectedIndex==4)
            {
                // .net
                CPDotNetGenerator gen = new CPDotNetGenerator(classNameTextBox.Text);
                genOutputTextBox.Clear();

                gen.VersionString = "Intel StackBuilder Build#" + Application.ProductVersion;
                gen.StartupPath = Application.StartupPath;
                gen.OnLogOutput += new CPDotNetGenerator.LogOutputHandler(Log);
                try
                {
                    gen.Generate(device,outputDir,serviceNames);
                }
                catch
                {
                    MessageBox.Show(this,"Error Generating Code","Code Generator");
                }
                gen.OnLogOutput -= new CPDotNetGenerator.LogOutputHandler(Log);
            }
            else
            {
                CPEmbeddedCGenerator gen = new CPEmbeddedCGenerator();
                LibraryGenerator libgen = new LibraryGenerator();

                genOutputTextBox.Clear();

                gen.EnableDefaultIPAddressMonitor = IPAddressMonitor.Checked;

                switch (platformComboBox.SelectedIndex)
                {
                    case 0:
                        gen.Platform = CPEmbeddedCGenerator.PLATFORMS.POSIX;
                        gen.SubTarget = CPEmbeddedCGenerator.SUBTARGETS.NONE;
                        libgen.Platform = LibraryGenerator.PLATFORMS.POSIX;
                        libgen.SubTarget = LibraryGenerator.SUBTARGETS.NONE;
                        break;
                    case 1:
                        gen.Platform = CPEmbeddedCGenerator.PLATFORMS.WINDOWS;
                        gen.SubTarget = CPEmbeddedCGenerator.SUBTARGETS.NONE;
                        gen.WinSock = 1;
                        libgen.Platform = LibraryGenerator.PLATFORMS.WINDOWS;
                        libgen.SubTarget = LibraryGenerator.SUBTARGETS.NONE;
                        libgen.WinSock = 1;
                        break;
                    case 2:
                        gen.Platform = CPEmbeddedCGenerator.PLATFORMS.WINDOWS;
                        gen.SubTarget = CPEmbeddedCGenerator.SUBTARGETS.NONE;
                        gen.WinSock = 2;
                        libgen.Platform = LibraryGenerator.PLATFORMS.WINDOWS;
                        libgen.SubTarget = LibraryGenerator.SUBTARGETS.NONE;
                        libgen.WinSock = 2;
                        break;
                    case 3:
                        gen.Platform = CPEmbeddedCGenerator.PLATFORMS.WINDOWS;
                        gen.SubTarget = CPEmbeddedCGenerator.SUBTARGETS.PPC2003;
                        gen.WinSock = 1;
                        libgen.Platform = LibraryGenerator.PLATFORMS.WINDOWS;
                        libgen.SubTarget = LibraryGenerator.SUBTARGETS.PPC2003;
                        libgen.WinSock = 1;
                        break;
                    case 4:
                        gen.Platform = CPEmbeddedCGenerator.PLATFORMS.POSIX;
                        gen.SubTarget = CPEmbeddedCGenerator.SUBTARGETS.NUCLEUS;
                        gen.WinSock = 1;
                        libgen.Platform = LibraryGenerator.PLATFORMS.POSIX;
                        libgen.SubTarget = LibraryGenerator.SUBTARGETS.NUCLEUS;
                        libgen.WinSock = 1;
                        break;
                }

                switch (languageComboBox.SelectedIndex)
                {
                    case 0:
                        gen.Language = CPEmbeddedCGenerator.LANGUAGES.C;
                        libgen.Language = LibraryGenerator.LANGUAGES.C;
                        break;
                    case 1:
                        gen.Language = CPEmbeddedCGenerator.LANGUAGES.CPP;
                        libgen.Language = LibraryGenerator.LANGUAGES.CPP;
                        break;
                }

                switch (newLineComboBox.SelectedIndex)
                {
                    case 0:
                        gen.CodeNewLine = "\r\n"; break;
                    case 1:
                        gen.CodeNewLine = "\n"; break;
                }

                switch (callConventionComboBox.SelectedIndex)
                {
                    case 0:
                        gen.CallingConvention = ""; break;
                    case 1:
                        gen.CallingConvention = "_stdcall "; break;
                    case 2:
                        gen.CallingConvention = "_fastcall "; break;
                }

                switch (indentComboBox.SelectedIndex)
                {
                    case 0:
                        gen.CodeTab = "\t"; break;
                    case 1:
                        gen.CodeTab = " "; break;
                    case 2:
                        gen.CodeTab = "  "; break;
                    case 3:
                        gen.CodeTab = "   "; break;
                    case 4:
                        gen.CodeTab = "    "; break;
                    case 5:
                        gen.CodeTab = "     "; break;
                    case 6:
                        gen.CodeTab = "      "; break;
                }

                gen.CallPrefix = prefixTextBox.Text;
                gen.CallLibPrefix = libPrefixTextBox.Text;
                gen.Settings = Settings;
                gen.FragResponseActions = FragResponseActions;
                gen.EscapeActions = EscapeActions;
                gen.VersionString = "Intel DeviceBuilder Build#" + Application.ProductVersion;
                gen.ClassName = classNameTextBox.Text;
                gen.UseVersion = Application.ProductVersion.Substring(0,Application.ProductVersion.LastIndexOf("."));
                gen.BasicHTTP = !(HTTP.Checked);

                libgen.CodeNewLine = gen.CodeNewLine;
                libgen.CallingConvention = gen.CallingConvention;
                libgen.CodeTab = gen.CodeTab;
                libgen.CodeNewLine = gen.CodeNewLine;
                libgen.CallPrefix = libPrefixTextBox.Text;
                libgen.VersionString = gen.VersionString;
                libgen.ClassName = gen.ClassName;

                foreach(System.Data.DataRow r in dataSet1.Tables[0].Rows)
                {
                    gen.CustomTagList.Add(new object[2]{(string)r.ItemArray[0],(string)r.ItemArray[1]});
                }

                // Setup License
                string license = licenseTextBox.Text;
                license = license.Replace("<AUTHOR>","Intel Corporation, Intel Device Builder");
                license = license.Replace("<REVISION>","#" + Application.ProductVersion);
                license = license.Replace("<DATE>",DateTime.Now.ToLongDateString());
                gen.License = license;
                libgen.License = license;

                gen.OnLogOutput += new CPEmbeddedCGenerator.LogOutputHandler(Log);
                libgen.OnLogOutput += new LibraryGenerator.LogOutputHandler(Log);

                try
                {
                    SourceCodeRepository.Generate_UPnPControlPointStructs(libPrefixTextBox.Text,outputDir);
                    SourceCodeRepository.Generate_Parsers(this.libPrefixTextBox.Text,outputDir);
                    SourceCodeRepository.Generate_SSDPClient(this.libPrefixTextBox.Text,outputDir,UPnP1dot1Enabled.Checked);

                    SourceCodeRepository.Generate_AsyncSocket(this.libPrefixTextBox.Text,outputDir);
                    SourceCodeRepository.Generate_AsyncServerSocket(this.libPrefixTextBox.Text,outputDir);
                    SourceCodeRepository.Generate_WebClient(this.libPrefixTextBox.Text,outputDir,!HTTP.Checked);
                    SourceCodeRepository.Generate_WebServer(this.libPrefixTextBox.Text,outputDir,!HTTP.Checked);

                    gen.Generate(device,outputDir,serviceNames,!(bool)gen.Settings["SupressSample"]);
                }
                catch(Exception ddd)
                {
                    MessageBox.Show(this,"Error Generating Code","Code Generator");
                }

                libgen.OnLogOutput -= new LibraryGenerator.LogOutputHandler(Log);
                gen.OnLogOutput -= new CPEmbeddedCGenerator.LogOutputHandler(Log);
            }

            generateButton.Enabled = true;
            generateButton.Text = buttonText;
        }