home *** CD-ROM | disk | FTP | other *** search
Wrap
import java.applet.Applet; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Event; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.image.ImageObserver; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FilterInputStream; import java.io.FilterOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.Socket; import java.net.URL; import java.net.URLConnection; import java.util.Hashtable; import java.util.Vector; public class FunScroll extends Applet implements Runnable { static final int MaxLines = 50; static final int ShadowIn = 0; static final int ShadowOut = 1; static final int ShadowEtchedIn = 2; static final int ShadowEtchedOut = 3; Image bgImage; Image tiledBgImage; MediaTracker mediaTracker; Thread thread; ThreadGroup threadGroup; boolean suspended = false; int threadDelay = 100; String lineData; boolean usingCgi = false; boolean randomize = false; boolean showAbout = true; int updateInterval; int animateCount; Font font; // $FF: renamed from: dx int int field_0 = 3; // $FF: renamed from: dy int int field_1 = 2; String delim; long threadStartTime; Vector animatedObjects; Vector urlStrings; String urlTarget; int noOfObjects; int currentObjectIndex; FunScrollAnimate currentObj; int frameWidth; int frameType; int frameMargin; Color frameDark1; Color frameDark2; Color frameBright; Image offImage; Dimension offSize; Dimension animAreaSize; Hashtable urlParameters; protected boolean initiated = false; static final boolean debug = false; static final String sourceLocation = "http://www.algonet.se/~jannea/FunScroll/FunScroll.html"; static final String versionInfo = "FunScroll 3.2"; // $FF: renamed from: c int private int field_2; public void init() { Color var1 = this.readColor(this.getParameter("fgColor"), Color.black); Color var2 = this.readColor(this.getParameter("bgColor"), ((Component)this).getBackground()); ((Component)this).setBackground(var2); ((Component)this).setForeground(var1); this.threadGroup = Thread.currentThread().getThreadGroup(); } public void initParameters() { Vector var1 = new Vector(); this.urlStrings = new Vector(); String var2 = this.getParameter("cgi"); if (var2 != null) { this.usingCgi = true; } else { var2 = this.getParameter("lineData"); } if (var2 != null) { this.lineData = var2; this.initLineParametersFromInputURL(this.lineData, var1, this.urlStrings); var2 = this.getParameter("updateInterval"); if (var2 != null) { this.updateInterval = Integer.valueOf(var2); } } else { this.initLineParameters(var1, this.urlStrings); } Color var3 = this.readColor(this.getParameter("fgColor"), Color.black); Color var4 = this.readColor(this.getParameter("bgColor"), ((Component)this).getBackground()); ((Component)this).setBackground(var4); ((Component)this).setForeground(var3); this.frameWidth = this.getParameterToInt("frameWidth", this.frameWidth); this.frameMargin = this.getParameterToInt("frameMargin", this.frameMargin); this.frameType = this.getParameterToFrameType("frameType", this.frameType); this.urlTarget = this.getParameter("target"); var2 = this.getParameter("bgImage"); if (var2 != null) { this.bgImage = ((Applet)this).getImage(((Applet)this).getCodeBase(), var2); this.mediaTracker = new MediaTracker(this); this.mediaTracker.addImage(this.bgImage, 0); } this.font = this.getParameterToFont("font", "style", "size"); this.threadDelay = this.getParameterToInt("delay", this.threadDelay); this.field_0 = this.getParameterToInt("dx", this.field_0); this.field_1 = this.getParameterToInt("dy", this.field_1); this.delim = this.getParameter("delim"); var2 = this.getParameter("randomize"); if (var2 != null && var2.equalsIgnoreCase("True")) { this.randomize = true; } var2 = this.getParameter("showAbout"); if (var2 != null && var2.equalsIgnoreCase("False")) { this.showAbout = false; } this.createAnimates(var1, this.font, ((Component)this).getForeground(), ((Component)this).getBackground(), this.field_0, this.field_1, this.delim); this.initiated = true; } public String getParameter(String var1) { String var2 = super.getParameter(var1); if (this.urlParameters != null) { String var3 = (String)this.urlParameters.get(var1.toLowerCase()); if (var3 != null) { var2 = var3; } } if (var2 == null) { return null; } else { char[] var5 = var2.toCharArray(); for(int var4 = 0; var4 < var5.length; ++var4) { if (var5[var4] >= '\uff00') { var5[var4] = (char)(var5[var4] & 255); } } return new String(var5); } } public int getParameterToInt(String var1, int var2) { String var3 = this.getParameter(var1); return var3 == null ? var2 : Integer.parseInt(var3); } public int getParameterToFrameType(String var1, int var2) { String var3 = this.getParameter(var1); if (var3 == null) { return var2; } else if (var3.equalsIgnoreCase("ShadowOut")) { return 1; } else if (var3.equalsIgnoreCase("ShadowEtchedIn")) { return 2; } else { return var3.equalsIgnoreCase("ShadowEtchedOut") ? 3 : 0; } } public Font getParameterToFont(String var1, String var2, String var3) { String var4 = this.getParameter(var1); if (var4 == null) { var4 = "TimesRoman"; } String var5 = this.getParameter(var2); byte var6 = 1; if (var5 != null) { if (var5.equalsIgnoreCase("plain")) { var6 = 0; } else if (var5.equalsIgnoreCase("bold")) { var6 = 1; } else if (var5.equalsIgnoreCase("italic")) { var6 = 2; } else if (var5.equalsIgnoreCase("bolditalic")) { var6 = 3; } } int var7 = this.getParameterToInt(var3, 24); int var9 = var7; Object var10 = null; FontMetrics var8; do { (new StringBuffer()).append("trying: ").append(var4).append(",").append(var9).toString(); var12 = new Font(var4, var6, var9--); var8 = ((Component)this).getFontMetrics(var12); } while(var8.getDescent() + var8.getAscent() > var7 && var9 >= var7 - 3 && var7 >= 6); if (var9 < var7 - 3 || var7 < 6) { var12 = new Font(var4, var6, var7); } (new StringBuffer()).append("using font: ").append(var12.toString()).toString(); return var12; } protected void initLineParameters(Vector var1, Vector var2) { for(int var3 = 0; var3 < 50; ++var3) { String var4 = "line" + var3; String var5 = this.getParameter(var4); String var6 = "url" + var3; String var7 = this.getParameter(var6); if (var5 != null) { (new StringBuffer()).append(" ").append(var4).append(":").append(var5).toString(); var1.addElement(var5); (new StringBuffer()).append(" ").append(var6).append(":").append(var7).toString(); var2.addElement(var7); } } if (var1.size() <= 0) { this.initDefaultLineParameters(var1); } } private void skipSpace(InputStream var1) throws IOException { while(this.field_2 >= 0 && (this.field_2 == 32 || this.field_2 == 9 || this.field_2 == 10 || this.field_2 == 13)) { this.field_2 = var1.read(); } } private void skipCommentLine(InputStream var1) throws IOException { while(this.field_2 >= 0 && this.field_2 != 10 && this.field_2 != 13) { this.field_2 = var1.read(); } } private String scanIdentifier(InputStream var1) throws IOException { StringBuffer var2; for(var2 = new StringBuffer(); this.field_2 >= 97 && this.field_2 <= 122 || this.field_2 >= 65 && this.field_2 <= 90 || this.field_2 >= 48 && this.field_2 <= 57 || this.field_2 == 95; this.field_2 = var1.read()) { var2.append((char)this.field_2); } return var2.toString(); } private Hashtable scanTag(InputStream var1) throws IOException { Hashtable var2 = new Hashtable(); this.skipSpace(var1); while(this.field_2 >= 0 && this.field_2 != 62) { String var3 = this.scanIdentifier(var1); String var4 = ""; this.skipSpace(var1); if (this.field_2 == 61) { int var5 = -1; this.field_2 = var1.read(); this.skipSpace(var1); if (this.field_2 == 39 || this.field_2 == 34) { var5 = this.field_2; this.field_2 = var1.read(); } StringBuffer var6; for(var6 = new StringBuffer(); this.field_2 > 0 && (var5 < 0 && this.field_2 != 32 && this.field_2 != 9 && this.field_2 != 10 && this.field_2 != 13 && this.field_2 != 62 || var5 >= 0 && this.field_2 != var5); this.field_2 = var1.read()) { var6.append((char)this.field_2); } if (this.field_2 == var5) { this.field_2 = var1.read(); } this.skipSpace(var1); var4 = var6.toString(); } var2.put(var3.toLowerCase(), var4); this.skipSpace(var1); } return var2; } private void parseInput(DataInputStream var1, Vector var2, Vector var3) throws IOException { for(this.field_2 = ((FilterInputStream)var1).read(); this.field_2 >= 0; this.skipSpace(var1)) { if (this.field_2 == 35) { this.skipCommentLine(var1); } else { if (this.field_2 != 60) { this.readLineData(var1, "", var2, var3); ((FilterInputStream)var1).close(); return; } this.field_2 = ((FilterInputStream)var1).read(); String var4 = this.scanIdentifier(var1); if (!var4.equalsIgnoreCase("param")) { this.readLineData(var1, "<" + var4 + ">", var2, var3); ((FilterInputStream)var1).close(); return; } Hashtable var5 = this.scanTag(var1); String var6 = (String)var5.get("name"); if (var6 == null) { System.out.println("Warning: <param name=... value=...>tag requires name attribute."); } else { String var7 = (String)var5.get("value"); if (var7 == null) { System.out.println("Warning: <param name=... value=...>tag requires value attribute."); } else { if (this.urlParameters == null) { this.urlParameters = new Hashtable(); } String var8 = "parseInput() put " + var6 + " = '" + var7 + "'"; this.urlParameters.put(var6.toLowerCase(), var7); } } } if (this.field_2 == 62) { this.field_2 = ((FilterInputStream)var1).read(); } } ((FilterInputStream)var1).close(); } String readDataLine(DataInputStream var1) throws IOException { String var2; for(var2 = var1.readLine(); var2 != null && (var2.length() == 0 || var2.charAt(0) == '#'); var2 = var1.readLine()) { } return var2; } void readLineData(DataInputStream var1, String var2, Vector var3, Vector var4) throws IOException { Object var5 = null; String var7 = var2 + var1.readLine(); while(var7 != null) { (new StringBuffer()).append("readLineData: ").append(var7).toString(); var3.addElement(var7); var7 = this.readDataLine(var1); if (var7 != null && var7.length() > 4 && var7.substring(0, 4).equalsIgnoreCase("URL:")) { var4.addElement(var7.substring(4)); var7 = this.readDataLine(var1); } else { var4.addElement((Object)null); } } } protected void initLineParametersFromInputURL(String var1, Vector var2, Vector var3) { if (this.usingCgi) { this.postCGI(var1, var2, var3); } else { URL var4 = null; Object var5 = null; try { var4 = new URL(var1); (new StringBuffer()).append("initLineParametersFromInputURL(): using direct URL: ").append(var4).toString(); URLConnection var6 = var4.openConnection(); var6.setUseCaches(false); var11 = new DataInputStream(var6.getInputStream()); } catch (Exception var9) { (new StringBuffer()).append("initLineParametersFromInputURL(): Can't read URL:").append(var4).toString(); var11 = null; } if (var11 == null) { try { var4 = new URL(((Applet)this).getDocumentBase(), var1); (new StringBuffer()).append("initLineParametersFromInputURL(): using rel. URL:").append(var4).toString(); URLConnection var13 = var4.openConnection(); var13.setUseCaches(false); var11 = new DataInputStream(var13.getInputStream()); } catch (Exception var8) { (new StringBuffer()).append("initLineParametersFromInputURL(): Can't read URL:").append(var4).toString(); var5 = null; this.initURLErrorLineParameters(var1, var2); this.updateInterval = 0; return; } } try { this.parseInput(var11, var2, var3); } catch (IOException var7) { } if (var2.size() <= 0) { this.initURLErrorLineParameters(var1, var2); this.updateInterval = 0; } } } public void postCGI(String var1, Vector var2, Vector var3) { String var4 = ((Applet)this).getCodeBase().getHost(); int var5 = ((Applet)this).getCodeBase().getPort(); if (var5 == -1) { var5 = 80; } (new StringBuffer()).append("postCGI; home: ").append(var4).append("port: ").append(var5).toString(); Socket var6; try { var6 = new Socket(var4, var5); } catch (Exception var19) { String var8 = "postCGI(): Can't create socket:" + var19; this.initURLErrorLineParameters(var1, var2); this.updateInterval = 0; return; } OutputStream var7; InputStream var21; try { var7 = var6.getOutputStream(); var21 = var6.getInputStream(); } catch (Exception var18) { try { var6.close(); } catch (IOException var14) { } String var12 = "postCGI(): Can't create output stream:" + var18; this.initURLErrorLineParameters(var1, var2); this.updateInterval = 0; return; } DataOutputStream var9; DataInputStream var10; try { var9 = new DataOutputStream(var7); var10 = new DataInputStream(var21); } catch (Exception var17) { try { var6.close(); } catch (IOException var13) { } String var22 = "postCGI(): Can't create output stream:" + var17; this.initURLErrorLineParameters(var1, var2); this.updateInterval = 0; return; } try { var9.writeBytes("POST " + var1 + " HTTP/1.0\r\n"); var9.writeBytes("Content-type: application/octet-stream\r\n"); var9.writeBytes("Content-length: 0\r\n"); var9.writeBytes("User-Agent: FunScroll 3.2\r\n"); var9.writeBytes("\r\n"); String var11; while((var11 = var10.readLine()) != null && !var11.equals("")) { (new StringBuffer()).append("postCGI(); respose header: ").append(var11).toString(); } this.parseInput(var10, var2, var3); } catch (Exception var20) { } if (var2.size() <= 0) { this.initURLErrorLineParameters(var1, var2); this.updateInterval = 0; } try { ((FilterOutputStream)var9).close(); ((FilterInputStream)var10).close(); } catch (IOException var16) { } try { var6.close(); } catch (IOException var15) { } } protected void initDefaultLineParameters(Vector var1) { this.threadDelay = 200; var1.addElement("<25><typed>" + this.getAppletInfo()); var1.addElement("<100>No parameters specified!"); } protected void initURLErrorLineParameters(String var1, Vector var2) { this.threadDelay = 200; var2.addElement("<nervous><30><color=#FF0000>Error!"); var2.addElement("<100>Could not read url: " + var1); } public String getAppletInfo() { return "FunScroll 3.2"; } public String[][] getParameterInfo() { String[][] var1 = new String[][]{{"line<n>", "string", "Message line <n>"}, {"url<n>", "string", "URL <n>"}, {"showAbout", "boolean", "Display about popup on shift-click"}, {"randomize", "boolean", "Display message lines in random order"}, {"target", "string", "Default frame or window target"}, {"lineData", "string", "Message line data file"}, {"cgi", "string", "CGI script to be used to read message lines"}, {"updateInterval", "int", "Update interval to read data file (0)"}, {"delim", "string", "Delimiter string (<>)"}, {"frameWidth", "int", "Frame border width (0)"}, {"frameMargin", "int", "Frame margin width (0)"}, {"frameType", "string", "Frame type (ShadowIn)"}, {"font", "string", "Message font (TimesRoman)"}, {"style", "string", "Message font style (bold)"}, {"size", "int", "Message font size (22)"}, {"delay", "int", "Animation delay time in millisec. (100)"}, {"dx", "int", "No of pixels to move horizontally for each animation (2)"}, {"dy", "int", "No of pixels to move vertically for each animation (1)"}, {"fgColor", "string", "Foreground Color"}, {"bgColor", "string", "Background Color"}}; return var1; } public Color readColor(String var1, Color var2) { if (var1 == null) { return var2; } else { Object var3 = null; try { if (var1.startsWith("#")) { var5 = Integer.valueOf(var1.substring(1), 16); } else if (var1.startsWith("0x")) { var5 = Integer.valueOf(var1.substring(2), 16); } else { var5 = Integer.valueOf(FunScrollColorSupport.lookup(var1), 16); } } catch (NumberFormatException var4) { var5 = null; } return var5 == null ? var2 : new Color(var5); } } public void createAnimates(Vector var1, Font var2, Color var3, Color var4, int var5, int var6, String var7) { this.noOfObjects = 0; this.animatedObjects = new Vector(var1.size()); for(int var8 = 0; var8 < var1.size(); ++var8) { String var9 = " " + (String)var1.elementAt(var8); this.animatedObjects.addElement(new FunScrollAnimate(this, (String)var1.elementAt(var8), var2, var3, var4, var5, var6, var7)); ++this.noOfObjects; } this.currentObjectIndex = 0; if (this.randomize) { this.currentObjectIndex = (int)((double)this.noOfObjects * Math.random()); } this.currentObj = (FunScrollAnimate)this.animatedObjects.elementAt(this.currentObjectIndex); this.offSize = new Dimension(0, 0); } public void animate(Graphics var1) { if (this.currentObj.update(var1)) { if (this.randomize) { this.currentObjectIndex = (int)((double)this.noOfObjects * Math.random()); } else { ++this.currentObjectIndex; } if (this.currentObjectIndex >= this.noOfObjects) { if (this.lineData != null && this.updateInterval > 0) { ++this.animateCount; } this.currentObjectIndex = 0; } this.currentObj = (FunScrollAnimate)this.animatedObjects.elementAt(this.currentObjectIndex); this.currentObj.reset(); } } public void paintTiledImage(Graphics var1, Image var2, int var3, int var4, int var5) { if (this.tiledBgImage == null) { int var6 = var2.getWidth((ImageObserver)null); int var7 = var2.getHeight((ImageObserver)null); if (var6 > 0 && var7 > 0) { this.tiledBgImage = ((Component)this).createImage(var4, var5); Graphics var8 = this.tiledBgImage.getGraphics(); var8.setColor(((Component)this).getBackground()); var8.fillRect(0, 0, var4, var5); for(int var9 = 0; var9 < var4; var9 += var6) { for(int var10 = 0; var10 < var5; var10 += var7) { var8.drawImage(var2, var9, var10, (ImageObserver)null); } } var8.dispose(); } } if (this.tiledBgImage != null) { var1.drawImage(this.tiledBgImage, var3, var3, (ImageObserver)null); } } public void paint(Graphics var1) { if (this.offImage != null) { var1.drawImage(this.offImage, 0, 0, (ImageObserver)null); } } public void initLoadMessage() { if (this.offImage == null) { this.offSize = ((Component)this).size(); this.offImage = ((Component)this).createImage(this.offSize.width, this.offSize.height); } Graphics var1 = this.offImage.getGraphics(); var1.setColor(((Component)this).getBackground()); var1.fillRect(0, 0, this.offSize.width, this.offSize.height); var1.setColor(((Component)this).getForeground()); var1.drawString("FunScroll: Loading applet...", 10, this.offSize.height / 2); var1.dispose(); } protected void drawFrame(Graphics var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { if (var7 > 0) { if (this.frameDark1 == null) { this.frameDark1 = FunScrollColorSupport.darker(((Component)this).getBackground(), (double)0.5F); this.frameDark2 = FunScrollColorSupport.darker(((Component)this).getBackground(), 0.1); this.frameBright = FunScrollColorSupport.brighter(((Component)this).getBackground(), (double)0.5F); } switch (var6) { case 1: for(int var11 = 0; var11 < var7; ++var11) { var1.setColor(this.frameBright); this.drawTopLeftLines(var1, var2, var3, var4, var5, var11, var8); var1.setColor(this.frameDark1); this.drawBottomRightLines(var1, var2, var3, var4, var5, var11, var8); } break; case 2: for(int var10 = 0; var10 < var7; ++var10) { if (var10 == 0) { var1.setColor(this.frameDark1); } else if (var10 == var7 - 1) { var1.setColor(this.frameBright); } else { var1.setColor(this.frameDark2); } this.drawTopLeftLines(var1, var2, var3, var4, var5, var10, var8); if (var10 == 0) { var1.setColor(this.frameBright); } else if (var10 == var7 - 1) { var1.setColor(this.frameDark1); } else { var1.setColor(this.frameDark2); } this.drawBottomRightLines(var1, var2, var3, var4, var5, var10, var8); } break; case 3: for(int var9 = 0; var9 < var7; ++var9) { if (var9 == 0) { var1.setColor(this.frameBright); } else if (var9 == var7 - 1) { var1.setColor(this.frameDark1); } else { var1.setColor(((Component)this).getBackground()); } this.drawTopLeftLines(var1, var2, var3, var4, var5, var9, var8); if (var9 == 0) { var1.setColor(this.frameDark1); } else if (var9 == var7 - 1) { var1.setColor(this.frameBright); } else { var1.setColor(((Component)this).getBackground()); } this.drawBottomRightLines(var1, var2, var3, var4, var5, var9, var8); } break; default: for(int var12 = 0; var12 < var7; ++var12) { var1.setColor(this.frameDark1); this.drawTopLeftLines(var1, var2, var3, var4, var5, var12, var8); var1.setColor(this.frameBright); this.drawBottomRightLines(var1, var2, var3, var4, var5, var12, var8); } } var1.setColor(((Component)this).getBackground()); } } void drawTopLeftLines(Graphics var1, int var2, int var3, int var4, int var5, int var6, int var7) { var1.drawLine(var2 + var7 + var6, var3 + var7 + var6, var2 + var4 - var7 - var6 - 1, var3 + var7 + var6); var1.drawLine(var2 + var7 + var6, var3 + var7 + var6, var2 + var7 + var6, var3 + var5 - var7 - var6 - 1); } void drawBottomRightLines(Graphics var1, int var2, int var3, int var4, int var5, int var6, int var7) { var1.drawLine(var2 + var7 + var6, var3 + var5 - var7 - var6 - 1, var2 + var4 - var7 - var6 - 1, var3 + var5 - var7 - var6 - 1); var1.drawLine(var2 + var4 - var7 - var6 - 1, var3 + var7 + var6, var2 + var4 - var7 - var6 - 1, var3 + var5 - var7 - var6 - 1); } public void update(Graphics var1) { this.paint(var1); } void updateAnimation() { if (this.initiated) { long var1 = 0L; Dimension var3 = ((Component)this).size(); if (this.offImage == null || var3.width != this.offSize.width || var3.height != this.offSize.height) { this.offSize = var3; this.offImage = ((Component)this).createImage(var3.width, var3.height); this.currentObj.reset(); } Graphics var4 = this.offImage.getGraphics(); int var5 = this.getMargin(); this.animAreaSize = new Dimension(var3.width - 2 * var5, var3.height - 2 * var5); var4.setColor(((Component)this).getBackground()); var4.fillRect(0, 0, var3.width, var3.height); this.drawFrame(var4, 0, 0, var3.width, var3.height, this.frameType, this.frameWidth, this.frameMargin); var4.clipRect(var5, var5, this.animAreaSize.width, this.animAreaSize.height); var4.setColor(((Component)this).getBackground()); var4.fillRect(this.frameMargin + this.frameWidth, this.frameMargin + this.frameWidth, this.animAreaSize.width, this.animAreaSize.height); if (this.bgImage != null) { if ((this.mediaTracker.statusID(0, true) & 8) != 0) { this.paintTiledImage(var4, this.bgImage, this.frameMargin + this.frameWidth, this.animAreaSize.width, this.animAreaSize.height); } else if (this.mediaTracker.isErrorID(0)) { System.out.println("Error: Can't load bgImage"); this.bgImage = null; } } this.animate(var4); var4.dispose(); String var6 = "time for updateAnimation():" + (System.currentTimeMillis() - var1); } } public void run() { if (Thread.currentThread() == this.thread) { this.thread.setPriority(1); if (!this.initiated) { this.initLoadMessage(); ((Component)this).repaint(); try { Thread.sleep(50L); } catch (InterruptedException var4) { } this.initParameters(); } } while(Thread.currentThread() == this.thread) { this.updateAnimation(); ((Component)this).repaint(); try { this.threadStartTime += (long)this.threadDelay; int var1 = (int)Math.max((long)(this.threadDelay / 2), this.threadStartTime - System.currentTimeMillis()); (new StringBuffer()).append("Sleep:").append(var1).toString(); Thread.sleep((long)var1); } catch (InterruptedException var3) { return; } if (this.lineData != null && this.updateInterval > 0 && this.animateCount >= this.updateInterval) { this.animateCount = 0; Vector var5 = new Vector(); this.initLineParametersFromInputURL(this.lineData, var5, this.urlStrings); this.createAnimates(var5, this.font, ((Component)this).getForeground(), ((Component)this).getBackground(), this.field_0, this.field_1, this.delim); } } } public void start() { ((Component)this).repaint(); if (this.thread == null) { if (this.threadGroup != null) { this.thread = new Thread(this.threadGroup, this); } else { this.thread = new Thread(this); } this.thread.start(); } this.threadStartTime = System.currentTimeMillis(); } public void stop() { this.thread = null; } public boolean mouseUp(Event var1, int var2, int var3) { if ((var1.modifiers & 1) != 0) { this.showAboutPopup(); return true; } else { String var4 = null; if (this.currentObjectIndex < this.urlStrings.size()) { var4 = (String)this.urlStrings.elementAt(this.currentObjectIndex); } if (!this.suspended && this.thread != null) { if (var4 == null) { this.stop(); this.suspended = true; } } else { this.start(); this.suspended = false; } if (this.suspended) { ((Applet)this).showStatus(this.getAppletInfo() + " - Click to resume."); } else if (var4 != null) { this.showDocument(var4); } else if (this.showAbout) { ((Applet)this).showStatus(this.getAppletInfo() + " - Shift-click for info..."); } else { ((Applet)this).showStatus(this.getAppletInfo()); } return true; } } public boolean mouseEnter(Event var1, int var2, int var3) { this.showUrl(); return true; } void showAboutPopup() { if (this.showAbout) { FunScrollAbout var1 = new FunScrollAbout(this.getAppletInfo()); var1.appendText("\t" + this.getAppletInfo() + "\n\n"); var1.appendText(" Copyright (c) 1996, 1997 by Jan Andersson, Torpa Konsult AB.\n\n"); var1.appendText(" Info, updates and documentation at http://www.algonet.se/~jannea/FunScroll/FunScroll.html\n\n"); var1.appendText(" Applet information:\n"); var1.appendText(" Document base: " + ((Applet)this).getDocumentBase() + "\n"); var1.appendText(" Code base: " + ((Applet)this).getCodeBase() + "\n\n"); var1.appendText(" Applet parameters:\n"); var1.appendText(" width = " + this.getParameter("WIDTH") + "\n"); var1.appendText(" height = " + this.getParameter("HEIGHT") + "\n\n"); var1.appendText(" Message lines (line<n> parameters):\n"); for(int var2 = 0; var2 < this.noOfObjects; ++var2) { FunScrollAnimate var3 = (FunScrollAnimate)this.animatedObjects.elementAt(var2); var1.appendText(" line" + var2 + " = " + var3.getUnparsedTextLine() + "\n"); var1.appendText(" url" + var2 + " = "); String var4 = null; if (var2 < this.urlStrings.size()) { var4 = (String)this.urlStrings.elementAt(var2); } var1.appendText(var4 + "\n"); } var1.appendText("\n Other parameters:\n"); String[][] var6 = this.getParameterInfo(); for(int var7 = 2; var7 < var6.length; ++var7) { String var5 = " " + var6[var7][0] + " = " + this.getParameter(var6[var7][0]); if (var5.length() <= 17) { var5 = var5 + "\t"; } var1.appendText(var5 + "\t [" + var6[var7][2] + "]\n"); } var1.show(); } } void showUrl() { if (this.urlStrings != null && this.currentObjectIndex < this.urlStrings.size()) { String var1 = (String)this.urlStrings.elementAt(this.currentObjectIndex); if (var1 != null) { String var2 = var1.toUpperCase(); int var3 = var2.indexOf("TARGET="); if (var3 > 0) { var1 = var1.substring(0, var3); } ((Applet)this).showStatus(var1); return; } ((Applet)this).showStatus(""); } } void showDocument(String var1) { String var2 = null; String var3 = var1.toUpperCase(); int var4 = var3.indexOf("TARGET="); if (var4 > 0) { String var9 = var1.substring(var4 + 7); var1 = var1.substring(0, var4); var2 = var9.trim(); (new StringBuffer()).append("target:").append(var2).toString(); } if (var2 == null) { var2 = this.urlTarget; } Object var5 = null; try { var10 = new URL(var1); } catch (MalformedURLException var8) { var10 = null; } if (var10 == null) { try { var10 = new URL(((Applet)this).getDocumentBase(), var1); } catch (MalformedURLException var7) { System.out.println("Error. Can't open URL: " + var1); System.out.println("(" + ((Throwable)var7).getMessage() + ")"); ((Applet)this).showStatus("Error. Can't open URL: " + var1); var10 = null; } } if (var10 != null) { ((Applet)this).showStatus("Loading: " + var1 + "..."); if (var2 == null) { ((Applet)this).getAppletContext().showDocument(var10); return; } ((Applet)this).getAppletContext().showDocument(var10, var2); } } public static void dbg(String var0) { } public Image getOffImage() { return this.offImage; } public int getMargin() { return this.frameMargin + this.frameWidth; } static Color darker(int var0, int var1, int var2, double var3) { return FunScrollColorSupport.darker(var0, var1, var2, var3); } static Color darker(Color var0, double var1) { return FunScrollColorSupport.darker(var0, var1); } static Color brighter(int var0, int var1, int var2, double var3) { return FunScrollColorSupport.brighter(var0, var1, var2, var3); } static Color brighter(Color var0, double var1) { return FunScrollColorSupport.brighter(var0, var1); } }