Release History for pForth - a Portable ANS-like Forth written in ANSI 'C'

Documentation for pForth at http://www.softsynth.com/pforth/

V27
    - Fixed REPOSITION-FILE FILE-SIZE and FILE-POSITION.
      They used to use single precision offset. Now use double as specified.
    - Delete object directories in Makefile clean.
    - Fixed "Issue 4: Filehandle remains locked upon INCLUDE error".
      http://code.google.com/p/pforth/issues/detail?id=4&can=1
    - Fixed scrambled HISTORY on 64-bit systems. Was using CELL+ but really needed 4 +.
    - Fixed floating point input. Now accepts "1E" as 1.0. Was Issue #2.
    - Fixed lots of warning and made code compatible with C89 and ANSI. Uses -pedantic.
    - Use fseek and ftell on WIN32 instead of fseeko and ftello.
    - Makefile is now more standard. Builds in same dir as Makefile. Uses CFLAGS etc.
    - Add support for console IO with _WATCOMC_
    - Internal CStringToForth and ForthStringToC now take a destination size for safety.
    - Run units tests for CStringToForth and ForthStringToC if PF_UNIT_TESTS is defined.

V26  5/20/2010
    - 64-bit support for M* UM/MOD etc by Aleksej Saushev. Thanks Aleksej!
    
V25  5/19/2010
    - Added 64-bit CELL support contributed by Aleksej Saushev. Thanks Aleksej!
    - Added "-x c" to Makefile CCOPTS to prevent confusion with C++
	- Allow space after -d command line option.
	- Restore normal tty mode if pForth dictionary loading fails.
	 
V24 2/20/09
	- Fixed Posix IO on Mac. ?TERMINAL was always returning true.
	- ACCCEPT now emits a space at end of line before output.
	- Fixed RESIZE because it was returning the wrong address.

V23 8/4/2008
	- Removed -v option from mkdir in build/unix/Makefile. It was not supported on FreeBSD.
	  Thank you Alexsej Saushev for reporting this.
	
V23  7/20/2008
    - Reorganized for Google Code project.
    
V22  (unreleased)
    - Added command line history and cursor control words.
	- Sped up UM* and M* by a factor of 3. Thanks to Steve Green for suggested algorithm.
	- Modified ACCEPT so that a line at the end of a file that does NOT have a line
	    terminator will now be processed.
	- Use _getch(), _putch(), and _kbhit() so that KEY, EMIT and ?TERMINAL will work on PC.
	- Fixed  : foo { -- } 55 ;  - Was entering local frame but not exiting. Now prints error.
    - Redefined MAKE_ID to protect it from 16 bit ints
    - John Providenza says "If you split local variables onto 2 lines, PForth crashes." Fixed. Also allow \
    - Fixed float evaluation in EVALUATE in "quit.fth".
    - Flush register cache for ffColon and ffSemiColon to prevent stack warnings from ;

V21 - 9/16/1998
	- Fixed some compiler warnings.

V20
    - Expand PAD for ConvertNumberToText so "-1 binary .s" doesn't crash.
      Thank you Michael Connor of Vancouver for reporting this bug.

    - Removed FDROP in REPRESENT to fix stack underflow after "0.0 F.".
      Thank you Jim Rosenow of Minnesota for reporting this bug.
	- Changed pfCharToLower to function to prevent macro expansion bugs under VXWORKS
      Thank you Jim Rosenow of Minnesota for reporting this bug.

	- "0.0 F~" now checks actual binary encoding of floats. Before this it used to just
	  compare value which was incorrect. Now "0.0 -0.0 0.0 F~" returns FALSE.

	- Fixed definition of INPUT$ in tutorial.
      Thank you Hampton Miller of California for reporting this bug.

	- Added support for producing a target dictionary with a different
	  Endian-ness than the host CPU.  See PF_BIG_ENDIAN_DIC and PF_LITTLE_ENDIAN_DIC.

	- PForth kernel now comes up in a mode that uses BASE for numeric input when
	  started with "-i" option.  It used to always consider numeric input as HEX.
	  Initial BASE is decimal.  

