예제 #1
0
        internal override void Generate()
        {
            WriteAutoGeneratedSourceHeader();
            Write("from .TpmStructure import *");
            Write("from .TpmEnum import *");
            Write("");

            // First generate enums
            foreach (var e in TpmTypes.Get <TpmEnum>())
            {
                GenEnum(e);
            }
            foreach (var b in TpmTypes.Get <TpmBitfield>())
            {
                GenBitfield(b);
            }

            Write("from .Crypt import *" + "\r\n");

            // Then generate unions and structures
            GenUnions();
            foreach (var s in TpmTypes.Get <TpmStruct>())
            {
                GenStruct(s);
            }

            File.WriteAllText(RootDir + "TpmTypes.py", GeneratedCode.ToString());
            GeneratedCode.Clear();

            // Now generate the TPM methods
            GenCommands();
            File.WriteAllText(RootDir + "Tpm.py", GeneratedCode.ToString());
            GeneratedCode.Clear();
        }
예제 #2
0
        internal override void Generate()
        {
            WriteAutoGeneratedSourceHeader();
            Write("import { TpmMarshaller, TpmBuffer } from \"./TpmMarshaller.js\";\r\n" +
                  "import { TpmStructure, ReqStructure, RespStructure, SessEncInfo } from \"./TpmStructure.js\";\r\n" +
                  "\r\n" +
                  "import { Crypto } from \"./Crypt.js\";\r\n" +
                  "\r\n");

            // First generate enums
            foreach (var e in TpmTypes.Get <TpmEnum>())
            {
                GenEnum(e);
            }
            foreach (var b in TpmTypes.Get <TpmBitfield>())
            {
                GenBitfield(b);
            }
            // Then generate unions and structures
            GenUnions();
            foreach (var s in TpmTypes.Get <TpmStruct>())
            {
                GenStruct(s);
            }

            File.WriteAllText(RootDir + "TpmTypes.ts", GeneratedCode.ToString());
            GeneratedCode.Clear();

            // Now generate the TPM methods
            GenCommands();

            File.WriteAllText(RootDir + "Tpm.ts", GeneratedCode.ToString());
            GeneratedCode.Clear();
        }
예제 #3
0
        /// <summary> Writes GeneratedCode to the destination using appropriate template </summary>
        /// <remarks> Replaces everything between  //>>> and //<<< in template file </remarks>
        /// <param name="fileName"> Destination file </param>
        /// <param name="toRemove"> Lines containing toRemove entries are deleted </param>
        /// <param name="tpmCommands"> Selects the appropriate template </param>
        void WriteDef(string fileName, string[] toRemove, bool tpmCommands)
        {
            string        template = tpmCommands ? tpmObjectTemplate : typesTemplate;
            StringBuilder b        = new StringBuilder();
            string        terminatorLine;

            using (StringReader sr = new StringReader(template))
            {
                while (true)
                {
                    string line = sr.ReadLine();
                    if (line == null)
                    {
                        break;
                    }
                    if (toRemove != null && toRemove.Any(frag => line.Contains(frag)))
                    {
                        continue;
                    }
                    b.AppendLine(line);
                    if (line.Contains("//>>>"))
                    {
                        // skip everything until the terminator
                        while (true)
                        {
                            var l = sr.ReadLine();
                            if (l == null)
                            {
                                throw new Exception("Terminator not found");
                            }
                            if (l.Contains("//<<<"))
                            {
                                terminatorLine = l;
                                break;
                            }
                        }
                        // and insert the defs
                        b.AppendLine(GeneratedCode.ToString());
                        GeneratedCode.Clear();
                        b.AppendLine(terminatorLine);
                    }
                }
            }

            string temp = b.ToString();

            b.Clear();
            temp      = temp.Replace(ExtraImportsTag, needsUtil ? "import java.util.*;" : "");
            needsUtil = false;
            File.WriteAllText(fileName, temp);
        }
예제 #4
0
파일: CGenDotNet.cs 프로젝트: rgl/TSS.MSR
        internal override void Generate()
        {
            // Order of the next two calls is important!
            TweakSymDefStructFieldNames(true);

            Write("using System;");
            Write("using System.Runtime.Serialization;");
            Write("using System.Diagnostics.CodeAnalysis;");
            Write("");
            Write("namespace Tpm2Lib");
            TabIn("{");

            foreach (var e in TpmTypes.Get <TpmEnum>())
            {
                GenEnum(e);
            }
            foreach (var bf in TpmTypes.Get <TpmBitfield>())
            {
                GenBitfield(bf);
            }
            GenUnions();
            foreach (var s in TpmTypes.Get <TpmStruct>())
            {
                GenStructure(s);
            }

            GenCommands();
            GenHandleTable();

            TabOut("}");

            File.WriteAllText(FileName, GeneratedCode.ToString(), Encoding.ASCII);

            // Write custom dictionary (for FxCop)
            StreamWriter dict = new StreamWriter("CustomDictionary.xml");

            dict.WriteLine("<Dictionary>\n<Words>\n<Recognized>");
            foreach (TpmType tp in TpmTypes.TheTypes)
            {
                dict.WriteLine($"<Word>\"{tp.Name}\"</Word>");
            }
            foreach (var s in TpmTypes.Get <TpmStruct>())
            {
                foreach (var f in s.Fields)
                {
                    dict.WriteLine($"<Word>{f.Name}</Word>");
                }
            }
            foreach (var c in TpmTypes.Constants)
            {
                dict.WriteLine($"<Word>{c.Name}</Word>");
            }
            dict.WriteLine("</Recognized>\n</Words>\n");

            dict.WriteLine("<Acronyms>\n<CasingExceptions>\n");
            foreach (var s in TpmTypes.Get <TpmStruct>())
            {
                foreach (var f in s.Fields.Where(f => char.IsLower(f.Name[0])))
                {
                    dict.WriteLine($"<Acronym>{f.Name}</Acronym>");
                }
            }
            foreach (var c in TpmTypes.Constants)
            {
                string constName = c.Name;
                if (char.IsUpper(constName[0]))
                {
                    continue;
                }
                dict.WriteLine($"<Acronym>{constName}</Acronym>");
            }
            foreach (string bf in autoGenBitfieldNames)
            {
                if (char.IsUpper(bf[0]))
                {
                    continue;
                }
                dict.WriteLine($"<Acronym>{bf}</Acronym>");
            }

            // extra acronyms
            var ea = new string[] { "TPM", "Nv", "Hr", "Pt", "Ht", "Cc", "Se", "Rc", "Eo", "Pt", "St", "Rh", "Ex", "Cp",
                                    "Eh", "Sh", "Ph", "Id", "nv", "Eo", "Gt", "Ge", "Lt", "Le", "Cp", "id", "KDFa" };

            foreach (string a in ea)
            {
                dict.WriteLine($"<Acronym>{a}</Acronym>");
            }
            dict.WriteLine("</CasingExceptions>\n</Acronyms>\n");
            dict.WriteLine("</Dictionary>");
            dict.Flush();
            dict.Close();

            // Undo DotNet specific tweaks
            TweakSymDefStructFieldNames(false);
        }