Ejemplo n.º 1
0
 private void Parse()
 {
     _r.Seek(0);
     if (_r.PeekFor(() => _r.ReadWZStringBlock(true)) == "Property")
     {
         _encrypted = true;
     }
     else if (_r.PeekFor(() => _r.ReadWZStringBlock(false)) == "Property")
     {
         _encrypted = false;
     }
     else
     {
         WZUtil.Die("Failed to determine image encryption!");
     }
     _r.SkipWZStringBlock();
     if (_r.ReadUInt16() != 0)
     {
         WZUtil.Die("WZImage with invalid header (no zero UInt16!)");
     }
     foreach (WZObject child in WZExtendedParser.ParsePropertyList(_r, this, this, _encrypted))
     {
         Add(child);
     }
     _parsed = true;
 }
Ejemplo n.º 2
0
        private void Parse(WZBinaryReader wzbr, long offset)
        {
            wzbr.Seek(offset);
            int entryCount = wzbr.ReadWZInt();

            for (int i = 0; i < entryCount; ++i)
            {
                byte   type = wzbr.ReadByte();
                string name = null;
                switch (type)
                {
                case 2:
                    int x = wzbr.ReadInt32();
                    wzbr.PeekFor(() => {
                        wzbr.Seek(x + File._fstart);
                        type = wzbr.ReadByte();
                        name = wzbr.ReadWZString(File._encrypted);
                    });

                    break;

                case 3:
                case 4:
                    name = wzbr.ReadWZString(File._encrypted);
                    break;

                case 1:
                // wzbr.Skip(10);
                // continue;
                default:
                    WZUtil.Die($"Unknown object type {type} in WzDirectory.");
                    break;
                }
                if (name == null)
                {
                    WZUtil.Die("Failed to read WZDirectory entry name.");
                }
                int size = wzbr.ReadWZInt();
                wzbr.ReadWZInt();
                uint woffset = wzbr.ReadWZOffset(File._fstart);
                switch (type)
                {
                case 3:
                    Add(new WZDirectory(name, this, File, wzbr.Clone(), woffset));
                    break;

                case 4:
                    Add(new WZImage(name, this, File,
                                    File.GetSubstream(woffset, size)));
                    break;
                }
            }
        }
Ejemplo n.º 3
0
        private void Parse(WZBinaryReader wzbr, long offset)
        {
            wzbr.Seek(offset);
            int entryCount = wzbr.ReadWZInt();
            for (int i = 0; i < entryCount; ++i) {
                byte type = wzbr.ReadByte();
                string name = null;
                switch (type) {
                    case 2:
                        int x = wzbr.ReadInt32();
                        wzbr.PeekFor(() => {
                            wzbr.Seek(x + File._fstart);
                            type = wzbr.ReadByte();
                            name = wzbr.ReadWZString(File._encrypted);
                        });

                        break;
                    case 3:
                    case 4:
                        name = wzbr.ReadWZString(File._encrypted);
                        break;
                    case 1:
                    // wzbr.Skip(10);
                    // continue;
                    default:
                        WZUtil.Die($"Unknown object type {type} in WzDirectory.");
                        break;
                }
                if (name == null) {
                    WZUtil.Die("Failed to read WZDirectory entry name.");
                }
                int size = wzbr.ReadWZInt();
                wzbr.ReadWZInt();
                uint woffset = wzbr.ReadWZOffset(File._fstart);
                switch (type) {
                    case 3:
                        Add(new WZDirectory(name, this, File, wzbr.Clone(), woffset));
                        break;
                    case 4:
                        Add(new WZImage(name, this, File,
                            File.GetSubstream(woffset, size)));
                        break;
                }
            }
        }