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

public class ModCalc extends Applet 
{
	
	TextField inputint;
	TextField modulus;
	TextField outputint;
	
	public void init() 
	{		
		inputint = new TextField("0",8);
		modulus = new TextField("12",4);
		outputint = new TextField("",8);
		
		add(inputint);
		add(new Label("mod"));
		add(modulus);
		add(new Button("=")); 
		add(outputint);
		add(new Button("up"));
		add(new Button("down"));

		show();	
	}
	
	int getValue(TextField s) 
	{
		int f;
		try 
		{
			int col = s.getColumns();
			double max = Math.pow(10, (double)col);
			f = Integer.parseInt(s.getText());	
			if (Math.abs((double)f) > max)
			{
				s.setText("E");
			}

			//f = java.lang.Integer.parseInt(s.getText());	
		}
		catch (java.lang.NumberFormatException e) 
		{
			f = 0;
			s.setText("E");
		}
		return f;
	}
	
	int residue(int a, int m)
	{
		int f;
		try {
			f=a%m;
			if (f < 0) 
			{
				return f+m;
			}
			else 
			{
				return f;
			}
		}
		catch (java.lang.ArithmeticException e)
		{ return 0 ; }
	}
	
	public boolean handleEvent(Event e) 
	{
		int a;
		if (e.id == Event.ACTION_EVENT){
		int m=getValue(modulus);

		if (m<2) 
		{
			modulus.setText("E");
			outputint.setText("E");
		}
		
		if (e.target instanceof TextField) 
		{
			a=getValue(inputint);
			outputint.setText(Integer.toString(residue(a,m)));
			return true;
		}
		else if (e.target instanceof Button) 
		{
			String b = ((Button)e.target).getLabel();
			if (b=="=")
			{
				a=getValue(inputint);
				outputint.setText( Integer.toString( residue(a,m) ) );
			}
			else if (b == "up") 
			{
				a=getValue(outputint);
				
				outputint.setText(Integer.toString(a+m));
			}
			else if (b=="down")
			{
				a=getValue(outputint);
				outputint.setText(Integer.toString(a-m));
			}

			return true;
		}
		else
		{
			return true;
		}
		}
		return false;
	}
}
