about summary refs log tree commit diff stats
path: root/html/064write-byte.subx.html
blob: 383249f9de34e4ab7ecb7dd306bdac58cf5d97e9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133<
void cmd_join_shows_message_when_disconnecting(void **state);
void cmd_join_shows_message_when_connecting(void **state);
void cmd_join_shows_message_when_disconnected(void **state);
void cmd_join_shows_message_when_undefined(void **state);
void cmd_join_shows_error_message_when_invalid_room_jid(void **state);
void cmd_join_uses_account_mucservice_when_no_service_specified(void **state);
void cmd_join_uses_supplied_nick(void **state);
void cmd_join_uses_account_nick_when_not_supplied(void **state);
void cmd_join_uses_password_when_supplied(void **state);
n373'>373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 064write-byte.subx</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxMinorFunction { color: #875f5f; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.SpecialChar { color: #d70000; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxS2Comment { color: #8a8a8a; }
.subxTest { color: #5f8700; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/064write-byte.subx'>https://github.com/akkartik/mu/blob/master/064write-byte.subx</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="subxComment"># write-byte-buffered: add a single byte to a buffered-file.</span>
<span id="L2" class="LineNr">  2 </span><span class="subxComment"># flush: write out any buffered writes to disk.</span>
<span id="L3" class="LineNr">  3 </span><span class="subxComment">#</span>
<span id="L4" class="LineNr">  4 </span><span class="subxComment"># TODO: Come up with a way to signal failure to write to disk. This is hard</span>
<span id="L5" class="LineNr">  5 </span><span class="subxComment"># since the failure may impact previous calls that were buffered.</span>
<span id="L6" class="LineNr">  6 </span>
<span id="L7" class="LineNr">  7 </span>== data
<span id="L8" class="LineNr">  8 </span>
<span id="L9" class="LineNr">  9 </span><span class="subxComment"># The buffered file for standard output.</span>
<span id="L10" class="LineNr"> 10 </span><span class="SpecialChar">Stdout</span>:
<span id="L11" class="LineNr"> 11 </span>    <span class="subxComment"># file descriptor or (address stream)</span>
<span id="L12" class="LineNr"> 12 </span>    1/imm32  <span class="subxComment"># standard output</span>
<span id="L13" class="LineNr"> 13 </span>    <span class="subxComment"># current write index</span>
<span id="L14" class="LineNr"> 14 </span>    0/imm32
<span id="L15" class="LineNr"> 15 </span>    <span class="subxComment"># current read index</span>
<span id="L16" class="LineNr"> 16 </span>    0/imm32
<span id="L17" class="LineNr"> 17 </span>    <span class="subxComment"># length</span>
<span id="L18" class="LineNr"> 18 </span>    8/imm32
<span id="L19" class="LineNr"> 19 </span>    <span class="subxComment"># data</span>
<span id="L20" class="LineNr"> 20 </span>    00 00 00 00 00 00 00 00  <span class="subxComment"># 8 bytes</span>
<span id="L21" class="LineNr"> 21 </span>
<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># TODO: 8 bytes is too small. We'll need to grow the buffer for efficiency. But</span>
<span id="L23" class="LineNr"> 23 </span><span class="subxComment"># I don't want to type in 1024 bytes here.</span>
<span id="L24" class="LineNr"> 24 </span>
<span id="L25" class="LineNr"> 25 </span>== code
<span id="L26" class="LineNr"> 26 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L27" class="LineNr"> 27 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<span id="L28" class="LineNr"> 28 </span><span class="subxS1Comment"># . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
<span id="L29" class="LineNr"> 29 </span>
<span id="L30" class="LineNr"> 30 </span><span class="subxComment"># Write lower byte of 'n' to 'f'.</span>
<span id="L31" class="LineNr"> 31 </span><span class="subxFunction">write-byte-buffered</span>:  <span class="subxComment"># f : (address buffered-file), n : int -&gt; &lt;void&gt;</span>
<span id="L32" class="LineNr"> 32 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L33" class="LineNr"> 33 </span>    55/push-ebp
<span id="L34" class="LineNr"> 34 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L35" class="LineNr"> 35 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L36" class="LineNr"> 36 </span>    51/push-ecx
<span id="L37" class="LineNr"> 37 </span>    57/push-edi
<span id="L38" class="LineNr"> 38 </span>    <span class="subxComment"># edi = f</span>
<span id="L39" class="LineNr"> 39 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/edi   8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+8) to edi</span>
<span id="L40" class="LineNr"> 40 </span>    <span class="subxComment"># ecx = f-&gt;write</span>
<span id="L41" class="LineNr"> 41 </span>    8b/copy                         1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(edi+4) to ecx</span>
<span id="L42" class="LineNr"> 42 </span>    <span class="subxComment"># if (f-&gt;write &gt;= f-&gt;length) flush and clear f's stream</span>
<span id="L43" class="LineNr"> 43 </span>    3b/compare                      1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># compare ecx with *(edi+12)</span>
<span id="L44" class="LineNr"> 44 </span>    7c/jump-if-lesser  $write-byte-buffered:to-stream/disp8
<span id="L45" class="LineNr"> 45 </span>    <span class="subxS1Comment"># . flush(f)</span>
<span id="L46" class="LineNr"> 46 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L47" class="LineNr"> 47 </span>    57/push-edi
<span id="L48" class="LineNr"> 48 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L49" class="LineNr"> 49 </span>    e8/call  <a href='064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L50" class="LineNr"> 50 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L51" class="LineNr"> 51 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L52" class="LineNr"> 52 </span>    <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
<span id="L53" class="LineNr"> 53 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L54" class="LineNr"> 54 </span>    8d/copy-address                 1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy edi+4 to eax</span>
<span id="L55" class="LineNr"> 55 </span>    50/push-eax
<span id="L56" class="LineNr"> 56 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L57" class="LineNr"> 57 </span>    e8/call  <a href='055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L58" class="LineNr"> 58 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L59" class="LineNr"> 59 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L60" class="LineNr"> 60 </span>    <span class="subxS1Comment"># . f-&gt;write must now be 0; update its cache at ecx</span>
<span id="L61" class="LineNr"> 61 </span>    31/xor                          3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear ecx</span>
<span id="L62" class="LineNr"> 62 </span><span class="Constant">$write-byte-buffered:to-stream</span>:
<span id="L63" class="LineNr"> 63 </span>    <span class="subxComment"># write to stream</span>
<span id="L64" class="LineNr"> 64 </span>    <span class="subxComment"># f-&gt;data[f-&gt;write] = LSB(n)</span>
<span id="L65" class="LineNr"> 65 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L66" class="LineNr"> 66 </span>    8a/copy-byte                    1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL    0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *(ebp+12) to AL</span>
<span id="L67" class="LineNr"> 67 </span>    88/copy-byte                    1/mod/*+disp8   4/rm32/sib    7/base/edi  1/index/ecx  <span class="Normal"> . </span>          0/r32/AL    0x10/disp8     <span class="Normal"> . </span>                <span class="subxComment"># copy AL to *(edi+ecx+16)</span>
<span id="L68" class="LineNr"> 68 </span>    <span class="subxComment"># ++f-&gt;write</span>
<span id="L69" class="LineNr"> 69 </span>    ff          0/subop/increment   1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># increment *(edi+4)</span>
<span id="L70" class="LineNr"> 70 </span><span class="Constant">$write-byte-buffered:end</span>:
<span id="L71" class="LineNr"> 71 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L72" class="LineNr"> 72 </span>    5f/pop-to-edi
<span id="L73" class="LineNr"> 73 </span>    59/pop-to-ecx
<span id="L74" class="LineNr"> 74 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L75" class="LineNr"> 75 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L76" class="LineNr"> 76 </span>    5d/pop-to-ebp
<span id="L77" class="LineNr"> 77 </span>    c3/return
<span id="L78" class="LineNr"> 78 </span>
<span id="L79" class="LineNr"> 79 </span><span class="subxFunction">flush</span>:  <span class="subxComment"># f : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L80" class="LineNr"> 80 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L81" class="LineNr"> 81 </span>    55/push-ebp
<span id="L82" class="LineNr"> 82 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L83" class="LineNr"> 83 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L84" class="LineNr"> 84 </span>    50/push-eax
<span id="L85" class="LineNr"> 85 </span>    51/push-ecx
<span id="L86" class="LineNr"> 86 </span>    <span class="subxComment"># eax = f</span>
<span id="L87" class="LineNr"> 87 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+8) to eax</span>
<span id="L88" class="LineNr"> 88 </span>    <span class="subxComment"># write-stream(f-&gt;fd, data = f+4)</span>
<span id="L89" class="LineNr"> 89 </span>      <span class="subxS2Comment"># . . push args</span>
<span id="L90" class="LineNr"> 90 </span>    8d/copy-address                 1/mod/*+disp8   0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy eax+4 to ecx</span>
<span id="L91" class="LineNr"> 91 </span>    51/push-ecx
<span id="L92" class="LineNr"> 92 </span>    ff          6/subop/push        0/mod/indirect  0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># push *eax</span>
<span id="L93" class="LineNr"> 93 </span>      <span class="subxS2Comment"># . . call</span>
<span id="L94" class="LineNr"> 94 </span>    e8/call  <a href='062write-stream.subx.html#L18'>write-stream</a>/disp32
<span id="L95" class="LineNr"> 95 </span>      <span class="subxS2Comment"># . . discard args</span>
<span id="L96" class="LineNr"> 96 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L97" class="LineNr"> 97 </span><span class="Constant">$flush:end</span>:
<span id="L98" class="LineNr"> 98 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L99" class="LineNr"> 99 </span>    59/pop-to-ecx
<span id="L100" class="LineNr">100 </span>    58/pop-to-eax
<span id="L101" class="LineNr">101 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L102" class="LineNr">102 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L103" class="LineNr">103 </span>    5d/pop-to-ebp
<span id="L104" class="LineNr">104 </span>    c3/return
<span id="L105" class="LineNr">105 </span>
<span id="L106" class="LineNr">106 </span><span class="subxTest">test-write-byte-buffered-single</span>:
<span id="L107" class="LineNr">107 </span>    <span class="subxH1Comment"># - check that write-byte-buffered writes to first byte of 'file'</span>
<span id="L108" class="LineNr">108 </span>    <span class="subxComment"># setup</span>
<span id="L109" class="LineNr">109 </span>    <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L110" class="LineNr">110 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L111" class="LineNr">111 </span>    68/push  <a href='057write.subx.html#L148'>_test-stream</a>/imm32
<span id="L112" class="LineNr">112 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L113" class="LineNr">113 </span>    e8/call  <a href='055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L114" class="LineNr">114 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L115" class="LineNr">115 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L116" class="LineNr">116 </span>    <span class="subxS1Comment"># . clear-stream(_test-buffered-file+4)</span>
<span id="L117" class="LineNr">117 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L118" class="LineNr">118 </span>    b8/copy-to-eax  <a href='061read-byte.subx.html#L281'>_test-buffered-file</a>/imm32
<span id="L119" class="LineNr">119 </span>    05/add-to-eax  4/imm32
<span id="L120" class="LineNr">120 </span>    50/push-eax
<span id="L121" class="LineNr">121 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L122" class="LineNr">122 </span>    e8/call  <a href='055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L123" class="LineNr">123 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L124" class="LineNr">124 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L125" class="LineNr">125 </span>    <span class="subxComment"># write-byte-buffered(_test-buffered-file, 'A')</span>
<span id="L126" class="LineNr">126 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L127" class="LineNr">127 </span>    68/push  0x41/imm32
<span id="L128" class="LineNr">128 </span>    68/push  <a href='061read-byte.subx.html#L281'>_test-buffered-file</a>/imm32
<span id="L129" class="LineNr">129 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L130" class="LineNr">130 </span>    e8/call  <a href='064write-byte.subx.html#L31'>write-byte-buffered</a>/disp32
<span id="L131" class="LineNr">131 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L132" class="LineNr">132 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L133" class="LineNr">133 </span>    <span class="subxComment"># flush(_test-buffered-file)</span>
<span id="L134" class="LineNr">134 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L135" class="LineNr">135 </span>    68/push  <a href='061read-byte.subx.html#L281'>_test-buffered-file</a>/imm32
<span id="L136" class="LineNr">136 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L137" class="LineNr">137 </span>    e8/call  <a href='064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L138" class="LineNr">138 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L139" class="LineNr">139 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L140" class="LineNr">140 </span>    <span class="subxComment"># check-stream-equal(_test-stream, &quot;A&quot;, msg)</span>
<span id="L141" class="LineNr">141 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L142" class="LineNr">142 </span>    68/push  <span class="Constant">&quot;F - test-write-byte-buffered-single&quot;</span>/imm32
<span id="L143" class="LineNr">143 </span>    68/push  <span class="Constant">&quot;A&quot;</span>/imm32
<span id="L144" class="LineNr">144 </span>    68/push  <a href='057write.subx.html#L148'>_test-stream</a>/imm32
<span id="L145" class="LineNr">145 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L146" class="LineNr">146 </span>    e8/call  <a href='058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L147" class="LineNr">147 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L148" class="LineNr">148 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L149" class="LineNr">149 </span>    <span class="subxS1Comment"># . end</span>
<span id="L150" class="LineNr">150 </span>    c3/return
<span id="L151" class="LineNr">151 </span>
<span id="L152" class="LineNr">152 </span><span class="subxTest">test-write-byte-buffered-multiple-flushes</span>:
<span id="L153" class="LineNr">153 </span>    <span class="subxH1Comment"># - check that write-byte-buffered correctly flushes buffered data</span>
<span id="L154" class="LineNr">154 </span>    <span class="subxComment"># setup</span>
<span id="L155" class="LineNr">155 </span>    <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L156" class="LineNr">156 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L157" class="LineNr">157 </span>    68/push  <a href='057write.subx.html#L148'>_test-stream</a>/imm32
<span id="L158" class="LineNr">158 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L159" class="LineNr">159 </span>    e8/call  <a href='055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L160" class="LineNr">160 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L161" class="LineNr">161 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L162" class="LineNr">162 </span>    <span class="subxS1Comment"># . clear-stream(_test-buffered-file+4)</span>
<span id="L163" class="LineNr">163 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L164" class="LineNr">164 </span>    b8/copy-to-eax  <a href='061read-byte.subx.html#L281'>_test-buffered-file</a>/imm32
<span id="L165" class="LineNr">165 </span>    05/add-to-eax  4/imm32
<span id="L166" class="LineNr">166 </span>    50/push-eax
<span id="L167" class="LineNr">167 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L168" class="LineNr">168 </span>    e8/call  <a href='055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L169" class="LineNr">169 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L170" class="LineNr">170 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L171" class="LineNr">171 </span>    <span class="subxComment"># fill up the buffer for _test-buffered-file</span>
<span id="L172" class="LineNr">172 </span>    <span class="subxS1Comment"># . write(_test-buffered-file+4, 'abcdef')</span>
<span id="L173" class="LineNr">173 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L174" class="LineNr">174 </span>    68/push  <span class="Constant">&quot;abcdef&quot;</span>/imm32
<span id="L175" class="LineNr">175 </span>    b8/copy-to-eax  <a href='061read-byte.subx.html#L281'>_test-buffered-file</a>/imm32
<span id="L176" class="LineNr">176 </span>    05/add-to-eax  4/imm32
<span id="L177" class="LineNr">177 </span>    50/push-eax
<span id="L178" class="LineNr">178 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L179" class="LineNr">179 </span>    e8/call  <a href='057write.subx.html#L24'>write</a>/disp32
<span id="L180" class="LineNr">180 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L181" class="LineNr">181 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L182" class="LineNr">182 </span>    <span class="subxComment"># write-byte-buffered(_test-buffered-file, 'g')</span>
<span id="L183" class="LineNr">183 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L184" class="LineNr">184 </span>    68/push  0x67/imm32
<span id="L185" class="LineNr">185 </span>    68/push  <a href='061read-byte.subx.html#L281'>_test-buffered-file</a>/imm32
<span id="L186" class="LineNr">186 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L187" class="LineNr">187 </span>    e8/call  <a href='064write-byte.subx.html#L31'>write-byte-buffered</a>/disp32
<span id="L188" class="LineNr">188 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L189" class="LineNr">189 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L190" class="LineNr">190 </span>    <span class="subxComment"># flush(_test-buffered-file)</span>
<span id="L191" class="LineNr">191 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L192" class="LineNr">192 </span>    68/push  <a href='061read-byte.subx.html#L281'>_test-buffered-file</a>/imm32
<span id="L193" class="LineNr">193 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L194" class="LineNr">194 </span>    e8/call  <a href='064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L195" class="LineNr">195 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L196" class="LineNr">196 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L197" class="LineNr">197 </span>    <span class="subxComment"># check-stream-equal(_test-stream, &quot;abcdef&quot;, msg)</span>
<span id="L198" class="LineNr">198 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L199" class="LineNr">199 </span>    68/push  <span class="Constant">&quot;F - <a href='064write-byte.subx.html#L152'>test-write-byte-buffered-multiple-flushes</a>: 1&quot;</span>/imm32
<span id="L200" class="LineNr">200 </span>    68/push  <span class="Constant">&quot;abcdefg&quot;</span>/imm32
<span id="L201" class="LineNr">201 </span>    68/push  <a href='057write.subx.html#L148'>_test-stream</a>/imm32
<span id="L202" class="LineNr">202 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L203" class="LineNr">203 </span>    e8/call  <a href='058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L204" class="LineNr">204 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L205" class="LineNr">205 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L206" class="LineNr">206 </span>    <span class="subxS1Comment"># . end</span>
<span id="L207" class="LineNr">207 </span>    c3/return
<span id="L208" class="LineNr">208 </span>
<span id="L209" class="LineNr">209 </span><span class="subxH1Comment"># - variant without buffering</span>
<span id="L210" class="LineNr">210 </span>
<span id="L211" class="LineNr">211 </span><span class="subxComment"># Write lower byte of 'n' to 'f'.</span>
<span id="L212" class="LineNr">212 </span><span class="subxFunction">append-byte</span>:  <span class="subxComment"># f : (address stream), n : int -&gt; &lt;void&gt;</span>
<span id="L213" class="LineNr">213 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L214" class="LineNr">214 </span>    55/push-ebp
<span id="L215" class="LineNr">215 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L216" class="LineNr">216 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L217" class="LineNr">217 </span>    51/push-ecx
<span id="L218" class="LineNr">218 </span>    57/push-edi
<span id="L219" class="LineNr">219 </span>    <span class="subxComment"># edi = f</span>
<span id="L220" class="LineNr">220 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/edi   8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+8) to edi</span>
<span id="L221" class="LineNr">221 </span>    <span class="subxComment"># ecx = f-&gt;write</span>
<span id="L222" class="LineNr">222 </span>    8b/copy                         0/mod/indirect  7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *edi to ecx</span>
<span id="L223" class="LineNr">223 </span>    <span class="subxComment"># if (f-&gt;write &gt;= f-&gt;length) abort</span>
<span id="L224" class="LineNr">224 </span>    3b/compare                      1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx   8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># compare ecx with *(edi+8)</span>
<span id="L225" class="LineNr">225 </span>    7d/jump-if-greater-or-equal  $append-byte:abort/disp8
<span id="L226" class="LineNr">226 </span><span class="Constant">$append-byte:to-stream</span>:
<span id="L227" class="LineNr">227 </span>    <span class="subxComment"># write to stream</span>
<span id="L228" class="LineNr">228 </span>    <span class="subxComment"># f-&gt;data[f-&gt;write] = LSB(n)</span>
<span id="L229" class="LineNr">229 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L230" class="LineNr">230 </span>    8a/copy-byte                    1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL    0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *(ebp+12) to AL</span>
<span id="L231" class="LineNr">231 </span>    88/copy-byte                    1/mod/*+disp8   4/rm32/sib    7/base/edi  1/index/ecx  <span class="Normal"> . </span>          0/r32/AL    0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy AL to *(edi+ecx+12)</span>
<span id="L232" class="LineNr">232 </span>    <span class="subxComment"># ++f-&gt;write</span>
<span id="L233" class="LineNr">233 </span>    ff          0/subop/increment   0/mod/indirect  7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># increment *edi</span>
<span id="L234" class="LineNr">234 </span><span class="Constant">$append-byte:end</span>:
<span id="L235" class="LineNr">235 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L236" class="LineNr">236 </span>    5f/pop-to-edi
<span id="L237" class="LineNr">237 </span>    59/pop-to-ecx
<span id="L238" class="LineNr">238 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L239" class="LineNr">239 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L240" class="LineNr">240 </span>    5d/pop-to-ebp
<span id="L241" class="LineNr">241 </span>    c3/return
<span id="L242" class="LineNr">242 </span>
<span id="L243" class="LineNr">243 </span><span class="Constant">$append-byte:abort</span>:
<span id="L244" class="LineNr">244 </span>    <span class="subxS1Comment"># . _write(2/stderr, error)</span>
<span id="L245" class="LineNr">245 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L246" class="LineNr">246 </span>    68/push  <span class="Constant">&quot;append-byte: out of space\n&quot;</span>/imm32
<span id="L247" class="LineNr">247 </span>    68/push  2/imm32/stderr
<span id="L248" class="LineNr">248 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L249" class="LineNr">249 </span>    e8/call  <a href='050_write.subx.html#L14'>_write</a>/disp32
<span id="L250" class="LineNr">250 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L251" class="LineNr">251 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L252" class="LineNr">252 </span>    <span class="subxS1Comment"># . syscall(exit, 1)</span>
<span id="L253" class="LineNr">253 </span>    bb/copy-to-ebx  1/imm32
<span id="L254" class="LineNr">254 </span>    b8/copy-to-eax  1/imm32/exit
<span id="L255" class="LineNr">255 </span>    cd/syscall  0x80/imm8
<span id="L256" class="LineNr">256 </span>    <span class="subxComment"># never gets here</span>
<span id="L257" class="LineNr">257 </span>
<span id="L258" class="LineNr">258 </span><span class="subxTest">test-append-byte-single</span>:
<span id="L259" class="LineNr">259 </span>    <span class="subxH1Comment"># - check that append-byte writes to first byte of 'file'</span>
<span id="L260" class="LineNr">260 </span>    <span class="subxComment"># setup</span>
<span id="L261" class="LineNr">261 </span>    <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L262" class="LineNr">262 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L263" class="LineNr">263 </span>    68/push  <a href='057write.subx.html#L148'>_test-stream</a>/imm32
<span id="L264" class="LineNr">264 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L265" class="LineNr">265 </span>    e8/call  <a href='055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L266" class="LineNr">266 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L267" class="LineNr">267 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L268" class="LineNr">268 </span>    <span class="subxComment"># append-byte(_test-stream, 'A')</span>
<span id="L269" class="LineNr">269 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L270" class="LineNr">270 </span>    68/push  0x41/imm32
<span id="L271" class="LineNr">271 </span>    68/push  <a href='057write.subx.html#L148'>_test-stream</a>/imm32
<span id="L272" class="LineNr">272 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L273" class="LineNr">273 </span>    e8/call  <a href='064write-byte.subx.html#L212'>append-byte</a>/disp32
<span id="L274" class="LineNr">274 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L275" class="LineNr">275 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L276" class="LineNr">276 </span>    <span class="subxComment"># check-stream-equal(_test-stream, &quot;A&quot;, msg)</span>
<span id="L277" class="LineNr">277 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L278" class="LineNr">278 </span>    68/push  <span class="Constant">&quot;F - test-append-byte-single&quot;</span>/imm32
<span id="L279" class="LineNr">279 </span>    68/push  <span class="Constant">&quot;A&quot;</span>/imm32
<span id="L280" class="LineNr">280 </span>    68/push  <a href='057write.subx.html#L148'>_test-stream</a>/imm32
<span id="L281" class="LineNr">281 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L282" class="LineNr">282 </span>    e8/call  <a href='058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L283" class="LineNr">283 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L284" class="LineNr">284 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L285" class="LineNr">285 </span>    <span class="subxS1Comment"># . end</span>
<span id="L286" class="LineNr">286 </span>    c3/return
<span id="L287" class="LineNr">287 </span>
<span id="L288" class="LineNr">288 </span>== data
<span id="L289" class="LineNr">289 </span>
<span id="L290" class="LineNr">290 </span><span class="subxMinorFunction">_test-output-stream</span>:
<span id="L291" class="LineNr">291 </span>    <span class="subxComment"># current write index</span>
<span id="L292" class="LineNr">292 </span>    0/imm32
<span id="L293" class="LineNr">293 </span>    <span class="subxComment"># current read index</span>
<span id="L294" class="LineNr">294 </span>    0/imm32
<span id="L295" class="LineNr">295 </span>    <span class="subxComment"># length</span>
<span id="L296" class="LineNr">296 </span>    0x200/imm32  <span class="subxComment"># 512 bytes</span>
<span id="L297" class="LineNr">297 </span>    <span class="subxComment"># data (32 lines x 16 bytes/line)</span>
<span id="L298" class="LineNr">298 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L299" class="LineNr">299 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L300" class="LineNr">300 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L301" class="LineNr">301 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L302" class="LineNr">302 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L303" class="LineNr">303 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L304" class="LineNr">304 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L305" class="LineNr">305 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L306" class="LineNr">306 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L307" class="LineNr">307 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L308" class="LineNr">308 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L309" class="LineNr">309 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L310" class="LineNr">310 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L311" class="LineNr">311 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L312" class="LineNr">312 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L313" class="LineNr">313 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L314" class="LineNr">314 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L315" class="LineNr">315 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L316" class="LineNr">316 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L317" class="LineNr">317 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L318" class="LineNr">318 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L319" class="LineNr">319 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L320" class="LineNr">320 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L321" class="LineNr">321 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L322" class="LineNr">322 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L323" class="LineNr">323 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L324" class="LineNr">324 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L325" class="LineNr">325 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L326" class="LineNr">326 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L327" class="LineNr">327 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L328" class="LineNr">328 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L329" class="LineNr">329 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L330" class="LineNr">330 </span>
<span id="L331" class="LineNr">331 </span><span class="subxComment"># a test buffered file for _test-output-stream</span>
<span id="L332" class="LineNr">332 </span><span class="subxMinorFunction">_test-output-buffered-file</span>:
<span id="L333" class="LineNr">333 </span>    <span class="subxComment"># file descriptor or (address stream)</span>
<span id="L334" class="LineNr">334 </span>    <a href='064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L335" class="LineNr">335 </span>    <span class="subxComment"># current write index</span>
<span id="L336" class="LineNr">336 </span>    0/imm32
<span id="L337" class="LineNr">337 </span>    <span class="subxComment"># current read index</span>
<span id="L338" class="LineNr">338 </span>    0/imm32
<span id="L339" class="LineNr">339 </span>    <span class="subxComment"># length</span>
<span id="L340" class="LineNr">340 </span>    6/imm32
<span id="L341" class="LineNr">341 </span>    <span class="subxComment"># data</span>
<span id="L342" class="LineNr">342 </span>    00 00 00 00 00 00  <span class="subxComment"># 6 bytes</span>
<span id="L343" class="LineNr">343 </span>
<span id="L344" class="LineNr">344 </span><span class="subxMinorFunction">_test-error-stream</span>:
<span id="L345" class="LineNr">345 </span>    <span class="subxComment"># current write index</span>
<span id="L346" class="LineNr">346 </span>    0/imm32
<span id="L347" class="LineNr">347 </span>    <span class="subxComment"># current read index</span>
<span id="L348" class="LineNr">348 </span>    0/imm32
<span id="L349" class="LineNr">349 </span>    <span class="subxComment"># line</span>
<span id="L350" class="LineNr">350 </span>    0x80/imm32  <span class="subxComment"># 128 bytes</span>
<span id="L351" class="LineNr">351 </span>    <span class="subxComment"># data (8 lines x 16 bytes/line)</span>
<span id="L352" class="LineNr">352 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L353" class="LineNr">353 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L354" class="LineNr">354 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L355" class="LineNr">355 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L356" class="LineNr">356 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L357" class="LineNr">357 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L358" class="LineNr">358 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L359" class="LineNr">359 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L360" class="LineNr">360 </span>
<span id="L361" class="LineNr">361 </span><span class="subxComment"># a test buffered file for _test-error-stream</span>
<span id="L362" class="LineNr">362 </span><span class="subxMinorFunction">_test-error-buffered-file</span>:
<span id="L363" class="LineNr">363 </span>    <span class="subxComment"># file descriptor or (address stream)</span>
<span id="L364" class="LineNr">364 </span>    <a href='064write-byte.subx.html#L344'>_test-error-stream</a>/imm32
<span id="L365" class="LineNr">365 </span>    <span class="subxComment"># current write index</span>
<span id="L366" class="LineNr">366 </span>    0/imm32
<span id="L367" class="LineNr">367 </span>    <span class="subxComment"># current read index</span>
<span id="L368" class="LineNr">368 </span>    0/imm32
<span id="L369" class="LineNr">369 </span>    <span class="subxComment"># length</span>
<span id="L370" class="LineNr">370 </span>    6/imm32
<span id="L371" class="LineNr">371 </span>    <span class="subxComment"># data</span>
<span id="L372" class="LineNr">372 </span>    00 00 00 00 00 00  <span class="subxComment"># 6 bytes</span>
<span id="L373" class="LineNr">373 </span>
<span id="L374" class="LineNr">374 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->