home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1998 October / DPPCPRO1098.ISO / Hotdog / files / Toolz.EXE / %MAINDIR%stools / Java Animator / classes / doganim.class (.txt) next >
Encoding:
Java Class File  |  1998-07-23  |  11.8 KB  |  746 lines

  1. import java.applet.Applet;
  2. import java.applet.AudioClip;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Event;
  8. import java.awt.Font;
  9. import java.awt.Graphics;
  10. import java.awt.Image;
  11. import java.awt.LayoutManager;
  12. import java.awt.MediaTracker;
  13. import java.awt.image.ImageObserver;
  14. import java.net.MalformedURLException;
  15. import java.net.URL;
  16. import java.util.Date;
  17. import java.util.Vector;
  18.  
  19. public class doganim extends Applet implements Runnable {
  20.    static final int STARTUP_ID = 0;
  21.    static final int BACKGROUND_ID = 1;
  22.    static final int ANIMATION_ID = 2;
  23.    MediaTracker tracker;
  24.    Thread engine;
  25.    Vector images;
  26.    Vector captions;
  27.    WrappingLabel wrapLabel;
  28.    URL baseDir;
  29.    int frameNum;
  30.    Integer frameNumKey;
  31.    int repeat = -1;
  32.    int currentLoop = 1;
  33.    int maxWidth;
  34.    int maxHeight;
  35.    int appWidth;
  36.    int appHeight;
  37.    Dimension bgSize;
  38.    boolean error;
  39.    boolean BigError;
  40.    boolean loaded;
  41.    Image startUpImage;
  42.    URL startUpImageURL;
  43.    Image backgroundImage;
  44.    URL backgroundImageURL;
  45.    Image offScrImage;
  46.    Graphics offScrGC;
  47.    URL soundURL;
  48.    AudioClip soundtrack;
  49.    int globalPause = 100;
  50.    boolean mousePause;
  51.    int moveEW;
  52.    int moveNS;
  53.    int currentX;
  54.    int currentY;
  55.    boolean bounce;
  56.    int bgR = 192;
  57.    int bgG = 192;
  58.    int bgB = 192;
  59.    int delay;
  60.    int timeout = -1000;
  61.    long wantsecs;
  62.    Vector destinations;
  63.    String SausCRC = "";
  64.    int CRCint;
  65.    final boolean debug;
  66.  
  67.    public void stop() {
  68.       this.dbg("stop");
  69.       if (this.engine != null && this.engine.isAlive()) {
  70.          this.engine.stop();
  71.       }
  72.  
  73.       this.engine = null;
  74.    }
  75.  
  76.    boolean fetchImages(Vector var1) {
  77.       this.dbg("Storing images");
  78.       int var3 = 0;
  79.  
  80.       try {
  81.          var3 = var1.size();
  82.       } catch (NullPointerException var8) {
  83.          this.msg("No images fed in!");
  84.          this.dbg("No images fed in!");
  85.          return false;
  86.       }
  87.  
  88.       for(int var2 = 0; var2 < var3; ++var2) {
  89.          Object var4 = var1.elementAt(var2);
  90.          if (var4 instanceof URL) {
  91.             URL var5 = (URL)var4;
  92.             Image var6 = ((Applet)this).getImage(var5);
  93.             this.tracker.addImage(var6, 2);
  94.             var1.setElementAt(var6, var2);
  95.          }
  96.       }
  97.  
  98.       try {
  99.          this.tracker.waitForID(2);
  100.       } catch (InterruptedException var7) {
  101.       }
  102.  
  103.       if (this.tracker.isErrorID(2)) {
  104.          return false;
  105.       } else {
  106.          for(int var9 = 0; var9 < var3; ++var9) {
  107.             this.updateMaxDims(this.getImageDimensions((Image)var1.elementAt(var9)));
  108.          }
  109.  
  110.          return true;
  111.       }
  112.    }
  113.  
  114.    Dimension getImageDimensions(Image var1) {
  115.       return new Dimension(var1.getWidth((ImageObserver)null), var1.getHeight((ImageObserver)null));
  116.    }
  117.  
  118.    private void msg(String var1) {
  119.       ((Applet)this).showStatus(var1);
  120.    }
  121.  
  122.    private boolean parseMovement(String var1) {
  123.       this.dbg("Reading in movement");
  124.       int var2 = 0;
  125.       int var3 = var1.indexOf(44, 0);
  126.       if (var3 == -1) {
  127.          return false;
  128.       } else {
  129.          this.moveEW = Integer.parseInt(var1.substring(0, var3));
  130.          var2 = var3 + 1;
  131.          var3 = var1.indexOf(44, var3 + 1);
  132.          if (var3 == -1) {
  133.             var3 = var1.length();
  134.          }
  135.  
  136.          this.moveNS = Integer.parseInt(var1.substring(var2, var3));
  137.          return true;
  138.       }
  139.    }
  140.  
  141.    private final int setFrameNum(int var1) {
  142.       this.frameNumKey = new Integer(this.frameNum = var1);
  143.       return this.frameNum;
  144.    }
  145.  
  146.    public void paint(Graphics var1) {
  147.       if (!this.error && this.loaded) {
  148.          if (this.images != null && this.images.size() > 0) {
  149.             if (this.frameNum < this.images.size()) {
  150.                if (this.backgroundImage == null) {
  151.                   this.offScrGC.fillRect(0, 0, this.appWidth, this.appHeight);
  152.                } else {
  153.                   this.offScrGC.fillRect(0, 0, this.appWidth, this.appHeight);
  154.                   this.offScrGC.drawImage(this.backgroundImage, 0, 0, this);
  155.                }
  156.  
  157.                Image var2 = (Image)this.images.elementAt(this.frameNum);
  158.                this.currentX += this.moveEW;
  159.                this.currentY += this.moveNS;
  160.                boolean var3 = false;
  161.                if (!this.bounce) {
  162.                   if (this.currentX > this.appWidth) {
  163.                      this.currentX = -this.maxWidth + 1;
  164.                      var3 = true;
  165.                   } else if (this.currentX < -this.maxWidth) {
  166.                      this.currentX = this.appWidth - 1;
  167.                      var3 = true;
  168.                   }
  169.  
  170.                   if (this.currentY > this.appHeight + this.maxHeight) {
  171.                      this.currentY = -this.maxHeight + 1;
  172.                      var3 = true;
  173.                   } else if (this.currentY < -this.maxHeight) {
  174.                      this.currentY = this.appHeight + this.maxHeight;
  175.                      var3 = true;
  176.                   }
  177.                } else {
  178.                   if (this.currentX > this.appWidth - this.maxWidth || this.currentX < 0) {
  179.                      this.moveEW = -this.moveEW;
  180.                      var3 = true;
  181.                   }
  182.  
  183.                   if (this.currentY > this.appHeight - this.maxHeight || this.currentY < 0) {
  184.                      this.moveNS = -this.moveNS;
  185.                      var3 = true;
  186.                   }
  187.                }
  188.  
  189.                if (var3) {
  190.                   try {
  191.                      Thread.sleep((long)this.delay);
  192.                      this.dbg("offedge " + this.delay);
  193.                   } catch (InterruptedException var8) {
  194.                   }
  195.                }
  196.  
  197.                this.offScrGC.drawImage(var2, this.currentX, this.currentY, this);
  198.                var1.drawImage(this.offScrImage, 0, 0, this);
  199.             } else {
  200.                if (this.backgroundImage == null) {
  201.                   var1.fillRect(0, 0, this.appWidth, this.appHeight);
  202.                }
  203.  
  204.                this.currentX += this.moveEW;
  205.                this.currentY += this.moveNS;
  206.                boolean var9 = false;
  207.                if (!this.bounce) {
  208.                   if (this.currentX > this.appWidth) {
  209.                      this.currentX = -this.maxWidth + 1;
  210.                      var9 = true;
  211.                   } else if (this.currentX < -this.maxWidth) {
  212.                      this.currentX = this.appWidth - 1;
  213.                      var9 = true;
  214.                   }
  215.  
  216.                   if (this.currentY > this.appHeight + this.maxHeight) {
  217.                      this.currentY = -this.maxHeight + 1;
  218.                      var9 = true;
  219.                   } else if (this.currentY < -this.maxHeight) {
  220.                      this.currentY = this.appHeight + this.maxHeight;
  221.                      var9 = true;
  222.                   }
  223.                } else {
  224.                   if (this.currentX > this.appWidth - this.maxWidth || this.currentX < 0) {
  225.                      this.moveEW = -this.moveEW;
  226.                      var9 = true;
  227.                   }
  228.  
  229.                   if (this.currentY > this.appHeight - this.maxHeight || this.currentY < 0) {
  230.                      this.moveNS = -this.moveNS;
  231.                      var9 = true;
  232.                   }
  233.                }
  234.  
  235.                if (var9) {
  236.                   try {
  237.                      Thread.sleep((long)this.delay);
  238.                      this.dbg("offedge2");
  239.                   } catch (InterruptedException var7) {
  240.                   }
  241.                }
  242.  
  243.                this.offScrGC.drawImage((Image)this.images.lastElement(), this.currentX, this.currentY, this);
  244.                var1.drawImage(this.offScrImage, 0, 0, this);
  245.             }
  246.          }
  247.       } else if (this.startUpImage != null) {
  248.          if (this.tracker.checkID(0)) {
  249.             var1.drawImage(this.startUpImage, 0, 0, this);
  250.          }
  251.       } else if (this.backgroundImage != null) {
  252.          if (this.tracker.checkID(1)) {
  253.             this.dbg("drawing background image");
  254.             var1.clearRect(0, 0, this.appWidth, this.appHeight);
  255.             var1.drawImage(this.backgroundImage, 0, 0, this);
  256.          }
  257.       } else {
  258.          var1.clearRect(0, 0, this.appWidth, this.appHeight);
  259.       }
  260.  
  261.       if (this.wrapLabel != null && this.captions != null && this.captions.size() > 0) {
  262.          Image var10 = (Image)this.images.elementAt(this.frameNum);
  263.          int var11 = var10.getWidth(this);
  264.          int var4 = var10.getHeight(this);
  265.          int var5 = (this.appWidth - var11) * this.appHeight;
  266.          int var6 = (this.appHeight - var4) * this.appWidth;
  267.          if (var5 > var6) {
  268.             this.wrapLabel.move(var11 + 2, 2);
  269.             this.wrapLabel.resize(this.appWidth - var11 - 4, this.appHeight - 4);
  270.          } else {
  271.             this.wrapLabel.move(2, var4 + 2);
  272.             this.wrapLabel.resize(this.appWidth - 4, this.appHeight - var4 - 4);
  273.          }
  274.  
  275.          this.wrapLabel.setText((String)this.captions.elementAt(this.frameNum));
  276.          this.dbg("Caption set : " + (String)this.captions.elementAt(this.frameNum));
  277.          this.wrapLabel.repaint();
  278.       }
  279.  
  280.    }
  281.  
  282.    private void generateCRC(String var1) {
  283.       int var3 = var1.length();
  284.  
  285.       for(int var2 = 0; var2 < var3; ++var2) {
  286.          this.CRCint += var1.charAt(var2);
  287.       }
  288.  
  289.    }
  290.  
  291.    private boolean parseStartPos(String var1) {
  292.       this.dbg("Reading in start position");
  293.       int var2 = 0;
  294.       int var3 = var1.indexOf(44, 0);
  295.       if (var3 == -1) {
  296.          return false;
  297.       } else {
  298.          this.currentX = Integer.parseInt(var1.substring(0, var3));
  299.          var2 = var3 + 1;
  300.          var3 = var1.indexOf(44, var3 + 1);
  301.          if (var3 == -1) {
  302.             var3 = var1.length();
  303.          }
  304.  
  305.          this.currentY = Integer.parseInt(var1.substring(var2, var3));
  306.          return true;
  307.       }
  308.    }
  309.  
  310.    void startPlaying() {
  311.       if (this.soundtrack != null) {
  312.          this.dbg("Playing soundtrack");
  313.          this.soundtrack.loop();
  314.       }
  315.  
  316.    }
  317.  
  318.    void stopPlaying() {
  319.       if (this.soundtrack != null) {
  320.          this.dbg("Stopping soundtrack");
  321.          this.soundtrack.stop();
  322.       }
  323.  
  324.    }
  325.  
  326.    private void dbg(String var1) {
  327.    }
  328.  
  329.    private Vector prepareImages(String var1) throws MalformedURLException {
  330.       this.msg("Fetching images");
  331.       Vector var2 = new Vector(1);
  332.  
  333.       int var4;
  334.       for(int var3 = 0; var3 < var1.length(); var3 = var4 + 1) {
  335.          var4 = var1.indexOf(44, var3);
  336.          if (var4 == -1) {
  337.             var4 = var1.length();
  338.          }
  339.  
  340.          String var5 = var1.substring(var3, var4);
  341.          var2.addElement(new URL(this.baseDir, var5));
  342.       }
  343.  
  344.       return var2;
  345.    }
  346.  
  347.    public void update(Graphics var1) {
  348.       this.paint(var1);
  349.    }
  350.  
  351.    private boolean checkCRC(String var1) {
  352.       String var2 = Integer.toString(this.CRCint);
  353.       int var4 = var2.length();
  354.       if (var4 > var1.length()) {
  355.          return false;
  356.       } else {
  357.          for(int var3 = 0; var3 < var4; ++var3) {
  358.             this.SausCRC = this.SausCRC + (char)(65 + Integer.parseInt(var2.substring(var3, var3 + 1)));
  359.          }
  360.  
  361.          this.dbg("generated CRC " + this.SausCRC + " " + this.SausCRC.equals(var1.substring(0, this.SausCRC.length())));
  362.          return this.SausCRC.equals(var1.substring(0, this.SausCRC.length()));
  363.       }
  364.    }
  365.  
  366.    private boolean parseHexBG(String var1) {
  367.       this.dbg("Ah - hex colors");
  368.       if (var1.length() < 6) {
  369.          return false;
  370.       } else {
  371.          this.bgR = Integer.parseInt(var1.substring(0, 2), 16);
  372.          this.bgG = Integer.parseInt(var1.substring(2, 4), 16);
  373.          this.bgB = Integer.parseInt(var1.substring(4, 6), 16);
  374.          return true;
  375.       }
  376.    }
  377.  
  378.    public void start() {
  379.       this.dbg("start");
  380.       if (this.engine == null) {
  381.          this.engine = new Thread(this);
  382.          this.engine.start();
  383.       }
  384.  
  385.    }
  386.  
  387.    public String getAppletInfo() {
  388.       return "DogAnim (c) Sausage Software. Coded by JavaGirl";
  389.    }
  390.  
  391.    private Vector prepareCaptions(String var1) {
  392.       this.msg("Fetching captions");
  393.       Vector var2 = new Vector(1);
  394.  
  395.       int var4;
  396.       for(int var3 = 0; var3 < var1.length(); var3 = var4 + 1) {
  397.          var4 = var1.indexOf(124, var3);
  398.          if (var4 == -1) {
  399.             var4 = var1.length();
  400.          }
  401.  
  402.          String var5 = var1.substring(var3, var4);
  403.          var2.addElement(var5);
  404.       }
  405.  
  406.       return var2;
  407.    }
  408.  
  409.    public void run() {
  410.       Thread var2 = Thread.currentThread();
  411.       var2.setPriority(1);
  412.       this.dbg("Animation running");
  413.       this.currentLoop = 1;
  414.       Date var1 = new Date();
  415.       if (this.timeout > 0) {
  416.          this.wantsecs = var1.getTime() + (long)this.timeout;
  417.       } else {
  418.          this.wantsecs = var1.getTime() - 1000L;
  419.       }
  420.  
  421.       if (!this.loaded) {
  422.          try {
  423.             if (this.BigError) {
  424.                this.msg("Applet parameters have changed, please recompile with HotDog");
  425.                this.error = true;
  426.                return;
  427.             }
  428.  
  429.             if (this.backgroundImageURL != null) {
  430.                this.backgroundImage = ((Applet)this).getImage(this.backgroundImageURL);
  431.                this.tracker.addImage(this.backgroundImage, 1);
  432.                this.tracker.waitForID(1);
  433.                if (this.tracker.isErrorID(1)) {
  434.                   this.msg("Error: unable to load background image");
  435.                }
  436.  
  437.                this.bgSize = this.getImageDimensions(this.backgroundImage);
  438.                ((Component)this).repaint();
  439.             }
  440.  
  441.             if (this.error) {
  442.                this.msg("Error: Can't find image files, check for correct path to image filename(s)");
  443.                return;
  444.             }
  445.  
  446.             this.dbg("About to create image" + this.appWidth + "," + this.appHeight);
  447.             this.offScrImage = ((Component)this).createImage(this.appWidth, this.appHeight);
  448.             this.offScrGC = this.offScrImage.getGraphics();
  449.             Color var3 = new Color(this.bgR, this.bgG, this.bgB);
  450.             this.offScrGC.setColor(var3);
  451.             ((Applet)this).resize(this.appWidth, this.appHeight);
  452.             if (this.soundURL != null && this.soundtrack == null) {
  453.                this.dbg("Getting " + this.soundURL);
  454.                this.soundtrack = ((Applet)this).getAudioClip(this.soundURL);
  455.                if (this.soundtrack == null) {
  456.                   this.msg("Error: Unable to load soundtrack, check for .au format: 8kHz;Mono;MuLaw compression");
  457.                }
  458.             }
  459.  
  460.             this.loaded = true;
  461.             this.error = false;
  462.          } catch (Exception var11) {
  463.             this.error = true;
  464.             ((Throwable)var11).printStackTrace();
  465.          }
  466.       }
  467.  
  468.       if (this.repeat > 0 || this.frameNum < this.images.size()) {
  469.          this.startPlaying();
  470.       }
  471.  
  472.       try {
  473.          if (this.images.size() > 0) {
  474.             for(; this.maxWidth > 0 && this.maxHeight > 0 && this.engine == var2; this.setFrameNum(this.frameNum + 1)) {
  475.                var1 = new Date();
  476.                long var14 = var1.getTime();
  477.                if (this.frameNum >= this.images.size()) {
  478.                   if (this.repeat == 0 || this.currentLoop >= this.repeat && this.repeat > 0 || var14 > this.wantsecs && this.timeout > 0) {
  479.                      return;
  480.                   }
  481.  
  482.                   this.setFrameNum(0);
  483.                   if (this.repeat > 0 && this.currentLoop < this.repeat) {
  484.                      ++this.currentLoop;
  485.                   }
  486.                }
  487.  
  488.                ((Component)this).repaint();
  489.  
  490.                try {
  491.                   Thread.sleep((long)this.globalPause);
  492.                } catch (InterruptedException var10) {
  493.                }
  494.             }
  495.  
  496.          }
  497.       } finally {
  498.          this.stopPlaying();
  499.       }
  500.    }
  501.  
  502.    private boolean parseBackground(String var1) {
  503.       this.dbg("Reading in background colors");
  504.       int var2 = 0;
  505.       int var3 = var1.length();
  506.       if (var1.charAt(0) == '#') {
  507.          return this.parseHexBG(var1.substring(1));
  508.       } else {
  509.          int var4 = var1.indexOf(44, 0);
  510.          if (var4 == -1) {
  511.             return false;
  512.          } else {
  513.             this.bgR = Integer.parseInt(var1.substring(0, var4));
  514.             var2 = var4 + 1;
  515.             if (var2 >= var3) {
  516.                return false;
  517.             } else {
  518.                var4 = var1.indexOf(44, var2);
  519.                if (var4 == -1) {
  520.                   return false;
  521.                } else {
  522.                   this.bgG = Integer.parseInt(var1.substring(var2, var4));
  523.                   var2 = var4 + 1;
  524.                   if (var2 >= var3) {
  525.                      return false;
  526.                   } else {
  527.                      var4 = var1.indexOf(44, var2);
  528.                      if (var4 == -1) {
  529.                         this.bgB = Integer.parseInt(var1.substring(var2));
  530.                      }
  531.  
  532.                      return true;
  533.                   }
  534.                }
  535.             }
  536.          }
  537.       }
  538.    }
  539.  
  540.    public void init() {
  541.       System.out.println(((Applet)this).getCodeBase());
  542.       this.dbg("Applet starting");
  543.       this.tracker = new MediaTracker(this);
  544.  
  545.       try {
  546.          this.baseDir = ((Applet)this).getDocumentBase();
  547.          String var1 = ((Applet)this).getParameter("REGUSER");
  548.          if (var1 == null) {
  549.             this.BigError = true;
  550.             return;
  551.          }
  552.  
  553.          this.dbg("User = " + var1);
  554.          this.generateCRC(var1);
  555.          var1 = ((Applet)this).getParameter("REPEAT");
  556.          if (var1 != null) {
  557.             this.repeat = Integer.parseInt(var1);
  558.          }
  559.  
  560.          this.dbg("REPEAT = " + this.repeat);
  561.          var1 = ((Applet)this).getParameter("SOUNDTRACK");
  562.          this.dbg("SOUNDTRACK = " + var1);
  563.          if (var1 != null) {
  564.             this.dbg("Found soundtrack param - " + var1);
  565.  
  566.             try {
  567.                this.soundURL = new URL(this.baseDir, var1);
  568.                this.dbg("SOUNDTRACK url = " + this.soundURL);
  569.             } catch (MalformedURLException var8) {
  570.                this.dbg("Soundtrack URL " + var1 + " is not a valid URL");
  571.             }
  572.          }
  573.  
  574.          var1 = ((Applet)this).getParameter("PAUSE");
  575.          this.dbg("PAUSE = " + var1);
  576.          if (var1 != null) {
  577.             this.globalPause = Integer.parseInt(var1);
  578.          }
  579.  
  580.          this.appWidth = ((Component)this).size().width;
  581.          this.appHeight = ((Component)this).size().height;
  582.          var1 = ((Applet)this).getParameter("BACKGROUND");
  583.          this.dbg("BACKGROUNDIMG = " + var1);
  584.          if (var1 != null) {
  585.             this.backgroundImageURL = new URL(this.baseDir, var1);
  586.          }
  587.  
  588.          var1 = ((Applet)this).getParameter("BG");
  589.          if (var1 != null && !this.parseBackground(var1)) {
  590.             this.msg("Background messed up, using default");
  591.             this.bgR = 170;
  592.             this.bgG = 170;
  593.             this.bgB = 170;
  594.          }
  595.  
  596.          this.dbg("BG = " + this.bgR + ", " + this.bgG + ", " + this.bgB);
  597.          var1 = ((Applet)this).getParameter("ENDDELAY");
  598.          this.dbg("ENDDELAY = " + var1);
  599.          if (var1 != null) {
  600.             this.delay = Integer.parseInt(var1);
  601.          }
  602.  
  603.          var1 = ((Applet)this).getParameter("IMAGELIST");
  604.          this.dbg("IMAGELIST = " + var1);
  605.          if (var1 == null) {
  606.             this.msg("No image list. Essential!");
  607.             this.error = true;
  608.             return;
  609.          }
  610.  
  611.          this.images = this.prepareImages(var1);
  612.          this.generateCRC(var1);
  613.          var1 = ((Applet)this).getParameter("CAPTIONLIST");
  614.          this.dbg("CAPTIONLIST = " + var1);
  615.          if (var1 != null) {
  616.             this.captions = this.prepareCaptions(var1);
  617.             String var2 = ((Applet)this).getParameter("FontName");
  618.             if (var2 == null) {
  619.                var2 = "Helvetica";
  620.             }
  621.  
  622.             int var4 = 0;
  623.  
  624.             try {
  625.                int var5 = Integer.parseInt(((Applet)this).getParameter("FontStyle"));
  626.                if ((var5 & 1) > 0) {
  627.                   var4 |= 1;
  628.                }
  629.  
  630.                if ((var5 & 2) > 0) {
  631.                   var4 |= 2;
  632.                }
  633.             } catch (NumberFormatException var7) {
  634.             }
  635.  
  636.             int var3;
  637.             try {
  638.                var3 = Integer.parseInt(((Applet)this).getParameter("FontSize"));
  639.             } catch (NumberFormatException var6) {
  640.                var3 = 12;
  641.             }
  642.  
  643.             this.wrapLabel = new WrappingLabel();
  644.             this.wrapLabel.setFont(new Font(var2, var4, var3));
  645.             ((Container)this).setLayout((LayoutManager)null);
  646.             ((Container)this).add(this.wrapLabel);
  647.          }
  648.  
  649.          var1 = ((Applet)this).getParameter("SERIALID");
  650.          if (var1 == null) {
  651.             this.BigError = true;
  652.             return;
  653.          }
  654.  
  655.          if (!this.checkCRC(var1)) {
  656.             this.BigError = true;
  657.             return;
  658.          }
  659.  
  660.          this.dbg("SERIALID " + var1);
  661.          if (!this.fetchImages(this.images)) {
  662.             this.error = true;
  663.          }
  664.  
  665.          this.dbg("MaxWidth = " + this.maxWidth + " maxheight = " + this.maxHeight);
  666.          if (this.appWidth == 0) {
  667.             if (this.bgSize.width > this.maxWidth) {
  668.                this.appWidth = this.bgSize.width;
  669.             } else {
  670.                this.appWidth = this.maxWidth;
  671.             }
  672.          }
  673.  
  674.          if (this.appHeight == 0) {
  675.             if (this.bgSize.height > this.maxHeight) {
  676.                this.appHeight = this.bgSize.height;
  677.             } else {
  678.                this.appHeight = this.maxHeight;
  679.             }
  680.          }
  681.  
  682.          var1 = ((Applet)this).getParameter("BOUNCE");
  683.          this.bounce = var1 == null ? true : var1.equalsIgnoreCase("yes") || var1.equalsIgnoreCase("true");
  684.          this.dbg("BOUNCE = " + var1);
  685.          var1 = ((Applet)this).getParameter("MOVE");
  686.          this.dbg("MOVE = " + var1);
  687.          if (var1 != null && !this.parseMovement(var1)) {
  688.             this.msg("Invalid movement param");
  689.             this.moveEW = 0;
  690.             this.moveNS = 0;
  691.          }
  692.       } catch (MalformedURLException var9) {
  693.       }
  694.  
  695.       this.setFrameNum(0);
  696.    }
  697.  
  698.    public boolean handleEvent(Event var1) {
  699.       if (var1.id != 501) {
  700.          if (var1.id == 503) {
  701.             if (this.BigError) {
  702.                this.msg("Bad User - Use HotDog to change the image list");
  703.             } else {
  704.                this.msg("Animation");
  705.             }
  706.  
  707.             return true;
  708.          } else {
  709.             return super.handleEvent(var1);
  710.          }
  711.       } else {
  712.          if (this.loaded) {
  713.             if (this.engine != null && this.engine.isAlive()) {
  714.                if (this.destinations != null && this.destinations.size() >= this.frameNum) {
  715.                   URL var2 = (URL)this.destinations.elementAt(this.frameNum);
  716.                   ((Applet)this).getAppletContext().showDocument(var2);
  717.                   this.msg("Switching pages to " + var2);
  718.                } else {
  719.                   if (this.mousePause) {
  720.                      this.engine.resume();
  721.                      this.startPlaying();
  722.                   } else {
  723.                      this.engine.suspend();
  724.                      this.stopPlaying();
  725.                   }
  726.  
  727.                   this.mousePause = !this.mousePause;
  728.                }
  729.             } else {
  730.                this.mousePause = false;
  731.                this.setFrameNum(0);
  732.                this.engine = new Thread(this);
  733.                this.engine.start();
  734.             }
  735.          }
  736.  
  737.          return true;
  738.       }
  739.    }
  740.  
  741.    private void updateMaxDims(Dimension var1) {
  742.       this.maxWidth = Math.max(var1.width, this.maxWidth);
  743.       this.maxHeight = Math.max(var1.height, this.maxHeight);
  744.    }
  745. }
  746.