From d3a9db3aff54ea485f409eaaef3d8f56ad77f0dc Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Mon, 5 Oct 2020 11:00:05 -0700 Subject: 6958 --- html/304screen.subx.html | 545 ++++++++++++++++++++++++++--------------------- 1 file changed, 304 insertions(+), 241 deletions(-) (limited to 'html/304screen.subx.html') diff --git a/html/304screen.subx.html b/html/304screen.subx.html index 665f3a91..7a756daf 100644 --- a/html/304screen.subx.html +++ b/html/304screen.subx.html @@ -15,10 +15,10 @@ body { font-size:12pt; font-family: monospace; color: #000000; background-color: a { color:inherit; } * { font-size:12pt; font-size: 1em; } .subxComment { color: #005faf; } -.subxFunction { color: #af5f00; text-decoration: underline; } .LineNr { } -.subxS1Comment { color: #0000af; } .SpecialChar { color: #d70000; } +.subxS1Comment { color: #0000af; } +.subxFunction { color: #af5f00; text-decoration: underline; } .Constant { color: #008787; } .subxMinorFunction { color: #875f5f; } --> @@ -69,7 +69,7 @@ if ('onhashchange' in window) { 11 (flush Stdout) 12 (flush Stderr) 13 # switch to second screen buffer - 14 (write 1 Esc) + 14 (write 1 Esc) 15 (write 1 "[?1049h") 16 # 17 (clear-real-screen) @@ -84,7 +84,7 @@ if ('onhashchange' in window) { 26 55/push-ebp 27 89/<- %ebp 4/r32/esp 28 # switch to first screen buffer - 29 (write 1 Esc) + 29 (write 1 Esc) 30 (write 1 "[?1049l") 31 $enable-screen-type-mode:end: 32 # . epilogue @@ -102,7 +102,7 @@ if ('onhashchange' in window) { 44 56/push-esi 45 57/push-edi 46 # - 47 (_maybe-open-terminal) + 47 (_maybe-open-terminal) 48 # var window-size-info/esi: (addr winsize) 49 # winsize is a type from the Linux kernel. We don't care how large it is. 50 81 5/subop/subtract %esp 0x40/imm32 @@ -110,7 +110,7 @@ if ('onhashchange' in window) { 52 # ioctl(*Terminal-file-descriptor, TIOCGWINSZ, window-size-info) 53 89/<- %edx 6/r32/esi 54 b9/copy-to-ecx 0x5413/imm32/TIOCGWINSZ - 55 8b/-> *Terminal-file-descriptor 3/r32/ebx + 55 8b/-> *Terminal-file-descriptor 3/r32/ebx 56 e8/call syscall_ioctl/disp32 57 # some bitworking to extract 2 16-bit shorts 58 8b/-> *esi 0/r32/eax @@ -135,9 +135,9 @@ if ('onhashchange' in window) { 77 55/push-ebp 78 89/<- %ebp 4/r32/esp 79 # - 80 (write 1 Esc) + 80 (write 1 Esc) 81 (write 1 "[H") - 82 (write 1 Esc) + 82 (write 1 Esc) 83 (write 1 "[2J") 84 $clear-real-screen:end: 85 # . epilogue @@ -159,7 +159,7 @@ if ('onhashchange' in window) { 101 68/push 0/imm32/write 102 89/<- %ecx 4/r32/esp 103 # construct directive in buf -104 (write %ecx Esc) +104 (write %ecx Esc) 105 (write %ecx "[") 106 (write-int32-decimal %ecx *(ebp+8)) 107 (write %ecx ";") @@ -189,267 +189,330 @@ if ('onhashchange' in window) { 131 5d/pop-to-ebp 132 c3/return 133 -134 print-stream-to-real-screen: # s: (addr stream byte) +134 print-slice-to-real-screen: # s: (addr slice) 135 # . prologue 136 55/push-ebp 137 89/<- %ebp 4/r32/esp 138 # -139 (write-stream-data Stdout *(ebp+8)) +139 (write-slice-buffered Stdout *(ebp+8)) 140 (flush Stdout) -141 $print-stream-to-real-screen:end: +141 $print-slice-to-real-screen:end: 142 # . epilogue 143 89/<- %esp 5/r32/ebp 144 5d/pop-to-ebp 145 c3/return 146 -147 # print a grapheme in utf-8 (only up to 4 bytes so far) -148 print-grapheme-to-real-screen: # c: grapheme -149 # . prologue -150 55/push-ebp -151 89/<- %ebp 4/r32/esp -152 # . save registers -153 50/push-eax -154 # var curr/eax: byte = 0 -155 b8/copy-to-eax 0/imm32 -156 # curr = *(ebp+8) -157 8a/byte-> *(ebp+8) 0/r32/al -158 # if (curr == 0) return -159 3d/compare-eax-and 0/imm32 -160 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 -161 # -162 (print-byte-to-real-screen %eax) -163 # curr = *(ebp+9) -164 8a/byte-> *(ebp+9) 0/r32/al -165 # if (curr == 0) return -166 3d/compare-eax-and 0/imm32 -167 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 -168 # -169 (print-byte-to-real-screen %eax) -170 # curr = *(ebp+10) -171 8a/byte-> *(ebp+0xa) 0/r32/al -172 # if (curr == 0) return -173 3d/compare-eax-and 0/imm32 -174 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 -175 # -176 (print-byte-to-real-screen %eax) -177 # curr = *(ebp+11) -178 8a/byte-> *(ebp+0xb) 0/r32/al -179 # if (curr == 0) return -180 3d/compare-eax-and 0/imm32 -181 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 -182 # -183 (print-byte-to-real-screen %eax) -184 $print-grapheme-to-real-screen:end: -185 # . restore registers -186 58/pop-to-eax -187 # . epilogue -188 89/<- %esp 5/r32/ebp -189 5d/pop-to-ebp -190 c3/return -191 -192 print-byte-to-real-screen: # c: byte -193 # . prologue -194 55/push-ebp -195 89/<- %ebp 4/r32/esp -196 # . save registers -197 51/push-ecx -198 # var s/ecx: (addr array byte) -199 ff 6/subop/push *(ebp+8) -200 68/push 1/imm32/size -201 89/<- %ecx 4/r32/esp -202 (write 1 %ecx) -203 $print-byte-to-real-screen:end: -204 # . reclaim locals -205 81 0/subop/add %esp 8/imm32 -206 # . restore registers -207 59/pop-to-ecx -208 # . epilogue -209 89/<- %esp 5/r32/ebp -210 5d/pop-to-ebp -211 c3/return -212 -213 print-int32-hex-to-real-screen: # n: int -214 # . prologue -215 55/push-ebp -216 89/<- %ebp 4/r32/esp -217 # -218 (write-int32-hex-buffered Stdout *(ebp+8)) -219 (flush Stdout) -220 $print-int32-hex-to-real-screen:end: +147 print-stream-to-real-screen: # s: (addr stream byte) +148 # . prologue +149 55/push-ebp +150 89/<- %ebp 4/r32/esp +151 # +152 (write-stream-data Stdout *(ebp+8)) +153 (flush Stdout) +154 $print-stream-to-real-screen:end: +155 # . epilogue +156 89/<- %esp 5/r32/ebp +157 5d/pop-to-ebp +158 c3/return +159 +160 # print a grapheme in utf-8 (only up to 4 bytes so far) +161 print-grapheme-to-real-screen: # c: grapheme +162 # . prologue +163 55/push-ebp +164 89/<- %ebp 4/r32/esp +165 # . save registers +166 50/push-eax +167 # var curr/eax: byte = 0 +168 b8/copy-to-eax 0/imm32 +169 # curr = *(ebp+8) +170 8a/byte-> *(ebp+8) 0/r32/al +171 # if (curr == 0) return +172 3d/compare-eax-and 0/imm32 +173 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 +174 # +175 (print-byte-to-real-screen %eax) +176 # curr = *(ebp+9) +177 8a/byte-> *(ebp+9) 0/r32/al +178 # if (curr == 0) return +179 3d/compare-eax-and 0/imm32 +180 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 +181 # +182 (print-byte-to-real-screen %eax) +183 # curr = *(ebp+10) +184 8a/byte-> *(ebp+0xa) 0/r32/al +185 # if (curr == 0) return +186 3d/compare-eax-and 0/imm32 +187 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 +188 # +189 (print-byte-to-real-screen %eax) +190 # curr = *(ebp+11) +191 8a/byte-> *(ebp+0xb) 0/r32/al +192 # if (curr == 0) return +193 3d/compare-eax-and 0/imm32 +194 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 +195 # +196 (print-byte-to-real-screen %eax) +197 $print-grapheme-to-real-screen:end: +198 # . restore registers +199 58/pop-to-eax +200 # . epilogue +201 89/<- %esp 5/r32/ebp +202 5d/pop-to-ebp +203 c3/return +204 +205 print-byte-to-real-screen: # c: byte +206 # . prologue +207 55/push-ebp +208 89/<- %ebp 4/r32/esp +209 # . save registers +210 51/push-ecx +211 # var s/ecx: (addr array byte) +212 ff 6/subop/push *(ebp+8) +213 68/push 1/imm32/size +214 89/<- %ecx 4/r32/esp +215 (write 1 %ecx) +216 $print-byte-to-real-screen:end: +217 # . reclaim locals +218 81 0/subop/add %esp 8/imm32 +219 # . restore registers +220 59/pop-to-ecx 221 # . epilogue 222 89/<- %esp 5/r32/ebp 223 5d/pop-to-ebp 224 c3/return 225 -226 reset-formatting-on-real-screen: +226 print-int32-hex-to-real-screen: # n: int 227 # . prologue 228 55/push-ebp 229 89/<- %ebp 4/r32/esp 230 # -231 (write 1 Esc) -232 (write 1 "(B") -233 (write 1 Esc) -234 (write 1 "[m") -235 $reset-formatting-on-real-screen:end: -236 # . epilogue -237 89/<- %esp 5/r32/ebp -238 5d/pop-to-ebp -239 c3/return -240 -241 start-color-on-real-screen: # fg: int, bg: int -242 # . prologue -243 55/push-ebp -244 89/<- %ebp 4/r32/esp -245 # . save registers -246 51/push-ecx -247 # var buf/ecx: (stream byte 32) -248 81 5/subop/subtract %esp 0x20/imm32 -249 68/push 0x20/imm32/size -250 68/push 0/imm32/read -251 68/push 0/imm32/write -252 89/<- %ecx 4/r32/esp -253 # construct directive in buf -254 # . set fg -255 (write %ecx Esc) -256 (write %ecx "[38;5;") -257 (write-int32-decimal %ecx *(ebp+8)) -258 (write %ecx "m") -259 # . set bg -260 (write %ecx Esc) -261 (write %ecx "[48;5;") -262 (write-int32-decimal %ecx *(ebp+0xc)) -263 (write %ecx "m") -264 # flush -265 (write-stream 2 %ecx) -266 $start-color-on-real-screen:end: -267 # . reclaim locals -268 81 0/subop/add %esp 0x2c/imm32 -269 # . restore registers -270 59/pop-to-ecx -271 # . epilogue -272 89/<- %esp 5/r32/ebp -273 5d/pop-to-ebp -274 c3/return -275 -276 start-bold-on-real-screen: -277 # . prologue -278 55/push-ebp -279 89/<- %ebp 4/r32/esp -280 # -281 (write 1 Esc) -282 (write 1 "[1m") -283 $start-bold-on-real-screen:end: +231 (write-int32-hex-buffered Stdout *(ebp+8)) +232 (flush Stdout) +233 $print-int32-hex-to-real-screen:end: +234 # . epilogue +235 89/<- %esp 5/r32/ebp +236 5d/pop-to-ebp +237 c3/return +238 +239 print-int32-hex-bits-to-real-screen: # n: int, bits: int +240 # . prologue +241 55/push-ebp +242 89/<- %ebp 4/r32/esp +243 # +244 (write-int32-hex-bits-buffered Stdout *(ebp+8) *(ebp+0xc) *(ebp+0x10)) +245 (flush Stdout) +246 $print-int32-hex-bits-to-real-screen:end: +247 # . epilogue +248 89/<- %esp 5/r32/ebp +249 5d/pop-to-ebp +250 c3/return +251 +252 print-int32-decimal-to-real-screen: # n: int +253 # . prologue +254 55/push-ebp +255 89/<- %ebp 4/r32/esp +256 # +257 (write-int32-decimal-buffered Stdout *(ebp+8)) +258 (flush Stdout) +259 $print-int32-decimal-to-real-screen:end: +260 # . epilogue +261 89/<- %esp 5/r32/ebp +262 5d/pop-to-ebp +263 c3/return +264 +265 write-int32-decimal-buffered: # f: (addr buffered-file), n: int +266 # . prologue +267 55/push-ebp +268 89/<- %ebp 4/r32/esp +269 # . save registers +270 51/push-ecx +271 # var ecx: (stream byte 16) +272 81 5/subop/subtract %esp 0x10/imm32 +273 68/push 0x10/imm32/size +274 68/push 0/imm32/read +275 68/push 0/imm32/write +276 89/<- %ecx 4/r32/esp +277 (write-int32-decimal %ecx *(ebp+0xc)) +278 (write-stream-data *(ebp+8) %ecx) +279 $write-int32-decimal-buffered:end: +280 # . reclaim locals +281 81 0/subop/add %esp 0x1c/imm32 +282 # . restore registers +283 59/pop-to-ecx 284 # . epilogue 285 89/<- %esp 5/r32/ebp 286 5d/pop-to-ebp 287 c3/return 288 -289 start-underline-on-real-screen: +289 reset-formatting-on-real-screen: 290 # . prologue 291 55/push-ebp 292 89/<- %ebp 4/r32/esp 293 # -294 (write 1 Esc) -295 (write 1 "[4m") -296 $start-underline-on-real-screen:end: -297 # . epilogue -298 89/<- %esp 5/r32/ebp -299 5d/pop-to-ebp -300 c3/return -301 -302 start-reverse-video-on-real-screen: -303 # . prologue -304 55/push-ebp -305 89/<- %ebp 4/r32/esp -306 # -307 (write 1 Esc) -308 (write 1 "[7m") -309 $start-reverse-video-on-real-screen:end: -310 # . epilogue -311 89/<- %esp 5/r32/ebp -312 5d/pop-to-ebp -313 c3/return -314 -315 # might require enabling blinking in your terminal program -316 start-blinking-on-real-screen: -317 # . prologue -318 55/push-ebp -319 89/<- %ebp 4/r32/esp -320 # -321 (write 1 Esc) -322 (write 1 "[5m") -323 $start-blinking-on-real-screen:end: -324 # . epilogue -325 89/<- %esp 5/r32/ebp -326 5d/pop-to-ebp -327 c3/return -328 -329 hide-cursor-on-real-screen: -330 # . prologue -331 55/push-ebp -332 89/<- %ebp 4/r32/esp -333 # -334 (write 1 Esc) -335 (write 1 "[?25l") -336 $hide-cursor-on-real-screen:end: -337 # . epilogue -338 89/<- %esp 5/r32/ebp -339 5d/pop-to-ebp -340 c3/return -341 -342 show-cursor-on-real-screen: -343 # . prologue -344 55/push-ebp -345 89/<- %ebp 4/r32/esp -346 # -347 (write 1 Esc) -348 (write 1 "[?12l") -349 (write 1 Esc) -350 (write 1 "[?25h") -351 $show-cursor-on-real-screen:end: -352 # . epilogue -353 89/<- %esp 5/r32/ebp -354 5d/pop-to-ebp -355 c3/return -356 -357 # This is a low-level detail; I don't think everything should be a file. -358 # -359 # Open "/dev/tty" if necessary and cache its file descriptor in Terminal-file-descriptor -360 # where later primitives can use it. -361 _maybe-open-terminal: -362 81 7/subop/compare *Terminal-file-descriptor -1/imm32 -363 75/jump-if-!= $_maybe-open-terminal:epilogue/disp8 -364 # . save registers -365 50/push-eax -366 51/push-ecx -367 53/push-ebx -368 # open("/dev/tty", O_RDWR) -369 bb/copy-to-ebx Terminal-filename/imm32 -370 b9/copy-to-ecx 2/imm32/O_RDWR -371 e8/call syscall_open/disp32 -372 89/<- *Terminal-file-descriptor 0/r32/eax -373 $_maybe-open-terminal:end: -374 # . restore registers -375 5b/pop-to-ebx -376 59/pop-to-ecx -377 58/pop-to-eax -378 $_maybe-open-terminal:epilogue: -379 c3/return -380 -381 == data -382 -383 Terminal-file-descriptor: # (addr int) -384 -1/imm32 -385 -386 Esc: # (addr array byte) -387 # size -388 1/imm32 -389 # data -390 0x1b +294 (write 1 Esc) +295 (write 1 "(B") +296 (write 1 Esc) +297 (write 1 "[m") +298 $reset-formatting-on-real-screen:end: +299 # . epilogue +300 89/<- %esp 5/r32/ebp +301 5d/pop-to-ebp +302 c3/return +303 +304 start-color-on-real-screen: # fg: int, bg: int +305 # . prologue +306 55/push-ebp +307 89/<- %ebp 4/r32/esp +308 # . save registers +309 51/push-ecx +310 # var buf/ecx: (stream byte 32) +311 81 5/subop/subtract %esp 0x20/imm32 +312 68/push 0x20/imm32/size +313 68/push 0/imm32/read +314 68/push 0/imm32/write +315 89/<- %ecx 4/r32/esp +316 # construct directive in buf +317 # . set fg +318 (write %ecx Esc) +319 (write %ecx "[38;5;") +320 (write-int32-decimal %ecx *(ebp+8)) +321 (write %ecx "m") +322 # . set bg +323 (write %ecx Esc) +324 (write %ecx "[48;5;") +325 (write-int32-decimal %ecx *(ebp+0xc)) +326 (write %ecx "m") +327 # flush +328 (write-stream 2 %ecx) +329 $start-color-on-real-screen:end: +330 # . reclaim locals +331 81 0/subop/add %esp 0x2c/imm32 +332 # . restore registers +333 59/pop-to-ecx +334 # . epilogue +335 89/<- %esp 5/r32/ebp +336 5d/pop-to-ebp +337 c3/return +338 +339 start-bold-on-real-screen: +340 # . prologue +341 55/push-ebp +342 89/<- %ebp 4/r32/esp +343 # +344 (write 1 Esc) +345 (write 1 "[1m") +346 $start-bold-on-real-screen:end: +347 # . epilogue +348 89/<- %esp 5/r32/ebp +349 5d/pop-to-ebp +350 c3/return +351 +352 start-underline-on-real-screen: +353 # . prologue +354 55/push-ebp +355 89/<- %ebp 4/r32/esp +356 # +357 (write 1 Esc) +358 (write 1 "[4m") +359 $start-underline-on-real-screen:end: +360 # . epilogue +361 89/<- %esp 5/r32/ebp +362 5d/pop-to-ebp +363 c3/return +364 +365 start-reverse-video-on-real-screen: +366 # . prologue +367 55/push-ebp +368 89/<- %ebp 4/r32/esp +369 # +370 (write 1 Esc) +371 (write 1 "[7m") +372 $start-reverse-video-on-real-screen:end: +373 # . epilogue +374 89/<- %esp 5/r32/ebp +375 5d/pop-to-ebp +376 c3/return +377 +378 # might require enabling blinking in your terminal program +379 start-blinking-on-real-screen: +380 # . prologue +381 55/push-ebp +382 89/<- %ebp 4/r32/esp +383 # +384 (write 1 Esc) +385 (write 1 "[5m") +386 $start-blinking-on-real-screen:end: +387 # . epilogue +388 89/<- %esp 5/r32/ebp +389 5d/pop-to-ebp +390 c3/return 391 -392 Terminal-filename: # (addr kernel-string) -393 # "/dev/null" -394 2f/slash 64/d 65/e 76/v 2f/slash 74/t 74/t 79/y 0/nul +392 hide-cursor-on-real-screen: +393 # . prologue +394 55/push-ebp +395 89/<- %ebp 4/r32/esp +396 # +397 (write 1 Esc) +398 (write 1 "[?25l") +399 $hide-cursor-on-real-screen:end: +400 # . epilogue +401 89/<- %esp 5/r32/ebp +402 5d/pop-to-ebp +403 c3/return +404 +405 show-cursor-on-real-screen: +406 # . prologue +407 55/push-ebp +408 89/<- %ebp 4/r32/esp +409 # +410 (write 1 Esc) +411 (write 1 "[?12l") +412 (write 1 Esc) +413 (write 1 "[?25h") +414 $show-cursor-on-real-screen:end: +415 # . epilogue +416 89/<- %esp 5/r32/ebp +417 5d/pop-to-ebp +418 c3/return +419 +420 # This is a low-level detail; I don't think everything should be a file. +421 # +422 # Open "/dev/tty" if necessary and cache its file descriptor in Terminal-file-descriptor +423 # where later primitives can use it. +424 _maybe-open-terminal: +425 81 7/subop/compare *Terminal-file-descriptor -1/imm32 +426 75/jump-if-!= $_maybe-open-terminal:epilogue/disp8 +427 # . save registers +428 50/push-eax +429 51/push-ecx +430 53/push-ebx +431 # open("/dev/tty", O_RDWR) +432 bb/copy-to-ebx Terminal-filename/imm32 +433 b9/copy-to-ecx 2/imm32/O_RDWR +434 e8/call syscall_open/disp32 +435 89/<- *Terminal-file-descriptor 0/r32/eax +436 $_maybe-open-terminal:end: +437 # . restore registers +438 5b/pop-to-ebx +439 59/pop-to-ecx +440 58/pop-to-eax +441 $_maybe-open-terminal:epilogue: +442 c3/return +443 +444 == data +445 +446 Terminal-file-descriptor: # (addr int) +447 -1/imm32 +448 +449 Esc: # (addr array byte) +450 # size +451 1/imm32 +452 # data +453 0x1b +454 +455 Terminal-filename: # (addr kernel-string) +456 # "/dev/null" +457 2f/slash 64/d 65/e 76/v 2f/slash 74/t 74/t 79/y 0/nul -- cgit 1.4.1-2-gfad0