about summary refs log tree commit diff stats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rwxr-xr-xapps/assortbin42953 -> 42761 bytes
-rw-r--r--apps/assort.subx24
-rwxr-xr-xapps/bracesbin42998 -> 42776 bytes
-rw-r--r--apps/braces.subx30
-rwxr-xr-xapps/callsbin47691 -> 47487 bytes
-rw-r--r--apps/calls.subx34
-rwxr-xr-xapps/crenshaw2-1bin42364 -> 42172 bytes
-rw-r--r--apps/crenshaw2-1.subx12
-rwxr-xr-xapps/crenshaw2-1bbin42923 -> 42719 bytes
-rw-r--r--apps/crenshaw2-1b.subx24
-rwxr-xr-xapps/dquotesbin46645 -> 46411 bytes
-rw-r--r--apps/dquotes.subx54
-rwxr-xr-xapps/factorialbin41371 -> 41191 bytes
-rwxr-xr-xapps/handlebin42269 -> 42089 bytes
-rwxr-xr-xapps/hexbin45319 -> 45007 bytes
-rw-r--r--apps/hex.subx134
-rwxr-xr-xapps/packbin55614 -> 55152 bytes
-rw-r--r--apps/pack.subx324
-rwxr-xr-xapps/sigilsbin55654 -> 55294 bytes
-rw-r--r--apps/sigils.subx190
-rwxr-xr-xapps/surveybin52210 -> 52000 bytes
-rw-r--r--apps/survey.subx106
-rwxr-xr-xapps/testsbin41738 -> 41558 bytes
23 files changed, 295 insertions, 637 deletions
diff --git a/apps/assort b/apps/assort
index e60a40a8..7e191241 100755
--- a/apps/assort
+++ b/apps/assort
Binary files differdiff --git a/apps/assort.subx b/apps/assort.subx
index 1e546f49..c423bc14 100644
--- a/apps/assort.subx
+++ b/apps/assort.subx
@@ -168,11 +168,9 @@ test-subx-assort:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -184,11 +182,9 @@ test-subx-assort:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -628,11 +624,9 @@ $read-segments:check-for-segment-header:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -690,11 +684,9 @@ $read-segments:check-for-segment-header:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
diff --git a/apps/braces b/apps/braces
index 40164153..ef17e643 100755
--- a/apps/braces
+++ b/apps/braces
Binary files differdiff --git a/apps/braces.subx b/apps/braces.subx
index 69e62c2c..aaae30e5 100644
--- a/apps/braces.subx
+++ b/apps/braces.subx
@@ -263,14 +263,8 @@ test-subx-braces-passes-most-words-through:
     # setup
     (clear-stream _test-input-stream)
     (clear-stream _test-output-stream)
-    # . clear-stream(_test-input-buffered-file+4)
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    (clear-stream %eax)
-    # . clear-stream(_test-output-buffered-file+4)
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    (clear-stream %eax)
+    (clear-stream _test-input-buffered-file->buffer)
+    (clear-stream _test-output-buffered-file->buffer)
     # test
     (write _test-input-stream "== abcd 0x1")
     (subx-braces _test-input-buffered-file _test-output-buffered-file)
@@ -306,14 +300,8 @@ test-subx-braces-1:
     # setup
     (clear-stream _test-input-stream)
     (clear-stream _test-output-stream)
-    # . clear-stream(_test-input-buffered-file+4)
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    (clear-stream %eax)
-    # . clear-stream(_test-output-buffered-file+4)
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    (clear-stream %eax)
+    (clear-stream _test-input-buffered-file->buffer)
+    (clear-stream _test-output-buffered-file->buffer)
     # test
     (write _test-input-stream "{\nab break/imm32\ncd loop/imm32\n}")
     (subx-braces _test-input-buffered-file _test-output-buffered-file)
@@ -353,14 +341,8 @@ test-subx-braces-2:
     # setup
     (clear-stream _test-input-stream)
     (clear-stream _test-output-stream)