V19  4/1998

	- Warn if local var name matches dictionary, : foo { count -- } ;
	- TO -> and +-> now parse input stream. No longer use to-flag.
	- TO -> and +-> now give error if used with non-immediate word.
	- Added (FLITERAL) support to SEE.
	- Aded TRACE facility for single step debugging of Forth words.
	- Added stub for ?TERMINAL and KEY? for embedded systems.
	- Added PF_NO_GLOBAL_INIT for no reliance on global initialization.
	- Added PF_USER_FLOAT for customization of FP support.
	- Added floating point to string conversion words (F.) (FS.) (FE.)
	    For example:   : F.   (F.)  TYPE  SPACE  ;
	- Reversed order that values are placed on return stack in 2>R
	  so that it matches ANS standard.  2>R is now same as SWAP >R >R
	  Thank you Leo Wong for reporting this bug.

	- Added PF_USER_INIT and PF_USER_TERM for user definable init and term calls.

	- FIXED memory leak in pfDoForth()

V18
	- Make FILL a 'C' primitive.
	- optimized locals with (1_LOCAL@)
	- optimized inner interpreter by 15%
	- fix tester.fth failures
	- Added define for PF_KEY_ECHOS which turns off echo in ACCEPT if defined.
	- Fixed MARKER. Was equivalent to ANEW instead of proper ANS definition.
	- Fixed saving and restoring of TIB when nesting include files.

V17
	- Fixed input of large floats.  0.7071234567 F.  used to fail.

V16
	* Define PF_USER_CUSTOM if you are defining your own custom
	  'C' glue routines.  This will ifndef the published example.
	- Fixed warning in pf_cglue.c.
	- Fixed SDAD in savedicd.fth.  It used to generate bogus 'C' code
	  if called when (BASE != 10), as in HEX mode.
	- Fixed address comparisons in forget.fth and private.fth for
	  addresses above 0x80000000. Must be unsigned.
	- Call FREEZE at end of system.fth to initialize rfence.
	- Fixed 0.0 F. which used to leave 0.0 on FP stack.
	- Added FPICK ( n -- ) ( i*f -- i*f f[n] )
	- .S now prints hex numbers as unsigned.
	- Fixed internal number to text conversion for unsigned nums.

V15 - 2/15/97
	* If you use PF_USER_FILEIO, you must now define PF_STDIN and PF_STDOUT
	  among other additions. See "pf_io.h".
	* COMPARE now matches ANS STRING word set!
	- Added PF_USER_INC1 and PF_USER_INC2 for optional includes
	  and host customization. See "pf_all.h".
	- Fixed more warnings.
	- Fixed >NAME and WORDS for systems with high "negative" addresses.
	- Added WORDS.LIKE utility.  Enter:   WORDS.LIKE EMIT
	- Added stack check after every word in high level interpreter.
	  Enter QUIT to enter high level interpreter which uses this feature.
	- THROW will no longer crash if not using high level interpreter.
	- Isolated all host dependencies into "pf_unix.h", "pf_win32.h",
	  "pf_mac.h", etc.  See "pf_all.h".
	- Added tests for CORE EXT, STRINGS words sets.
	- Added SEARCH
	- Fixed WHILE and REPEAT for multiple WHILEs.
	- Fixed .( ) for empty strings.
	- Fixed FATAN2 which could not compile on some systems (Linux gcc).

V14 - 12/23/96
	* pforth command now requires -d before dictionary name.
	        Eg.   pforth -dcustom.dic test.fth
	* PF_USER_* now need to be defined as include file names.
	* PF_USER_CHARIO now requires different functions to be defined.
		See "csrc/pf_io.h".
	- Moved pfDoForth() from pf_main.c to pf_core.c to simplify
	  file with main().
	- Fix build with PF_NO_INIT
	- Makefile now has target for embedded dictionary, "gmake pfemb".

