//
/* ----------------------------------------------------------------------------------------------
    lamp.java	2進数										ver. 2.00 (JDK 1.02)
    														ueyama@infonet.co.jp  1999.08.30
    														update: 2008.03.21
---------------------------------------------------------------------------------------------- */

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


public class lamp extends Applet
{
	int			Dec=13;													// 10進数値
	Image		Img;
	Graphics	gr;
	
	public void init()
	{
		String bg=getParameter("bgcolor");								// 背景色の読み込み
		int bgc=Integer.valueOf(bg,16).intValue();
		setBackground(new Color(bgc));
		MediaTracker mt=new MediaTracker(this);							// GIF ファイルの読み込み
		Img=getImage(getCodeBase(), getParameter("figure"));
		mt.addImage(Img, 0);
		try
		{
			mt.waitForID(0);
		}
		catch(InterruptedException e){};
		gr=getGraphics();
	}
	
	public boolean inside(int x, int a, int b)
	{
		return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false;
	}
	
	public void dsp_p(int x, int y, int m, int n, int c)
	{
		Graphics	gx=gr.create();
		int			w=0, h=0, ox=0, oy=0;
		switch(c)
		{
			case	 0:	w=35; h=61; ox=  0; oy= 0;	break;				// 電球
			case	 1:	w=17; h=24; ox= 70; oy= 0;	break;				// 10進数
			case	 2:	w=23; h=27; ox=115; oy=24;	break;				// 2進数
			case	 3:	w=45; h=11; ox= 70; oy=24;	break;				// (2進数)
		}
		gx.clipRect(x,y,w,h);
		gx.clearRect(x,y,w,h);
		gx.drawImage(Img,x-(ox+m*w),y-(oy+n*h),this);
		gx.dispose();
	}
	
	public void dsp_s()													// 電球、数値の表示
	{
		int	i,j,m;
		for(j=8, i=0; i<4; i++,j/=2)
		{
			m=((Dec & j)==0)?0:1;
			dsp_p(60*i,0,m,0,0);										// 電球の表示
			dsp_p(283+24*i,18,m,0,2);									// 2進数の表示
		}
		dsp_p(240,18,2,0,2);											// = の表示
		dsp_p(390,19,10,0,1);											// = の表示
		m=Dec/10; dsp_p(420,19,(m>0)? m:11,0,1);						// 10進数の表示
		m=Dec%10; dsp_p(440,19,m,0,1);									// 10進数の表示
		dsp_p(306,50,0,0,3);											// "(2進数)" の表示
		dsp_p(418,50,0,1,3);											// "(10進数)" の表示
	}
	
	public void paint(Graphics g)
	{
		dsp_s();
	}
	
	public boolean mouseDown(Event e, int x, int y)
	{
		int	m,n,i,j=1;
		if((x<215 && x%60<35) || (inside(x,283,374) && inside(y,18,45) && (x-283)%24<19))
		{
			n=(x<215)? 0:4;
			m=(x<215)? 3-x/60: 3-(x-283)/24;
			for(i=0; i< m; i++) j*=2;
			if((Dec & j) ==0) Dec+=j;
			else Dec-=j;
			dsp_s();
		}
		return true;
	}
}
//
戻る