home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / FREI / DISPLAY.EXE / Display.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-02-24  |  15.7 KB  |  1,018 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Image;
  10. import java.awt.MediaTracker;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.util.Date;
  14.  
  15. public class Display extends Applet implements Runnable {
  16.    // $FF: renamed from: im java.awt.Image
  17.    Image field_0;
  18.    Image liImage;
  19.    Image tiImage;
  20.    Image emImage;
  21.    // $FF: renamed from: gr java.awt.Graphics
  22.    Graphics field_1;
  23.    Graphics liGraphic;
  24.    Graphics tiGraphic;
  25.    Graphics emGraphic;
  26.    String strTime;
  27.    String strOldTime;
  28.    public String[] DisplayMessage;
  29.    public int[][] DisplayColor;
  30.    public URL[] DisplayURL;
  31.    public String[] DisplayURLTarget;
  32.    public Font messageF;
  33.    FontMetrics mfm;
  34.    public Font titleF;
  35.    public String messagefont;
  36.    public String titlefont;
  37.    public int messagefontsize;
  38.    public int titlefontsize;
  39.    public String titletext;
  40.    public int lines;
  41.    public int cols;
  42.    public int xGap;
  43.    public int yGap;
  44.    public int xOffset = 15;
  45.    public int yOffset = 17;
  46.    public int border;
  47.    int charGap;
  48.    int lineGap;
  49.    // $FF: renamed from: fh int
  50.    int field_2;
  51.    // $FF: renamed from: fw int
  52.    int field_3;
  53.    int titleHeight;
  54.    int titleTextPos;
  55.    // $FF: renamed from: t java.lang.Thread
  56.    Thread field_4;
  57.    public String scriptFile;
  58.    DisplayScript script;
  59.    public Color bgCol;
  60.    public Color boCol;
  61.    public Color boColLo;
  62.    public Color boColHi;
  63.    public Color tiCol;
  64.    public Color lineCol;
  65.    public Color lineColLo;
  66.    public Color lineColHi;
  67.    Color[] colors;
  68.    char[] CharSeq;
  69.    char[] TimeSeq;
  70.    String charString;
  71.    String timeString;
  72.    int Line;
  73.    int charCount;
  74.    boolean fFirst = true;
  75.    boolean fPaint;
  76.    boolean fUpdate;
  77.    boolean fPainting;
  78.    int fTopHalf = 1;
  79.    Dimension lastS = new Dimension(1, 1);
  80.    // $FF: renamed from: li LineInfo
  81.    LineInfo field_5;
  82.    public int delay;
  83.    Image imgBackground;
  84.    Image imgBackgroundLoad;
  85.    URL bgImage;
  86.    MediaTracker tracker;
  87.    boolean fShowTime = true;
  88.    int maxChanges;
  89.  
  90.    public void stop() {
  91.       if (this.field_4 != null) {
  92.          this.field_4.stop();
  93.          this.field_4 = null;
  94.       }
  95.  
  96.       this.field_0 = null;
  97.       if (this.field_1 != null) {
  98.          this.field_1.dispose();
  99.          this.field_1 = null;
  100.       }
  101.  
  102.       this.liImage = null;
  103.       if (this.liGraphic != null) {
  104.          this.liGraphic.dispose();
  105.          this.liGraphic = null;
  106.       }
  107.  
  108.       this.tiImage = null;
  109.       if (this.tiGraphic != null) {
  110.          this.tiGraphic.dispose();
  111.          this.tiGraphic = null;
  112.       }
  113.  
  114.       this.emImage = null;
  115.       if (this.emGraphic != null) {
  116.          this.emGraphic.dispose();
  117.          this.emGraphic = null;
  118.       }
  119.  
  120.       this.fFirst = true;
  121.       this.lastS = new Dimension(1, 1);
  122.       this.strTime = null;
  123.       this.strOldTime = new String("  :  ");
  124.       this.field_5 = null;
  125.    }
  126.  
  127.    int maxDiff(int var1) {
  128.       int var2 = 0;
  129.       char[] var7 = this.DisplayMessage[var1 - 1].toCharArray();
  130.       char[] var8 = this.field_5.text.toCharArray();
  131.  
  132.       for(int var5 = 0; var5 < this.cols; ++var5) {
  133.          char var6 = var7[var5];
  134.          int var3 = this.charString.indexOf(var6);
  135.          var6 = var8[var5];
  136.          int var4 = this.charString.indexOf(var6);
  137.          if (var4 == -1) {
  138.             var8[var5] = this.CharSeq[0];
  139.             var4 = 0;
  140.             var6 = this.CharSeq[0];
  141.          }
  142.  
  143.          if (var4 < var3) {
  144.             var4 = this.charString.lastIndexOf(var6);
  145.          }
  146.  
  147.          if (var4 - var3 > this.maxChanges) {
  148.             var3 = var4 - this.maxChanges;
  149.             if (this.field_5.func == 0) {
  150.                var7[var5] = this.CharSeq[var4 - this.maxChanges];
  151.             }
  152.          }
  153.  
  154.          if (var4 - var3 > var2) {
  155.             var2 = var4 - var3;
  156.          }
  157.       }
  158.  
  159.       this.field_5.text = new String(var8);
  160.       this.DisplayMessage[var1 - 1] = new String(var7);
  161.       if (this.field_5.func == 0) {
  162.          var2 += 2;
  163.       } else {
  164.          --var2;
  165.       }
  166.  
  167.       if (var2 < 12 && this.maxChanges > 12) {
  168.          var2 = 12;
  169.       }
  170.  
  171.       return var2;
  172.    }
  173.  
  174.    void nextLine() {
  175.       this.field_5 = this.script.nextFunc();
  176.       this.field_5 = this.script.parseLine(this.field_5, this.cols);
  177.       switch (this.field_5.func) {
  178.          case 0:
  179.             this.Line = this.field_5.line - 1;
  180.             if (this.field_5.text.length() > this.cols) {
  181.                this.field_5.text = this.field_5.text.substring(0, this.cols);
  182.             } else {
  183.                while(this.field_5.text.length() < this.cols) {
  184.                   this.field_5.text = this.field_5.text.concat(" ");
  185.                }
  186.             }
  187.  
  188.             this.DisplayURL[this.Line] = this.field_5.url;
  189.             this.DisplayURLTarget[this.Line] = this.field_5.target;
  190.             break;
  191.          case 1:
  192.             this.Line = this.field_5.line - 1;
  193.             this.field_5.text = new String(" ");
  194.  
  195.             for(int var1 = 1; var1 < this.cols; ++var1) {
  196.                this.field_5.text = this.field_5.text.concat(" ");
  197.             }
  198.  
  199.             this.field_5.color = this.DisplayColor[this.Line];
  200.             this.DisplayURL[this.Line] = null;
  201.             this.DisplayURLTarget[this.Line] = null;
  202.       }
  203.  
  204.    }
  205.  
  206.    public boolean mouseExit(Event var1, int var2, int var3) {
  207.       ((Applet)this).showStatus(" ");
  208.       return true;
  209.    }
  210.  
  211.    public synchronized void paint(Graphics var1) {
  212.       if (!this.fPainting) {
  213.          this.fPainting = true;
  214.          if (this.field_5 != null) {
  215.             if (this.field_5.func == 0 || this.field_5.func == 1) {
  216.                int var2 = this.titleHeight + this.yOffset + this.Line * this.lineGap - 1;
  217.                this.updateMessageArea(var1);
  218.                var1.drawImage(this.liImage, 0, var2, this);
  219.                this.field_1.drawImage(this.liImage, 0, var2, this);
  220.             }
  221.  
  222.             if (this.fShowTime) {
  223.                this.updateTime(var1);
  224.                var1.drawImage(this.tiImage, 0, this.yOffset - 1, this);
  225.                this.field_1.drawImage(this.tiImage, 0, this.yOffset - 1, this);
  226.             }
  227.          }
  228.  
  229.          this.fPainting = false;
  230.          this.fPaint = false;
  231.       }
  232.    }
  233.  
  234.    public void wait(int var1) {
  235.       try {
  236.          Thread.sleep((long)var1);
  237.       } catch (InterruptedException var2) {
  238.       }
  239.  
  240.    }
  241.  
  242.    Color[] getColor(String var1, Color var2, Color var3, Color var4) {
  243.       Color[] var10 = new Color[3];
  244.       String var6;
  245.       if ((var6 = ((Applet)this).getParameter(var1)) != null) {
  246.          var6 = var6.trim();
  247.  
  248.          try {
  249.             int var7 = new Integer(var6.substring(0, var6.indexOf(",")));
  250.             if (var7 < 0) {
  251.                var7 = 0;
  252.             }
  253.  
  254.             if (var7 > 255) {
  255.                var7 = 255;
  256.             }
  257.  
  258.             String var5 = var6.substring(var6.indexOf(",") + 1);
  259.             int var8 = new Integer(var5.substring(0, var5.indexOf(",")));
  260.             if (var8 < 0) {
  261.                var8 = 0;
  262.             }
  263.  
  264.             if (var8 > 255) {
  265.                var8 = 255;
  266.             }
  267.  
  268.             var5 = var5.substring(var5.indexOf(",") + 1);
  269.             int var9 = new Integer(var5);
  270.             if (var9 < 0) {
  271.                var9 = 0;
  272.             }
  273.  
  274.             if (var9 > 255) {
  275.                var9 = 255;
  276.             }
  277.  
  278.             var10[0] = new Color(var7, var8, var9);
  279.             var10[1] = new Color(var7 - 32 >= 0 ? var7 - 32 : 0, var8 - 32 >= 0 ? var8 - 32 : 0, var9 - 32 >= 0 ? var9 - 32 : 0);
  280.             var10[2] = new Color(var7 + 32 < 256 ? var7 + 32 : 255, var8 + 32 < 256 ? var8 + 32 : 255, var9 + 32 < 256 ? var9 + 32 : 255);
  281.          } catch (NumberFormatException var11) {
  282.             System.out.println("Bad color value '" + var6 + "'. Setting color to default.");
  283.             var10[0] = var2;
  284.             if (var3 != null) {
  285.                var10[1] = var3;
  286.             }
  287.  
  288.             if (var4 != null) {
  289.                var10[2] = var4;
  290.             }
  291.          }
  292.       } else {
  293.          var10[0] = var2;
  294.          if (var3 != null) {
  295.             var10[1] = var3;
  296.          }
  297.  
  298.          if (var4 != null) {
  299.             var10[2] = var4;
  300.          }
  301.       }
  302.  
  303.       return var10;
  304.    }
  305.  
  306.    public boolean mouseUp(Event var1, int var2, int var3) {
  307.       int var5 = this.titleHeight + this.yOffset;
  308.       if (var3 >= var5 && this.lineGap > 0) {
  309.          int var4 = (var3 - var5) / this.lineGap;
  310.          if (var4 < this.lines && this.DisplayURL[var4] != null) {
  311.             if (this.DisplayURLTarget[var4] == null) {
  312.                ((Applet)this).getAppletContext().showDocument(this.DisplayURL[var4]);
  313.             } else {
  314.                ((Applet)this).getAppletContext().showDocument(this.DisplayURL[var4], this.DisplayURLTarget[var4]);
  315.             }
  316.          }
  317.       }
  318.  
  319.       return true;
  320.    }
  321.  
  322.    public String[][] getParameterInfo() {
  323.       String[][] var1 = new String[][]{{"script", "String", "name of script file                         (mandatory)"}, {"messagefont", "String,int", "name and size of message font               (optional, 'TimesRoman,14')"}, {"titlefont", "String,int", "name and size of title font                 (optional, 'TimesRoman,22')"}, {"titletext", "String", "Title                                       (optional, '')"}, {"titlecolor", "int[3]", "RGB color of title                          (optional, '255,255,255')"}, {"backgroundcolor", "int[3]", "RGB color of background                     (optional, ' 48, 48, 48')"}, {"bordercolor", "int[3]", "RGB color of border                         (optional, ' 96, 96, 96')"}, {"linecolor", "int[3]", "RGB color of lines                          (optional, ' 96, 96, 96')"}, {"titletext", "String", "Title                                       (optional, '')"}, {"border", "int", "width of the border                         (optional, '3')"}, {"colgap", "int", "number of pixels between the characters     (optional, '0')"}, {"rowgap", "int", "number of pixels between the lines          (optional, '6')"}, {"delay", "int", "delay (in ms) between the character updates (optional, '50')"}, {"maxchanges", "int", "maximum flips to change a line              (optional, '9999')"}, {"validchars", "String", "list of valid characters                    (optional, 'abc...')"}};
  324.       return var1;
  325.    }
  326.  
  327.    public void createParams() {
  328.       int var3 = this.charString.length();
  329.       int var4 = ((Component)this).size().width;
  330.       int var5 = ((Component)this).size().height;
  331.       this.lastS.width = var4;
  332.       this.lastS.height = var5;
  333.       this.messageF = new Font(this.messagefont, 0, this.messagefontsize);
  334.       ((Component)this).setFont(this.messageF);
  335.       this.mfm = ((Component)this).getFontMetrics(this.messageF);
  336.       this.field_2 = this.mfm.getHeight() + 2;
  337.       this.field_3 = 0;
  338.  
  339.       for(int var1 = 0; var1 < var3; ++var1) {
  340.          if (this.mfm.charWidth(this.CharSeq[var1]) > this.field_3) {
  341.             this.field_3 = this.mfm.charWidth(this.CharSeq[var1]);
  342.          }
  343.       }
  344.  
  345.       this.field_3 += 2;
  346.       this.charGap = this.field_3 + 2 + this.xGap;
  347.       this.lineGap = this.field_2 + 2 + this.yGap;
  348.       this.titleF = new Font(this.titlefont, 0, this.titlefontsize);
  349.       ((Component)this).setFont(this.titleF);
  350.       FontMetrics var6 = ((Component)this).getFontMetrics(this.titleF);
  351.       this.titleHeight = var6.getHeight() + 2;
  352.       if (this.field_2 + 7 > this.titleHeight) {
  353.          this.titleHeight = this.field_2 + 7;
  354.       }
  355.  
  356.       this.titleHeight += 2 * this.yOffset - 3 * this.border + 3;
  357.       this.titleTextPos = this.titleHeight - this.yOffset + 3 * this.border - var6.getMaxDescent() - 3;
  358.       this.cols = (var4 - 2 * this.xOffset) / this.charGap;
  359.       this.lines = (var5 - this.titleHeight - 2 * this.yOffset) / this.lineGap;
  360.       this.DisplayMessage = new String[this.lines + 1];
  361.       this.DisplayColor = new int[this.lines + 1][this.cols + 1];
  362.       this.DisplayURL = new URL[this.lines + 1];
  363.       this.DisplayURLTarget = new String[this.lines + 1];
  364.  
  365.       for(int var7 = 0; var7 < this.lines + 1; ++var7) {
  366.          this.DisplayMessage[var7] = new String(" ");
  367.          this.DisplayURL[var7] = null;
  368.          this.DisplayURLTarget[var7] = null;
  369.  
  370.          for(int var2 = 0; var2 < this.cols; ++var2) {
  371.             this.DisplayMessage[var7] = this.DisplayMessage[var7].concat(" ");
  372.             this.DisplayColor[var7][var2] = 0;
  373.          }
  374.       }
  375.  
  376.       if (this.field_1 != null) {
  377.          this.field_1.dispose();
  378.       }
  379.  
  380.       if (this.liGraphic != null) {
  381.          this.liGraphic.dispose();
  382.       }
  383.  
  384.       if (this.tiGraphic != null) {
  385.          this.tiGraphic.dispose();
  386.       }
  387.  
  388.       if (this.emGraphic != null) {
  389.          this.emGraphic.dispose();
  390.       }
  391.  
  392.       this.field_0 = this.DisplayCreateImage(this.lastS.width, this.lastS.height);
  393.       this.field_1 = this.field_0.getGraphics();
  394.       this.liImage = this.DisplayCreateImage(this.lastS.width, this.field_2 + 3);
  395.       this.liGraphic = this.liImage.getGraphics();
  396.       this.tiImage = this.DisplayCreateImage(this.lastS.width, this.field_2 + 3);
  397.       this.tiGraphic = this.tiImage.getGraphics();
  398.       this.emImage = this.DisplayCreateImage(this.lastS.width, this.lastS.height);
  399.       this.emGraphic = this.emImage.getGraphics();
  400.       this.liGraphic.setFont(this.messageF);
  401.       this.tiGraphic.setFont(this.messageF);
  402.    }
  403.  
  404.    void draw3DRect(Graphics var1, int var2, int var3, int var4, int var5, int var6, boolean var7) {
  405.       for(int var8 = 0; var8 < var6; ++var8) {
  406.          if (var7) {
  407.             var1.setColor(this.boColHi);
  408.          } else {
  409.             var1.setColor(this.boColLo);
  410.          }
  411.  
  412.          var1.drawLine(var2 + var8, var3 + var8, var4 - var8, var3 + var8);
  413.          var1.drawLine(var2 + var8, var3 + var8, var2 + var8, var5 - var8);
  414.          if (var7) {
  415.             var1.setColor(this.boColLo);
  416.          } else {
  417.             var1.setColor(this.boColHi);
  418.          }
  419.  
  420.          var1.drawLine(var4 - var8, var3 + var8, var4 - var8, var5 - var8);
  421.          var1.drawLine(var2 + var8, var5 - var8, var4 - var8, var5 - var8);
  422.       }
  423.  
  424.    }
  425.  
  426.    synchronized void updateMessageArea(Graphics var1) {
  427.       int var6 = ((Component)this).size().width;
  428.       ((Component)this).size();
  429.       char[] var11 = this.DisplayMessage[this.Line].toCharArray();
  430.       char[] var12 = this.field_5.text.toCharArray();
  431.       int var4 = this.field_2 - this.mfm.getMaxDescent() - this.fTopHalf + 1;
  432.       this.liGraphic.drawImage(this.field_0, 0, -1 * (this.titleHeight + this.yOffset + this.Line * this.lineGap - 1), this);
  433.       ((Component)this).getToolkit().sync();
  434.       Graphics var13 = this.liGraphic.create();
  435.       int var5;
  436.       if (this.fTopHalf == 1) {
  437.          var5 = 2;
  438.       } else {
  439.          var5 = this.field_2 / 2 + 3;
  440.       }
  441.  
  442.       var13.clipRect(0, var5, var6, this.field_2 / 2);
  443.       var13.drawImage(this.emImage, 0, -1 * (this.titleHeight + this.yOffset + this.Line * this.lineGap - 1), this);
  444.  
  445.       for(int var2 = 0; var2 < this.cols; ++var2) {
  446.          if (this.field_5.func == 1) {
  447.             char var10 = var11[var2];
  448.             int var9 = this.charString.indexOf(var10);
  449.             if (var10 == ' ') {
  450.                --var9;
  451.             }
  452.  
  453.             if (this.fTopHalf == 0 && this.charCount != 1) {
  454.                var11[var2] = this.CharSeq[var9 + 1];
  455.             } else {
  456.                var11[var2] = ' ';
  457.             }
  458.  
  459.             int var7 = this.mfm.charWidth(this.CharSeq[var9 + 1]);
  460.             int var3 = this.xOffset + 1 + var2 * this.charGap;
  461.             var13.setColor(this.colors[this.field_5.color[var2]]);
  462.             var13.drawChars(this.CharSeq, var9 + 1, 1, var3 + (this.field_3 - var7 - 2) / 2, var4);
  463.          } else {
  464.             char var17 = var11[var2];
  465.             int var16 = this.charString.indexOf(var17);
  466.             var17 = var12[var2];
  467.             int var8 = this.charString.indexOf(var17);
  468.             if (var8 < var16) {
  469.                var8 = this.charString.lastIndexOf(var17);
  470.             }
  471.  
  472.             if (var8 - var16 >= this.charCount || this.charCount == 0) {
  473.                if (this.charCount == 0) {
  474.                   --var16;
  475.                }
  476.  
  477.                if (this.fTopHalf == 0) {
  478.                   var11[var2] = this.CharSeq[var16 + 1];
  479.                }
  480.  
  481.                int var15 = this.mfm.charWidth(this.CharSeq[var16 + 1]);
  482.                int var14 = this.xOffset + 1 + var2 * this.charGap;
  483.                var13.setColor(this.colors[this.field_5.color[var2]]);
  484.                var13.drawChars(this.CharSeq, var16 + 1, 1, var14 + (this.field_3 - var15 - 2) / 2, var4);
  485.             }
  486.          }
  487.       }
  488.  
  489.       ((Component)this).getToolkit().sync();
  490.       if (this.fTopHalf == 0) {
  491.          this.DisplayMessage[this.Line] = new String(var11);
  492.          this.DisplayColor[this.Line] = this.field_5.color;
  493.       }
  494.  
  495.       var13.dispose();
  496.    }
  497.  
  498.    public synchronized void update(Graphics var1) {
  499.       int var6 = ((Component)this).size().width;
  500.       int var7 = ((Component)this).size().height;
  501.       if (var7 != this.lastS.height || var6 != this.lastS.width) {
  502.          this.createParams();
  503.       }
  504.  
  505.       if (!this.fFirst) {
  506.          var1.drawImage(this.field_0, 0, 0, this);
  507.          ((Component)this).getToolkit().sync();
  508.          this.paint(var1);
  509.          ((Component)this).getToolkit().sync();
  510.          this.fUpdate = false;
  511.       } else {
  512.          if (this.imgBackground == null) {
  513.             this.field_1.setColor(this.bgCol);
  514.             this.field_1.fillRect(3 * this.border, 3 * this.border, var6 - 6 * this.border, var7 - 6 * this.border);
  515.          } else {
  516.             int var8 = this.imgBackground.getWidth(this);
  517.             int var9 = this.imgBackground.getHeight(this);
  518.  
  519.             for(int var2 = 3 * this.border; var2 < var6; var2 += var8) {
  520.                for(int var3 = 3 * this.border; var3 < var7; var3 += var9) {
  521.                   this.field_1.drawImage(this.imgBackground, var2, var3, this);
  522.                }
  523.             }
  524.          }
  525.  
  526.          this.draw3DRect(this.field_1, 0, 0, var6 - 1, var7 - 1, this.border, true);
  527.          this.field_1.setColor(this.boCol);
  528.  
  529.          for(int var10 = 0; var10 < this.border; ++var10) {
  530.             this.field_1.drawLine(this.border + var10, this.border + var10, var6 - this.border - var10 - 1, this.border + var10);
  531.             this.field_1.drawLine(this.border + var10, this.border + var10, this.border + var10, var7 - this.border - var10 - 1);
  532.             this.field_1.drawLine(var6 - this.border - var10 - 1, this.border + var10, var6 - this.border - var10 - 1, var7 - this.border - var10 - 1);
  533.             this.field_1.drawLine(this.border + var10, var7 - this.border - var10 - 1, var6 - this.border - var10 - 1, var7 - this.border - var10 - 1);
  534.          }
  535.  
  536.          this.draw3DRect(this.field_1, 2 * this.border, 2 * this.border, var6 - 2 * this.border - 1, var7 - 2 * this.border - 1, this.border, false);
  537.          int var5 = this.titleHeight;
  538.          this.field_1.setColor(this.lineCol);
  539.          this.field_1.drawLine(3 * this.border, var5 - 2, var6 - 3 * this.border, var5 - 2);
  540.          this.field_1.drawLine(3 * this.border, var5, var6 - 3 * this.border, var5);
  541.          this.field_1.setColor(this.lineColHi);
  542.          this.field_1.drawLine(3 * this.border, var5 - 1, var6 - 3 * this.border, var5 - 1);
  543.          this.field_1.setFont(this.titleF);
  544.          this.field_1.setColor(this.tiCol);
  545.          this.field_1.drawString(this.titletext, this.xOffset, this.titleTextPos);
  546.          if (this.fShowTime) {
  547.             int var4 = this.xOffset + (this.cols - 4) * this.charGap;
  548.             var4 -= this.mfm.charWidth(':') + 4;
  549.             var5 = this.yOffset;
  550.             this.field_1.setFont(this.messageF);
  551.             if (var4 > this.xGap) {
  552.                int var11 = 0;
  553.  
  554.                do {
  555.                   this.drawCharArea(this.field_1, var4, var5, this.field_3, this.field_2);
  556.                   var4 += this.charGap;
  557.                   if (var11 == 1) {
  558.                      this.field_1.setColor(this.tiCol);
  559.                      this.field_1.drawString(":", var4 + 1, var5 + this.mfm.getHeight() - this.mfm.getMaxDescent());
  560.                      var4 += this.mfm.charWidth(':') + 4;
  561.                   }
  562.  
  563.                   ++var11;
  564.                } while(var11 < 4);
  565.             }
  566.          }
  567.  
  568.          for(int var12 = 0; var12 < this.lines; ++var12) {
  569.             for(int var13 = 0; var13 < this.cols; ++var13) {
  570.                int var15 = this.xOffset + var13 * this.charGap;
  571.                var5 = this.titleHeight + this.yOffset + var12 * this.lineGap;
  572.                this.drawCharArea(this.field_1, var15, var5, this.field_3, this.field_2);
  573.             }
  574.          }
  575.  
  576.          this.emGraphic.drawImage(this.field_0, 0, 0, this);
  577.          var1.drawImage(this.field_0, 0, 0, this);
  578.          ((Component)this).getToolkit().sync();
  579.          this.fUpdate = false;
  580.          this.fPaint = false;
  581.       }
  582.    }
  583.  
  584.    public void getInfo() {
  585.       this.script = new DisplayScript(((Applet)this).getDocumentBase(), this.scriptFile);
  586.       if (this.script.ok == -1) {
  587.          System.out.println("Script file not found");
  588.          this.stop();
  589.       } else {
  590.          this.field_5 = new LineInfo();
  591.          this.nextLine();
  592.       }
  593.  
  594.       if (this.field_5.func == 2) {
  595.          this.charCount = 12;
  596.       } else {
  597.          this.charCount = this.maxDiff(this.field_5.line);
  598.       }
  599.  
  600.       this.fFirst = false;
  601.    }
  602.  
  603.    public void start() {
  604.       if (this.field_4 == null) {
  605.          this.field_4 = new Thread(this);
  606.          this.field_4.start();
  607.       }
  608.  
  609.    }
  610.  
  611.    public String getAppletInfo() {
  612.       return "Display.java, V1.5, by Stefan Ruettinger";
  613.    }
  614.  
  615.    synchronized void updateTime(Graphics var1) {
  616.       if (this.charCount == 12 && this.maxChanges == 9999 || this.charCount == this.maxChanges && this.maxChanges < 9999 || this.strTime == null) {
  617.          Date var5 = new Date();
  618.          String var4 = "0" + (new Integer(var5.getHours())).toString();
  619.          var4 = var4.substring(var4.length() - 2);
  620.          this.strTime = var4 + ":";
  621.          var4 = "0" + (new Integer(var5.getMinutes())).toString();
  622.          var4 = var4.substring(var4.length() - 2);
  623.          String var10001 = this.strTime;
  624.          this.strTime = var10001 + var4;
  625.       }
  626.  
  627.       char[] var18 = this.strOldTime.toCharArray();
  628.       char[] var6 = this.strTime.toCharArray();
  629.       int var7 = ((Component)this).size().width;
  630.       ((Component)this).size();
  631.       int var8 = this.xOffset + (this.cols - 4) * this.charGap + 1;
  632.       var8 -= this.mfm.charWidth(':') + 4;
  633.       int var10 = this.field_2 - this.mfm.getMaxDescent() - this.fTopHalf + 1;
  634.       this.tiGraphic.drawImage(this.field_0, 0, -1 * (this.yOffset - 1), this);
  635.       ((Component)this).getToolkit().sync();
  636.       Graphics var13 = this.tiGraphic.create();
  637.       int var11;
  638.       if (this.fTopHalf == 1) {
  639.          var11 = 2;
  640.       } else {
  641.          var11 = this.field_2 / 2 + 3;
  642.       }
  643.  
  644.       var13.clipRect(0, var11, var7, this.field_2 / 2);
  645.       var13.drawImage(this.emImage, 0, -1 * (this.yOffset - 1), this);
  646.       int var2 = 0;
  647.  
  648.       do {
  649.          if (var2 != 2) {
  650.             char var14 = var18[var2];
  651.             int var3 = this.timeString.indexOf(var14);
  652.             if (var18[var2] == var6[var2]) {
  653.                --var3;
  654.             }
  655.  
  656.             if (this.fTopHalf == 0) {
  657.                var18[var2] = this.TimeSeq[var3 + 1];
  658.             }
  659.  
  660.             int var12 = this.mfm.charWidth(this.TimeSeq[var3 + 1]);
  661.             int var9 = var8 + var2 * this.charGap;
  662.             if (var2 > 2) {
  663.                var9 -= this.charGap;
  664.                var9 += this.mfm.charWidth(':') + 4;
  665.             }
  666.  
  667.             var13.setColor(this.tiCol);
  668.             var13.drawChars(this.TimeSeq, var3 + 1, 1, var9 + (this.field_3 - var12 - 2) / 2, var10);
  669.          }
  670.  
  671.          ++var2;
  672.       } while(var2 < 5);
  673.  
  674.       ((Component)this).getToolkit().sync();
  675.       if (this.fTopHalf == 0) {
  676.          this.strOldTime = new String(var18);
  677.       }
  678.  
  679.       var13.dispose();
  680.    }
  681.  
  682.    void drawCharArea(Graphics var1, int var2, int var3, int var4, int var5) {
  683.       var1.setColor(this.lineColHi);
  684.       var1.drawRect(var2 - 1, var3 - 1, var4 + 2, var5 + 8);
  685.       var1.setColor(this.lineCol);
  686.       var1.drawRect(var2, var3, var4, var5 + 6);
  687.       var1.drawLine(var2, var3 + var5 / 2 + 1, var2 + var4, var3 + var5 / 2 + 1);
  688.       var1.drawLine(var2, var3 + var5 + 4, var2 + var4, var3 + var5 + 4);
  689.       var1.drawLine(var2, var3 + var5 + 2, var2 + var4, var3 + var5 + 2);
  690.    }
  691.  
  692.    private Image DisplayCreateImage(int var1, int var2) {
  693.       Image var4 = ((Component)this).createImage(var1, var2);
  694.       boolean var3 = ((Component)this).prepareImage(var4, this);
  695.       if (!var3) {
  696.          while((((Component)this).checkImage(var4, this) & 224) == 0) {
  697.             this.wait(1);
  698.          }
  699.       }
  700.  
  701.       return var4;
  702.    }
  703.  
  704.    private int getParameters() {
  705.       if ((this.scriptFile = ((Applet)this).getParameter("script")) == null) {
  706.          System.out.println("Applet Error: 'script' parameter is mandatory.");
  707.          return -1;
  708.       } else {
  709.          String var1;
  710.          if ((var1 = ((Applet)this).getParameter("messagefont")) != null) {
  711.             var1 = var1.trim();
  712.             this.messagefont = new String(var1.substring(0, var1.indexOf(",")));
  713.             var1 = var1.substring(var1.indexOf(",") + 1);
  714.  
  715.             try {
  716.                this.messagefontsize = new Integer(var1);
  717.             } catch (NumberFormatException var12) {
  718.                System.out.println("Bad messagefont size '" + var1 + "'. Setting size=14.");
  719.                this.messagefontsize = 14;
  720.             }
  721.          } else {
  722.             this.messagefont = new String("TimesRoman");
  723.             this.messagefontsize = 14;
  724.          }
  725.  
  726.          if ((var1 = ((Applet)this).getParameter("titlefont")) != null) {
  727.             var1 = var1.trim();
  728.             this.titlefont = new String(var1.substring(0, var1.indexOf(",")));
  729.             var1 = var1.substring(var1.indexOf(",") + 1);
  730.  
  731.             try {
  732.                this.titlefontsize = new Integer(var1);
  733.             } catch (NumberFormatException var11) {
  734.                System.out.println("Bad titlefont size '" + var1 + "'. Setting size=22.");
  735.                this.titlefontsize = 22;
  736.             }
  737.          } else {
  738.             this.titlefont = new String("TimesRoman");
  739.             this.titlefontsize = 22;
  740.          }
  741.  
  742.          Color[] var2 = this.getColor("titlecolor", new Color(255, 255, 255), (Color)null, (Color)null);
  743.          this.tiCol = var2[0];
  744.          var2 = this.getColor("backgroundcolor", new Color(48, 48, 48), (Color)null, (Color)null);
  745.          this.bgCol = var2[0];
  746.          var2 = this.getColor("bordercolor", new Color(96, 96, 96), new Color(64, 64, 64), new Color(128, 128, 128));
  747.          this.boCol = var2[0];
  748.          this.boColLo = var2[1];
  749.          this.boColHi = var2[2];
  750.          var2 = this.getColor("linecolor", new Color(96, 96, 96), new Color(64, 64, 64), new Color(128, 128, 128));
  751.          this.lineCol = var2[0];
  752.          this.lineColLo = var2[1];
  753.          this.lineColHi = var2[2];
  754.          if (((Applet)this).getParameter("titletext") != null) {
  755.             this.titletext = new String(((Applet)this).getParameter("titletext"));
  756.          } else {
  757.             this.titletext = new String();
  758.          }
  759.  
  760.          if ((var1 = ((Applet)this).getParameter("border")) != null) {
  761.             try {
  762.                this.border = new Integer(var1);
  763.                if (this.border < 0) {
  764.                   this.border = 0;
  765.                }
  766.             } catch (NumberFormatException var10) {
  767.                System.out.println("Bad border value '" + var1 + "'. Setting border=3.");
  768.                this.border = 3;
  769.             }
  770.          } else {
  771.             this.border = 3;
  772.          }
  773.  
  774.          if ((var1 = ((Applet)this).getParameter("colgap")) != null) {
  775.             try {
  776.                this.xGap = new Integer(var1) + 2;
  777.                if (this.xGap < 2) {
  778.                   this.xGap = 2;
  779.                }
  780.             } catch (NumberFormatException var9) {
  781.                System.out.println("Bad colgap value '" + var1 + "'. Setting colgap=0.");
  782.                this.xGap = 2;
  783.             }
  784.          } else {
  785.             this.xGap = 2;
  786.          }
  787.  
  788.          if ((var1 = ((Applet)this).getParameter("rowgap")) != null) {
  789.             try {
  790.                this.yGap = new Integer(var1) + 8;
  791.                if (this.yGap < 8) {
  792.                   this.yGap = 8;
  793.                }
  794.             } catch (NumberFormatException var8) {
  795.                System.out.println("Bad rowgap value '" + var1 + "'. Setting rowgap=3.");
  796.                this.yGap = 11;
  797.             }
  798.          } else {
  799.             this.yGap = 11;
  800.          }
  801.  
  802.          if ((var1 = ((Applet)this).getParameter("validchars")) != null) {
  803.             if (var1.indexOf(32) == -1) {
  804.                var1 = (new String(" ")).concat(var1);
  805.             }
  806.  
  807.             var1 = var1.concat(var1);
  808.             this.CharSeq = var1.toCharArray();
  809.          } else {
  810.             var1 = new String(" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz.:-,;+*/!?()<>");
  811.             var1 = var1.concat(var1);
  812.             this.CharSeq = var1.toCharArray();
  813.          }
  814.  
  815.          this.charString = new String(this.CharSeq);
  816.          if ((var1 = ((Applet)this).getParameter("delay")) != null) {
  817.             try {
  818.                this.delay = new Integer(var1);
  819.                if (this.delay < 0) {
  820.                   this.delay = 0;
  821.                }
  822.             } catch (NumberFormatException var7) {
  823.                System.out.println("Bad delay value '" + var1 + "'. Setting delay=50.");
  824.                this.delay = 50;
  825.             }
  826.          } else {
  827.             this.delay = 50;
  828.          }
  829.  
  830.          if ((var1 = ((Applet)this).getParameter("maxChanges")) != null) {
  831.             try {
  832.                this.maxChanges = new Integer(var1);
  833.                if (this.maxChanges < 2) {
  834.                   this.maxChanges = 2;
  835.                }
  836.             } catch (NumberFormatException var6) {
  837.                System.out.println("Bad maxchanges value '" + var1 + "'. Ignoring parameter.");
  838.                this.maxChanges = 9999;
  839.             }
  840.          } else {
  841.             this.maxChanges = 9999;
  842.          }
  843.  
  844.          if ((var1 = ((Applet)this).getParameter("background")) != null) {
  845.             boolean var3 = true;
  846.  
  847.             try {
  848.                this.bgImage = new URL(var1);
  849.             } catch (MalformedURLException var5) {
  850.                var3 = false;
  851.             }
  852.  
  853.             if (!var3) {
  854.                try {
  855.                   this.bgImage = new URL(((Applet)this).getDocumentBase(), var1);
  856.                } catch (MalformedURLException var4) {
  857.                   System.out.println("Bad background value '" + var1 + "'. Ignoring background image.");
  858.                   this.bgImage = null;
  859.                }
  860.             }
  861.          } else {
  862.             this.bgImage = null;
  863.          }
  864.  
  865.          if ((var1 = ((Applet)this).getParameter("timedisplay")) != null) {
  866.             var1 = var1.toUpperCase();
  867.             if (var1.compareTo("NO") == 0) {
  868.                this.fShowTime = false;
  869.             }
  870.          }
  871.  
  872.          return 0;
  873.       }
  874.    }
  875.  
  876.    public void run() {
  877.       boolean var3 = false;
  878.       if (this.fFirst) {
  879.          if (this.imgBackgroundLoad != null) {
  880.             while(this.imgBackgroundLoad != null) {
  881.                boolean var2 = this.tracker.checkID(0, true);
  882.                if (var2) {
  883.                   if (!this.tracker.isErrorID(0)) {
  884.                      this.imgBackground = this.imgBackgroundLoad;
  885.                   }
  886.  
  887.                   this.imgBackgroundLoad = null;
  888.                } else {
  889.                   this.wait(500);
  890.                }
  891.             }
  892.          }
  893.  
  894.          this.fPaint = true;
  895.          this.fUpdate = true;
  896.          ((Component)this).repaint();
  897.  
  898.          while(this.fPaint || this.fUpdate) {
  899.             this.wait(5);
  900.          }
  901.  
  902.          this.wait(500);
  903.          this.getInfo();
  904.          if (this.field_5.func == 2) {
  905.             var3 = true;
  906.          }
  907.  
  908.          this.fTopHalf = 1;
  909.       }
  910.  
  911.       while(this.field_4 != null) {
  912.          this.fPaint = true;
  913.          this.fUpdate = true;
  914.          ((Component)this).repaint();
  915.  
  916.          int var1;
  917.          for(var1 = 0; this.fPaint || this.fUpdate; var1 += 5) {
  918.             this.wait(5);
  919.          }
  920.  
  921.          if (var1 > this.delay / 2) {
  922.             this.wait(5);
  923.          } else {
  924.             this.wait(this.delay / 2);
  925.          }
  926.  
  927.          this.fTopHalf = 1 - this.fTopHalf;
  928.          if (this.fTopHalf == 1) {
  929.             this.charCount += -1;
  930.          }
  931.  
  932.          if (this.fTopHalf == 1) {
  933.             if (this.charCount == -1) {
  934.                if (!var3) {
  935.                   this.nextLine();
  936.                }
  937.  
  938.                if (this.field_5.func == 2) {
  939.                   if (this.field_5.delay > 2000) {
  940.                      this.wait(2000);
  941.                      LineInfo var10000 = this.field_5;
  942.                      var10000.delay -= 2000;
  943.                      var3 = true;
  944.                   } else {
  945.                      if (this.field_5.delay > 500) {
  946.                         this.wait(this.field_5.delay - 500);
  947.                      }
  948.  
  949.                      var3 = false;
  950.                   }
  951.  
  952.                   this.charCount = 12;
  953.                } else if (this.field_5.func == 0 || this.field_5.func == 1) {
  954.                   if (this.field_5.line <= this.lines && this.field_5.line > 0) {
  955.                      this.charCount = this.maxDiff(this.field_5.line);
  956.                   } else {
  957.                      this.field_5.func = 2;
  958.                      this.charCount = 12;
  959.                   }
  960.                }
  961.             } else {
  962.                this.wait(this.delay);
  963.             }
  964.          }
  965.       }
  966.  
  967.    }
  968.  
  969.    public void init() {
  970.       this.tracker = new MediaTracker(this);
  971.       if (this.getParameters() == -1) {
  972.          this.stop();
  973.       }
  974.  
  975.       if (this.bgImage != null) {
  976.          this.imgBackgroundLoad = ((Applet)this).getImage(this.bgImage);
  977.          this.tracker.addImage(this.imgBackgroundLoad, 0);
  978.       }
  979.  
  980.       String var1 = new String(" 0123456789");
  981.       var1 = var1.concat(var1);
  982.       this.TimeSeq = var1.toCharArray();
  983.       this.timeString = new String(this.TimeSeq);
  984.       this.strTime = null;
  985.       this.strOldTime = new String("  :  ");
  986.       this.colors = new Color[9];
  987.       this.colors[0] = new Color(255, 255, 255);
  988.       this.colors[1] = new Color(255, 0, 0);
  989.       this.colors[2] = new Color(0, 255, 0);
  990.       this.colors[3] = new Color(0, 0, 255);
  991.       this.colors[4] = new Color(255, 255, 0);
  992.       this.colors[5] = new Color(255, 160, 0);
  993.       this.colors[6] = new Color(255, 0, 255);
  994.       this.colors[7] = new Color(0, 255, 255);
  995.       this.colors[8] = new Color(0, 0, 0);
  996.    }
  997.  
  998.    public boolean mouseMove(Event var1, int var2, int var3) {
  999.       int var5 = this.titleHeight + this.yOffset;
  1000.       if (var3 >= var5 && this.lineGap > 0) {
  1001.          int var4 = (var3 - var5) / this.lineGap;
  1002.          if (var4 < this.lines) {
  1003.             if (this.DisplayURL[var4] != null) {
  1004.                ((Applet)this).showStatus(this.DisplayURL[var4].toExternalForm());
  1005.             } else {
  1006.                ((Applet)this).showStatus("");
  1007.             }
  1008.          } else {
  1009.             ((Applet)this).showStatus(" ");
  1010.          }
  1011.       } else {
  1012.          ((Applet)this).showStatus(" ");
  1013.       }
  1014.  
  1015.       return true;
  1016.    }
  1017. }
  1018.