public PM1ElementRMD(BinaryReader reader, PM1ElementRMDHead headers) { foreach (var a in headers.List) { reader.BaseStream.Position = a.Position; List.Add(reader.ReadBytes(a.Size)); } }
public PM1(Stream stream, bool IsLittleEndian) { BinaryReader reader; if (IsLittleEndian) { reader = new BinaryReader(stream); } else { reader = new BinaryReaderBE(stream); } Header = new PM1Header(reader); Table = new PM1Table(reader.ReadInt32ArrayArray(Header.TableLineCount, 4)); foreach (var element in Table.Table) { if (element.Count * element.Size > 0) { switch (element.Index) { case ((int)TypeMap.FileList): List.Add(new PM1ElementFileNames(reader, element)); break; case ((int)TypeMap.BMD): List.Add(new PM1ElementBMD(reader, element)); break; case ((int)TypeMap.RMDHead): var rmdhead = new PM1ElementRMDHead(reader, element); List.Add(rmdhead); List.Add(new PM1ElementRMD(reader, rmdhead)); break; case ((int)TypeMap.EPLHead): List.Add(new PM1ElementEPLHead(reader, element)); break; case ((int)TypeMap.RMD): break; case ((int)TypeMap.EPL): List.Add(new PM1ElementEPL(reader, element, List.Find(x => x.Type == TypeMap.EPLHead) as PM1ElementEPLHead)); break; default: List.Add(new PM1Element(reader, element)); break; } } } }
private void Update() { foreach (var element in List) { switch (element.Type) { case (TypeMap.RMDHead): PM1ElementRMDHead rmdhead = element as PM1ElementRMDHead; PM1ElementRMD rmd = List.Find(x => x.Type == TypeMap.RMD) as PM1ElementRMD; for (int i = 0; i < rmdhead.List.Count; i++) { int ret = 0; List.ForEach(x => { if (x.Type < TypeMap.RMD) { ret += x.Size; } }); rmdhead.List[i].Position = rmd.Position(i) + Header.Size + Table.Size + ret; rmdhead.List[i].Size = (int)rmd.List[i].Length; } break; case (TypeMap.EPLHead): PM1ElementEPLHead eplhead = element as PM1ElementEPLHead; PM1ElementEPL epl = List.Find(x => x.Type == TypeMap.EPL) as PM1ElementEPL; for (int i = 0; i < eplhead.List.Count; i++) { int ret = 0; List.ForEach(x => { if (x.Type < TypeMap.EPL) { ret += x.Size; } }); eplhead.List[i].Position = epl.Position(i) + Header.Size + Table.Size + ret; } break; default: break; } } }