public void SetContents(int startAddress, byte[] contents, int startIndex = 0, int?length = null) { if (debugOn) { Debug.Assert(startAddress >= LOW_ADDRESS && startAddress <= HI_ADDRESS); } if (!length.HasValue) { length = contents.Length - startIndex; } BankSetting bank = bankSettings.FirstOrDefault(m => m.LOW <= startAddress && startAddress <= m.HIGH); if (bank == null) { return; } SetContents(bank, startAddress, contents, startIndex, length); var overflow = (startAddress + length.Value) - bank.HIGH - 1; if (overflow > 0) { var spaceInBank = bank.HIGH - startAddress + 1; SetContents(bank.HIGH + 1, contents, startIndex + spaceInBank, overflow); } }
public byte[] GetContents(int startAddress, int length) { byte[] memorySegment; BankSetting bank = bankSettings.FirstOrDefault(m => m.LOW <= startAddress && startAddress <= m.HIGH); if (bank == null) { return new byte[1] { 0 } } ; byte[] segment1 = GetContents(bank, startAddress, length); if (startAddress + length - 1 > bank.HIGH) { memorySegment = new byte[length]; Array.Copy(segment1, 0, memorySegment, 0, segment1.Length); byte[] segment2 = GetContents(bank.HIGH + 1, length - segment1.Length); Array.Copy(segment2, 0, memorySegment, segment1.Length, segment2.Length); } else { memorySegment = segment1; } return(memorySegment); }
private byte[] GetContents(BankSetting bank, int startAddress, int length) { var overhang = startAddress + length - 1 - bank.HIGH; byte[] memSegment; if (overhang > 0) { memSegment = new byte[length - overhang]; } else { memSegment = new byte[length]; } Array.Copy(memory[bank.SelectedPage], startAddress - bank.LOW, memSegment, 0, memSegment.Length); return(memSegment); }
/// <summary> /// Gets the data sheet based on the default format. /// </summary> /// <param name="source">The source.</param> /// <param name="settings">The settings.</param> /// <param name="bankName">Name of the bank.</param> /// <returns></returns> public static List <Data> GetDataSheet(TextSource source, BankSetting settings, string bankName) { var data = source.GetSheet <Data>(settings.FileSetting?.RowIndex ?? 0, settings.FileSetting?.SheetIndex ?? 0); if (data != null) { foreach (var item in data) { item.Sign = item.Value > 0; item.Bank = bankName ?? "Default"; if (string.IsNullOrWhiteSpace(item.Category)) { string key = Factory.Categories.Keys.FirstOrDefault(k => (item.Customer + item.Detail).Contains(k)); item.Category = !string.IsNullOrEmpty(key) ? Factory.Categories[key] : "Autres"; } } } return(data); }
private void SetContents(BankSetting bank, int startAddress, byte[] contents, int startIndex, int?length) { if (bank.SelectedPage <= 31) { return; } if (length.HasValue) { if (bank.HIGH - startAddress + 1 < length) { length -= startAddress + length.Value - bank.HIGH; } } else { length = contents.Length - startIndex; } Array.Copy(contents, startIndex, memory[bank.SelectedPage], startAddress - bank.LOW, length.Value); }
/// <summary> /// Gets the data sheet based on the custom format. /// </summary> /// <param name="source">The source.</param> /// <param name="settings">The settings.</param> /// <param name="bankName">Name of the bank.</param> /// <returns></returns> public static List <Data> GetCustomDataSheet(TextSource source, BankSetting settings, string bankName) { var properties = source.GetProperties(settings.DataSetting.Pattern); List <Data> data = null; Func <Data, string> getKey = item => item.Customer + item.Detail; if (properties == null && settings.DataMapping?.MappingFields?.Count > 0) { properties = PropertyHelper.GetProperties <Data>(settings.DataMapping); } if (properties != null) { data = source.GetSheet <Data>(settings.FileSetting?.RowIndex ?? 0, settings.FileSetting?.SheetIndex ?? 0, properties); if (data != null) { if (settings.DataMapping?.KeyFields?.Count > 0) { var keyProperties = source.InitProperties <Data>(); var usedProperties = new List <PropertyInfo>(); foreach (var prop in settings.DataMapping.KeyFields) { var property = keyProperties.FirstOrDefault(v => v.ColumnIn == prop); if (property != null) { usedProperties.Add(property.PropertyInfo); } } if (usedProperties.Count > 0) { getKey = item => { var rtnVal = string.Empty; foreach (var prop in usedProperties) { rtnVal = string.Concat(rtnVal, (prop.GetValue(item, null) ?? string.Empty)); } return(settings.DataMapping.IsKeyUpper ? rtnVal.ToUpper() : rtnVal); }; } } foreach (var item in data) { item.Sign = item.Value > 0; item.Bank = bankName ?? "Custom"; if (string.IsNullOrWhiteSpace(item.Category)) { string key = Factory.Categories.Keys.FirstOrDefault(k => getKey(item).Contains(k)); item.Category = !string.IsNullOrEmpty(key) ? Factory.Categories[key] : "Autres"; } } } } return(data); }