From 3c758ba82f7128eeba4cfe05e5527213c3c7860b Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 9 May 2023 21:40:17 +0900 Subject: [PATCH] encoding shenanigans --- assets/disk0/home/appexec.js | 9 +++++++-- assets/disk0/tvdos/TVDOS.SYS | 9 +++++++++ assets/disk0/tvdos/bin/gzip.js | 16 ++++++++++++++++ tsvm_core/src/net/torvald/tsvm/VM.kt | 3 ++- .../net/torvald/tsvm/peripheral/VMProgramRom.kt | 1 - .../net/torvald/terrarum/utils/JsonFetcher.kt | 9 ++++++++- 6 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 assets/disk0/tvdos/bin/gzip.js diff --git a/assets/disk0/home/appexec.js b/assets/disk0/home/appexec.js index de81eb5..64c5784 100644 --- a/assets/disk0/home/appexec.js +++ b/assets/disk0/home/appexec.js @@ -109,6 +109,11 @@ for (let i = 0; i < sectionTable.length - 1; i++) { } } -_G.shell.execute(PATH_MOUNT + "run.com") +let errorlevel = _G.shell.execute(PATH_MOUNT + "run.com") -// TODO delete PATH_MOUNT \ No newline at end of file +try { + files.open(PATH_MOUNT).remove() +} +catch (e) {} + +return errorlevel diff --git a/assets/disk0/tvdos/TVDOS.SYS b/assets/disk0/tvdos/TVDOS.SYS index 2c8043c..255d115 100644 --- a/assets/disk0/tvdos/TVDOS.SYS +++ b/assets/disk0/tvdos/TVDOS.SYS @@ -762,7 +762,16 @@ _TVDOS.DRV.FS.DEVTMP.mkFile = (fd) => { return true } _TVDOS.DRV.FS.DEVTMP.remove = (fd) => { + let path = _TVDOS.TMPFS[fd.path] delete _TVDOS.TMPFS[fd.path] + + // delete all the keys starting with _TVDOS.TMPFS[fd.path] + if (_TVDOS.DRV.FS.DEVTMP.isDirectory(fd)) { + Object.keys(_TVDOS.TMPFS).filter(it=>it.startsWith(path)).forEach(childs=>{ + delete _TVDOS.TMPFS[childs] + }) + } + return true } _TVDOS.DRV.FS.DEVTMP.exists = (fd) => (_TVDOS.TMPFS[fd.path] !== undefined) diff --git a/assets/disk0/tvdos/bin/gzip.js b/assets/disk0/tvdos/bin/gzip.js new file mode 100644 index 0000000..0ec220a --- /dev/null +++ b/assets/disk0/tvdos/bin/gzip.js @@ -0,0 +1,16 @@ +function printUsage() { + println(`Usage: gzip [/d /c] file +To compress a file, replacing it with a gzipped compressed version: + gzip file.ext +To decompress a file, replacing it with the original uncompressed version: + gzip /d file.ext.gz +To compress a file specifying the output filename: + gzip /c file.ext > compressed_file.ext.gz +To decompress a gzipped file specifying the output filename: + gzip /c /d file.ext.gz > uncompressed_file.ext`) +} + +if (exec_args[1] === undefined) { + printUsage() + return 0 +} \ No newline at end of file diff --git a/tsvm_core/src/net/torvald/tsvm/VM.kt b/tsvm_core/src/net/torvald/tsvm/VM.kt index 8dbcbe1..a8fa4a3 100644 --- a/tsvm_core/src/net/torvald/tsvm/VM.kt +++ b/tsvm_core/src/net/torvald/tsvm/VM.kt @@ -8,6 +8,7 @@ import net.torvald.tsvm.peripheral.PeriBase import net.torvald.tsvm.peripheral.VMProgramRom import java.io.InputStream import java.io.OutputStream +import java.nio.charset.Charset import java.util.* import kotlin.math.ceil @@ -156,7 +157,7 @@ class VM( companion object { - val CHARSET = Charsets.ISO_8859_1 + val CHARSET = Charset.forName("iso-8859-1") // no cp437 because i dunno val MMIO_SIZE = 128.kB() val HW_RESERVE_SIZE = 1024.kB() diff --git a/tsvm_core/src/net/torvald/tsvm/peripheral/VMProgramRom.kt b/tsvm_core/src/net/torvald/tsvm/peripheral/VMProgramRom.kt index 54b1bc5..37a3a8a 100644 --- a/tsvm_core/src/net/torvald/tsvm/peripheral/VMProgramRom.kt +++ b/tsvm_core/src/net/torvald/tsvm/peripheral/VMProgramRom.kt @@ -48,4 +48,3 @@ object PipBios : VMProgramRom(File("./assets/bios/pipboot.rom")) object PipROM : VMProgramRom(File("./assets/bios/pipcode.bas")) object TerranBASICreleaseBios : VMProgramRom(java.util.Base64.getDecoder().decode("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")) - diff --git a/tsvm_executable/src/net/torvald/terrarum/utils/JsonFetcher.kt b/tsvm_executable/src/net/torvald/terrarum/utils/JsonFetcher.kt index c7b6919..463e019 100644 --- a/tsvm_executable/src/net/torvald/terrarum/utils/JsonFetcher.kt +++ b/tsvm_executable/src/net/torvald/terrarum/utils/JsonFetcher.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.utils import com.badlogic.gdx.utils.JsonReader import com.badlogic.gdx.utils.JsonValue +import java.lang.NullPointerException /** * Created by minjaesong on 2016-02-15. @@ -36,7 +37,13 @@ object JsonFetcher { throw Error("[JsonFetcher] jsonString is null!") } - return JsonReader().parse(jsonString.toString()) + try { + return JsonReader().parse(jsonString.toString()) + } + catch (e: NullPointerException) { + System.err.println("[JsonFetcher] NullPointerException while processing ${jsonFile.path}") + throw e + } } @Throws(java.io.IOException::class)