This commit is contained in:
minjaesong
2020-10-30 11:45:22 +09:00
parent 4d4b698807
commit d8f7bb3973
8 changed files with 120 additions and 7 deletions

View File

@@ -1,5 +1,6 @@
// Boot script
var _TVDOS = {};
_TVDOS.VERSION = "1.0";
_TVDOS.DRIVES = {}; // Object where key-value pair is <drive-letter> : [serial-port, drive-number]
// actually figure out the drive letter association
// Drive A is always the device we're currently on

View File

@@ -1,10 +1,9 @@
const DOS_VERSION = "1.0";
let PROMPT_TEXT = ">";
const PROMPT_TEXT = ">";
let CURRENT_DRIVE = "A";
let shell_pwd = [""];
const welcome_text = "TSVM Disk Operating System, version " + DOS_VERSION;
const welcome_text = "TSVM Disk Operating System, version " + _TVDOS.VERSION;
function get_prompt_text() {
return CURRENT_DRIVE + ":\\" + shell_pwd.join("\\") + PROMPT_TEXT;

106
assets/tvdos/flsh.js Normal file
View File

@@ -0,0 +1,106 @@
let CURRENT_DRIVE = "A";
let shell_pwd = [""];
const welcome_text = "TSVM Disk Operating System, version " + _TVDOS.VERSION;
function print_prompt_text() {
// oh-my-zsh-like prompt
con.color_pair(239,161);
print(" "+CURRENT_DRIVE);
con.color_pair(161,253);
con.addch(16);
con.color_pair(0,253);
print("\\"+shell_pwd.join("\\"));
con.color_pair(253,255);
con.addch(16);
con.addch(32);
con.color_pair(239,255);
}
function greet() {
con.color_pair(0,253);
//print(welcome_text + " ".repeat(_fsh.scrwidth - welcome_text.length));
print(welcome_text + " ".repeat(80 - welcome_text.length));
con.color_pair(239,255);
println();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
con.clear();
greet();
let cmdHistory = []; // zeroth element is the oldest
let cmdHistoryScroll = 0; // 0 for outside-of-buffer, 1 for most recent
while (true) {
print_prompt_text();
let cmdbuf = "";
while (true) {
let key = con.getch();
// printable chars
if (key >= 32 && key <= 126) {
let s = String.fromCharCode(key);
cmdbuf += s;
print(s);
}
// backspace
else if (key === 8 && cmdbuf.length > 0) {
cmdbuf = cmdbuf.substring(0, cmdbuf.length - 1);
print(String.fromCharCode(key));
}
// enter
else if (key === 10 || key === 13) {
println();
try {
println("You entered: " + cmdbuf);
}
catch (e) {
println(e);
}
finally {
if (cmdbuf.trim().length > 0)
cmdHistory.push(cmdbuf);
cmdHistoryScroll = 0;
break;
}
}
// up arrow
else if (key === 19 && cmdHistory.length > 0 && cmdHistoryScroll < cmdHistory.length) {
cmdHistoryScroll += 1;
// back the cursor in order to type new cmd
let x = 0;
for (x = 0; x < cmdbuf.length; x++) print(String.fromCharCode(8));
cmdbuf = cmdHistory[cmdHistory.length - cmdHistoryScroll];
// re-type the new command
print(cmdbuf);
}
// down arrow
else if (key === 20) {
if (cmdHistoryScroll > 0) {
// back the cursor in order to type new cmd
let x = 0;
for (x = 0; x < cmdbuf.length; x++) print(String.fromCharCode(8));
cmdbuf = cmdHistory[cmdHistory.length - cmdHistoryScroll];
// re-type the new command
print(cmdbuf);
cmdHistoryScroll -= 1;
}
else {
// back the cursor in order to type new cmd
let x = 0;
for (x = 0; x < cmdbuf.length; x++) print(String.fromCharCode(8));
cmdbuf = "";
}
}
}
}