// LCDDigit v.0.1c

import java.awt.*;
import java.lang.*;
//import java.applet.Applet;

// class definitions

class LCDElement {
	final static int x = 0;
	final static int y = 0;
	final static int w = 12;
	final static int h = 20;

	private int theElement;
	private int startX, startY, endX, endY;

	// constructor:
	LCDElement(int elementID)
	{
		theElement = elementID;
		switch (elementID)
		{
			case 0:
				startX = x; startY = y+1; endX = x; endY = y+h/2-1;
				break;
			case 1:
				startX = x+1; startY = y; endX = x+w-1; endY = y;
				break;
			case 2:
				startX = x+w; startY = y+1; endX = x+w; endY = y+h/2-1;
				break;
			case 3:
				startX = x+1; startY = y+h/2; endX = x+w-1; endY = y+h/2;
				break;
			case 4:
				startX = x; startY = y+h/2+1; endX = x; endY = y+h-1;
				break;
			case 5:
				startX = x+1; startY = y+h; endX = x+w-1; endY = y+h;
				break;
			case 6:
				startX = x+w; startY = y+h/2+1; endX = x+w; endY = y+h-1;
				break;
			default: // same as '0'
				startX = x; startY = y+1; endX = x; endY = y+h/2-1;
				break;
		}
	}

	// public methods:
	public void draw(Graphics g, int x, int y, int size)
	{
		g.drawLine(startX+x, startY+y, size*endX+x, size*endY+y);
	}

	static public int digitWidth()
	{
		return w;
	}

	static public int digitHeight()
	{
		return h;
	}
}

class LCDDigit {
	final static int numElements = 7;
	static private LCDElement elementsTable[];

	// private members:
	private int theDigit;
	private boolean elementArray[] = new boolean[numElements];

		//  0112
		//  0  2
		//   33
		//  4  6
		//	4556

		// els: 0  1  2  3  4  5  6
		// '0': 1, 1, 1, 0, 1, 1, 1
		// '1': 0, 0, 1, 0, 0, 0, 1
		// '2': 0, 1, 1, 1, 1, 1, 0
		// '3': 0, 1, 1, 1, 0, 1, 1
		// '4': 1, 0, 1, 1, 0, 0, 1
		// '5': 1, 1, 0, 1, 0, 1, 1
		// '6': 1, 1, 0, 1, 1, 1, 1
		// '7': 0, 1, 1, 0, 0, 0, 1
		// '8': 1, 1, 1, 1, 1, 1, 1
		// '9': 1, 1, 1, 1, 0, 1, 1

	// constructors:
	LCDDigit()
	{
		// defaults to '0'
		theDigit = 0;
		elementArray[0] = true;
		elementArray[1] = true;
		elementArray[2] = true;
		elementArray[3] = false;
		elementArray[4] = true;
		elementArray[5] = true;
		elementArray[6] = true;
	}

	LCDDigit(int digitID)
	{
		theDigit = digitID;
		switch (digitID)
		{
			case 1:
				elementArray[0] = false;
				elementArray[1] = false;
				elementArray[2] = true;
				elementArray[3] = false;
				elementArray[4] = false;
				elementArray[5] = false;
				elementArray[6] = true;
				break;
			case 2:
				elementArray[0] = false;
				elementArray[1] = true;
				elementArray[2] = true;
				elementArray[3] = true;
				elementArray[4] = true;
				elementArray[5] = true;
				elementArray[6] = false;
				break;
			case 3:
				elementArray[0] = false;
				elementArray[1] = true;
				elementArray[2] = true;
				elementArray[3] = true;
				elementArray[4] = false;
				elementArray[5] = true;
				elementArray[6] = true;
				break;
			case 4:
				elementArray[0] = true;
				elementArray[1] = false;
				elementArray[2] = true;
				elementArray[3] = true;
				elementArray[4] = false;
				elementArray[5] = false;
				elementArray[6] = true;
				break;
			case 5:
				elementArray[0] = true;
				elementArray[1] = true;
				elementArray[2] = false;
				elementArray[3] = true;
				elementArray[4] = false;
				elementArray[5] = true;
				elementArray[6] = true;
				break;
			case 6:
				elementArray[0] = true;
				elementArray[1] = true;
				elementArray[2] = false;
				elementArray[3] = true;
				elementArray[4] = true;
				elementArray[5] = true;
				elementArray[6] = true;
				break;
			case 7:
				elementArray[0] = false;
				elementArray[1] = true;
				elementArray[2] = true;
				elementArray[3] = false;
				elementArray[4] = false;
				elementArray[5] = false;
				elementArray[6] = true;
				break;
			case 8:
				elementArray[0] = true;
				elementArray[1] = true;
				elementArray[2] = true;
				elementArray[3] = true;
				elementArray[4] = true;
				elementArray[5] = true;
				elementArray[6] = true;
				break;
			case 9:
				elementArray[0] = true;
				elementArray[1] = true;
				elementArray[2] = true;
				elementArray[3] = true;
				elementArray[4] = false;
				elementArray[5] = true;
				elementArray[6] = true;
				break;
			default:
			// case 0:
				elementArray[0] = true;
				elementArray[1] = true;
				elementArray[2] = true;
				elementArray[3] = false;
				elementArray[4] = true;
				elementArray[5] = true;
				elementArray[6] = true;
				break;
		}
			
	}

	LCDDigit(int digitID, boolean el0, boolean el1, boolean el2, boolean el3, boolean el4,
			 boolean el5, boolean el6)
	{
		theDigit = digitID;
		elementArray[0] = el0;
		elementArray[1] = el1;
		elementArray[2] = el2;
		elementArray[3] = el3;
		elementArray[4] = el4;
		elementArray[5] = el5;
		elementArray[6] = el6;
	}

	// public methods:
	// draw the relevant elements using color
	public void draw(Graphics g, int x, int y, int size, Color color)
	{
//		g.clearRect(x, y, size*LCDElement.digitWidth()+1, size*LCDElement.digitHeight()+1);
		g.setColor(color);
		for (int i=0; i<numElements; i++)
			if (this.elementArray[i])
				elementsTable[i].draw(g, x, y, size);
	}

	// same as above but also draws other "hidden" elements in bgcolor
	public void draw(Graphics g, int x, int y, int size, Color color, Color bgcolor)
	{
		for (int i=0; i<numElements; i++)
			if (this.elementArray[i]) {
				g.setColor(color);
				elementsTable[i].draw(g, x, y, size);
			}
			else {
				g.setColor(bgcolor);
				elementsTable[i].draw(g, x, y, size);
			}
		g.setColor(color);
	}

	static public void setupElementsTable()
	{
		elementsTable = new LCDElement[numElements];
		for (int i=0; i<numElements; i++)
			elementsTable[i] = new LCDElement(i);
	}

}
