home *** CD-ROM | disk | FTP | other *** search
/ MACD 7 / MACD7.iso / www / weirdscience / classes / banners.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-14  |  23.6 KB  |  1,327 lines

  1. import java.applet.Applet;
  2. import java.applet.AppletContext;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Event;
  7. import java.awt.Font;
  8. import java.awt.FontMetrics;
  9. import java.awt.Graphics;
  10. import java.awt.Image;
  11. import java.awt.MediaTracker;
  12. import java.awt.image.ImageObserver;
  13. import java.io.DataInputStream;
  14. import java.io.FilterInputStream;
  15. import java.io.IOException;
  16. import java.net.MalformedURLException;
  17. import java.net.URL;
  18. import java.util.StringTokenizer;
  19.  
  20. public class Banners extends Applet implements Runnable {
  21.    private String msgFile;
  22.    private String separator;
  23.    private int borderWidth;
  24.    private int reloadInterval;
  25.    private int xPos;
  26.    private int yPos;
  27.    private int frameDelay;
  28.    private int redV;
  29.    private int greenV;
  30.    private int blueV;
  31.    private int effectVal;
  32.    private int animVal;
  33.    private int dWidth;
  34.    private int dHeight;
  35.    private int dOffset;
  36.    private int numImages;
  37.    private int centerX;
  38.    private int centerY;
  39.    // $FF: renamed from: i int
  40.    private int field_0;
  41.    private long startTime;
  42.    private long startPause;
  43.    private long lastReloadTime;
  44.    private Color borderColor;
  45.    private Color borderHilite;
  46.    private Color borderShadow;
  47.    private Color animColor;
  48.    private Color fgColor;
  49.    private Thread animatorThread;
  50.    private boolean threadSuspended = false;
  51.    private boolean bgLoaded = false;
  52.    private boolean mouseOver = false;
  53.    private boolean initialized = false;
  54.    private boolean debug = false;
  55.    private Image offImage;
  56.    private Image offBgImage;
  57.    private Graphics offGraphics;
  58.    private Graphics offBgGraphics;
  59.    private MediaTracker imageTracker = new MediaTracker(this);
  60.    private static final int MSG_ENTER = 0;
  61.    private static final int MSG_EXIT = 1;
  62.    private static final int MSG_PAUSE = 2;
  63.    private static final int MSG_DONE = 3;
  64.    private static final int EFF_NONE = 0;
  65.    private static final int EFF_COLOR = 1;
  66.    private static final int ANI_NONE = 0;
  67.    private static final int ANI_SCROLLLEFT = 1;
  68.    private static final int ANI_SCROLLRIGHT = 2;
  69.    private static final int ANI_SCROLLUP = 3;
  70.    private static final int ANI_SCROLLDOWN = 4;
  71.    private static final int ANI_ZOOMIN = 5;
  72.    private static final int ANI_ZOOMOUT = 6;
  73.    private static final int ANI_FADE = 7;
  74.    private static final int ANI_WIPELEFT = 8;
  75.    private static final int ANI_WIPERIGHT = 9;
  76.    private static final int ANI_WIPEUP = 10;
  77.    private static final int ANI_WIPEDOWN = 11;
  78.    private static final int BG_NONE = 0;
  79.    private static final int BG_SQUEEZE = 1;
  80.    private static final int ALN_CENTER = 0;
  81.    private static final int ALN_LEFT = 1;
  82.    private static final int ALN_RIGHT = 2;
  83.    private static final int ALN_TOP = 3;
  84.    private static final int ALN_BOTTOM = 4;
  85.    private static final int MAX_ZOOM = 100;
  86.    private static final int MIN_ZOOM = 1;
  87.    private BannersMsg firstMsg;
  88.    private BannersMsg msg;
  89.    private BannersMsg def = new BannersMsg();
  90.  
  91.    public void init() {
  92.    }
  93.  
  94.    public String getAppletInfo() {
  95.       return "Banners 1.02, copyright 1996, Macromedia, Inc.";
  96.    }
  97.  
  98.    public void start() {
  99.       if (this.animatorThread == null) {
  100.          this.threadSuspended = false;
  101.          this.animatorThread = new Thread(this);
  102.          this.animatorThread.start();
  103.       }
  104.  
  105.    }
  106.  
  107.    public void stop() {
  108.       if (this.animatorThread != null && this.animatorThread.isAlive()) {
  109.          this.animatorThread.stop();
  110.       }
  111.  
  112.       this.animatorThread = null;
  113.       this.threadSuspended = true;
  114.    }
  115.  
  116.    public void run() {
  117.       while(!this.initialized) {
  118.          try {
  119.             Thread.sleep(50L);
  120.          } catch (InterruptedException var5) {
  121.          }
  122.       }
  123.  
  124.       if (this.firstMsg == null) {
  125.          this.raiseErr("No valid messages found, can't run...");
  126.       } else {
  127.          BannersMsg var3 = this.cueNextMessage();
  128.          this.startTime = System.currentTimeMillis();
  129.  
  130.          while(Thread.currentThread() == this.animatorThread) {
  131.             var3 = this.nextFrame(var3);
  132.             this.startTime += (long)this.frameDelay;
  133.             long var1 = this.startTime - System.currentTimeMillis();
  134.             if (var1 > 0L) {
  135.                try {
  136.                   Thread.sleep(var1);
  137.                } catch (InterruptedException var4) {
  138.                }
  139.             }
  140.          }
  141.  
  142.       }
  143.    }
  144.  
  145.    public void paint(Graphics var1) {
  146.       if (!this.initialized) {
  147.          this.initInstance(var1);
  148.       } else {
  149.          if (this.offImage != null) {
  150.             var1.drawImage(this.offBgImage, 0, 0, this);
  151.             var1.clipRect(this.dOffset, this.dOffset, this.dWidth, this.dHeight);
  152.             var1.drawImage(this.offImage, 0, 0, this);
  153.          }
  154.  
  155.       }
  156.    }
  157.  
  158.    private synchronized BannersMsg nextFrame(BannersMsg var1) {
  159.       ((Component)this).size();
  160.       this.offGraphics = this.offImage.getGraphics();
  161.       this.tryToLoadBgImage(var1, false);
  162.       this.offGraphics.drawImage(this.offBgImage, 0, 0, this);
  163.       if (var1.state == 0 && !this.applyAnimation(var1, var1.enter)) {
  164.          if (var1.pause > 0) {
  165.             var1.state = 2;
  166.             this.startPause = System.currentTimeMillis();
  167.          } else {
  168.             var1.state = 1;
  169.             this.cueAnimation(var1, var1.exit);
  170.          }
  171.       }
  172.  
  173.       if (var1.state == 2 && System.currentTimeMillis() - this.startPause > (long)var1.pause) {
  174.          var1.state = 1;
  175.          this.cueAnimation(var1, var1.exit);
  176.       }
  177.  
  178.       if (var1.state == 1 && !this.applyAnimation(var1, var1.exit)) {
  179.          var1.state = 3;
  180.       }
  181.  
  182.       this.applyEffect(var1);
  183.       if (var1.state == 3) {
  184.          return this.cueNextMessage();
  185.       } else {
  186.          this.offGraphics.setFont(var1.font);
  187.          if (var1.shadowColor != null) {
  188.             if (var1.emboss) {
  189.                this.offGraphics.setColor(Color.white);
  190.  
  191.                for(this.field_0 = 0; this.field_0 < var1.numLines; ++this.field_0) {
  192.                   this.offGraphics.drawString(var1.text[this.field_0], this.xPos - var1.shadowDepth, this.yPos - var1.shadowDepth + this.field_0 * var1.lineHeight);
  193.                }
  194.             }
  195.  
  196.             this.offGraphics.setColor(var1.shadowColor);
  197.  
  198.             for(this.field_0 = 0; this.field_0 < var1.numLines; ++this.field_0) {
  199.                this.offGraphics.drawString(var1.text[this.field_0], this.xPos + var1.shadowDepth, this.yPos + var1.shadowDepth + this.field_0 * var1.lineHeight);
  200.             }
  201.          }
  202.  
  203.          this.offGraphics.setColor(this.fgColor);
  204.  
  205.          for(this.field_0 = 0; this.field_0 < var1.numLines; ++this.field_0) {
  206.             this.offGraphics.drawString(var1.text[this.field_0], this.xPos, this.yPos + this.field_0 * var1.lineHeight);
  207.          }
  208.  
  209.          Graphics var2 = ((Component)this).getGraphics();
  210.          if (var2 != null) {
  211.             var2.clipRect(this.dOffset, this.dOffset, this.dWidth, this.dHeight);
  212.             var2.drawImage(this.offImage, 0, 0, this);
  213.          }
  214.  
  215.          return var1;
  216.       }
  217.    }
  218.  
  219.    private synchronized boolean applyAnimation(BannersMsg var1, int var2) {
  220.       boolean var3 = var1.state == 0;
  221.       boolean var4 = var1.state == 1;
  222.       boolean var5 = false;
  223.       switch (var2) {
  224.          case 0:
  225.             var5 = true;
  226.             break;
  227.          case 1:
  228.             if (var3 && this.xPos <= this.centerX && this.xPos > this.centerX - var1.cpf) {
  229.                var5 = true;
  230.             } else if (var4 && this.xPos < this.dOffset - var1.textWidth) {
  231.                var5 = true;
  232.             } else {
  233.                this.xPos -= var1.cpf;
  234.             }
  235.             break;
  236.          case 2:
  237.             if (var3 && this.xPos <= this.centerX && this.xPos > this.centerX - var1.cpf) {
  238.                var5 = true;
  239.             } else if (var4 && this.xPos > this.dWidth - this.dOffset) {
  240.                var5 = true;
  241.             } else {
  242.                this.xPos += var1.cpf;
  243.             }
  244.             break;
  245.          case 3:
  246.             if (var3 && this.yPos <= this.centerY && this.yPos > this.centerY - var1.cpf) {
  247.                var5 = true;
  248.             } else if (var4 && this.yPos < this.dOffset + var1.textAscent - var1.textHeight) {
  249.                var5 = true;
  250.             } else {
  251.                this.yPos -= var1.cpf;
  252.             }
  253.             break;
  254.          case 4:
  255.             if (var3 && this.yPos <= this.centerY && this.yPos > this.centerY - var1.cpf) {
  256.                var5 = true;
  257.             }
  258.  
  259.             if (var4 && this.yPos > this.dHeight + var1.textAscent - this.dOffset) {
  260.                var5 = true;
  261.             } else {
  262.                this.yPos += var1.cpf;
  263.             }
  264.             break;
  265.          case 5:
  266.          case 6:
  267.             if (var3 && this.animVal == var1.size) {
  268.                var5 = true;
  269.             } else {
  270.                if (var2 == 5) {
  271.                   this.animVal += var1.cpf;
  272.                } else {
  273.                   this.animVal -= var1.cpf;
  274.                }
  275.  
  276.                if (var3) {
  277.                   if (var2 == 5 && this.animVal >= var1.size || var2 == 6 && this.animVal <= var1.size) {
  278.                      this.animVal = var1.size;
  279.                   }
  280.                } else if (var4 && (var2 == 5 && this.animVal > 100 || var2 == 6 && this.animVal < 1)) {
  281.                   var5 = true;
  282.                }
  283.             }
  284.  
  285.             if (!var5) {
  286.                this.setupMsgFont(var1, this.animVal);
  287.                this.alignMessage(var1, var2);
  288.             }
  289.             break;
  290.          case 7:
  291.             if (var3) {
  292.                this.animColor = this.fadeColor(this.animColor, var1.textColor, var1.cpf);
  293.                if (this.animColor == null) {
  294.                   var5 = true;
  295.                   this.animColor = var1.textColor;
  296.                }
  297.             } else if (var4) {
  298.                this.animColor = this.fadeColor(this.animColor, var1.bgColor, var1.cpf);
  299.                if (this.animColor == null) {
  300.                   var5 = true;
  301.                   this.animColor = var1.bgColor;
  302.                }
  303.             }
  304.  
  305.             if (!var5) {
  306.                this.fgColor = this.animColor;
  307.             }
  308.             break;
  309.          case 8:
  310.             this.animVal -= var1.cpf;
  311.             if (this.animVal < 0) {
  312.                var5 = true;
  313.                this.animVal = var1.textWidth;
  314.             } else if (var3) {
  315.                this.offGraphics.clipRect(this.xPos + this.animVal, this.yPos - var1.textAscent, var1.textWidth - this.animVal, var1.textHeight);
  316.             } else if (var4) {
  317.                this.offGraphics.clipRect(this.xPos, this.yPos - var1.textAscent, this.animVal, var1.textHeight);
  318.             }
  319.             break;
  320.          case 9:
  321.             this.animVal += var1.cpf;
  322.             if (this.animVal > var1.textWidth) {
  323.                var5 = true;
  324.                this.animVal = 0;
  325.             } else if (var3) {
  326.                this.offGraphics.clipRect(this.xPos, this.yPos - var1.textAscent, this.animVal, var1.textHeight);
  327.             } else if (var4) {
  328.                this.offGraphics.clipRect(this.xPos + this.animVal, this.yPos - var1.textAscent, var1.textWidth - this.animVal, var1.textHeight);
  329.             }
  330.             break;
  331.          case 10:
  332.             this.animVal -= var1.cpf;
  333.             if (this.animVal < 0) {
  334.                var5 = true;
  335.                this.animVal = var1.textHeight;
  336.             } else if (var3) {
  337.                this.offGraphics.clipRect(this.xPos, this.yPos - var1.textAscent + this.animVal, var1.textWidth, var1.textHeight - this.animVal);
  338.             } else if (var4) {
  339.                this.offGraphics.clipRect(this.xPos, this.yPos - var1.textAscent, var1.textWidth, this.animVal);
  340.             }
  341.             break;
  342.          case 11:
  343.             this.animVal += var1.cpf;
  344.             if (this.animVal > var1.textHeight) {
  345.                var5 = true;
  346.                this.animVal = 0;
  347.             } else if (var3) {
  348.                this.offGraphics.clipRect(this.xPos, this.yPos - var1.textAscent, var1.textWidth, this.animVal);
  349.             } else if (var4) {
  350.                this.offGraphics.clipRect(this.xPos, this.yPos - var1.textAscent + this.animVal, var1.textWidth, var1.textHeight - this.animVal);
  351.             }
  352.       }
  353.  
  354.       return !var5;
  355.    }
  356.  
  357.    private synchronized void applyEffect(BannersMsg var1) {
  358.       switch (var1.effect) {
  359.          case 1:
  360.             if (this.effectVal > 4) {
  361.                this.redV = (int)(Math.random() * (double)255.0F);
  362.                this.greenV = (int)(Math.random() * (double)255.0F);
  363.                this.blueV = (int)(Math.random() * (double)255.0F);
  364.                this.fgColor = new Color(this.redV, this.greenV, this.blueV);
  365.                this.effectVal = 0;
  366.             }
  367.  
  368.             ++this.effectVal;
  369.             return;
  370.          default:
  371.       }
  372.    }
  373.  
  374.    private void initInstance(Graphics var1) {
  375.       if (this.offImage == null) {
  376.          Dimension var2 = ((Component)this).size();
  377.          this.offImage = ((Component)this).createImage(var2.width, var2.height);
  378.          this.offBgImage = ((Component)this).createImage(var2.width, var2.height);
  379.          this.offBgGraphics = this.offBgImage.getGraphics();
  380.          String var3 = ((Applet)this).getParameter("bgColor");
  381.          if (var3 == null) {
  382.             this.def.bgColor = ((Component)this).getBackground();
  383.          } else {
  384.             this.def.bgColor = this.convertColor(var3);
  385.          }
  386.  
  387.          this.offBgGraphics.setColor(this.def.bgColor);
  388.          this.offBgGraphics.fillRect(0, 0, var2.width, var2.height);
  389.          var1.drawImage(this.offBgImage, 0, 0, this);
  390.          this.parseParams();
  391.          int var4 = this.borderColor.getRed();
  392.          int var5 = this.borderColor.getGreen();
  393.          int var6 = this.borderColor.getBlue();
  394.          this.borderHilite = new Color(var4 + 40 < 256 ? var4 + 40 : 255, var5 + 40 < 256 ? var5 + 40 : 255, var6 + 40 < 256 ? var6 + 40 : 255);
  395.          this.borderShadow = new Color(var4 - 40 >= 0 ? var4 - 40 : 0, var5 - 40 >= 0 ? var5 - 40 : 0, var6 - 40 >= 0 ? var6 - 40 : 0);
  396.          this.dOffset = 3 * this.borderWidth;
  397.          this.dWidth = var2.width - 2 * this.dOffset;
  398.          this.dHeight = var2.height - 2 * this.dOffset;
  399.          this.initialized = true;
  400.       }
  401.    }
  402.  
  403.    private synchronized BannersMsg cueNextMessage() {
  404.       if (this.reloadInterval > 0 && this.msgFile != null && System.currentTimeMillis() - this.lastReloadTime > (long)this.reloadInterval) {
  405.          this.parseMessages(this.def, this.getMsgsFromFile(this.msgFile));
  406.       }
  407.  
  408.       if (this.firstMsg == null) {
  409.          this.raiseErr("No valid messages were found, applet can't run...");
  410.          return null;
  411.       } else {
  412.          boolean var1 = this.msg == null;
  413.          if (var1) {
  414.             this.msg = this.firstMsg;
  415.          }
  416.  
  417.          Object var2 = null;
  418.          if (var1 || this.msg.repeatCnt >= this.msg.repeat) {
  419.             if (!var1) {
  420.                if (this.msg.bgExit != 0) {
  421.                   switch (this.msg.bgExit) {
  422.                      case 1:
  423.                         Graphics var3 = ((Component)this).getGraphics();
  424.                         if (var3 != null) {
  425.                            this.bgTransition(var3, this.offImage, this.def.bgColor, "out");
  426.                         }
  427.                   }
  428.                }
  429.  
  430.                this.msg = this.msg.next;
  431.                if (this.msg == null) {
  432.                   this.msg = this.firstMsg;
  433.                }
  434.             }
  435.  
  436.             this.msg.repeatCnt = 0;
  437.             this.frameDelay = this.msg.fps > 0 ? 1000 / this.msg.fps : 100;
  438.             this.offBgGraphics = this.offBgImage.getGraphics();
  439.             switch (this.msg.bgEnter) {
  440.                case 0:
  441.                   this.drawBackground(this.offBgGraphics, this.msg, true);
  442.                   Graphics var5 = ((Component)this).getGraphics();
  443.                   if (var5 != null) {
  444.                      var5.drawImage(this.offBgImage, 0, 0, this);
  445.                   }
  446.                   break;
  447.                case 1:
  448.                   this.drawBackground(this.offBgGraphics, this.msg, true);
  449.                   Graphics var4 = ((Component)this).getGraphics();
  450.                   if (var4 != null) {
  451.                      this.bgTransition(var4, this.offBgImage, this.def.bgColor, "in");
  452.                   }
  453.             }
  454.  
  455.             this.setupMsgFont(this.msg, this.msg.size);
  456.             this.centerX = this.dOffset + (this.dWidth - this.msg.textWidth) / 2;
  457.             this.centerY = this.dOffset + (this.dHeight - this.msg.textHeight) / 2 + this.msg.textAscent;
  458.             if (this.mouseOver && this.msg.url != null) {
  459.                ((Applet)this).showStatus(this.msg.url);
  460.             } else {
  461.                ((Applet)this).showStatus("");
  462.             }
  463.          }
  464.  
  465.          ++this.msg.repeatCnt;
  466.          this.msg.state = 0;
  467.          this.cueAnimation(this.msg, this.msg.enter);
  468.          return this.msg;
  469.       }
  470.    }
  471.  
  472.    private void cueAnimation(BannersMsg var1, int var2) {
  473.       boolean var3 = var1.state == 0;
  474.       boolean var4 = var1.state == 1;
  475.       if (var3) {
  476.          switch (var2) {
  477.             case 1:
  478.                this.xPos = this.dOffset + this.dWidth;
  479.                break;
  480.             case 2:
  481.                this.xPos = this.dOffset - var1.textWidth;
  482.                break;
  483.             case 3:
  484.                this.yPos = this.dOffset + this.dHeight + var1.textAscent;
  485.                break;
  486.             case 4:
  487.                this.yPos = this.dOffset - var1.textHeight + var1.textAscent;
  488.          }
  489.  
  490.          this.alignMessage(var1, var2);
  491.       }
  492.  
  493.       switch (var2) {
  494.          case 5:
  495.          case 6:
  496.             if (var3) {
  497.                if (var2 == 5) {
  498.                   this.animVal = 1;
  499.                } else {
  500.                   this.animVal = 100;
  501.                }
  502.             } else if (var4) {
  503.                this.animVal = var1.size;
  504.             }
  505.  
  506.             this.setupMsgFont(var1, this.animVal);
  507.             this.alignMessage(var1, var2);
  508.             break;
  509.          case 7:
  510.             if (var3) {
  511.                this.animColor = var1.bgColor;
  512.             } else if (var4) {
  513.                this.animColor = var1.textColor;
  514.             }
  515.             break;
  516.          case 8:
  517.             this.animVal = var1.textWidth;
  518.             break;
  519.          case 9:
  520.          case 11:
  521.             this.animVal = 0;
  522.             break;
  523.          case 10:
  524.             this.animVal = var1.textHeight;
  525.       }
  526.  
  527.       this.fgColor = var1.textColor;
  528.    }
  529.  
  530.    private void alignMessage(BannersMsg var1, int var2) {
  531.       if (var2 != 1 && var2 != 2) {
  532.          if (var1.align == 1) {
  533.             this.xPos = this.dOffset;
  534.          } else if (var1.align == 2) {
  535.             this.xPos = this.dOffset + this.dWidth - var1.textWidth;
  536.          } else {
  537.             this.xPos = this.dOffset + (this.dWidth - var1.textWidth) / 2;
  538.          }
  539.       }
  540.  
  541.       if (var2 != 3 && var2 != 4) {
  542.          if (var1.align == 3) {
  543.             this.yPos = this.dOffset + var1.textAscent;
  544.             return;
  545.          }
  546.  
  547.          if (var1.align == 4) {
  548.             this.yPos = this.dOffset + this.dHeight - var1.textHeight + var1.textAscent;
  549.             return;
  550.          }
  551.  
  552.          this.yPos = this.dOffset + (this.dHeight - var1.textHeight) / 2 + var1.textAscent;
  553.       }
  554.  
  555.    }
  556.  
  557.    private void setupMsgFont(BannersMsg var1, int var2) {
  558.       var1.font = new Font(var1.fontName, var1.style, var2);
  559.       FontMetrics var3 = ((Component)this).getFontMetrics(var1.font);
  560.       var1.textAscent = var3.getAscent();
  561.       var1.textDescent = var3.getDescent();
  562.       var1.lineHeight = var3.getHeight();
  563.       var1.textWidth = 0;
  564.  
  565.       for(this.field_0 = 0; this.field_0 < var1.numLines; ++this.field_0) {
  566.          var1.textWidth = Math.max(var1.textWidth, var3.stringWidth(var1.text[this.field_0]));
  567.       }
  568.  
  569.       var1.textHeight = var1.numLines * var1.lineHeight - var3.getLeading();
  570.       if (var1.shadowColor != null) {
  571.          if (var1.emboss) {
  572.             this.field_0 = 2;
  573.          } else {
  574.             this.field_0 = 1;
  575.          }
  576.  
  577.          var1.textWidth += this.field_0 * var1.shadowDepth;
  578.          var1.textHeight += this.field_0 * var1.shadowDepth;
  579.          var1.textDescent += this.field_0 * var1.shadowDepth;
  580.       }
  581.  
  582.    }
  583.  
  584.    public boolean mouseDown(Event var1, int var2, int var3) {
  585.       if (!var1.controlDown() && !var1.shiftDown()) {
  586.          if (this.msg != null && this.msg.url != null) {
  587.             Object var4 = null;
  588.  
  589.             try {
  590.                var7 = new URL(((Applet)this).getDocumentBase(), this.msg.url);
  591.             } catch (MalformedURLException var6) {
  592.                this.raiseErr("Unable to get url '" + this.msg.url + "' relative to '" + ((Applet)this).getDocumentBase() + "'");
  593.                return false;
  594.             }
  595.  
  596.             AppletContext var5 = ((Applet)this).getAppletContext();
  597.             if (this.msg.urlTargetFrame == null) {
  598.                var5.showDocument(var7, "_parent");
  599.             } else {
  600.                var5.showDocument(var7, this.msg.urlTargetFrame);
  601.             }
  602.          }
  603.       } else {
  604.          if (this.threadSuspended) {
  605.             ((Applet)this).showStatus("");
  606.             this.animatorThread.resume();
  607.          } else {
  608.             ((Applet)this).showStatus("Applet paused, shift-click to resume");
  609.             this.animatorThread.suspend();
  610.          }
  611.  
  612.          this.threadSuspended = !this.threadSuspended;
  613.       }
  614.  
  615.       return false;
  616.    }
  617.  
  618.    public boolean mouseEnter(Event var1, int var2, int var3) {
  619.       this.mouseOver = true;
  620.       if (this.msg != null && this.msg.url != null) {
  621.          ((Applet)this).showStatus(this.msg.url);
  622.          return true;
  623.       } else {
  624.          return false;
  625.       }
  626.    }
  627.  
  628.    public boolean mouseExit(Event var1, int var2, int var3) {
  629.       this.mouseOver = false;
  630.       return false;
  631.    }
  632.  
  633.    private void drawBackground(Graphics var1, BannersMsg var2, boolean var3) {
  634.       this.drawBorder(var1);
  635.       var1.clipRect(this.dOffset, this.dOffset, this.dWidth, this.dHeight);
  636.       var1.setColor(var2.bgColor);
  637.       Dimension var4 = ((Component)this).size();
  638.       var1.fillRect(0, 0, var4.width, var4.height);
  639.       if (var2.bgImageURL != null) {
  640.          boolean var5 = this.tryToLoadBgImage(var2, true);
  641.          if (var3) {
  642.             for(; !var5; var5 = this.tryToLoadBgImage(var2, true)) {
  643.                try {
  644.                   Thread.sleep(50L);
  645.                } catch (InterruptedException var6) {
  646.                }
  647.             }
  648.          }
  649.       }
  650.  
  651.    }
  652.  
  653.    private boolean tryToLoadBgImage(BannersMsg var1, boolean var2) {
  654.       if (var1.bgImage != null && (!var1.bgLoaded || var2)) {
  655.          if ((this.imageTracker.statusID(var1.imageNum, true) & 8) == 0) {
  656.             if (this.imageTracker.isErrorID(var1.imageNum)) {
  657.                this.raiseErr("Error loading " + var1.bgImageURL + ", skipping...");
  658.                var1.bgLoaded = true;
  659.                this.startTime = System.currentTimeMillis();
  660.                return true;
  661.             } else {
  662.                ((Applet)this).showStatus("Loading background " + var1.bgImageURL + "...");
  663.                return false;
  664.             }
  665.          } else {
  666.             Image var3 = var1.bgImage;
  667.             int var6 = var3.getWidth((ImageObserver)null);
  668.             int var7 = var3.getHeight((ImageObserver)null);
  669.             Graphics var8 = this.offBgImage.getGraphics();
  670.             var8.clipRect(this.dOffset, this.dOffset, this.dWidth, this.dHeight);
  671.             if (var6 > 0 && var7 > 0) {
  672.                for(int var4 = this.dOffset; var4 < this.dWidth; var4 += var6) {
  673.                   for(int var5 = this.dOffset; var5 < this.dWidth; var5 += var7) {
  674.                      var8.drawImage(var3, var4, var5, this);
  675.                   }
  676.                }
  677.             }
  678.  
  679.             ((Applet)this).showStatus("");
  680.             var1.bgLoaded = true;
  681.             this.startTime = System.currentTimeMillis();
  682.             return true;
  683.          }
  684.       } else {
  685.          return false;
  686.       }
  687.    }
  688.  
  689.    private void drawBorder(Graphics var1) {
  690.       if (this.borderWidth >= 1) {
  691.          Dimension var2 = ((Component)this).size();
  692.          int var3 = this.borderWidth;
  693.          int var4 = 2 * var3;
  694.          var1.clipRect(0, 0, var2.width, var2.height);
  695.          drawRaisedRect(var1, 0, 0, var2.width - 1, var2.height - 1, var3, this.borderHilite, this.borderShadow, true);
  696.          var1.setColor(this.borderColor);
  697.          var1.fillRect(var3, var3, var2.width - var4, var2.height - var4);
  698.          drawRaisedRect(var1, var4, var4, var2.width - var4 - 1, var2.height - var4 - 1, var4, this.borderHilite, this.borderShadow, false);
  699.       }
  700.    }
  701.  
  702.    private static void drawRaisedRect(Graphics var0, int var1, int var2, int var3, int var4, int var5, Color var6, Color var7, boolean var8) {
  703.       for(int var9 = 0; var9 < var5; ++var9) {
  704.          if (var8) {
  705.             var0.setColor(var6);
  706.          } else {
  707.             var0.setColor(var7);
  708.          }
  709.  
  710.          var0.drawLine(var1 + var9, var2 + var9, var3 - var9, var2 + var9);
  711.          var0.drawLine(var1 + var9, var2 + var9, var1 + var9, var4 - var9);
  712.          if (var8) {
  713.             var0.setColor(var7);
  714.          } else {
  715.             var0.setColor(var6);
  716.          }
  717.  
  718.          var0.drawLine(var3 - var9, var2 + var9, var3 - var9, var4 - var9);
  719.          var0.drawLine(var1 + var9, var4 - var9, var3 - var9, var4 - var9);
  720.       }
  721.  
  722.    }
  723.  
  724.    private void bgTransition(Graphics var1, Image var2, Color var3, String var4) {
  725.       Dimension var5 = ((Component)this).size();
  726.       Image var8 = ((Component)this).createImage(2 * var5.width, var5.height);
  727.       Graphics var9 = var8.getGraphics();
  728.       var9.drawImage(var2, var5.width, 0, this);
  729.       if (var4.equals("out")) {
  730.          for(double var10 = 0.9; var10 >= (double)0.0F; var10 -= 0.1) {
  731.             this.shrink(var1, var8, var3, var5, var5.width, 10, (double)1.0F, var10);
  732.          }
  733.  
  734.       } else {
  735.          if (var4.equals("in")) {
  736.             for(double var6 = 0.1; var6 <= 0.95; var6 += 0.1) {
  737.                this.shrink(var1, var8, var3, var5, var5.width, 10, (double)1.0F, var6);
  738.             }
  739.  
  740.             var1.drawImage(var2, 0, 0, this);
  741.          }
  742.  
  743.       }
  744.    }
  745.  
  746.    private void shrink(Graphics var1, Image var2, Color var3, Dimension var4, int var5, int var6, double var7, double var9) {
  747.       Graphics var11 = var2.getGraphics();
  748.       int var12 = 0;
  749.       int var13 = 0;
  750.       double var14 = ((double)1.0F - var7) / (double)(var4.height / var6);
  751.       int var16 = (int)Math.round((double)var6 * var9);
  752.       int var17 = (int)Math.round(((double)var4.height - (double)var4.height * var9) / (double)2.0F);
  753.       int var18 = (int)Math.round((double)var5 * var7);
  754.       int var19 = 0;
  755.       var7 = (double)1.0F;
  756.       var11.setColor(var3);
  757.       var11.fillRect(0, 0, var4.width, var4.height);
  758.  
  759.       for(int var20 = 0; var20 < var4.height; var20 += var6) {
  760.          var12 = 0;
  761.  
  762.          for(int var21 = var4.width; var21 < 2 * var4.width; var21 += var5) {
  763.             var11.copyArea(var21, var20, var18, var16, var19 - var12 - var4.width, var17 - var13);
  764.             var12 += var5 - var18;
  765.          }
  766.  
  767.          var13 += var6 - var16;
  768.          var7 -= var14;
  769.          var19 = (int)Math.round(((double)var4.width - (double)var4.width * var7) / (double)2.0F);
  770.       }
  771.  
  772.       var1.drawImage(var2, 0, 0, this);
  773.  
  774.       try {
  775.          Thread.sleep(10L);
  776.       } catch (InterruptedException var22) {
  777.       }
  778.    }
  779.  
  780.    private boolean parseParams() {
  781.       Object var2 = null;
  782.       this.separator = ((Applet)this).getParameter("separator");
  783.       if (this.separator == null) {
  784.          this.separator = "|";
  785.       }
  786.  
  787.       String var5 = ((Applet)this).getParameter("messages");
  788.       if (var5 == null) {
  789.          var5 = "Banners";
  790.       }
  791.  
  792.       this.msgFile = ((Applet)this).getParameter("msgFile");
  793.       this.reloadInterval = this.convertTime("reloadInterval", ((Applet)this).getParameter("reloadInterval"), (double)0.0F);
  794.       this.def.url = ((Applet)this).getParameter("url");
  795.       this.def.urlTargetFrame = ((Applet)this).getParameter("urlTargetFrame");
  796.       this.def.fontName = ((Applet)this).getParameter("font");
  797.       if (this.def.fontName == null) {
  798.          this.def.fontName = "TimesRoman";
  799.       }
  800.  
  801.       this.def.size = this.convertInt("size", ((Applet)this).getParameter("size"), 36);
  802.       this.def.style = this.convertStyle(((Applet)this).getParameter("style"));
  803.       this.def.textColor = this.convertColor(((Applet)this).getParameter("textColor"));
  804.       String var1 = ((Applet)this).getParameter("shadowColor");
  805.       if (var1 == null) {
  806.          this.def.shadowColor = null;
  807.       } else {
  808.          this.def.shadowColor = this.convertColor(var1);
  809.       }
  810.  
  811.       this.def.shadowDepth = this.convertInt("shadowDepth", ((Applet)this).getParameter("shadowDepth"), 2);
  812.       var1 = ((Applet)this).getParameter("bgColor");
  813.       if (var1 == null) {
  814.          this.def.bgColor = ((Component)this).getBackground();
  815.       } else {
  816.          this.def.bgColor = this.convertColor(var1);
  817.       }
  818.  
  819.       this.def.bgImageURL = ((Applet)this).getParameter("bgImage");
  820.       if (this.def.bgImageURL != null) {
  821.          this.def.bgImage = ((Applet)this).getImage(((Applet)this).getDocumentBase(), this.def.bgImageURL);
  822.          this.imageTracker.addImage(this.def.bgImage, 0);
  823.          this.def.imageNum = 0;
  824.          ++this.numImages;
  825.       }
  826.  
  827.       this.def.bgEnter = this.convertBgAnimation(((Applet)this).getParameter("bgEnter"));
  828.       this.def.bgExit = this.convertBgAnimation(((Applet)this).getParameter("bgExit"));
  829.       this.def.fps = this.convertInt("fps", ((Applet)this).getParameter("fps"), 15);
  830.       this.def.cpf = this.convertInt("cpf", ((Applet)this).getParameter("cpf"), 2);
  831.       this.def.enter = this.convertAnimation(((Applet)this).getParameter("enter"));
  832.       this.def.exit = this.convertAnimation(((Applet)this).getParameter("exit"));
  833.       this.def.pause = this.convertTime("pause", ((Applet)this).getParameter("pause"), (double)0.0F);
  834.       this.def.align = this.convertAlign(((Applet)this).getParameter("align"));
  835.       this.def.effect = this.convertEffect(((Applet)this).getParameter("effect"));
  836.       this.borderWidth = this.convertInt("borderWidth", ((Applet)this).getParameter("borderWidth"), 0);
  837.       Dimension var3 = ((Component)this).size();
  838.       if (this.borderWidth * 6 > var3.width || this.borderWidth * 6 > var3.height) {
  839.          this.raiseErr("borderWidth too large, using 2...");
  840.          this.borderWidth = 2;
  841.       }
  842.  
  843.       this.borderColor = this.convertColor(((Applet)this).getParameter("borderColor"));
  844.       this.def.emboss = this.convertEmboss(((Applet)this).getParameter("emboss"), this.def);
  845.       if (this.msgFile != null) {
  846.          var5 = this.getMsgsFromFile(this.msgFile);
  847.       }
  848.  
  849.       this.parseMessages(this.def, var5);
  850.       return true;
  851.    }
  852.  
  853.    private synchronized String getMsgsFromFile(String var1) {
  854.       Object var2 = null;
  855.       Object var3 = null;
  856.       ((Applet)this).showStatus("Getting messages");
  857.  
  858.       try {
  859.          var10 = new URL(((Applet)this).getDocumentBase(), var1);
  860.       } catch (MalformedURLException var7) {
  861.          this.raiseErr("Unable to get msgFile '" + var1 + "' relative to '" + ((Applet)this).getDocumentBase() + "'");
  862.          return null;
  863.       }
  864.  
  865.       try {
  866.          var9 = new DataInputStream(var10.openStream());
  867.       } catch (IOException var6) {
  868.          this.raiseErr("Unable to open msgfile '" + var10.toString() + "'");
  869.          return null;
  870.       }
  871.  
  872.       StringBuffer var4 = new StringBuffer();
  873.  
  874.       try {
  875.          for(String var5 = var9.readLine(); var5 != null; var5 = var9.readLine()) {
  876.             var4.append(var5);
  877.          }
  878.  
  879.          ((FilterInputStream)var9).close();
  880.       } catch (IOException var8) {
  881.          this.raiseErr("Problem encountered while reading msgFile '" + var10.toString() + "'");
  882.          return null;
  883.       }
  884.  
  885.       ((Applet)this).showStatus("done");
  886.       this.lastReloadTime = System.currentTimeMillis();
  887.       return var4.toString();
  888.    }
  889.  
  890.    private synchronized void parseMessages(BannersMsg var1, String var2) {
  891.       if (var2 != null) {
  892.          StringTokenizer var3 = new StringTokenizer(var2, this.separator);
  893.          Object var4 = null;
  894.          Object var5 = null;
  895.          String var7 = null;
  896.          Object var9 = null;
  897.          if (this.firstMsg != null) {
  898.             this.msg = this.firstMsg;
  899.  
  900.             for(BannersMsg var15 = this.msg.next; var15 != null; this.msg.next = null) {
  901.                var15 = this.msg.next;
  902.             }
  903.  
  904.             this.firstMsg = null;
  905.          }
  906.  
  907.          for(this.msg = null; var3.hasMoreTokens(); ++this.field_0) {
  908.             BannersMsg var16 = new BannersMsg();
  909.             if (this.firstMsg == null) {
  910.                this.firstMsg = var16;
  911.                this.msg = var16;
  912.             } else {
  913.                this.msg.next = var16;
  914.                this.msg = var16;
  915.             }
  916.  
  917.             StringTokenizer var13 = new StringTokenizer(var3.nextToken(), "{");
  918.             String var8 = new String(var13.nextToken());
  919.             if (var8.indexOf(10) >= 0) {
  920.                var8 = var8.replace('\n', ' ');
  921.             }
  922.  
  923.             if (var8.indexOf(13) >= 0) {
  924.                var8 = var8.replace('\r', ' ');
  925.             }
  926.  
  927.             int var12 = var8.length();
  928.             int var10 = 0;
  929.             int var11 = var8.indexOf("\\n");
  930.             this.msg.numLines = 1;
  931.             if (var11 == -1) {
  932.                this.msg.text[0] = var8;
  933.             } else {
  934.                if (var11 == 0) {
  935.                   this.msg.text[0] = "";
  936.                } else {
  937.                   this.msg.text[0] = var8.substring(0, var11);
  938.                }
  939.  
  940.                while(var11 >= 0 && var11 < var12) {
  941.                   var10 = var11 + 2;
  942.                   if (var10 >= var12) {
  943.                      this.msg.text[this.msg.numLines++] = "";
  944.                      break;
  945.                   }
  946.  
  947.                   var11 = var8.indexOf("\\n", var10);
  948.                   if (var11 != -1) {
  949.                      if (var10 == var11) {
  950.                         this.msg.text[this.msg.numLines++] = "";
  951.                      } else {
  952.                         this.msg.text[this.msg.numLines++] = var8.substring(var10, var11);
  953.                      }
  954.                   } else {
  955.                      this.msg.text[this.msg.numLines++] = var8.substring(var10, var12);
  956.                   }
  957.                }
  958.             }
  959.  
  960.             this.msg.repeat = 1;
  961.             this.msg.url = var1.url;
  962.             this.msg.urlTargetFrame = var1.urlTargetFrame;
  963.             this.msg.fontName = var1.fontName;
  964.             this.msg.style = var1.style;
  965.             this.msg.size = var1.size;
  966.             this.msg.textColor = var1.textColor;
  967.             this.msg.shadowColor = var1.shadowColor;
  968.             this.msg.shadowDepth = var1.shadowDepth;
  969.             this.msg.bgColor = var1.bgColor;
  970.             this.msg.fps = var1.fps;
  971.             this.msg.fps = var1.fps;
  972.             this.msg.cpf = var1.cpf;
  973.             this.msg.enter = var1.enter;
  974.             this.msg.exit = var1.exit;
  975.             this.msg.pause = var1.pause;
  976.             this.msg.align = var1.align;
  977.             this.msg.effect = var1.effect;
  978.             this.msg.emboss = var1.emboss;
  979.             this.msg.bgImage = var1.bgImage;
  980.             this.msg.bgImageURL = var1.bgImageURL;
  981.             this.msg.bgEnter = var1.bgEnter;
  982.             this.msg.bgExit = var1.bgExit;
  983.             this.msg.imageNum = var1.imageNum;
  984.  
  985.             while(var13.hasMoreTokens()) {
  986.                StringTokenizer var14 = new StringTokenizer(var13.nextToken("{"));
  987.                String var6 = var14.nextToken("=").trim().toLowerCase();
  988.                if (var14.hasMoreTokens()) {
  989.                   var7 = var14.nextToken("}").trim();
  990.                }
  991.  
  992.                if (var6.equals("url")) {
  993.                   this.msg.url = var7;
  994.                } else if (var6.equals("urltargetframe")) {
  995.                   this.msg.urlTargetFrame = var7;
  996.                } else if (var6.equals("enter")) {
  997.                   this.msg.enter = this.convertAnimation(var7);
  998.                } else if (var6.equals("exit")) {
  999.                   this.msg.exit = this.convertAnimation(var7);
  1000.                } else if (var6.equals("pause")) {
  1001.                   this.msg.pause = this.convertTime("pause", var7, (double)0.0F);
  1002.                } else if (var6.equals("repeat")) {
  1003.                   this.msg.repeat = this.convertInt("repeat", var7, 0);
  1004.                } else if (var6.equals("font")) {
  1005.                   this.msg.fontName = var7;
  1006.                } else if (var6.equals("size")) {
  1007.                   this.msg.size = this.convertInt("size", var7, 36);
  1008.                } else if (var6.equals("style")) {
  1009.                   this.msg.style = this.convertStyle(var7);
  1010.                } else if (var6.equals("textcolor")) {
  1011.                   this.msg.textColor = this.convertColor(var7);
  1012.                } else if (var6.equals("shadowcolor")) {
  1013.                   this.msg.shadowColor = this.convertColor(var7);
  1014.                } else if (var6.equals("shadowdepth")) {
  1015.                   this.msg.shadowDepth = this.convertInt("shadowDepth", var7, 2);
  1016.                } else if (var6.equals("bgcolor")) {
  1017.                   this.msg.bgColor = this.convertColor(var7);
  1018.                   this.msg.bgImage = null;
  1019.                   this.msg.bgImageURL = null;
  1020.                } else if (var6.equals("fps")) {
  1021.                   this.msg.fps = this.convertInt("fps", var7, 15);
  1022.                } else if (var6.equals("cpf")) {
  1023.                   this.msg.cpf = this.convertInt("cpf", var7, 2);
  1024.                } else if (var6.equals("align")) {
  1025.                   this.msg.align = this.convertAlign(var7);
  1026.                } else if (var6.equals("effect")) {
  1027.                   this.msg.effect = this.convertEffect(var7);
  1028.                } else if (var6.equals("emboss")) {
  1029.                   this.msg.emboss = this.convertEmboss(var7, this.msg);
  1030.                } else if (var6.equals("bgimage")) {
  1031.                   this.msg.bgImageURL = var7;
  1032.                   this.msg.bgImage = ((Applet)this).getImage(((Applet)this).getDocumentBase(), var7);
  1033.                   this.imageTracker.addImage(this.msg.bgImage, this.numImages);
  1034.                   this.msg.imageNum = this.numImages++;
  1035.                } else if (var6.equals("bgenter")) {
  1036.                   this.msg.bgEnter = this.convertBgAnimation(var7);
  1037.                } else if (var6.equals("bgexit")) {
  1038.                   this.msg.bgExit = this.convertBgAnimation(var7);
  1039.                } else {
  1040.                   this.raiseErr("Message parameter '" + var6 + "' is invalid, ignoring...");
  1041.                }
  1042.             }
  1043.          }
  1044.  
  1045.          if (this.debug) {
  1046.             this.msg = this.firstMsg;
  1047.  
  1048.             for(this.field_0 = 0; this.msg != null; ++this.field_0) {
  1049.                this.msg = this.msg.next;
  1050.             }
  1051.          }
  1052.  
  1053.          this.msg = null;
  1054.       }
  1055.    }
  1056.  
  1057.    private int convertStyle(String var1) {
  1058.       if (var1 == null) {
  1059.          return 1;
  1060.       } else {
  1061.          var1 = var1.toLowerCase();
  1062.          if (var1.equals("plain")) {
  1063.             return 0;
  1064.          } else if (var1.equals("bold")) {
  1065.             return 1;
  1066.          } else if (var1.equals("italic")) {
  1067.             return 2;
  1068.          } else if (var1.equals("bolditalic")) {
  1069.             return 3;
  1070.          } else {
  1071.             this.raiseErr("Invalid style '" + var1 + "' - using Bold...");
  1072.             return 1;
  1073.          }
  1074.       }
  1075.    }
  1076.  
  1077.    private int convertInt(String var1, String var2, int var3) {
  1078.       if (var2 == null) {
  1079.          return var3;
  1080.       } else {
  1081.          int var4;
  1082.          try {
  1083.             var4 = Integer.parseInt(var2);
  1084.          } catch (NumberFormatException var5) {
  1085.             this.raiseErr("Invalid integer " + var2 + " for parameter '" + var1 + "', using " + var3);
  1086.             var4 = var3;
  1087.          }
  1088.  
  1089.          return var4;
  1090.       }
  1091.    }
  1092.  
  1093.    private int convertTime(String var1, String var2, double var3) {
  1094.       if (var2 == null) {
  1095.          return (int)(var3 * (double)1000.0F);
  1096.       } else {
  1097.          double var5;
  1098.          try {
  1099.             var5 = Double.valueOf(var2) * (double)1000.0F;
  1100.          } catch (NumberFormatException var7) {
  1101.             this.raiseErr("Invalid value " + var2 + " for parameter '" + var1 + "', using " + var3);
  1102.             var5 = var3 * (double)1000.0F;
  1103.          }
  1104.  
  1105.          return (int)var5;
  1106.       }
  1107.    }
  1108.  
  1109.    private int convertAnimation(String var1) {
  1110.       if (var1 == null) {
  1111.          return 1;
  1112.       } else {
  1113.          var1 = var1.toLowerCase();
  1114.          if (var1.equals("scrollleft")) {
  1115.             return 1;
  1116.          } else if (var1.equals("scrollright")) {
  1117.             return 2;
  1118.          } else if (var1.equals("scrollup")) {
  1119.             return 3;
  1120.          } else if (var1.equals("scrolldown")) {
  1121.             return 4;
  1122.          } else if (var1.equals("zoomin")) {
  1123.             return 5;
  1124.          } else if (var1.equals("zoomout")) {
  1125.             return 6;
  1126.          } else if (var1.equals("fade")) {
  1127.             return 7;
  1128.          } else if (var1.equals("wipeleft")) {
  1129.             return 8;
  1130.          } else if (var1.equals("wiperight")) {
  1131.             return 9;
  1132.          } else if (var1.equals("wipeup")) {
  1133.             return 10;
  1134.          } else if (var1.equals("wipedown")) {
  1135.             return 11;
  1136.          } else if (var1.equals("none")) {
  1137.             return 0;
  1138.          } else {
  1139.             this.raiseErr("Invalid animation '" + var1 + "' using 'scrollLeft'");
  1140.             return 1;
  1141.          }
  1142.       }
  1143.    }
  1144.  
  1145.    private int convertBgAnimation(String var1) {
  1146.       if (var1 == null) {
  1147.          return 0;
  1148.       } else {
  1149.          var1 = var1.toLowerCase();
  1150.          if (var1.equals("squeeze")) {
  1151.             return 1;
  1152.          } else if (var1.equals("none")) {
  1153.             return 0;
  1154.          } else {
  1155.             this.raiseErr("Invalid bg animation '" + var1 + "' using 'none'");
  1156.             return 0;
  1157.          }
  1158.       }
  1159.    }
  1160.  
  1161.    private int convertEffect(String var1) {
  1162.       if (var1 == null) {
  1163.          return 0;
  1164.       } else {
  1165.          var1 = var1.toLowerCase();
  1166.          if (var1.equals("color")) {
  1167.             return 1;
  1168.          } else if (var1.equals("none")) {
  1169.             return 0;
  1170.          } else {
  1171.             this.raiseErr("Invalid effect '" + var1 + "' - no effect used");
  1172.             return 0;
  1173.          }
  1174.       }
  1175.    }
  1176.  
  1177.    private int convertAlign(String var1) {
  1178.       if (var1 == null) {
  1179.          return 0;
  1180.       } else {
  1181.          var1 = var1.toLowerCase();
  1182.          if (!var1.equals("center") && !var1.equals("baseline")) {
  1183.             if (var1.equals("top")) {
  1184.                return 3;
  1185.             } else if (var1.equals("bottom")) {
  1186.                return 4;
  1187.             } else if (var1.equals("left")) {
  1188.                return 1;
  1189.             } else if (var1.equals("right")) {
  1190.                return 2;
  1191.             } else {
  1192.                this.raiseErr("Invalid align '" + var1 + "' using 'center'");
  1193.                return 0;
  1194.             }
  1195.          } else {
  1196.             return 0;
  1197.          }
  1198.       }
  1199.    }
  1200.  
  1201.    private boolean convertEmboss(String var1, BannersMsg var2) {
  1202.       if (var1 == null) {
  1203.          return false;
  1204.       } else {
  1205.          var1 = var1.toLowerCase();
  1206.          if (var1.equals("true")) {
  1207.             var2.shadowColor = Color.black;
  1208.             var2.shadowDepth = 1;
  1209.             return true;
  1210.          } else {
  1211.             return false;
  1212.          }
  1213.       }
  1214.    }
  1215.  
  1216.    private Color convertColor(String var1) {
  1217.       if (var1 == null) {
  1218.          return Color.black;
  1219.       } else {
  1220.          var1 = var1.toLowerCase().trim();
  1221.          if (var1.equals("black")) {
  1222.             return Color.black;
  1223.          } else if (var1.equals("blue")) {
  1224.             return Color.blue;
  1225.          } else if (var1.equals("cyan")) {
  1226.             return Color.cyan;
  1227.          } else if (var1.equals("darkgray")) {
  1228.             return Color.darkGray;
  1229.          } else if (var1.equals("gray")) {
  1230.             return Color.gray;
  1231.          } else if (var1.equals("green")) {
  1232.             return Color.green;
  1233.          } else if (var1.equals("lightgray")) {
  1234.             return Color.lightGray;
  1235.          } else if (var1.equals("magenta")) {
  1236.             return Color.magenta;
  1237.          } else if (var1.equals("orange")) {
  1238.             return Color.orange;
  1239.          } else if (var1.equals("pink")) {
  1240.             return Color.pink;
  1241.          } else if (var1.equals("red")) {
  1242.             return Color.red;
  1243.          } else if (var1.equals("white")) {
  1244.             return Color.white;
  1245.          } else if (var1.equals("yellow")) {
  1246.             return Color.yellow;
  1247.          } else {
  1248.             try {
  1249.                return new Color(Integer.parseInt(var1, 16));
  1250.             } catch (NumberFormatException var4) {
  1251.                String var2 = var1.substring(1);
  1252.  
  1253.                try {
  1254.                   return new Color(Integer.parseInt(var2, 16));
  1255.                } catch (NumberFormatException var3) {
  1256.                   this.raiseErr("Could not parse: '" + var1 + "' into a color, using black");
  1257.                   return Color.black;
  1258.                }
  1259.             }
  1260.          }
  1261.       }
  1262.    }
  1263.  
  1264.    private Color fadeColor(Color var1, Color var2, int var3) {
  1265.       int var4 = var1.getRed();
  1266.       int var5 = var1.getGreen();
  1267.       int var6 = var1.getBlue();
  1268.       int var7 = var2.getRed();
  1269.       int var8 = var2.getGreen();
  1270.       int var9 = var2.getBlue();
  1271.       if (var4 == var7 && var5 == var8 && var6 == var9) {
  1272.          return null;
  1273.       } else {
  1274.          if (var4 > var7) {
  1275.             var4 -= var3;
  1276.             if (var4 < var7) {
  1277.                var4 = var7;
  1278.             }
  1279.          } else if (var4 < var7) {
  1280.             var4 += var3;
  1281.             if (var4 > var7) {
  1282.                var4 = var7;
  1283.             }
  1284.          }
  1285.  
  1286.          if (var5 > var8) {
  1287.             var5 -= var3;
  1288.             if (var5 < var8) {
  1289.                var5 = var8;
  1290.             }
  1291.          } else if (var5 < var8) {
  1292.             var5 += var3;
  1293.             if (var5 > var8) {
  1294.                var5 = var8;
  1295.             }
  1296.          }
  1297.  
  1298.          if (var6 > var9) {
  1299.             var6 -= var3;
  1300.             if (var6 < var9) {
  1301.                var6 = var9;
  1302.             }
  1303.          } else if (var6 < var9) {
  1304.             var6 += var3;
  1305.             if (var6 > var9) {
  1306.                var6 = var9;
  1307.             }
  1308.          }
  1309.  
  1310.          return new Color(var4, var5, var6);
  1311.       }
  1312.    }
  1313.  
  1314.    private void raiseErr(String var1) {
  1315.       ((Applet)this).showStatus("Banners: " + var1);
  1316.       System.out.println("Banners: " + var1);
  1317.    }
  1318.  
  1319.    private void dbg(String var1) {
  1320.       if (this.debug) {
  1321.          System.out.println("Debug: " + var1);
  1322.          System.out.flush();
  1323.       }
  1324.  
  1325.    }
  1326. }
  1327.