From 04f2de0478f8924fecee363057c208434f32a119 Mon Sep 17 00:00:00 2001 From: Ralph Ronnquist Date: Fri, 11 Jun 2021 19:53:18 +1000 Subject: [PATCH] upgrade --- reference.html | 118 ++++++++++++++++++++++++++++++++++++++++++++----- rrqforth | Bin 2151084 -> 2151114 bytes 2 files changed, 108 insertions(+), 10 deletions(-) diff --git a/reference.html b/reference.html index 988e551..04da373 100644 --- a/reference.html +++ b/reference.html @@ -776,7 +776,7 @@ asciidoc.install(); @n++   @n--   C,   -S"   +S"   >R   R@   R>   @@ -840,6 +840,7 @@ asciidoc.install(); IMMEDIATE   INPUT  

LIT   +LIT-STRING   LOAD-BUFFER-SIZE   LOAD-FILE  

MAIN-ARGS   @@ -868,6 +869,7 @@ asciidoc.install(); STDIN   STREAM   STREAM-NCHARS   +STR>TEMP   STRLEN   STRNCMP   STRNCPY   @@ -875,6 +877,8 @@ asciidoc.install(); SYSTEM  

TELL   .TEMP   +TEMP   +TEMPSPACE   TERMINATE0   TFA>CFA   TFA>DFA   @@ -2542,25 +2546,43 @@ _______________________________________________________

-

Word: S"

+

Word: LIT-STRING

Data stack: ( -- chars* n )
-

"S"" is a function word that pushes the [n:char] pointer for a string -inlined subsequently to it in the containing definition. This is -similar to LIT but for a string literal.

+

"LIT-STRING" is a function word that pushes the char* and length n of +a subsequent inline string, then advances execution to continue after +the string. This is similar to LIT but for a block literal.

+

Note that the inlined byte count includes the terminating NUL byte.

-
Definition concept for LIT
-

: LIT R> DUP @ 2DUP + 8 + >R SWAP 8 + SWAP ;

+
Definition concept for LIT-STRING
+

: LIT-STRING R@ DUP @ 8 + R@ @ 2DUP + R> + >R 1 - ;

_______________________________________________________
+

+
+
+

Word: S"

+
+
+
Data stack: ( -- )  Input stream: " chars"
+
+

"S"" is an immediate function word that compiles the subseqent +characters up to terminating double-quote into the current definition, +preceded by a LIT-STRING cell, and the count of +bytes scanned. The inline text includes a terminating NUL character +which also is included in the inlined count.

+

Note that "S"" uses " for reading the string.

+
+_______________________________________________________ +

@@ -3070,8 +3092,9 @@ _______________________________________________________
Data stack: ( -- )
-

";" (semi-colon) is a function word that ends a new forth definition -by means of adding an EXIT

+

";" (semi-colon) is an immediate function word that ends a new forth +definition by means of adding an EXIT cell, then changing +<<p_state,STATE> to interpreting.

@@ -3236,6 +3259,29 @@ stream (or filling it by reading the backing file).

_______________________________________________________
+

+
+
+

Word: STR>TEMP

+
+
+

Data stack: ( char* n — char* n )

+
+

"STR>TEMP" is a function word that copies a given string plus a +terminating NUL character into a TEMPSPACE snippet, +all preceded by a length cell. It returns a pointer for to the text in +the snippet and its length, excluding the NUL character at end and the +length cell before tie text.

+
+
Layout for copied string
+
+
        length: 8 bytes
+returned char*: n bytes
+           nul: 1 byte
+
+
+_______________________________________________________ +

@@ -3321,6 +3367,58 @@ descriptor 1).

_______________________________________________________
+

+
+
+

Word: TEMP

+
+
+

Data stack: ( size — addr )

+
+

"TEMP" is a function word that "allocates" a TEMPSPACE +area of given size and returns its base address. The allocation is +temporary and only valid until there is a later allocation that +overruns this area.

+

Allocations are done in succession until the requested size overruns +the TEMPSPACE. If so, the allocation pointer is reset +and the space is allocated from start again. This is all intended for +small and short-lived data areas.

+
+_______________________________________________________ +
+

+
+
+

Word: TEMPSPACE

+
+
+
Data stack: ( -- a )
+
+

"TEMPSPACE" is a variable word that holds three cells the for managing +"temporary memory":

+
    +
  • +

    +the size of the temporary memory space (default 104857600 bytes) +

    +
  • +
  • +

    +the base address for whole temporary memory area +

    +
  • +
  • +

    +the amount currently used +

    +
  • +
+

This memory is intended to be used by requesting snippets of memory in +a cyclic fashion via TEMP without concern about it possibly +overlapping a prior request.

+
+_______________________________________________________ +

@@ -3628,7 +3726,7 @@ is deepest.

diff --git a/rrqforth b/rrqforth index a5f2ecf8218b961efe3b78e8188ff50e5e32b67d..729f1bb4f4f0e974915eceba48699c6dda0a0dca 100755 GIT binary patch delta 11508 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 delta 11766 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 -- 2.39.2