-    # . clear-stream(_test-input-buffered-file+4)
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    (clear-stream %eax)
-    # . clear-stream(_test-output-buffered-file+4)
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    (clear-stream %eax)
+    (clear-stream _test-input-buffered-file->buffer)
+    (clear-stream _test-output-buffered-file->buffer)
     # test
     (write _test-input-stream "{\n{\nab break/imm32\n}\ncd loop/imm32\n}")
     (subx-braces _test-input-buffered-file _test-output-buffered-file)
diff --git a/apps/calls b/apps/calls
index 7cabc825..ddd0c5d4 100755
--- a/apps/calls
+++ b/apps/calls
Binary files differdiff --git a/apps/calls.subx b/apps/calls.subx
index a29c52f3..5a306dbc 100644
--- a/apps/calls.subx
+++ b/apps/calls.subx
@@ -280,19 +280,13 @@ $parse-line:check1:
 #?     e8/call write/disp32
 #?     # . . discard args
 #?     81 0/subop/add %esp 8/imm32
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax Stderr/imm32
-#?     05/add-to-eax 4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call clear-stream/disp32
 #?     # . . discard args
 #?     81 0/subop/add %esp 4/imm32
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . write-slice-buffered(Stderr, word-slice)
 #?     # . . push args
 #?     51/push-ecx
@@ -557,11 +551,9 @@ test-subx-calls-passes-most-lines-through:
     e8/call clear-stream/disp32
     # . . discard args
     81 0/subop/add %esp 4/imm32
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax _test-input-buffered-file/imm32
-    05/add-to-eax 4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call clear-stream/disp32
     # . . discard args
@@ -573,11 +565,9 @@ test-subx-calls-passes-most-lines-through:
     e8/call clear-stream/disp32
     # . . discard args
     81 0/subop/add %esp 4/imm32
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax _test-output-buffered-file/imm32
-    05/add-to-eax 4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call clear-stream/disp32
     # . . discard args
@@ -632,11 +622,9 @@ test-subx-calls-processes-calls:
     e8/call clear-stream/disp32
     # . . discard args
     81 0/subop/add %esp 4/imm32
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax _test-input-buffered-file/imm32
-    05/add-to-eax 4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call clear-stream/disp32
     # . . discard args
@@ -648,11 +636,9 @@ test-subx-calls-processes-calls:
     e8/call clear-stream/disp32
     # . . discard args
     81 0/subop/add %esp 4/imm32
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax _test-output-buffered-file/imm32
-    05/add-to-eax 4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call clear-stream/disp32
     # . . discard args
