home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / FREI / ROTATE.EXE / Rotate.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-08-17  |  11.5 KB  |  784 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Event;
  5. import java.awt.Graphics;
  6. import java.awt.Image;
  7. import java.awt.MediaTracker;
  8. import java.awt.image.ImageObserver;
  9. import java.awt.image.MemoryImageSource;
  10. import java.awt.image.PixelGrabber;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13.  
  14. public class Rotate extends Applet implements Runnable, ImageObserver {
  15.    // $FF: renamed from: x double[]
  16.    double[] field_0;
  17.    // $FF: renamed from: y double[]
  18.    double[] field_1;
  19.    // $FF: renamed from: z double[]
  20.    double[] field_2;
  21.    // $FF: renamed from: xa double[]
  22.    double[] field_3;
  23.    // $FF: renamed from: ya double[]
  24.    double[] field_4;
  25.    // $FF: renamed from: za double[]
  26.    double[] field_5;
  27.    // $FF: renamed from: xb int[][]
  28.    int[][] field_6;
  29.    // $FF: renamed from: yb int[][]
  30.    int[][] field_7;
  31.    // $FF: renamed from: m double[][]
  32.    double[][] field_8;
  33.    // $FF: renamed from: a double[]
  34.    double[] field_9;
  35.    // $FF: renamed from: wz int
  36.    int field_10;
  37.    // $FF: renamed from: k double
  38.    double field_11 = (Math.PI / 180D);
  39.    int rectSize;
  40.    int delay;
  41.    int partFront;
  42.    double factor;
  43.    double xMove;
  44.    double yMove;
  45.    RotatePict[] pict;
  46.    MediaTracker tracker;
  47.    int wApplet;
  48.    int hApplet;
  49.    boolean fImagesReady;
  50.    boolean fPicsOk;
  51.    boolean fUpdate;
  52.    // $FF: renamed from: t java.lang.Thread
  53.    Thread field_12;
  54.    Image[] offScrImg;
  55.    int[] ogPixels;
  56.    int actIndex;
  57.    Image img;
  58.    // $FF: renamed from: gr java.awt.Graphics
  59.    Graphics field_13;
  60.    Color bgColor;
  61.    Color lineColor;
  62.    int iDiv;
  63.    int nrImg;
  64.  
  65.    public void stop() {
  66.       if (this.field_12 != null) {
  67.          this.field_12.stop();
  68.          this.field_12 = null;
  69.       }
  70.  
  71.       System.gc();
  72.    }
  73.  
  74.    public void paintImage(Graphics var1) {
  75.       var1.setColor(this.bgColor);
  76.       var1.fillRect(0, 0, this.wApplet, this.hApplet);
  77.       var1.setColor(this.lineColor);
  78.       var1.drawLine(this.field_6[this.field_10][2], this.field_7[this.field_10][2], this.field_6[this.field_10][3], this.field_7[this.field_10][3]);
  79.       var1.drawLine(this.field_6[this.field_10][3], this.field_7[this.field_10][3], this.field_6[this.field_10][7], this.field_7[this.field_10][7]);
  80.       var1.drawLine(this.field_6[this.field_10][7], this.field_7[this.field_10][7], this.field_6[this.field_10][6], this.field_7[this.field_10][6]);
  81.       var1.drawLine(this.field_6[this.field_10][6], this.field_7[this.field_10][6], this.field_6[this.field_10][2], this.field_7[this.field_10][2]);
  82.       var1.drawLine(this.field_6[this.field_10][2], this.field_7[this.field_10][2], this.field_6[this.field_10][1], this.field_7[this.field_10][1]);
  83.       var1.drawLine(this.field_6[this.field_10][3], this.field_7[this.field_10][3], this.field_6[this.field_10][0], this.field_7[this.field_10][0]);
  84.       var1.drawLine(this.field_6[this.field_10][7], this.field_7[this.field_10][7], this.field_6[this.field_10][4], this.field_7[this.field_10][4]);
  85.       var1.drawLine(this.field_6[this.field_10][6], this.field_7[this.field_10][6], this.field_6[this.field_10][5], this.field_7[this.field_10][5]);
  86.       var1.drawLine(this.field_6[this.field_10][0], this.field_7[this.field_10][0], this.field_6[this.field_10][1], this.field_7[this.field_10][1]);
  87.       var1.drawLine(this.field_6[this.field_10][1], this.field_7[this.field_10][1], this.field_6[this.field_10][5], this.field_7[this.field_10][5]);
  88.       var1.drawLine(this.field_6[this.field_10][5], this.field_7[this.field_10][5], this.field_6[this.field_10][4], this.field_7[this.field_10][4]);
  89.       var1.drawLine(this.field_6[this.field_10][4], this.field_7[this.field_10][4], this.field_6[this.field_10][0], this.field_7[this.field_10][0]);
  90.       PixelGrabber var2 = new PixelGrabber(this.img, 0, 0, this.wApplet, this.hApplet, this.ogPixels, 0, this.wApplet);
  91.  
  92.       try {
  93.          var2.grabPixels();
  94.       } catch (InterruptedException var25) {
  95.       }
  96.  
  97.       int var23 = this.partFront;
  98.       double var17 = (double)(this.field_6[this.field_10][6] - this.field_6[this.field_10][7] - 1);
  99.       double var3 = (double)(this.field_6[this.field_10][2] - this.field_6[this.field_10][3]);
  100.       double var5 = (double)(this.field_6[this.field_10][6] - this.field_6[this.field_10][7]);
  101.       double var9 = (double)(this.field_7[this.field_10][3] - this.field_7[this.field_10][2]);
  102.       double var11 = (double)(this.field_7[this.field_10][6] - this.field_7[this.field_10][7]);
  103.  
  104.       for(int var13 = this.field_6[this.field_10][6] - 1; var13 > this.field_6[this.field_10][7]; --var13) {
  105.          int var15;
  106.          if (var3 != (double)0.0F) {
  107.             var15 = this.field_7[this.field_10][2] + (int)Math.round((double)(this.field_6[this.field_10][2] - var13) / var3 * var9) + 1;
  108.          } else {
  109.             var15 = this.field_7[this.field_10][2] + 1;
  110.          }
  111.  
  112.          int var16;
  113.          if (var5 != (double)0.0F) {
  114.             var16 = this.field_7[this.field_10][6] - (int)Math.round((double)(this.field_6[this.field_10][6] - var13) / var5 * var11) - 1;
  115.          } else {
  116.             var16 = this.field_7[this.field_10][6] - 1;
  117.          }
  118.  
  119.          double var7 = (double)(var13 - this.field_6[this.field_10][7]);
  120.          double var19 = (double)(var16 - var15 + 1);
  121.  
  122.          for(int var14 = var15; var14 <= var16; ++var14) {
  123.             int var21 = (int)Math.round((double)this.pict[var23].pictWidth / var17 * var7);
  124.             int var22 = (int)Math.round((double)this.pict[var23].pictHeight / var19 * (double)(var14 - var15 + 1));
  125.             if (var21 < 0) {
  126.                var21 = 0;
  127.             }
  128.  
  129.             if (var21 >= this.pict[var23].pictWidth) {
  130.                var21 = this.pict[var23].pictWidth - 1;
  131.             }
  132.  
  133.             if (var22 < 0) {
  134.                var22 = 0;
  135.             }
  136.  
  137.             if (var22 >= this.pict[var23].pictHeight) {
  138.                var22 = this.pict[var23].pictHeight - 1;
  139.             }
  140.  
  141.             this.ogPixels[var14 * this.wApplet + var13] = this.pict[var23].pictPixels[var22 * this.pict[var23].pictWidth + var21];
  142.          }
  143.       }
  144.  
  145.       var23 = this.partFront + 1;
  146.       if (var23 == 4) {
  147.          var23 = 0;
  148.       }
  149.  
  150.       var17 = (double)(this.field_6[this.field_10][5] - this.field_6[this.field_10][6] - 1);
  151.       var3 = (double)(this.field_6[this.field_10][1] - this.field_6[this.field_10][2]);
  152.       var5 = (double)(this.field_6[this.field_10][5] - this.field_6[this.field_10][6]);
  153.       var9 = (double)(this.field_7[this.field_10][1] - this.field_7[this.field_10][2]);
  154.       var11 = (double)(this.field_7[this.field_10][6] - this.field_7[this.field_10][5]);
  155.  
  156.       for(int var31 = this.field_6[this.field_10][6] + 1; var31 < this.field_6[this.field_10][5]; ++var31) {
  157.          int var33;
  158.          if (var3 != (double)0.0F) {
  159.             var33 = this.field_7[this.field_10][1] + (int)Math.round((double)(var31 - this.field_6[this.field_10][1]) / var3 * var9) + 1;
  160.          } else {
  161.             var33 = this.field_7[this.field_10][1] + 1;
  162.          }
  163.  
  164.          int var34;
  165.          if (var5 != (double)0.0F) {
  166.             var34 = this.field_7[this.field_10][6] - (int)Math.round((double)(var31 - this.field_6[this.field_10][6]) / var5 * var11) - 1;
  167.          } else {
  168.             var34 = this.field_7[this.field_10][6] - 1;
  169.          }
  170.  
  171.          double var28 = (double)(var31 - this.field_6[this.field_10][6]);
  172.          double var36 = (double)(var34 - var33 + 1);
  173.  
  174.          for(int var32 = var33; var32 <= var34; ++var32) {
  175.             int var37 = (int)Math.round((double)this.pict[var23].pictWidth / var17 * var28);
  176.             int var38 = (int)Math.round((double)this.pict[var23].pictHeight / var36 * (double)(var32 - var33 + 1));
  177.             if (var37 < 0) {
  178.                var37 = 0;
  179.             }
  180.  
  181.             if (var37 >= this.pict[var23].pictWidth) {
  182.                var37 = this.pict[var23].pictWidth - 1;
  183.             }
  184.  
  185.             if (var38 < 0) {
  186.                var38 = 0;
  187.             }
  188.  
  189.             if (var38 >= this.pict[var23].pictHeight) {
  190.                var38 = this.pict[var23].pictHeight - 1;
  191.             }
  192.  
  193.             this.ogPixels[var32 * this.wApplet + var31] = this.pict[var23].pictPixels[var38 * this.pict[var23].pictWidth + var37];
  194.          }
  195.       }
  196.  
  197.       this.offScrImg[this.actIndex] = ((Component)this).createImage(new MemoryImageSource(this.wApplet, this.hApplet, this.ogPixels, 0, this.wApplet));
  198.       boolean var24 = ((Component)this).prepareImage(this.offScrImg[this.actIndex], this);
  199.       if (!var24) {
  200.          while((((Component)this).checkImage(this.offScrImg[this.actIndex], this) & 224) == 0) {
  201.             this.wait(1);
  202.          }
  203.       }
  204.  
  205.    }
  206.  
  207.    int getInt(String var1, int var2) {
  208.       int var4 = var2;
  209.       String var3;
  210.       if ((var3 = ((Applet)this).getParameter(var1)) != null) {
  211.          var3 = var3.trim();
  212.  
  213.          try {
  214.             var4 = new Integer(var3);
  215.          } catch (NumberFormatException var5) {
  216.             System.out.println("Bad integer value '" + var3 + "'. Setting value to default.");
  217.             var4 = var2;
  218.          }
  219.       }
  220.  
  221.       return var4;
  222.    }
  223.  
  224.    public void paint(Graphics var1) {
  225.       if (this.fImagesReady) {
  226.          this.RotateDrawImage(var1, this.offScrImg[this.actIndex], 0, 0, this);
  227.       }
  228.    }
  229.  
  230.    Color getColor(String var1) {
  231.       Color var2 = null;
  232.       String var4;
  233.       if ((var4 = ((Applet)this).getParameter(var1)) != null) {
  234.          var4 = var4.trim();
  235.  
  236.          try {
  237.             int var5 = new Integer(var4.substring(0, var4.indexOf(",")));
  238.             if (var5 < 0) {
  239.                var5 = 0;
  240.             }
  241.  
  242.             if (var5 > 255) {
  243.                var5 = 255;
  244.             }
  245.  
  246.             String var3 = var4.substring(var4.indexOf(",") + 1);
  247.             int var6 = new Integer(var3.substring(0, var3.indexOf(",")));
  248.             if (var6 < 0) {
  249.                var6 = 0;
  250.             }
  251.  
  252.             if (var6 > 255) {
  253.                var6 = 255;
  254.             }
  255.  
  256.             var3 = var3.substring(var3.indexOf(",") + 1);
  257.             int var7 = new Integer(var3);
  258.             if (var7 < 0) {
  259.                var7 = 0;
  260.             }
  261.  
  262.             if (var7 > 255) {
  263.                var7 = 255;
  264.             }
  265.  
  266.             var2 = new Color(var5, var6, var7);
  267.          } catch (NumberFormatException var8) {
  268.             System.out.println("Bad color value '" + var4 + "'. Setting color to default.");
  269.             var2 = null;
  270.          }
  271.       }
  272.  
  273.       return var2;
  274.    }
  275.  
  276.    public void calculate(int var1, int var2, int var3) {
  277.       double var6 = (double)var1 * this.field_11;
  278.       double var8 = (double)var2 * this.field_11;
  279.       double var10 = (double)var3 * this.field_11;
  280.       this.field_8[0][0] = Math.cos(var8) * Math.cos(var10);
  281.       this.field_8[1][0] = (double)-1.0F * Math.cos(var8) * Math.sin(var10);
  282.       this.field_8[2][0] = Math.sin(var8);
  283.       this.field_8[0][1] = Math.cos(var6) * Math.sin(var10) + Math.sin(var6) * Math.sin(var8) * Math.cos(var10);
  284.       this.field_8[1][1] = Math.cos(var6) * Math.cos(var10) - Math.sin(var6) * Math.sin(var8) * Math.sin(var10);
  285.       this.field_8[2][1] = (double)-1.0F * Math.sin(var6) * Math.cos(var8);
  286.       this.field_8[0][2] = Math.sin(var6) * Math.sin(var10) - Math.cos(var6) * Math.sin(var8) * Math.cos(var10);
  287.       this.field_8[1][2] = Math.sin(var6) * Math.cos(var10) + Math.cos(var6) * Math.sin(var8) * Math.sin(var10);
  288.       this.field_8[2][2] = Math.cos(var6) * Math.cos(var8);
  289.       int var12 = 0;
  290.  
  291.       do {
  292.          this.field_3[var12] = this.field_8[0][0] * this.field_0[var12] + this.field_8[1][0] * this.field_1[var12] + this.field_8[2][0] * this.field_2[var12];
  293.          this.field_4[var12] = this.field_8[0][1] * this.field_0[var12] + this.field_8[1][1] * this.field_1[var12] + this.field_8[2][1] * this.field_2[var12];
  294.          this.field_5[var12] = this.field_8[0][2] * this.field_0[var12] + this.field_8[1][2] * this.field_1[var12] + this.field_8[2][2] * this.field_2[var12];
  295.          double var4;
  296.          if (this.field_4[var12] - this.field_9[1] == (double)0.0F) {
  297.             var4 = (double)0.0F;
  298.          } else {
  299.             var4 = this.field_4[var12] / (this.field_4[var12] - this.field_9[1]);
  300.          }
  301.  
  302.          double[] var10000 = this.field_3;
  303.          var10000[var12] -= var4 * (this.field_3[var12] - this.field_9[0]);
  304.          var10000 = this.field_5;
  305.          var10000[var12] -= var4 * (this.field_5[var12] - this.field_9[2]);
  306.          this.field_6[var3][var12] = (int)Math.round(this.factor * (this.field_3[var12] + this.xMove));
  307.          this.field_7[var3][var12] = (int)Math.round(this.factor * (this.field_5[var12] + this.yMove));
  308.          ++var12;
  309.       } while(var12 < 8);
  310.  
  311.    }
  312.  
  313.    public String[][] getParameterInfo() {
  314.       String[][] var1 = new String[][]{{"picture. (.=1-4)", "URL,URL,String", "URL of the picture, the link, and the target frame  (mandatory)"}, {"size", "int", "size of front rectangle when angle is 0 degrees     (optional, '60')"}, {"delay", "int", "time (in ms) between applet updates                 (optional, '100')"}, {"degrees", "int", "number of degrees to the next rotation position     (optional, '3')"}};
  315.       return var1;
  316.    }
  317.  
  318.    private void wait(int var1) {
  319.       try {
  320.          Thread.sleep((long)var1);
  321.       } catch (InterruptedException var2) {
  322.       }
  323.  
  324.    }
  325.  
  326.    public void update(Graphics var1) {
  327.       if (!this.fImagesReady) {
  328.          this.fUpdate = false;
  329.       } else {
  330.          this.RotateDrawImage(var1, this.offScrImg[this.actIndex], 0, 0, this);
  331.          this.fUpdate = false;
  332.       }
  333.    }
  334.  
  335.    public void start() {
  336.       this.actIndex = 0;
  337.       this.field_10 = 0;
  338.       this.partFront = 0;
  339.       if (this.field_12 == null) {
  340.          this.field_12 = new Thread(this);
  341.          this.field_12.start();
  342.       }
  343.  
  344.    }
  345.  
  346.    public String getAppletInfo() {
  347.       return "Rotate.java, V2.0, by Stefan Ruettinger";
  348.    }
  349.  
  350.    public boolean mouseDown(Event var1, int var2, int var3) {
  351.       if (!this.fImagesReady) {
  352.          return true;
  353.       } else {
  354.          int var16 = 0;
  355.          boolean var17 = false;
  356.          if (var2 > this.field_6[this.field_10][7] && var2 < this.field_6[this.field_10][6]) {
  357.             double var14 = (double)(this.field_6[this.field_10][6] - this.field_6[this.field_10][7] - 1);
  358.             double var4 = (double)(this.field_6[this.field_10][2] - this.field_6[this.field_10][3]);
  359.             double var6 = (double)(this.field_6[this.field_10][6] - this.field_6[this.field_10][7]);
  360.             double var8 = (double)(this.field_7[this.field_10][3] - this.field_7[this.field_10][2]);
  361.             double var10 = (double)(this.field_7[this.field_10][6] - this.field_7[this.field_10][7]);
  362.             int var12;
  363.             if (var4 != (double)0.0F) {
  364.                var12 = this.field_7[this.field_10][2] + (int)Math.round((double)(this.field_6[this.field_10][2] - var2) / var4 * var8) + 1;
  365.             } else {
  366.                var12 = this.field_7[this.field_10][2] + 1;
  367.             }
  368.  
  369.             int var13;
  370.             if (var6 != (double)0.0F) {
  371.                var13 = this.field_7[this.field_10][6] - (int)Math.round((double)(this.field_6[this.field_10][6] - var2) / var6 * var10) - 1;
  372.             } else {
  373.                var13 = this.field_7[this.field_10][6] - 1;
  374.             }
  375.  
  376.             if (var3 > var12 && var3 < var13) {
  377.                var16 = this.partFront;
  378.                var17 = true;
  379.             }
  380.          }
  381.  
  382.          if (var2 > this.field_6[this.field_10][6] && var2 < this.field_6[this.field_10][5]) {
  383.             double var24 = (double)(this.field_6[this.field_10][5] - this.field_6[this.field_10][6] - 1);
  384.             double var18 = (double)(this.field_6[this.field_10][1] - this.field_6[this.field_10][2]);
  385.             double var19 = (double)(this.field_6[this.field_10][5] - this.field_6[this.field_10][6]);
  386.             double var20 = (double)(this.field_7[this.field_10][1] - this.field_7[this.field_10][2]);
  387.             double var21 = (double)(this.field_7[this.field_10][6] - this.field_7[this.field_10][5]);
  388.             int var22;
  389.             if (var18 != (double)0.0F) {
  390.                var22 = this.field_7[this.field_10][1] + (int)Math.round((double)(var2 - this.field_6[this.field_10][1]) / var18 * var20) + 1;
  391.             } else {
  392.                var22 = this.field_7[this.field_10][1] + 1;
  393.             }
  394.  
  395.             int var23;
  396.             if (var19 != (double)0.0F) {
  397.                var23 = this.field_7[this.field_10][6] - (int)Math.round((double)(var2 - this.field_6[this.field_10][6]) / var19 * var21) - 1;
  398.             } else {
  399.                var23 = this.field_7[this.field_10][6] - 1;
  400.             }
  401.  
  402.             if (var3 > var22 && var3 < var23) {
  403.                var16 = this.partFront + 1;
  404.                if (var16 == 4) {
  405.                   var16 = 0;
  406.                }
  407.  
  408.                var17 = true;
  409.             }
  410.          }
  411.  
  412.          if (var17 && this.pict[var16].linkUrl != null) {
  413.             if (this.pict[var16].target != null) {
  414.                ((Applet)this).getAppletContext().showDocument(this.pict[var16].linkUrl, this.pict[var16].target);
  415.             } else {
  416.                ((Applet)this).getAppletContext().showDocument(this.pict[var16].linkUrl);
  417.             }
  418.          }
  419.  
  420.          return true;
  421.       }
  422.    }
  423.  
  424.    private Image RotateCreateImage(int var1, int var2) {
  425.       Image var3 = ((Component)this).createImage(var1, var2);
  426.       boolean var4 = ((Component)this).prepareImage(var3, this);
  427.       if (!var4) {
  428.          while((((Component)this).checkImage(var3, this) & 224) == 0) {
  429.             this.wait(1);
  430.          }
  431.       }
  432.  
  433.       return var3;
  434.    }
  435.  
  436.    private void RotateDrawImage(Graphics var1, Image var2, int var3, int var4, ImageObserver var5) {
  437.       if (var1 != null && var2 != null) {
  438.          var1.drawImage(var2, var3, var4, var5);
  439.          ((Component)this).getToolkit().sync();
  440.       }
  441.    }
  442.  
  443.    private void getParameters() {
  444.       Object var3 = null;
  445.       String var4 = null;
  446.       String var5 = null;
  447.       this.rectSize = this.getInt("size", 60);
  448.       if (this.rectSize < 10) {
  449.          this.rectSize = 10;
  450.       }
  451.  
  452.       this.delay = this.getInt("delay", 100);
  453.       if (this.delay < 0) {
  454.          this.delay = 0;
  455.       }
  456.  
  457.       this.iDiv = this.getInt("degrees", 3);
  458.       if (this.iDiv < 1) {
  459.          this.iDiv = 1;
  460.       }
  461.  
  462.       if (this.iDiv > 10) {
  463.          this.iDiv = 10;
  464.       }
  465.  
  466.       this.bgColor = this.getColor("backgroundcolor");
  467.       if (this.bgColor == null) {
  468.          this.bgColor = new Color(255, 255, 255);
  469.       }
  470.  
  471.       this.lineColor = this.getColor("linecolor");
  472.       if (this.lineColor == null) {
  473.          this.lineColor = new Color(0, 0, 0);
  474.       }
  475.  
  476.       this.pict = new RotatePict[4];
  477.       int var6 = 1;
  478.  
  479.       do {
  480.          this.pict[var6 - 1] = new RotatePict();
  481.          this.pict[var6 - 1].pictUrl = null;
  482.          this.pict[var6 - 1].linkUrl = null;
  483.          this.pict[var6 - 1].target = null;
  484.          String var2 = new String("picture" + Integer.toString(var6));
  485.          String var1;
  486.          if ((var1 = ((Applet)this).getParameter(var2)) != null) {
  487.             int var7 = var1.indexOf(",");
  488.             String var14;
  489.             if (var7 == -1) {
  490.                var14 = var1;
  491.             } else {
  492.                var14 = new String(var1.substring(0, var1.indexOf(",")));
  493.                var1 = var1.substring(var1.indexOf(",") + 1);
  494.                var7 = var1.indexOf(",");
  495.                if (var7 == -1) {
  496.                   var4 = var1;
  497.                } else {
  498.                   var4 = new String(var1.substring(0, var1.indexOf(",")));
  499.                   var5 = var1.substring(var1.indexOf(",") + 1);
  500.                }
  501.             }
  502.  
  503.             if (var14 != null) {
  504.                boolean var8 = true;
  505.  
  506.                try {
  507.                   this.pict[var6 - 1].pictUrl = new URL(var14);
  508.                } catch (MalformedURLException var12) {
  509.                   var8 = false;
  510.                }
  511.  
  512.                if (!var8) {
  513.                   try {
  514.                      this.pict[var6 - 1].pictUrl = new URL(((Applet)this).getDocumentBase(), var14);
  515.                   } catch (MalformedURLException var11) {
  516.                      this.pict[var6 - 1].pictUrl = null;
  517.                   }
  518.                }
  519.             }
  520.  
  521.             if (var4 != null) {
  522.                boolean var16 = true;
  523.  
  524.                try {
  525.                   this.pict[var6 - 1].linkUrl = new URL(var4);
  526.                } catch (MalformedURLException var10) {
  527.                   var16 = false;
  528.                }
  529.  
  530.                if (!var16) {
  531.                   try {
  532.                      this.pict[var6 - 1].linkUrl = new URL(((Applet)this).getDocumentBase(), var4);
  533.                   } catch (MalformedURLException var9) {
  534.                      this.pict[var6 - 1].linkUrl = null;
  535.                   }
  536.                }
  537.             }
  538.  
  539.             this.pict[var6 - 1].target = var5;
  540.          }
  541.  
  542.          ++var6;
  543.       } while(var6 <= 4);
  544.  
  545.    }
  546.  
  547.    public void run() {
  548.       if (!this.fPicsOk) {
  549.          this.stop();
  550.       } else {
  551.          while(this.field_12 != null) {
  552.             if (!this.fImagesReady) {
  553.                int var4 = 0;
  554.  
  555.                do {
  556.                   if (this.pict[var4].pict == null) {
  557.                      boolean var1 = this.tracker.checkID(var4, true);
  558.                      if (var1) {
  559.                         if (this.tracker.isErrorID(var4)) {
  560.                            System.out.println("Error loading picture " + var4 + ". Applet stopped.");
  561.                            this.stop();
  562.                            return;
  563.                         }
  564.  
  565.                         this.pict[var4].pict = this.pict[var4].pictLoad;
  566.                         boolean var3 = ((Component)this).prepareImage(this.pict[var4].pict, this);
  567.                         if (!var3) {
  568.                            while((((Component)this).checkImage(this.pict[var4].pict, this) & 224) == 0) {
  569.                               this.wait(1);
  570.                            }
  571.                         }
  572.  
  573.                         this.pict[var4].pictWidth = this.pict[var4].pict.getWidth(this);
  574.                         this.pict[var4].pictHeight = this.pict[var4].pict.getHeight(this);
  575.                         this.pict[var4].pictPixels = new int[this.pict[var4].pictWidth * this.pict[var4].pictHeight];
  576.                         PixelGrabber var11 = new PixelGrabber(this.pict[var4].pict, 0, 0, this.pict[var4].pictWidth, this.pict[var4].pictHeight, this.pict[var4].pictPixels, 0, this.pict[var4].pictWidth);
  577.  
  578.                         try {
  579.                            var11.grabPixels();
  580.                         } catch (InterruptedException var12) {
  581.                         }
  582.                      }
  583.                   }
  584.  
  585.                   ++var4;
  586.                } while(var4 < 4);
  587.  
  588.                boolean var2 = true;
  589.                var4 = 0;
  590.  
  591.                do {
  592.                   if (this.pict[var4].pict == null) {
  593.                      var2 = false;
  594.                   }
  595.  
  596.                   ++var4;
  597.                } while(var4 < 4);
  598.  
  599.                if (!var2) {
  600.                   this.wait(500);
  601.                   continue;
  602.                }
  603.  
  604.                var4 = 0;
  605.  
  606.                do {
  607.                   this.calculate(0, 0, var4);
  608.                   ++var4;
  609.                } while(var4 < 90);
  610.  
  611.                this.img = this.RotateCreateImage(this.wApplet, this.hApplet);
  612.                this.field_13 = this.img.getGraphics();
  613.                this.nrImg = (int)((double)360.0F / (double)this.iDiv);
  614.                this.offScrImg = new Image[this.nrImg];
  615.                this.field_10 = 0;
  616.                this.partFront = 0;
  617.  
  618.                for(this.actIndex = 0; this.actIndex < this.nrImg; ++this.actIndex) {
  619.                   String var10 = new String("Preparing images: ");
  620.                   var10 = var10 + (int)((double)this.actIndex * (double)100.0F / (double)this.nrImg);
  621.                   var10 = var10 + new String("% done");
  622.                   ((Applet)this).getAppletContext().showStatus(var10);
  623.                   this.paintImage(this.field_13);
  624.                   this.field_10 += this.iDiv;
  625.                   if (this.field_10 >= 90) {
  626.                      this.field_10 -= 90;
  627.                      ++this.partFront;
  628.                   }
  629.                }
  630.  
  631.                this.actIndex = 0;
  632.                this.field_10 = 0;
  633.                this.partFront = 0;
  634.                ((Applet)this).getAppletContext().showStatus("");
  635.                this.fImagesReady = true;
  636.             }
  637.  
  638.             long var6 = System.currentTimeMillis();
  639.             this.fUpdate = true;
  640.             ((Component)this).repaint();
  641.  
  642.             while(this.fUpdate) {
  643.                this.wait(1);
  644.             }
  645.  
  646.             long var8 = System.currentTimeMillis();
  647.             int var5 = this.delay - (int)(var8 - var6);
  648.             if (var5 > 0) {
  649.                this.wait(var5);
  650.             }
  651.  
  652.             ++this.actIndex;
  653.             if (this.actIndex == this.nrImg) {
  654.                this.actIndex = 0;
  655.             }
  656.  
  657.             this.field_10 += this.iDiv;
  658.             if (this.field_10 >= 90) {
  659.                this.field_10 -= 90;
  660.                ++this.partFront;
  661.             }
  662.  
  663.             if (this.partFront == 4) {
  664.                this.partFront = 0;
  665.             }
  666.          }
  667.  
  668.       }
  669.    }
  670.  
  671.    public void init() {
  672.       double var11 = (double)1.0F;
  673.       this.tracker = new MediaTracker(this);
  674.       this.getParameters();
  675.       this.wApplet = ((Component)this).size().width;
  676.       this.hApplet = ((Component)this).size().height;
  677.       this.fPicsOk = true;
  678.       int var9 = 0;
  679.  
  680.       do {
  681.          if (this.pict[var9].pictUrl == null) {
  682.             this.fPicsOk = false;
  683.          }
  684.  
  685.          ++var9;
  686.       } while(var9 < 4);
  687.  
  688.       if (!this.fPicsOk) {
  689.          System.out.println("You have to specify 4 pictures in the applet parameters. Applet stopped.");
  690.       } else {
  691.          this.field_9 = new double[3];
  692.          this.field_9[0] = (double)0.0F;
  693.          this.field_9[1] = (double)8.0F;
  694.          this.field_9[2] = (double)0.0F;
  695.          this.ogPixels = new int[this.wApplet * this.hApplet];
  696.          this.field_8 = new double[3][3];
  697.          this.field_0 = new double[8];
  698.          this.field_1 = new double[8];
  699.          this.field_2 = new double[8];
  700.          this.field_3 = new double[8];
  701.          this.field_4 = new double[8];
  702.          this.field_5 = new double[8];
  703.          this.field_6 = new int[90][8];
  704.          this.field_7 = new int[90][8];
  705.          this.field_0[0] = (double)-1.0F;
  706.          this.field_1[0] = (double)-1.0F;
  707.          this.field_2[0] = (double)-1.0F;
  708.          this.field_0[1] = (double)1.0F;
  709.          this.field_1[1] = (double)-1.0F;
  710.          this.field_2[1] = (double)-1.0F;
  711.          this.field_0[2] = (double)1.0F;
  712.          this.field_1[2] = (double)1.0F;
  713.          this.field_2[2] = (double)-1.0F;
  714.          this.field_0[3] = (double)-1.0F;
  715.          this.field_1[3] = (double)1.0F;
  716.          this.field_2[3] = (double)-1.0F;
  717.          this.field_0[4] = (double)-1.0F;
  718.          this.field_1[4] = (double)-1.0F;
  719.          this.field_2[4] = (double)1.0F;
  720.          this.field_0[5] = (double)1.0F;
  721.          this.field_1[5] = (double)-1.0F;
  722.          this.field_2[5] = (double)1.0F;
  723.          this.field_0[6] = (double)1.0F;
  724.          this.field_1[6] = (double)1.0F;
  725.          this.field_2[6] = (double)1.0F;
  726.          this.field_0[7] = (double)-1.0F;
  727.          this.field_1[7] = (double)1.0F;
  728.          this.field_2[7] = (double)1.0F;
  729.          double var1 = (double)100.0F;
  730.          double var3 = (double)-100.0F;
  731.          double var5 = (double)100.0F;
  732.          double var7 = (double)-100.0F;
  733.          this.factor = (double)1.0F;
  734.          this.xMove = (double)0.0F;
  735.          this.yMove = (double)0.0F;
  736.          var9 = 0;
  737.  
  738.          do {
  739.             this.calculate(0, 0, var9);
  740.             int var10 = 0;
  741.  
  742.             do {
  743.                if (this.field_3[var10] < var1) {
  744.                   var1 = this.field_3[var10];
  745.                }
  746.  
  747.                if (this.field_3[var10] > var3) {
  748.                   var3 = this.field_3[var10];
  749.                }
  750.  
  751.                if (this.field_5[var10] < var5) {
  752.                   var5 = this.field_5[var10];
  753.                }
  754.  
  755.                if (this.field_5[var10] > var7) {
  756.                   var7 = this.field_5[var10];
  757.                }
  758.  
  759.                ++var10;
  760.             } while(var10 < 8);
  761.  
  762.             if (var9 == 0) {
  763.                var11 = (double)(this.rectSize + 2) / (this.field_0[6] - this.field_0[7]);
  764.             }
  765.  
  766.             ++var9;
  767.          } while(var9 < 90);
  768.  
  769.          this.xMove = var1 * (double)-1.0F;
  770.          this.yMove = var5 * (double)-1.0F;
  771.          this.factor = var11;
  772.          var9 = 0;
  773.  
  774.          do {
  775.             this.pict[var9].pict = null;
  776.             this.pict[var9].pictLoad = ((Applet)this).getImage(this.pict[var9].pictUrl);
  777.             this.tracker.addImage(this.pict[var9].pictLoad, var9);
  778.             ++var9;
  779.          } while(var9 < 4);
  780.  
  781.       }
  782.    }
  783. }
  784.