From 39234e89e13269e2154dd2e39088ac6b7f940ffd Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sat, 30 May 2020 08:44:46 -0700 Subject: [PATCH] 6447 --- apps/browse.mu | 8 +- apps/ex2.2.mu | 9 ++ apps/ex3.mu | 9 ++ apps/tui.mu | 6 +- html/apps/browse.mu.html | 236 ++++++++++++++++++++------------------- html/apps/ex2.2.mu.html | 34 ++++-- html/apps/ex3.mu.html | 36 +++--- html/apps/tui.mu.html | 62 +++++----- 8 files changed, 229 insertions(+), 171 deletions(-) diff --git a/apps/browse.mu b/apps/browse.mu index 5a490848..c50a619f 100644 --- a/apps/browse.mu +++ b/apps/browse.mu @@ -1,4 +1,10 @@ -# render text with word-wrap +# Render text with word-wrap. +# +# To run: +# $ ./translate_mu apps/browse.mu +# $ ./a.elf __text_file__ +# +# Press 'q' to quit. All other keys scroll down. fn main args: (addr array (addr array byte)) -> exit-status/ebx: int { var filename/eax: (addr array byte) <- first-arg args diff --git a/apps/ex2.2.mu b/apps/ex2.2.mu index dce1fe3f..b177e770 100644 --- a/apps/ex2.2.mu +++ b/apps/ex2.2.mu @@ -1,3 +1,12 @@ +# Increment a number, and return the result in the exit code. +# +# To run: +# $ ./translate_mu apps/ex2.2.mu +# $ ./a.elf +# Expected result: +# $ echo $? +# 7 + fn main -> result/ebx: int { result <- foo } diff --git a/apps/ex3.mu b/apps/ex3.mu index aaef1175..efe6a317 100644 --- a/apps/ex3.mu +++ b/apps/ex3.mu @@ -1,3 +1,12 @@ +# Add the first 10 numbers, and return the result in the exit code. +# +# To run: +# $ ./translate_mu apps/browse.mu +# $ ./a.elf +# Expected result: +# $ echo $? +# 55 + fn main -> result/ebx: int { result <- copy 0 var i/eax: int <- copy 1 diff --git a/apps/tui.mu b/apps/tui.mu index e2f97609..07d3147e 100644 --- a/apps/tui.mu +++ b/apps/tui.mu @@ -1,4 +1,8 @@ -# test some primitives for text-mode +# Test some primitives for text-mode. +# +# To run: +# $ ./translate_mu apps/tui.mu +# $ ./a.elf fn main -> exit-status/ebx: int { var nrows/eax: int <- copy 0 diff --git a/html/apps/browse.mu.html b/html/apps/browse.mu.html index 491d5920..a6fcc4cd 100644 --- a/html/apps/browse.mu.html +++ b/html/apps/browse.mu.html @@ -56,123 +56,129 @@ if ('onhashchange' in window) { https://github.com/akkartik/mu/blob/master/apps/browse.mu
-  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
-  6   enable-screen-grid-mode
-  7   var nrows/eax: int <- copy 0
-  8   var ncols/ecx: int <- copy 0
-  9   nrows, ncols <- screen-size
- 10   enable-keyboard-immediate-mode
- 11   {
- 12     render file, nrows, ncols
- 13     var key/eax: byte <- read-key
- 14     compare key, 0x71  # 'q'
- 15     loop-if-!=
- 16   }
- 17   enable-keyboard-type-mode
- 18   enable-screen-type-mode
- 19   exit-status <- copy 0
- 20 }
- 21 
- 22 # decide how to lay out pages on screen
- 23 fn render in: (addr buffered-file), nrows: int, ncols: int {
- 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.
- 28   #
- 29   # hardcoded parameters:
- 30   #   top-margin
- 31   #   page-margin
- 32   #   text-width
- 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
+  1 # Render text with word-wrap.
+  2 #
+  3 # To run:
+  4 #   $ ./translate_mu apps/browse.mu
+  5 #   $ ./a.elf __text_file__
+  6 #
+  7 # Press 'q' to quit. All other keys scroll down.
+  8 
+  9 fn main args: (addr array (addr array byte)) -> exit-status/ebx: int {
+ 10   var filename/eax: (addr array byte) <- first-arg args
+ 11   var file/esi: (addr buffered-file) <- load-file filename
+ 12   enable-screen-grid-mode
+ 13   var nrows/eax: int <- copy 0
+ 14   var ncols/ecx: int <- copy 0
+ 15   nrows, ncols <- screen-size
+ 16   enable-keyboard-immediate-mode
+ 17   {
+ 18     render file, nrows, ncols
+ 19     var key/eax: byte <- read-key
+ 20     compare key, 0x71  # 'q'
+ 21     loop-if-!=
+ 22   }
+ 23   enable-keyboard-type-mode
+ 24   enable-screen-type-mode
+ 25   exit-status <- copy 0
+ 26 }
+ 27 
+ 28 # decide how to lay out pages on screen
+ 29 fn render in: (addr buffered-file), nrows: int, ncols: int {
+ 30   # Fit multiple pages on screen on separate columns, each wide enough to read
+ 31   # comfortably.
+ 32   # Pages are separated horizontally by a 'page margin'. Among other reasons,
+ 33   # this allows the odd line to bleed out on the right if necessary.
+ 34   #
+ 35   # hardcoded parameters:
+ 36   #   top-margin
+ 37   #   page-margin
+ 38   #   text-width
+ 39   var toprow/eax: int <- copy 2  # top-margin
+ 40   var botrow/ecx: int <- copy nrows
+ 41   var leftcol/edx: int <- copy 5  # page-margin
+ 42   var rightcol/ebx: int <- copy leftcol
+ 43   rightcol <- add 0x40  # text-width = 64 characters
+ 44   {
+ 45     compare rightcol, ncols
+ 46     break-if->=
+ 47     render-page in, toprow, leftcol, botrow, rightcol
+ 48     leftcol <- copy rightcol
+ 49     leftcol <- add 5  # page-margin
+ 50     rightcol <- copy leftcol
+ 51     rightcol <- add 0x40  # text-width
+ 52     loop
+ 53   }
+ 54 }
+ 55 
+ 56 fn render-page in: (addr buffered-file), toprow: int, leftcol: int, botrow: int, rightcol: int {
+ 57   clear toprow, leftcol, botrow, rightcol
+ 58   # render screen rows
+ 59   var row/ecx: int <- copy toprow
+ 60 $line-loop:  {
+ 61     compare row, botrow
+ 62     break-if->=
+ 63     var col/edx: int <- copy leftcol
+ 64     move-cursor row, col
+ 65     {
+ 66       compare col, rightcol
+ 67       break-if->=
+ 68       var c/eax: byte <- read-byte-buffered in
+ 69       compare c, 0xffffffff  # EOF marker
+ 70       break-if-= $line-loop
+ 71       compare c, 0xa  # newline
+ 72       break-if-=  # no need to print newlines
+ 73       print-byte c
+ 74       col <- increment
+ 75       loop
+ 76     }
+ 77     row <- increment
+ 78     loop
+ 79   }
+ 80 }
+ 81 
+ 82 fn clear toprow: int, leftcol: int, botrow: int, rightcol: int {
+ 83   var row/ecx: int <- copy toprow
+ 84   {
+ 85     compare row, botrow
+ 86     break-if->=
+ 87     var col/edx: int <- copy leftcol
+ 88     move-cursor row, col
+ 89     {
+ 90       compare col, rightcol
+ 91       break-if->=
+ 92       print-string " "
+ 93       col <- increment
+ 94       loop
+ 95     }
+ 96     row <- increment
+ 97     loop
+ 98   }
  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 }
+101 fn first-arg args-on-stack: (addr array (addr array byte)) -> out/eax: (addr array byte) {
+102   var args/eax: (addr array (addr array byte)) <- copy args-on-stack
+103   var result/eax: (addr addr array byte) <- index args, 1
+104   out <- copy *result
+105 }
+106 
+107 fn load-file filename: (addr array byte) -> out/esi: (addr buffered-file) {
+108   var result: (handle buffered-file)
+109   {
+110     var tmp1/eax: (addr handle buffered-file) <- address result
+111     open filename, 0, tmp1
+112   }
+113   var tmp2/eax: (addr buffered-file) <- lookup result
+114   out <- copy tmp2
+115 }
+116 
+117 fn dump in: (addr buffered-file) {
+118   var c/eax: byte <- read-byte-buffered in
+119   compare c, 0xffffffff  # EOF marker
+120   break-if-=
+121   print-byte c
+122   loop
+123 }
 
diff --git a/html/apps/ex2.2.mu.html b/html/apps/ex2.2.mu.html index d76222e3..455305a6 100644 --- a/html/apps/ex2.2.mu.html +++ b/html/apps/ex2.2.mu.html @@ -14,10 +14,11 @@ pre { white-space: pre-wrap; font-family: monospace; color: #000000; background- body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; } a { color:inherit; } * { font-size:12pt; font-size: 1em; } -.muFunction { color: #af5f00; text-decoration: underline; } .LineNr { } +.muFunction { color: #af5f00; text-decoration: underline; } +.SpecialChar { color: #d70000; } +.Comment { color: #005faf; } .Constant { color: #008787; } -.Special { color: #ff6060; } .Delimiter { color: #c000c0; } .PreProc { color: #c000c0; } --> @@ -55,16 +56,25 @@ if ('onhashchange' in window) { https://github.com/akkartik/mu/blob/master/apps/ex2.2.mu
- 1 fn main -> result/ebx: int {
- 2   result <- foo
- 3 }
- 4 
- 5 fn foo -> result/ebx: int {
- 6   var n: int
- 7   copy-to n, 3
- 8   increment n
- 9   result <- copy n
-10 }
+ 1 # Increment a number, and return the result in the exit code.
+ 2 #
+ 3 # To run:
+ 4 #   $ ./translate_mu apps/ex2.2.mu
+ 5 #   $ ./a.elf
+ 6 # Expected result:
+ 7 #   $ echo $?
+ 8 #   7
+ 9 
+10 fn main -> result/ebx: int {
+11   result <- foo
+12 }
+13 
+14 fn foo -> result/ebx: int {
+15   var n: int
+16   copy-to n, 3
+17   increment n
+18   result <- copy n
+19 }
 
diff --git a/html/apps/ex3.mu.html b/html/apps/ex3.mu.html index eb4de019..3c68aed1 100644 --- a/html/apps/ex3.mu.html +++ b/html/apps/ex3.mu.html @@ -14,10 +14,11 @@ pre { white-space: pre-wrap; font-family: monospace; color: #000000; background- body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; } a { color:inherit; } * { font-size:12pt; font-size: 1em; } -.muFunction { color: #af5f00; text-decoration: underline; } .LineNr { } +.muFunction { color: #af5f00; text-decoration: underline; } +.SpecialChar { color: #d70000; } +.Comment { color: #005faf; } .Constant { color: #008787; } -.Special { color: #ff6060; } .Delimiter { color: #c000c0; } .PreProc { color: #c000c0; } --> @@ -55,17 +56,26 @@ if ('onhashchange' in window) { https://github.com/akkartik/mu/blob/master/apps/ex3.mu
- 1 fn main -> result/ebx: int {
- 2   result <- copy 0
- 3   var i/eax: int <- copy 1
- 4   {
- 5     compare i, 0xa
- 6     break-if->
- 7     result <- add i
- 8     i <- increment
- 9     loop
-10   }
-11 }
+ 1 # Add the first 10 numbers, and return the result in the exit code.
+ 2 #
+ 3 # To run:
+ 4 #   $ ./translate_mu apps/browse.mu
+ 5 #   $ ./a.elf
+ 6 # Expected result:
+ 7 #   $ echo $?
+ 8 #   55
+ 9 
+10 fn main -> result/ebx: int {
+11   result <- copy 0
+12   var i/eax: int <- copy 1
+13   {
+14     compare i, 0xa
+15     break-if->
+16     result <- add i
+17     i <- increment
+18     loop
+19   }
+20 }
 
diff --git a/html/apps/tui.mu.html b/html/apps/tui.mu.html index ed8a1b39..e53f52b4 100644 --- a/html/apps/tui.mu.html +++ b/html/apps/tui.mu.html @@ -56,35 +56,39 @@ if ('onhashchange' in window) { https://github.com/akkartik/mu/blob/master/apps/tui.mu
- 1 # test some primitives for text-mode 
- 2 
- 3 fn main -> exit-status/ebx: int {
- 4   var nrows/eax: int <- copy 0
- 5   var ncols/ecx: int <- copy 0
- 6   nrows, ncols <- screen-size
- 7   enable-screen-grid-mode
- 8   move-cursor 5, 35
- 9   start-color 1, 0x7a
-10   start-blinking
-11   print-string "Hello world!"
-12   reset-formatting
-13   move-cursor 6, 35
-14   print-string "tty dimensions: "
-15   print-int32-to-screen nrows
-16   print-string " rows, "
-17   print-int32-to-screen ncols
-18   print-string " rows\n"
-19 
-20   print-string "press a key to see its code: "
-21   enable-keyboard-immediate-mode
-22   var x/eax: byte <- read-key
-23   enable-keyboard-type-mode
-24   enable-screen-type-mode
-25   print-string "You pressed "
-26   print-int32-to-screen x
-27   print-string "\n"
-28   exit-status <- copy 0
-29 }
+ 1 # Test some primitives for text-mode.
+ 2 #
+ 3 # To run:
+ 4 #   $ ./translate_mu apps/tui.mu
+ 5 #   $ ./a.elf
+ 6 
+ 7 fn main -> exit-status/ebx: int {
+ 8   var nrows/eax: int <- copy 0
+ 9   var ncols/ecx: int <- copy 0
+10   nrows, ncols <- screen-size
+11   enable-screen-grid-mode
+12   move-cursor 5, 35
+13   start-color 1, 0x7a
+14   start-blinking
+15   print-string "Hello world!"
+16   reset-formatting
+17   move-cursor 6, 35
+18   print-string "tty dimensions: "
+19   print-int32-to-screen nrows
+20   print-string " rows, "
+21   print-int32-to-screen ncols
+22   print-string " rows\n"
+23 
+24   print-string "press a key to see its code: "
+25   enable-keyboard-immediate-mode
+26   var x/eax: byte <- read-key
+27   enable-keyboard-type-mode
+28   enable-screen-type-mode
+29   print-string "You pressed "
+30   print-int32-to-screen x
+31   print-string "\n"
+32   exit-status <- copy 0
+33 }