@@ -5,7 +5,7 @@ inline char* OS_NAME = "SectorOS";
55
66inline char * KERNEL_NAME = "SectorOS" ;
77inline char * KERNEL_VERSION = "V2.1.6" ;
8- inline char * KERNEL_BUILD = "Build: 2021-12-10 " ;
8+ inline char * KERNEL_BUILD = "Build: 2021-12-11 " ;
99inline char * KERNEL_ARCH = "x86" ;
1010
1111inline char * SHELL_NAME = "SOSH" ;
@@ -17,9 +17,143 @@ inline int SPIndex = 0; // Shell Prompt Index
1717// END Environment variables
1818
1919// START Kernel variables
20- inline char * key_buffer [256 ]; // To Save the keystrokes in memory to use them later. Max number keystroke to save in the buffer is 256 Chars
21- inline int key_buffer_index = 0 ; // The index of the key_buffer
2220inline bool IsShellDisabled = false; // To disable the shell
21+ inline bool isShift = false; // To know if the shift key is pressed
22+
2323// END Kernel variables
2424
25+ // START Common Functions
26+
27+ inline char KeyCodeToChar (uint8_t keyCode )
28+ {
29+ char result ;
30+ if (keyCode < 0x80 )
31+ {
32+ switch (keyCode )
33+ {
34+ case 0xFA : break ;
35+ case 0x45 : case 0xC5 : break ;
36+ case 0x29 :if (!isShift ) result = '`' ; else result = '~' ; break ;
37+ case 0x02 :if (!isShift ) result = '1' ; else result = '!' ; break ;
38+ case 0x03 :if (!isShift ) result = '2' ; else result = '@' ; break ;
39+ case 0x04 :if (!isShift ) result = '3' ; else result = '#' ; break ;
40+ case 0x05 :if (!isShift ) result = '4' ; else result = '$' ; break ;
41+ case 0x06 :if (!isShift ) result = '5' ; else result = '%' ; break ;
42+ case 0x07 :if (!isShift ) result = '6' ; else result = '^' ; break ;
43+ case 0x08 :if (!isShift ) result = '7' ; else result = '&' ; break ;
44+ case 0x09 :if (!isShift ) result = '8' ; else result = '*' ; break ;
45+ case 0x0A :if (!isShift ) result = '9' ; else result = '(' ; break ;
46+ case 0x0B :if (!isShift ) result = '0' ; else result = ')' ; break ;
47+ case 0x0C :if (!isShift ) result = '-' ; else result = '_' ; break ;
48+ case 0x0D :if (!isShift ) result = '=' ; else result = '+' ; break ;
49+
50+ case 0x10 :if (!isShift ) result = 'q' ; else result = 'Q' ; break ;
51+ case 0x11 :if (!isShift ) result = 'w' ; else result = 'W' ; break ;
52+ case 0x12 :if (!isShift ) result = 'e' ; else result = 'E' ; break ;
53+ case 0x13 :if (!isShift ) result = 'r' ; else result = 'R' ; break ;
54+ case 0x14 :if (!isShift ) result = 't' ; else result = 'T' ; break ;
55+ case 0x15 :if (!isShift ) result = 'y' ; else result = 'Y' ; break ;
56+ case 0x16 :if (!isShift ) result = 'u' ; else result = 'U' ; break ;
57+ case 0x17 :if (!isShift ) result = 'i' ; else result = 'I' ; break ;
58+ case 0x18 :if (!isShift ) result = 'o' ; else result = 'O' ; break ;
59+ case 0x19 :if (!isShift ) result = 'p' ; else result = 'P' ; break ;
60+ case 0x1A :if (!isShift ) result = '[' ; else result = '{' ; break ;
61+ case 0x1B :if (!isShift ) result = ']' ; else result = '}' ; break ;
62+ case 0x1C :if (!isShift ) result = '\n' ; else result = '\n' ; break ;
63+
64+ case 0x1E :if (!isShift ) result = 'a' ; else result = 'A' ; break ;
65+ case 0x1F :if (!isShift ) result = 's' ; else result = 'S' ; break ;
66+ case 0x20 :if (!isShift ) result = 'd' ; else result = 'D' ; break ;
67+ case 0x21 :if (!isShift ) result = 'f' ; else result = 'F' ; break ;
68+ case 0x22 :if (!isShift ) result = 'g' ; else result = 'G' ; break ;
69+ case 0x23 :if (!isShift ) result = 'h' ; else result = 'H' ; break ;
70+ case 0x24 :if (!isShift ) result = 'j' ; else result = 'J' ; break ;
71+ case 0x25 :if (!isShift ) result = 'k' ; else result = 'K' ; break ;
72+ case 0x26 :if (!isShift ) result = 'l' ; else result = 'L' ; break ;
73+ case 0x27 :if (!isShift ) result = ';' ; else result = ':' ; break ;
74+
75+ case 0x2C :if (!isShift ) result = 'z' ; else result = 'Z' ; break ;
76+ case 0x2D :if (!isShift ) result = 'x' ; else result = 'X' ; break ;
77+ case 0x2E :if (!isShift ) result = 'c' ; else result = 'C' ; break ;
78+ case 0x2F :if (!isShift ) result = 'v' ; else result = 'V' ; break ;
79+ case 0x30 :if (!isShift ) result = 'v' ; else result = 'B' ; break ;
80+ case 0x31 :if (!isShift ) result = 'n' ; else result = 'N' ; break ;
81+ case 0x32 :if (!isShift ) result = 'm' ; else result = 'M' ; break ;
82+ case 0x33 :if (!isShift ) result = ',' ; else result = '<' ; break ;
83+ case 0x34 :if (!isShift ) result = '.' ; else result = '>' ; break ;
84+ case 0x35 :if (!isShift ) result = '/' ; else result = '?' ; break ;
85+ case 0x39 :if (!isShift ) result = ' ' ; else result = ' ' ; break ;
86+ case 0x2B :if (!isShift ) result = '\\' ; else result = '|' ; break ;
87+ }
88+ }
89+ return result ;
90+ }
91+
92+ inline char * KeycodeToASCII (uint8_t Keycode )
93+ {
94+ char * result ;
95+ if (Keycode < 0x80 )
96+ {
97+ switch (Keycode )
98+ {
99+ case 0xFA : break ;
100+ case 0x45 : case 0xC5 : break ;
101+ case 0x29 :if (!isShift ) result = "`" ; else result = "~" ; break ;
102+ case 0x02 :if (!isShift ) result = "1" ; else result = "!" ; break ;
103+ case 0x03 :if (!isShift ) result = "2" ; else result = "@" ; break ;
104+ case 0x04 :if (!isShift ) result = "3" ; else result = "#" ; break ;
105+ case 0x05 :if (!isShift ) result = "4" ; else result = "$" ; break ;
106+ case 0x06 :if (!isShift ) result = "5" ; else result = "%" ; break ;
107+ case 0x07 :if (!isShift ) result = "6" ; else result = "^" ; break ;
108+ case 0x08 :if (!isShift ) result = "7" ; else result = "&" ; break ;
109+ case 0x09 :if (!isShift ) result = "8" ; else result = "*" ; break ;
110+ case 0x0A :if (!isShift ) result = "9" ; else result = "(" ; break ;
111+ case 0x0B :if (!isShift ) result = "0" ; else result = ")" ; break ;
112+ case 0x0C :if (!isShift ) result = "-" ; else result = "_" ; break ;
113+ case 0x0D :if (!isShift ) result = "=" ; else result = "+" ; break ;
114+
115+ case 0x10 :if (!isShift ) result = "q" ; else result = "Q" ; break ;
116+ case 0x11 :if (!isShift ) result = "w" ; else result = "W" ; break ;
117+ case 0x12 :if (!isShift ) result = "e" ; else result = "E" ; break ;
118+ case 0x13 :if (!isShift ) result = "r" ; else result = "R" ; break ;
119+ case 0x14 :if (!isShift ) result = "t" ; else result = "T" ; break ;
120+ case 0x15 :if (!isShift ) result = "y" ; else result = "Y" ; break ;
121+ case 0x16 :if (!isShift ) result = "u" ; else result = "U" ; break ;
122+ case 0x17 :if (!isShift ) result = "i" ; else result = "I" ; break ;
123+ case 0x18 :if (!isShift ) result = "o" ; else result = "O" ; break ;
124+ case 0x19 :if (!isShift ) result = "p" ; else result = "P" ; break ;
125+ case 0x1A :if (!isShift ) result = "[" ; else result = "{" ; break ;
126+ case 0x1B :if (!isShift ) result = "]" ; else result = "}" ; break ;
127+ case 0x1C :if (!isShift ) result = "\n" ; else result = "\n" ; break ;
128+
129+ case 0x1E :if (!isShift ) result = "a" ; else result = "A" ; break ;
130+ case 0x1F :if (!isShift ) result = "s" ; else result = "S" ; break ;
131+ case 0x20 :if (!isShift ) result = "d" ; else result = "D" ; break ;
132+ case 0x21 :if (!isShift ) result = "f" ; else result = "F" ; break ;
133+ case 0x22 :if (!isShift ) result = "g" ; else result = "G" ; break ;
134+ case 0x23 :if (!isShift ) result = "h" ; else result = "H" ; break ;
135+ case 0x24 :if (!isShift ) result = "j" ; else result = "J" ; break ;
136+ case 0x25 :if (!isShift ) result = "k" ; else result = "K" ; break ;
137+ case 0x26 :if (!isShift ) result = "l" ; else result = "L" ; break ;
138+ case 0x27 :if (!isShift ) result = ";" ; else result = ":" ; break ;
139+
140+ case 0x2C :if (!isShift ) result = "z" ; else result = "Z" ; break ;
141+ case 0x2D :if (!isShift ) result = "x" ; else result = "X" ; break ;
142+ case 0x2E :if (!isShift ) result = "c" ; else result = "C" ; break ;
143+ case 0x2F :if (!isShift ) result = "v" ; else result = "V" ; break ;
144+ case 0x30 :if (!isShift ) result = "v" ; else result = "B" ; break ;
145+ case 0x31 :if (!isShift ) result = "n" ; else result = "N" ; break ;
146+ case 0x32 :if (!isShift ) result = "m" ; else result = "M" ; break ;
147+ case 0x33 :if (!isShift ) result = "," ; else result = "<" ; break ;
148+ case 0x34 :if (!isShift ) result = "." ; else result = ">" ; break ;
149+ case 0x35 :if (!isShift ) result = "/" ; else result = "?" ; break ;
150+ case 0x39 :if (!isShift ) result = " " ; else result = " " ; break ;
151+ case 0x2B :if (!isShift ) result = "\\" ; else result = "|" ; break ;
152+ }
153+ }
154+ return result ;
155+ }
156+
157+ // END Common Functions
158+
25159#endif
0 commit comments