diff --git a/apps/crenshaw2-1 b/apps/crenshaw2-1
index ca629e9c..84ca1bd1 100755
--- a/apps/crenshaw2-1
+++ b/apps/crenshaw2-1
Binary files differdiff --git a/apps/crenshaw2-1.subx b/apps/crenshaw2-1.subx
index 3f075140..d081e290 100644
--- a/apps/crenshaw2-1.subx
+++ b/apps/crenshaw2-1.subx
@@ -306,11 +306,9 @@ test-get-num-reads-single-digit:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -397,11 +395,9 @@ test-get-num-aborts-on-non-digit-in-Look:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
diff --git a/apps/crenshaw2-1b b/apps/crenshaw2-1b
index dd1292ed..1ff41732 100755
--- a/apps/crenshaw2-1b
+++ b/apps/crenshaw2-1b
Binary files differdiff --git a/apps/crenshaw2-1b.subx b/apps/crenshaw2-1b.subx
index 11115b24..a784e858 100644
--- a/apps/crenshaw2-1b.subx
+++ b/apps/crenshaw2-1b.subx
@@ -324,11 +324,9 @@ test-get-num-reads-single-digit:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -415,11 +413,9 @@ test-get-num-aborts-on-non-digit-in-Look:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -500,11 +496,9 @@ test-get-num-reads-multiple-digits:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -591,11 +585,9 @@ test-get-num-reads-multiple-digits-followed-by-nondigit:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
diff --git a/apps/dquotes b/apps/dquotes
index 351742e6..2449a517 100755
--- a/apps/dquotes
+++ b/apps/dquotes
Binary files differdiff --git a/apps/dquotes.subx b/apps/dquotes.subx
index 7d7cf632..0f50f752 100644
--- a/apps/dquotes.subx
+++ b/apps/dquotes.subx
@@ -395,11 +395,9 @@ test-subx-dquotes-is-idempotent-by-default:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -411,11 +409,9 @@ test-subx-dquotes-is-idempotent-by-default:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -652,11 +648,9 @@ test-subx-dquotes-processes-string-literals:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -668,11 +662,9 @@ test-subx-dquotes-processes-string-literals:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1481,11 +1473,9 @@ test-emit-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1540,11 +1530,9 @@ test-emit-metadata-none:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1599,11 +1587,9 @@ test-emit-metadata-multiple:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1658,11 +1644,9 @@ test-emit-metadata-when-no-datum:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1719,11 +1703,9 @@ test-emit-metadata-in-string-literal:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
diff --git a/apps/factorial b/apps/factorial
index f23fdd0f..c84b0e4d 100755
--- a/apps/factorial
+++ b/apps/factorial
Binary files differdiff --git a/apps/handle b/apps/handle
index c0f4a4fb..8284fc05 100755
--- a/apps/handle
+++ b/apps/handle
Binary files differdiff --git a/apps/hex b/apps/hex
index eade5fa7..aed98e77 100755
--- a/apps/hex
+++ b/apps/hex
Binary files differdiff --git a/apps/hex.subx b/apps/hex.subx
index b3a98838..545d0f2b 100644
--- a/apps/hex.subx
+++ b/apps/hex.subx
@@ -216,11 +216,9 @@ test-convert-next-octet:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -232,11 +230,9 @@ test-convert-next-octet:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -318,11 +314,9 @@ test-convert-next-octet-handles-Eof:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -334,11 +328,9 @@ test-convert-next-octet-handles-Eof:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -412,11 +404,9 @@ test-convert-next-octet-aborts-on-single-hex-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -428,11 +418,9 @@ test-convert-next-octet-aborts-on-single-hex-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -585,11 +573,9 @@ test-scan-next-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -601,11 +587,9 @@ test-scan-next-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -687,11 +671,9 @@ test-scan-next-byte-skips-whitespace:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -703,11 +685,9 @@ test-scan-next-byte-skips-whitespace:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -789,11 +769,9 @@ test-scan-next-byte-skips-comment:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -805,11 +783,9 @@ test-scan-next-byte-skips-comment:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -899,11 +875,9 @@ test-scan-next-byte-skips-comment-and-whitespace:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -915,11 +889,9 @@ test-scan-next-byte-skips-comment-and-whitespace:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1009,7 +981,7 @@ test-scan-next-byte-skips-whitespace-and-comment:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
     b8/copy-to-eax  _test-buffered-file/imm32
     05/add-to-eax  4/imm32
