#!/usr/bin/env node var fs=require("fs"),util=require("util"),kbd=require("kbd"); var flags={"debug":false},TRpreload=undefined; if(process.argv.length<3){ console.log("Please supply a treetree source file on the command line."); console.log("\t-d Debug stuff."); console.log("\t-s Preload stack in internal JSON array format in next parameter."); process.exit(1); } else { var i,j,skipArg=false; for(i=2;i0){ //PSH var next_part,next_part_parent,moved_node,i; next_part_parent=TR; for(i=0;iTR[1][0].length)throw new TTerror("Invalid split position "+TR[0]+" in SPL!"); if(TR[0]==0)TR[0]=""; else { TR[0]=TR[1][0].slice(0,TR[0]); TR[1][0]=TR[1][0].slice(TR[0]); } break; case "SUM": var total,item,addto; if(TR==false||TR[1]==false)throw new TTerror("Not enough tree items in SUM!"); if(TR[2]!=false&&TR[1][2]!=false)throw new TTerror("Only one base node can have secondary children in SUM!"); if(TR[2]==false&&TR[1][2]==false){ TR[0]+=TR[1][0]; TR[1]=TR[1][1]; break; } if(TR[2]!=false){ addto=TR[1][0]; TR[1]=TR[1][1]; TR[0]=TR[0]+addto; for(item=TR[2];item!=false;item=TR[2]){ if(item[1]!=false)throw new TTerror("No primary children allowed in chain of secondary children (in SUM)!"); item[0]=item[0]+addto; } } else { addto=TR[0]; TR=TR[1]; TR[0]=addto+TR[0]; for(item=TR[2];item!=false;item=TR[2]){ if(item[1]!=false)throw new TTerror("No primary children allowed in chain of secondary children (in SUM)!"); item[0]=addto+item[0]; } } break; case "DIF":break; case "PRO":break; case "QUO":break; case "POW":break; case "ROO":break; case "LOG":break; case "MOD":break; case "SIG":break; case "PI_":break; case "OR_":break; case "AND":break; case "XOR":break; case "INV":break; case "NOT":break; case "EQU":break; case "NEQ":break; case "SML":break; case "GRT":break; case "TAU":break; case "E__":break; case "RND": TR=[~~(/*Math.pow(2,31)*/10*Math.random()),TR,false]; break; case "JMP":break; case "EXJ":break; case "IFJ":break; case "STP": process.exit(); break; case "STK": var str; str=util.inspect(TR,{"depth":null})+runCmds_state["outterm"]; if(runCmds_state["out"]==undefined)process.stdout.write(str); else fs.writeSync(runCmds_state["out"],new Buffer(str),0,str.length,null); break; default: throw new Error("Internal error: Unrecognised command in internal command array! Please report the command '"+cmds[cmdidx][1]+"'!"); } } else throw new Error("Internal error: Invalid command type! Please report the type '"+cmds[cmdidx][0]+"'!"); if(flags.debug){ process.stdout.write("\x1B[36m"); console.log("%j",TR); process.stdout.write("\x1B[0m"); } } } //Edits `labels` in-place. function parseLabels(cmds,labels){ var i; for(i=0;i