From d409be9b29b4bbfdf10fa26620fa6abbe45a87da Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Tue, 20 Oct 2020 23:06:24 -0700 Subject: 7088 --- html/apps/tile/main.mu.html | 170 ++++++++++++++++++++++++-------------------- 1 file changed, 94 insertions(+), 76 deletions(-) (limited to 'html/apps/tile/main.mu.html') diff --git a/html/apps/tile/main.mu.html b/html/apps/tile/main.mu.html index 8fbd435b..7440bd07 100644 --- a/html/apps/tile/main.mu.html +++ b/html/apps/tile/main.mu.html @@ -14,6 +14,7 @@ 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; } +.CommentedCode { color: #8a8a8a; } .muComment { color: #005faf; } .LineNr { } .SpecialChar { color: #d70000; } @@ -78,7 +79,7 @@ if ('onhashchange' in window) { 20 compare tmp2, 0 # false 21 { 22 break-if-= - 23 interactive + 23 interactive 24 exit-status <- copy 0 25 break $main-body 26 } @@ -87,84 +88,101 @@ if ('onhashchange' in window) { 29 compare tmp2, 0 # false 30 { 31 break-if-= - 32 repl + 32 repl 33 exit-status <- copy 0 34 break $main-body 35 } - 36 } - 37 # otherwise error message - 38 print-string-to-real-screen "usage:\n" - 39 print-string-to-real-screen " to run tests: tile test\n" - 40 print-string-to-real-screen " full-screen mode: tile screen\n" - 41 print-string-to-real-screen " regular REPL: tile type\n" - 42 exit-status <- copy 1 - 43 } - 44 } - 45 - 46 fn interactive { - 47 enable-screen-grid-mode - 48 enable-keyboard-immediate-mode - 49 var env-storage: environment - 50 var env/esi: (addr environment) <- address env-storage - 51 initialize-environment env - 52 draw-screen env - 53 { - 54 var key/eax: grapheme <- read-key-from-real-keyboard - 55 compare key, 0x71 # 'q' - 56 break-if-= - 57 process env, key - 58 render env - 59 loop - 60 } - 61 enable-keyboard-type-mode - 62 enable-screen-type-mode - 63 } - 64 - 65 fn repl { - 66 enable-keyboard-immediate-mode - 67 var env-storage: environment - 68 var env/esi: (addr environment) <- address env-storage - 69 initialize-environment env - 70 var stack-storage: value-stack - 71 var stack/edi: (addr value-stack) <- address stack-storage - 72 initialize-value-stack stack, 0x10 - 73 print-string-to-real-screen "> " - 74 $repl:loop: { - 75 var key/eax: grapheme <- read-key-from-real-keyboard - 76 print-grapheme-to-real-screen key - 77 compare key, 4 # ctrl-d - 78 break-if-= - 79 compare key, 0xa # newline - 80 { - 81 break-if-!= - 82 evaluate-environment env, stack - 83 var empty?/eax: boolean <- value-stack-empty? stack - 84 { - 85 compare empty?, 0 # false - 86 break-if-!= - 87 var result/eax: int <- pop-int-from-value-stack stack - 88 print-int32-decimal-to-real-screen result - 89 print-string-to-real-screen "\n" - 90 } - 91 # clear line - 92 var cursor-word-ah/ecx: (addr handle word) <- get env, cursor-word - 93 var program-ah/eax: (addr handle program) <- get env, program - 94 var _program/eax: (addr program) <- lookup *program-ah - 95 var program/esi: (addr program) <- copy _program - 96 var sandbox-ah/esi: (addr handle sandbox) <- get program, sandboxes - 97 var sandbox/eax: (addr sandbox) <- lookup *sandbox-ah - 98 var line-ah/eax: (addr handle line) <- get sandbox, data - 99 var _line/eax: (addr line) <- lookup *line-ah -100 var line/esi: (addr line) <- copy _line -101 initialize-line line, cursor-word-ah -102 print-string-to-real-screen "> " -103 loop $repl:loop -104 } -105 process env, key -106 loop -107 } -108 enable-keyboard-type-mode -109 } + 36 # if single arg is 'test' ... + 37 tmp2 <- string-equal? *tmp, "test2" + 38 compare tmp2, 0 # false + 39 { + 40 break-if-= + 41 test + 42 exit-status <- copy 0 + 43 break $main-body + 44 } + 45 } + 46 # otherwise error message + 47 print-string-to-real-screen "usage:\n" + 48 print-string-to-real-screen " to run tests: tile test\n" + 49 print-string-to-real-screen " full-screen mode: tile screen\n" + 50 print-string-to-real-screen " regular REPL: tile type\n" + 51 exit-status <- copy 1 + 52 } + 53 } + 54 + 55 fn interactive { + 56 enable-screen-grid-mode + 57 enable-keyboard-immediate-mode + 58 var env-storage: environment + 59 var env/esi: (addr environment) <- address env-storage + 60 initialize-environment env + 61 draw-screen env + 62 { + 63 var key/eax: grapheme <- read-key-from-real-keyboard + 64 compare key, 0x11 # 'ctrl-q' + 65 break-if-= + 66 process env, key + 67 render env + 68 loop + 69 } + 70 enable-keyboard-type-mode + 71 enable-screen-type-mode + 72 } + 73 + 74 fn test { + 75 var env-storage: environment + 76 var env/esi: (addr environment) <- address env-storage + 77 initialize-environment-with-fake-screen env, 5, 0xa + 78 var g/eax: grapheme <- copy 0x31 # '1' + 79 process env, g + 80 g <- copy 1 # 'ctrl-a' + 81 process env, g + 82 #? render env + 83 } + 84 + 85 fn repl { + 86 { + 87 # prompt + 88 var line-storage: (stream byte 0x100) + 89 var line/ecx: (addr stream byte) <- address line-storage + 90 print-string-to-real-screen "> " + 91 # read + 92 clear-stream line + 93 read-line-from-real-keyboard line + 94 var done?/eax: boolean <- stream-empty? line + 95 compare done?, 0 # false + 96 break-if-!= + 97 # parse + 98 var env-storage: environment + 99 var env/esi: (addr environment) <- address env-storage +100 initialize-environment env +101 { +102 var done?/eax: boolean <- stream-empty? line +103 compare done?, 0 # false +104 break-if-!= +105 var g/eax: grapheme <- read-grapheme line +106 process env, g +107 loop +108 } +109 # eval +110 var stack-storage: value-stack +111 var stack/edi: (addr value-stack) <- address stack-storage +112 initialize-value-stack stack, 0x10 +113 evaluate-environment env, stack +114 # print +115 var empty?/eax: boolean <- value-stack-empty? stack +116 { +117 compare empty?, 0 # false +118 break-if-!= +119 var result/eax: int <- pop-int-from-value-stack stack +120 print-int32-decimal-to-real-screen result +121 print-string-to-real-screen "\n" +122 } +123 # +124 loop +125 } +126 } -- cgit 1.4.1-2-gfad0