@@ -1025,11 +997,9 @@ test-scan-next-byte-skips-whitespace-and-comment:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1119,11 +1089,9 @@ test-scan-next-byte-reads-final-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1135,11 +1103,9 @@ test-scan-next-byte-reads-final-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1221,11 +1187,9 @@ test-scan-next-byte-handles-Eof:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1237,11 +1201,9 @@ test-scan-next-byte-handles-Eof:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1315,11 +1277,9 @@ test-scan-next-byte-aborts-on-invalid-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1331,11 +1291,9 @@ test-scan-next-byte-aborts-on-invalid-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-error-buffered-file+4)
+    # . clear-stream(_test-error-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-error-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-error-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1437,11 +1395,9 @@ test-skip-until-newline:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-buffered-file+4)
+    # . clear-stream(_test-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
diff --git a/apps/pack b/apps/pack
index a2cd9595..a8688306 100755
--- a/apps/pack
+++ b/apps/pack
Binary files differdiff --git a/apps/pack.subx b/apps/pack.subx
index 51ad879e..5917f735 100644
--- a/apps/pack.subx
+++ b/apps/pack.subx
@@ -216,11 +216,9 @@ $subx-pack:check2:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -278,11 +276,9 @@ $subx-pack:check2:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -402,11 +398,9 @@ test-subx-pack-passes-empty-lines-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -418,11 +412,9 @@ test-subx-pack-passes-empty-lines-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -471,11 +463,9 @@ test-subx-pack-passes-lines-with-just-whitespace-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -487,11 +477,9 @@ test-subx-pack-passes-lines-with-just-whitespace-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -548,11 +536,9 @@ test-subx-pack-passes-segment-headers-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -564,11 +550,9 @@ test-subx-pack-passes-segment-headers-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -625,11 +609,9 @@ test-subx-pack-in-data-segment:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -641,11 +623,9 @@ test-subx-pack-in-data-segment:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -765,11 +745,9 @@ test-subx-pack-code-and-data-segments:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -781,11 +759,9 @@ test-subx-pack-code-and-data-segments:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1008,11 +984,9 @@ $convert-data:loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -1171,11 +1145,9 @@ test-convert-data-passes-comments-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1265,11 +1237,9 @@ test-convert-data-passes-labels-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1334,11 +1304,9 @@ test-convert-data-passes-names-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1402,11 +1370,9 @@ test-convert-data-handles-imm32:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1471,11 +1437,9 @@ test-convert-data-handles-single-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1539,11 +1503,9 @@ test-convert-data-multiple-bytes:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1607,11 +1569,9 @@ test-convert-data-byte-then-name:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1675,11 +1635,9 @@ test-convert-data-multiple-words:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1769,11 +1727,9 @@ test-convert-data-trailing-comment:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -2399,11 +2355,9 @@ $emit-modrm:loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -2710,11 +2664,9 @@ $emit-sib:loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -2975,11 +2927,9 @@ $emit-disp:loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -3196,11 +3146,9 @@ $emit-imm:loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -3383,11 +3331,9 @@ test-convert-instruction-passes-comments-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3451,11 +3397,9 @@ test-convert-instruction-passes-labels-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3519,11 +3463,9 @@ test-convert-instruction-handles-single-opcode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3613,11 +3555,9 @@ test-convert-instruction-handles-0f-opcode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3707,11 +3647,9 @@ test-convert-instruction-handles-f2-opcode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3801,11 +3739,9 @@ test-convert-instruction-handles-f3-opcode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3895,11 +3831,9 @@ test-convert-instruction-handles-f2-0f-opcode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3989,11 +3923,9 @@ test-convert-instruction-handles-f3-0f-opcode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4083,11 +4015,9 @@ test-convert-instruction-handles-unused-opcodes:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4177,11 +4107,9 @@ test-convert-instruction-handles-unused-second-opcodes:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4271,11 +4199,9 @@ test-convert-instruction-handles-unused-second-opcodes-2:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4365,11 +4291,9 @@ test-convert-instruction-emits-modrm-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4458,11 +4382,9 @@ test-convert-instruction-emits-modrm-byte-with-non-zero-mod:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4552,11 +4474,9 @@ test-convert-instruction-emits-modrm-byte-from-subop:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4646,11 +4566,9 @@ test-convert-instruction-emits-modrm-byte-with-missing-mod:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4740,11 +4658,9 @@ test-convert-instruction-emits-modrm-byte-with-missing-rm32:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4834,11 +4750,9 @@ test-convert-instruction-emits-modrm-byte-with-missing-r32:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4928,11 +4842,9 @@ test-convert-instruction-emits-sib-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5022,11 +4934,9 @@ test-convert-instruction-emits-sib-byte-with-missing-base:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5116,11 +5026,9 @@ test-convert-instruction-emits-sib-byte-with-missing-index:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5210,11 +5118,9 @@ test-convert-instruction-emits-sib-byte-with-missing-scale:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5304,11 +5210,9 @@ test-convert-instruction-handles-disp32-operand:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5398,11 +5302,9 @@ test-convert-instruction-handles-disp16-operand:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5492,11 +5394,9 @@ test-convert-instruction-handles-disp8-operand:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5586,11 +5486,9 @@ test-convert-instruction-handles-disp8-name:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5680,11 +5578,9 @@ test-convert-instruction-handles-imm32-operand:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5775,11 +5671,9 @@ test-convert-instruction-handles-imm16-operand:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -5870,11 +5764,9 @@ test-convert-instruction-handles-imm8-operand:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
diff --git a/apps/sigils b/apps/sigils
index d8cdaf55..7a8a16f8 100755
--- a/apps/sigils
+++ b/apps/sigils
Binary files differdiff --git a/apps/sigils.subx b/apps/sigils.subx
index 296ad68d..62ce5b19 100644
--- a/apps/sigils.subx
+++ b/apps/sigils.subx
@@ -216,19 +216,13 @@ $subx-sigils:direct-mode:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . write-slice-buffered(Stderr, word-slice)
 #?     # . . push args
 #?     52/push-edx
