diff --git a/bf.css b/bf.css index 1281fd8..4463e05 100644 --- a/bf.css +++ b/bf.css @@ -9,6 +9,9 @@ red (30%): rgb(153,0,0) grey (25%): rgb(64,64,64) yellow (90%): rgb(255,255,204) + +green (75%): rgb(128,255,128) +green (50%): rgb(0,255,0); */ html, body{ @@ -323,6 +326,7 @@ body>.wrapper>*{ -moz-user-select: initial; -ms-user-select: initial; user-select: initial; + overflow:hidden; } #memoryview .memory-cells .cellwrapper{ @@ -339,6 +343,7 @@ body>.wrapper>*{ #memoryview .memory-cells .cellwrapper .cell{ flex:1 1 2px; border:1px solid black; + overflow:hidden; } #memoryview .memory-cells .cellwrapper .cell:not(:first-child){ @@ -356,6 +361,23 @@ body>.wrapper>*{ border-left-color:red; } +#memoryview .memory-cells .cellwrapper .cell input{ + width:100%; + height:100%; + font-family:inherit; + font-size:inherit; + text-align:center; + box-sizing:border-box; + outline:none; + border:none; + background-color:rgb(128,255,128); +} + +#memoryview .memory-cells .cellwrapper .cell input::selection{ + background-color:rgb(0,128,0); + color:white; +} + #memoryview .memory-cells .labelwrapper{ height:14px; display:flex; @@ -370,6 +392,7 @@ body>.wrapper>*{ #memoryview .memory-cells .labelwrapper .label{ flex:1 1 0px; border:1px solid transparent; + overflow:hidden; } #memoryview .memory-cells .labelwrapper .label:not(:first-child){ diff --git a/bf.js b/bf.js index 501910d..7900323 100644 --- a/bf.js +++ b/bf.js @@ -371,28 +371,32 @@ window.addEventListener("load",function(){ continuebutton.addEventListener("click",function(){ - if(execution_is_paused){ - if(continuehandler&&globalPauseBuffer){ - // turn off the global pauser + if(runTerminator){ // check if code is currently running + if(execution_is_paused){ + if(continuehandler&&globalPauseBuffer){ + // turn off the global pauser + var arr=new Uint8Array(globalPauseBuffer); + Atomics.store(arr,0,0); + undraw_execution_paused(); + continuehandler(); + } + } + else{ + // turn on the global pauser var arr=new Uint8Array(globalPauseBuffer); - Atomics.store(arr,0,0); - undraw_execution_paused(); - continuehandler(); + Atomics.store(arr,0,1); } } - else{ - // turn on the global pauser - var arr=new Uint8Array(globalPauseBuffer); - Atomics.store(arr,0,1); - } }); stepbutton.addEventListener("click",function(){ - if(execution_is_paused){ - if(continuehandler&&globalPauseBuffer){ - // turn off the global pauser - var arr=new Uint8Array(globalPauseBuffer); - Atomics.store(arr,0,1); - continuehandler(); + if(runTerminator){ // check if code is currently running + if(execution_is_paused){ + if(continuehandler&&globalPauseBuffer){ + // turn off the global pauser + var arr=new Uint8Array(globalPauseBuffer); + Atomics.store(arr,0,1); + continuehandler(); + } } } }); @@ -507,6 +511,39 @@ window.addEventListener("load",function(){ }; + + // memoryview buttons/functions + var cast_int_range=function(str,minval,maxval){ + var k=parseInt(str); + if(k.toString()!==str)return undefined; + if(kmaxval)return undefined; + return k; + }; + memoryview.getElementsByClassName("left-arrow")[0].addEventListener("click",function(){ + if(memoryviewmanager)memoryviewmanager.goSmaller(); + }); + memoryview.getElementsByClassName("right-arrow")[0].addEventListener("click",function(){ + if(memoryviewmanager)memoryviewmanager.goLarger(); + }); + Array.prototype.forEach.call(memoryview.getElementsByClassName("goto"),function(el){ + var el_input=el.getElementsByTagName("input")[0]; + el_input.addEventListener("keyup",function(e){ + if(memoryviewmanager&&e.key==="Enter"){ + var str=el_input.value; + var target=cast_int_range(str,memoryviewmanager.minIndex,memoryviewmanager.maxIndex); + if(target!==undefined){ + memoryviewmanager.goToIndex(target); + } + else{ + alert("Cannot interpret \""+str+"\" as cell index!"); + } + el_input.value=""; + } + }); + }); + + + // options var radio_interactive_yes=document.getElementById("radio-interactive-yes"); var radio_interactive_no=document.getElementById("radio-interactive-no"); diff --git a/jelly-memoryview.js b/jelly-memoryview.js index 3105447..36156fe 100644 --- a/jelly-memoryview.js +++ b/jelly-memoryview.js @@ -19,6 +19,7 @@ MemoryView.prototype.refresh=function(){ for(var i=0;i=0&&k<=255){ + Atomics.store(that.data,parseInt(this_cell_el.dataset.index),k); + } + else{ + alert("\""+str+"\" is not a valid value!"); + str=val2; + } + while(this_cell_el.firstChild)this_cell_el.removeChild(this_cell_el.firstChild); + this_cell_el.appendChild(document.createTextNode(str)); + delete this_cell_el.dataset.isEditing; + }; + inp.addEventListener("blur",process_done_editing); + var _proc=function(e){ + if(e.key==="Enter")process_done_editing(); + }; + inp.addEventListener("keyup",_proc); + inp.select(); + }; + tdiv.addEventListener("dblclick",edit_handler); + tdiv.addEventListener("mousedown",function(e){ + if(e.button===2){ + e.preventDefault(); + edit_handler(e); + } + }); + tdiv.addEventListener("contextmenu",function(e){ + e.preventDefault();return false; + }); cellwrapper.appendChild(tdiv); var tdiv=document.createElement("div"); tdiv.classList.add("label"); @@ -82,14 +129,14 @@ MemoryView.prototype.goToIndex=function(index){ }; MemoryView.prototype.goSmaller=function(){ - if(this.currenIndex<=this.minIndex)return false; + if(this.currentIndex<=this.minIndex)return false; --this.currentIndex; this.refresh(); return true; } MemoryView.prototype.goLarger=function(){ - if(this.currenIndex+this.viewLength>this.maxIndex)return false; + if(this.currentIndex+this.viewLength>this.maxIndex)return false; ++this.currentIndex; this.refresh(); return true;