jsos

college code for operating system fundamentals in js

git clone https://9o.is/git/jsos.git

commit 0c771ca4a47984f973244b57d36cfd92408fdb1e
parent a9ec172df27857517593c789e0a7c30b0433adeb
Author: Jul <jul@9o.is>
Date:   Mon,  1 Oct 2012 22:59:29 -0400

fixed broken backspace

Diffstat:
Mscripts/os/console.js | 11++---------
Mscripts/os/deviceDriverKeyboard.js | 54++++++++++++++++++++++++++++--------------------------
2 files changed, 30 insertions(+), 35 deletions(-)

diff --git a/scripts/os/console.js b/scripts/os/console.js @@ -66,18 +66,12 @@ function consoleHandleInput() { while (_KernelInputQueue.getSize() > 0) { var chr = _KernelInputQueue.dequeue(); - if (isEnter(chr)) handleEnter(this); - else if (isBackspace(chr)) this.backspace(); + if (chr == String.fromCharCode(13)) handleEnter(this); + else if (chr == String.fromCharCode(8)) this.backspace(); else handleText(this, chr); } } -function charCode(keycode) { - return String.fromCharCode(keycode) -} -function isEnter(chr){ return chr == charCode(13) } -function isBackspace(chr){ return chr == charCode(8) } - /* * Enter key marks the end of command so send it to shell * and reset our buffer. @@ -198,7 +192,6 @@ function consoleBackspace() { this.CurrentYPosition - this.CurrentFontSize, this.CurrentXPosition, this.CurrentYPosition + 2); //fudge - this.refresh(); this.CurrentXPosition = offset; this.buffer = this.buffer.slice(0, -1); } diff --git a/scripts/os/deviceDriverKeyboard.js b/scripts/os/deviceDriverKeyboard.js @@ -26,18 +26,26 @@ function krnKbdDriverEntry() function krnKbdDispatchKeyPress(params) { - // added digits mapped to punctuations - var digits = { - 48:{num:'0', punc:')'}, - 49:{num:'1', punc:'!'}, - 50:{num:'2', punc:'@'}, - 51:{num:'3', punc:'#'}, - 52:{num:'4', punc:'$'}, - 53:{num:'5', punc:'%'}, - 54:{num:'6', punc:'^'}, - 55:{num:'7', punc:'&'}, - 56:{num:'8', punc:'*'}, - 57:{num:'9', punc:'('}}; + // mapping of character keys + var chars = { + 48:{unshift:'0', shift:')'}, + 49:{unshift:'1', shift:'!'}, + 50:{unshift:'2', shift:'@'}, + 51:{unshift:'3', shift:'#'}, + 52:{unshift:'4', shift:'$'}, + 53:{unshift:'5', shift:'%'}, + 54:{unshift:'6', shift:'^'}, + 55:{unshift:'7', shift:'&'}, + 56:{unshift:'8', shift:'*'}, + 57:{unshift:'9', shift:'('}, + 188:{unshift:',', shift: '<'}, + 190:{unshift:'.', shift: '>'}, + 191:{unshift:'/', shift: '?'}, + 192:{unshift:'`', shift: '~'}, + 219:{unshift:'[', shift: '{'}, + 220:{unshift:'\\', shift: '|'}, + 221:{unshift:']', shift: '}'}, + 222:{unshift:'\'', shift: '"'}}; // Parse the params. var keyCode = params[0]; @@ -52,23 +60,17 @@ function krnKbdDispatchKeyPress(params) // Check to see if we even want to deal with the key that was pressed. if (((keyCode >= 65) && (keyCode <= 90)) || // A..Z - ((keyCode >= 97) && (keyCode <= 123))) // a..z - { - // Assume it's lowercase... - chr = String.fromCharCode(keyCode + 32); + ((keyCode >= 97) && (keyCode <= 123))) { // a..z if (isShifted) chr = String.fromCharCode(keyCode); - - // TODO: Check for caps-lock and handle as shifted if so. - _KernelInputQueue.enqueue(chr); + else chr = String.fromCharCode(keyCode + 32); } else if ((keyCode == 32) || // space (keyCode == 13) || // enter - (keyCode == 8)) //backspace - { + (keyCode == 8)) { //backspace chr = String.fromCharCode(keyCode); - _KernelInputQueue.enqueue(chr); - } else if((keyCode >= 48) && (keyCode <= 57)) { // digits - if(isShifted) chr = digits[keyCode].punc; - else chr = digits[keyCode].num; - _KernelInputQueue.enqueue(chr); + } else if(chars.hasOwnProperty(keyCode)) { // other + if(isShifted) chr = chars[keyCode].shift; + else chr = chars[keyCode].unshift; } + + if(chr) _KernelInputQueue.enqueue(chr); }