about summary refs log tree commit diff stats
path: root/src/kilo.c
Commit message (Expand)AuthorAgeFilesLines
...
* no, use Esc to cancelKartik K. Agaram2021-11-141-5/+5
* use word at cursor when it's not at start of lineKartik K. Agaram2021-11-141-2/+4
* editor: use ctrl-g to cancel dialogsKartik K. Agaram2021-11-131-5/+5
* jump to word at cursor by defaultKartik K. Agaram2021-11-131-0/+28
* ctrl-u to clear response in go menuKartik K. Agaram2021-11-131-0/+3
* reset cursor position when switching definitionsKartik K. Agaram2021-11-131-0/+2
* .Kartik K. Agaram2021-11-131-1/+0
* cleaner layout for a function's code and dataKartik K. Agaram2021-11-131-3/+0
* generalize kilo's hard-coded multiline C syntaxKartik K. Agaram2021-11-131-21/+28
* .Kartik K. Agaram2021-11-131-6/+2
* fix for editor highlightingKartik K. Agaram2021-11-131-1/+2
* kill highlighting flagsKartik K. Agaram2021-11-131-9/+5
* replace Kilo's raw terminal handling with ncursesKartik K. Agaram2021-11-131-355/+91
* stop leaking memoryKartik K. Agaram2021-11-131-2/+3
* shield kilo.c from teliva_editbuffer detailKartik K. Agaram2021-11-131-4/+4
* .Kartik K. Agaram2021-11-131-1/+1
* .Kartik K. Agaram2021-11-131-4/+2
* .Kartik K. Agaram2021-11-131-3/+3
* .Kartik K. Agaram2021-11-131-11/+2
* start using static linkage like the rest of LuaKartik K. Agaram2021-11-131-46/+42
* create empty file when navigating to empty definitionKartik K. Agaram2021-11-111-1/+1
* fix incorrect hotkey in menuKartik K. Agaram2021-11-111-2/+2
* ctrl-g to edit a different definitionKartik K. Agaram2021-11-111-1/+58
* pass lua_State into editorKartik K. Agaram2021-11-111-3/+3
* reorgKartik K. Agaram2021-11-111-48/+0
* edit a single hard-coded definition in the imageKartik K. Agaram2021-11-101-0/+50
* switch menu bars to reverse videoKartik K. Agaram2021-11-071-5/+5
* escape hatch to quit with a pending errorKartik K. Agaram2021-11-061-2/+10
* start showing error messages in editorKartik K. Agaram2021-11-061-1/+2
* .Kartik K. Agaram2021-11-061-6/+0
* auto-saveKartik K. Agaram2021-11-061-10/+2
* replace initial help message with a menuKartik K. Agaram2021-11-061-8/+5
* no, more consistent to toggle run/edit with ctrl-eKartik K. Agaram2021-11-061-3/+4
* exit editor with ctrl-x for consistencyKartik K. Agaram2021-11-061-3/+4
* .Kartik K. Agaram2021-11-061-2/+2
* .Kartik K. Agaram2021-11-061-21/+21
* clean up when leaving editorKartik K. Agaram2021-11-061-0/+1
* utterly ghastly way to rerun script after editKartik K. Agaram2021-11-051-2/+3
* stitch editor inKartik K. Agaram2021-11-051-57/+19
* select an editor to bundle: kiloKartik K. Agaram2021-11-051-0/+1308
5 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 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543
<!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 - linux/115write-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-dark">
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #a8a8a8; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #a8a8a8; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxMinorFunction { color: #875f5f; }
.Normal { color: #000000; background-color: #a8a8a8; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.subxFunction { color: #af5f00; text-decoration: underline; }
-->
</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/main/linux/115write-byte.subx'>https://github.com/akkartik/mu/blob/main/linux/115write-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 class="subxComment"># buffered-file</span>
<span id="L11" class="LineNr"> 11 </span>    <span class="subxComment"># file descriptor or (addr stream byte)</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="Constant">$Stdout-&gt;buffer</span>:
<span id="L14" class="LineNr"> 14 </span>    <span class="subxComment"># inlined fields for a stream</span>
<span id="L15" class="LineNr"> 15 </span>    <span class="subxComment">#   current write index</span>
<span id="L16" class="LineNr"> 16 </span>    0/imm32
<span id="L17" class="LineNr"> 17 </span>    <span class="subxComment">#   current read index</span>
<span id="L18" class="LineNr"> 18 </span>    0/imm32
<span id="L19" class="LineNr"> 19 </span>    <span class="subxComment">#   size</span>
<span id="L20" class="LineNr"> 20 </span>    8/imm32
<span id="L21" class="LineNr"> 21 </span>    <span class="subxComment">#   data</span>
<span id="L22" class="LineNr"> 22 </span>    00 00 00 00 00 00 00 00  <span class="subxComment"># 8 bytes</span>
<span id="L23" class="LineNr"> 23 </span>
<span id="L24" class="LineNr"> 24 </span><span class="subxComment"># TODO: 8 bytes is too small. We'll need to grow the buffer for efficiency. But</span>
<span id="L25" class="LineNr"> 25 </span><span class="subxComment"># I don't want to type in 1024 bytes here.</span>
<span id="L26" class="LineNr"> 26 </span>
<span id="L27" class="LineNr"> 27 </span>== code
<span id="L28" class="LineNr"> 28 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L29" class="LineNr"> 29 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<span id="L30" class="LineNr"> 30 </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="L31" class="LineNr"> 31 </span>
<span id="L32" class="LineNr"> 32 </span><span class="subxComment"># Write lower byte of 'n' to 'f'.</span>
<span id="L33" class="LineNr"> 33 </span><span class="subxFunction">write-byte-buffered</span>:  <span class="subxComment"># f: (addr buffered-file), n: int</span>
<span id="L34" class="LineNr"> 34 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L35" class="LineNr"> 35 </span>    55/push-ebp
<span id="L36" class="LineNr"> 36 </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="L37" class="LineNr"> 37 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L38" class="LineNr"> 38 </span>    51/push-ecx
<span id="L39" class="LineNr"> 39 </span>    57/push-edi
<span id="L40" class="LineNr"> 40 </span>    <span class="subxComment"># edi = f</span>
<span id="L41" class="LineNr"> 41 </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="L42" class="LineNr"> 42 </span>    <span class="subxComment"># ecx = f-&gt;write</span>
<span id="L43" class="LineNr"> 43 </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="L44" class="LineNr"> 44 </span>    <span class="subxComment"># if (f-&gt;write &gt;= f-&gt;size) flush and clear f's stream</span>
<span id="L45" class="LineNr"> 45 </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="L46" class="LineNr"> 46 </span>    7c/jump-if-&lt;  $write-byte-buffered:to-stream/disp8
<span id="L47" class="LineNr"> 47 </span>    <span class="subxS1Comment"># . flush(f)</span>
<span id="L48" class="LineNr"> 48 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L49" class="LineNr"> 49 </span>    57/push-edi
<span id="L50" class="LineNr"> 50 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L51" class="LineNr"> 51 </span>    e8/call  <a href='115write-byte.subx.html#L81'>flush</a>/disp32
<span id="L52" class="LineNr"> 52 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L53" class="LineNr"> 53 </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="L54" class="LineNr"> 54 </span>    <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
<span id="L55" class="LineNr"> 55 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L56" class="LineNr"> 56 </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="L57" class="LineNr"> 57 </span>    50/push-eax
<span id="L58" class="LineNr"> 58 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L59" class="LineNr"> 59 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L60" class="LineNr"> 60 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L61" class="LineNr"> 61 </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="L62" class="LineNr"> 62 </span>    <span class="subxS1Comment"># . f-&gt;write must now be 0; update its cache at ecx</span>
<span id="L63" class="LineNr"> 63 </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="L64" class="LineNr"> 64 </span><span class="Constant">$write-byte-buffered:to-stream</span>:
<span id="L65" class="LineNr"> 65 </span>    <span class="subxComment"># write to stream</span>
<span id="L66" class="LineNr"> 66 </span>    <span class="subxComment"># f-&gt;data[f-&gt;write] = LSB(n)</span>
<span id="L67" class="LineNr"> 67 </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="L68" class="LineNr"> 68 </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="L69" class="LineNr"> 69 </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="L70" class="LineNr"> 70 </span>    <span class="subxComment"># ++f-&gt;write</span>
<span id="L71" class="LineNr"> 71 </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="L72" class="LineNr"> 72 </span><span class="Constant">$write-byte-buffered:end</span>:
<span id="L73" class="LineNr"> 73 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L74" class="LineNr"> 74 </span>    5f/pop-to-edi
<span id="L75" class="LineNr"> 75 </span>    59/pop-to-ecx
<span id="L76" class="LineNr"> 76 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L77" class="LineNr"> 77 </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="L78" class="LineNr"> 78 </span>    5d/pop-to-ebp
<span id="L79" class="LineNr"> 79 </span>    c3/return
<span id="L80" class="LineNr"> 80 </span>
<span id="L81" class="LineNr"> 81 </span><span class="subxFunction">flush</span>:  <span class="subxComment"># f: (addr buffered-file)</span>
<span id="L82" class="LineNr"> 82 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L83" class="LineNr"> 83 </span>    55/push-ebp
<span id="L84" class="LineNr"> 84 </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="L85" class="LineNr"> 85 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L86" class="LineNr"> 86 </span>    50/push-eax
<span id="L87" class="LineNr"> 87 </span>    51/push-ecx
<span id="L88" class="LineNr"> 88 </span>    <span class="subxComment"># eax = f</span>
<span id="L89" class="LineNr"> 89 </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="L90" class="LineNr"> 90 </span>    <span class="subxComment"># write-stream(f-&gt;fd, data = f+4)</span>
<span id="L91" class="LineNr"> 91 </span>      <span class="subxS2Comment"># . . push args</span>
<span id="L92" class="LineNr"> 92 </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="L93" class="LineNr"> 93 </span>    51/push-ecx
<span id="L94" class="LineNr"> 94 </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="L95" class="LineNr"> 95 </span>      <span class="subxS2Comment"># . . call</span>
<span id="L96" class="LineNr"> 96 </span>    e8/call  <a href='113write-stream.subx.html#L17'>write-stream</a>/disp32
<span id="L97" class="LineNr"> 97 </span>      <span class="subxS2Comment"># . . discard args</span>
<span id="L98" class="LineNr"> 98 </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="L99" class="LineNr"> 99 </span><span class="Constant">$flush:end</span>:
<span id="L100" class="LineNr">100 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L101" class="LineNr">101 </span>    59/pop-to-ecx
<span id="L102" class="LineNr">102 </span>    58/pop-to-eax
<span id="L103" class="LineNr">103 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L104" class="LineNr">104 </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="L105" class="LineNr">105 </span>    5d/pop-to-ebp
<span id="L106" class="LineNr">106 </span>    c3/return
<span id="L107" class="LineNr">107 </span>
<span id="L108" class="LineNr">108 </span><span class="subxTest">test-write-byte-buffered-single</span>:
<span id="L109" class="LineNr">109 </span>    <span class="subxH1Comment"># - check that write-byte-buffered writes to first byte of 'file'</span>
<span id="L110" class="LineNr">110 </span>    <span class="subxComment"># setup</span>
<span id="L111" class="LineNr">111 </span>    <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L112" class="LineNr">112 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L113" class="LineNr">113 </span>    68/push  <a href='108write.subx.html#L151'>_test-stream</a>/imm32
<span id="L114" class="LineNr">114 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L115" class="LineNr">115 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L116" class="LineNr">116 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L117" class="LineNr">117 </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="L118" class="LineNr">118 </span>    <span class="subxS1Comment"># . clear-stream($_test-buffered-file-&gt;buffer)</span>
<span id="L119" class="LineNr">119 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L120" class="LineNr">120 </span>    68/push  $_test-buffered-file-&gt;buffer/imm32
<span id="L121" class="LineNr">121 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L122" class="LineNr">122 </span>    e8/call  <a href='106stream.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='112read-byte.subx.html#L318'>_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='115write-byte.subx.html#L33'>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='112read-byte.subx.html#L318'>_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='115write-byte.subx.html#L81'>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='108write.subx.html#L151'>_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='109stream-equal.subx.html#L194'>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='108write.subx.html#L151'>_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='106stream.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-&gt;buffer)</span>
<span id="L163" class="LineNr">163 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L164" class="LineNr">164 </span>    68/push  $_test-buffered-file-&gt;buffer/imm32
<span id="L165" class="LineNr">165 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L166" class="LineNr">166 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L167" class="LineNr">167 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L168" class="LineNr">168 </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="L169" class="LineNr">169 </span>    <span class="subxComment"># fill up the buffer for _test-buffered-file</span>
<span id="L170" class="LineNr">170 </span>    <span class="subxS1Comment"># . write($_test-buffered-file-&gt;buffer, &quot;abcdef&quot;)</span>
<span id="L171" class="LineNr">171 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L172" class="LineNr">172 </span>    68/push  <span class="Constant">&quot;abcdef&quot;</span>/imm32
<span id="L173" class="LineNr">173 </span>    68/push  $_test-buffered-file-&gt;buffer/imm32
<span id="L174" class="LineNr">174 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L175" class="LineNr">175 </span>    e8/call  <a href='108write.subx.html#L24'>write</a>/disp32
<span id="L176" class="LineNr">176 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L177" class="LineNr">177 </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="L178" class="LineNr">178 </span>    <span class="subxComment"># write-byte-buffered(_test-buffered-file, 'g')</span>
<span id="L179" class="LineNr">179 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L180" class="LineNr">180 </span>    68/push  0x67/imm32
<span id="L181" class="LineNr">181 </span>    68/push  <a href='112read-byte.subx.html#L318'>_test-buffered-file</a>/imm32
<span id="L182" class="LineNr">182 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L183" class="LineNr">183 </span>    e8/call  <a href='115write-byte.subx.html#L33'>write-byte-buffered</a>/disp32
<span id="L184" class="LineNr">184 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L185" class="LineNr">185 </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="L186" class="LineNr">186 </span>    <span class="subxComment"># flush(_test-buffered-file)</span>
<span id="L187" class="LineNr">187 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L188" class="LineNr">188 </span>    68/push  <a href='112read-byte.subx.html#L318'>_test-buffered-file</a>/imm32
<span id="L189" class="LineNr">189 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L190" class="LineNr">190 </span>    e8/call  <a href='115write-byte.subx.html#L81'>flush</a>/disp32
<span id="L191" class="LineNr">191 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L192" class="LineNr">192 </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="L193" class="LineNr">193 </span>    <span class="subxComment"># check-stream-equal(_test-stream, &quot;abcdefg&quot;, msg)</span>
<span id="L194" class="LineNr">194 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L195" class="LineNr">195 </span>    68/push  <span class="Constant">&quot;F - test-write-byte-buffered-multiple-flushes&quot;</span>/imm32
<span id="L196" class="LineNr">196 </span>    68/push  <span class="Constant">&quot;abcdefg&quot;</span>/imm32
<span id="L197" class="LineNr">197 </span>    68/push  <a href='108write.subx.html#L151'>_test-stream</a>/imm32
<span id="L198" class="LineNr">198 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L199" class="LineNr">199 </span>    e8/call  <a href='109stream-equal.subx.html#L194'>check-stream-equal</a>/disp32
<span id="L200" class="LineNr">200 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L201" class="LineNr">201 </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="L202" class="LineNr">202 </span>    <span class="subxS1Comment"># . end</span>
<span id="L203" class="LineNr">203 </span>    c3/return
<span id="L204" class="LineNr">204 </span>
<span id="L205" class="LineNr">205 </span><span class="subxH1Comment"># - variant without buffering</span>
<span id="L206" class="LineNr">206 </span>
<span id="L207" class="LineNr">207 </span><span class="subxComment"># Write lower byte of 'n' to 'f'.</span>
<span id="L208" class="LineNr">208 </span><span class="subxFunction">append-byte</span>:  <span class="subxComment"># f: (addr stream byte), n: int</span>
<span id="L209" class="LineNr">209 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L210" class="LineNr">210 </span>    55/push-ebp
<span id="L211" class="LineNr">211 </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="L212" class="LineNr">212 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L213" class="LineNr">213 </span>    50/push-eax
<span id="L214" class="LineNr">214 </span>    51/push-ecx
<span id="L215" class="LineNr">215 </span>    57/push-edi
<span id="L216" class="LineNr">216 </span>    <span class="subxComment"># edi = f</span>
<span id="L217" class="LineNr">217 </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="L218" class="LineNr">218 </span>    <span class="subxComment"># ecx = f-&gt;write</span>
<span id="L219" class="LineNr">219 </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="L220" class="LineNr">220 </span>    <span class="subxComment"># if (f-&gt;write &gt;= f-&gt;size) abort</span>
<span id="L221" class="LineNr">221 </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="L222" class="LineNr">222 </span>    7d/jump-if-&gt;=  $append-byte:abort/disp8
<span id="L223" class="LineNr">223 </span><span class="Constant">$append-byte:to-stream</span>:
<span id="L224" class="LineNr">224 </span>    <span class="subxComment"># write to stream</span>
<span id="L225" class="LineNr">225 </span>    <span class="subxComment"># f-&gt;data[f-&gt;write] = LSB(n)</span>
<span id="L226" class="LineNr">226 </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="L227" class="LineNr">227 </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="L228" class="LineNr">228 </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="L229" class="LineNr">229 </span>    <span class="subxComment"># ++f-&gt;write</span>
<span id="L230" class="LineNr">230 </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="L231" class="LineNr">231 </span><span class="Constant">$append-byte:end</span>:
<span id="L232" class="LineNr">232 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L233" class="LineNr">233 </span>    5f/pop-to-edi
<span id="L234" class="LineNr">234 </span>    59/pop-to-ecx
<span id="L235" class="LineNr">235 </span>    58/pop-to-eax
<span id="L236" class="LineNr">236 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L237" class="LineNr">237 </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="L238" class="LineNr">238 </span>    5d/pop-to-ebp
<span id="L239" class="LineNr">239 </span>    c3/return
<span id="L240" class="LineNr">240 </span>
<span id="L241" class="LineNr">241 </span><span class="Constant">$append-byte:abort</span>:
<span id="L242" class="LineNr">242 </span>    <span class="subxS1Comment"># . _write(2/stderr, error)</span>
<span id="L243" class="LineNr">243 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L244" class="LineNr">244 </span>    68/push  <span class="Constant">&quot;append-byte: out of space\n&quot;</span>/imm32
<span id="L245" class="LineNr">245 </span>    68/push  2/imm32/stderr
<span id="L246" class="LineNr">246 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L247" class="LineNr">247 </span>    e8/call  <a href='101_write.subx.html#L12'>_write</a>/disp32
<span id="L248" class="LineNr">248 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L249" class="LineNr">249 </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="L250" class="LineNr">250 </span>    <span class="subxS1Comment"># . syscall(exit, 1)</span>
<span id="L251" class="LineNr">251 </span>    bb/copy-to-ebx  1/imm32
<span id="L252" class="LineNr">252 </span>    e8/call  <a href='000init.subx.html#L18'>syscall_exit</a>/disp32
<span id="L253" class="LineNr">253 </span>    <span class="subxComment"># never gets here</span>
<span id="L254" class="LineNr">254 </span>
<span id="L255" class="LineNr">255 </span><span class="subxTest">test-append-byte-single</span>:
<span id="L256" class="LineNr">256 </span>    <span class="subxH1Comment"># - check that append-byte writes to first byte of 'file'</span>
<span id="L257" class="LineNr">257 </span>    <span class="subxComment"># setup</span>
<span id="L258" class="LineNr">258 </span>    <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L259" class="LineNr">259 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L260" class="LineNr">260 </span>    68/push  <a href='108write.subx.html#L151'>_test-stream</a>/imm32
<span id="L261" class="LineNr">261 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L262" class="LineNr">262 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L263" class="LineNr">263 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L264" class="LineNr">264 </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="L265" class="LineNr">265 </span>    <span class="subxComment"># append-byte(_test-stream, 'A')</span>
<span id="L266" class="LineNr">266 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L267" class="LineNr">267 </span>    68/push  0x41/imm32
<span id="L268" class="LineNr">268 </span>    68/push  <a href='108write.subx.html#L151'>_test-stream</a>/imm32
<span id="L269" class="LineNr">269 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L270" class="LineNr">270 </span>    e8/call  <a href='115write-byte.subx.html#L208'>append-byte</a>/disp32
<span id="L271" class="LineNr">271 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L272" class="LineNr">272 </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="L273" class="LineNr">273 </span>    <span class="subxComment"># check-stream-equal(_test-stream, &quot;A&quot;, msg)</span>
<span id="L274" class="LineNr">274 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L275" class="LineNr">275 </span>    68/push  <span class="Constant">&quot;F - test-append-byte-single&quot;</span>/imm32
<span id="L276" class="LineNr">276 </span>    68/push  <span class="Constant">&quot;A&quot;</span>/imm32
<span id="L277" class="LineNr">277 </span>    68/push  <a href='108write.subx.html#L151'>_test-stream</a>/imm32
<span id="L278" class="LineNr">278 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L279" class="LineNr">279 </span>    e8/call  <a href='109stream-equal.subx.html#L194'>check-stream-equal</a>/disp32
<span id="L280" class="LineNr">280 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L281" class="LineNr">281 </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="L282" class="LineNr">282 </span>    <span class="subxS1Comment"># . end</span>
<span id="L283" class="LineNr">283 </span>    c3/return
<span id="L284" class="LineNr">284 </span>
<span id="L285" class="LineNr">285 </span>== data
<span id="L286" class="LineNr">286 </span>
<span id="L287" class="LineNr">287 </span><span class="subxMinorFunction">_test-output-stream</span>:  <span class="subxComment"># (stream byte)</span>
<span id="L288" class="LineNr">288 </span>    <span class="subxComment"># current write index</span>
<span id="L289" class="LineNr">289 </span>    0/imm32
<span id="L290" class="LineNr">290 </span>    <span class="subxComment"># current read index</span>
<span id="L291" class="LineNr">291 </span>    0/imm32
<span id="L292" class="LineNr">292 </span>    <span class="subxComment"># size</span>
<span id="L293" class="LineNr">293 </span>    0x800/imm32  <span class="subxComment"># 2048 bytes</span>
<span id="L294" class="LineNr">294 </span>    <span class="subxComment"># data (128 lines x 16 bytes/line)</span>
<span id="L295" class="LineNr">295 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L296" class="LineNr">296 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L297" class="LineNr">297 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<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>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L331" class="LineNr">331 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L332" class="LineNr">332 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L333" class="LineNr">333 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L334" class="LineNr">334 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L335" class="LineNr">335 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L336" class="LineNr">336 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L337" class="LineNr">337 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L338" class="LineNr">338 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L339" class="LineNr">339 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L340" class="LineNr">340 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L341" class="LineNr">341 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L342" class="LineNr">342 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L343" class="LineNr">343 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L344" class="LineNr">344 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L345" class="LineNr">345 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L346" class="LineNr">346 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L347" class="LineNr">347 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L348" class="LineNr">348 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L349" class="LineNr">349 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L350" class="LineNr">350 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L351" class="LineNr">351 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<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>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L361" class="LineNr">361 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L362" class="LineNr">362 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L363" class="LineNr">363 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L364" class="LineNr">364 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L365" class="LineNr">365 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L366" class="LineNr">366 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L367" class="LineNr">367 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L368" class="LineNr">368 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L369" class="LineNr">369 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L370" class="LineNr">370 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L371" class="LineNr">371 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L372" class="LineNr">372 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L373" class="LineNr">373 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L374" class="LineNr">374 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L375" class="LineNr">375 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L376" class="LineNr">376 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L377" class="LineNr">377 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L378" class="LineNr">378 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L379" class="LineNr">379 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L380" class="LineNr">380 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L381" class="LineNr">381 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L382" class="LineNr">382 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L383" class="LineNr">383 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L384" class="LineNr">384 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L385" class="LineNr">385 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L386" class="LineNr">386 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L387" class="LineNr">387 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L388" class="LineNr">388 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L389" class="LineNr">389 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L390" class="LineNr">390 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L391" class="LineNr">391 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L392" class="LineNr">392 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L393" class="LineNr">393 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L394" class="LineNr">394 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L395" class="LineNr">395 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L396" class="LineNr">396 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L397" class="LineNr">397 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L398" class="LineNr">398 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L399" class="LineNr">399 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L400" class="LineNr">400 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L401" class="LineNr">401 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L402" class="LineNr">402 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L403" class="LineNr">403 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L404" class="LineNr">404 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L405" class="LineNr">405 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L406" class="LineNr">406 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L407" class="LineNr">407 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L408" class="LineNr">408 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L409" class="LineNr">409 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L410" class="LineNr">410 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L411" class="LineNr">411 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L412" class="LineNr">412 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L413" class="LineNr">413 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L414" class="LineNr">414 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L415" class="LineNr">415 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L416" class="LineNr">416 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L417" class="LineNr">417 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L418" class="LineNr">418 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L419" class="LineNr">419 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L420" class="LineNr">420 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L421" class="LineNr">421 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L422" class="LineNr">422 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L423" class="LineNr">423 </span>
<span id="L424" class="LineNr">424 </span><span class="subxComment"># a test buffered file for _test-output-stream</span>
<span id="L425" class="LineNr">425 </span><span class="subxMinorFunction">_test-output-buffered-file</span>:  <span class="subxComment"># buffered-file</span>
<span id="L426" class="LineNr">426 </span>    <span class="subxComment"># file descriptor or (addr stream byte)</span>
<span id="L427" class="LineNr">427 </span>    <a href='115write-byte.subx.html#L287'>_test-output-stream</a>/imm32
<span id="L428" class="LineNr">428 </span><span class="Constant">$_test-output-buffered-file-&gt;buffer</span>:
<span id="L429" class="LineNr">429 </span>    <span class="subxComment"># current write index</span>
<span id="L430" class="LineNr">430 </span>    0/imm32
<span id="L431" class="LineNr">431 </span>    <span class="subxComment"># current read index</span>
<span id="L432" class="LineNr">432 </span>    0/imm32
<span id="L433" class="LineNr">433 </span>    <span class="subxComment"># size</span>
<span id="L434" class="LineNr">434 </span>    6/imm32
<span id="L435" class="LineNr">435 </span>    <span class="subxComment"># data</span>
<span id="L436" class="LineNr">436 </span>    00 00 00 00 00 00  <span class="subxComment"># 6 bytes</span>
<span id="L437" class="LineNr">437 </span>
<span id="L438" class="LineNr">438 </span><span class="subxMinorFunction">_test-error-stream</span>:  <span class="subxComment"># (stream byte)</span>
<span id="L439" class="LineNr">439 </span>    <span class="subxComment"># current write index</span>
<span id="L440" class="LineNr">440 </span>    0/imm32
<span id="L441" class="LineNr">441 </span>    <span class="subxComment"># current read index</span>
<span id="L442" class="LineNr">442 </span>    0/imm32
<span id="L443" class="LineNr">443 </span>    <span class="subxComment"># line</span>
<span id="L444" class="LineNr">444 </span>    0x100/imm32  <span class="subxComment"># 256 bytes</span>
<span id="L445" class="LineNr">445 </span>    <span class="subxComment"># data (16 lines x 16 bytes/line)</span>
<span id="L446" class="LineNr">446 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L447" class="LineNr">447 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L448" class="LineNr">448 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L449" class="LineNr">449 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L450" class="LineNr">450 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L451" class="LineNr">451 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L452" class="LineNr">452 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L453" class="LineNr">453 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L454" class="LineNr">454 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L455" class="LineNr">455 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L456" class="LineNr">456 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L457" class="LineNr">457 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L458" class="LineNr">458 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L459" class="LineNr">459 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L460" class="LineNr">460 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L461" class="LineNr">461 </span>    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L462" class="LineNr">462 </span>
<span id="L463" class="LineNr">463 </span><span class="subxComment"># a test buffered file for _test-error-stream</span>
<span id="L464" class="LineNr">464 </span><span class="subxMinorFunction">_test-error-buffered-file</span>:  <span class="subxComment"># buffered-file</span>
<span id="L465" class="LineNr">465 </span>    <span class="subxComment"># file descriptor or (addr stream byte)</span>
<span id="L466" class="LineNr">466 </span>    <a href='115write-byte.subx.html#L438'>_test-error-stream</a>/imm32
<span id="L467" class="LineNr">467 </span><span class="Constant">$_test-error-buffered-file-&gt;buffer</span>:
<span id="L468" class="LineNr">468 </span>    <span class="subxComment"># current write index</span>
<span id="L469" class="LineNr">469 </span>    0/imm32
<span id="L470" class="LineNr">470 </span>    <span class="subxComment"># current read index</span>
<span id="L471" class="LineNr">471 </span>    0/imm32
<span id="L472" class="LineNr">472 </span>    <span class="subxComment"># size</span>
<span id="L473" class="LineNr">473 </span>    6/imm32
<span id="L474" class="LineNr">474 </span>    <span class="subxComment"># data</span>
<span id="L475" class="LineNr">475 </span>    00 00 00 00 00 00  <span class="subxComment"># 6 bytes</span>
<span id="L476" class="LineNr">476 </span>
<span id="L477" class="LineNr">477 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->