import java.util.Stack;

public class Example2 extends CustomClass 
{
	FrameworkInterface parent=null;
	Stack returnline = new Stack();
	public void setParent(FrameworkInterface parent) 
	{
		this.parent = parent;
		String lines[]= new String[19];
		
		
		lines[0] ="		public class Class1";
		lines[1] ="{";
		lines[2] =" 	public static long fact(long v) {";
		lines[3] ="		long t;";
		lines[4] ="		if (v>1) {";
		lines[5] ="			t = v * fact(v-1);";
		lines[6] ="			return t;";
		lines[7] ="		} else {";
		lines[8] ="			return 1;	";
		lines[9] ="		}";
		lines[10] ="	}";
		lines[11] ="";
		lines[12] =" 	public static void main (String[] args)";
		lines[13] ="	{";
		lines[14] ="		for (int i=0;i<10;i++) {";
		lines[15] ="			System.out.println(i + \"!=\" + fact(i));";
		lines[16] ="		}";
		lines[17] ="	}";
		lines[18] ="}";
		
		parent.setText(lines);
	}

	public int executeLine(int line) 
	{
		switch (line) 
		{
		case -1:
			parent.changeAct("Recusive Factorial Demo");
			parent.resetAct();
			parent.resetVar();
			parent.fCall("Class1","main",-1);
			return 14;

		case 2:
			return 3;

		case 3:
			parent.changeLocalVar("t","0");
			return 4;
		
		case 4:
			{
			parent.changeAct("Check stop condition");
			int v = Integer.parseInt(parent.getLocalVar("v"));
			if (v>1)
			{
				parent.changeAct("Go to Recusive Call");
				return 5;
			}
			else
			{
				parent.changeAct("Return End Value");
				return 8;
			}
			}
		case 5:
			{
			int v = Integer.parseInt(parent.getLocalVar("v"));
			parent.fCall("Class1","fact",6);
			parent.changeLocalVar("v",""+(v-1));
			parent.changeAct("Recursive Method");
			return 2;
			}
			
		case 6:
			{
			int v = Integer.parseInt(parent.getLocalVar("v"));
			int r = Integer.parseInt(parent.fGetResult());
			parent.changeLocalVar("t",(v*r)+"");
			parent.changeAct("Return Value");
			return 7;
			}
		case 7:
			{
			int t = Integer.parseInt(parent.getLocalVar("t"));
			return parent.fReturn(t + "");
			}
		
		case 8:
			{
			parent.changeAct("Exit from Method");
			return parent.fReturn("1");
			}
			
		case 14:
			parent.changeLocalVar("i","0");
	    	parent.changeAct("Calc Factorial from 0 till 10");
			return 15;
			
		case 15:
			{
			int i = Integer.parseInt(parent.getLocalVar("i"));
			parent.fCall("Class1","fact",16);
			parent.changeLocalVar("v",i+"");
			parent.changeAct("Recursive Method");
			return 2;
			}
			
		case 16:
			{
			int i = Integer.parseInt(parent.getLocalVar("i"));
			parent.addText(i + "!=" + parent.fGetResult());
			parent.changeLocalVar("i",(i+1)+"");
			if (i<10) 
				{
					parent.changeAct("Repeat");
					return 15;
				} else {
					parent.changeAct("End");
					return parent.fReturn("");
				}
			}
		}
		return -1;
	}
}





