From 426857d112aab766d577f58982141963952e49c8 Mon Sep 17 00:00:00 2001
From: Ralph Ronnquist <ralph.ronnquist@gmail.com>
Date: Sat, 5 Jun 2021 18:26:41 +1000
Subject: [PATCH] update

---
 reference.html | 171 ++++++++++++++++++++++++++++++++++++++++---------
 rrqforth       | Bin 2149290 -> 2150128 bytes
 2 files changed, 139 insertions(+), 32 deletions(-)

diff --git a/reference.html b/reference.html
index 609c422..9900bbd 100644
--- a/reference.html
+++ b/reference.html
@@ -780,7 +780,7 @@ asciidoc.install();
 <a href="#p_gtR">&gt;R</a> &#160;
 <a href="#p_Rget">R@</a> &#160;
 <a href="#p_Rgt">R&gt;</a> &#160;
-<a href="#p_rsp">R[n]</a> &#160;</p></div>
+<a href="#p_rbpn">R[n]</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#data_stack">DATA-STACK</a> &#160;
 <a href="#return_stack">RETURN-STACK</a> &#160;
 &#160;
@@ -826,6 +826,8 @@ asciidoc.install();
 <a href="#p_execute">EXECUTE</a> &#160;
 <a href="#p_exit">EXIT</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_false">FALSE</a> &#160;
+<a href="#p_fdemit">FDEMIT</a> &#160;
+<a href="#p_fdtell">FDTELL</a> &#160;
 <a href="#p_find">FIND</a> &#160;
 <a href="#p_forth">FORTH</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_here">HERE</a> &#160;
@@ -836,7 +838,8 @@ asciidoc.install();
 <a href="#p_immediate">IMMEDIATE</a> &#160;
 <a href="#p_input">INPUT</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_literal">LIT</a> &#160;
-<a href="#p_load_file_quote">LOAD-FILE"</a> &#160;</p></div>
+<a href="#p_load_buffer_size">LOAD-BUFFER-SIZE</a> &#160;
+<a href="#p_load_file">LOAD-FILE</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_args">MAIN-ARGS</a> &#160;
 <a href="#p_malloc">MALLOC</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_negate">NEGATE</a> &#160;
@@ -844,7 +847,7 @@ asciidoc.install();
 <a href="#p_nl">NL</a> &#160;
 <a href="#p_not">NOT</a> &#160;
 <a href="#p_number">NUMBER</a> &#160;</p></div>
-<div class="paragraph"><p><a href="#p_open_file_quote">OPEN-FILE"</a> &#160;
+<div class="paragraph"><p><a href="#p_open_file">OPEN-FILE</a> &#160;
 <a href="#p_or">OR</a> &#160;
 <a href="#p_over">OVER</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_pad">PAD</a> &#160;
@@ -855,7 +858,8 @@ asciidoc.install();
 <a href="#p_read_word">READ-WORD</a> &#160;
 <a href="#p_realloc">REALLOC</a> &#160;
 <a href="#p_roll">ROLL</a> &#160;
-<a href="#p_rot">ROT</a> &#160;</p></div>
+<a href="#p_rot">ROT</a> &#160;
+<a href="#p_rbp">RSP</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_sp">SP</a> &#160;
 <a href="#p_state">STATE</a> &#160;
 <a href="#p_stdin">STDIN</a> &#160;
@@ -876,6 +880,7 @@ asciidoc.install();
 <a href="#p_this_word">THIS-WORD</a> &#160;
 <a href="#p_true">TRUE</a> &#160;
 <a href="#p_tuck">TUCK</a> &#160;</p></div>
+<div class="paragraph"><p><a href="#p_unstream">UNSTREAM</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_verboseQ">VERBOSE?</a> &#160;</p></div>
 <div class="paragraph"><p><a href="#p_within">WITHIN</a> &#160;
 <a href="#p_words">WORDS</a> &#160;</p></div>
@@ -2109,6 +2114,33 @@ _______________________________________________________
 <div style="text-align:center">
 _______________________________________________________
 </div>
+<div class="paragraph"><p><a id="p_fdemit"></a></p></div>
+</div>
+<div class="sect2">
+<h3 id="_word_fdemit">Word: FDEMIT</h3>
+<div class="literalblock">
+<div class="content">
+<pre><code>Data stack: ( c fd -- )</code></pre>
+</div></div>
+<div class="paragraph"><p>"FDEMIT" is a function word that puts the given character code to the
+given file descriptor. The character is the least significant byte of
+the data stack cell.</p></div>
+<div style="text-align:center">
+_______________________________________________________
+</div>
+<div class="paragraph"><p><a id="p_fdtell"></a></p></div>
+</div>
+<div class="sect2">
+<h3 id="_word_fdtell">Word: FDTELL</h3>
+<div class="literalblock">
+<div class="content">
+<pre><code>Data stack: ( char* n fd -- )</code></pre>
+</div></div>
+<div class="paragraph"><p>"FDTELL" is a function word that prints a string to the given file
+descriptor.</p></div>
+<div style="text-align:center">
+_______________________________________________________
+</div>
 <div class="paragraph"><p><a id="p_find"></a></p></div>
 </div>
 <div class="sect2">
