summaryrefslogtreecommitdiff
path: root/contrib/apps/LwipMibCompiler/CCodeGeneration
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/apps/LwipMibCompiler/CCodeGeneration')
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/CCodeGeneration.csproj67
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs54
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs119
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs56
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/CodeContainerBase.cs139
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs41
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs75
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs64
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs129
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/FunctionDeclaration.cs114
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs137
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs67
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs76
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs71
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs59
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs49
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/Properties/AssemblyInfo.cs36
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs146
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/VariableDeclaration.cs82
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/VariablePrototype.cs73
-rw-r--r--contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs130
21 files changed, 1784 insertions, 0 deletions
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/CCodeGeneration.csproj b/contrib/apps/LwipMibCompiler/CCodeGeneration/CCodeGeneration.csproj
new file mode 100644
index 00000000000..06d5075e4b3
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/CCodeGeneration.csproj
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>CCodeGeneration</RootNamespace>
+ <AssemblyName>CCodeGeneration</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="CFile.cs" />
+ <Compile Include="Code.cs" />
+ <Compile Include="CodeContainerBase.cs" />
+ <Compile Include="CodeElement.cs" />
+ <Compile Include="Comment.cs" />
+ <Compile Include="EmptyLine.cs" />
+ <Compile Include="Function.cs" />
+ <Compile Include="CGenerator.cs" />
+ <Compile Include="IfThenElse.cs" />
+ <Compile Include="PlainText.cs" />
+ <Compile Include="Switch.cs" />
+ <Compile Include="PP_If.cs" />
+ <Compile Include="PP_Ifdef.cs" />
+ <Compile Include="PP_Include.cs" />
+ <Compile Include="FunctionDeclaration.cs" />
+ <Compile Include="PP_Macro.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="VariableDeclaration.cs" />
+ <Compile Include="VariablePrototype.cs" />
+ <Compile Include="VariableType.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs
new file mode 100644
index 00000000000..6f12274250e
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+
+namespace CCodeGeneration
+{
+ public class CFile: CodeContainerBase
+ {
+ public CFile()
+ {
+ base.IncreaseLevel = false;
+ }
+
+ public void Save(CGenerator generator)
+ {
+ if (generator == null)
+ {
+ throw new ArgumentNullException("generator");
+ }
+
+ this.GenerateCode(0, generator);
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs
new file mode 100644
index 00000000000..4e8dfbc7aa2
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+using System.IO;
+
+namespace CCodeGeneration
+{
+ public class CGenerator
+ {
+ public TextWriter OutputStream { get; private set; }
+ public string File { get; private set; }
+ public uint IndentCount { get; private set; }
+ public string IndentChar { get; private set; }
+ public string NewLine { get; private set; }
+
+ public CGenerator(System.IO.TextWriter outputStream, string file, uint indentCount, string indentChar, string newLine)
+ {
+ this.OutputStream = outputStream;
+ this.File = file;
+ this.IndentCount = indentCount;
+ this.IndentChar = indentChar;
+ this.NewLine = newLine;
+ }
+
+ public string FileName
+ {
+ get
+ {
+ if (!String.IsNullOrWhiteSpace(this.File))
+ {
+ return Path.GetFileName(this.File);
+ }
+
+ return null;
+ }
+ }
+
+ public void WriteSequence(string value, uint repetitions)
+ {
+ while (repetitions > 0)
+ {
+ this.OutputStream.Write(value);
+ repetitions--;
+ }
+ }
+
+ public void IndentLine(int level)
+ {
+ while (level > 0)
+ {
+ WriteSequence(this.IndentChar, this.IndentCount);
+ level--;
+ }
+ }
+
+ public void WriteNewLine()
+ {
+ this.OutputStream.Write(this.NewLine);
+ }
+
+ public void WriteMultilineString(string value, int level = 0)
+ {
+ if (String.IsNullOrEmpty(value))
+ {
+ return;
+ }
+
+ // only \n and \r\n are recognized as linebreaks
+ string[] lines = value.Split(new char[] { '\n' }, StringSplitOptions.None);
+
+ for (int l = 0; l < (lines.Length - 1); l++)
+ {
+ if (lines[l].EndsWith("\r"))
+ {
+ this.OutputStream.Write(lines[l].Substring(0, lines[l].Length-1));
+ }
+ else
+ {
+ this.OutputStream.Write(lines[l]);
+ }
+
+ this.WriteNewLine();
+ this.IndentLine(level);
+ }
+
+ this.OutputStream.Write(lines[lines.Length - 1]);
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs
new file mode 100644
index 00000000000..4834508ae51
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+namespace CCodeGeneration
+{
+ public class Code: CodeElement
+ {
+ public string Code_ { get; set; }
+
+ public Code()
+ {
+ }
+
+ public Code(string code)
+ {
+ this.Code_ = code;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ generator.IndentLine(level);
+ generator.WriteMultilineString(this.Code_, level);
+ generator.WriteNewLine();
+ }
+
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeContainerBase.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeContainerBase.cs
new file mode 100644
index 00000000000..4327d92dcaf
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeContainerBase.cs
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System.Collections.Generic;
+using System;
+
+namespace CCodeGeneration
+{
+ public class CodeContainerBase: CodeElement
+ {
+ private readonly List<CodeElement> declarations = new List<CodeElement>();
+ private readonly List<CodeElement> innerElements = new List<CodeElement>();
+ private bool increaseLevel = true;
+
+ public List<CodeElement> Declarations
+ {
+ get { return this.declarations; }
+ }
+
+ public List<CodeElement> InnerElements
+ {
+ get { return this.innerElements; }
+ }
+
+ protected bool IncreaseLevel
+ {
+ get { return this.increaseLevel; }
+ set { this.increaseLevel = value; }
+ }
+
+ public void AddElements(IList<CodeElement> elements, params CodeElement[] spacerElements)
+ {
+ if (elements != null)
+ {
+ if ((spacerElements == null) || (spacerElements.Length == 0))
+ {
+ this.innerElements.AddRange(elements);
+ }
+ else
+ {
+ bool spacerAdded = false;
+
+ foreach (CodeElement element in elements)
+ {
+ this.innerElements.Add(element);
+ this.innerElements.AddRange(spacerElements);
+ spacerAdded = true;
+ }
+
+ if (spacerAdded)
+ {
+ // remove last spacer again
+ this.innerElements.RemoveRange(this.innerElements.Count - spacerElements.Length, spacerElements.Length);
+ }
+ }
+ }
+ }
+
+ public CodeElement AddElement(CodeElement element)
+ {
+ if (element != null)
+ {
+ this.innerElements.Add(element);
+ }
+
+ return element;
+ }
+
+ public Code AddCode(string code)
+ {
+ return this.AddElement(new Code(code)) as Code;
+ }
+
+ public Code AddCodeFormat(string codeFormat, params object[] args)
+ {
+ return this.AddElement(new Code(String.Format(codeFormat, args))) as Code;
+ }
+
+ public CodeElement AddDeclaration(CodeElement declaration)
+ {
+ if (declaration != null)
+ {
+ this.declarations.Add(declaration);
+ }
+
+ return declaration;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (this.increaseLevel)
+ level++;
+
+ if (this.declarations.Count > 0)
+ {
+ foreach (CodeElement element in this.declarations)
+ {
+ element.GenerateCode(level, generator);
+ }
+
+ EmptyLine.SingleLine.GenerateCode(level, generator);
+ }
+
+ foreach (CodeElement element in this.innerElements)
+ {
+ element.GenerateCode(level, generator);
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs
new file mode 100644
index 00000000000..51cf2d248e5
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+namespace CCodeGeneration
+{
+ public class CodeElement
+ {
+ public virtual void GenerateCode(int level, CGenerator generator)
+ {
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs
new file mode 100644
index 00000000000..51779beabbe
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+namespace CCodeGeneration
+{
+ public class Comment: CodeElement
+ {
+ public const string CommentStart = "/*";
+ public const string CommentEnd = "*/";
+
+ public string Comment_ { get; set; }
+ public bool SingleLine { get; set; }
+
+ public Comment()
+ {
+ }
+
+ public Comment(string comment, bool singleLine = false)
+ {
+ this.Comment_ = comment;
+ this.SingleLine = singleLine;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ generator.IndentLine(level);
+ generator.OutputStream.Write(CommentStart);
+
+ if (!this.SingleLine)
+ {
+ generator.WriteNewLine();
+ generator.IndentLine(level);
+ generator.WriteMultilineString(this.Comment_, level);
+ generator.WriteNewLine();
+ generator.IndentLine(level);
+ }
+ else
+ {
+ generator.OutputStream.Write(" " + Comment_ + " ");
+ }
+
+ generator.OutputStream.Write(CommentEnd);
+ generator.WriteNewLine();
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs
new file mode 100644
index 00000000000..604c9477c37
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+namespace CCodeGeneration
+{
+ public class EmptyLine : CodeElement
+ {
+ public static readonly EmptyLine SingleLine = new EmptyLine();
+ public static readonly EmptyLine TwoLines = new EmptyLine(2);
+ public static readonly EmptyLine ThreeLines = new EmptyLine(3);
+
+ public uint Count { get; set; }
+
+ public EmptyLine()
+ {
+ this.Count = 1;
+ }
+
+ public EmptyLine(uint count)
+ {
+ this.Count = count;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ uint c = this.Count;
+
+ while (c > 0)
+ {
+ generator.WriteNewLine();
+ c--;
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs
new file mode 100644
index 00000000000..d81f6e56132
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace CCodeGeneration
+{
+ public class Function: CodeContainerBase
+ {
+ public string Name { get; set; }
+ public bool IsStatic { get; set; }
+
+ private readonly List<VariableType> parameter = new List<VariableType>();
+ private VariableType returnType = VariableType.Void;
+
+ public Function()
+ {
+ }
+
+ public Function(string name, bool isStatic = false)
+ {
+ this.Name = name;
+ this.IsStatic = isStatic;
+ }
+
+ public List<VariableType> Parameter
+ {
+ get { return this.parameter; }
+ }
+
+ public VariableType ReturnType
+ {
+ get { return this.returnType; }
+ set
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException("ReturnValue");
+ }
+ this.returnType = value;
+ }
+ }
+
+ public static Function FromDeclaration(FunctionDeclaration decl)
+ {
+ Function result = new Function(decl.Name, decl.IsStatic);
+ result.ReturnType = decl.ReturnType.Clone() as VariableType;
+
+ foreach (VariableType param in decl.Parameter)
+ {
+ result.parameter.Add(param.Clone() as VariableType);
+ }
+
+ return result;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ generator.IndentLine(level);
+
+ if (this.IsStatic)
+ {
+ generator.OutputStream.Write("static ");
+ }
+
+ this.returnType.GenerateCode(generator);
+ generator.OutputStream.Write(" " + this.Name + "(");
+
+ if (this.Parameter.Count > 0)
+ {
+ for (int i = 0; i < this.parameter.Count; i++)
+ {
+ this.parameter[i].GenerateCode(generator);
+
+ if (i < (this.parameter.Count - 1))
+ {
+ generator.OutputStream.Write(", ");
+ }
+ }
+ }
+ else
+ {
+ generator.OutputStream.Write("void");
+ }
+
+ generator.OutputStream.Write(")");
+ generator.WriteNewLine();
+ generator.IndentLine(level);
+ generator.OutputStream.Write("{");
+ generator.WriteNewLine();
+
+ base.GenerateCode(level, generator);
+
+ generator.IndentLine(level);
+ generator.OutputStream.Write("}");
+ generator.WriteNewLine();
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/FunctionDeclaration.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/FunctionDeclaration.cs
new file mode 100644
index 00000000000..3bc42888ab1
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/FunctionDeclaration.cs
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace CCodeGeneration
+{
+ public class FunctionDeclaration: CodeElement
+ {
+ public string Name { get; set; }
+ public bool IsStatic { get; set; }
+ public bool IsExtern { get; set; }
+
+ private readonly List<VariableType> parameter = new List<VariableType>();
+ private VariableType returnType = VariableType.Void;
+
+ public FunctionDeclaration()
+ {
+ }
+
+ public FunctionDeclaration(string name, bool isStatic = false, bool isExtern = false)
+ {
+ this.Name = name;
+ this.IsStatic = isStatic;
+ this.IsExtern = isExtern;
+ }
+
+ public List<VariableType> Parameter
+ {
+ get { return this.parameter; }
+ }
+
+ public VariableType ReturnType
+ {
+ get { return this.returnType; }
+ set
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException("ReturnValue");
+ }
+ this.returnType = value;
+ }
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ generator.IndentLine(level);
+
+ if (this.IsExtern)
+ {
+ generator.OutputStream.Write("extern ");
+ }
+
+ if (this.IsStatic)
+ {
+ generator.OutputStream.Write("static ");
+ }
+
+ this.returnType.GenerateCode(generator);
+ generator.OutputStream.Write(" " + this.Name + "(");
+
+ if (this.Parameter.Count > 0)
+ {
+ for (int i = 0; i < this.parameter.Count; i++)
+ {
+ this.parameter[i].GenerateCode(generator);
+
+ if (i < (this.parameter.Count - 1))
+ {
+ generator.OutputStream.Write(", ");
+ }
+ }
+ }
+ else
+ {
+ generator.OutputStream.Write("void");
+ }
+
+ generator.OutputStream.Write(");");
+ generator.WriteNewLine();
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs
new file mode 100644
index 00000000000..c4710225c3b
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace CCodeGeneration
+{
+ public class ElseIf : CodeContainerBase
+ {
+ public string Condition { get; set; }
+
+ public ElseIf()
+ {
+ }
+
+ public ElseIf(string condition)
+ {
+ this.Condition = condition;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.Condition))
+ {
+ generator.IndentLine(level);
+ generator.OutputStream.Write(String.Format("else if ({0})", this.Condition));
+ generator.WriteNewLine();
+ generator.IndentLine(level);
+ generator.OutputStream.Write("{");
+ generator.WriteNewLine();
+
+ base.GenerateCode(level, generator);
+
+ generator.IndentLine(level);
+ generator.OutputStream.Write("}");
+ generator.WriteNewLine();
+ }
+ }
+ }
+
+ public class IfThenElse: CodeContainerBase
+ {
+ public string Condition { get; set; }
+
+ private List<ElseIf> elseIf = new List<ElseIf>();
+ private CodeContainerBase else_ = new CodeContainerBase();
+
+ public IfThenElse()
+ {
+ }
+
+ public IfThenElse(string condition)
+ {
+ this.Condition = condition;
+ }
+
+ public List<ElseIf> ElseIf
+ {
+ get { return this.elseIf; }
+ }
+
+ public CodeContainerBase Else
+ {
+ get { return this.else_; }
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.Condition))
+ {
+ generator.IndentLine(level);
+ generator.OutputStream.Write(String.Format("if ({0})", this.Condition));
+ generator.WriteNewLine();
+ generator.IndentLine(level);
+ generator.OutputStream.Write("{");
+ generator.WriteNewLine();
+
+ base.GenerateCode(level, generator);
+
+ generator.IndentLine(level);
+ generator.OutputStream.Write("}");
+ generator.WriteNewLine();
+
+ foreach (ElseIf elif in this.elseIf)
+ {
+ elif.GenerateCode(level, generator);
+ }
+
+ if (this.else_.InnerElements.Count > 0)
+ {
+ generator.IndentLine(level);
+ generator.OutputStream.Write("else");
+ generator.WriteNewLine();
+ generator.IndentLine(level);
+ generator.OutputStream.Write("{");
+ generator.WriteNewLine();
+
+ this.else_.GenerateCode(level, generator);
+
+ generator.IndentLine(level);
+ generator.OutputStream.Write("}");
+ generator.WriteNewLine();
+ }
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs
new file mode 100644
index 00000000000..5568215543b
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+
+namespace CCodeGeneration
+{
+ public class PP_If: CodeContainerBase
+ {
+ public string Condition { get; set; }
+
+ public PP_If()
+ {
+ base.IncreaseLevel = false;
+ }
+
+ public PP_If(string condition)
+ : this()
+ {
+ this.Condition = condition;
+ }
+
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.Condition))
+ {
+ generator.OutputStream.Write("#if " + this.Condition);
+ generator.WriteNewLine();
+
+ base.GenerateCode(level, generator);
+
+ generator.OutputStream.Write("#endif /* " + this.Condition + " */");
+ generator.WriteNewLine();
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs
new file mode 100644
index 00000000000..fd4f45af1c6
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+
+namespace CCodeGeneration
+{
+ public class PP_Ifdef: CodeContainerBase
+ {
+ public string Macro { get; set; }
+ public bool Inverted { get; set; }
+
+ public PP_Ifdef()
+ {
+ base.IncreaseLevel = false;
+ }
+
+ public PP_Ifdef(string macro, bool inverted = false)
+ : this()
+ {
+ this.Macro = macro;
+ this.Inverted = inverted;
+ }
+
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.Macro))
+ {
+ if (this.Inverted)
+ {
+ generator.OutputStream.Write("#ifndef " + this.Macro);
+ }
+ else
+ {
+ generator.OutputStream.Write("#ifdef " + this.Macro);
+ }
+ generator.WriteNewLine();
+
+ base.GenerateCode(level, generator);
+
+ generator.OutputStream.Write("#endif /* " + this.Macro + " */");
+ generator.WriteNewLine();
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs
new file mode 100644
index 00000000000..0393d271375
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+
+namespace CCodeGeneration
+{
+ public class PP_Include : CodeElement
+ {
+ public string File { get; set; }
+ public bool IsLocal { get; set; }
+
+ public PP_Include()
+ {
+ this.IsLocal = true;
+ }
+
+ public PP_Include(string file, bool isLocal = true)
+ {
+ this.File = file;
+ this.IsLocal = isLocal;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.File))
+ {
+ // includes are never indented
+ if (this.IsLocal)
+ {
+ generator.OutputStream.Write("#include \"" + this.File + "\"");
+ }
+ else
+ {
+ generator.OutputStream.Write("#include <" + this.File + ">");
+ }
+
+ generator.WriteNewLine();
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs
new file mode 100644
index 00000000000..6f302aa9c10
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+namespace CCodeGeneration
+{
+ public class PP_Macro: CodeElement
+ {
+ public string Name { get; set; }
+ public string Value { get; set; }
+
+ public PP_Macro()
+ {
+ }
+
+ public PP_Macro(string name, string value)
+ {
+ this.Name = name;
+ this.Value = value;
+ }
+
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ // macros are not indented at all
+ generator.OutputStream.Write("#define " + this.Name + " ");
+ generator.WriteMultilineString(this.Value);
+ generator.WriteNewLine();
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs
new file mode 100644
index 00000000000..d5e076fefdc
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+namespace CCodeGeneration
+{
+ public class PlainText : CodeElement
+ {
+ public string Value { get; set; }
+
+ public PlainText(string value)
+ {
+ this.Value = value;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ generator.WriteMultilineString(this.Value);
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/Properties/AssemblyInfo.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000000..4c716ad3af5
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Allgemeine Informationen über eine Assembly werden über die folgenden
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die mit einer Assembly verknüpft sind.
+[assembly: AssemblyTitle("CCodeGeneration")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CCodeGeneration")]
+[assembly: AssemblyCopyright("Copyright © 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
+// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
+// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
+[assembly: ComVisible(false)]
+
+// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+[assembly: Guid("8f07a0fa-86f4-48a0-97c7-f94fc5c3f103")]
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+// Hauptversion
+// Nebenversion
+// Buildnummer
+// Revision
+//
+// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
+// übernehmen, indem Sie "*" eingeben:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs
new file mode 100644
index 00000000000..9166fb89d6e
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace CCodeGeneration
+{
+ public class SwitchCase : CodeContainerBase
+ {
+ public string Value { get; set; }
+
+ public SwitchCase()
+ {
+ }
+
+ public SwitchCase(string value)
+ {
+ this.Value = value;
+ }
+
+ public bool IsDefault
+ {
+ get { return (this.Value.ToLowerInvariant() == "default"); }
+ }
+
+ public static SwitchCase GenerateDefault()
+ {
+ return new SwitchCase("default");
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.Value))
+ {
+ generator.IndentLine(level);
+ if (this.IsDefault)
+ {
+ generator.OutputStream.Write("default:");
+ }
+ else
+ {
+ generator.OutputStream.Write(String.Format("case {0}:", this.Value));
+ }
+ generator.WriteNewLine();
+ generator.IndentLine(level + 1);
+ generator.OutputStream.Write("{");
+ generator.WriteNewLine();
+
+ base.GenerateCode(level + 1, generator);
+
+ generator.IndentLine(level + 1);
+ generator.OutputStream.Write("}");
+ generator.WriteNewLine();
+
+ generator.IndentLine(level + 1);
+ generator.OutputStream.Write("break;");
+ generator.WriteNewLine();
+ }
+ }
+ }
+
+ public class Switch: CodeElement
+ {
+ public string SwitchVar { get; set; }
+
+ private List<SwitchCase> switches = new List<SwitchCase>();
+
+ public Switch()
+ {
+ }
+
+ public Switch(string switchVar)
+ {
+ this.SwitchVar = switchVar;
+ }
+
+ public List<SwitchCase> Switches
+ {
+ get { return this.switches; }
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.SwitchVar))
+ {
+ generator.IndentLine(level);
+ generator.OutputStream.Write(String.Format("switch ({0})", this.SwitchVar));
+ generator.WriteNewLine();
+ generator.IndentLine(level);
+ generator.OutputStream.Write("{");
+ generator.WriteNewLine();
+
+ SwitchCase defaultCase = null; // generate 'default' always as last case
+ foreach (SwitchCase switchCase in this.switches)
+ {
+ if (switchCase.IsDefault)
+ {
+ defaultCase = switchCase;
+ }
+ else
+ {
+ switchCase.GenerateCode(level + 1, generator);
+ }
+ }
+ if (defaultCase != null)
+ {
+ defaultCase.GenerateCode(level + 1, generator);
+ }
+
+ generator.IndentLine(level);
+ generator.OutputStream.Write("}");
+ generator.WriteNewLine();
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableDeclaration.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableDeclaration.cs
new file mode 100644
index 00000000000..bf2c90266d1
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableDeclaration.cs
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+
+namespace CCodeGeneration
+{
+ public class VariableDeclaration : CodeElement
+ {
+ public VariableType Type { get; set; }
+ public string InitialValue { get; set; }
+ public bool IsStatic { get; set; }
+
+ public VariableDeclaration()
+ : base()
+ {
+ }
+
+ public VariableDeclaration(VariableType type, string initialValue = null, bool isStatic = false) :
+ base()
+ {
+ this.Type = type;
+ this.InitialValue = initialValue;
+ this.IsStatic = isStatic;
+ }
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (this.Type != null)
+ {
+ generator.IndentLine(level);
+
+ if (this.IsStatic)
+ {
+ generator.OutputStream.Write("static ");
+ }
+
+ // declare the variable
+ this.Type.GenerateCode(generator);
+
+ if (!String.IsNullOrWhiteSpace(this.InitialValue))
+ {
+ // add initialization value
+ generator.OutputStream.Write(" = ");
+ generator.WriteMultilineString(this.InitialValue, level);
+ }
+
+ generator.OutputStream.Write(";");
+ generator.WriteNewLine();
+ }
+ }
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/VariablePrototype.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/VariablePrototype.cs
new file mode 100644
index 00000000000..38a41663922
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/VariablePrototype.cs
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+namespace CCodeGeneration
+{
+ public class VariablePrototype : CodeElement
+ {
+ public VariableType Type { get; set; }
+
+ public VariablePrototype()
+ : base()
+ {
+ }
+
+ public VariablePrototype(VariableType type) :
+ base()
+ {
+ Type = type;
+ }
+
+ public static VariablePrototype FromVariableDeclaration(VariableDeclaration declaration)
+ {
+ return new VariablePrototype(declaration.Type);
+ }
+
+
+ public override void GenerateCode(int level, CGenerator generator)
+ {
+ if (this.Type != null)
+ {
+ generator.IndentLine(level);
+
+ generator.OutputStream.Write("extern ");
+
+ // declare the variable
+ this.Type.GenerateCode(generator);
+
+ generator.OutputStream.Write(";");
+ generator.WriteNewLine();
+ }
+ }
+
+ }
+}
diff --git a/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs b/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs
new file mode 100644
index 00000000000..313abbeeef6
--- /dev/null
+++ b/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Martin Hentschel <info@cl-soft.de>
+ *
+ */
+
+using System;
+using System.Text;
+
+namespace CCodeGeneration
+{
+ public enum ConstType
+ {
+ None,
+ Value,
+ Indirection,
+ Both
+ }
+
+ public class VariableType : ICloneable
+ {
+ public const string VoidString = "void";
+ public static readonly VariableType Void = new VariableType(null, "void");
+
+ public string Name { get; set; }
+ public string Type { get; set; }
+ public string Indirection { get; set; }
+ public ConstType Const { get; set; }
+ public string ArraySpecifier { get; set; }
+
+ public VariableType()
+ {
+ }
+
+ public VariableType(string name, string type, string indirection = null, ConstType const_ = ConstType.None, string arraySpecifier = null)
+ {
+ this.Name = name;
+ this.Type = type;
+ this.Indirection = indirection;
+ this.Const = const_;
+ this.ArraySpecifier = arraySpecifier;
+ }
+
+ public void GenerateCode(CGenerator generator)
+ {
+ if (!String.IsNullOrWhiteSpace(this.Type))
+ {
+ generator.OutputStream.Write(this.ToString().Trim());
+ }
+ }
+
+ public override string ToString()
+ {
+ if (!String.IsNullOrWhiteSpace(this.Type))
+ {
+ StringBuilder vt = new StringBuilder();
+
+ if ((this.Const == ConstType.Value) || (this.Const == ConstType.Both))
+ {
+ vt.Append("const ");
+ }
+
+ vt.Append(this.Type);
+ vt.Append(" ");
+
+ if (!String.IsNullOrWhiteSpace(this.Indirection))
+ {
+ vt.Append(this.Indirection);
+ }
+
+ if ((this.Const == ConstType.Indirection) || (this.Const == ConstType.Both))
+ {
+ vt.Append("const ");
+ }
+
+ if (!String.IsNullOrWhiteSpace(this.Name))
+ {
+ vt.Append(this.Name);
+ }
+
+ if (this.ArraySpecifier != null)
+ {
+ vt.Append("[");
+ vt.Append(this.ArraySpecifier);
+ vt.Append("]");
+ }
+
+ return vt.ToString().Trim();
+ }
+
+ return base.ToString();
+ }
+
+ #region ICloneable Member
+
+ public object Clone()
+ {
+ // we only have value types as members -> simply use .net base function
+ return this.MemberwiseClone();
+ }
+
+ #endregion
+ }
+}