//
//    CHAPTER 6
//    Applet Source Name [Skelton.java]
//                                    1996.2
//                 Author [ Junzo hagimoto ]

import java.applet.*;
import java.awt.*;

public  class  Skelton  extends Applet implements Runnable {
    Dimension d;
                                                        //  
    String s[];                                                     // UPDATE 
    Thread kicker = null;
    int    xScroll;                           
    int    y_Point;
    Font   font;                                        
    int    strHeight,strWidth;                          
                                                        //  
    int    maxText;                                                 // ADD
    int    curTextCount=0 ;                                         // ADD
    int    red,blue,green;                                          // ADD
    Color  color;                                                   // ADD 

    public void init() {
        d = size();
        xScroll = d.width;                    

                                                        //  
        String param = getParameter( "maxText" );                   // ADD
        maxText = (param != null) ? Integer.parseInt(param) : 1;    // ADD
        s = new String[maxText];                                    // ADD
        int i=0;                                                    // ADD
        do{                                                         // ADD
            param = getParameter( "text"+ (i+1) );                  // ADD
            if(param != null ){                                     // ADD
                s[i] = new String(param);                           // ADD
            }else{                                                  // ADD
                if( i==0 ){                                         // ADD
                    s[i] = "Java";                                  // ADD
                }                                                   // ADD
                maxText = i+1;                                      // ADD
            }                                                       // ADD
        }while( param != null && ++i != maxText );                  // ADD 
                                                        //  
    //---------------------------------------------------------------
    //  DEL s = getParameter("text");             
    //  DEL if (s == null) {                      
    //  DEL     s = "Java";                       
    //  DEL }
    //---------------------------------------------------------------//

        font  = new Font("TimesRoman",Font.BOLD,20);           
        strHeight  =(getFontMetrics(font)).getLeading() ;      
        strHeight -=(getFontMetrics(font)).getDescent() ;      
        strHeight +=(getFontMetrics(font)).getAscent() ;       
        y_Point    =(d.height   + strHeight                    
                   -  (getFontMetrics(font)).getDescent()) /2; 

    }


    public void run() {
        Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3);
        while (kicker != null) {
            repaint();
            try {
                Thread.sleep( 20 );                         
            } catch (InterruptedException e) {}
        }
        kicker=null;
    }

    public void update(Graphics g) {                        
           paint(g);                                        
    }                                                       
    public void paint(Graphics g) {
        g.setFont( font );                                  
        g.setColor(Color.white);
        g.fillRect(0, 0, d.width, d.height);
                                                        //  
        if(xScroll == d.width){                                       // ADD
            red   = (int)(Math.random() * 256);                       // ADD
            blue  = (int)(Math.random() * 256);                       // ADD
            green = (int)(Math.random() * 256);                       // ADD
            color = new     Color( red, green, blue);                 // ADD
            curTextCount++;                                           // ADD
            if(curTextCount > maxText){                               // ADD
               curTextCount=1;                                        // ADD
            }                                                         // ADD
            strWidth   = 
           (getFontMetrics(font)).stringWidth(s[curTextCount-1]);//UPDATE&&MOVE
        }                                                             // ADD
        g.setColor(color);                                            // ADD
        g.drawString(s[curTextCount-1],xScroll--,y_Point);            //UPDATE 
       if(xScroll < -strWidth ){                           
           xScroll = d.width;                 
       }                                      
    }

    public void start() {
       if (kicker == null) {
            kicker = new Thread(this);
            kicker.start();
       }
    }

    public void stop() {
        if (kicker != null) {
            kicker.stop();
            kicker = null;
        }
    }
}
                                                                                              //