/* Interp.js - change control section

ID	Date	 Notes
EN001	01/03/00 Update parser to permit repeat E [L]
EN002	01/03/00 Update parser to permit bk (backwards) dv (dive) rl (roll)
DB002	01/03/00 Check for parse errors before executing the tree walkover
*/

function fd(v){
document.embeds[0].getNode("Tommy").getEventIn("forward").setValue(v*1.0);
}

function lt(v){
document.embeds[0].getNode("Tommy").getEventIn("left").setValue(v*1.0);
}

function dv(v){
document.embeds[0].getNode("Tommy").getEventIn("dive").setValue(v*1.0);
}

function rl(v){
document.embeds[0].getNode("Tommy").getEventIn("roll").setValue(v*1.0);
}

function st(v){
document.embeds[0].getNode("Tommy").getEventIn("show").setValue(v);
}

function pen(v){
document.embeds[0].getNode("Tommy").getEventIn("pen").setValue(v);
}

function WalkOver(tree){
// tree is a tree - we walk over it
switch (tree[0]) {
  case "SEQ":
    WalkOver(tree[1]);
    WalkOver(tree[2]);
    break;
  case "PRIM":
    switch (tree[1]){
      case "fd": fd(tree[2]);break;
      case "lt": lt(tree[2]);break;
      case "rt": lt(-1*tree[2]);break;
      case "dv": dv(tree[2]);break				//EN002
      case "rl": rl(tree[2]);break;     			//EN002
      case "bk": fd(-1*tree[2]);break;  			//EN002
      case "pu": pen(false);break;
      case "pd": pen(true);break;
      case "hide" : st(false);break;
      case "show" : st(true);break;
      default  : alert('Unknown PRIM: '+tree[1]);break;
      }
    break;
  case "REPEAT":						//EN001
    for (var i=0;i<tree[1];i++){
      WalkOver(tree[2]);
      }
    break;
  }//End switch tree[0]
}

function Go(s){
cs = new Stream(s);
ss = Lex(cs);
document.forms[0].lex_out.value=ToString(ss);
tree= Parse_L(ss);
document.forms[0].parse_out.value=PPrint(tree);
if (ParseError=='')					//DB002
  WalkOver(tree);
else
  alert(ParseError);
}


