diff --git a/html/304screen.subx.html b/html/304screen.subx.html
index 90335a0d..665f3a91 100644
--- a/html/304screen.subx.html
+++ b/html/304screen.subx.html
@@ -69,7 +69,7 @@ if ('onhashchange' in window) {
11 (flush Stdout)
12 (flush Stderr)
13
- 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
- 29 (write 1 Esc)
+ 29 (write 1 Esc)
30 (write 1 "[?1049l")
31 $enable-screen-type-mode:end:
32
@@ -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
49
50 81 5/subop/subtract %esp 0x40/imm32
@@ -110,7 +110,7 @@ if ('onhashchange' in window) {
52
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
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
@@ -159,7 +159,7 @@ if ('onhashchange' in window) {
101 68/push 0/imm32/write
102 89/<- %ecx 4/r32/esp
103
-104 (write %ecx Esc)
+104 (write %ecx Esc)
105 (write %ecx "[")
106 (write-int32-decimal %ecx *(ebp+8))
107 (write %ecx ";")
@@ -189,254 +189,267 @@ if ('onhashchange' in window) {
131 5d/pop-to-ebp
132 c3/return
133
-134
-135 print-grapheme-to-real-screen:
-136
-137 55/push-ebp
-138 89/<- %ebp 4/r32/esp
-139
-140 50/push-eax
-141
-142 b8/copy-to-eax 0/imm32
-143
-144 8a/byte-> *(ebp+8) 0/r32/al
-145
-146 3d/compare-eax-and 0/imm32
-147 74/jump-if-= $print-grapheme-to-real-screen:end/disp8
-148
-149 (print-byte-to-real-screen %eax)
-150
-151 8a/byte-> *(ebp+9) 0/r32/al
-152
-153 3d/compare-eax-and 0/imm32
-154 74/jump-if-= $print-grapheme-to-real-screen:end/disp8
-155
-156 (print-byte-to-real-screen %eax)
-157
-158 8a/byte-> *(ebp+0xa) 0/r32/al
-159
-160 3d/compare-eax-and 0/imm32
-161 74/jump-if-= $print-grapheme-to-real-screen:end/disp8
-162
-163 (print-byte-to-real-screen %eax)
-164
-165 8a/byte-> *(ebp+0xb) 0/r32/al
-166
-167 3d/compare-eax-and 0/imm32
-168 74/jump-if-= $print-grapheme-to-real-screen:end/disp8
-169
-170 (print-byte-to-real-screen %eax)
-171 $print-grapheme-to-real-screen:end:
-172
-173 58/pop-to-eax
-174
-175 89/<- %esp 5/r32/ebp
-176 5d/pop-to-ebp
-177 c3/return
-178
-179 print-byte-to-real-screen:
-180
-181 55/push-ebp
-182 89/<- %ebp 4/r32/esp
-183
-184 51/push-ecx
-185
-186 ff 6/subop/push *(ebp+8)
-187 68/push 1/imm32/size
-188 89/<- %ecx 4/r32/esp
-189 (write 1 %ecx)
-190 $print-byte-to-real-screen:end:
-191
-192 81 0/subop/add %esp 8/imm32
-193
-194 59/pop-to-ecx
-195
-196 89/<- %esp 5/r32/ebp
-197 5d/pop-to-ebp
-198 c3/return
-199
-200 print-int32-hex-to-real-screen:
-201
-202 55/push-ebp
-203 89/<- %ebp 4/r32/esp
-204
-205 (write-int32-hex-buffered Stdout *(ebp+8))
-206 (flush Stdout)
-207 $print-int32-hex-to-real-screen:end:
+134 print-stream-to-real-screen:
+135
+136 55/push-ebp
+137 89/<- %ebp 4/r32/esp
+138
+139 (write-stream-data Stdout *(ebp+8))
+140 (flush Stdout)
+141 $print-stream-to-real-screen:end:
+142
+143 89/<- %esp 5/r32/ebp
+144 5d/pop-to-ebp
+145 c3/return
+146
+147
+148 print-grapheme-to-real-screen:
+149
+150 55/push-ebp
+151 89/<- %ebp 4/r32/esp
+152
+153 50/push-eax
+154
+155 b8/copy-to-eax 0/imm32
+156
+157 8a/byte-> *(ebp+8) 0/r32/al
+158
+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
+164 8a/byte-> *(ebp+9) 0/r32/al
+165
+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
+171 8a/byte-> *(ebp+0xa) 0/r32/al
+172
+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
+178 8a/byte-> *(ebp+0xb) 0/r32/al
+179
+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
+186 58/pop-to-eax
+187
+188 89/<- %esp 5/r32/ebp
+189 5d/pop-to-ebp
+190 c3/return
+191
+192 print-byte-to-real-screen:
+193
+194 55/push-ebp
+195 89/<- %ebp 4/r32/esp
+196
+197 51/push-ecx
+198
+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
+205 81 0/subop/add %esp 8/imm32
+206
+207 59/pop-to-ecx
208
209 89/<- %esp 5/r32/ebp
210 5d/pop-to-ebp
211 c3/return
212
-213 reset-formatting-on-real-screen:
+213 print-int32-hex-to-real-screen:
214
215 55/push-ebp
216 89/<- %ebp 4/r32/esp
217
-218 (write 1 Esc)
-219 (write 1 "(B")
-220 (write 1 Esc)
-221 (write 1 "[m")
-222 $reset-formatting-on-real-screen:end:
-223
-224 89/<- %esp 5/r32/ebp
-225 5d/pop-to-ebp
-226 c3/return
-227
-228 start-color-on-real-screen:
-229
-230 55/push-ebp
-231 89/<- %ebp 4/r32/esp
-232
-233 51/push-ecx
-234
-235 81 5/subop/subtract %esp 0x20/imm32
-236 68/push 0x20/imm32/size
-237 68/push 0/imm32/read
-238 68/push 0/imm32/write
-239 89/<- %ecx 4/r32/esp
-240
-241
-242 (write %ecx Esc)
-243 (write %ecx "[38;5;")
-244 (write-int32-decimal %ecx *(ebp+8))
-245 (write %ecx "m")
-246
-247 (write %ecx Esc)
-248 (write %ecx "[48;5;")
-249 (write-int32-decimal %ecx *(ebp+0xc))
-250 (write %ecx "m")
-251
-252 (write-stream 2 %ecx)
-253 $start-color-on-real-screen:end:
-254
-255 81 0/subop/add %esp 0x2c/imm32
-256
-257 59/pop-to-ecx
-258
-259 89/<- %esp 5/r32/ebp
-260 5d/pop-to-ebp
-261 c3/return
-262
-263 start-bold-on-real-screen:
-264
-265 55/push-ebp
-266 89/<- %ebp 4/r32/esp
-267
-268 (write 1 Esc)
-269 (write 1 "[1m")
-270 $start-bold-on-real-screen:end:
+218 (write-int32-hex-buffered Stdout *(ebp+8))
+219 (flush Stdout)
+220 $print-int32-hex-to-real-screen:end:
+221
+222 89/<- %esp 5/r32/ebp
+223 5d/pop-to-ebp
+224 c3/return
+225
+226 reset-formatting-on-real-screen:
+227
+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
+237 89/<- %esp 5/r32/ebp
+238 5d/pop-to-ebp
+239 c3/return
+240
+241 start-color-on-real-screen:
+242
+243 55/push-ebp
+244 89/<- %ebp 4/r32/esp
+245
+246 51/push-ecx
+247
+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
+254
+255 (write %ecx Esc)
+256 (write %ecx "[38;5;")
+257 (write-int32-decimal %ecx *(ebp+8))
+258 (write %ecx "m")
+259
+260 (write %ecx Esc)
+261 (write %ecx "[48;5;")
+262 (write-int32-decimal %ecx *(ebp+0xc))
+263 (write %ecx "m")
+264
+265 (write-stream 2 %ecx)
+266 $start-color-on-real-screen:end:
+267
+268 81 0/subop/add %esp 0x2c/imm32
+269
+270 59/pop-to-ecx
271
272 89/<- %esp 5/r32/ebp
273 5d/pop-to-ebp
274 c3/return
275
-276 start-underline-on-real-screen:
+276 start-bold-on-real-screen:
277
278 55/push-ebp
279 89/<- %ebp 4/r32/esp
280
-281 (write 1 Esc)
-282 (write 1 "[4m")
-283 $start-underline-on-real-screen:end:
+281 (write 1 Esc)
+282 (write 1 "[1m")
+283 $start-bold-on-real-screen:end:
284
285 89/<- %esp 5/r32/ebp
286 5d/pop-to-ebp
287 c3/return
288
-289 start-reverse-video-on-real-screen:
+289 start-underline-on-real-screen:
290
291 55/push-ebp
292 89/<- %ebp 4/r32/esp
293
-294 (write 1 Esc)
-295 (write 1 "[7m")
-296 $start-reverse-video-on-real-screen:end:
+294 (write 1 Esc)
+295 (write 1 "[4m")
+296 $start-underline-on-real-screen:end:
297
298 89/<- %esp 5/r32/ebp
299 5d/pop-to-ebp
300 c3/return
301
-302
-303 start-blinking-on-real-screen:
-304
-305 55/push-ebp
-306 89/<- %ebp 4/r32/esp
-307
-308 (write 1 Esc)
-309 (write 1 "[5m")
-310 $start-blinking-on-real-screen:end:
-311
-312 89/<- %esp 5/r32/ebp
-313 5d/pop-to-ebp
-314 c3/return
-315
-316 hide-cursor-on-real-screen:
+302 start-reverse-video-on-real-screen:
+303
+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
+311 89/<- %esp 5/r32/ebp
+312 5d/pop-to-ebp
+313 c3/return
+314
+315
+316 start-blinking-on-real-screen:
317
318 55/push-ebp
319 89/<- %ebp 4/r32/esp
320
-321 (write 1 Esc)
-322 (write 1 "[?25l")
-323 $hide-cursor-on-real-screen:end:
+321 (write 1 Esc)
+322 (write 1 "[5m")
+323 $start-blinking-on-real-screen:end:
324
325 89/<- %esp 5/r32/ebp
326 5d/pop-to-ebp
327 c3/return
328
-329 show-cursor-on-real-screen:
+329 hide-cursor-on-real-screen:
330
331 55/push-ebp
332 89/<- %ebp 4/r32/esp
333
-334 (write 1 Esc)
-335 (write 1 "[?12l")
-336 (write 1 Esc)
-337 (write 1 "[?25h")
-338 $show-cursor-on-real-screen:end:
-339
-340 89/<- %esp 5/r32/ebp
-341 5d/pop-to-ebp
-342 c3/return
-343
-344
-345
-346
-347
-348 _maybe-open-terminal:
-349 81 7/subop/compare *Terminal-file-descriptor -1/imm32
-350 75/jump-if-!= $_maybe-open-terminal:epilogue/disp8
-351
-352 50/push-eax
-353 51/push-ecx
-354 53/push-ebx
-355
-356 bb/copy-to-ebx Terminal-filename/imm32
-357 b9/copy-to-ecx 2/imm32/O_RDWR
-358 e8/call syscall_open/disp32
-359 89/<- *Terminal-file-descriptor 0/r32/eax
-360 $_maybe-open-terminal:end:
-361
-362 5b/pop-to-ebx
-363 59/pop-to-ecx
-364 58/pop-to-eax
-365 $_maybe-open-terminal:epilogue:
-366 c3/return
-367
-368 == data
-369
-370 Terminal-file-descriptor:
-371 -1/imm32
-372
-373 Esc:
-374
-375 1/imm32
-376
-377 0x1b
-378
-379 Terminal-filename:
-380
-381 2f/slash 64/d 65/e 76/v 2f/slash 74/t 74/t 79/y 0/nul
+334 (write 1 Esc)
+335 (write 1 "[?25l")
+336 $hide-cursor-on-real-screen:end:
+337
+338 89/<- %esp 5/r32/ebp
+339 5d/pop-to-ebp
+340 c3/return
+341
+342 show-cursor-on-real-screen:
+343
+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
+353 89/<- %esp 5/r32/ebp
+354 5d/pop-to-ebp
+355 c3/return
+356
+357
+358
+359
+360
+361 _maybe-open-terminal:
+362 81 7/subop/compare *Terminal-file-descriptor -1/imm32
+363 75/jump-if-!= $_maybe-open-terminal:epilogue/disp8
+364
+365 50/push-eax
+366 51/push-ecx
+367 53/push-ebx
+368
+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
+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:
+384 -1/imm32
+385
+386 Esc:
+387
+388 1/imm32
+389
+390 0x1b
+391
+392 Terminal-filename:
+393
+394 2f/slash 64/d 65/e 76/v 2f/slash 74/t 74/t 79/y 0/nul