From 7fe1ced7406912d92f71ee57e2434f7de254cab2 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 6 Apr 2021 11:52:43 +0900 Subject: [PATCH] text editor mockup --- assets/disk0/tvdos/bin/edit.js | 78 +++++++++++++++++++ .../tsvm/peripheral/CharacterLCDdisplay.kt | 2 +- .../tsvm/peripheral/GraphicsAdapter.kt | 4 +- 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 assets/disk0/tvdos/bin/edit.js diff --git a/assets/disk0/tvdos/bin/edit.js b/assets/disk0/tvdos/bin/edit.js new file mode 100644 index 0000000..a580522 --- /dev/null +++ b/assets/disk0/tvdos/bin/edit.js @@ -0,0 +1,78 @@ +let scroll = 0; +let textbuffer = [""]; +let cursorRow = 0; +let cursorCol = 0; + +let windowSize = con.getmaxyx(); +let paintWidth = windowSize[1]-4; +let paintHeight = windowSize[0]-2; +let scrollPeek = Math.ceil((paintHeight / 7)); + +const menubarItems = ["File","Edit","View"]; +const COL_TEXT = 252; +const COL_BACK = 255; +const COL_SUPERTEXT = 239; +const COL_DIMTEXT = 249; +const COL_LNUMBACK = 18; +const COL_LNUMFORE = 252; + + +function reset_status() { + scroll = 0; + textbuffer = [""]; + cursorRow = 0; + cursorCol = 0; +} + +function redraw() { + windowSize = con.getmaxyx(); + scrollPeek = Math.ceil((paintHeight / 6)); + paintWidth = windowSize[1]-4; + paintHeight = windowSize[0]-2; + + con.clear(); + + // print menubar + con.color_pair(COL_BACK, COL_TEXT); + menubarItems.forEach(v=>{ + print(" "); + for (let i = 0; i < v.length; i++) { + let c = v.charCodeAt(i); + if (c >= 65 && c <= 90) + con.color_pair(COL_TEXT, COL_BACK); + else + con.color_pair(COL_BACK, COL_TEXT); + + con.addch(c); con.curs_right(); + } + print(" "); + }); + + con.color_pair(COL_BACK, COL_TEXT); + let cursPos = con.getyx(); + for (let i = cursPos[1]; i <= windowSize[1]; i++) { + con.mvaddch(1, i, 0); + } + + // print line number + con.color_pair(COL_LNUMFORE, COL_LNUMBACK); + for (let y = 2; y < windowSize[0]; y++) { + con.move(y,1); + let lnum = scroll+y-1; + if (lnum >= 1000) print(`${lnum}`); + else if (lnum >= 100) print(`${lnum} `); + else if (lnum >= 10) print(` ${lnum} `); + else print(` ${lnum} `); + } + + // print status line + con.color_pair(COL_BACK, COL_TEXT); + let statusMsg = ` Ln ${cursorRow+1} Col ${cursorCol+1}`; + for (let x = 1; x <= windowSize[1]; x++) { + con.mvaddch(windowSize[0], x, ""+statusMsg.charCodeAt(x-1)); + } + + con.move(2,5); con.color_pair(COL_TEXT, COL_BACK); +} + +redraw(); \ No newline at end of file diff --git a/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt b/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt index 372cd48..746d964 100644 --- a/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt +++ b/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt @@ -8,7 +8,7 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.tsvm.VM class CharacterLCDdisplay(vm: VM) : GraphicsAdapter(vm, AdapterConfig( - "pmlcd_inverted", 240, 64, 40, 8, 254, 255, 262144L, "lcd2.png", 0.7f, TEXT_TILING_SHADER_LCD, DRAW_SHADER_FRAG_LCD, 2f + "pmlcd_inverted", 240, 64, 40, 8, 252, 255, 262144L, "lcd2.png", 0.7f, TEXT_TILING_SHADER_LCD, DRAW_SHADER_FRAG_LCD, 2f ) ) { diff --git a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt index a1504f9..f2b9560 100644 --- a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt +++ b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt @@ -1250,11 +1250,11 @@ void main() { val DEFAULT_CONFIG_COLOR_CRT = AdapterConfig( "crt_color", - 560, 448, 80, 32, 254, 255, 256.kB(), "FontROM7x14.png", 0.32f, TEXT_TILING_SHADER_COLOUR + 560, 448, 80, 32, 252, 255, 256.kB(), "FontROM7x14.png", 0.32f, TEXT_TILING_SHADER_COLOUR ) val DEFAULT_CONFIG_PMLCD = AdapterConfig( "pmlcd_inverted", - 560, 448, 80, 32, 254, 255, 256.kB(), "FontROM7x14.png", 0.64f, TEXT_TILING_SHADER_LCD, DRAW_SHADER_FRAG_LCD + 560, 448, 80, 32, 252, 255, 256.kB(), "FontROM7x14.png", 0.64f, TEXT_TILING_SHADER_LCD, DRAW_SHADER_FRAG_LCD )