public PM1ElementRMD(BinaryReader reader, PM1ElementRMDHead headers)
 {
     foreach (var a in headers.List)
     {
         reader.BaseStream.Position = a.Position;
         List.Add(reader.ReadBytes(a.Size));
     }
 }
Exemplo n.º 2
0
        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;
                    }
                }
            }
        }
Exemplo n.º 3
0
        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;
                }
            }
        }