home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 24 / CDACTUAL24.iso / corel / BARISTA / ANIMATIONLIB / B_AR.CLASS (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-24  |  6.5 KB  |  503 lines

  1. package animationlib;
  2.  
  3. import java.io.DataInputStream;
  4. import java.io.InputStream;
  5. import java.net.URL;
  6.  
  7. class B_ar extends Thread {
  8.    private InputStream in1;
  9.    // $FF: renamed from: in java.io.DataInputStream
  10.    private DataInputStream field_0;
  11.    // $FF: renamed from: wm animationlib.animator
  12.    private animator field_1;
  13.    // $FF: renamed from: lt animationlib.B_loader
  14.    private B_loader field_2;
  15.    private static final int MAXMATCH = 256;
  16.    private static final int UCHAR_MAX = 255;
  17.    private static final int THRESHOLD = 3;
  18.    // $FF: renamed from: NC int
  19.    private static final int field_3 = 510;
  20.    private static final int DICBIT = 13;
  21.    private static final int DICSIZ = 8192;
  22.    private static final int CHAR_BIT = 8;
  23.    private static final int BITBUFSIZ = 16;
  24.    private static final int CODE_BIT = 16;
  25.    private static final int CBIT = 9;
  26.    private int dwOriginalSize;
  27.    private int nRemainderBytes;
  28.    private int blocksize;
  29.    private int bitbuf;
  30.    private int subbitbuf;
  31.    private int bitcount;
  32.    private byte[] buffer;
  33.    private int[] left;
  34.    private int[] right;
  35.    private int nBytes;
  36.    // $FF: renamed from: ii int
  37.    private int field_4;
  38.    // $FF: renamed from: NP int
  39.    private static final int field_5 = 14;
  40.    // $FF: renamed from: NT int
  41.    private static final int field_6 = 19;
  42.    private static final int PBIT = 4;
  43.    private static final int TBIT = 5;
  44.    private static final int NPT = 19;
  45.    byte[] c_len = new byte[510];
  46.    byte[] pt_len = new byte[19];
  47.    int[] c_table = new int[4096];
  48.    int[] pt_table = new int[256];
  49.  
  50.    B_ar(URL var1, String var2, animator var3, B_loader var4) {
  51.       try {
  52.          this.in1 = (new URL(var1, var2)).openStream();
  53.          this.field_0 = new DataInputStream(this.in1);
  54.       } catch (Exception var5) {
  55.          System.out.println("error: could not open file " + var2);
  56.       }
  57.  
  58.       this.field_1 = var3;
  59.       this.field_2 = var4;
  60.       this.field_1.opened_file = true;
  61.    }
  62.  
  63.    public synchronized void run() {
  64.       this.right = new int[6119];
  65.       this.left = new int[6119];
  66.  
  67.       for(int var1 = 0; var1 < 6119; ++var1) {
  68.          this.left[var1] = 0;
  69.          this.right[var1] = 0;
  70.       }
  71.  
  72.       byte[] var2 = new byte[8];
  73.       byte[] var3 = new byte[4];
  74.  
  75.       try {
  76.          this.field_0.read(var2);
  77.          this.field_0.read(var3);
  78.       } catch (Exception var7) {
  79.          System.out.println("couldn't read");
  80.       }
  81.  
  82.       this.dwOriginalSize = this.Build32Bit(var3);
  83.       this.field_2.arbuf = new byte[this.dwOriginalSize];
  84.       this.DecodeStart();
  85.       this.field_2.posinarbuf = 0;
  86.       this.buffer = new byte[8192];
  87.  
  88.       for(int var4 = 0; var4 < 8192; ++var4) {
  89.          this.buffer[var4] = 0;
  90.       }
  91.  
  92.       while(this.dwOriginalSize != 0) {
  93.          int var5 = this.dwOriginalSize > 8192 ? 8192 : this.dwOriginalSize;
  94.          if (this.field_1.dying) {
  95.             break;
  96.          }
  97.  
  98.          this.Decode(var5);
  99.          System.arraycopy(this.buffer, 0, this.field_2.arbuf, this.field_2.posinarbuf, var5);
  100.          B_loader var10000 = this.field_2;
  101.          var10000.posinarbuf += var5;
  102.          this.field_2.BytesRead();
  103.          this.dwOriginalSize -= var5;
  104.       }
  105.  
  106.       try {
  107.          this.field_0.close();
  108.       } catch (Exception var6) {
  109.          System.out.println("error: could not close file");
  110.       }
  111.    }
  112.  
  113.    int Build32Bit(byte[] var1) {
  114.       return (var1[3] & 255) << 24 | (var1[2] & 255) << 16 | (var1[1] & 255) << 8 | var1[0] & 255;
  115.    }
  116.  
  117.    void DecodeStart() {
  118.       this.HufDecodeStart();
  119.       this.nRemainderBytes = 0;
  120.    }
  121.  
  122.    void HufDecodeStart() {
  123.       this.InitInternalIO();
  124.       this.blocksize = 0;
  125.    }
  126.  
  127.    void InitInternalIO() {
  128.       this.bitbuf = 0;
  129.       this.subbitbuf = 0;
  130.       this.bitcount = 0;
  131.       this.FillBuffer(16);
  132.    }
  133.  
  134.    void FillBuffer(int var1) {
  135.       this.bitbuf <<= var1;
  136.  
  137.       for(this.bitbuf &= 65535; var1 > this.bitcount; this.bitcount = 8) {
  138.          this.bitbuf |= this.subbitbuf << (var1 -= this.bitcount);
  139.          this.bitbuf &= 65535;
  140.  
  141.          try {
  142.             this.subbitbuf = this.field_0.readUnsignedByte();
  143.          } catch (Exception var2) {
  144.             this.subbitbuf = 0;
  145.          }
  146.       }
  147.  
  148.       this.bitbuf |= this.subbitbuf >> (this.bitcount -= var1) & '\uffff';
  149.       this.bitbuf &= 65535;
  150.    }
  151.  
  152.    void Decode(int var1) {
  153.       int var2 = 0;
  154.  
  155.       while(--this.nRemainderBytes >= 0) {
  156.          this.buffer[var2] = this.buffer[this.field_4];
  157.          this.field_4 = this.field_4 + 1 & 8191;
  158.          ++var2;
  159.          if (var2 == var1) {
  160.             return;
  161.          }
  162.       }
  163.  
  164.       while(!this.field_1.dying) {
  165.          int var3 = this.decode_c();
  166.          if (var3 <= 255) {
  167.             this.buffer[var2] = (byte)var3;
  168.             ++var2;
  169.             if (var2 == var1) {
  170.                return;
  171.             }
  172.          } else {
  173.             this.nRemainderBytes = var3 - 253;
  174.             this.field_4 = var2 - this.decode_p() - 1 & 8191;
  175.  
  176.             while(--this.nRemainderBytes >= 0) {
  177.                this.buffer[var2] = this.buffer[this.field_4];
  178.                this.field_4 = this.field_4 + 1 & 8191;
  179.                ++var2;
  180.                if (var2 == var1) {
  181.                   return;
  182.                }
  183.             }
  184.          }
  185.       }
  186.  
  187.    }
  188.  
  189.    void read_pt_len(int var1, int var2, int var3) {
  190.       int var6 = this.GetNBits(var2);
  191.       if (var6 == 0) {
  192.          int var12 = this.GetNBits(var2);
  193.  
  194.          for(int var8 = 0; var8 < var1; ++var8) {
  195.             this.pt_len[var8] = 0;
  196.          }
  197.  
  198.          for(int var9 = 0; var9 < 256; ++var9) {
  199.             this.pt_table[var9] = var12;
  200.          }
  201.  
  202.       } else {
  203.          int var4 = 0;
  204.  
  205.          while(var4 < var6) {
  206.             int var5 = this.bitbuf >> 13;
  207.             var5 &= 65535;
  208.             if (var5 == 7) {
  209.                int var7 = 4096;
  210.  
  211.                for(var7 &= 65535; (var7 & this.bitbuf) != 0; ++var5) {
  212.                   var7 >>= 1;
  213.                   var7 &= 65535;
  214.                }
  215.             }
  216.  
  217.             this.FillBuffer(var5 < 7 ? 3 : var5 - 3);
  218.             this.pt_len[var4++] = (byte)var5;
  219.             if (var4 == var3) {
  220.                var5 = this.GetNBits(2);
  221.  
  222.                while(true) {
  223.                   --var5;
  224.                   if (var5 < 0) {
  225.                      break;
  226.                   }
  227.  
  228.                   this.pt_len[var4++] = 0;
  229.                }
  230.             }
  231.          }
  232.  
  233.          while(var4 < var1) {
  234.             this.pt_len[var4++] = 0;
  235.          }
  236.  
  237.          this.BuildDecodeTable(var1, this.pt_len, 8, this.pt_table);
  238.       }
  239.    }
  240.  
  241.    void read_c_len() {
  242.       int var3 = this.GetNBits(9);
  243.       if (var3 == 0) {
  244.          int var8 = this.GetNBits(9);
  245.  
  246.          for(int var5 = 0; var5 < 510; ++var5) {
  247.             this.c_len[var5] = 0;
  248.          }
  249.  
  250.          for(int var6 = 0; var6 < 4096; ++var6) {
  251.             this.c_table[var6] = var8;
  252.          }
  253.  
  254.       } else {
  255.          int var1 = 0;
  256.  
  257.          while(var1 < var3) {
  258.             int var2 = this.pt_table[this.bitbuf >> 8 & '\uffff'];
  259.             if (var2 >= 19) {
  260.                int var4 = 128;
  261.                var4 &= 65535;
  262.  
  263.                do {
  264.                   if ((this.bitbuf & var4) != 0) {
  265.                      var2 = this.right[var2];
  266.                   } else {
  267.                      var2 = this.left[var2];
  268.                   }
  269.  
  270.                   var4 >>= 1;
  271.                   var4 &= 65535;
  272.                } while(var2 >= 19);
  273.             }
  274.  
  275.             this.FillBuffer(this.pt_len[var2]);
  276.             if (var2 <= 2) {
  277.                if (var2 == 0) {
  278.                   var2 = 1;
  279.                } else if (var2 == 1) {
  280.                   var2 = this.GetNBits(4) + 3;
  281.                } else {
  282.                   var2 = this.GetNBits(9) + 20;
  283.                }
  284.  
  285.                while(true) {
  286.                   --var2;
  287.                   if (var2 < 0) {
  288.                      break;
  289.                   }
  290.  
  291.                   this.c_len[var1++] = 0;
  292.                }
  293.             } else {
  294.                this.c_len[var1++] = (byte)(var2 - 2);
  295.             }
  296.          }
  297.  
  298.          while(var1 < 510) {
  299.             this.c_len[var1++] = 0;
  300.          }
  301.  
  302.          this.BuildDecodeTable(510, this.c_len, 12, this.c_table);
  303.       }
  304.    }
  305.  
  306.    int decode_c() {
  307.       if (this.blocksize == 0) {
  308.          this.blocksize = this.GetNBits(16);
  309.          this.read_pt_len(19, 5, 3);
  310.          this.read_c_len();
  311.          this.read_pt_len(14, 4, -1);
  312.       }
  313.  
  314.       --this.blocksize;
  315.       int var1 = this.c_table[this.bitbuf >> 4 & '\uffff'];
  316.       if (var1 >= 510) {
  317.          int var2 = 8;
  318.          var2 &= 65535;
  319.  
  320.          do {
  321.             if ((this.bitbuf & var2) != 0) {
  322.                var1 = this.right[var1];
  323.             } else {
  324.                var1 = this.left[var1];
  325.             }
  326.  
  327.             var2 >>= 1;
  328.             var2 &= 65535;
  329.          } while(var1 >= 510);
  330.       }
  331.  
  332.       this.FillBuffer(this.c_len[var1]);
  333.       return var1;
  334.    }
  335.  
  336.    int decode_p() {
  337.       int var1 = this.pt_table[this.bitbuf >> 8 & '\uffff'];
  338.       if (var1 >= 14) {
  339.          int var2 = 128;
  340.          var2 &= 65535;
  341.  
  342.          do {
  343.             if ((this.bitbuf & var2) != 0) {
  344.                var1 = this.right[var1];
  345.             } else {
  346.                var1 = this.left[var1];
  347.             }
  348.  
  349.             var2 >>= 1;
  350.             var2 &= 65535;
  351.          } while(var1 >= 14);
  352.       }
  353.  
  354.       this.FillBuffer(this.pt_len[var1]);
  355.       if (var1 != 0) {
  356.          var1 = (1 << var1 - 1) + this.GetNBits(var1 - 1);
  357.       }
  358.  
  359.       return var1;
  360.    }
  361.  
  362.    int GetNBits(int var1) {
  363.       int var2 = this.bitbuf >> 16 - var1;
  364.       var2 &= 65535;
  365.       this.FillBuffer(var1);
  366.       return var2;
  367.    }
  368.  
  369.    boolean BuildDecodeTable(int var1, byte[] var2, int var3, int[] var4) {
  370.       int[] var5 = new int[17];
  371.       int[] var6 = new int[17];
  372.       int[] var7 = new int[18];
  373.       int var10 = 0;
  374.  
  375.       for(int var11 = 1; var11 <= 16; ++var11) {
  376.          var5[var11] = 0;
  377.       }
  378.  
  379.       for(int var20 = 0; var20 < var1; ++var20) {
  380.          ++var5[var2[var20]];
  381.       }
  382.  
  383.       var7[1] = 0;
  384.  
  385.       for(int var21 = 1; var21 <= 16; ++var21) {
  386.          var7[var21 + 1] = var7[var21] + (var5[var21] << 16 - var21 & '\uffff');
  387.       }
  388.  
  389.       if (var7[17] != 65536) {
  390.          return false;
  391.       } else {
  392.          for(int var19 = 0; var19 < 18; ++var19) {
  393.             if (var7[var19] == 65536) {
  394.                var7[var19] = 0;
  395.             }
  396.          }
  397.  
  398.          int var15 = 16 - var3;
  399.  
  400.          int var22;
  401.          for(var22 = 1; var22 <= var3; ++var22) {
  402.             var7[var22] >>= var15;
  403.             var7[var22] &= 65535;
  404.             if (var7[var22] == 65536) {
  405.                var7[var22] = 0;
  406.             }
  407.  
  408.             var6[var22] = 1 << var3 - var22;
  409.          }
  410.  
  411.          while(var22 <= 16) {
  412.             var6[var22] = 1 << 16 - var22;
  413.             ++var22;
  414.          }
  415.  
  416.          var22 = var7[var3 + 1] >> var15 & '\uffff';
  417.          if (var22 != 65536) {
  418.             for(int var12 = 1 << var3; var22 != var12; var4[var22++] = 0) {
  419.             }
  420.          }
  421.  
  422.          int var16 = var1;
  423.          int var18 = 1 << 15 - var3;
  424.          var18 &= 65535;
  425.  
  426.          for(int var14 = 0; var14 < var1; ++var14) {
  427.             byte var13;
  428.             if ((var13 = var2[var14]) != 0) {
  429.                int var17 = var7[var13] + var6[var13];
  430.                if (var13 <= var3) {
  431.                   for(int var24 = var7[var13]; var24 < var17; ++var24) {
  432.                      var4[var24] = var14;
  433.                   }
  434.                } else {
  435.                   int var26 = var7[var13];
  436.                   byte var8 = 0;
  437.                   int var9 = var26 >> var15;
  438.  
  439.                   for(int var25 = var13 - var3; var25 != 0; --var25) {
  440.                      if (var8 == 0) {
  441.                         var10 = var4[var9];
  442.                      }
  443.  
  444.                      if (var8 == 1) {
  445.                         var10 = this.right[var9];
  446.                      }
  447.  
  448.                      if (var8 == 2) {
  449.                         var10 = this.left[var9];
  450.                      }
  451.  
  452.                      if (var10 == 0) {
  453.                         this.right[var16] = 0;
  454.                         this.left[var16] = 0;
  455.                         if (var8 == 0) {
  456.                            var4[var9] = var16;
  457.                         }
  458.  
  459.                         if (var8 == 1) {
  460.                            this.right[var9] = var16;
  461.                         }
  462.  
  463.                         if (var8 == 2) {
  464.                            this.left[var9] = var16;
  465.                         }
  466.  
  467.                         var10 = var16++;
  468.                      }
  469.  
  470.                      if ((var26 & var18) != 0) {
  471.                         var8 = 1;
  472.                         var9 = var10;
  473.                      } else {
  474.                         var8 = 2;
  475.                         var9 = var10;
  476.                      }
  477.  
  478.                      var26 <<= 1;
  479.                      var26 &= 65535;
  480.                   }
  481.  
  482.                   if (var8 == 0) {
  483.                      var4[var9] = var14;
  484.                   }
  485.  
  486.                   if (var8 == 1) {
  487.                      this.right[var9] = var14;
  488.                   }
  489.  
  490.                   if (var8 == 2) {
  491.                      this.left[var9] = var14;
  492.                   }
  493.                }
  494.  
  495.                var7[var13] = var17;
  496.             }
  497.          }
  498.  
  499.          return true;
  500.       }
  501.    }
  502. }
  503.