diff --git a/src/ZuulTerm/chrome/content/Term.js b/src/ZuulTerm/chrome/content/Term.js index 2b2e62bde12292fb7c2d059592ac8f6ac9df51e6..77253a900e0d954746fd841a493918096d19550d 100644 --- a/src/ZuulTerm/chrome/content/Term.js +++ b/src/ZuulTerm/chrome/content/Term.js @@ -1,6 +1,6 @@ var connection=null; -function UpdateTerm(data) +function writeText(data) { var term=document.getElementById("frame").contentDocument.getElementById("terminal"); var win=document.getElementById("frame").contentWindow; @@ -9,6 +9,42 @@ function UpdateTerm(data) win.scroll(0, term.clientHeight); } +function handleCtrl(byte) +{ + var term=document.getElementById("frame").contentDocument.getElementById("terminal"); + var win=document.getElementById("frame").contentWindow; + + switch(byte) { + case '\n': + case '\t': + case '\r': + writeText(byte); + break; + case '\b': + term.innerHTML = term.innerHTML.replace(/[^\x00-\x1F]$/,''); + break; + case '\x0c': // Formfeed -- clear screen + term.innerHTML = ''; + break; + } +} + +function UpdateTerm(data) +{ + while(data.length) { + data=data.replace(/^([^\x00-\x1F]*)/, function(matched, text) { + writeText(text); + return ''; + }); + if(data.length) { + while(data.charCodeAt(0) < 32) { + handleCtrl(data.substr(0,1)); + data=data.substr(1); + } + } + } +} + function doTerm(host, port) { var ConnOpt=document.getElementById("MainConnectionMenu-connect").disabled=true;