//
/* ----------------------------------------------------------------------------------------------
    and_or.java		AND & OR								ver. 1.10 (JDK 1.02)
    														ueyama@infonet.co.jp  2005.01.16
---------------------------------------------------------------------------------------------- */

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


public class and_or extends Applet
{
	int			Aa=0, Ab=0, Ax=0;									// AND 回路スイッチ A, B, 出力 X
	int			Oa=0, Ob=0, Ox=0;									// OR  回路スイッチ A, B, 出力 X
	Image		Img;
	
	public void init()
	{
		String bg=getParameter("bgcolor");
		int bgc=Integer.valueOf(bg,16).intValue();
		setBackground(new Color(bgc)); 
		MediaTracker mt=new MediaTracker(this);
		Img=getImage(getCodeBase(), getParameter("figure"));
		mt.addImage(Img, 0);
		try
		{
			mt.waitForID(0);
		}
		catch(InterruptedException e){};
	}
	
	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_g(int x, int y, int n, int c)
	{
		int  w=0, h=0, ox=0, oy=0;
		switch(c)
		{
			case	 0:	w= 32; h=17; ox=540; oy=  0; break;			// スイッチ
			case	 1:	w= 21; h=21; ox=540; oy= 34; break;			// 電球
		}
		Graphics gx=getGraphics();
		gx.clipRect(x,y,w,h);
		gx.clearRect(x,y,w,h);
		gx.drawImage(Img,x-ox,y-(oy+n*h),this);
		gx.dispose();
	}
	
	public void dsp_p()
	{
		dsp_g( 52, 21, Aa, 0);										// AND 回路スイッチ A の表示
		dsp_g(118, 21, Ab, 0);										// AND 回路スイッチ B の表示
		dsp_g(388, 17, Oa, 0);										// OR  回路スイッチ A の表示
		dsp_g(388, 45, Ob, 0);										// OR  回路スイッチ B の表示
		dsp_g(197, 65, Ax, 1);										// AND 回路電球       の表示
		dsp_g(496, 70, Ox, 1);										// OR  回路電球       の表示
	}

	public void paint(Graphics g)
	{
		g.clearRect(0, 0, size().width, size().height);
		g.drawImage(Img, 0, 0, this);
		dsp_p();
	}
	
	public boolean mouseDown(Event e, int x, int y)
	{
		if(inside(y, 19, 42))										// AND 回路
		{
			if(inside(x, 48, 88)) Aa=(Aa==0)?1:0;					// スイッチ A をクリック
			if(inside(x,114,154)) Ab=(Ab==0)?1:0;					// スイッチ B をクリック
		}
		if(inside(x,384,424))										// OR 回路
		{
			if(inside(y, 15, 38)) Oa=(Oa==0)?1:0;					// スイッチ A をクリック
			if(inside(y, 43, 66)) Ob=(Ob==0)?1:0;					// スイッチ B をクリック
		}
		Ax=(Aa+Ab==2)?1:0;											// AND 回路の出力
		Ox=(Oa+Ob>0)?1:0;											// OR  回路の出力
		dsp_p();
		return true;
	}
}
//
戻る