public FlairPattern(BinaryPattern patternBytes, byte alen, ushort asum, short moduleLength, List <Tuple <int, string> > publicNames, List <Tuple <int, string, int> > referenceNames, BinaryPattern tailBytes) { this.patternBytes = patternBytes; this.alen = alen; this.asum = asum; this.moduleLength = moduleLength; this.publicNames = publicNames; this.references = referenceNames; this.tailBytes = tailBytes; }
public static FlairPattern Parse(string pattern) { var parts = pattern.Split(' '); try { var patternBytesHex = parts[0].Replace("|", ""); //if (patternBytesHex.Length != 64) // throw new FormatException(); var patternBytes = BinaryPattern.Parse(patternBytesHex); var alen = byte.Parse(parts[1], NumberStyles.HexNumber); var asum = ushort.Parse(parts[2], NumberStyles.HexNumber); if (BitConverter.IsLittleEndian) { var asumBytes = BitConverter.GetBytes(asum); Array.Reverse(asumBytes); asum = BitConverter.ToUInt16(asumBytes, 0); } var moduleLength = short.Parse(parts[3], NumberStyles.HexNumber); var publicNames = new List <Tuple <int, string> >(); var references = new List <Tuple <int, string, int> >(); int i = 4; for (; i < parts.Length; i += 2) { string name = parts[i]; if (name[0] != ':') { break; } if (name.Length != 5) { throw new FormatException(); } int offset = ushort.Parse(name.Substring(1, 4), NumberStyles.HexNumber); string publicName = parts[i + 1]; publicNames.Add(new Tuple <int, string>(offset, publicName)); } for (; i < parts.Length; i += 2) { string name = parts[i].Split(':')[0]; int len = name.Length != parts[i].Length ? int.Parse(parts[i].Split(':')[1]) : 4; if (name[0] != '^') { break; } if (name.Length != 5) { throw new FormatException(); } int offset = ushort.Parse(name.Substring(1, 4), NumberStyles.HexNumber); string referenceName = parts[i + 1]; references.Add(new Tuple <int, string, int>(offset, referenceName, len)); } var tailBytes = i < parts.Length ? BinaryPattern.Parse(parts[i]) : null; return(new FlairPattern(patternBytes, alen, asum, moduleLength, publicNames, references, tailBytes)); } catch (Exception exception) { throw new FormatException(null, exception); } }