@@ -2467,19 +2499,35 @@ similar to <a href="#p_lit">LIT</a> but for a string literal.</p></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
-<div class="paragraph"><p><a id="p_load_file_quote"></a></p></div>
+<div class="paragraph"><p><a id="p_load_buffer_size"></a></p></div>
+</div>
+<div class="sect2">
+<h3 id="_word_load_buffer_size">Word: LOAD-BUFFER-SIZE</h3>
+<div class="literalblock">
+<div class="content">
+<pre><code>data stack: ( -- a )</code></pre>
+</div></div>
+<div class="paragraph"><p>"LOAD-BUFFER-SIZE" is a variable word telling the buffer size in bytes
+that <a href="#p_load_file">LOAD-FILE</a> should use.</p></div>
+<div style="text-align:center">
+_______________________________________________________
+</div>
+<div class="paragraph"><p><a id="p_load_file"></a></p></div>
 </div>
 <div class="sect2">
-<h3 id="_word_load_file">Word: LOAD-FILE"</h3>
+<h3 id="_word_load_file">Word: LOAD-FILE</h3>
 <div class="literalblock">
 <div class="content">
-<pre><code>data stack: ( "name" -- )</code></pre>
+<pre><code>data stack: ( chaz* -- * 0/1 )</code></pre>
 </div></div>
-<div class="paragraph"><p>"LOAD-FILE"" is a function word that opens a file via
-<a href="#p_open_file_quote">OPEN-FILE"</a>, allocates a stream buffer of 15000
-bytes for reading it, saves the stream pointer as value for the newly
-created filename variable, and then it invokes
-<a href="#p_evaluate_stream">EVALUATE-STREAM</a> for processing the file.</p></div>
+<div class="paragraph"><p>"LOAD-FILE" is a function word that evaluates a text file. It opens a
+file via <a href="#p_open_file">OPEN-FILE</a> and sets up a stream with a
+buffer of <a href="#p_load_buffer_size">LOAD-BUFFER-SIZE</a> bytes for
+reading it. The stream is passed to
+<a href="#p_evaluate_stream">EVALUATE-STREAM</a> for processing its words. Upon
+its return the file is closed and the stream memory is reclaimed, and
+then the function returns whatever
+<a href="#p_evaluate_stream">EVALUATE-STREAM</a> returns.</p></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
@@ -2626,17 +2674,17 @@ integers.</p></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
-<div class="paragraph"><p><a id="p_open_file_quote"></a></p></div>
+<div class="paragraph"><p><a id="p_open_file"></a></p></div>
 </div>
 <div class="sect2">
-<h3 id="_word_open_file">Word: OPEN-FILE"</h3>
+<h3 id="_word_open_file">Word: OPEN-FILE</h3>
 <div class="literalblock">
 <div class="content">
-<pre><code>Data stack: ( "name" -- fd )</code></pre>
+<pre><code>Data stack: ( chaz* -- fd )</code></pre>
 </div></div>
