diff --git a/assets/tvdos/bin/less.js b/assets/tvdos/bin/less.js index c74d8da..25b1b6d 100644 --- a/assets/tvdos/bin/less.js +++ b/assets/tvdos/bin/less.js @@ -22,23 +22,28 @@ if (!fileOpened) { } let scroll = 0; +let pan = -1; let termW = con.getmaxyx()[1]; let termH = con.getmaxyx()[0] - 1; let buf = ""; let fileContent = filesystem.readAll(_G.shell.getCurrentDrive()); let key = -1; +let panSize = termW >> 1; // initialise some helper variables let lineToBytes = [0]; +let maxPan = 0; +let maxPanCur = 0; for (let i = 0; i < fileContent.length; i++) { let char = fileContent.charCodeAt(i); + maxPanCur += 1; if (char == 10 || char == 13) { lineToBytes.push(i + 1); + if (maxPanCur > maxPan) maxPan = maxPanCur; + maxPanCur = 0; } } -serial.println(lineToBytes); - let startAddr = -1; let paintCur = 0; let cy = 1; @@ -49,19 +54,21 @@ let repaint = function() { con.move(1,1); con.clear(); startAddr = lineToBytes[scroll]; - cy = 1; cx = 1; paintCur = 0; + cy = 1; cx = -pan; paintCur = 0; while (cy <= termH) { char = fileContent.charCodeAt(startAddr + paintCur); if (isNaN(char)) break; if (cy <= termH) { - con.move(cy, cx); - if (char != 10 && char != 13) - con.addch(char); + if (cx >= 0 && cx < termW) { + con.move(cy, cx); + if (char != 10 && char != 13) + con.addch(char); + } cx += 1; } if (char == 10 || char == 13) { cy += 1; - cx = 1; + cx = -pan; } paintCur += 1; } @@ -84,6 +91,14 @@ while (true) { scroll += 1; repaint(); } + /*left*/else if (key == 21 && pan > 0) { + pan -= panSize; + repaint(); + } + /*right*/else if (key == 22 && pan < maxPan - termW) { + pan += panSize; + repaint(); + } } con.move(termH + 1, 1);