diff --git a/site/web.html b/site/web.html index e5e0ecd..3de452b 100644 --- a/site/web.html +++ b/site/web.html @@ -26,5 +26,5 @@ limitations under the License. {{MENU}}
-
+
diff --git a/web/platform.fs b/web/platform.fs index 027dfc2..45f87fc 100644 --- a/web/platform.fs +++ b/web/platform.fs @@ -28,21 +28,22 @@ r| : jseval ( a n -- ) 1 call ; r" - globalObj.inbuffer = []; - if (!globalObj['write']) { - var con = document.getElementById('console'); - if (con === null) { - con = document.createElement('pre'); - con.id = 'console'; - document.body.appendChild(con); + context.inbuffer = []; + if (!globalObj.write) { + context.screen = document.getElementById('ueforth'); + if (context.screen === null) { + context.screen = document.createElement('div'); + document.body.appendChild(context.screen); } - window.outbuffer = ''; + context.terminal = document.createElement('pre'); + context.screen.appendChild(context.terminal); + context.outbuffer = ''; window.onkeypress = function(e) { - globalObj.inbuffer.push(e.keyCode); + context.inbuffer.push(e.keyCode); }; window.onkeydown = function(e) { if (e.keyCode == 8) { - globalObj.inbuffer.push(e.keyCode); + context.inbuffer.push(e.keyCode); } }; } @@ -52,23 +53,22 @@ r| (function(sp) { var n = i32[sp>>2]; sp -= 4; var a = i32[sp>>2]; sp -= 4; - if (globalObj['write']) { + if (globalObj.write) { var text = GetString(a, n); write(text); } else { - var con = document.getElementById('console'); for (var i = 0; i < n; ++i) { var ch = u8[a + i]; if (ch == 12) { - window.outbuffer = ''; + context.outbuffer = ''; } else if (ch == 8) { - window.outbuffer = window.outbuffer.slice(0, -1); + context.outbuffer = context.outbuffer.slice(0, -1); } else if (ch == 13) { } else { - window.outbuffer += String.fromCharCode(ch); + context.outbuffer += String.fromCharCode(ch); } } - con.innerText = window.outbuffer + String.fromCharCode(0x2592); + context.terminal.innerText = context.outbuffer + String.fromCharCode(0x2592); window.scrollTo(0, document.body.scrollHeight); } return sp; @@ -79,15 +79,15 @@ r| r| (function(sp) { - if (globalObj['readline'] && !globalObj.inbuffer.length) { + if (globalObj.readline && !context.inbuffer.length) { var line = readline(); for (var i = 0; i < line.length; ++i) { - globalObj.inbuffer.push(line.charCodeAt(i)); + context.inbuffer.push(line.charCodeAt(i)); } - globalObj.inbuffer.push(13); + context.inbuffer.push(13); } - if (globalObj.inbuffer.length) { - sp += 4; i32[sp>>2] = globalObj.inbuffer.shift(); + if (context.inbuffer.length) { + sp += 4; i32[sp>>2] = context.inbuffer.shift(); } else { sp += 4; i32[sp>>2] = 0; } @@ -99,10 +99,11 @@ r| r| (function(sp) { - if (globalObj['readline']) { - return -1; + if (globalObj.readline) { + sp += 4; i32[sp>>2] = -1; + return sp; } - sp += 4; i32[sp>>2] = globalObj.inbuffer.length ? -1 : 0; + sp += 4; i32[sp>>2] = context.inbuffer.length ? -1 : 0; return sp; }) | 4 jseval! @@ -112,7 +113,7 @@ r| r| (function(sp) { var val = i32[sp>>2]; sp -= 4; - if (globalObj['quit']) { + if (globalObj.quit) { quit(val); } else { Init(); @@ -124,7 +125,7 @@ r| r| (function(sp) { - if (globalObj['write']) { + if (globalObj.write) { sp += 4; i32[sp>>2] = 0; // Disable echo. } else { sp += 4; i32[sp>>2] = -1; // Enable echo. diff --git a/web/web.template.js b/web/web.template.js index e92c703..d87967d 100644 --- a/web/web.template.js +++ b/web/web.template.js @@ -37,6 +37,7 @@ var u8 = new Uint8Array(heap); var builtins = []; var opcodes = {}; var objects = [SetEval]; +var context = {}; // For later use by platform. {{sys}}