Mercurial > web-gnusto
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