jsos

college code for operating system fundamentals in js

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

deviceDriverKeyboard.js

(2575B)


      1 /* ----------------------------------
      2    DeviceDriverKeyboard.js
      3    
      4    Requires deviceDriver.js
      5    
      6    The Kernel Keyboard Device Driver.
      7    ---------------------------------- */
      8 
      9 DeviceDriverKeyboard.prototype = new DeviceDriver;  // "Inherit" from prototype DeviceDriver in deviceDriver.js.
     10 function DeviceDriverKeyboard()                     // Add or override specific attributes and method pointers.
     11 {
     12     // "subclass"-specific attributes.
     13     // this.buffer = "";    // TODO: Do we need this?
     14     // Override the base method pointers.
     15     this.driverEntry = krnKbdDriverEntry;
     16     this.isr = krnKbdDispatchKeyPress;
     17     // "Constructor" code.
     18 }
     19 
     20 function krnKbdDriverEntry()
     21 {
     22     // Initialization routine for this, the kernel-mode Keyboard Device Driver.
     23     this.status = "loaded";
     24     // More?
     25 }
     26 
     27 function krnKbdDispatchKeyPress(params)
     28 {
     29     // mapping of character keys
     30     var chars = {
     31       48:{unshift:'0', shift:')'},
     32       49:{unshift:'1', shift:'!'},
     33       50:{unshift:'2', shift:'@'},
     34       51:{unshift:'3', shift:'#'},
     35       52:{unshift:'4', shift:'$'},
     36       53:{unshift:'5', shift:'%'},
     37       54:{unshift:'6', shift:'^'},
     38       55:{unshift:'7', shift:'&'},
     39       56:{unshift:'8', shift:'*'},
     40       57:{unshift:'9', shift:'('},
     41       188:{unshift:',', shift: '<'},
     42       190:{unshift:'.', shift: '>'},
     43       191:{unshift:'/', shift: '?'},
     44       192:{unshift:'`', shift: '~'},
     45       219:{unshift:'[', shift: '{'},
     46       220:{unshift:'\\', shift: '|'},
     47       221:{unshift:']', shift: '}'},
     48       222:{unshift:'\'', shift: '"'}};
     49 
     50     // Parse the params.
     51     var keyCode = params[0];
     52     var isShifted = params[1];
     53 
     54     // chack validity.
     55     if (typeof keyCode !== 'number' || typeof isShifted !== 'boolean') 
     56       krnTrapError('Invalid paramaters for krnKbdDispatchKeyPress.');
     57     
     58     krnTrace("Key code:" + keyCode + " shifted:" + isShifted);
     59     var chr = "";
     60     
     61     // Check to see if we even want to deal with the key that was pressed.
     62     if (((keyCode >= 65) && (keyCode <= 90)) ||   // A..Z
     63         ((keyCode >= 97) && (keyCode <= 123))) {  // a..z
     64       if (isShifted) chr = String.fromCharCode(keyCode);
     65       else chr = String.fromCharCode(keyCode + 32);
     66     } else if ((keyCode == 32) ||   // space
     67                (keyCode == 13) ||   // enter
     68                (keyCode == 8)) {    //backspace  
     69       chr = String.fromCharCode(keyCode);
     70     } else if(chars.hasOwnProperty(keyCode)) { // other 
     71       if(isShifted) chr = chars[keyCode].shift;
     72       else chr = chars[keyCode].unshift;
     73     }
     74 
     75     if(chr) _KernelInputQueue.enqueue(chr);
     76 }