-<div class="paragraph"><p>"OPEN-FILE"" is a function word that reads the intputstream for a
-filename, adds that to the dictionary as a no-content variable, opens
-that file and returns the input file descriptor.</p></div>
+<div class="paragraph"><p>"OPEN-FILE" is a function word that opens the file named by the zero
+terminated character string and returns the file descriptor, or if
+less than 0, the system call error code.</p></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
@@ -2781,6 +2829,40 @@ word on the input stream and pushes its cfa.</p></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
+<div class="paragraph"><p><a id="p_rbp"></a></p></div>
+</div>
+<div class="sect2">
+<h3 id="_word_rsp">Word: RSP</h3>
+<div class="literalblock">
+<div class="content">
+<pre><code>Data stack: ( -- a )</code></pre>
+</div></div>
+<div class="paragraph"><p>"RSP" is a function word that pushes the return stack pointer value
+onto the data stack.</p></div>
+<div style="text-align:center">
+_______________________________________________________
+</div>
+<div class="paragraph"><p><a id="p_rbpn"></a></p></div>
+</div>
+<div class="sect2">
+<h3 id="_word_r_n">Word: R[n]</h3>
+<div class="literalblock">
+<div class="content">
+<pre><code>Data stack: ( n -- a )</code></pre>
+</div></div>
+<div class="paragraph"><p>"R[n]" is a function word that pushes the address for the n:th cell on
+the top return stack value onto the data stack.</p></div>
+<div class="exampleblock">
+<div class="content">
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Defintion concept for R[n]</div>
+<div class="paragraph"><p>( n&#8201;&#8212;&#8201;a ) : R[n] 8 * RSP + ;</p></div>
+</div></div>
+</div></div>
+<div style="text-align:center">
+_______________________________________________________
+</div>
 <div class="paragraph"><p><a id="p_read_stream_char"></a></p></div>
 </div>
 <div class="sect2">
@@ -2812,6 +2894,18 @@ separated word from the given stream and returns the [n:char*] duoble
 cell pointer for it. The characters of the word are copied to
 <a href="#p_pad">PAD</a>, and there is a limit of 1024 characters.</p></div>
 <div class="paragraph"><p>At the end of the stream READ-WORD returns 0 length.</p></div>
+<div class="exampleblock">
+<div class="title">Special syntax 1: Whitespace</div>
+<div class="content">
+<div class="paragraph"><p>All character codes less or equal to 32 are regarded as "whitespace".</p></div>
+</div></div>
+<div class="exampleblock">
+<div class="title">Special syntax 2: Rest-of-line comment</div>
+<div class="content">
+<div class="paragraph"><p>The "#" character following whitespace starts a line comment and the
+rest of the line is ignored. Note that this is also recognised with
+<a href="#p_lparen">parethesis commenting</a>.</p></div>
+</div></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
@@ -2892,19 +2986,6 @@ and the first becomes the second.</p></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
-<div class="paragraph"><p><a id="p_rsp"></a></p></div>
-</div>
-<div class="sect2">
-<h3 id="_word_r_n">Word: R[n]</h3>
-<div class="literalblock">
-<div class="content">
-<pre><code>Data stack: ( n -- a )</code></pre>
-</div></div>
-<div class="paragraph"><p>"R[n]" is a function word that pushes the address for the n:th cell on
-the top return stack value onto the data stack.</p></div>
-<div style="text-align:center">
-_______________________________________________________
-</div>
 <div class="paragraph"><p><a id="p_semicolon"></a></p></div>
 </div>
 <div class="sect2">
@@ -3338,8 +3419,34 @@ values are unequal, and 0 otherwise.</p></div>
 <div style="text-align:center">
 _______________________________________________________
 </div>
+<div class="paragraph"><p><a id="p_unstream"></a></p></div>
+</div>
+<div class="sect2">
+<h3 id="_word_unstream">Word: UNSTREAM</h3>
+<div class="literalblock">
+<div class="content">
+<pre><code>Data stack: ( stream* -- )</code></pre>
+</div></div>
+<div class="paragraph"><p>"UNSTREAM" is a function word that releases the memory allocated for a
+stream, and closes the associated file if it&#8217;s a file stream.</p></div>
+<div class="sect3">
+<h4 id="_file_descriptor_backed_stream_2">File descriptor backed stream</h4>
+<div class="paragraph"><p>This kind of stream has the stream header as a prefix within the
+allocated memory. Thus, stream* is the base address for the memory to
+reclaim, and the size of this is determined from the cell at (stream*
++ 16) plus the 32 bytes head itself.</p></div>
+</div>
+<div class="sect3">
+<h4 id="_memory_block_backed_stream_2">Memory block backed STREAM</h4>
+<div class="paragraph"><p>This kind of stream has a separate header which points at the memory
+area to reclaim. The cell at stream* is the base address, and the cell
+at (stream* + 16) is its size.</p></div>
+<div style="text-align:center">
+_______________________________________________________
+</div>
 <div class="paragraph"><p><a id="p_verboseQ"></a></p></div>
 </div>
+</div>
 <div class="sect2">
 <h3 id="_word_verbose">Word: VERBOSE?</h3>
 <div class="literalblock">
@@ -3429,7 +3536,7 @@ is deepest.</p></div>
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-04 18:26:45 AEST
+ 2021-06-05 17:42:39 AEST
 </div>
 </div>
 </body>
diff --git a/rrqforth b/rrqforth
index 8c3fc39aa6bb367e89d836a8087b234aa7885bea..e3085861b8c6286da854bac80b728994aa1d9c5d 100755
GIT binary patch
delta 6578
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
Gjr|7+SS?Nf

delta 5831
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

-- 
2.39.5