// Copyright Andy Deck 2002, GNU Public License 2
// With the notable provision that any commercial use
// must be approved by the copyright holder.
import java.awt.*;
import java.awt.*;
import java.util.Random;
import java.util.StringTokenizer;

public class streaker extends Module
    implements Runnable
{

    public streaker()
    {
        mode = 3;
    }

    public void init(lexicon lexicon1, String s)
    {
        super.lex = lexicon1;
        if(s == "")
        {
            Random random = new Random();
            mode = Math.abs(random.nextInt() % 4);
        } else
        {
            try
            {
                StringTokenizer stringtokenizer = new StringTokenizer(s);
                switch(stringtokenizer.countTokens())
                {
                case 1: // '\001'
                    mode = Integer.parseInt(stringtokenizer.nextToken());
                    break;
                }
                if(mode < 0 || mode > 2)
                    mode = 3;
            }
            catch(Exception exception)
            {
                mode = 3;
            }
        }
        start();
    }

    public void stop()
    {
        t = null;
    }

    public void start()
    {
        t = new Thread(this, "streaker");
        t.start();
    }

    public void run()
    {
        int i = 0;
        int j = 0;
        int j1 = 0;
        Graphics g = super.lex.img.getGraphics();
        switch(mode)
        {
        default:
            break;

        case 0: // '\0'
            g.copyArea(0, 0, Module.MIDWID, Module.MIDHT, Module.MIDWID, Module.MIDHT);
            for(; t != null && i < Module.MIDWID && g != null && !super.abort; i++)
            {
                g.copyArea(j, j1, 1, Module.HEIGHT - j1, 1, 1);
                g.copyArea(j, j1, Module.WIDTH - j, 1, 1, 1);
                j++;
                j1++;
            }

            break;

        case 1: // '\001'
            int k = Module.MIDWID;
            for(int k1 = Module.MIDHT; t != null && k > 0 && g != null && !super.abort; k1--)
            {
                g.copyArea(k, k1, Module.MIDWID - k, 1, -1, -1);
                g.copyArea(k, k1, 1, Module.MIDHT - k1, -1, -1);
                k--;
            }

            break;

        case 2: // '\002'
            int l = Module.WIDTH;
            for(int l1 = Module.HEIGHT; t != null && l > Module.MIDWID && g != null && !super.abort; l1--)
            {
                g.copyArea(l, l1, l - Module.MIDWID, l1 - Module.MIDHT, -1, -1);
                l--;
            }

            break;

        case 3: // '\003'
            int i1 = 0;
            for(int i2 = 0; t != null && i1 < Module.MIDWID && g != null && !super.abort; i2++)
            {
                g.copyArea(i1, i2, Module.MIDWID - i1, Module.MIDHT - i2, -1, -1);
                i1++;
            }

            break;
        }
        super.repaint();
        if(g != null)
            g.dispose();
    }

    private volatile Thread t;
    int mode;
}
