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 }