V13 - 12/15/96
	- Add "extern 'C' {" to pf_mem.h for C++
	- Separate PF_STATIC_DIC from PF_NO_FILEIO so that we can use a static
	  dictionary but also have file I/O.
	- Added PF_USER_FILEIO, PF_USER_CHARIO, PF_USER_CLIB.
	- INCLUDE now aborts if file not found.
	- Add +-> which allows you to add to a local variable, like +! .
	- VALUE now works properly as a self fetching constant.
	- Add CODE-SIZE and HEADERS-SIZE which lets you resize
	  dictionary saved using SAVE-FORTH.
	- Added FILE?. Enter "FILE? THEN" to see what files THEN is defined in.
	- Fixed bug in local variables that caused problems if compilation
	  aborted in a word with local variables.
	- Added SEE which "disassembles" Forth words. See "see.fth".
	- Added PRIVATE{ which can be used to hide low level support
	  words.  See "private.fth".
	
V12 - 12/1/96
	- Advance pointers in pfCopyMemory() and pfSetMemory()
	  to fix PF_NO_CLIB build.
	- Increase size of array for PF_NO_MALLOC
	- Eliminate many warnings involving type casts and (const char *)
	- Fix error recovery in dictionary creation.
	- Conditionally eliminate some include files for embedded builds.
	- Cleanup some test files.

V11 - 11/14/96
	- Added support for AUTO.INIT and AUTO.TERM.  These are called
	  automagically when the Forth starts and quits.
	- Change all int to int32.
	- Changed DO LOOP to ?DO LOOP in ENDCASE and LV.MATCH
	  to fix hang when zero local variables.
	- Align long word members in :STRUCT to avoid bus errors.
	
V10 - 3/21/96
	- Close nested source files when INCLUDE aborts.
	- Add PF_NO_CLIB option to reduce OS dependencies.
	- Add CREATE-FILE, fix R/W access mode for OPEN-FILE.
	- Use PF_FLOAT instead of FLOAT to avoid DOS problem.
	- Add PF_HOST_DOS for compilation control.
	- Shorten all long file names to fit in the 8.3 format
	  required by some primitive operating systems. My
	  apologies to those with modern computers who suffer
	  as a result.  ;-)
	
V9 - 10/13/95
	- Cleaned up and documented for alpha release.
	- Added EXISTS?
	- compile floats.fth if F* exists
	- got PF_NO_SHELL working
	- added TURNKEY to build headerless dictionary apps
	- improved release script and rlsMakefile
	- added FS@ and FS! for FLPT structure members

V8 - 5/1/95
	- Report line number and line dump when INCLUDE aborts
	- Abort if stack depth changes in colon definition. Helps
	  detect unbalanced conditionals (IF without THEN).
	- Print bytes added by include.  Helps determine current file.
	- Added RETURN-CODE which is returned to caller, eg. UNIX shell.
	- Changed Header and Code sizes to 60000 and 150000
	- Added check for overflowing dictionary when creating secondaries.

V8 - 5/1/95
	- Report line number and line dump when INCLUDE aborts
	- Abort if stack depth changes in colon definition. Helps
	  detect unbalanced conditionals (IF without THEN).
	- Print bytes added by include.  Helps determine current file.
	- Added RETURN-CODE which is returned to caller, eg. UNIX shell.
	- Changed Header and Code sizes to 60000 and 150000
	- Added check for overflowing dictionary when creating secondaries.
	
V7 - 4/12/95
	- Converted to 3DO Teamware environment
	- Added conditional compiler [IF] [ELSE] [THEN], use like #if
	- Fixed W->S B->S for positive values
	- Fixed ALLOCATE FREE validation.  Was failing on some 'C' compilers.
	- Added FILE-SIZE
	- Fixed ERASE, now fills with zero instead of BL
	
V6 - 3/16/95
	- Added floating point
	- Changed NUMBER? to return a numeric type
	- Support double number entry, eg.   234.  -> 234 0

V5 - 3/9/95
	- Added pfReportError()
	- Fixed problem with NumPrimitives growing and breaking dictionaries
	- Reduced size of saved dictionaries, 198K -> 28K in one instance
	- Funnel all terminal I/O through ioKey() and ioEmit()
	- Removed dependencies on printf() except for debugging

V4 - 3/6/95
	- Added smart conditionals to allow IF THEN DO LOOP etc.
	  outside colon definitions.
	- Fixed RSHIFT, made logical.
	- Added ARSHIFT for arithmetic shift.
	- Added proper M*
	- Added <> U> U<
	- Added FM/MOD SM/REM /MOD MOD */ */MOD
	- Added +LOOP EVALUATE UNLOOP EXIT
	- Everything passes "coretest.fth" except UM/MOD FIND and WORD
	
V3 - 3/1/95
	- Added support for embedded systems: PF_NO_FILEIO
	and PF_NO_MALLOC.
	- Fixed bug in dictionary loader that treated HERE as name relative.
	
V2 - 8/94
	- made improvements necessary for use with M2 Verilog testing

V1 - 5/94
	- built pForth from various Forths including HMSL

----------------------------------------------------------
	

Enjoy,
Phil Burk
