changeset 63:605a0060e5a7

Replaced the burin() calls in gnusto-engine with a new logger function.
author Atul Varma <varmaa@toolness.com>
date Fri, 16 May 2008 15:53:14 -0700
parents 3355248e2638
children 7bba1e9f167d
files gnusto-engine.js gnusto-engine.min.js
diffstat 2 files changed, 192 insertions(+), 183 deletions(-) [+]
line wrap: on
line diff
--- a/gnusto-engine.js	Fri May 16 13:44:46 2008 -0700
+++ b/gnusto-engine.js	Fri May 16 15:53:14 2008 -0700
@@ -228,10 +228,10 @@
 function handleZ_je(engine, a) { 		
 
     if (a.length<2) { 
-      //VERBOSE burin('je','noop');
+      engine.logger('je','noop');
       return ''; // it's a no-op
     } else if (a.length==2) { 
-      //VERBOSE burin('je',a[0] + '==' + a[1]);
+      engine.logger('je',a[0] + '==' + a[1]);
       return engine._brancher(a[0]+'=='+a[1]);
     } else {
       var condition = '';
@@ -239,153 +239,153 @@
 	if (i!=1) condition = condition + '||';
 	condition = condition + 't=='+a[i];
       }
-      //VERBOSE burin('je','t=' + a[0] + ';' + condition);
+      engine.logger('je','t=' + a[0] + ';' + condition);
       return 't='+a[0]+';'+engine._brancher(condition);
     }
   }
 
 function handleZ_jl(engine, a) {
-    //VERBOSE burin('jl',a[0] + '<' + a[1]); 
+    engine.logger('jl',a[0] + '<' + a[1]); 
     return engine._brancher(a[0]+'<'+a[1]); }
 
 function handleZ_jg(engine, a) { 
-    //VERBOSE burin('jg',a[0] + '>'+a[1]);
+    engine.logger('jg',a[0] + '>'+a[1]);
     return engine._brancher(a[0]+'>'+a[1]); }
 
 function handleZ_dec_chk(engine, a) {
-    //VERBOSE burin('dec_chk',value + '-1 < ' + a[1]);
+    engine.logger('dec_chk',value + '-1 < ' + a[1]);
     return 't='+a[0]+';t2=_varcode_get(t)-1;_varcode_set(t2,t);'+engine._brancher('t2<'+a[1]);
   }
 function handleZ_inc_chk(engine, a) {
-    //VERBOSE burin('inc_chk',value + '+1 > ' + a[1]);
+    engine.logger('inc_chk',value + '+1 > ' + a[1]);
     return 't='+a[0]+';t2=_varcode_get(t)+1;_varcode_set(t2,t);'+engine._brancher('t2>'+a[1]);
   }
 
 function handleZ_jin(engine, a) {
-    //VERBOSE burin('jin',a[0] + ',' + a[1]);
+    engine.logger('jin',a[0] + ',' + a[1]);
     return engine._brancher("_obj_in("+a[0]+','+a[1]+')');
   }
 function handleZ_test(engine, a) {
-    //VERBOSE burin('test','t='+a[1]+';br(' + a[0] + '&t)==t)');
+    engine.logger('test','t='+a[1]+';br(' + a[0] + '&t)==t)');
     return 't='+a[1]+';'+engine._brancher('('+a[0]+'&t)==t');
   }
 function handleZ_or(engine, a) {
-    //VERBOSE burin('or','('+a[0] + '|' + a[1]+')&0xFFFF');
+    engine.logger('or','('+a[0] + '|' + a[1]+')&0xFFFF');
     return engine._storer('('+a[0]+'|'+a[1]+')&0xffff');
   }
 function handleZ_and(engine, a) {
-    //VERBOSE burin('and',a[0] + '&' + a[1] + '&0xFFFF');
+    engine.logger('and',a[0] + '&' + a[1] + '&0xFFFF');
     return engine._storer(a[0]+'&'+a[1]+'&0xffff');
   }
 function handleZ_test_attr(engine, a) {
-    //VERBOSE burin('test_attr',a[0] + ',' + a[1]);
+    engine.logger('test_attr',a[0] + ',' + a[1]);
     return engine._brancher('_test_attr('+a[0]+','+a[1]+')');
   }
 function handleZ_set_attr(engine, a) {
-    //VERBOSE burin('set_attr',a[0] + ',' + a[1]);
+    engine.logger('set_attr',a[0] + ',' + a[1]);
     return '_set_attr('+a[0]+','+a[1]+')';
   }
 function handleZ_clear_attr(engine, a) {
-    //VERBOSE burin('clear_attr',a[0] + ',' + a[1]);
+    engine.logger('clear_attr',a[0] + ',' + a[1]);
     return '_clear_attr('+a[0]+','+a[1]+')';
   }
 function handleZ_store(engine, a) {
-    //VERBOSE burin('store',a[0] + ',' + a[1]);
+    engine.logger('store',a[0] + ',' + a[1]);
     return "_varcode_set("+a[1]+","+a[0]+")";
   }
 function handleZ_insert_obj(engine, a) {
-    //VERBOSE burin('insert_obj',a[0] + ',' + a[1]);
+    engine.logger('insert_obj',a[0] + ',' + a[1]);
     return "_insert_obj("+a[0]+','+a[1]+")";
   }
 function handleZ_loadw(engine, a) {
-    //VERBOSE burin('loadw',"getWord((1*"+a[0]+"+2*"+a[1]+")&0xFFFF)");
+    engine.logger('loadw',"getWord((1*"+a[0]+"+2*"+a[1]+")&0xFFFF)");
     return engine._storer("getWord((1*"+a[0]+"+2*"+a[1]+")&0xFFFF)");
   }
 function handleZ_loadb(engine, a) {
     return engine._storer("m_memory[0xFFFF&(1*"+a[0]+"+1*"+a[1]+")]");
   }
 function handleZ_get_prop(engine, a) {
-    //VERBOSE burin('get_prop',a[0]+','+a[1]);
+    engine.logger('get_prop',a[0]+','+a[1]);
     return engine._storer("_get_prop("+a[0]+','+a[1]+')');
   }
 function handleZ_get_prop_addr(engine, a) {
-    //VERBOSE burin('get_prop_addr',a[0]+','+a[1]);
+    engine.logger('get_prop_addr',a[0]+','+a[1]);
     return engine._storer("_get_prop_addr("+a[0]+','+a[1]+')');
   }
 function handleZ_get_next_prop(engine, a) {
-    //VERBOSE burin('get_next_prop',a[0]+','+a[1]);
+    engine.logger('get_next_prop',a[0]+','+a[1]);
     return engine._storer("_get_next_prop("+a[0]+','+a[1]+')');
   }
 function handleZ_add(engine, a) { 
-    //VERBOSE burin('add',a[0]+'+'+a[1]);
+    engine.logger('add',a[0]+'+'+a[1]);
     return engine._storer(a[0]+'*1+'+a[1]+'*1'); }
 function handleZ_sub(engine, a) { 
-    //VERBOSE burin('sub',a[0]+'-'+a[1]);
+    engine.logger('sub',a[0]+'-'+a[1]);
     return engine._storer(a[0]+'-'+a[1]); }
 function handleZ_mul(engine, a) { 
-    //VERBOSE burin('mul',a[0]+'*'+a[1]);
+    engine.logger('mul',a[0]+'*'+a[1]);
     return engine._storer(a[0]+'*'+a[1]); }
 function handleZ_div(engine, a) {
-    //VERBOSE burin('div',a[0]+'/'+a[1]);
+    engine.logger('div',a[0]+'/'+a[1]);
     return engine._storer('_trunc_divide('+a[0]+','+a[1]+')');
   }
 function handleZ_mod(engine, a) { 
-    //VERBOSE burin('mod',a[0]+'%'+a[1]);
+    engine.logger('mod',a[0]+'%'+a[1]);
     return engine._storer(a[0]+'%'+a[1]);
   }
 function handleZ_set_colour(engine, a) {
-    //VERBOSE burin('set_colour',a[0] + ',' + a[1]);
+    engine.logger('set_colour',a[0] + ',' + a[1]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_STYLE+",-1,"+a[0]+','+a[1]+"];return";
   }
 function handleZ_throw(engine, a) {
-    //VERBOSE burin('throw','throw_stack_frame('+a[0]+');return');
+    engine.logger('throw','throw_stack_frame('+a[0]+');return');
     engine.m_compilation_running = 0;
     return "_throw_stack_frame("+a[0]+");return";
   }
 function handleZ_jz(engine, a) {
-    //VERBOSE burin('jz',a[0]+'==0');
+    engine.logger('jz',a[0]+'==0');
     return engine._brancher(a[0]+'==0');
   }
 function handleZ_get_sibling(engine, a) {
-    //VERBOSE burin('get_sibling',"t=get_sibling("+a[0]+");");
+    engine.logger('get_sibling',"t=get_sibling("+a[0]+");");
     return "t=_get_sibling("+a[0]+");"+engine._storer("t")+";"+engine._brancher("t");
   }
 function handleZ_get_child(engine, a) {
-    //VERBOSE burin('get_child',"t=get_child("+a[0]+");");
+    engine.logger('get_child',"t=get_child("+a[0]+");");
     return "t=_get_child("+a[0]+");"+
       engine._storer("t")+";"+
       engine._brancher("t");
   }
 function handleZ_get_parent(engine, a) {
-    //VERBOSE burin('get_parent',"get_parent("+a[0]+");");
+    engine.logger('get_parent',"get_parent("+a[0]+");");
     return engine._storer("_get_parent("+a[0]+")");
   }
 function handleZ_get_prop_len(engine, a) {
-    //VERBOSE burin('get_prop_len',"get_prop_len("+a[0]+");");
+    engine.logger('get_prop_len',"get_prop_len("+a[0]+");");
     return engine._storer("_get_prop_len("+a[0]+')');
   }
 function handleZ_inc(engine, a) {
-    //VERBOSE burin('inc',c + '+1');
+    engine.logger('inc',a + '+1');
     return "t="+a[0]+';_varcode_set(_varcode_get(t)+1, t)';
   }
 function handleZ_dec(engine, a) {
-    //VERBOSE burin('dec',c + '-1');
+    engine.logger('dec',a[0] + '-1');
     return "t="+a[0]+';_varcode_set(_varcode_get(t)-1, t)';
   }
 function handleZ_print_addr(engine, a) {
-    //VERBOSE burin('print_addr','zscii_from('+a[0]+')');
+    engine.logger('print_addr','zscii_from('+a[0]+')');
     return engine._handler_zOut('_zscii_from('+a[0]+')',0);
   }
 function handleZ_remove_obj(engine, a) {
-    //VERBOSE burin('remove_obj',"remove_obj("+a[0]+','+a[1]+")");
+    engine.logger('remove_obj',"remove_obj("+a[0]+','+a[1]+")");
     return "_remove_obj("+a[0]+','+a[1]+")";
   }
 function handleZ_print_obj(engine, a) {
-    //VERBOSE burin('print_obj','name_of_object('+a[0]+',0)');
+    engine.logger('print_obj','name_of_object('+a[0]+',0)');
     return engine._handler_zOut("_name_of_object("+a[0]+")",0);
 }
 function handleZ_ret(engine, a) {
-    //VERBOSE burin('ret',"_func_return("+a[0]+');return');
+    engine.logger('ret',"_func_return("+a[0]+');return');
     engine.m_compilation_running=0;
     return "_func_return("+a[0]+');return';
   }
@@ -396,60 +396,60 @@
     }
 				
     var addr=(a[0] + engine.m_pc) - 2;
