From 0000311e076d97784bd88c357467f07f74c43988 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 6 Nov 2020 09:58:03 +0900 Subject: [PATCH] command.js: fixing bad path syntax on shell.execute --- assets/JS_INIT.js | 10 ++++++++ assets/tvdos/TVDOS.SYS | 6 ++--- assets/tvdos/bin/command.js | 23 ++++++++++++++++++- .../tsvm/peripheral/GraphicsAdapter.kt | 10 ++++---- .../torvald/tsvm/peripheral/TexticsAdapter.kt | 21 +++++++++++++++++ 5 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 src/net/torvald/tsvm/peripheral/TexticsAdapter.kt diff --git a/assets/JS_INIT.js b/assets/JS_INIT.js index adb0a35..3bb6879 100644 --- a/assets/JS_INIT.js +++ b/assets/JS_INIT.js @@ -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'; diff --git a/assets/tvdos/TVDOS.SYS b/assets/tvdos/TVDOS.SYS index 2c1071c..b4600c6 100644 --- a/assets/tvdos/TVDOS.SYS +++ b/assets/tvdos/TVDOS.SYS @@ -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 }; diff --git a/assets/tvdos/bin/command.js b/assets/tvdos/bin/command.js index 7b0c119..4dce23f 100644 --- a/assets/tvdos/bin/command.js +++ b/assets/tvdos/bin/command.js @@ -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; diff --git a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt index 48624da..d415ad7 100644 --- a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt +++ b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt @@ -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 diff --git a/src/net/torvald/tsvm/peripheral/TexticsAdapter.kt b/src/net/torvald/tsvm/peripheral/TexticsAdapter.kt new file mode 100644 index 0000000..5c7325f --- /dev/null +++ b/src/net/torvald/tsvm/peripheral/TexticsAdapter.kt @@ -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) + } + } + +} \ No newline at end of file