Exemple #1
0
    public static long Decompress(ClosableMemoryStream instream, long inLength, ref ClosableMemoryStream outstream)
    {
        long num  = 0L;
        byte num2 = (byte)instream.ReadByte();

        byte[] buffer = new byte[3];
        instream.Read(buffer, 0, 3);
        int num3 = IOUtils.ToNDSu24(buffer, 0);

        num += 4L;
        if (num3 == 0)
        {
            buffer = new byte[4];
            instream.Read(buffer, 0, 4);
            num3 = IOUtils.ToNDSs32(buffer, 0);
            num += 4L;
        }
        int num4 = 0x1000;

        byte[] buffer2 = new byte[num4];
        int    index   = 0;
        int    num6    = 0;
        int    num7    = 0;
        int    num8    = 1;

        while (num6 < num3)
        {
            if (num8 == 1)
            {
                num7 = instream.ReadByte();
                num += 1L;
                num8 = 0x80;
            }
            else
            {
                num8 = num8 >> 1;
            }
            if ((num7 & num8) > 0)
            {
                int num12;
                int num13;
                int num9 = instream.ReadByte();
                num += 1L;
                int num10 = num9 >> 4;
                int num11 = -1;
                if (num10 == 0)
                {
                    num12 = instream.ReadByte();
                    num  += 1L;
                    num13 = instream.ReadByte();
                    num  += 1L;
                    num10 = (((num9 & 15) << 4) | (num12 >> 4)) + 0x11;
                    num11 = (((num12 & 15) << 8) | num13) + 1;
                }
                else if (num10 == 1)
                {
                    num12 = instream.ReadByte();
                    num  += 1L;
                    num13 = instream.ReadByte();
                    num  += 1L;
                    int num14 = instream.ReadByte();
                    num  += 1L;
                    num10 = ((((num9 & 15) << 12) | (num12 << 4)) | (num13 >> 4)) + 0x111;
                    num11 = (((num13 & 15) << 8) | num14) + 1;
                }
                else
                {
                    num12 = instream.ReadByte();
                    num  += 1L;
                    num10 = ((num9 & 240) >> 4) + 1;
                    num11 = (((num9 & 15) << 8) | num12) + 1;
                }
                int num15 = (index + num4) - num11;
                for (int i = 0; i < num10; i++)
                {
                    byte num17 = buffer2[num15 % num4];
                    num15++;
                    outstream.WriteByte(num17);
                    buffer2[index] = num17;
                    index          = (index + 1) % num4;
                }
                num6 += num10;
            }
            else
            {
                int num18 = instream.ReadByte();
                num      += 1L;
                outstream = new ClosableMemoryStream();
                outstream.WriteByte((byte)num18);
                num6++;
                buffer2[index] = (byte)num18;
                index          = (index + 1) % num4;
            }
        }
        if (num < inLength)
        {
        }
        return((long)num3);
    }
Exemple #2
0
    public static long Decompress(ClosableMemoryStream instream, long inLength, ref ClosableMemoryStream outstream)
    {
        long num = 0L;

        instream.Seek(0L, SeekOrigin.Begin);
        byte num2 = (byte)instream.ReadByte();

        byte[] buffer = new byte[3];
        instream.Read(buffer, 0, 3);
        int num3 = IOUtils.ToNDSu24(buffer, 0);

        num += 4L;
        if (num3 == 0)
        {
            buffer = new byte[4];
            instream.Read(buffer, 0, 4);
            num3 = IOUtils.ToNDSs32(buffer, 0);
            num += 4L;
        }
        int num4 = 0x1000;

        byte[] buffer2 = new byte[num4];
        int    index   = 0;
        int    num6    = 0;
        int    num7    = 0;
        int    num8    = 1;

        outstream = new ClosableMemoryStream();
        while (num6 < num3)
        {
            if (num8 == 1)
            {
                num7 = instream.ReadByte();
                num += 1L;
                num8 = 0x80;
            }
            else
            {
                num8 = num8 >> 1;
            }
            if ((num7 & num8) > 0)
            {
                if (((num + 1L) >= inLength) && (num < inLength))
                {
                    instream.ReadByte();
                    num += 1L;
                }
                int num9 = instream.ReadByte();
                num += 1L;
                int num10 = instream.ReadByte();
                num += 1L;
                int num11 = num9 >> 4;
                num11 += 3;
                int num12 = ((num9 & 15) << 8) | num10;
                num12++;
                int num13 = (index + num4) - num12;
                for (int i = 0; i < num11; i++)
                {
                    byte num15 = buffer2[num13 % num4];
                    num13++;
                    outstream.WriteByte(num15);
                    buffer2[index] = num15;
                    index          = (index + 1) % num4;
                }
                num6 += num11;
            }
            else
            {
                int num16 = instream.ReadByte();
                num += 1L;
                num6++;
                outstream.WriteByte((byte)num16);
                buffer2[index] = (byte)num16;
                index          = (index + 1) % num4;
            }
        }
        if (num < inLength)
        {
        }
        return((long)num3);
    }