-    //VERBOSE burin('jump',"pc="+addr+";return");
+    engine.logger('jump',"pc="+addr+";return");
     return "m_pc="+addr+";return";
   }
 function handleZ_print_paddr(engine, a) {
-    //VERBOSE burin('print_paddr',"zscii_from((("+a[0]+")&0xFFFF)*4)");
+    engine.logger('print_paddr',"zscii_from((("+a[0]+")&0xFFFF)*4)");
     return engine._handler_zOut("_zscii_from("+engine.m_pc_translate_for_string(a[0])+")",0);
 }
 function handleZ_load(engine, a) {
-    //VERBOSE burin('load',"store " + c);
+    engine.logger('load',"store " + c);
     return engine._storer('_varcode_get('+a[0]+')');
   }
 	
 function handleZ_rtrue(engine, a) {
-    //VERBOSE burin('rtrue',"_func_return(1);return");
+    engine.logger('rtrue',"_func_return(1);return");
     engine.m_compilation_running=0;
     return "_func_return(1);return";
   }
 function handleZ_rfalse(engine, a) {
-    //VERBOSE burin('rfalse',"_func_return(0);return");
+    engine.logger('rfalse',"_func_return(0);return");
     engine.m_compilation_running=0;
     return "_func_return(0);return";
 }
 
 function handleZ_print(engine, a) {
-    //VERBOSE burin('printret',"see handler_print");
+    engine.logger('printret',"see handler_print");
     return engine._handler_print('', 0);
 }
 
 function handleZ_print_ret(engine, a) {
     engine.m_compilation_running = 0;
-    //VERBOSE burin('printret',"see handler_print");
+    engine.logger('printret',"see handler_print");
     return engine._handler_print('\n', 1)+';_func_return(1);return';
 }
 
 function handleZ_nop(engine, a) {
-    //VERBOSE burin('noop','');
+    engine.logger('noop','');
     return "";
   }
 
 function handleZ_restart(engine, a) {
-    //VERBOSE burin('restart','');
+    engine.logger('restart','');
     engine.m_compilation_running=0;
     return "m_effects=["+GNUSTO_EFFECT_RESTART+"];return";
   }
 		
 function handleZ_ret_popped(engine, a) {
-    //VERBOSE burin('pop',"_func_return(gamestack.pop());return");
+    engine.logger('pop',"_func_return(gamestack.pop());return");
     engine.m_compilation_running=0;
     return "_func_return(m_gamestack.pop());return";
   }
 function handleZ_catch(engine, a) {
     // The stack frame cookie is specified by Quetzal 1.3b s6.2
     // to be the number of frames on the stack.
-    //VERBOSE burin('catch',"store call_stack.length");
+    engine.logger('catch',"store call_stack.length");
     return engine._storer("call_stack.length");
 }
 
@@ -458,13 +458,13 @@
 }
 
 function handleZ_quit(engine, a) {
-    //VERBOSE burin('quit','');
+    engine.logger('quit','');
     engine.m_compilation_running=0;
     return "m_effects=["+GNUSTO_EFFECT_QUIT+"];return";
   }
 
 function handleZ_new_line(engine, a) {
-    //VERBOSE burin('newline','');
+    engine.logger('newline','');
     return engine._handler_zOut("'\\n'",0);
 }
 		
@@ -479,7 +479,7 @@
 		
 function handleZ_illegal_extended(engine, a) {
     // 190 can't be generated; it's the start of an extended opcode
-    //VERBOSE burin('illegalop','190');
+    engine.logger('illegalop','190');
     gnusto_error(199);
   }
 		
@@ -487,7 +487,7 @@
     engine.m_compilation_running = 0;
 				
     var setter = 'm_rebound=function(){'+engine._brancher('(!m_answers[0])')+'};';
-    //VERBOSE burin('piracy',"pc="+pc+";"+setter+"m_effects=[GNUSTO_EFFECT_PIRACY];return;");
+    engine.logger('piracy',"pc="+pc+";"+setter+"m_effects=[GNUSTO_EFFECT_PIRACY];return;");
     return "m_pc="+engine.m_pc+";"+setter+"m_effects=["+GNUSTO_EFFECT_PIRACY+"];return";
 }
 
@@ -532,17 +532,17 @@
 ////////////////////////////////////////////////////////////////
 
 function handleZ_store_w(engine, a) {
-    //VERBOSE burin('storew',"setWord("+a[2]+",1*"+a[0]+"+2*"+a[1]+")");
+    engine.logger('storew',"setWord("+a[2]+",1*"+a[0]+"+2*"+a[1]+")");
     return "setWord("+a[2]+",1*"+a[0]+"+2*"+a[1]+")";
   }
 
 function handleZ_storeb(engine, a) {
-    //VERBOSE burin('storeb',"setByte("+a[2]+",1*"+a[0]+"+1*"+a[1]+")");
+    engine.logger('storeb',"setByte("+a[2]+",1*"+a[0]+"+1*"+a[1]+")");
     return "setByte("+a[2]+",1*"+a[0]+"+1*"+a[1]+")";
   }
 
 function handleZ_putprop(engine, a) {
-    //VERBOSE burin('putprop',"put_prop("+a[0]+','+a[1]+','+a[2]+')');
+    engine.logger('putprop',"put_prop("+a[0]+','+a[1]+','+a[2]+')');
     return "_put_prop("+a[0]+','+a[1]+','+a[2]+')';
   }
 
