import java.awt.*; import java.net.*; import java.io.*; import java.util.*; public class flash extends java.applet.Applet implements Runnable { Image offImage; Graphics offGraphics; Dimension offDimension; Vector Words,Delays,Extras; Font font; Thread paintThread; double speed; int delay,size,count,baseline,midline,brightness,scrollX; String fontname; boolean start=false,dragstate=false;; public void init(){ brightness=255; pout("flash"); midline=150; baseline=100; delay=1000; count=0; scrollX=270; String location=""; try{ location=getParameter("url"); } catch (Exception e) { pout(String.valueOf(e)); } size=24; try { size=Integer.parseInt(getParameter("size")); } catch (Exception e) { pout(String.valueOf(e)); } try { fontname=getParameter("font"); } catch (Exception e) { pout(String.valueOf(e)); } pout(fontname+" "+size); font=new Font(fontname,Font.PLAIN,size); Words=new Vector(); Delays=new Vector(); Extras=new Vector(); readIn(location); } public void paint(Graphics g){ Dimension d=size(); if ((offGraphics==null) || (offDimension.width!=d.width) || (offDimension.width!=d.width) || (offDimension.height!=d.height)) { offImage=createImage(d.width,d.height); offGraphics=offImage.getGraphics(); offDimension=d; offGraphics.setFont(font); baseline=d.height/2+(getFontMetrics(font).getDescent()/2); //getFontMetrics(font).getHeight())/2; midline=d.width/2; } offGraphics.setColor(Color.black); offGraphics.fillRect(0,0,d.width,d.height); offGraphics.setColor(new Color(brightness,brightness,brightness)); if (start==true){ addExtras(Integer.parseInt(String.valueOf (Extras.elementAt(count)))); offGraphics.setColor(new Color(brightness,brightness,brightness)); String w=String.valueOf(Words.elementAt(count)); offGraphics.drawString(w,midline- getFontMetrics(font).stringWidth(w)/2, baseline); } drawScrollBar(); g.drawImage(offImage,0,0,this); } public void drawScrollBar(){ offGraphics.setColor(Color.gray); offGraphics.fillRect(0,offDimension.height-10,offDimension.width,10); offGraphics.setColor(Color.darkGray); offGraphics.fillRect(0,offDimension.height-10,offDimension.width,2); offGraphics.fillRect(scrollX+2,offDimension.height-10,2,10); offGraphics.setColor(Color.black); offGraphics.fillRect(scrollX-2,offDimension.height-10,5,10); } public void addExtras(int in){ switch (in){ case 1: brightness=255; break; case 2: if (brightness>0) brightness-=5; break; } } public void update(Graphics g){ paint(g); } public boolean mouseDown(Event evt, int xclk, int yclk){ if (yclkoffDimension.width) scrollX=offDimension.width; repaint(); } return true; } public boolean mouseUp(Event evt, int xclk, int yclk){ dragstate=false; return false; } public void readIn(String urlName) { try { URL is = new URL(urlName); StreamTokenizer st = new StreamTokenizer(is.openStream()); pout("reading from:"+urlName); String Word; while (st.nextToken() != st.TT_EOF) { st.toString(); Words.addElement(st.sval); st.nextToken(); Delays.addElement(new Integer((int)st.nval)); st.nextToken(); Extras.addElement(new Integer((int)st.nval)); } } catch (Exception e) { pout(String.valueOf(e)); } } public void start() { if (paintThread == null) { paintThread = new Thread(this, "paint"); paintThread.start(); } } public void stop() { paintThread = null; } public void run() { int passed=0; while (Thread.currentThread() == paintThread) { repaint(); if (start==true){ try { speed=((scrollX/(double)offDimension.width)*2.5)+.5; delay=(int)(Integer.parseInt(String.valueOf (Delays.elementAt(count)))*speed); } catch (Exception e) { pout(String.valueOf(e)); } try { Thread.sleep(25); passed+=50; } catch (Exception e) { pout(String.valueOf(e)); } if (passed>delay){ passed=0; count++; if (count==Words.size()){ start=false; } } } else { try { Thread.sleep(100); } catch (Exception e) { pout(String.valueOf(e)); } } } } public void pout(String in){ System.out.println(in); } }