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(); }
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(); }
/// <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); }
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); }