Changelog for dstrings.fs, dstrings-test.fs, trydstrings.fs.

Unattributed changes are by the initial author, David N. Williams.  The
revision date in the source file may be more recent than the most recent
date here, when only cosmetic changes have been made.

Version 1.0.0
27Aug10 * Added $FSP! to dstrings-ext.c, dstrings-ext.h, dstrings.fs,
	  and dstrings-words.txt, for use by the new dstester.  Revised
	  EMPTY-$FS in dstrings-test/fs to use it.  An occasion to start
	  a general review, and bump the revision number to indicate
	  stability.
 8Sep10 * Revised dstrings-test to work with the new dstester, replacing
	  ${{ and }}$ by ={ and }=.
 9Sep10 * Updated dstrings-test.fs conditional reporting.
	* Replaced ABORT" in dstrings.fs ARGS{ by -14 THROW.
	* Added CATCH versions of tests for nonoverflow exceptions.
10Sep10 * Added conditional testing switch for dstrings-ext.c versus
	  dstrings.fs exception numbers.
	* Revised underflow message for $FRAME in dstrings.fs to agree
	  with dstrings-ext.c.
	* Added -14 THROW and Replaced "*** missing ;" by "***missing
	  semicolon" in COMPILE-WITH-$ARGS.
	* Replaced ABORT" in MAKE-$SPACE by ( ior) THROW.
	* Changed ( ior) DROP to ( ior) THROW in tests.
11Sep10 * Devised small string space for testing overflows that should
	  work with both 32- and 64-bits.
	* Added quite a few overflow tests.
14Sep10 * Finished overflow tests.
15Sep10 * Revised $CONSTANT to make a copy in data space when the input
	  string is not external.  Suggested by Krishna Myneni.  Updated
	  documentation and added tests.
	* Added "string count too large" exception tests.
	* Tests passed (32-bit) with gforth, pfe, and iForth, including
	  byte- and cell-sized count field.
	* Loading of ttester/ttester-xf no longer in dstester.fs, put in
	  dstester-test.fs.
	* Released.
19Sep10 * Added tests for $CONSTANT copy garbage marking.
20Sep10 * Revised $CONSTANT stack and spec comments.
29Oct10 * Fixed typo in DROP-$FRAME stack effect.
 9Feb18 * Removed built-in terminal display in dstrings-test.fs in favor
	  of tester-display.fs, reorganized setup logic, updated various
	  words different in tester-display.fs.
11Feb18 * Improved exception tests in dstrings-test.fs and added tests
	  for 3 new ones.

