From 2c56af2d8f791902f5ff59754c0277eddeb27a3e Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Wed, 11 Nov 2020 23:43:04 -0800 Subject: 7227 --- html/apps/tile/main.mu.html | 129 +++++++++++++++++++++++++------------------- 1 file changed, 73 insertions(+), 56 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 745ba507..1629a012 100644 --- a/html/apps/tile/main.mu.html +++ b/html/apps/tile/main.mu.html @@ -85,7 +85,7 @@ if ('onhashchange' in window) { 26 compare tmp2, 0 # false 27 { 28 break-if-= - 29 repl + 29 repl 30 return 0 31 } 32 # if single arg is 'test' ... @@ -125,61 +125,78 @@ if ('onhashchange' in window) { 66 } 67 68 fn test { - 69 test-surface-pin-at-origin - 70 #? var env-storage: environment - 71 #? var env/esi: (addr environment) <- address env-storage - 72 #? initialize-environment-with-fake-screen env, 5, 0xa - 73 #? var g/eax: grapheme <- copy 0x22 # '"' - 74 #? process env, g - 75 #? g <- copy 0x61 # 'a' - 76 #? process env, g - 77 #? g <- copy 0x22 # '"' - 78 #? process env, g - 79 #? render env - 80 } - 81 - 82 fn repl { - 83 { - 84 # prompt - 85 print-string-to-real-screen "> " - 86 # read - 87 var line-storage: (stream byte 0x100) - 88 var line/ecx: (addr stream byte) <- address line-storage - 89 clear-stream line - 90 read-line-from-real-keyboard line - 91 var done?/eax: boolean <- stream-empty? line - 92 compare done?, 0 # false - 93 break-if-!= - 94 # parse - 95 var env-storage: environment - 96 var env/esi: (addr environment) <- address env-storage - 97 initialize-environment env - 98 { - 99 var done?/eax: boolean <- stream-empty? line -100 compare done?, 0 # false -101 break-if-!= -102 var g/eax: grapheme <- read-grapheme line -103 process env, g -104 loop -105 } -106 # eval -107 var stack-storage: value-stack -108 var stack/edi: (addr value-stack) <- address stack-storage -109 initialize-value-stack stack, 0x10 -110 evaluate-environment env, stack -111 # print -112 var empty?/eax: boolean <- value-stack-empty? stack -113 { -114 compare empty?, 0 # false -115 break-if-!= -116 var result/eax: int <- pop-int-from-value-stack stack -117 print-int32-decimal-to-real-screen result -118 print-string-to-real-screen "\n" -119 } -120 # -121 loop -122 } -123 } + 69 var env-storage: environment + 70 var env/esi: (addr environment) <- address env-storage + 71 initialize-environment-with-fake-screen env, 0x20, 0xa0 + 72 process-all env, "3 3 fake-screen =s" + 73 process env, 0xc # ctrl-l + 74 process-all env, "s 1 down 1 right" + 75 process env, 4 # ctrl-d: start defining function + 76 process-all env, "foo" + 77 process env, 0xa # newline: define function + 78 process env, 0x435b1b # right-arrow + 79 #? process env, 5 # ctrl-e: end of line + 80 print-string 0, "==\n" + 81 process env, 0xa # newline: expand + 82 render env + 83 } + 84 + 85 fn process-all env: (addr environment), cmds: (addr array byte) { + 86 var cmds-stream: (stream byte 0x100) + 87 var cmds-stream-a/esi: (addr stream byte) <- address cmds-stream + 88 write cmds-stream-a, cmds + 89 { + 90 var done?/eax: boolean <- stream-empty? cmds-stream-a + 91 compare done?, 0 # false + 92 break-if-!= + 93 var g/eax: grapheme <- read-grapheme cmds-stream-a + 94 process env, g + 95 loop + 96 } + 97 } + 98 + 99 fn repl { +100 { +101 # prompt +102 print-string-to-real-screen "> " +103 # read +104 var line-storage: (stream byte 0x100) +105 var line/ecx: (addr stream byte) <- address line-storage +106 clear-stream line +107 read-line-from-real-keyboard line +108 var done?/eax: boolean <- stream-empty? line +109 compare done?, 0 # false +110 break-if-!= +111 # parse +112 var env-storage: environment +113 var env/esi: (addr environment) <- address env-storage +114 initialize-environment env +115 { +116 var done?/eax: boolean <- stream-empty? line +117 compare done?, 0 # false +118 break-if-!= +119 var g/eax: grapheme <- read-grapheme line +120 process env, g +121 loop +122 } +123 # eval +124 var stack-storage: value-stack +125 var stack/edi: (addr value-stack) <- address stack-storage +126 initialize-value-stack stack, 0x10 +127 evaluate-environment env, stack +128 # print +129 var empty?/eax: boolean <- value-stack-empty? stack +130 { +131 compare empty?, 0 # false +132 break-if-!= +133 var result/eax: int <- pop-int-from-value-stack stack +134 print-int32-decimal-to-real-screen result +135 print-string-to-real-screen "\n" +136 } +137 # +138 loop +139 } +140 } -- cgit 1.4.1-2-gfad0