home *** CD-ROM | disk | FTP | other *** search
- package animationlib;
-
- import java.io.DataInputStream;
- import java.io.InputStream;
- import java.net.URL;
-
- class B_ar extends Thread {
- private InputStream in1;
- // $FF: renamed from: in java.io.DataInputStream
- private DataInputStream field_0;
- // $FF: renamed from: wm animationlib.animator
- private animator field_1;
- // $FF: renamed from: lt animationlib.B_loader
- private B_loader field_2;
- private static final int MAXMATCH = 256;
- private static final int UCHAR_MAX = 255;
- private static final int THRESHOLD = 3;
- // $FF: renamed from: NC int
- private static final int field_3 = 510;
- private static final int DICBIT = 13;
- private static final int DICSIZ = 8192;
- private static final int CHAR_BIT = 8;
- private static final int BITBUFSIZ = 16;
- private static final int CODE_BIT = 16;
- private static final int CBIT = 9;
- private int dwOriginalSize;
- private int nRemainderBytes;
- private int blocksize;
- private int bitbuf;
- private int subbitbuf;
- private int bitcount;
- private byte[] buffer;
- private int[] left;
- private int[] right;
- private int nBytes;
- // $FF: renamed from: ii int
- private int field_4;
- // $FF: renamed from: NP int
- private static final int field_5 = 14;
- // $FF: renamed from: NT int
- private static final int field_6 = 19;
- private static final int PBIT = 4;
- private static final int TBIT = 5;
- private static final int NPT = 19;
- byte[] c_len = new byte[510];
- byte[] pt_len = new byte[19];
- int[] c_table = new int[4096];
- int[] pt_table = new int[256];
-
- B_ar(URL var1, String var2, animator var3, B_loader var4) {
- try {
- this.in1 = (new URL(var1, var2)).openStream();
- this.field_0 = new DataInputStream(this.in1);
- } catch (Exception var5) {
- System.out.println("error: could not open file " + var2);
- }
-
- this.field_1 = var3;
- this.field_2 = var4;
- this.field_1.opened_file = true;
- }
-
- public synchronized void run() {
- this.right = new int[6119];
- this.left = new int[6119];
-
- for(int var1 = 0; var1 < 6119; ++var1) {
- this.left[var1] = 0;
- this.right[var1] = 0;
- }
-
- byte[] var2 = new byte[8];
- byte[] var3 = new byte[4];
-
- try {
- this.field_0.read(var2);
- this.field_0.read(var3);
- } catch (Exception var7) {
- System.out.println("couldn't read");
- }
-
- this.dwOriginalSize = this.Build32Bit(var3);
- this.field_2.arbuf = new byte[this.dwOriginalSize];
- this.DecodeStart();
- this.field_2.posinarbuf = 0;
- this.buffer = new byte[8192];
-
- for(int var4 = 0; var4 < 8192; ++var4) {
- this.buffer[var4] = 0;
- }
-
- while(this.dwOriginalSize != 0) {
- int var5 = this.dwOriginalSize > 8192 ? 8192 : this.dwOriginalSize;
- if (this.field_1.dying) {
- break;
- }
-
- this.Decode(var5);
- System.arraycopy(this.buffer, 0, this.field_2.arbuf, this.field_2.posinarbuf, var5);
- B_loader var10000 = this.field_2;
- var10000.posinarbuf += var5;
- this.field_2.BytesRead();
- this.dwOriginalSize -= var5;
- }
-
- try {
- this.field_0.close();
- } catch (Exception var6) {
- System.out.println("error: could not close file");
- }
- }
-
- int Build32Bit(byte[] var1) {
- return (var1[3] & 255) << 24 | (var1[2] & 255) << 16 | (var1[1] & 255) << 8 | var1[0] & 255;
- }
-
- void DecodeStart() {
- this.HufDecodeStart();
- this.nRemainderBytes = 0;
- }
-
- void HufDecodeStart() {
- this.InitInternalIO();
- this.blocksize = 0;
- }
-
- void InitInternalIO() {
- this.bitbuf = 0;
- this.subbitbuf = 0;
- this.bitcount = 0;
- this.FillBuffer(16);
- }
-
- void FillBuffer(int var1) {
- this.bitbuf <<= var1;
-
- for(this.bitbuf &= 65535; var1 > this.bitcount; this.bitcount = 8) {
- this.bitbuf |= this.subbitbuf << (var1 -= this.bitcount);
- this.bitbuf &= 65535;
-
- try {
- this.subbitbuf = this.field_0.readUnsignedByte();
- } catch (Exception var2) {
- this.subbitbuf = 0;
- }
- }
-
- this.bitbuf |= this.subbitbuf >> (this.bitcount -= var1) & '\uffff';
- this.bitbuf &= 65535;
- }
-
- void Decode(int var1) {
- int var2 = 0;
-
- while(--this.nRemainderBytes >= 0) {
- this.buffer[var2] = this.buffer[this.field_4];
- this.field_4 = this.field_4 + 1 & 8191;
- ++var2;
- if (var2 == var1) {
- return;
- }
- }
-
- while(!this.field_1.dying) {
- int var3 = this.decode_c();
- if (var3 <= 255) {
- this.buffer[var2] = (byte)var3;
- ++var2;
- if (var2 == var1) {
- return;
- }
- } else {
- this.nRemainderBytes = var3 - 253;
- this.field_4 = var2 - this.decode_p() - 1 & 8191;
-
- while(--this.nRemainderBytes >= 0) {
- this.buffer[var2] = this.buffer[this.field_4];
- this.field_4 = this.field_4 + 1 & 8191;
- ++var2;
- if (var2 == var1) {
- return;
- }
- }
- }
- }
-
- }
-
- void read_pt_len(int var1, int var2, int var3) {
- int var6 = this.GetNBits(var2);
- if (var6 == 0) {
- int var12 = this.GetNBits(var2);
-
- for(int var8 = 0; var8 < var1; ++var8) {
- this.pt_len[var8] = 0;
- }
-
- for(int var9 = 0; var9 < 256; ++var9) {
- this.pt_table[var9] = var12;
- }
-
- } else {
- int var4 = 0;
-
- while(var4 < var6) {
- int var5 = this.bitbuf >> 13;
- var5 &= 65535;
- if (var5 == 7) {
- int var7 = 4096;
-
- for(var7 &= 65535; (var7 & this.bitbuf) != 0; ++var5) {
- var7 >>= 1;
- var7 &= 65535;
- }
- }
-
- this.FillBuffer(var5 < 7 ? 3 : var5 - 3);
- this.pt_len[var4++] = (byte)var5;
- if (var4 == var3) {
- var5 = this.GetNBits(2);
-
- while(true) {
- --var5;
- if (var5 < 0) {
- break;
- }
-
- this.pt_len[var4++] = 0;
- }
- }
- }
-
- while(var4 < var1) {
- this.pt_len[var4++] = 0;
- }
-
- this.BuildDecodeTable(var1, this.pt_len, 8, this.pt_table);
- }
- }
-
- void read_c_len() {
- int var3 = this.GetNBits(9);
- if (var3 == 0) {
- int var8 = this.GetNBits(9);
-
- for(int var5 = 0; var5 < 510; ++var5) {
- this.c_len[var5] = 0;
- }
-
- for(int var6 = 0; var6 < 4096; ++var6) {
- this.c_table[var6] = var8;
- }
-
- } else {
- int var1 = 0;
-
- while(var1 < var3) {
- int var2 = this.pt_table[this.bitbuf >> 8 & '\uffff'];
- if (var2 >= 19) {
- int var4 = 128;
- var4 &= 65535;
-
- do {
- if ((this.bitbuf & var4) != 0) {
- var2 = this.right[var2];
- } else {
- var2 = this.left[var2];
- }
-
- var4 >>= 1;
- var4 &= 65535;
- } while(var2 >= 19);
- }
-
- this.FillBuffer(this.pt_len[var2]);
- if (var2 <= 2) {
- if (var2 == 0) {
- var2 = 1;
- } else if (var2 == 1) {
- var2 = this.GetNBits(4) + 3;
- } else {
- var2 = this.GetNBits(9) + 20;
- }
-
- while(true) {
- --var2;
- if (var2 < 0) {
- break;
- }
-
- this.c_len[var1++] = 0;
- }
- } else {
- this.c_len[var1++] = (byte)(var2 - 2);
- }
- }
-
- while(var1 < 510) {
- this.c_len[var1++] = 0;
- }
-
- this.BuildDecodeTable(510, this.c_len, 12, this.c_table);
- }
- }
-
- int decode_c() {
- if (this.blocksize == 0) {
- this.blocksize = this.GetNBits(16);
- this.read_pt_len(19, 5, 3);
- this.read_c_len();
- this.read_pt_len(14, 4, -1);
- }
-
- --this.blocksize;
- int var1 = this.c_table[this.bitbuf >> 4 & '\uffff'];
- if (var1 >= 510) {
- int var2 = 8;
- var2 &= 65535;
-
- do {
- if ((this.bitbuf & var2) != 0) {
- var1 = this.right[var1];
- } else {
- var1 = this.left[var1];
- }
-
- var2 >>= 1;
- var2 &= 65535;
- } while(var1 >= 510);
- }
-
- this.FillBuffer(this.c_len[var1]);
- return var1;
- }
-
- int decode_p() {
- int var1 = this.pt_table[this.bitbuf >> 8 & '\uffff'];
- if (var1 >= 14) {
- int var2 = 128;
- var2 &= 65535;
-
- do {
- if ((this.bitbuf & var2) != 0) {
- var1 = this.right[var1];
- } else {
- var1 = this.left[var1];
- }
-
- var2 >>= 1;
- var2 &= 65535;
- } while(var1 >= 14);
- }
-
- this.FillBuffer(this.pt_len[var1]);
- if (var1 != 0) {
- var1 = (1 << var1 - 1) + this.GetNBits(var1 - 1);
- }
-
- return var1;
- }
-
- int GetNBits(int var1) {
- int var2 = this.bitbuf >> 16 - var1;
- var2 &= 65535;
- this.FillBuffer(var1);
- return var2;
- }
-
- boolean BuildDecodeTable(int var1, byte[] var2, int var3, int[] var4) {
- int[] var5 = new int[17];
- int[] var6 = new int[17];
- int[] var7 = new int[18];
- int var10 = 0;
-
- for(int var11 = 1; var11 <= 16; ++var11) {
- var5[var11] = 0;
- }
-
- for(int var20 = 0; var20 < var1; ++var20) {
- ++var5[var2[var20]];
- }
-
- var7[1] = 0;
-
- for(int var21 = 1; var21 <= 16; ++var21) {
- var7[var21 + 1] = var7[var21] + (var5[var21] << 16 - var21 & '\uffff');
- }
-
- if (var7[17] != 65536) {
- return false;
- } else {
- for(int var19 = 0; var19 < 18; ++var19) {
- if (var7[var19] == 65536) {
- var7[var19] = 0;
- }
- }
-
- int var15 = 16 - var3;
-
- int var22;
- for(var22 = 1; var22 <= var3; ++var22) {
- var7[var22] >>= var15;
- var7[var22] &= 65535;
- if (var7[var22] == 65536) {
- var7[var22] = 0;
- }
-
- var6[var22] = 1 << var3 - var22;
- }
-
- while(var22 <= 16) {
- var6[var22] = 1 << 16 - var22;
- ++var22;
- }
-
- var22 = var7[var3 + 1] >> var15 & '\uffff';
- if (var22 != 65536) {
- for(int var12 = 1 << var3; var22 != var12; var4[var22++] = 0) {
- }
- }
-
- int var16 = var1;
- int var18 = 1 << 15 - var3;
- var18 &= 65535;
-
- for(int var14 = 0; var14 < var1; ++var14) {
- byte var13;
- if ((var13 = var2[var14]) != 0) {
- int var17 = var7[var13] + var6[var13];
- if (var13 <= var3) {
- for(int var24 = var7[var13]; var24 < var17; ++var24) {
- var4[var24] = var14;
- }
- } else {
- int var26 = var7[var13];
- byte var8 = 0;
- int var9 = var26 >> var15;
-
- for(int var25 = var13 - var3; var25 != 0; --var25) {
- if (var8 == 0) {
- var10 = var4[var9];
- }
-
- if (var8 == 1) {
- var10 = this.right[var9];
- }
-
- if (var8 == 2) {
- var10 = this.left[var9];
- }
-
- if (var10 == 0) {
- this.right[var16] = 0;
- this.left[var16] = 0;
- if (var8 == 0) {
- var4[var9] = var16;
- }
-
- if (var8 == 1) {
- this.right[var9] = var16;
- }
-
- if (var8 == 2) {
- this.left[var9] = var16;
- }
-
- var10 = var16++;
- }
-
- if ((var26 & var18) != 0) {
- var8 = 1;
- var9 = var10;
- } else {
- var8 = 2;
- var9 = var10;
- }
-
- var26 <<= 1;
- var26 &= 65535;
- }
-
- if (var8 == 0) {
- var4[var9] = var14;
- }
-
- if (var8 == 1) {
- this.right[var9] = var14;
- }
-
- if (var8 == 2) {
- this.left[var9] = var14;
- }
- }
-
- var7[var13] = var17;
- }
- }
-
- return true;
- }
- }
- }
-