//
/* ----------------------------------------------------------------------------------------------
    not.java		NOT 回路								ver. 1.10 (JDK 1.02)
    														ueyama@infonet.co.jp  2005.01.16
    														update: 2007.08.03
---------------------------------------------------------------------------------------------- */

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


public class not extends Applet
{
	int			A=0, P=1, N=0, X=1;							// 入力 A、P,N MOS トランジスタ、 出力 X
	int			T=1;										// トランジスタの表示  0:SW  1:Tr
	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 m, int n, int c)
	{
		int w=0, h=0, ox=0, oy=0;
		switch(c)
		{
			case	 0:	w= 24; h=31; ox=350; oy=  0; break;				// トランジスタ
			case	 1:	w=  9; h=14; ox=350; oy=124; break;				// 2進数 (大)
			case	 2:	w=  8; h=12; ox=368; oy=124; break;				// 2進数 (小)
			case	 3:	w=  6; h= 6; ox=384; oy=124; break;				// ラジオボタンの・
		}
		Graphics gx=getGraphics();
		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_p()
	{
		X=P=(A==0)?1:0;
		N=A;
		dsp_g(102, 31, T, P, 0);										// PMOS トランジスタの表示
		dsp_g(102,105, T, N+2, 0);										// NMOS トランジスタの表示
		dsp_g(  6, 77, 1, A, 1);										// 入力 A の表示
		dsp_g(213, 77, 1, X, 1);										// 出力 X の表示
		dsp_g(291, 78, X, 0, 2);										// 真理値表 A0 の表示
		dsp_g(318, 78, X, 1, 2);										// 真理値表 X1 の表示
		dsp_g(291,103, A, 1, 2);										// 真理値表 A1 の表示
		dsp_g(318,103, A, 0, 2);										// 真理値表 X0 の表示
		dsp_g(275,144, 0, T, 3);										// ラジオボタンの・ の表示
		dsp_g(314,144, 0, (T==1)?0:1, 3);								// ラジオボタンの・ の表示
	}   

	public void paint(Graphics g)
	{
		int i;
		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(x<40 && inside(y, 63, 98)) A=(A==0)?1:0;						// 入力信号をクリック
		if(inside(x, 281, 335))											// 真理値表をクリック
		{
			if(inside(y, 70, 96)) A=0;
			if(inside(y, 97, 122)) A=1;
		}
		if(x>268 && inside(y, 137, 156))								// ラジオボタンをクリック
		{
			if(x>306) T=0;
			else	  T=1;
		}
		dsp_p();
		return true;
	}
}
//
戻る