Version 0.7.6
31Aug08 * Adjusted trydstrings.fs and dstrings-test.fs for
	  renaming of CAT$@ as CAT$P@ in dstrings-ext.c.
	* Added deprecating remarks for char-sized count field.
	* Revised cats so they do nothing on the empty string
	  but drop it (in particular, don't start a cat).
	  Added tests to dstrings-test.fs to check that.
	* Fixed bug in $SWAP, where $2 was used as a nonexistent
	  dummy name, which translated to the number 2.
 1Sep08 * Added $EXCHANGE and basic tests.
	* Added relinking tests for $SWAP and $EXCHANGE.
 2Sep08 * Revised DROP-$FRAME to allow top string frame item
	  below string stack top, using $EXCHANGE.  Updated
	  documentation.
	* Added tests for new DROP-$FRAME functionality,
	  including a $ARG{ test for the GEORGE example in the
	  docs.
 4Sep08 * Improved $EXCHANGE code.
15Sep08 * Revised 3ARGS in dstrings-test.fs to keep strings on
	  the stack above the args while invoking them.
16Sep08 * Removed STRUCT to avoid a gforth "redefined" message.
	* Krishna Myneni reported dstrings-test.fs failure with
	  his 64-bit gforth.  Fixed by adding a switch for the
	  string buffer size, with the size based on his tests,
	  26 cells for 64 bits and the previous 28 cells for 32
	  bits.
	* Expressed DEFAULT-/$BUF in cells.
17Sep08 * Removed SKIP, SCAN, etc., words used to define
	  PARSE-NAME, in favor of conditionally compiled Forth
	  200x reference implementation of PARSE-NAME, to stifle
	  "redefined" messages from gforth.
18Sep08 * Krishna Myneni reported that VFXforth for linux does
	  not interpret "0." --  replaced it by by 0 0.
30Sep08 * Fixed a bug in $! not affecting pfe or gforth:  >R...R>
	  used with locals, as yet two more char impurities.
 2Oct08 * Removed unused VAR2$ from dstrings-test.fs.
20Aug10 * Extracted dstester.fs items into dstester.log.
27Aug10 * In dstrings-words.txt:  moved $FBRK end of string
	  space structure field list, bumped version to 0.7.6.

Version 0.7.5
22Aug08 * Renamed:
	    old		new
	    MPLACE	(M!)
	    SM,		M,S
	    $S>-COPY	$,S
	    CAT		$+
	    CAT"	$+"
	    CAT`	$+`
	    S-CAT	S+
	    PARSE-CAT	PARSE-S+
	  These names are in sync with the corresponding pfe
	  dstrings-ext.c, and dstrings.html has been updated.

Version 0.7.4
29Jul08 * Fixed a bug in CAT.  Initiating a cat should always
	  copy, not just when the string is external.  The pfe
	  implementation didn't have the bug.
	* Added test for that in dstrings-test.fs.  Made the
	  license for dstrings-test.fs public domain.
30Jul08	* Moved NUM>S and [N] to UTILITY WORDS section.
	* Added PARSING-LIB-S switch to skip compiling parsing
	  words when either parsing.fs or the corresponding pfe
	  module is loaded.
	* Added utility word 2RDROP.
31Jul08 * Rewrote PARSE>S and PARSE>$ to avoid EMBED-M$, and
	  deleted EMBED-M$.
 1Aug08 * Tweaked for character purity.
	* Replaced qd structures with 200x-like structures.
	* Renamed CAT$@ as CAT$P@.
	* Smoothed conditional loading in dstrings-test.fs and
	  trydstrings.fs
 2Aug08 * Added table of contents.
 7Aug08 * Made 0FILL-ALIGNED character clean.
13Aug08 * Made $GARBAGE? flag output well formed, as it is in
	  dstrings-ext.c and dstrings.html.  Removed >FLAG from
	  dstrings-test.fs.

Version 0.7.3
 8Oct06 * Added $GC-LOCK@ and $GC-LOCK!, with tests in
 	  dstrings-test.fs.
 9Oct06 * Revised some comments.

Version 0.7.2
16Apr04 * Started another attempt at $ARGS{, called
          "intercept.fs", rethinking how to intercept args and
          compile the remaining normal words in a definition.
27Apr04  During this period:
        * Improved Forth string support.
        * Tried a scheme based on a private INTERCEPT word
          list, where dummy arguments had to be declared as
          vectors outside the definition, with values for
          compilation to be filled in by ARGS{.  Collapsed of
          its own weight.
        * Did S`, $-DELIM, and $`.  Need to think about
          interpretation semantics for CAT" and CAT`.
        * Got suckered into trying EVALUATE again on the
          normal, nonargument words, but soon rediscovered that
          can't work with parsing words.
        * Came across Leo Wong's scheme using POSTPONE for
          parsing words.  That requires intercepting every
          allowed parsing word, but otherwise works fine.  The
          scheme uses PREPARSE, which we also learned from Leo
          Wong's code.
        * Coded SCASE, SOF, ENDSOF, ENDSCASE for Forth string
          cases by imitating the implementation for normal
          cases in ANSI X3.215-1994, after a more complicated
          false start.
        * Defined [N] to compile a number from the data stack. 
          The idea came from Leo Wong's PARSE-N.
        * Resulting ARGS{ passed basic tests.  So did the much
          simpler "egg" example.
28Apr04 * Moved the new ARGS{ support back into dstrings.fs,
          and split out the egg example.
12May04 * Cleaned up comments.
13May04 * Removed pronunciations.
        * Added interpretation semantics for CAT" and CAT`.
        * Organized dstrings-words.txt into public and system
          categories.
14May04 * Passed final tests.  Candidate for release.
        * Sigh...  Forgot about dstrings-test.fs.
        * Started dstrings.html revision and reorganization of
          dstrings-words.txt.  Time consuming.
15May04 * Added ?$FRAME-UNDER.  Made TH-$ARG throw an error for
          no args.
        * Made ENDCAT upper case.
        * Went around with transience of interpreted literal
          strings. Not sure it's a good idea, but we leave it
          that way for now.  We especially see no use for
          transience with literal mstrings.
        * Finished dstrings.html revision.  This needs to be
          automated!
16May04 * Started adding new words to dstrings-test.fs.  Found
          a bug in the interpreted version of S`, actually in
          S-DELIM.
 5Jun04 * Revised description of SM, in dstrings.html and
          dstrings.fs.
        * Additions to dstrings-test.fs up to args.  Still have
          doubts about allowing transience for $", etc.,
          especially considering uses with ARGS{ words.
        * Bug in the documentation of ARGS{ -- ENDCAT can only
          be used with care in ARGS{ words so as not to add to
          the stack before the frame is dropped.  Rejected
          adding END-ARGS to explicitly drop the frame.  That
          would allow multiple ARGS{ in a word, but such
          multiples would be bad factoring anyway.
 6Jun04 * Renamed S-DELIM as PARSE>S and $-DELIM as PARSE>$.
        * Replaced "cell alignment" by "address alignment" in
          docs.
        * Finished dstrings-test.fs, except maybe for some of
          the extra forth-string extension words.  ARGS{ test
          revealed a bug in NEXT-WORD.
10Jun04 * Changed "Forth string" to "ANS Forth string", also in
          dstrings.html.  Rejected "fstring" as shorthand for
          that.
11Jun04 * Changed "+n" to "u".
12Jun04 * Changed (0$SPACE) to 0$SPACE.
14Jun04 * Rearranged conditional compile in dstrings-test.fs to
          accomodate /MCOUNT in the pfe case.  Removed a
          pronunciation in dstrings.fs that slipped through.
        * Included a specification caveat that the format of
          the string stored by PARSE>S is implementation
          dependent.  Fixed dstrings.fs to always store a
          mstring.
15Jun04 * Changed MPLACE-0FILL to MPLACE.  Promoted MPLACE to
          dstrings.html.
16Jun04 * Fixed dstrings-test.fs to work with both char and
          long flags.
11Jul04 * Bug in dstrings-ext.c, apparently in $!, revealed by
          dstrings-test.fs.
12Jul04 * Fixed above bug.  Changed
            newstr = (MStr*) (backlink + offsetof (DStr, count));
          to
            (char*) newstr = (char*) ((char*) backlink
	                    + offsetof (DStr, count));
	* Changed TH-$ARG to throw an error if the top frame
          contains too few strings.
13Jul04 * Changed spec for ARGS{ in dstrings.html to read
          across lines, and updated the copy in dstrings.fs.
        * Fixed dstrings-test.fs to work better with both char
          and long flags.
        * Updated dstrings-words.txt.
14Jul04 * Committed to nontransient, interpreted $" and $`; 
          removed $,$ from dstrings-test.fs.
        * Reorganized dstrings-words.txt and updated
          dstrings.html and dstrings.fs accordingly. 
          Discovered that $ARGS{ in dstrings.html is actually
          ARGS{ everywhere else, and often here as well.  We
          hereby replace ARGS{ by $ARGS{.
16Jul04 * Renamed IN$BUFFER as IN-$BUFFER.  Renamed /$FRAME as
          /$FRAME-ITEM, and promoted it to public words shared
          with pfe.
        * Added tests for EMPTY$ and \N$ to dstrings-test.fs. 
          It now tests all the words shared with pfe.  Removed
          any explicit dependence on CHAR-COUNT-FIELD?.
17Jul04 * Fixed a bug in the $FRAME underflow exception and an
          inadequacy in the corresponding test in
          dstrings-test.fs.
18Jul04 * Gforth revealed a bug in dstrings-test.fs, namely,
          S" Another short string." >$S, where the external
          string is clearly not measured.  Why did it work with
          pfe?  Replaced by a $" phrase.
20Jul04 * Fixed bug in COMPILE-WITH-$ARGS, failure to keep data
          stack out of the way of the control stack, revealed
          while updating hftrans.fs.
26Jul04 * Cosmetic changes, replaced remaining examples of
          "Forth string" by "ANS Forth string" where
          appropriate.
 9Sep04 * Fixed typo in dstester.fs comment.

Version 0.7.1
14Jun03 * Support for $ARGS{.
        * Realized again that EVALUATE methods aren't
          appropriate.  You really need to intercept inside
          the interpreter at the point where the next word is
          read from the input stream.  So it becomes political
          -- how to achieve a common practise for factoring and
          vectorizing INTERPRET, EVALUATE, and QUIT?
         * Not released.

Version 0.7.0
13Aug02 * Start from dstrings-ext.c, version 0.6.28.
19Mar03 * Revisit, using dstrings-ext.c version 0.6.29, and
          plain structures.
17Apr03 * Tested MAKE-$SPACE.  COLLECT-$GARBAGE  0STRINGS
          $GARBAGE?  $GC-ON  $GC-OFF  $UNUSED  $ROOM?  ?$ROOM
          $POP  $PUSH  ?$UNDERFLOW  $DROP
18Apr03 * SM,  MCOUNT  -MCOUNT  $"  $CONSTANT  EMPTY$  \N$
          $VARIABLE  $@  $!  IN$BUFFER?  ?CAT  $SP@  --$SP@
          $SP@++  /$STACK  ?/$STACK  $2DROP  $2DUP  $DEPTH 
          $DUP  $SWAP  $NIP
19Apr03 * Removed ?$UNDERFLOW in favor of CELL ?/$STACK.
        * Replaced $PUSH by $PUSH-EXT, expressed in terms of a
          nongc ($PUSH).  Fixed $@ accordingly.
        * $OVER  $PICK  $S>  $S>-COPY  $S@  $TUCK  >$S
20Apr03 * Added constant UCELL-MAX for conditional compilation.
        * ALIGNED-0FILL  $BREAKP@  $BREAKP!  $SP!  >$S-COPY  $.
          $TYPE  CAT$P@  ONTO-CAT$  CAT  S-CAT
21Apr03 * ENDCAT  PARSE-CAT  CAT"  CAT`
22Apr03 * $FSP@  $FSP!  $FBREAKP@  $FBREAKP!  $FRAME 
          DROP-$FRAME  FIND-ARG
23Apr03 * $FRAME-DEPTH  $BUFP@  /$BUF  $FSP0@  #$FRAMES 
          /$FRAME-STACK
 6May03 * Started coding ARGS{.  The algorithm intercepts
          args or semicolon and does the appropriate thing
          when they're found, otherwise evaluates the word.
 1Jun03 * Appear to have lost 6May03, due to unsystematic
          backups.  Restored to 23Apr03 from laptop.  Added
          default string space.
 5Jun03 * Started systematic debugging.  Bug in $!.  Rewrote
          string space structure accessors to use DSTRINGS.
 6Jun03 * More degugging.
        * Started dstester.fs version 0.9.0.
 7Jun03 * Finished dstester.fs
        * Started dstrings-test.fs version 0.9.0.  Uncovered
          more bugs.
        * Found a way to do compile mode $" in ANS Forth, using
          EMBED-M$.
 8Jun03 * Continued with dstrings-test.fs.
        * Enforced universal 0 fill to alignment for mstrings.
        * Removed MAX-DATA-MSTRING.
 9Jun03 * When testing with gforth, found that
            S" hello" >$S $S>-COPY
          does not work.  Traced it to SM,.  Something
          unexpected about the S" transient region, because
          using >$S-COPY instead of >$S does work. 
          A.11.6.1.2165 says that standard words should not
          overwrite the S" transient region, so I don't know
          what's going on.  In fact it's not near HERE.
        * Continued with dstrings-test.fs.
        * Added EMPTY-$RESULTS to dstester.fs.
10Jun03 * Continued with dstrings-test.fs.  Added concatenation
          state to .$STAT.
        * Decoupled data and string error reports in
          dstester.fs.
11Jun03 * Continued with dstrings-test.fs.  Added #ERRORS to
          dstester.fs
        * Finished dstrings-test.fs except for $ARGS{, which is
          not in dstrings.fs yet.  All tests passed under pfe.
        * But not passed under gforth!  There was in fact a bug
          in COLLECT-$GARBAGE, a DO that should have been a
          ?DO. Gforth eventually trapped out of the runaway
          loop with "Invalid memory address".  Now both pfe and
          gforth pass.
        * Decided to postpone $ARGS{.
12Jun03 * Factored out $-delim from $".  Tested.
        * Testing with char-sized count revealed nasty bug in
          COLLECT-$GARBAGE, even for cell-sized counts, that (I
          think) was hidden by using garbage and live strings
          the same size in the tests.
        * Release without $ARGS{.