command.js: fixing bad path syntax on shell.execute

This commit is contained in:
minjaesong
2020-11-06 09:58:03 +09:00
parent 541e8245bf
commit 0000311e07
5 changed files with 61 additions and 9 deletions

View File

@@ -46,6 +46,16 @@ if (!String.prototype.startsWith) {
}
});
}
if (!String.prototype.endsWith) {
Object.defineProperty(String.prototype, 'endsWith', {
value: function(search, this_len) {
if (this_len === undefined || this_len > this.length) {
this_len = this.length;
}
return this.substring(this_len - search.length, this_len) === search;
}
});
}
if (!Array.prototype.filter){
Array.prototype.filter = function(func, thisArg) {
'use strict';

View File

@@ -13,11 +13,11 @@ _TVDOS.getPath = function() {
};
// initial values
_TVDOS.variables = {
DOSDIR: "\\tvdos\\",
DOSDIR: "\\tvdos",
LANG: "EN",
PATH: "\\tvdos\\bin\\",
PATH: "\\tvdos\\bin",
PATHEXT: ".com;.bat;.js",
HELPPATH: "\\tvdos\\help\\",
HELPPATH: "\\tvdos\\help",
OS_NAME: "Terrarum Virtual DOS",
OS_VERSION: _TVDOS.VERSION
};

View File

@@ -5,6 +5,8 @@ let shell_pwd = [""];
let goInteractive = false;
let goFancy = false;
let DEBUG_PRINT = true;
const welcome_text = "TSVM Disk Operating System, version " + _TVDOS.VERSION;
function print_prompt_text() {
@@ -36,6 +38,18 @@ function greet() {
println(welcome_text);
}
function trimStartRevSlash(s) {
let cnt = 0;
while (cnt < s.length) {
let chr = s[cnt];
if (chr != '\\') break;
cnt += 1;
}
return s.substring(cnt);
}
let shell = {};
// example input: echo "the string" > subdir\test.txt
@@ -199,6 +213,7 @@ shell.execute = function(line) {
let fileExists = false;
let searchDir = (cmd.startsWith("\\")) ? [""] : ["\\"+shell_pwd.join("\\")].concat(_TVDOS.getPath());
let pathExt = [];
// fill pathExt using %PATHEXT% but also capitalise them
if (cmd.split(".")[1] === undefined)
@@ -209,7 +224,13 @@ shell.execute = function(line) {
searchLoop:
for (let i = 0; i < searchDir.length; i++) {
for (let j = 0; j < pathExt.length; j++) {
let path = (searchDir[i] + cmd + pathExt[j]).substring(1); // without substring, this will always prepend revslash
let search = searchDir[i]; if (!search.endsWith('\\')) search += '\\';
let path = trimStartRevSlash(search + cmd + pathExt[j]);
if (DEBUG_PRINT) {
serial.println("[command.js > shell.execute] file search path: "+path);
}
if (filesystem.open(CURRENT_DRIVE, path, "R")) {
fileExists = true;
break searchLoop;

View File

@@ -15,14 +15,14 @@ import java.io.InputStream
import java.io.OutputStream
import kotlin.experimental.and
class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert: Boolean = true) : GlassTty(Companion.TEXT_ROWS, Companion.TEXT_COLS), PeriBase {
open class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert: Boolean = true) : GlassTty(Companion.TEXT_ROWS, Companion.TEXT_COLS), PeriBase {
override fun getVM(): VM {
return vm
}
internal val framebuffer = Pixmap(WIDTH, HEIGHT, Pixmap.Format.Alpha)
private var rendertex = Texture(1, 1, Pixmap.Format.RGBA8888)
protected var rendertex = Texture(1, 1, Pixmap.Format.RGBA8888)
internal val paletteOfFloats = FloatArray(1024) {
val rgba = DEFAULT_PALETTE[it / 4]
val channel = it % 4
@@ -32,10 +32,10 @@ class GraphicsAdapter(val vm: VM, val lcdMode: Boolean = false, lcdInvert: Boole
private val faketex: Texture
internal val spriteAndTextArea = UnsafeHelper.allocate(10660L)
private val unusedArea = ByteArray(92)
protected val unusedArea = ByteArray(92)
private val paletteShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT, if (lcdMode && !lcdInvert) DRAW_SHADER_FRAG_LCD_NOINV else if (lcdMode) DRAW_SHADER_FRAG_LCD else DRAW_SHADER_FRAG)
private val textShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT, if (lcdMode && !lcdInvert) TEXT_TILING_SHADER_LCD_NOINV else if (lcdMode) TEXT_TILING_SHADER_LCD else TEXT_TILING_SHADER)
protected val paletteShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT, if (lcdMode && !lcdInvert) DRAW_SHADER_FRAG_LCD_NOINV else if (lcdMode) DRAW_SHADER_FRAG_LCD else DRAW_SHADER_FRAG)
protected val textShader = AppLoader.loadShaderInline(DRAW_SHADER_VERT, if (lcdMode && !lcdInvert) TEXT_TILING_SHADER_LCD_NOINV else if (lcdMode) TEXT_TILING_SHADER_LCD else TEXT_TILING_SHADER)
override var blinkCursor = true
override var ttyRawMode = false

View File

@@ -0,0 +1,21 @@
package net.torvald.tsvm.peripheral
import net.torvald.tsvm.VM
class TexticsAdapter(vm: VM, lcdMode: Boolean = false, lcdInvert: Boolean = true) : GraphicsAdapter(vm, lcdMode, lcdInvert) {
override fun peek(addr: Long): Byte? {
return when (addr) {
in 0 until 250880 -> (-1).toByte()
else -> super.peek(addr)
}
}
override fun poke(addr: Long, byte: Byte) {
when (addr) {
in 0 until 250880 -> { /*do nothing*/ }
else -> super.poke(addr, byte)
}
}
}