From 7bdd25fa397219c0952878fcd6f9bfb1e4f194ce Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sat, 30 May 2020 01:13:04 -0700 Subject: 6446 --- html/apps/browse.mu.html | 181 +++++++++++++++++++++++------------------------ 1 file changed, 88 insertions(+), 93 deletions(-) (limited to 'html/apps') diff --git a/html/apps/browse.mu.html b/html/apps/browse.mu.html index cc49d082..491d5920 100644 --- a/html/apps/browse.mu.html +++ b/html/apps/browse.mu.html @@ -59,8 +59,8 @@ if ('onhashchange' in window) { 1 # render text with word-wrap 2 3 fn main args: (addr array (addr array byte)) -> exit-status/ebx: int { - 4 var filename/eax: (addr array byte) <- first-arg args - 5 var file/esi: (addr buffered-file) <- load-file filename + 4 var filename/eax: (addr array byte) <- first-arg args + 5 var file/esi: (addr buffered-file) <- load-file filename 6 enable-screen-grid-mode 7 var nrows/eax: int <- copy 0 8 var ncols/ecx: int <- copy 0 @@ -79,7 +79,7 @@ if ('onhashchange' in window) { 21 22 # decide how to lay out pages on screen 23 fn render in: (addr buffered-file), nrows: int, ncols: int { - 24 # Fit n pages on screen on separate columns, each wide enough to read + 24 # Fit multiple pages on screen on separate columns, each wide enough to read 25 # comfortably. 26 # Pages are separated horizontally by a 'page margin'. Among other reasons, 27 # this allows the odd line to bleed out on the right if necessary. @@ -88,96 +88,91 @@ if ('onhashchange' in window) { 30 # top-margin 31 # page-margin 32 # text-width - 33 var npages/eax: int <- num-pages ncols, 0x40, 5 # text-width, page-margin - 34 var toprow/eax: int <- copy 2 # top-margin - 35 var botrow/ecx: int <- copy nrows - 36 var leftcol/edx: int <- copy 5 # page-margin - 37 var rightcol/ebx: int <- copy leftcol - 38 rightcol <- add 0x40 # text-width = 64 characters - 39 { - 40 compare rightcol, ncols - 41 break-if->= - 42 render-page in, toprow, leftcol, botrow, rightcol - 43 leftcol <- copy rightcol - 44 leftcol <- add 5 # page-margin - 45 rightcol <- copy leftcol - 46 rightcol <- add 0x40 # text-width - 47 loop - 48 } - 49 } - 50 - 51 fn num-pages ncols: int, text-width: int, page-margin: int -> result/eax: int { - 52 result <- copy 3 - 53 } - 54 - 55 fn render-page in: (addr buffered-file), toprow: int, leftcol: int, botrow: int, rightcol: int { - 56 clear toprow, leftcol, botrow, rightcol - 57 # render screen rows - 58 var row/ecx: int <- copy toprow - 59 $line-loop: { - 60 compare row, botrow - 61 break-if->= - 62 var col/edx: int <- copy leftcol - 63 move-cursor row, col - 64 { - 65 compare col, rightcol - 66 break-if->= - 67 var c/eax: byte <- read-byte-buffered in - 68 compare c, 0xffffffff # EOF marker - 69 break-if-= $line-loop - 70 compare c, 0xa # newline - 71 break-if-= # no need to print newlines - 72 print-byte c - 73 col <- increment - 74 loop - 75 } - 76 row <- increment - 77 loop - 78 } - 79 } - 80 - 81 fn clear toprow: int, leftcol: int, botrow: int, rightcol: int { - 82 var row/ecx: int <- copy toprow - 83 { - 84 compare row, botrow - 85 break-if->= - 86 var col/edx: int <- copy leftcol - 87 move-cursor row, col - 88 { - 89 compare col, rightcol - 90 break-if->= - 91 print-string " " - 92 col <- increment - 93 loop - 94 } - 95 row <- increment - 96 loop - 97 } - 98 } - 99 -100 fn first-arg args-on-stack: (addr array (addr array byte)) -> out/eax: (addr array byte) { -101 var args/eax: (addr array (addr array byte)) <- copy args-on-stack -102 var result/eax: (addr addr array byte) <- index args, 1 -103 out <- copy *result -104 } -105 -106 fn load-file filename: (addr array byte) -> out/esi: (addr buffered-file) { -107 var result: (handle buffered-file) -108 { -109 var tmp1/eax: (addr handle buffered-file) <- address result -110 open filename, 0, tmp1 -111 } -112 var tmp2/eax: (addr buffered-file) <- lookup result -113 out <- copy tmp2 -114 } -115 -116 fn dump in: (addr buffered-file) { -117 var c/eax: byte <- read-byte-buffered in -118 compare c, 0xffffffff # EOF marker -119 break-if-= -120 print-byte c -121 loop -122 } + 33 var toprow/eax: int <- copy 2 # top-margin + 34 var botrow/ecx: int <- copy nrows + 35 var leftcol/edx: int <- copy 5 # page-margin + 36 var rightcol/ebx: int <- copy leftcol + 37 rightcol <- add 0x40 # text-width = 64 characters + 38 { + 39 compare rightcol, ncols + 40 break-if->= + 41 render-page in, toprow, leftcol, botrow, rightcol + 42 leftcol <- copy rightcol + 43 leftcol <- add 5 # page-margin + 44 rightcol <- copy leftcol + 45 rightcol <- add 0x40 # text-width + 46 loop + 47 } + 48 } + 49 + 50 fn render-page in: (addr buffered-file), toprow: int, leftcol: int, botrow: int, rightcol: int { + 51 clear toprow, leftcol, botrow, rightcol + 52 # render screen rows + 53 var row/ecx: int <- copy toprow + 54 $line-loop: { + 55 compare row, botrow + 56 break-if->= + 57 var col/edx: int <- copy leftcol + 58 move-cursor row, col + 59 { + 60 compare col, rightcol + 61 break-if->= + 62 var c/eax: byte <- read-byte-buffered in + 63 compare c, 0xffffffff # EOF marker + 64 break-if-= $line-loop + 65 compare c, 0xa # newline + 66 break-if-= # no need to print newlines + 67 print-byte c + 68 col <- increment + 69 loop + 70 } + 71 row <- increment + 72 loop + 73 } + 74 } + 75 + 76 fn clear toprow: int, leftcol: int, botrow: int, rightcol: int { + 77 var row/ecx: int <- copy toprow + 78 { + 79 compare row, botrow + 80 break-if->= + 81 var col/edx: int <- copy leftcol + 82 move-cursor row, col + 83 { + 84 compare col, rightcol + 85 break-if->= + 86 print-string " " + 87 col <- increment + 88 loop + 89 } + 90 row <- increment + 91 loop + 92 } + 93 } + 94 + 95 fn first-arg args-on-stack: (addr array (addr array byte)) -> out/eax: (addr array byte) { + 96 var args/eax: (addr array (addr array byte)) <- copy args-on-stack + 97 var result/eax: (addr addr array byte) <- index args, 1 + 98 out <- copy *result + 99 } +100 +101 fn load-file filename: (addr array byte) -> out/esi: (addr buffered-file) { +102 var result: (handle buffered-file) +103 { +104 var tmp1/eax: (addr handle buffered-file) <- address result +105 open filename, 0, tmp1 +106 } +107 var tmp2/eax: (addr buffered-file) <- lookup result +108 out <- copy tmp2 +109 } +110 +111 fn dump in: (addr buffered-file) { +112 var c/eax: byte <- read-byte-buffered in +113 compare c, 0xffffffff # EOF marker +114 break-if-= +115 print-byte c +116 loop +117 } -- cgit 1.4.1-2-gfad0