@@ -649,78 +649,78 @@
 }
 
 function handleZ_print_char(engine, a) {
-    //VERBOSE burin('print_char','zscii_char_to_ascii('+a[0]+')');
+    engine.logger('print_char','zscii_char_to_ascii('+a[0]+')');
     return engine._handler_zOut('_zscii_char_to_ascii('+a[0]+')',0);
 }
 function handleZ_print_num(engine, a) {
-    //VERBOSE burin('print_num','handler_zout('+a[0]+')');
+    engine.logger('print_num','handler_zout('+a[0]+')');
     return engine._handler_zOut(a[0],0);
 }
 function handleZ_random(engine, a) {
-    //VERBOSE burin('random',"random_number("+a[0]+")");
+    engine.logger('random',"random_number("+a[0]+")");
     return engine._storer("_random_number("+a[0]+")");
   }
 function handleZ_push(engine, a) {
-    //VERBOSE burin('push',a[0]);
+    engine.logger('push',a[0]);
     return 'm_gamestack.push('+a[0]+')';
   }
 function handleZ_pull(engine, a) {
-    //VERBOSE burin('pull',c +'=gamestack.pop()');
+    engine.logger('pull',c +'=gamestack.pop()');
     return '_varcode_set(m_gamestack.pop(),'+a[0]+')';
   }
 
 function handleZ_split_window(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('split_window','lines=' + a[0]);
+    engine.logger('split_window','lines=' + a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SPLITWINDOW+","+a[0]+"];return";
   }
 function handleZ_set_window(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('set_window','win=' + a[0]);
+    engine.logger('set_window','win=' + a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETWINDOW+","+a[0]+"];return";
   }
 function handleZ_erase_window(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('erase_window','win=' + a[0]);
+    engine.logger('erase_window','win=' + a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_ERASEWINDOW+","+a[0]+"];return";
   }
 function handleZ_erase_line(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('erase_line',a[0]);
+    engine.logger('erase_line',a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_ERASELINE+","+a[0]+"];return";
   }
 function handleZ_set_cursor(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('set_cursor',' ['+a[0]+', ' + a[1] + '] ');
+    engine.logger('set_cursor',' ['+a[0]+', ' + a[1] + '] ');
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETCURSOR+","+a[0]+","+a[1]+"];return";
   }
 		
 function handleZ_get_cursor(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('get_cursor',a[0]);
+    engine.logger('get_cursor',a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_GETCURSOR+","+a[0]+"];return";
   }
 		
 function handleZ_set_text_style(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('set_text_style',a[0]);
+    engine.logger('set_text_style',a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_STYLE+","+a[0]+",0,0];return";
   }
 		
 function handleZ_buffer_mode(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('buffer_mode',a[0]);
+    engine.logger('buffer_mode',a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETBUFFERMODE+","+a[0]+"];return";
   }
 		
 function handleZ_output_stream(engine, a) {
-    //VERBOSE burin('output_stream',a[0]+', ' + a[1]);
+    engine.logger('output_stream',a[0]+', ' + a[1]);
     return '_set_output_stream('+a[0]+','+a[1]+')';
   }
 		
 function handleZ_input_stream(engine, a) {
     engine.m_compilation_running=0;
-    //VERBOSE burin('input_stream',a[0]);
+    engine.logger('input_stream',a[0]);
     return "m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETINPUTSTREAM+","+a[0]+"];return";
   }
 		
@@ -729,7 +729,7 @@
     // deal with callbacks at present.
 				
     engine.m_compilation_running=0;
-    //VERBOSE burin('sound_effect','better logging later');
+    engine.logger('sound_effect','better logging later');
     while (a.length < 5) { a.push(0); }
     return "m_pc="+engine.m_pc+';m_effects=['+GNUSTO_EFFECT_SOUND+','+a[0]+','+a[1]+','+a[2]+','+a[3]+','+a[4]+'];return';
   }
@@ -798,7 +798,7 @@
   }
 		
 function handleZ_scan_table(engine, a) { 
-    //VERBOSE burin('scan_table',"t=scan_table("+a[0]+','+a[1]+"&0xFFFF,"+a[2]+"&0xFFFF," + a[3]+");");
+    engine.logger('scan_table',"t=scan_table("+a[0]+','+a[1]+"&0xFFFF,"+a[2]+"&0xFFFF," + a[3]+");");
     if (a.length == 4) {
       return "t=_scan_table("+a[0]+','+a[1]+"&0xFFFF,"+a[2]+"&0xFFFF," + a[3]+");" +
 	engine._storer("t") + ";" +  engine._brancher('t');
@@ -809,22 +809,22 @@
   }
 		
 function handleZ_not(engine, a) {
-		//VERBOSE burin('not','~'+a[1]+'&0xffff');
+		engine.logger('not','~'+a[1]+'&0xffff');
     return engine._storer('~'+a[1]+'&0xffff');
 }
 
 function handleZ_tokenise(engine, a) {
-    //VERBOSE burin('tokenise',"tokenise("+a[0]+","+a[1]+","+a[2]+","+a[3]+")");
+    engine.logger('tokenise',"tokenise("+a[0]+","+a[1]+","+a[2]+","+a[3]+")");
     return "_tokenise(("+a[0]+")&0xFFFF,("+a[1]+")&0xFFFF,"+a[2]+","+a[3]+")";
   }
 		
 function handleZ_encode_text(engine, a) {
-    //VERBOSE burin('tokenise',"_encode_text("+a[0]+","+a[1]+","+a[2]+","+a[3]+")");
+    engine.logger('tokenise',"_encode_text("+a[0]+","+a[1]+","+a[2]+","+a[3]+")");
     return "_encode_text("+a[0]+","+a[1]+","+a[2]+","+a[3]+")";
   }
 
 function handleZ_copy_table(engine, a) {
-    //VERBOSE burin('_copy_table',"copy_table("+a[0]+','+a[1]+','+a[2]+")");
+    engine.logger('_copy_table',"copy_table("+a[0]+','+a[1]+','+a[2]+")");
     return "_copy_table("+a[0]+','+a[1]+','+a[2]+")";
   }
 		
@@ -833,12 +833,12 @@
     // Jam in defaults:
     if (a.length < 3) { a.push(1); } // default height
     if (a.length < 4) { a.push(0); } // default skip
-    //VERBOSE burin('print_table',"print_table("+a[0]+','+a[1]+','+a[2]+',' + a[3]+')');
+    engine.logger('print_table',"print_table("+a[0]+','+a[1]+','+a[2]+',' + a[3]+')');
     return "m_pc="+engine.m_pc+";m_effects=_print_table("+a[0]+","+a[1]+","+a[2]+","+a[3]+");return";
   }
 		
 function handleZ_check_arg_count(engine, a) {
-    //VERBOSE burin('check_arg_count',a[0]+'<=param_count()');
+    engine.logger('check_arg_count',a[0]+'<=param_count()');
     return engine._brancher(a[0]+'<=_param_count()');
   }
 
@@ -878,19 +878,19 @@
 }
 		
 function handleZ_log_shift(engine, a) {
-    //VERBOSE burin('log_shift',"log_shift("+a[0]+','+a[1]+')');
+    engine.logger('log_shift',"log_shift("+a[0]+','+a[1]+')');
     // log_shift logarithmic-bit-shift.  Right shifts are zero-padded
     return engine._storer("_log_shift("+a[0]+','+a[1]+')');
   }
 
 function handleZ_art_shift(engine, a) {
-    //VERBOSE burin('log_shift',"art_shift("+a[0]+','+a[1]+')');
+    engine.logger('log_shift',"art_shift("+a[0]+','+a[1]+')');
     // arithmetic-bit-shift.  Right shifts are sign-extended
     return engine._storer("_art_shift("+a[0]+','+a[1]+')');
   }
 
 function handleZ_set_font(engine, a) {
-    //VERBOSE burin('set_font','('+a[0]+'<2?1:0) <<We only provide font 1.>>');
+    engine.logger('set_font','('+a[0]+'<2?1:0) <<We only provide font 1.>>');
     // We only provide font 1.
     return engine._storer('('+a[0]+'<2?1:0)');
   }
@@ -910,12 +910,12 @@
 }
 
 function handleZ_print_unicode(engine, a) {
-    //VERBOSE burin('print_unicode',"String.fromCharCode(" +a[0]+")");
+    engine.logger('print_unicode',"String.fromCharCode(" +a[0]+")");
     return engine._handler_zOut("String.fromCharCode(" +a[0]+")",0);
 }
 
 function handleZ_check_unicode(engine, a) {
-    //VERBOSE burin('check_unicode','we always say yes');
+    engine.logger('check_unicode','we always say yes');
     // We have no way of telling from JS whether we can
     // read or write a character, so let's assume we can
     // read and write all of them. We can always provide
@@ -1353,7 +1353,14 @@
 //
 // The object itself...
 
-function GnustoEngine() { }
+function GnustoEngine(logfunc) {
+  if (logfunc)
+    this.logger = function(a, b) {
+      logfunc("gnusto-engine: " + a + ": " + b);
+    };
+  else
+    this.logger = function() { };
+}
 
 GnustoEngine.prototype = {
 
@@ -1585,7 +1592,7 @@
   // before calling this the first time.
   run: function ge_run() {
 
-    // burin('run', answer);
+    //this.logger('run', answer);
     var start_pc = 0;
     var turns = 0;
     var jscode;
@@ -1625,8 +1632,8 @@
 
 				// Some useful debugging code:
 				if (this.m_copperTrail) {
-						burin('pc : ' + start_pc.toString(16));
-						burin('jit : ' + jscode);
+						this.logger('pc : ' + start_pc.toString(16));
+						this.logger('jit : ' + jscode);
 				}
 
       jscode();
@@ -2255,7 +2262,7 @@
 					if (this.m_handlers[instr]) {
 
 							code = code + this.m_handlers[instr](this, args)+';';
-							//VERBOSE burin(code,'');
+							//this.logger(code,'');
 					} else if (instr>=1128 && instr<=1255 &&
 										 "special_instruction_EXT"+(instr-1000) in this) {
 					
@@ -2267,7 +2274,7 @@
 							code = code +
 									this["special_instruction_EXT"+(instr-1000)](args)+
 									';';
-							//VERBOSE burin(code,'');
+							//this.logger(code,'');
 
 					} else {
 							gnusto_error(200,
@@ -2283,7 +2290,7 @@
 			
 			if (this.m_single_step||this.m_debug_mode) {
 					code = code + 'm_pc='+this.m_pc; 
-					//VERBOSE burin(code,'');
+					//this.logger(code,'');
 			}
 
 			// Name the function after the starting position, to make life
@@ -3356,7 +3363,7 @@
 	_zscii_from: function ge_zscii_from(address, max_length, tell_length) {
 
 			if (address in this.m_jit) {
-					//VERBOSE burin('zscii_from ' + address,'already in THIS.M_JIT');
+					this.logger('zscii_from ' + address,'already in THIS.M_JIT');
 
 					// Already seen this one.
 					
@@ -3460,7 +3467,7 @@
 					this.m_jit[start_address] = [temp, address];
 			}
 
-			//VERBOSE burin('zscii_from ' + address,temp);
+			this.logger('zscii_from ' + address,temp);
 			if (tell_length) {
 					return [temp, address];
 			} else {
@@ -3913,7 +3920,7 @@
 
 			this.m_pc=zf[1];
 
-			//VERBOSE burin('print',message);
+			this.logger('print',message);
 			return this._handler_zOut('"'+message+'"', is_return);
 	},
 
@@ -3957,7 +3964,7 @@
 			//			}
 
 			if (this.m_goldenTrail) {
-					burin("pc : "+address.toString(16));
+					this.logger("pc : "+address.toString(16));
 			}
 
 			this.m_pc = address;
--- a/gnusto-engine.min.js	Fri May 16 13:44:46 2008 -0700
+++ b/gnusto-engine.min.js	Fri May 16 15:53:14 2008 -0700
@@ -1,72 +1,72 @@
 
-const CVS_VERSION='$Date: 2005/04/26 01:50:32 $';const ENGINE_DESCRIPTION="Gnusto's interactive fiction engine";var default_unicode_translation_table={155:0xe4,156:0xf6,157:0xfc,158:0xc4,159:0xd6,160:0xdc,161:0xdf,162:0xbb,163:0xab,164:0xeb,165:0xef,166:0xff,167:0xcb,168:0xcf,169:0xe1,170:0xe9,171:0xed,172:0xf3,173:0xfa,174:0xfd,175:0xc1,176:0xc9,177:0xcd,178:0xd3,179:0xda,180:0xdd,181:0xe0,182:0xe8,183:0xec,184:0xf2,185:0xf9,186:0xc0,187:0xc8,188:0xcc,189:0xd2,190:0xd9,191:0xe2,192:0xea,193:0xee,194:0xf4,195:0xfb,196:0xc2,197:0xca,198:0xce,199:0xd4,200:0xdb,201:0xe5,202:0xc5,203:0xf8,204:0xd8,205:0xe3,206:0xf1,207:0xf5,208:0xc3,209:0xd1,210:0xd5,211:0xe6,212:0xc6,213:0xe7,214:0xc7,215:0xfe,216:0xf0,217:0xde,218:0xd0,219:0xa3,220:0x153,221:0x152,222:0xa1,223:0xbf,};const PARENT_REC=0;const SIBLING_REC=1;const CHILD_REC=2;const CALLED_FROM_INTERRUPT=0;var GNUSTO_EFFECT_INPUT='"RS"';var GNUSTO_EFFECT_INPUT_CHAR='"RC"';var GNUSTO_EFFECT_SAVE='"DS"';var GNUSTO_EFFECT_RESTORE='"DR"';var GNUSTO_EFFECT_QUIT='"QU"';var GNUSTO_EFFECT_RESTART='"NU"';var GNUSTO_EFFECT_WIMP_OUT='"WO"';var GNUSTO_EFFECT_BREAKPOINT='"BP"';var GNUSTO_EFFECT_FLAGS_CHANGED='"XC"';var GNUSTO_EFFECT_PIRACY='"CP"';var GNUSTO_EFFECT_STYLE='"SS"';var GNUSTO_EFFECT_SOUND='"FX"';var GNUSTO_EFFECT_SPLITWINDOW='"TW"';var GNUSTO_EFFECT_SETWINDOW='"SW"';var GNUSTO_EFFECT_ERASEWINDOW='"YW"';var GNUSTO_EFFECT_ERASELINE='"YL"';var GNUSTO_EFFECT_SETCURSOR='"SC"';var GNUSTO_EFFECT_SETBUFFERMODE='"SB"';var GNUSTO_EFFECT_SETINPUTSTREAM='"SI"';var GNUSTO_EFFECT_GETCURSOR='"GC"';var GNUSTO_EFFECT_PRINTTABLE='"PT"';function handleZ_je(engine,a){if(a.length<2){return'';}else if(a.length==2){return engine._brancher(a[0]+'=='+a[1]);}else{var condition='';for(var i=1;i<a.length;i++){if(i!=1)condition=condition+'||';condition=condition+'t=='+a[i];}
-return't='+a[0]+';'+engine._brancher(condition);}}
-function handleZ_jl(engine,a){return engine._brancher(a[0]+'<'+a[1]);}
-function handleZ_jg(engine,a){return engine._brancher(a[0]+'>'+a[1]);}
-function handleZ_dec_chk(engine,a){return't='+a[0]+';t2=_varcode_get(t)-1;_varcode_set(t2,t);'+engine._brancher('t2<'+a[1]);}
-function handleZ_inc_chk(engine,a){return't='+a[0]+';t2=_varcode_get(t)+1;_varcode_set(t2,t);'+engine._brancher('t2>'+a[1]);}
-function handleZ_jin(engine,a){return engine._brancher("_obj_in("+a[0]+','+a[1]+')');}
-function handleZ_test(engine,a){return't='+a[1]+';'+engine._brancher('('+a[0]+'&t)==t');}
-function handleZ_or(engine,a){return engine._storer('('+a[0]+'|'+a[1]+')&0xffff');}
-function handleZ_and(engine,a){return engine._storer(a[0]+'&'+a[1]+'&0xffff');}
-function handleZ_test_attr(engine,a){return engine._brancher('_test_attr('+a[0]+','+a[1]+')');}
-function handleZ_set_attr(engine,a){return'_set_attr('+a[0]+','+a[1]+')';}
-function handleZ_clear_attr(engine,a){return'_clear_attr('+a[0]+','+a[1]+')';}
-function handleZ_store(engine,a){return"_varcode_set("+a[1]+","+a[0]+")";}
-function handleZ_insert_obj(engine,a){return"_insert_obj("+a[0]+','+a[1]+")";}
-function handleZ_loadw(engine,a){return engine._storer("getWord((1*"+a[0]+"+2*"+a[1]+")&0xFFFF)");}
+const CVS_VERSION='$Date: 2005/04/26 01:50:32 $';const ENGINE_DESCRIPTION="Gnusto's interactive fiction engine";var default_unicode_translation_table={155:0xe4,156:0xf6,157:0xfc,158:0xc4,159:0xd6,160:0xdc,161:0xdf,162:0xbb,163:0xab,164:0xeb,165:0xef,166:0xff,167:0xcb,168:0xcf,169:0xe1,170:0xe9,171:0xed,172:0xf3,173:0xfa,174:0xfd,175:0xc1,176:0xc9,177:0xcd,178:0xd3,179:0xda,180:0xdd,181:0xe0,182:0xe8,183:0xec,184:0xf2,185:0xf9,186:0xc0,187:0xc8,188:0xcc,189:0xd2,190:0xd9,191:0xe2,192:0xea,193:0xee,194:0xf4,195:0xfb,196:0xc2,197:0xca,198:0xce,199:0xd4,200:0xdb,201:0xe5,202:0xc5,203:0xf8,204:0xd8,205:0xe3,206:0xf1,207:0xf5,208:0xc3,209:0xd1,210:0xd5,211:0xe6,212:0xc6,213:0xe7,214:0xc7,215:0xfe,216:0xf0,217:0xde,218:0xd0,219:0xa3,220:0x153,221:0x152,222:0xa1,223:0xbf,};const PARENT_REC=0;const SIBLING_REC=1;const CHILD_REC=2;const CALLED_FROM_INTERRUPT=0;var GNUSTO_EFFECT_INPUT='"RS"';var GNUSTO_EFFECT_INPUT_CHAR='"RC"';var GNUSTO_EFFECT_SAVE='"DS"';var GNUSTO_EFFECT_RESTORE='"DR"';var GNUSTO_EFFECT_QUIT='"QU"';var GNUSTO_EFFECT_RESTART='"NU"';var GNUSTO_EFFECT_WIMP_OUT='"WO"';var GNUSTO_EFFECT_BREAKPOINT='"BP"';var GNUSTO_EFFECT_FLAGS_CHANGED='"XC"';var GNUSTO_EFFECT_PIRACY='"CP"';var GNUSTO_EFFECT_STYLE='"SS"';var GNUSTO_EFFECT_SOUND='"FX"';var GNUSTO_EFFECT_SPLITWINDOW='"TW"';var GNUSTO_EFFECT_SETWINDOW='"SW"';var GNUSTO_EFFECT_ERASEWINDOW='"YW"';var GNUSTO_EFFECT_ERASELINE='"YL"';var GNUSTO_EFFECT_SETCURSOR='"SC"';var GNUSTO_EFFECT_SETBUFFERMODE='"SB"';var GNUSTO_EFFECT_SETINPUTSTREAM='"SI"';var GNUSTO_EFFECT_GETCURSOR='"GC"';var GNUSTO_EFFECT_PRINTTABLE='"PT"';function handleZ_je(engine,a){if(a.length<2){engine.logger('je','noop');return'';}else if(a.length==2){engine.logger('je',a[0]+'=='+a[1]);return engine._brancher(a[0]+'=='+a[1]);}else{var condition='';for(var i=1;i<a.length;i++){if(i!=1)condition=condition+'||';condition=condition+'t=='+a[i];}
+engine.logger('je','t='+a[0]+';'+condition);return't='+a[0]+';'+engine._brancher(condition);}}
+function handleZ_jl(engine,a){engine.logger('jl',a[0]+'<'+a[1]);return engine._brancher(a[0]+'<'+a[1]);}
+function handleZ_jg(engine,a){engine.logger('jg',a[0]+'>'+a[1]);return engine._brancher(a[0]+'>'+a[1]);}
+function handleZ_dec_chk(engine,a){engine.logger('dec_chk',value+'-1 < '+a[1]);return't='+a[0]+';t2=_varcode_get(t)-1;_varcode_set(t2,t);'+engine._brancher('t2<'+a[1]);}
+function handleZ_inc_chk(engine,a){engine.logger('inc_chk',value+'+1 > '+a[1]);return't='+a[0]+';t2=_varcode_get(t)+1;_varcode_set(t2,t);'+engine._brancher('t2>'+a[1]);}
+function handleZ_jin(engine,a){engine.logger('jin',a[0]+','+a[1]);return engine._brancher("_obj_in("+a[0]+','+a[1]+')');}
+function handleZ_test(engine,a){engine.logger('test','t='+a[1]+';br('+a[0]+'&t)==t)');return't='+a[1]+';'+engine._brancher('('+a[0]+'&t)==t');}
+function handleZ_or(engine,a){engine.logger('or','('+a[0]+'|'+a[1]+')&0xFFFF');return engine._storer('('+a[0]+'|'+a[1]+')&0xffff');}
+function handleZ_and(engine,a){engine.logger('and',a[0]+'&'+a[1]+'&0xFFFF');return engine._storer(a[0]+'&'+a[1]+'&0xffff');}
+function handleZ_test_attr(engine,a){engine.logger('test_attr',a[0]+','+a[1]);return engine._brancher('_test_attr('+a[0]+','+a[1]+')');}
+function handleZ_set_attr(engine,a){engine.logger('set_attr',a[0]+','+a[1]);return'_set_attr('+a[0]+','+a[1]+')';}
+function handleZ_clear_attr(engine,a){engine.logger('clear_attr',a[0]+','+a[1]);return'_clear_attr('+a[0]+','+a[1]+')';}
+function handleZ_store(engine,a){engine.logger('store',a[0]+','+a[1]);return"_varcode_set("+a[1]+","+a[0]+")";}
+function handleZ_insert_obj(engine,a){engine.logger('insert_obj',a[0]+','+a[1]);return"_insert_obj("+a[0]+','+a[1]+")";}
+function handleZ_loadw(engine,a){engine.logger('loadw',"getWord((1*"+a[0]+"+2*"+a[1]+")&0xFFFF)");return engine._storer("getWord((1*"+a[0]+"+2*"+a[1]+")&0xFFFF)");}
 function handleZ_loadb(engine,a){return engine._storer("m_memory[0xFFFF&(1*"+a[0]+"+1*"+a[1]+")]");}
-function handleZ_get_prop(engine,a){return engine._storer("_get_prop("+a[0]+','+a[1]+')');}
-function handleZ_get_prop_addr(engine,a){return engine._storer("_get_prop_addr("+a[0]+','+a[1]+')');}
-function handleZ_get_next_prop(engine,a){return engine._storer("_get_next_prop("+a[0]+','+a[1]+')');}
-function handleZ_add(engine,a){return engine._storer(a[0]+'*1+'+a[1]+'*1');}
-function handleZ_sub(engine,a){return engine._storer(a[0]+'-'+a[1]);}
-function handleZ_mul(engine,a){return engine._storer(a[0]+'*'+a[1]);}
-function handleZ_div(engine,a){return engine._storer('_trunc_divide('+a[0]+','+a[1]+')');}
-function handleZ_mod(engine,a){return engine._storer(a[0]+'%'+a[1]);}
-function handleZ_set_colour(engine,a){return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_STYLE+",-1,"+a[0]+','+a[1]+"];return";}
-function handleZ_throw(engine,a){engine.m_compilation_running=0;return"_throw_stack_frame("+a[0]+");return";}
-function handleZ_jz(engine,a){return engine._brancher(a[0]+'==0');}
-function handleZ_get_sibling(engine,a){return"t=_get_sibling("+a[0]+");"+engine._storer("t")+";"+engine._brancher("t");}
-function handleZ_get_child(engine,a){return"t=_get_child("+a[0]+");"+
+function handleZ_get_prop(engine,a){engine.logger('get_prop',a[0]+','+a[1]);return engine._storer("_get_prop("+a[0]+','+a[1]+')');}
+function handleZ_get_prop_addr(engine,a){engine.logger('get_prop_addr',a[0]+','+a[1]);return engine._storer("_get_prop_addr("+a[0]+','+a[1]+')');}
+function handleZ_get_next_prop(engine,a){engine.logger('get_next_prop',a[0]+','+a[1]);return engine._storer("_get_next_prop("+a[0]+','+a[1]+')');}
+function handleZ_add(engine,a){engine.logger('add',a[0]+'+'+a[1]);return engine._storer(a[0]+'*1+'+a[1]+'*1');}
+function handleZ_sub(engine,a){engine.logger('sub',a[0]+'-'+a[1]);return engine._storer(a[0]+'-'+a[1]);}
+function handleZ_mul(engine,a){engine.logger('mul',a[0]+'*'+a[1]);return engine._storer(a[0]+'*'+a[1]);}
+function handleZ_div(engine,a){engine.logger('div',a[0]+'/'+a[1]);return engine._storer('_trunc_divide('+a[0]+','+a[1]+')');}
+function handleZ_mod(engine,a){engine.logger('mod',a[0]+'%'+a[1]);return engine._storer(a[0]+'%'+a[1]);}
+function handleZ_set_colour(engine,a){engine.logger('set_colour',a[0]+','+a[1]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_STYLE+",-1,"+a[0]+','+a[1]+"];return";}
+function handleZ_throw(engine,a){engine.logger('throw','throw_stack_frame('+a[0]+');return');engine.m_compilation_running=0;return"_throw_stack_frame("+a[0]+");return";}
+function handleZ_jz(engine,a){engine.logger('jz',a[0]+'==0');return engine._brancher(a[0]+'==0');}
+function handleZ_get_sibling(engine,a){engine.logger('get_sibling',"t=get_sibling("+a[0]+");");return"t=_get_sibling("+a[0]+");"+engine._storer("t")+";"+engine._brancher("t");}
+function handleZ_get_child(engine,a){engine.logger('get_child',"t=get_child("+a[0]+");");return"t=_get_child("+a[0]+");"+
 engine._storer("t")+";"+
 engine._brancher("t");}
-function handleZ_get_parent(engine,a){return engine._storer("_get_parent("+a[0]+")");}
-function handleZ_get_prop_len(engine,a){return engine._storer("_get_prop_len("+a[0]+')');}
-function handleZ_inc(engine,a){return"t="+a[0]+';_varcode_set(_varcode_get(t)+1, t)';}
-function handleZ_dec(engine,a){return"t="+a[0]+';_varcode_set(_varcode_get(t)-1, t)';}
-function handleZ_print_addr(engine,a){return engine._handler_zOut('_zscii_from('+a[0]+')',0);}
-function handleZ_remove_obj(engine,a){return"_remove_obj("+a[0]+','+a[1]+")";}
-function handleZ_print_obj(engine,a){return engine._handler_zOut("_name_of_object("+a[0]+")",0);}
-function handleZ_ret(engine,a){engine.m_compilation_running=0;return"_func_return("+a[0]+');return';}
+function handleZ_get_parent(engine,a){engine.logger('get_parent',"get_parent("+a[0]+");");return engine._storer("_get_parent("+a[0]+")");}
+function handleZ_get_prop_len(engine,a){engine.logger('get_prop_len',"get_prop_len("+a[0]+");");return engine._storer("_get_prop_len("+a[0]+')');}
+function handleZ_inc(engine,a){engine.logger('inc',a+'+1');return"t="+a[0]+';_varcode_set(_varcode_get(t)+1, t)';}
+function handleZ_dec(engine,a){engine.logger('dec',a[0]+'-1');return"t="+a[0]+';_varcode_set(_varcode_get(t)-1, t)';}
+function handleZ_print_addr(engine,a){engine.logger('print_addr','zscii_from('+a[0]+')');return engine._handler_zOut('_zscii_from('+a[0]+')',0);}
+function handleZ_remove_obj(engine,a){engine.logger('remove_obj',"remove_obj("+a[0]+','+a[1]+")");return"_remove_obj("+a[0]+','+a[1]+")";}
+function handleZ_print_obj(engine,a){engine.logger('print_obj','name_of_object('+a[0]+',0)');return engine._handler_zOut("_name_of_object("+a[0]+")",0);}
+function handleZ_ret(engine,a){engine.logger('ret',"_func_return("+a[0]+');return');engine.m_compilation_running=0;return"_func_return("+a[0]+');return';}
 function handleZ_jump(engine,a){engine.m_compilation_running=0;if(a[0]&0x8000){a[0]=(~0xFFFF)|a[0];}
-var addr=(a[0]+engine.m_pc)-2;return"m_pc="+addr+";return";}
-function handleZ_print_paddr(engine,a){return engine._handler_zOut("_zscii_from("+engine.m_pc_translate_for_string(a[0])+")",0);}
-function handleZ_load(engine,a){return engine._storer('_varcode_get('+a[0]+')');}
-function handleZ_rtrue(engine,a){engine.m_compilation_running=0;return"_func_return(1);return";}
-function handleZ_rfalse(engine,a){engine.m_compilation_running=0;return"_func_return(0);return";}
-function handleZ_print(engine,a){return engine._handler_print('',0);}
-function handleZ_print_ret(engine,a){engine.m_compilation_running=0;return engine._handler_print('\n',1)+';_func_return(1);return';}
-function handleZ_nop(engine,a){return"";}
-function handleZ_restart(engine,a){engine.m_compilation_running=0;return"m_effects=["+GNUSTO_EFFECT_RESTART+"];return";}
-function handleZ_ret_popped(engine,a){engine.m_compilation_running=0;return"_func_return(m_gamestack.pop());return";}
-function handleZ_catch(engine,a){return engine._storer("call_stack.length");}
+var addr=(a[0]+engine.m_pc)-2;engine.logger('jump',"pc="+addr+";return");return"m_pc="+addr+";return";}
+function handleZ_print_paddr(engine,a){engine.logger('print_paddr',"zscii_from((("+a[0]+")&0xFFFF)*4)");return engine._handler_zOut("_zscii_from("+engine.m_pc_translate_for_string(a[0])+")",0);}
+function handleZ_load(engine,a){engine.logger('load',"store "+c);return engine._storer('_varcode_get('+a[0]+')');}
+function handleZ_rtrue(engine,a){engine.logger('rtrue',"_func_return(1);return");engine.m_compilation_running=0;return"_func_return(1);return";}
+function handleZ_rfalse(engine,a){engine.logger('rfalse',"_func_return(0);return");engine.m_compilation_running=0;return"_func_return(0);return";}
+function handleZ_print(engine,a){engine.logger('printret',"see handler_print");return engine._handler_print('',0);}
+function handleZ_print_ret(engine,a){engine.m_compilation_running=0;engine.logger('printret',"see handler_print");return engine._handler_print('\n',1)+';_func_return(1);return';}
+function handleZ_nop(engine,a){engine.logger('noop','');return"";}
+function handleZ_restart(engine,a){engine.logger('restart','');engine.m_compilation_running=0;return"m_effects=["+GNUSTO_EFFECT_RESTART+"];return";}
+function handleZ_ret_popped(engine,a){engine.logger('pop',"_func_return(gamestack.pop());return");engine.m_compilation_running=0;return"_func_return(m_gamestack.pop());return";}
+function handleZ_catch(engine,a){engine.logger('catch',"store call_stack.length");return engine._storer("call_stack.length");}
 function handleZ_pop(engine,a){return"m_gamestack.pop()";}
-function handleZ_quit(engine,a){engine.m_compilation_running=0;return"m_effects=["+GNUSTO_EFFECT_QUIT+"];return";}
-function handleZ_new_line(engine,a){return engine._handler_zOut("'\\n'",0);}
+function handleZ_quit(engine,a){engine.logger('quit','');engine.m_compilation_running=0;return"m_effects=["+GNUSTO_EFFECT_QUIT+"];return";}
+function handleZ_new_line(engine,a){engine.logger('newline','');return engine._handler_zOut("'\\n'",0);}
 function handleZ_show_status(engine,a){engine._handler_zOut('');return"";}
 function handleZ_verify(engine,a){return engine._brancher('_verify()');}
-function handleZ_illegal_extended(engine,a){gnusto_error(199);}
-function handleZ_piracy(engine,a){engine.m_compilation_running=0;var setter='m_rebound=function(){'+engine._brancher('(!m_answers[0])')+'};';return"m_pc="+engine.m_pc+";"+setter+"m_effects=["+GNUSTO_EFFECT_PIRACY+"];return";}
+function handleZ_illegal_extended(engine,a){engine.logger('illegalop','190');gnusto_error(199);}
+function handleZ_piracy(engine,a){engine.m_compilation_running=0;var setter='m_rebound=function(){'+engine._brancher('(!m_answers[0])')+'};';engine.logger('piracy',"pc="+pc+";"+setter+"m_effects=[GNUSTO_EFFECT_PIRACY];return;");return"m_pc="+engine.m_pc+";"+setter+"m_effects=["+GNUSTO_EFFECT_PIRACY+"];return";}
 function handleZ_call_1n(engine,a){return engine._generate_gosub(a[0],'',0);}
 function handleZ_call_1s(engine,a){return engine._generate_gosub(a[0],'',1);}
 function handleZ_call_2n(engine,a){return engine._generate_gosub(a[0],a[1],0);}
 function handleZ_call_2s(engine,a){return engine._generate_gosub(a[0],a[1],1);}
 function handleZ_call_vn(engine,a){return engine._generate_gosub(a[0],a.slice(1),0);}
 function handleZ_call_vs(engine,a){return engine._generate_gosub(a[0],a.slice(1),1);}
-function handleZ_store_w(engine,a){return"setWord("+a[2]+",1*"+a[0]+"+2*"+a[1]+")";}
-function handleZ_storeb(engine,a){return"setByte("+a[2]+",1*"+a[0]+"+1*"+a[1]+")";}
-function handleZ_putprop(engine,a){return"_put_prop("+a[0]+','+a[1]+','+a[2]+')';}
+function handleZ_store_w(engine,a){engine.logger('storew',"setWord("+a[2]+",1*"+a[0]+"+2*"+a[1]+")");return"setWord("+a[2]+",1*"+a[0]+"+2*"+a[1]+")";}
+function handleZ_storeb(engine,a){engine.logger('storeb',"setByte("+a[2]+",1*"+a[0]+"+1*"+a[1]+")");return"setByte("+a[2]+",1*"+a[0]+"+1*"+a[1]+")";}
+function handleZ_putprop(engine,a){engine.logger('putprop',"put_prop("+a[0]+','+a[1]+','+a[2]+')');return"_put_prop("+a[0]+','+a[1]+','+a[2]+')';}
 function handleZ_read(engine,a){var timeout_deciseconds;var address_of_timeout_routine;engine.m_compilation_running=0;var rebound_for_no_timeout="_aread(m_answers[0],m_rebound_args[1],"+"m_rebound_args[2],m_answers[1])";var recaps_getter;var char_count_getter;if(engine.m_version>=5){rebound_for_no_timeout=engine._storer(rebound_for_no_timeout);}
 if(engine.m_version>=5){recaps_getter="m_memory[0xFFFF&a0+1]";char_count_getter="m_memory[0xFFFF&a0]";}else{recaps_getter='0';char_count_getter="m_memory[0xFFFF&a0]+1";}
 if(a[2]&&a[3]&&(engine.m_version>=4)){timeout_deciseconds=a[2];address_of_timeout_routine=engine.m_pc_translate_for_routine(a[3]);}else{timeout_deciseconds='0';address_of_timeout_routine='0';}
@@ -80,22 +80,22 @@
 timeout_deciseconds+","+
 recaps_getter+","+
 char_count_getter+","+"_terminating_characters()];return";}
-function handleZ_print_char(engine,a){return engine._handler_zOut('_zscii_char_to_ascii('+a[0]+')',0);}
-function handleZ_print_num(engine,a){return engine._handler_zOut(a[0],0);}
-function handleZ_random(engine,a){return engine._storer("_random_number("+a[0]+")");}
-function handleZ_push(engine,a){return'm_gamestack.push('+a[0]+')';}
-function handleZ_pull(engine,a){return'_varcode_set(m_gamestack.pop(),'+a[0]+')';}
-function handleZ_split_window(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SPLITWINDOW+","+a[0]+"];return";}
-function handleZ_set_window(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETWINDOW+","+a[0]+"];return";}
-function handleZ_erase_window(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_ERASEWINDOW+","+a[0]+"];return";}
-function handleZ_erase_line(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_ERASELINE+","+a[0]+"];return";}
-function handleZ_set_cursor(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETCURSOR+","+a[0]+","+a[1]+"];return";}
-function handleZ_get_cursor(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_GETCURSOR+","+a[0]+"];return";}
-function handleZ_set_text_style(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_STYLE+","+a[0]+",0,0];return";}
-function handleZ_buffer_mode(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETBUFFERMODE+","+a[0]+"];return";}
-function handleZ_output_stream(engine,a){return'_set_output_stream('+a[0]+','+a[1]+')';}
-function handleZ_input_stream(engine,a){engine.m_compilation_running=0;return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETINPUTSTREAM+","+a[0]+"];return";}
-function handleZ_sound_effect(engine,a){engine.m_compilation_running=0;while(a.length<5){a.push(0);}
+function handleZ_print_char(engine,a){engine.logger('print_char','zscii_char_to_ascii('+a[0]+')');return engine._handler_zOut('_zscii_char_to_ascii('+a[0]+')',0);}
+function handleZ_print_num(engine,a){engine.logger('print_num','handler_zout('+a[0]+')');return engine._handler_zOut(a[0],0);}
+function handleZ_random(engine,a){engine.logger('random',"random_number("+a[0]+")");return engine._storer("_random_number("+a[0]+")");}
+function handleZ_push(engine,a){engine.logger('push',a[0]);return'm_gamestack.push('+a[0]+')';}
+function handleZ_pull(engine,a){engine.logger('pull',c+'=gamestack.pop()');return'_varcode_set(m_gamestack.pop(),'+a[0]+')';}
+function handleZ_split_window(engine,a){engine.m_compilation_running=0;engine.logger('split_window','lines='+a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SPLITWINDOW+","+a[0]+"];return";}
+function handleZ_set_window(engine,a){engine.m_compilation_running=0;engine.logger('set_window','win='+a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETWINDOW+","+a[0]+"];return";}
+function handleZ_erase_window(engine,a){engine.m_compilation_running=0;engine.logger('erase_window','win='+a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_ERASEWINDOW+","+a[0]+"];return";}
+function handleZ_erase_line(engine,a){engine.m_compilation_running=0;engine.logger('erase_line',a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_ERASELINE+","+a[0]+"];return";}
+function handleZ_set_cursor(engine,a){engine.m_compilation_running=0;engine.logger('set_cursor',' ['+a[0]+', '+a[1]+'] ');return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETCURSOR+","+a[0]+","+a[1]+"];return";}
+function handleZ_get_cursor(engine,a){engine.m_compilation_running=0;engine.logger('get_cursor',a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_GETCURSOR+","+a[0]+"];return";}
+function handleZ_set_text_style(engine,a){engine.m_compilation_running=0;engine.logger('set_text_style',a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_STYLE+","+a[0]+",0,0];return";}
+function handleZ_buffer_mode(engine,a){engine.m_compilation_running=0;engine.logger('buffer_mode',a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETBUFFERMODE+","+a[0]+"];return";}
+function handleZ_output_stream(engine,a){engine.logger('output_stream',a[0]+', '+a[1]);return'_set_output_stream('+a[0]+','+a[1]+')';}
+function handleZ_input_stream(engine,a){engine.m_compilation_running=0;engine.logger('input_stream',a[0]);return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_SETINPUTSTREAM+","+a[0]+"];return";}
+function handleZ_sound_effect(engine,a){engine.m_compilation_running=0;engine.logger('sound_effect','better logging later');while(a.length<5){a.push(0);}
 return"m_pc="+engine.m_pc+';m_effects=['+GNUSTO_EFFECT_SOUND+','+a[0]+','+a[1]+','+a[2]+','+a[3]+','+a[4]+'];return';}
 function handleZ_read_char(engine,a){var timeout_deciseconds;var rebound_args_setter;var rebound_setter;engine.m_compilation_running=0;if(a[1]&&a[2]&&(engine.m_version>=4)){timeout_deciseconds=a[1];rebound_args_setter="m_rebound_args=["+
 engine.m_pc_translate_for_routine(a[2])+'];';rebound_setter="m_rebound=function(){"+"var t=1*m_answers[0];"+"if(t<0){"+"_func_interrupt(m_rebound_args[0],onISRReturn_for_read_char);"+"}else{"+
@@ -104,17 +104,17 @@
 return"m_pc="+engine.m_pc+";"+
 rebound_args_setter+
 rebound_setter+"m_effects=["+GNUSTO_EFFECT_INPUT_CHAR+","+timeout_deciseconds+"];return";}
-function handleZ_scan_table(engine,a){if(a.length==4){return"t=_scan_table("+a[0]+','+a[1]+"&0xFFFF,"+a[2]+"&0xFFFF,"+a[3]+");"+
+function handleZ_scan_table(engine,a){engine.logger('scan_table',"t=scan_table("+a[0]+','+a[1]+"&0xFFFF,"+a[2]+"&0xFFFF,"+a[3]+");");if(a.length==4){return"t=_scan_table("+a[0]+','+a[1]+"&0xFFFF,"+a[2]+"&0xFFFF,"+a[3]+");"+
 engine._storer("t")+";"+engine._brancher('t');}else{return"t=_scan_table("+a[0]+','+a[1]+"&0xFFFF,"+a[2]+"&0xFFFF,"+0x82+");"+
 engine._storer("t")+";"+engine._brancher('t');}}
-function handleZ_not(engine,a){return engine._storer('~'+a[1]+'&0xffff');}
-function handleZ_tokenise(engine,a){return"_tokenise(("+a[0]+")&0xFFFF,("+a[1]+")&0xFFFF,"+a[2]+","+a[3]+")";}
-function handleZ_encode_text(engine,a){return"_encode_text("+a[0]+","+a[1]+","+a[2]+","+a[3]+")";}
-function handleZ_copy_table(engine,a){return"_copy_table("+a[0]+','+a[1]+','+a[2]+")";}
+function handleZ_not(engine,a){engine.logger('not','~'+a[1]+'&0xffff');return engine._storer('~'+a[1]+'&0xffff');}
+function handleZ_tokenise(engine,a){engine.logger('tokenise',"tokenise("+a[0]+","+a[1]+","+a[2]+","+a[3]+")");return"_tokenise(("+a[0]+")&0xFFFF,("+a[1]+")&0xFFFF,"+a[2]+","+a[3]+")";}
+function handleZ_encode_text(engine,a){engine.logger('tokenise',"_encode_text("+a[0]+","+a[1]+","+a[2]+","+a[3]+")");return"_encode_text("+a[0]+","+a[1]+","+a[2]+","+a[3]+")";}
+function handleZ_copy_table(engine,a){engine.logger('_copy_table',"copy_table("+a[0]+','+a[1]+','+a[2]+")");return"_copy_table("+a[0]+','+a[1]+','+a[2]+")";}
 function handleZ_print_table(engine,a){if(a.length<3){a.push(1);}
 if(a.length<4){a.push(0);}
-return"m_pc="+engine.m_pc+";m_effects=_print_table("+a[0]+","+a[1]+","+a[2]+","+a[3]+");return";}
-function handleZ_check_arg_count(engine,a){return engine._brancher(a[0]+'<=_param_count()');}
+engine.logger('print_table',"print_table("+a[0]+','+a[1]+','+a[2]+','+a[3]+')');return"m_pc="+engine.m_pc+";m_effects=_print_table("+a[0]+","+a[1]+","+a[2]+","+a[3]+");return";}
+function handleZ_check_arg_count(engine,a){engine.logger('check_arg_count',a[0]+'<=param_count()');return engine._brancher(a[0]+'<=_param_count()');}
 function handleZ_saveV123(engine,a){engine.m_compilation_running=0;var setter='m_rebound=function(){'+
 engine._brancher('m_answers[0]')+'};';return"m_state_to_save=_saveable_state(1);m_pc="+engine.m_pc+";"+setter+";m_effects=["+GNUSTO_EFFECT_SAVE+"];return";}
 function handleZ_saveV45678(engine,a){engine.m_compilation_running=0;var setter="m_rebound=function() { "+
@@ -124,13 +124,13 @@
 function handleZ_restoreV123(engine,a){engine.m_compilation_running=0;engine._brancher('');return"m_pc="+engine.m_pc+";m_effects=["+GNUSTO_EFFECT_RESTORE+"];return";}
 function handleZ_restoreV45678(engine,a){engine.m_compilation_running=0;var setter='m_rebound=function() { '+'var t=m_answers[0]; if (t==0){'+
 engine._storer('t')+'}};';return"m_pc="+engine.m_pc+";"+setter+"m_effects=["+GNUSTO_EFFECT_RESTORE+"];return";}
-function handleZ_log_shift(engine,a){return engine._storer("_log_shift("+a[0]+','+a[1]+')');}
-function handleZ_art_shift(engine,a){return engine._storer("_art_shift("+a[0]+','+a[1]+')');}
-function handleZ_set_font(engine,a){return engine._storer('('+a[0]+'<2?1:0)');}
+function handleZ_log_shift(engine,a){engine.logger('log_shift',"log_shift("+a[0]+','+a[1]+')');return engine._storer("_log_shift("+a[0]+','+a[1]+')');}
+function handleZ_art_shift(engine,a){engine.logger('log_shift',"art_shift("+a[0]+','+a[1]+')');return engine._storer("_art_shift("+a[0]+','+a[1]+')');}
+function handleZ_set_font(engine,a){engine.logger('set_font','('+a[0]+'<2?1:0) <<We only provide font 1.>>');return engine._storer('('+a[0]+'<2?1:0)');}
 function handleZ_save_undo(engine,a){return engine._storer('_save_undo(3)');}
 function handleZ_restore_undo(engine,a){return'if(_restore_undo(3))return;'+engine._storer('0');}
-function handleZ_print_unicode(engine,a){return engine._handler_zOut("String.fromCharCode("+a[0]+")",0);}
-function handleZ_check_unicode(engine,a){return engine._storer('3');}
+function handleZ_print_unicode(engine,a){engine.logger('print_unicode',"String.fromCharCode("+a[0]+")");return engine._handler_zOut("String.fromCharCode("+a[0]+")",0);}
+function handleZ_check_unicode(engine,a){engine.logger('check_unicode','we always say yes');return engine._storer('3');}
 const handlers_v578={1:handleZ_je,2:handleZ_jl,3:handleZ_jg,4:handleZ_dec_chk,5:handleZ_inc_chk,6:handleZ_jin,7:handleZ_test,8:handleZ_or,9:handleZ_and,10:handleZ_test_attr,11:handleZ_set_attr,12:handleZ_clear_attr,13:handleZ_store,14:handleZ_insert_obj,15:handleZ_loadw,16:handleZ_loadb,17:handleZ_get_prop,18:handleZ_get_prop_addr,19:handleZ_get_next_prop,20:handleZ_add,21:handleZ_sub,22:handleZ_mul,23:handleZ_div,24:handleZ_mod,25:handleZ_call_2s,26:handleZ_call_2n,27:handleZ_set_colour,28:handleZ_throw,128:handleZ_jz,129:handleZ_get_sibling,130:handleZ_get_child,131:handleZ_get_parent,132:handleZ_get_prop_len,133:handleZ_inc,134:handleZ_dec,135:handleZ_print_addr,136:handleZ_call_1s,137:handleZ_remove_obj,138:handleZ_print_obj,139:handleZ_ret,140:handleZ_jump,141:handleZ_print_paddr,142:handleZ_load,143:handleZ_call_1n,176:handleZ_rtrue,177:handleZ_rfalse,178:handleZ_print,179:handleZ_print_ret,180:handleZ_nop,183:handleZ_restart,184:handleZ_ret_popped,185:handleZ_catch,186:handleZ_quit,187:handleZ_new_line,189:handleZ_verify,190:handleZ_illegal_extended,191:handleZ_piracy,224:handleZ_call_vs,225:handleZ_store_w,226:handleZ_storeb,227:handleZ_putprop,228:handleZ_read,229:handleZ_print_char,230:handleZ_print_num,231:handleZ_random,232:handleZ_push,233:handleZ_pull,234:handleZ_split_window,235:handleZ_set_window,236:handleZ_call_vs,237:handleZ_erase_window,238:handleZ_erase_line,239:handleZ_set_cursor,240:handleZ_get_cursor,241:handleZ_set_text_style,242:handleZ_buffer_mode,243:handleZ_output_stream,244:handleZ_input_stream,245:handleZ_sound_effect,246:handleZ_read_char,247:handleZ_scan_table,248:handleZ_not,249:handleZ_call_vn,250:handleZ_call_vn,251:handleZ_tokenise,252:handleZ_encode_text,253:handleZ_copy_table,254:handleZ_print_table,255:handleZ_check_arg_count,1000:handleZ_saveV45678,1001:handleZ_restoreV45678,1002:handleZ_log_shift,1003:handleZ_art_shift,1004:handleZ_set_font,1009:handleZ_save_undo,1010:handleZ_restore_undo,1011:handleZ_print_unicode,1012:handleZ_check_unicode,};const handlers_fixups={1:{25:0,26:0,27:0,28:0,136:0,143:handleZ_not,181:handleZ_saveV123,182:handleZ_restoreV123,185:handleZ_pop,188:handleZ_show_status,190:0,191:0,236:0,237:0,238:0,239:0,240:0,241:0,242:0,246:0,247:0,248:0,249:0,250:0,251:0,252:0,253:0,254:0,255:0,},2:{25:0,26:0,27:0,28:0,136:0,143:handleZ_not,181:handleZ_saveV123,182:handleZ_restoreV123,185:handleZ_pop,188:handleZ_show_status,190:0,191:0,236:0,237:0,238:0,239:0,240:0,241:0,242:0,246:0,247:0,248:0,249:0,250:0,251:0,252:0,253:0,254:0,255:0,},3:{25:0,26:0,27:0,28:0,136:0,143:handleZ_not,181:handleZ_saveV123,182:handleZ_restoreV123,185:handleZ_pop,188:handleZ_show_status,190:0,191:0,236:0,237:0,238:0,239:0,240:0,241:0,242:0,246:0,247:0,248:0,249:0,250:0,251:0,252:0,253:0,254:0,255:0,},4:{26:0,27:0,28:0,143:handleZ_not,181:handleZ_saveV45678,182:handleZ_restoreV45678,185:handleZ_pop,190:0,191:0,248:0,249:0,250:0,251:0,252:0,253:0,254:0,255:0,},5:'',6:undefined,7:'',8:'',};function pc_translate_v123(p){return'(('+p+')&0xFFFF)*2';}
 function pc_translate_v45(p){return'(('+p+')&0xFFFF)*4';}
 function pc_translate_v67R(p){return'(('+p+')&0xFFFF)*4+'+this.m_routine_start;}
@@ -143,7 +143,9 @@
 message+='\n\nJS call stack:'+procstring;console.log("Error "+number+": "+message);console.log('-- Temporary burin error: ');console.log(number);console.log(' ');console.log(message);console.log('\n');throw'Error '+number+': '+message;}
 function onISRReturn_for_read_char(interrupt_info,result){if(result){interrupt_info.engine.m_answers[0]=0;interrupt_info.rebound();}else{interrupt_info.engine.m_effects=interrupt_info.effects;interrupt_info.engine.m_rebound=interrupt_info.rebound;interrupt_info.engine.m_rebound_args=interrupt_info.rebound_args;}}
 function onISRReturn_for_read(interrupt_info,result){var engine=interrupt_info.engine;if(result){engine.m_answers[0]=0;engine.m_answers[1]='';interrupt_info.rebound();}else{engine.m_effects=interrupt_info.effects;engine.m_rebound=interrupt_info.rebound;engine.m_rebound_args=interrupt_info.rebound_args;}}
-function GnustoEngine(){}
+function GnustoEngine(logfunc){if(logfunc)
+this.logger=function(a,b){logfunc("gnusto-engine: "+a+": "+b);};else
+this.logger=function(){};}
 GnustoEngine.prototype={loadStory:function ge_loadStory(sourceFile){this.m_memory=sourceFile;this._initial_setup();},loadSavedGame:function ge_loadSavedGame(memLen,mem,mem_is_compressed,stacksLen,stacks,pc)
 {function decodeStackInt(offset,length){var result=stacks[offset++];for(var i=1;i<length;i++){result=(result<<8)|stacks[offset++];}
 return result;}
@@ -159,7 +161,7 @@
 this.m_memory=mem.concat(this.m_memory.slice(mem.length));if(this.m_version<=3){this.m_pc=pc;eval("var t=new Function('with(this){'+_brancher('1')+'}');t.call(this);",this);}else{this._varcode_set(2,this.m_memory[pc]);this.m_pc=pc+1;}},resetStory:function ge_resetStory(){this.m_memory=this.m_original_memory.slice();this._initial_setup();},get version(){gnusto_error(101,"'version' not implemented");},get signature(){gnusto_error(101,"'signature' not implemented");},get cvsVersion(){return CVS_VERSION.substring(7,26);},setGoldenTrail:function ge_setGoldenTrail(value){if(value){this.m_goldenTrail=1;}else{this.m_goldenTrail=0;}},setCopperTrail:function ge_setCopperTrail(value){if(value){this.m_copperTrail=1;}else{this.m_copperTrail=0;}},effect:function ge_effect(which){return this.m_effects[which];},answer:function ge_answer(which,what){this.m_answers[which]=what;},run:function ge_run(){var start_pc=0;var turns=0;var jscode;var turns_limit=this.m_single_step?1:10000;if(this.m_rebound){this.m_rebound();this.m_rebound=0;this.m_rebound_args=[];}
 this.m_effects=[];while(this.m_effects.length==0){if(turns++>=turns_limit){this.m_effects=['WO'];return 1;}
 start_pc=this.m_pc;if(this.m_jit[start_pc]){jscode=this.m_jit[start_pc];}else{jscode=eval('dummy='+this._compile(),this);if(start_pc>=this.m_stat_start){this.m_jit[start_pc]=jscode;}}
-if(this.m_copperTrail){burin('pc : '+start_pc.toString(16));burin('jit : '+jscode);}
+if(this.m_copperTrail){this.logger('pc : '+start_pc.toString(16));this.logger('jit : '+jscode);}
 jscode();}},walk:function ge_walk(answer){gnusto_error(101,"'walk' not implemented");},setRandomSeed:function ge_setRandomSeed(seed){if(seed>0){this._random_number(-seed);}else{this._random_number(seed);}},saveGame:function ge_saveGame(){function int_to_bytes(number,bytecount){var result=[];result.length=bytecount;for(var i=0;i<bytecount;i++){result[(bytecount-i)-1]=number&0xFF;number>>=8;}
 return result;}
 var state=this.m_state_to_save;var tag_FORM=[0x46,0x4f,0x52,0x4d];var tag_CMem=[0x43,0x4d,0x65,0x6d];var tag_UMem=[0x55,0x4d,0x65,0x6d];var tag_Stks=[0x53,0x74,0x6b,0x73];var content=[0x49,0x46,0x5a,0x53,0x49,0x46,0x68,0x64,0x00,0x00,0x00,0x0d,state.m_memory[0x02],state.m_memory[0x03],state.m_memory[0x12],state.m_memory[0x13],state.m_memory[0x14],state.m_memory[0x15],state.m_memory[0x16],state.m_memory[0x17],state.m_memory[0x1C],state.m_memory[0x1D],(state.m_pc>>16)&0xFF,(state.m_pc>>8)&0xFF,(state.m_pc)&0xFF,0];if(this.m_compress_save_files){var compressed=[];var same_count=0;for(var i=0;i<this.m_stat_start;i++){if(state.m_memory[i]==this.m_original_memory[i]){same_count++;if(same_count==256){compressed.push(0);compressed.push(255);same_count=0;}}else{if(same_count!=0){compressed.push(0);compressed.push(same_count-1);same_count=0;}
@@ -283,7 +285,7 @@
 return 0;},_print_table:function ge_print_table(address,width,height,skip){var lines=[];for(var y=0;y<height;y++){var s='';for(var x=0;x<width;x++){if(address<0){address&=0xFFFF;}
 s=s+this._zscii_char_to_ascii(this.m_memory[address++]);}
 lines.push(s);address+=skip;}
-var result=['PT',lines.length];result=result.concat(lines);return result;},_zscii_from:function ge_zscii_from(address,max_length,tell_length){if(address in this.m_jit){if(tell_length)
+var result=['PT',lines.length];result=result.concat(lines);return result;},_zscii_from:function ge_zscii_from(address,max_length,tell_length){if(address in this.m_jit){this.logger('zscii_from '+address,'already in THIS.M_JIT');if(tell_length)
 return this.m_jit[address];else
 return this.m_jit[address][0];}
 var temp='';var running=1;var start_address=address;var home_alph=0;var alph=home_alph;var tenbit=-2;var abbreviation=0;if(!max_length)max_length=65535;var stopping_place=address+max_length;while(running){var word=this.getUnsignedWord(address);address+=2;running=((word&0x8000)==0)&&address<stopping_place;for(var j=2;j>=0;j--){var code=((word>>(j*5))&0x1f);if(abbreviation){temp=temp+this._zscii_from(this.getUnsignedWord((32*(abbreviation-1)+code)*2+this.m_abbr_start)*2);abbreviation=0;alph=home_alph;}else if(tenbit==-2){if(code>5){if(alph==2&&code==6)
@@ -296,7 +298,7 @@
 else{if(code==4){home_alph+=1;if(home_alph>2){home_alph=0;}}else{home_alph-=1;if(home_alph<0){home_alph=2;}}
 alph=home_alph;}}}}else if(tenbit==-1){tenbit=code;}else{temp=temp+this._zscii_char_to_ascii((tenbit<<5)+code);tenbit=-2;alph=home_alph;}}}
 if(start_address>=this.m_stat_start){this.m_jit[start_address]=[temp,address];}
-if(tell_length){return[temp,address];}else{return temp;}},_encode_text:function ge_encode_text(zscii_text,length,from,coded_text){zscii_text=(zscii_text+from)&0xFFFF;var source='';while(length>0){var b=this.m_memory[zscii_text];if(b==0)break;source=source+this._zscii_char_to_ascii(b);zscii_text++;length--;}
+this.logger('zscii_from '+address,temp);if(tell_length){return[temp,address];}else{return temp;}},_encode_text:function ge_encode_text(zscii_text,length,from,coded_text){zscii_text=(zscii_text+from)&0xFFFF;var source='';while(length>0){var b=this.m_memory[zscii_text];if(b==0)break;source=source+this._zscii_char_to_ascii(b);zscii_text++;length--;}
 var result=this._into_zscii(source);for(var i=0;i<result.length;i++){var c=result[i].charCodeAt(0);this.setByte(c,coded_text++);}},_into_zscii:function ge_into_zscii(str){var result='';var buffer=[];var dictionary_entry_length;if(this.m_version<4){dictionary_entry_length=4;}else{dictionary_entry_length=6;}
 function emit(value){buffer.push(value);if(buffer.length==3){var temp=(buffer[0]<<10|buffer[1]<<5|buffer[2]);if(result.length==dictionary_entry_length-2){temp|=0x8000;}
 result=result+
@@ -325,7 +327,7 @@
 this.m_pc_translate_for_routine(target)+','+'['+arguments.toString()+'],'+
 this.m_pc+','+
 varcode+')';},_handler_zOut:function ge_handler_zOut(text,is_return){var setter;if(is_return){setter='_func_return(1)';}else{setter='m_pc=0x'+this.m_pc.toString(16);}
-return'if(_zOut('+text+')){'+setter+';m_effects=['+GNUSTO_EFFECT_FLAGS_CHANGED+'];return 1}';},_handler_print:function ge_handler_print(suffix,is_return){var zf=this._zscii_from(this.m_pc,65535,1);var message=zf[0];if(suffix)message=message+suffix;message=message.replace('\\','\\\\','g').replace('"','\\"','g').replace('\n','\\n','g');this.m_pc=zf[1];return this._handler_zOut('"'+message+'"',is_return);},_log_shift:function ge_log_shift(value,shiftbits){if(shiftbits<0){return(value>>>(-1*shiftbits))&0x7FFF;}else{return(value<<shiftbits)&0x7FFF;}},_art_shift:function ge_art_shift(value,shiftbits){if(shiftbits<0){return(value>>(-1*shiftbits))&0x7FFF;}else{return(value<<shiftbits)&0x7FFF;}},_touch:function ge_touch(address){if(this.m_goldenTrail){burin("pc : "+address.toString(16));}
+return'if(_zOut('+text+')){'+setter+';m_effects=['+GNUSTO_EFFECT_FLAGS_CHANGED+'];return 1}';},_handler_print:function ge_handler_print(suffix,is_return){var zf=this._zscii_from(this.m_pc,65535,1);var message=zf[0];if(suffix)message=message+suffix;message=message.replace('\\','\\\\','g').replace('"','\\"','g').replace('\n','\\n','g');this.m_pc=zf[1];this.logger('print',message);return this._handler_zOut('"'+message+'"',is_return);},_log_shift:function ge_log_shift(value,shiftbits){if(shiftbits<0){return(value>>>(-1*shiftbits))&0x7FFF;}else{return(value<<shiftbits)&0x7FFF;}},_art_shift:function ge_art_shift(value,shiftbits){if(shiftbits<0){return(value>>(-1*shiftbits))&0x7FFF;}else{return(value<<shiftbits)&0x7FFF;}},_touch:function ge_touch(address){if(this.m_goldenTrail){this.logger("pc : "+address.toString(16));}
 this.m_pc=address;},_save_undo:function ge_save_undo(varcode_offset){this.m_undo=this._saveable_state(varcode_offset);return 1;},_restore_undo:function ge_restore_undo(){if(typeof this.m_undo!='object'){return 0;}
 this.m_call_stack=this.m_undo.m_call_stack;this.m_locals=this.m_undo.m_locals;this.m_locals_stack=this.m_undo.m_locals_stack;this.m_param_counts=this.m_undo.m_param_counts;this.m_result_targets=this.m_undo.m_result_targets;this.m_gamestack=this.m_undo.m_gamestack;var mem=this.m_undo.m_memory;this.m_memory=mem.concat(this.m_memory.slice(mem.length));this._varcode_set(2,this.m_memory[this.m_undo.m_pc]);this.m_pc=this.m_undo.m_pc+1;this.undo=0;return 1;},_saveable_state:function ge_saveable_state(varcode_offset){var result={'m_memory':this.m_memory.slice(0,this.m_stat_start),'m_pc':this.m_pc+varcode_offset,'m_call_stack':this.m_call_stack,'m_locals':this.m_locals,'m_locals_stack':this.m_locals_stack,'m_param_counts':this.m_param_counts,'m_result_targets':this.m_result_targets,'m_gamestack':this.m_gamestack,};return result;},_verify:function ge_verify(){var total=0;var checksum=(this.m_original_memory[0x1c]<<8|this.m_original_memory[0x1d]);for(var i=0x40;i<this.m_original_memory.length;i++){total+=this.m_original_memory[i];}
 return(total&0xFFFF)==checksum;},m_local_game_file:0,m_memory:[],m_handlers:0,m_jit:[],m_goldenTrail:0,m_copperTrail:0,m_compilation_running:0,m_gamestack:0,m_gamestack_callbreaks:[],m_himem:0,m_pc:0,m_this_instr_pc:0,m_dict_start:0,m_objs_start:0,m_vars_start:0,m_stat_start:0,m_abbr_start:0,m_hext_start:0,m_alpha_start:0,m_zalphabet:[],m_string_start:0,m_routine_start:0,m_unicode_start:0,m_custom_unicode_charcount:0,m_separator_count:0,m_separators:[],m_version:0,m_call_stack:0,m_locals:[],m_locals_stack:0,m_param_counts:0,m_result_targets:[],m_rebound:0,m_rebound_args:[],m_output_to_console:0,m_streamthrees:[],m_output_to_script:0,m_single_step:0,m_debug_mode:0,m_parser_debugging:0,m_breakpoints:{},m_console_buffer:'',m_transcript_buffer:'',m_effects:[],m_answers:[],m_random_state:0,m_random_use_seed:0,m_random_use_sequence:0,m_random_sequence_max:0,m_printing_header_bits:0,m_leftovers:'',m_pc_translate_for_routine:pc_translate_v45,m_pc_translate_for_string:pc_translate_v45,m_undo:0,m_state_to_save:0,m_quetzal_image:0,m_original_memory:[],m_compress_save_files:1,m_object_tree_start:0,m_property_list_addr_start:0,m_object_size:14,m_interrupt_information:[],};
\ No newline at end of file