@@ -448,11 +442,9 @@ test-subx-sigils-passes-most-words-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -464,11 +456,9 @@ test-subx-sigils-passes-most-words-through:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -550,11 +540,9 @@ test-subx-sigils-direct-mode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -566,11 +554,9 @@ test-subx-sigils-direct-mode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -652,11 +638,9 @@ test-subx-sigils-direct-mode-with-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -668,11 +652,9 @@ test-subx-sigils-direct-mode-with-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -728,11 +710,9 @@ test-subx-sigils-register-indirect-mode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -744,11 +724,9 @@ test-subx-sigils-register-indirect-mode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -830,11 +808,9 @@ test-subx-sigils-register-indirect-mode-with-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -846,11 +822,9 @@ test-subx-sigils-register-indirect-mode-with-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -906,11 +880,9 @@ test-subx-sigils-register-indirect-mode-without-displacement:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -922,11 +894,9 @@ test-subx-sigils-register-indirect-mode-without-displacement:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1008,11 +978,9 @@ test-subx-sigils-register-indirect-mode-with-displacement:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1024,11 +992,9 @@ test-subx-sigils-register-indirect-mode-with-displacement:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1111,11 +1077,9 @@ test-subx-sigils-register-indirect-mode-with-sib-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1127,11 +1091,9 @@ test-subx-sigils-register-indirect-mode-with-sib-byte:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1213,11 +1175,9 @@ test-subx-sigils-register-indirect-mode-with-sib-byte-negative-displacement:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1229,11 +1189,9 @@ test-subx-sigils-register-indirect-mode-with-sib-byte-negative-displacement:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1315,11 +1273,9 @@ test-subx-sigils-indirect-mode-without-register:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1331,11 +1287,9 @@ test-subx-sigils-indirect-mode-without-register:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1485,11 +1439,9 @@ test-emit-direct-mode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -1570,11 +1522,9 @@ test-emit-direct-mode-2:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3381,11 +3331,9 @@ test-emit-indirect-mode:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3460,11 +3408,9 @@ test-emit-indirect-mode-2:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3539,11 +3485,9 @@ test-emit-indirect-mode-with-disp:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3618,11 +3562,9 @@ test-emit-indirect-mode-with-disp-negative:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3697,11 +3639,9 @@ test-emit-indirect-mode-with-sib:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3776,11 +3716,9 @@ test-emit-indirect-mode-ebp:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3855,11 +3793,9 @@ test-emit-indirect-mode-esp:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -4164,13 +4100,11 @@ $next-hex-int:abort:
     e8/call  _write/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-    # . clear-stream(Stderr+4)
