All pastes #374794 Raw Edit

Stuff

public text v1 · immutable
#374794 ·published 2007-02-27 20:37 UTC
rendered paste body
package rs;

import java.io.*;
import rs.sign.signlink;

// Referenced classes of package rs:
//            Stream

public class Decompressor
{

    public Decompressor(int i, int j, RandomAccessFile randomaccessfile, RandomAccessFile randomaccessfile1, int k)
    {
        aBoolean515 = false;
        anInt516 = 3;
        anInt521 = 65000;
        anInt520 = i;
        if(k < 4 || k > 4)
            anInt516 = 148;
        dataFile = randomaccessfile;
        indexFile = randomaccessfile1;
        anInt521 = j;
    }

    public synchronized byte[] decompress(byte byte0, int i)
    {
        if(byte0 == 6)
            byte0 = 0;
        else
            aBoolean515 = !aBoolean515;
        try
        {
            seekTo(true, i * 6, indexFile);
            int l;
            for(int j = 0; j < 6; j += l)
            {
                l = indexFile.read(buffer, j, 6 - j);
                if(l == -1)
                    return null;
            }

            int i1 = ((buffer[0] & 0xff) << 16) + ((buffer[1] & 0xff) << 8) + (buffer[2] & 0xff);
            int j1 = ((buffer[3] & 0xff) << 16) + ((buffer[4] & 0xff) << 8) + (buffer[5] & 0xff);
            if(i1 < 0 || i1 > anInt521)
                return null;
            if(j1 <= 0 || (long)j1 > dataFile.length() / 520L)
                return null;
            byte abyte0[] = new byte[i1];
            int k1 = 0;
            for(int l1 = 0; k1 < i1; l1++)
            {
                if(j1 == 0)
                    return null;
                seekTo(true, j1 * 520, dataFile);
                int k = 0;
                int i2 = i1 - k1;
                if(i2 > 512)
                    i2 = 512;
                int j2;
                for(; k < i2 + 8; k += j2)
                {
                    j2 = dataFile.read(buffer, k, (i2 + 8) - k);
                    if(j2 == -1)
                        return null;
                }

                int k2 = ((buffer[0] & 0xff) << 8) + (buffer[1] & 0xff);
                int l2 = ((buffer[2] & 0xff) << 8) + (buffer[3] & 0xff);
                int i3 = ((buffer[4] & 0xff) << 16) + ((buffer[5] & 0xff) << 8) + (buffer[6] & 0xff);
                int j3 = buffer[7] & 0xff;
                if(k2 != i || l2 != l1 || j3 != anInt520)
                    return null;
                if(i3 < 0 || (long)i3 > dataFile.length() / 520L)
                    return null;
                for(int k3 = 0; k3 < i2; k3++)
                    abyte0[k1++] = buffer[k3 + 8];

                j1 = i3;
            }

            return abyte0;
        }
        catch(IOException _ex)
        {
            return null;
        }
    }

    public synchronized boolean method293(int i, boolean flag, byte abyte0[], int j)
    {
        if(!flag)
        {
            for(int k = 1; k > 0; k++);
        }
        boolean flag1 = method294(abyte0, anInt514, j, true, i);
        if(!flag1)
            flag1 = method294(abyte0, anInt514, j, false, i);
        return flag1;
    }

    public synchronized boolean method294(byte abyte0[], int i, int j, boolean flag, int k)
    {
        if(i != 0)
            throw new NullPointerException();
        try
        {
            int l;
            if(flag)
            {
                seekTo(true, j * 6, indexFile);
                int k1;
                for(int i1 = 0; i1 < 6; i1 += k1)
                {
                    k1 = indexFile.read(buffer, i1, 6 - i1);
                    if(k1 == -1)
                        return false;
                }

                l = ((buffer[3] & 0xff) << 16) + ((buffer[4] & 0xff) << 8) + (buffer[5] & 0xff);
                if(l <= 0 || (long)l > dataFile.length() / 520L)
                    return false;
            } else
            {
                l = (int)((dataFile.length() + 519L) / 520L);
                if(l == 0)
                    l = 1;
            }
            buffer[0] = (byte)(k >> 16);
            buffer[1] = (byte)(k >> 8);
            buffer[2] = (byte)k;
            buffer[3] = (byte)(l >> 16);
            buffer[4] = (byte)(l >> 8);
            buffer[5] = (byte)l;
            seekTo(true, j * 6, indexFile);
            indexFile.write(buffer, 0, 6);
            int j1 = 0;
            for(int l1 = 0; j1 < k; l1++)
            {
                int i2 = 0;
                if(flag)
                {
                    seekTo(true, l * 520, dataFile);
                    int j2;
                    int l2;
                    for(j2 = 0; j2 < 8; j2 += l2)
                    {
                        l2 = dataFile.read(buffer, j2, 8 - j2);
                        if(l2 == -1)
                            break;
                    }

                    if(j2 == 8)
                    {
                        int i3 = ((buffer[0] & 0xff) << 8) + (buffer[1] & 0xff);
                        int j3 = ((buffer[2] & 0xff) << 8) + (buffer[3] & 0xff);
                        i2 = ((buffer[4] & 0xff) << 16) + ((buffer[5] & 0xff) << 8) + (buffer[6] & 0xff);
                        int k3 = buffer[7] & 0xff;
                        if(i3 != j || j3 != l1 || k3 != anInt520)
                            return false;
                        if(i2 < 0 || (long)i2 > dataFile.length() / 520L)
                            return false;
                    }
                }
                if(i2 == 0)
                {
                    flag = false;
                    i2 = (int)((dataFile.length() + 519L) / 520L);
                    if(i2 == 0)
                        i2++;
                    if(i2 == l)
                        i2++;
                }
                if(k - j1 <= 512)
                    i2 = 0;
                buffer[0] = (byte)(j >> 8);
                buffer[1] = (byte)j;
                buffer[2] = (byte)(l1 >> 8);
                buffer[3] = (byte)l1;
                buffer[4] = (byte)(i2 >> 16);
                buffer[5] = (byte)(i2 >> 8);
                buffer[6] = (byte)i2;
                buffer[7] = (byte)anInt520;
                seekTo(true, l * 520, dataFile);
                dataFile.write(buffer, 0, 8);
                int k2 = k - j1;
                if(k2 > 512)
                    k2 = 512;
                dataFile.write(abyte0, j1, k2);
                j1 += k2;
                l = i2;
            }

            return true;
        }
        catch(IOException _ex)
        {
            return false;
        }
    }

    public synchronized void seekTo(boolean flag, int i, RandomAccessFile randomaccessfile)
        throws IOException
    {
        if(!flag)
            return;
        if(i < 0 || i > 0x3c00000)
        {
            System.out.println("Badseek - pos:" + i + " len:" + randomaccessfile.length());
            i = 0x3c00000;
            try
            {
                Thread.sleep(1000L);
            }
            catch(Exception _ex) { }
        }
        randomaccessfile.seek(i);
    }

    public int anInt514;
    public boolean aBoolean515;
    public int anInt516;
    public static byte buffer[] = new byte[520];
    public RandomAccessFile dataFile;
    public RandomAccessFile indexFile;
    public int anInt520;
    public int anInt521;

}