public void GenerateSourceFiles(ControllerModel c, string sourcefilepath) { if (Directory.Exists(sourcefilepath)) { var elementLists = TLCCCElementCollector.CollectAllCCOLElements(c); TLCCCElementCollector.AddAllMaxElements(elementLists); _outputs = elementLists[0]; _inputs = elementLists[1]; _timers = elementLists[2]; _switches = elementLists[3]; _parameters = elementLists[4]; File.WriteAllText(Path.Combine(sourcefilepath, $"{c.Data.Naam}sys.h"), GenerateSysH(c)); File.WriteAllText(Path.Combine(sourcefilepath, $"{c.Data.Naam}tab.c"), GenerateTabC(c)); File.WriteAllText(Path.Combine(sourcefilepath, $"{c.Data.Naam}dpl.c"), GenerateDplC(c)); File.WriteAllText(Path.Combine(sourcefilepath, $"{c.Data.Naam}reg.c"), GenerateRegC(c)); } }
/// <summary> /// Generates all "sys.h" lines for a given instance of CCOLElemListData. /// The function loops all elements in the Elements member. /// </summary> /// <param name="data">The instance of CCOLElemListData to use for generation</param> /// <param name="numberdefine">Optional: this string will be used as follows: /// - if it is null, lines are generated like this: #define ElemName # /// - if it is not null, it goes like this: #define ElemName (numberdefine + #)</param> /// <returns></returns> private string GetAllElementsSysHLines(TLCCCElemListData data, string numberdefine = null) { var sb = new StringBuilder(); var pad1 = data.DefineMaxWidth + $"#define ".Length; var pad2 = data.Elements.Count.ToString().Length; var index = 0; foreach (var elem in data.Elements) { if (elem.Dummy || Regex.IsMatch(elem.Define, @"[A-Z]+MAX")) { continue; } sb.Append($"#define {elem.Define} ".PadRight(pad1)); if (string.IsNullOrWhiteSpace(numberdefine)) { sb.AppendLine($"{index}".PadLeft(pad2)); } else { sb.Append($"({numberdefine} + "); sb.Append($"{index}".PadLeft(pad2)); sb.AppendLine(")"); } ++index; } var indexautom = index; if (data.Elements.Count > 0 && data.Elements.Any(x => x.Dummy)) { sb.AppendLine("#if (!defined AUTOMAAT && !defined AUTOMAAT_TEST)"); foreach (var elem in data.Elements) { if (!elem.Dummy || Regex.IsMatch(elem.Define, @"[A-Z]+MAX")) { continue; } sb.Append($"#define {elem.Define} ".PadRight(pad1)); if (string.IsNullOrWhiteSpace(numberdefine)) { sb.AppendLine($"{indexautom}".PadLeft(pad2)); } else { sb.Append($"({numberdefine} + "); sb.Append($"{indexautom}".PadLeft(pad2)); sb.AppendLine(")"); } ++indexautom; } sb.Append($"#define {data.Elements.Last().Define} ".PadRight(pad1)); if (string.IsNullOrWhiteSpace(numberdefine)) { sb.AppendLine($"{indexautom}".PadLeft(pad2)); } else { sb.Append($"({numberdefine} + "); sb.Append($"{indexautom}".PadLeft(pad2)); sb.AppendLine(")"); } sb.AppendLine("#else"); sb.Append($"#define {data.Elements.Last().Define} ".PadRight(pad1)); if (string.IsNullOrWhiteSpace(numberdefine)) { sb.AppendLine($"{index}".PadLeft(pad2)); } else { sb.Append($"({numberdefine} + "); sb.Append($"{index}".PadLeft(pad2)); sb.AppendLine(")"); } sb.AppendLine("#endif"); } else if (data.Elements.Count > 0) { sb.Append($"#define {data.Elements.Last().Define} ".PadRight(pad1)); if (string.IsNullOrWhiteSpace(numberdefine)) { sb.AppendLine($"{index}".PadLeft(pad2)); } else { sb.Append($"({numberdefine} + "); sb.Append($"{index}".PadLeft(pad2)); sb.AppendLine(")"); } } return(sb.ToString()); }