+    # . clear-stream(Stderr->buffer)
     # . . save eax
     50/push-eax
     # . . push args
-    b8/copy-to-eax  Stderr/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  Stderr->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
diff --git a/apps/survey b/apps/survey
index 6595e7cf..70303562 100755
--- a/apps/survey
+++ b/apps/survey
Binary files differdiff --git a/apps/survey.subx b/apps/survey.subx
index 9c48e928..e4ebba13 100644
--- a/apps/survey.subx
+++ b/apps/survey.subx
@@ -166,19 +166,13 @@ subx-survey:  # infile : (address buffered-file), out : (address buffered-file)
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . print-int32-buffered(Stderr, labels->write)
 #?     # . . push args
 #? $watch-1:
@@ -230,19 +224,13 @@ subx-survey:  # infile : (address buffered-file), out : (address buffered-file)
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . print-int32-buffered(Stderr, labels->write)
 #?     # . . push args
 #?     ff          6/subop/push        0/mod/indirect  2/rm32/edx    .           .             .           .           .               .                 # push *edx
@@ -386,19 +374,13 @@ subx-survey:  # infile : (address buffered-file), out : (address buffered-file)
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . print-int32-buffered(Stderr, labels)
 #?     # . . push args
 #?     ff          6/subop/push        0/mod/indirect  2/rm32/edx    .           .             .           .           .               .                 # push *edx
@@ -478,11 +460,9 @@ test-subx-survey-computes-addresses:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-input-buffered-file+4)
+    # . clear-stream(_test-input-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-input-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-input-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -494,11 +474,9 @@ test-subx-survey-computes-addresses:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -789,19 +767,13 @@ $compute-offsets:word-loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . write-slice-buffered(Stderr, word-slice)
 #?     # . . push args
 #?     52/push-edx
@@ -946,11 +918,9 @@ $compute-offsets:construct-next-segment:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
@@ -1129,19 +1099,13 @@ $compute-offsets:case-default:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . print-int32-buffered(Stderr, segment-offset)
 #?     # . . push args
 #?     52/push-edx
@@ -2611,11 +2575,9 @@ test-emit-segments-global-variable:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -2850,11 +2812,9 @@ test-emit-segments-code-label:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3054,11 +3014,9 @@ test-emit-segments-code-label-absolute:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-    # . clear-stream(_test-output-buffered-file+4)
+    # . clear-stream(_test-output-buffered-file->buffer)
     # . . push args
-    b8/copy-to-eax  _test-output-buffered-file/imm32
-    05/add-to-eax  4/imm32
-    50/push-eax
+    68/push  _test-output-buffered-file->buffer/imm32
     # . . call
     e8/call  clear-stream/disp32
     # . . discard args
@@ -3275,19 +3233,13 @@ $emit-headers:loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . print-int32-buffered(Stderr, &curr-segment)
 #?     # . . push args
 #?     50/push-eax
@@ -4258,19 +4210,13 @@ $num-bytes:loop:
 #?     e8/call  write/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
-#?     # . clear-stream(Stderr+4)
-#?     # . . save eax
-#?     50/push-eax
+#?     # . clear-stream(Stderr->buffer)
 #?     # . . push args
-#?     b8/copy-to-eax  Stderr/imm32
-#?     05/add-to-eax  4/imm32
-#?     50/push-eax
+#?     68/push  Stderr->buffer/imm32
 #?     # . . call
 #?     e8/call  clear-stream/disp32
 #?     # . . discard args
 #?     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
-#?     # . . restore eax
-#?     58/pop-to-eax
 #?     # . write-slice-buffered(Stderr, word-slice)
 #?     # . . push args
 #?     51/push-ecx
diff --git a/apps/tests b/apps/tests
index 0dd18754..8e5e235a 100755
--- a/apps/tests
+++ b/apps/tests
Binary files differ