mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-10 23:04:04 +09:00
keyevent reading moved to the tvdos itself
This commit is contained in:
@@ -427,51 +427,6 @@ con.KEY_DELETE = 211;
|
|||||||
con.KEY_BACKSPACE = 8;
|
con.KEY_BACKSPACE = 8;
|
||||||
con.KEY_TAB = 9;
|
con.KEY_TAB = 9;
|
||||||
con.KEY_RETURN = 13;
|
con.KEY_RETURN = 13;
|
||||||
let _79kfQgystrobocounter = 4294967296*0; // 0L
|
|
||||||
let _pur82anstrobotime = 4294967296*0;
|
|
||||||
let _acpgrUzstrobodelays = [0,250000000,0,25000000,0]; // 250ms, 25ms
|
|
||||||
let _sT9mpKGstrobostatus = 0; // 0: first key, 1: waiting for initial delay, 2: repeating key, 3: waiting for repeat delay
|
|
||||||
let _9gyFcs7oldkeys = [];
|
|
||||||
let _qtkf932repeatcnt932repeatcnt = 0;
|
|
||||||
let _x93paQZshiftin = false;
|
|
||||||
// basically a multi-key version of con.getch() with GDX keycodes
|
|
||||||
con.scankeys = function(callback) {
|
|
||||||
// TODO: char as a first argument of callback, which needs KeyboardLayout(QWERTY, Colemak, Dvorak, etc)
|
|
||||||
function arrayEq(a,b) {
|
|
||||||
for (var i = 0; i < a.length; ++i) {
|
|
||||||
if (a[i] !== b[i]) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sys.poke(-40, 255);
|
|
||||||
let keys = [sys.peek(-41),sys.peek(-42),sys.peek(-43),sys.peek(-44),sys.peek(-45),sys.peek(-46),sys.peek(-47),sys.peek(-48)];
|
|
||||||
if (_sT9mpKGstrobostatus % 2 == 0 && keys[0] != 0) {
|
|
||||||
_sT9mpKGstrobostatus += 1;
|
|
||||||
_pur82anstrobotime = sys.nanoTime();
|
|
||||||
_qtkf932repeatcnt += 1;
|
|
||||||
_x93paQZshiftin = keys.includes(59) || keys.includes(60);
|
|
||||||
|
|
||||||
callback('x', keys, _qtkf932repeatcnt);
|
|
||||||
}
|
|
||||||
else if (!arrayEq(keys, _9gyFcs7oldkeys) || keys[0] == 0) {
|
|
||||||
_sT9mpKGstrobostatus = 0;
|
|
||||||
_qtkf932repeatcnt = 0;
|
|
||||||
_x93paQZshiftin = keys.includes(59) || keys.includes(60);
|
|
||||||
}
|
|
||||||
else if (_sT9mpKGstrobostatus % 2 == 1 && sys.nanoTime() - _pur82anstrobotime < _acpgrUzstrobodelays[_sT9mpKGstrobostatus]) {
|
|
||||||
sys.spin();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_sT9mpKGstrobostatus += 1;
|
|
||||||
if (_sT9mpKGstrobostatus >= 4) {
|
|
||||||
_sT9mpKGstrobostatus = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_9gyFcs7oldkeys = keys;
|
|
||||||
// sys.spin();
|
|
||||||
};
|
|
||||||
con.getch = function() {
|
con.getch = function() {
|
||||||
return sys.readKey();
|
return sys.readKey();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ function hitCtrlQ(keys) {
|
|||||||
println("Hit Ctrl+Shift+T+R to exit")
|
println("Hit Ctrl+Shift+T+R to exit")
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
con.scankeys((char, keys, counter) => {
|
input.withEvent(event => {
|
||||||
println(`${keys}\t'${char}' (${counter})`)
|
println(event)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@ function generateRandomHashStr(len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// define TVDOS
|
// define TVDOS
|
||||||
var _TVDOS = {};
|
const _TVDOS = {};
|
||||||
_TVDOS.VERSION = "1.0";
|
_TVDOS.VERSION = "1.0";
|
||||||
_TVDOS.DRIVES = {}; // Object where key-value pair is <drive-letter> : [serial-port, drive-number]
|
_TVDOS.DRIVES = {}; // Object where key-value pair is <drive-letter> : [serial-port, drive-number]
|
||||||
// actually figure out the drive letter association
|
// actually figure out the drive letter association
|
||||||
@@ -48,6 +48,7 @@ _TVDOS.getPath = function() {
|
|||||||
_TVDOS.variables = {
|
_TVDOS.variables = {
|
||||||
DOSDIR: "\\tvdos",
|
DOSDIR: "\\tvdos",
|
||||||
LANG: "EN",
|
LANG: "EN",
|
||||||
|
KEYBOARD: "us_qwerty",
|
||||||
PATH: "\\tvdos\\bin;\\tbas;\\home",
|
PATH: "\\tvdos\\bin;\\tbas;\\home",
|
||||||
PATHEXT: ".com;.bat;.js",
|
PATHEXT: ".com;.bat;.js",
|
||||||
HELPPATH: "\\tvdos\\help",
|
HELPPATH: "\\tvdos\\help",
|
||||||
@@ -58,7 +59,7 @@ Object.freeze(_TVDOS);
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
var filesystem = {};
|
const filesystem = {};
|
||||||
filesystem._toPorts = (driveLetter) => {
|
filesystem._toPorts = (driveLetter) => {
|
||||||
if (driveLetter.toUpperCase === undefined) {
|
if (driveLetter.toUpperCase === undefined) {
|
||||||
throw Error("'"+driveLetter+"' (type: "+typeof driveLetter+") is not a valid drive letter");
|
throw Error("'"+driveLetter+"' (type: "+typeof driveLetter+") is not a valid drive letter");
|
||||||
@@ -91,8 +92,7 @@ filesystem.open = (driveLetter, path, operationMode) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
com.sendMessage(port[0], "OPEN"+mode+'"'+path+'",'+port[1]);
|
com.sendMessage(port[0], "OPEN"+mode+'"'+path+'",'+port[1]);
|
||||||
var response = com.getStatusCode(port[0]);
|
return com.getStatusCode(port[0]);
|
||||||
return (response == 0);
|
|
||||||
};
|
};
|
||||||
// @return the entire contents of the file in String
|
// @return the entire contents of the file in String
|
||||||
filesystem.readAll = (driveLetter) => {
|
filesystem.readAll = (driveLetter) => {
|
||||||
@@ -153,9 +153,104 @@ Object.freeze(filesystem);
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
const input = {};
|
||||||
|
const inputwork = {};
|
||||||
|
|
||||||
|
inputwork.keymap = [];
|
||||||
|
|
||||||
|
input.changeKeyLayout = function(name) {
|
||||||
|
let res0 = filesystem.open("A",`tvdos/${name.toLowerCase()}.key`,"R");
|
||||||
|
if (res0 != 0 && inputwork.keymap.length == 0) throw new Error(`I/O Error ${res0} - A:\\tvdos\\${name.toLowerCase()}.key`);
|
||||||
|
try {
|
||||||
|
inputwork.keymap = eval(filesystem.readAll("A"));
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
printerrln(e);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// load initial key layout
|
||||||
|
input.changeKeyLayout(_TVDOS.variables.KEYBOARD || "us_qwerty");
|
||||||
|
|
||||||
|
// states to run the keyboard input
|
||||||
|
inputwork.stroboTime = 4294967296*0;
|
||||||
|
inputwork.stroboDelays = [0,250000000,0,25000000,0]; // 250ms, 25ms
|
||||||
|
inputwork.stroboStatus = 0; // 0: first key, 1: waiting for initial delay, 2: repeating key, 3: waiting for repeat delay
|
||||||
|
inputwork.oldKeys = [];
|
||||||
|
inputwork.oldMouse = [];
|
||||||
|
inputwork.repeatCount = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* callback: takes one argument of object which
|
||||||
|
* [ <eventname>, args ]
|
||||||
|
* where:
|
||||||
|
* "key_down", <key symbol string>, <repeat count>, keycode0, keycode1 .. keycode7
|
||||||
|
* "key_change", <key symbol string (what went up)>, 0, keycode0, keycode1 .. keycode7 (remaining keys that are held down)
|
||||||
|
* "mouse_down", pos-x, pos-y, 1 // yes there's only one mouse button :p
|
||||||
|
* "mouse_up", pos-x, pos-y, 0
|
||||||
|
* "mouse_move", pos-x, pos-y, <button down?>, oldpos-x, oldpos-y
|
||||||
|
*/
|
||||||
|
input.withEvent = function(callback) {
|
||||||
|
|
||||||
|
// TODO mouse event
|
||||||
|
function arrayEq(a,b) {
|
||||||
|
for (let i = 0; i < a.length; ++i) {
|
||||||
|
if (a[i] !== b[i]) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function arrayDiff(a,b) {
|
||||||
|
return a.filter(x => !b.includes(x));
|
||||||
|
}
|
||||||
|
|
||||||
|
function keysToStr(keys) {
|
||||||
|
let shiftin = keys.includes(59) || keys.includes(60);
|
||||||
|
let headkey = keys.head();
|
||||||
|
return (inputwork.keymap[headkey] == undefined) ? undefined : (shiftin) ? (inputwork.keymap[headkey][1] || inputwork.keymap[headkey][0]) : inputwork.keymap[headkey][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
sys.poke(-40, 255);
|
||||||
|
let keys = [sys.peek(-41),sys.peek(-42),sys.peek(-43),sys.peek(-44),sys.peek(-45),sys.peek(-46),sys.peek(-47),sys.peek(-48)];
|
||||||
|
let mouse = [sys.peek(-33) | (sys.peek(-34) << 8), sys.peek(-35) | (sys.peek(-36) << 8), sys.peek(-37)];
|
||||||
|
|
||||||
|
if (inputwork.stroboStatus % 2 == 0 && keys[0] != 0) {
|
||||||
|
inputwork.stroboStatus += 1;
|
||||||
|
inputwork.stroboTime = sys.nanoTime();
|
||||||
|
inputwork.repeatCount += 1;
|
||||||
|
|
||||||
|
callback(["key_down", keysToStr(keys), inputwork.repeatCount].concat(keys));
|
||||||
|
}
|
||||||
|
else if (!arrayEq(keys, inputwork.oldKeys) || keys[0] == 0) {
|
||||||
|
inputwork.stroboStatus = 0;
|
||||||
|
inputwork.repeatCount = 0;
|
||||||
|
|
||||||
|
if (inputwork.oldKeys[0] != 0)
|
||||||
|
callback(["key_change", keysToStr(arrayDiff(inputwork.oldKeys, keys)), inputwork.repeatCount].concat(keys));
|
||||||
|
}
|
||||||
|
else if (inputwork.stroboStatus % 2 == 1 && sys.nanoTime() - inputwork.stroboTime < inputwork.stroboDelays[inputwork.stroboStatus]) {
|
||||||
|
sys.spin();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
inputwork.stroboStatus += 1;
|
||||||
|
if (inputwork.stroboStatus >= 4) {
|
||||||
|
inputwork.stroboStatus = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inputwork.oldKeys = keys;
|
||||||
|
inputwork.oldMouse = mouse;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Object.freeze(input);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// install other stuffs
|
// install other stuffs
|
||||||
filesystem.open("A", "tvdos/gl.js", "R");
|
filesystem.open("A", "tvdos/gl.js", "R");
|
||||||
var GL = eval(filesystem.readAll("A"));
|
const GL = eval(filesystem.readAll("A"));
|
||||||
|
|
||||||
let checkTerm = `if (sys.peek(-49)&1) throw new InterruptedException();`;
|
let checkTerm = `if (sys.peek(-49)&1) throw new InterruptedException();`;
|
||||||
let injectIntChk = (s, n) => {
|
let injectIntChk = (s, n) => {
|
||||||
|
|||||||
@@ -253,9 +253,9 @@ shell.coreutils = {
|
|||||||
if (DEBUG_PRINT) serial.println("command.js > cd > pathstr = "+path.string);
|
if (DEBUG_PRINT) serial.println("command.js > cd > pathstr = "+path.string);
|
||||||
|
|
||||||
// check if path is valid
|
// check if path is valid
|
||||||
filesystem.open(CURRENT_DRIVE, path.string, 'R');
|
var dirOpenedStatus = filesystem.open(CURRENT_DRIVE, path.string, 'R');
|
||||||
var dirOpened = filesystem.isDirectory(CURRENT_DRIVE); // open a dir; if path is nonexistent, file won't actually be opened
|
var isDir = filesystem.isDirectory(CURRENT_DRIVE); // open a dir; if path is nonexistent, file won't actually be opened
|
||||||
if (!dirOpened) { printerrln("CHDIR failed for '"+path.string+"'"); return; } // if file is not opened, FALSE will be returned
|
if (!isDir) { printerrln("CHDIR failed for '"+path.string+"'"); return dirOpenedStatus; } // if file is not opened, IO error code will be returned
|
||||||
|
|
||||||
shell_pwd = path.pwd;
|
shell_pwd = path.pwd;
|
||||||
},
|
},
|
||||||
@@ -268,9 +268,9 @@ shell.coreutils = {
|
|||||||
if (DEBUG_PRINT) serial.println("command.js > mkdir > pathstr = "+path.string);
|
if (DEBUG_PRINT) serial.println("command.js > mkdir > pathstr = "+path.string);
|
||||||
|
|
||||||
// check if path is valid
|
// check if path is valid
|
||||||
var dirOpened = filesystem.open(CURRENT_DRIVE, path.string, 'W');
|
var dirOpenedStatus = filesystem.open(CURRENT_DRIVE, path.string, 'W');
|
||||||
var mkdird = filesystem.mkDir(CURRENT_DRIVE);
|
var mkdird = filesystem.mkDir(CURRENT_DRIVE);
|
||||||
if (!mkdird) { printerrln("MKDIR failed for '"+path.string+"'"); return; }
|
if (!mkdird) { printerrln("MKDIR failed for '"+path.string+"'"); return dirOpenedStatus; }
|
||||||
},
|
},
|
||||||
cls: function(args) {
|
cls: function(args) {
|
||||||
con.clear();
|
con.clear();
|
||||||
@@ -326,8 +326,8 @@ shell.coreutils = {
|
|||||||
var pathstr = (args[1] !== undefined) ? args[1] : shell.getPwdString();
|
var pathstr = (args[1] !== undefined) ? args[1] : shell.getPwdString();
|
||||||
|
|
||||||
// check if path is valid
|
// check if path is valid
|
||||||
var pathOpened = filesystem.open(CURRENT_DRIVE, pathstr, 'R');
|
var pathOpenedStatus = filesystem.open(CURRENT_DRIVE, pathstr, 'R');
|
||||||
if (!pathOpened) { printerrln("File not found"); return; }
|
if (pathOpenedStatus != 0) { printerrln("File not found"); return pathOpenedStatus; }
|
||||||
|
|
||||||
var port = filesystem._toPorts(CURRENT_DRIVE)[0]
|
var port = filesystem._toPorts(CURRENT_DRIVE)[0]
|
||||||
com.sendMessage(port, "LIST");
|
com.sendMessage(port, "LIST");
|
||||||
@@ -336,8 +336,8 @@ shell.coreutils = {
|
|||||||
cat: function(args) {
|
cat: function(args) {
|
||||||
var pathstr = (args[1] !== undefined) ? args[1] : shell.getPwdString();
|
var pathstr = (args[1] !== undefined) ? args[1] : shell.getPwdString();
|
||||||
|
|
||||||
var pathOpened = filesystem.open(CURRENT_DRIVE, pathstr, 'R');
|
var pathOpenedStatus = filesystem.open(CURRENT_DRIVE, pathstr, 'R');
|
||||||
if (!pathOpened) { printerrln("File not found"); return; }
|
if (pathOpenedStatus != 0) { printerrln("File not found"); return pathOpenedStatus; }
|
||||||
let contents = filesystem.readAll(CURRENT_DRIVE);
|
let contents = filesystem.readAll(CURRENT_DRIVE);
|
||||||
// TODO just print out what's there
|
// TODO just print out what's there
|
||||||
print(contents);
|
print(contents);
|
||||||
@@ -381,7 +381,7 @@ shell.execute = function(line) {
|
|||||||
serial.println("[command.js > shell.execute] file search path: "+path);
|
serial.println("[command.js > shell.execute] file search path: "+path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filesystem.open(CURRENT_DRIVE, path, "R")) {
|
if (0 == filesystem.open(CURRENT_DRIVE, path, "R")) {
|
||||||
fileExists = true;
|
fileExists = true;
|
||||||
break searchLoop;
|
break searchLoop;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ let bulletinShown = false;
|
|||||||
let cursoringCol = 0;
|
let cursoringCol = 0;
|
||||||
|
|
||||||
// load existing file if it's there
|
// load existing file if it's there
|
||||||
let editingExistingFile = filesystem.open(driveLetter, filePath, "R");
|
let editingExistingFile = (0 == filesystem.open(driveLetter, filePath, "R"));
|
||||||
if (editingExistingFile) {
|
if (editingExistingFile) {
|
||||||
textbuffer = filesystem.readAll(driveLetter).split("\n");
|
textbuffer = filesystem.readAll(driveLetter).split("\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ if (exec_args[1] === undefined) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
let fileOpened = filesystem.open(_G.shell.getCurrentDrive(), _G.shell.resolvePathInput(exec_args[1]).string, "R");
|
let fileOpenedStatus = filesystem.open(_G.shell.getCurrentDrive(), _G.shell.resolvePathInput(exec_args[1]).string, "R");
|
||||||
if (!fileOpened) {
|
if (fileOpenedStatus != 0) {
|
||||||
printerrln(_G.shell.resolvePathInput(exec_args[1]).string+": cannot open");
|
printerrln(_G.shell.resolvePathInput(exec_args[1]).string+": cannot open");
|
||||||
return 1;
|
return fileOpenedStatus;
|
||||||
}
|
}
|
||||||
let fileContent = filesystem.readAll(_G.shell.getCurrentDrive());
|
let fileContent = filesystem.readAll(_G.shell.getCurrentDrive());
|
||||||
let visible = "";
|
let visible = "";
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ if (exec_args[1] === undefined) {
|
|||||||
let path = _G.shell.resolvePathInput(exec_args[2] || exec_args[1]).string;
|
let path = _G.shell.resolvePathInput(exec_args[2] || exec_args[1]).string;
|
||||||
let driveLetter = _G.shell.getCurrentDrive();
|
let driveLetter = _G.shell.getCurrentDrive();
|
||||||
let noNewFile = (exec_args[1] == "/c" || exec_args[1] == "/C");
|
let noNewFile = (exec_args[1] == "/c" || exec_args[1] == "/C");
|
||||||
let fileOpened = filesystem.open(driveLetter, path, "W");
|
let fileOpenedStatus = filesystem.open(driveLetter, path, "W");
|
||||||
if (!fileOpened) {
|
if (fileOpenedStatus != 0) {
|
||||||
printerrln("TOUCH: Can't open "+driveLetter+":\\"+path+" due to IO error");
|
printerrln("TOUCH: Can't open "+driveLetter+":\\"+path+" due to IO error");
|
||||||
return 1;
|
return fileOpenedStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!noNewFile) {
|
if (!noNewFile) {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ TVDOS Graphics Library
|
|||||||
Has no affiliation with OpenGL by Khronos Group
|
Has no affiliation with OpenGL by Khronos Group
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var GL = {};
|
const GL = {};
|
||||||
|
|
||||||
// bytes should be able to handle both JSArray and Java ByteArray (toString = "[B")?
|
// bytes should be able to handle both JSArray and Java ByteArray (toString = "[B")?
|
||||||
GL.Texture = function(w, h, bytes) {
|
GL.Texture = function(w, h, bytes) {
|
||||||
|
|||||||
256
assets/disk0/tvdos/us_colemak.key
Normal file
256
assets/disk0/tvdos/us_colemak.key
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
[[""],[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<HOME>"],
|
||||||
|
[undefined],
|
||||||
|
["<CALL>"],
|
||||||
|
["<ENDCALL>"],
|
||||||
|
["0",")"],
|
||||||
|
["1","!"],
|
||||||
|
["2","@"],
|
||||||
|
["3","#"],
|
||||||
|
["4","$)"],
|
||||||
|
["5","%"],
|
||||||
|
["6","^"],
|
||||||
|
["7","&"],
|
||||||
|
["8","*"],
|
||||||
|
["9","("],
|
||||||
|
["*"],
|
||||||
|
["#"],
|
||||||
|
["<UP>"],
|
||||||
|
["<DOWN>"],
|
||||||
|
["<LEFT>"],
|
||||||
|
["<RIGHT>"],
|
||||||
|
["<CENTER>"],
|
||||||
|
["<VOL_UP>"],
|
||||||
|
["<VOL_DOWN>"],
|
||||||
|
["<POWER>"],
|
||||||
|
["<CAMERA>"],
|
||||||
|
["<CLEAR>"],
|
||||||
|
["a","A"],
|
||||||
|
["b","B"],
|
||||||
|
["c","C"],
|
||||||
|
["s","S"],
|
||||||
|
["f","F"],
|
||||||
|
["t","T"],
|
||||||
|
["d","D"],
|
||||||
|
["h","H"],
|
||||||
|
["u","U"],
|
||||||
|
["n","N"],
|
||||||
|
["e","E"],
|
||||||
|
["i","I"],
|
||||||
|
["m","M"],
|
||||||
|
["k","K"],
|
||||||
|
["y","Y"],
|
||||||
|
[";",":"],
|
||||||
|
["q","Q"],
|
||||||
|
["p","P"],
|
||||||
|
["r","R"],
|
||||||
|
["g","G"],
|
||||||
|
["l","L"],
|
||||||
|
["v","V"],
|
||||||
|
["w","W"],
|
||||||
|
["x","X"],
|
||||||
|
["j","J"],
|
||||||
|
["z","Z"],
|
||||||
|
[",","<"],
|
||||||
|
[".",">"],
|
||||||
|
["<ALT_L>"],
|
||||||
|
["<ALT_R>"],
|
||||||
|
["<SHIFT_L>"],
|
||||||
|
["<SHIFT_R>"],
|
||||||
|
["<TAB>"],
|
||||||
|
[" "],
|
||||||
|
["<SYM>"],
|
||||||
|
["<EXPLORER>"],
|
||||||
|
["<ENVELOPE>"],
|
||||||
|
["\n"],
|
||||||
|
["\x08"],
|
||||||
|
["`","~"],
|
||||||
|
["-","_"],
|
||||||
|
["=","+"],
|
||||||
|
["[","{"],
|
||||||
|
["]","}"],
|
||||||
|
["\\","|"],
|
||||||
|
["o","O"],
|
||||||
|
["'",'"'],
|
||||||
|
["/","?"],
|
||||||
|
["<AT>"],
|
||||||
|
["<NUM>"],
|
||||||
|
["<HEADSETHOOK>"],
|
||||||
|
["<FOCUS>"],
|
||||||
|
["+"],
|
||||||
|
["<MENU>"],
|
||||||
|
["<NOTIFICATION>"],
|
||||||
|
["<SEARCH>"],
|
||||||
|
["<PLAY_PAUSE>"],
|
||||||
|
["<STOP>"],
|
||||||
|
["<NEXT>"],
|
||||||
|
["<PREV>"],
|
||||||
|
["<REW>"],
|
||||||
|
["<FFWD>"],
|
||||||
|
["<MUTE>"],
|
||||||
|
["<PAGE_UP>"],
|
||||||
|
["<PAGE_DOWN>"],
|
||||||
|
["<PICTSYMBOLS>"],
|
||||||
|
["<SW:>TCH_CHARSET>"],
|
||||||
|
["<:A:>"],
|
||||||
|
["<:B:>"],
|
||||||
|
["<:C:>"],
|
||||||
|
["<:X:>"],
|
||||||
|
["<:Y:>"],
|
||||||
|
["<:Z:>"],
|
||||||
|
["<:L1:>"],
|
||||||
|
["<:R1:>"],
|
||||||
|
["<:L2:>"],
|
||||||
|
["<:R2:>"],
|
||||||
|
["<:TL:>"],
|
||||||
|
["<:TR:>"],
|
||||||
|
["<:START:>"],
|
||||||
|
["<:SELECT:>"],
|
||||||
|
["<:MODE:>"],
|
||||||
|
["<ESC>"],
|
||||||
|
["<DEL>"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<CAPS_LOCK>"],
|
||||||
|
["<SCROLL_LOCK>"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<PRINT_SCREEN_SYS_RQ>"],
|
||||||
|
["<PAUSE_BREAK>"],
|
||||||
|
[undefined],
|
||||||
|
["<END>"],
|
||||||
|
["<INSERT>"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<CTRL_L>"],
|
||||||
|
["<CTRL_R>"],
|
||||||
|
["<F1>"],
|
||||||
|
["<F2>"],
|
||||||
|
["<F3>"],
|
||||||
|
["<F4>"],
|
||||||
|
["<F5>"],
|
||||||
|
["<F6>"],
|
||||||
|
["<F7>"],
|
||||||
|
["<F8>"],
|
||||||
|
["<F9>"],
|
||||||
|
["<F10>"],
|
||||||
|
["<F11>"],
|
||||||
|
["<F12>"],
|
||||||
|
["<NUM_LOCK>"],
|
||||||
|
["0"],
|
||||||
|
["1"],
|
||||||
|
["2"],
|
||||||
|
["3"],
|
||||||
|
["4"],
|
||||||
|
["5"],
|
||||||
|
["6"],
|
||||||
|
["7"],
|
||||||
|
["8"],
|
||||||
|
["9"],
|
||||||
|
["/"],
|
||||||
|
["*"],
|
||||||
|
["-"],
|
||||||
|
["+"],
|
||||||
|
["."],
|
||||||
|
["."],
|
||||||
|
["\n"],
|
||||||
|
["="],
|
||||||
|
["("],
|
||||||
|
[")"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<:CIRCLE:>"]
|
||||||
|
]
|
||||||
256
assets/disk0/tvdos/us_qwerty.key
Normal file
256
assets/disk0/tvdos/us_qwerty.key
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
[[""],[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<HOME>"],
|
||||||
|
[undefined],
|
||||||
|
["<CALL>"],
|
||||||
|
["<ENDCALL>"],
|
||||||
|
["0",")"],
|
||||||
|
["1","!"],
|
||||||
|
["2","@"],
|
||||||
|
["3","#"],
|
||||||
|
["4","$)"],
|
||||||
|
["5","%"],
|
||||||
|
["6","^"],
|
||||||
|
["7","&"],
|
||||||
|
["8","*"],
|
||||||
|
["9","("],
|
||||||
|
["*"],
|
||||||
|
["#"],
|
||||||
|
["<UP>"],
|
||||||
|
["<DOWN>"],
|
||||||
|
["<LEFT>"],
|
||||||
|
["<RIGHT>"],
|
||||||
|
["<CENTER>"],
|
||||||
|
["<VOL_UP>"],
|
||||||
|
["<VOL_DOWN>"],
|
||||||
|
["<POWER>"],
|
||||||
|
["<CAMERA>"],
|
||||||
|
["<CLEAR>"],
|
||||||
|
["a","A"],
|
||||||
|
["b","B"],
|
||||||
|
["c","C"],
|
||||||
|
["d","D"],
|
||||||
|
["e","E"],
|
||||||
|
["f","F"],
|
||||||
|
["g","G"],
|
||||||
|
["h","H"],
|
||||||
|
["i","I"],
|
||||||
|
["j","J"],
|
||||||
|
["k","K"],
|
||||||
|
["l","L"],
|
||||||
|
["m","M"],
|
||||||
|
["n","N"],
|
||||||
|
["o","O"],
|
||||||
|
["p","P"],
|
||||||
|
["q","Q"],
|
||||||
|
["r","R"],
|
||||||
|
["s","S"],
|
||||||
|
["t","T"],
|
||||||
|
["u","U"],
|
||||||
|
["v","V"],
|
||||||
|
["w","W"],
|
||||||
|
["x","X"],
|
||||||
|
["y","Y"],
|
||||||
|
["z","Z"],
|
||||||
|
[",","<"],
|
||||||
|
[".",">"],
|
||||||
|
["<ALT_L>"],
|
||||||
|
["<ALT_R>"],
|
||||||
|
["<SHIFT_L>"],
|
||||||
|
["<SHIFT_R>"],
|
||||||
|
["<TAB>"],
|
||||||
|
[" "],
|
||||||
|
["<SYM>"],
|
||||||
|
["<EXPLORER>"],
|
||||||
|
["<ENVELOPE>"],
|
||||||
|
["\n"],
|
||||||
|
["\x08"],
|
||||||
|
["`","~"],
|
||||||
|
["-","_"],
|
||||||
|
["=","+"],
|
||||||
|
["[","{"],
|
||||||
|
["]","}"],
|
||||||
|
["\\","|"],
|
||||||
|
[";",":"],
|
||||||
|
["'",'"'],
|
||||||
|
["/","?"],
|
||||||
|
["<AT>"],
|
||||||
|
["<NUM>"],
|
||||||
|
["<HEADSETHOOK>"],
|
||||||
|
["<FOCUS>"],
|
||||||
|
["+"],
|
||||||
|
["<MENU>"],
|
||||||
|
["<NOTIFICATION>"],
|
||||||
|
["<SEARCH>"],
|
||||||
|
["<PLAY_PAUSE>"],
|
||||||
|
["<STOP>"],
|
||||||
|
["<NEXT>"],
|
||||||
|
["<PREV>"],
|
||||||
|
["<REW>"],
|
||||||
|
["<FFWD>"],
|
||||||
|
["<MUTE>"],
|
||||||
|
["<PAGE_UP>"],
|
||||||
|
["<PAGE_DOWN>"],
|
||||||
|
["<PICTSYMBOLS>"],
|
||||||
|
["<SW:>TCH_CHARSET>"],
|
||||||
|
["<:A:>"],
|
||||||
|
["<:B:>"],
|
||||||
|
["<:C:>"],
|
||||||
|
["<:X:>"],
|
||||||
|
["<:Y:>"],
|
||||||
|
["<:Z:>"],
|
||||||
|
["<:L1:>"],
|
||||||
|
["<:R1:>"],
|
||||||
|
["<:L2:>"],
|
||||||
|
["<:R2:>"],
|
||||||
|
["<:TL:>"],
|
||||||
|
["<:TR:>"],
|
||||||
|
["<:START:>"],
|
||||||
|
["<:SELECT:>"],
|
||||||
|
["<:MODE:>"],
|
||||||
|
["<ESC>"],
|
||||||
|
["<DEL>"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<CAPS_LOCK>"],
|
||||||
|
["<SCROLL_LOCK>"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<PRINT_SCREEN_SYS_RQ>"],
|
||||||
|
["<PAUSE_BREAK>"],
|
||||||
|
[undefined],
|
||||||
|
["<END>"],
|
||||||
|
["<INSERT>"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<CTRL_L>"],
|
||||||
|
["<CTRL_R>"],
|
||||||
|
["<F1>"],
|
||||||
|
["<F2>"],
|
||||||
|
["<F3>"],
|
||||||
|
["<F4>"],
|
||||||
|
["<F5>"],
|
||||||
|
["<F6>"],
|
||||||
|
["<F7>"],
|
||||||
|
["<F8>"],
|
||||||
|
["<F9>"],
|
||||||
|
["<F10>"],
|
||||||
|
["<F11>"],
|
||||||
|
["<F12>"],
|
||||||
|
["<NUM_LOCK>"],
|
||||||
|
["0"],
|
||||||
|
["1"],
|
||||||
|
["2"],
|
||||||
|
["3"],
|
||||||
|
["4"],
|
||||||
|
["5"],
|
||||||
|
["6"],
|
||||||
|
["7"],
|
||||||
|
["8"],
|
||||||
|
["9"],
|
||||||
|
["/"],
|
||||||
|
["*"],
|
||||||
|
["-"],
|
||||||
|
["+"],
|
||||||
|
["."],
|
||||||
|
["."],
|
||||||
|
["\n"],
|
||||||
|
["="],
|
||||||
|
["("],
|
||||||
|
[")"],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
[undefined],
|
||||||
|
["<:CIRCLE:>"]
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user