public void Save(CGenerator cGenerator)
        {
            CFile cFile = new CFile();

            cFile.AddElement(new Comment("Generated by LwipMibCompiler"));
            cFile.AddElement(EmptyLine.SingleLine);

            string headerDefine = cGenerator.FileName;

            headerDefine = new Regex("[^a-zA-Z0-9]").Replace(headerDefine, "_");
            headerDefine = headerDefine.ToUpperInvariant();

            CodeContainerBase e = cFile.AddElement(new PP_Ifdef(headerDefine, inverted: true)) as CodeContainerBase;

            e.AddElement(new PP_Macro(headerDefine, headerDefine));
            e.AddElement(EmptyLine.SingleLine);

            e.AddElement(new PP_Include(LwipDefs.Incl_SnmpOpts));
            e = e.AddElement(new PP_If(LwipDefs.Opt_SnmpEnabled)) as CodeContainerBase;
            e.AddElement(EmptyLine.SingleLine);

            CodeContainerBase cplusplusopen = e.AddElement(new PP_Ifdef("__cplusplus")) as CodeContainerBase;

            cplusplusopen.AddElement(new Code("extern \"C\" {"));
            e.AddElement(EmptyLine.SingleLine);

            if (this.includes.Count > 0)
            {
                e.AddElements(this.includes);
                e.AddElement(EmptyLine.SingleLine);
            }

            if (this.defines.Count > 0)
            {
                e.AddElements(this.defines);
                e.AddElement(EmptyLine.SingleLine);
            }

            e.AddElements(this.functionDeclarations, EmptyLine.SingleLine);
            e.AddElements(this.variableDeclarations, EmptyLine.SingleLine);

            e.AddElement(EmptyLine.SingleLine);
            CodeContainerBase cplusplusclose = e.AddElement(new PP_Ifdef("__cplusplus")) as CodeContainerBase;

            cplusplusclose.AddElement(new Code("}"));

            e.AddElement(EmptyLine.SingleLine);
            cFile.Save(cGenerator);
        }
Beispiel #2
0
        public void Save(CGenerator cGenerator)
        {
            CFile cFile = new CFile();

            cFile.AddElement(new Comment("Generated by LwipMibCompiler"));
            cFile.AddElement(EmptyLine.SingleLine);

            cFile.AddElement(new PP_Include(LwipDefs.Incl_SnmpOpts));
            CodeContainerBase e = cFile.AddElement(new PP_If(LwipDefs.Opt_SnmpEnabled)) as CodeContainerBase;

            e.AddElement(EmptyLine.SingleLine);

            // include header file
            string file = cGenerator.FileName;

            if (!String.IsNullOrWhiteSpace(file))
            {
                string ext = System.IO.Path.GetExtension(file);

                string headerFile = !String.IsNullOrEmpty(ext) ? file.Substring(0, file.Length - ext.Length) : file;
                headerFile += ".h";

                e.AddElement(new PP_Include(headerFile));
            }

            // include common snmp files
            e.AddElement(new PP_Include("lwip/apps/snmp.h"));
            e.AddElement(new PP_Include("lwip/apps/snmp_core.h"));
            e.AddElement(new PP_Include("lwip/apps/snmp_scalar.h"));
            e.AddElement(new PP_Include("lwip/apps/snmp_table.h"));

            if (this.includes.Count > 0)
            {
                e.AddElement(EmptyLine.SingleLine);
                e.AddElements(this.includes);
            }

            if (this.defines.Count > 0)
            {
                e.AddElement(EmptyLine.SingleLine);
                e.AddElements(this.defines);
            }

            if (this.declarations.Count > 0)
            {
                e.AddElement(EmptyLine.TwoLines);
                e.AddElements(this.declarations);
            }

            if (this.implementation.Count > 0)
            {
                e.AddElement(EmptyLine.TwoLines);
                e.AddElements(this.implementation);
            }

            if (this.preservedCode.Count > 0)
            {
                e.AddElement(EmptyLine.TwoLines);
                e.AddElement(new Comment(PreservedSectionHeader));
                e.AddElement(EmptyLine.SingleLine);
                e.AddElements(this.preservedCode);
            }

            cFile.Save(cGenerator);
        }