MPE VFX Forth for Windows, Linux, Mac & DOS - Release Notes =========================================================== Copyright (c) 1999-2011, 2012, 2013, 2014, 2015, 2016, 2017 MicroProcessor Engineering Ltd. 133 Hill Lane Southampton SO15 5AF England tel: +44 (0)23 8063 1441 fax: +44 (0)23 8033 9691 net: mpe@mpeforth tech-support@mpeforth.com web: www.mpeforth.com ****************************************************** PLEASE READ THIS FILE, YOU MAY REGRET IT IF YOU DO NOT ****************************************************** This file can be found in the installation under the name RELEASE.VFX.TXT within the DOCS directory. It provides a reverse chronological list of changes made between released builds of the VFX Forth system from release 4.00 onwards. Release notes for earlier versions are in RELHIST.VFX.TXT. These notes are common for all versions - Windows, Linux, OS X and DOS. The build numbers refer to the Windows version. As of VFX Forth v4.0, the Windows executables are named "VfxBase.exe" and "VfxForth.exe". As of build 2661, 3 Sept 2008, the configuration files are called VfxForth.ini. As of 16 July 2012, the directory structure has changed. As of 20 November 2012, the Linux tarballs have a different directory structure. 4.81.3623 6 December 2017 ========================== KERNEL ------ Mac: updated LOCATE mechanism to handle trailing & better. LIB and STUDIO -------------- Mac: New Cocoa release from Roelf Toxopeus. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.81.3620 1 October 2017 ========================= KERNEL ------ LIB and STUDIO -------------- DocGen3.fth contains a Markdown personality. Mac: New Cocoa release from Roelf Toxopeus. EXAMPLES -------- Lin32/rpi-gpio has been updated to use the newer flag field method of determining which CPU is in use. DOC --- Manual rebuilt by release script. TOOLS ----- 4.80.3620 26 June 2017 ====================== KERNEL ------ Added PERFORM ( addr -- ) : perform \ addr -- EXECUTE contents of addr if non-zero. Forced initialisation of SYSPAD in startup and callback entry code. Optimised more USER variables. Added: : data-file \ -- size ; DATA-FILE Loads a file to memory at *\fo{HERE} and *\fo{ALLOT}s memory. The size of the file is returned. This is a good way to load data directly into the dictionary at compile time. It avoids having to convert binary data into streams of digits and commas. For example, DocGen keeps a CSS file in the dictionary: CREATE BootstrapAddr \ -- data-file bootstrap.min.css \ load the file constant /Bootstrap \ keep the length LIB and STUDIO -------------- ARM Lin: Overhauled VFP32S.fth and VFP64.fth to be faster and to fix some bugs. R8 is now the floating point stack pointer. Mac: New Cocoa release from Roelf Toxopeus. The build version of DocGen has changed from %lib%/DocGen.fth to %lib%/DocGen3.fth whose HTML output is based on HTML5. See the DocGen portion of the manual for details. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.72.3596 12 April 2017 ======================== KERNEL ------ LinARM: Corrected task and callback startup to force initialisation of the exception stack. LinARM: Corrected FLUSHCACHE for ARMv6 CPUs. This allows operation on the original Raspberry Pi, the Pi Zero and the Pi Zero W. Added error checking to [IF] ... [THEN]. At the end of INCLUDE and friends, a check is performed that throws an error if there is an unterminated [IF]. Corrected INTERP> in cases in which the defining word is used in other words. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.72.3593 24 February 2017 =========================== KERNEL ------ Win: Added large number of Windows types. Rebuilt on latest cross compiler. Added RESET-STACKS ( -- ) which resets the the data and float stacks. LinARM: Updated Lib/ARM/VFXP64S.fth for more FSP=R8 changes. LIB and STUDIO -------------- Win: Added an interface to the MarshallSoft SEE library in Lib\Win32\SharedLibs\SEE. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.72.3572 26 September 2016 ============================ KERNEL ------ Rebuilt on latest cross compiler. Added: : changeNameWid \ nfa oldwid newwid -- Move the word whose nfa is given from the wordlist oldnfa to the wordlist newnfa. No error checking is performed. Win: If a line output to a Richedit control exceeds 1022 characters, a line break is inserted. LIB and STUDIO -------------- Updated GetDlgFile in Lib\Win32\Helpers.fth for Windows 7 changes. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.72.3550 23 July 2016 ======================= KERNEL ------ Updated the text colour dialogs used for RichEdit controls. Win: Added DlgRunResult \ dialogid dlgproc hOwner -- result which behaves as DlgRun but returns the result from EndDialog(). Win: Overhauled Ctrl-V and Shift-Insert key handling in RichEdit windows, which also now process WM_PASTE messages. Changed how RichEdit windows are cleared. Mac: Changed SET-SIZE to force a 4kb page size. This seems to fix reported problems with SAVE after SET-SIZE. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.72.3541 3 February 2016 ========================== KERNEL ------ Linux/Mac: Updated installer and configuration tools to have a better chance of setting the VFXPATH and BASEPATH text macros. The default editor can be derived from the VISUAL and EDITOR environment variables on the first run. ARM: Changed cross compiler and code generator so that R8 is used as the floating point stack pointer in all ARM and Cortex targets. Updated the start up, coded words and EXTERN mechanism to match. Note that you should check your own CODE words and remove all use of R8 or at least preserve it. Improved the DEFAULT-CONSOLE generic I/O device's use of multi-tasking during KEY operations. LIB and STUDIO -------------- ARM: Updated Lib/ARM/VFP64S.fth to use R8 as the stack pointer. Corrected the EXTERN: mechanism for float and double arguments and return values. Added Lib\Win32\RawDrive.fth which allows applications to read and write raw sectors on a disc. It's dangerous, but it allows you to test out new file systems and patch data on corrupted SD cards. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.72.3540 14 November 2015 =========================== KERNEL ------ Renamed NAME>INTERP to NAME>INTERPRET for Forth-2012 compliance. Mac OS X: updated Cocoa interface with enhancements for El Capitan. Thank you, Roelf. Note that OS X binaries are now placed in /usr/local/bin. Saving binaries in /usr/local/bin is a privileged operation so sudo is needed. Corrected code generator for DEFER@ - copy/paste error! Thank you, Anton. LIB and STUDIO -------------- Added Roelf's stack jugglers to Lib/x86/Ndp387.fth and Lib/x86/Hfp387. Added x86 specifics to Lib/dshifts.fth for x86 CPUs. Moved various cryptograhic files to new directory Lib/Crypto. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.72.3532 10 June 2015 ======================= KERNEL ------ Win: Tested on Windows 8.1 and 10. ARM: Reverted to a simpler CMOVE to avoid faults on Cortex-Ax CPUs. ARM: Added a cache flush to DocGen. ARM: Added the VFP instructions in V7-M in both Thumb-2 and ARM32 forms to the assembler. ARM: Added switch to tighten ARM32 code generation for Cortex-A/R CPUs. This fixes some problems with Cortex-Ax cores and is the default. LIB and STUDIO -------------- ARM: Added floating point packs in Lib/ARM/VFP64S.fth and Lib/ARM/VFP32S.fth. See manual for details. Added Lib/SoftFP32.combined.fth and Lib/SoftFP32.separate.fth which provide software floating point packs that are compatible with those of embedded targets. These are not ANS or Forth-2012 standards compliant. Win: Fixed new bug in Lib/Win32/Genio/Terminal.fth. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.71.3527 8 October 2014 ========================= KERNEL ------ ARM: The simplistic CMOVE has been replaced by a much faster (but vast) version. LIB and STUDIO -------------- x86: Fixed FTANH in Lib/Ndp387.fth, Lib/Hfp387.fth and Lib/HfpGL32.fth. Mac OS X: updated Cocoa interface with many enhancements. Thank you, Roelf. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.71.3523 8 October 2014 ========================= KERNEL ------ Local variables are no longer part of the search order system. The words FIND and SEARCH-CONTEXT now explicitly search the LOCALVARS vocabulary first if required to. This change eases some uses of the search order system and improves standards compliance. Enhanced the enum support in the C language header file support. The VFX cached file mechanism has been rewritten to allow for memory allocation issues in some operating systems, especially Linux for ARM CPUs. ARM systems that follow the EABI calling convention use the file VFXBase/ExternEABI.fth. Beta builds of VFX Forth for Linux ARM are available. LIB and STUDIO -------------- EXAMPLES -------- Examples/Lin32/rpi-gpio.fth contains GPIO pin set/clear routines for the Raspberry Pi. These use a model based on accessing /dev/mem with root privilege, likely to be the fastest means of direct I/O without using a kernel driver. This code can be adapted for other ARM Linux hardware, and the basic techniques may be applicable to x86 systems. DOC --- Manual rebuilt by release script. TOOLS ----- 4.62.3505 30 May 2014 ====================== KERNEL ------ Added CSPLIT ( caddr len char -- raddr rlen laddr llen ) that splits a string at the first given character. Enhanced EXTERN: to cope better with types such as char**. Added C-style enum parser to aid accessing shared libraries. LIB and STUDIO -------------- Added Lib/SharedLibs/libXL for reading and writing Excel- compatible files. EXAMPLES -------- Added Examples/linlist.fth which provides expandable lists of fixed length records. DOC --- Manual rebuilt by release script. TOOLS ----- 4.62.3495 12 May 2014 ====================== KERNEL ------ DocGen now centres images defined for Texinfo. Added LDUMP to kernel to display a block of memory as 32 bit units. This often makes dumping structures more readable. Win: GUIgen has a new release with graphing and pie controls. Win: The recommended serial driver is Lib\Win32\Genio\serialbuff.fth. Local input and output drivers are provided to reduce the Windows overheads for code that works on a character-by-character basis. See the manual and/or source code for details of accessing the new features. Win: Updated the terminal display so that it updates itself with a timer. An IOCTL to set the terminal caption was added. Many other minor improvements. Win: Updated RichEdit display to allow for the (rare) case when a line ending can be more than two characters. Added the command line switch -ini-exec (must be lower case) to use the default INI file stored in PrevIni$. This is occasionally useful when you want multiple copies of an application with separate INI files. Made S\" and friends Forth2012 compliant. The hex number option "\xab" now requires two and only two hex digits after the "\x". This change makes the behaviour completely predictable. Fixed CMOVE and CMOVE> when the strings overlap. For overlapping strings a simple byte by byte copy is used, otherwise the copy is optimised. LIB and STUDIO -------------- Corrected signed-zero display issue in Lib\Ndp387.fth. You can now choose whether signed zeros are displayed as such. See the manual for more details. EXAMPLES -------- Added Examples\Win32\EnumSerial.fth which provides methods to enumerate Windows serial ports. It is not pretty! Added Examples\crc3216.fth which contains 32 bit and 16 bit CRC generators. Added Examples\xorshift.fth which contains random number generators with a good speed/quality trade-off. DOC --- Added simplified turnkey generation section. Manual rebuilt by release script. TOOLS ----- 4.62.3446 19 November 2013 =========================== KERNEL ------ Forced LOCATE to go to first line of EXTERN:s. Corrected ARRAY initialisation for IDATA. Mac: Improved error messages for SAVE. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.62.3444 16 August 2013 ========================= KERNEL ------ After an alias is defined, the xt of the original word is returned by dictionary lookups if the value CHECKSYNONYM? is true. This behaviour improves the utility of SYNONYM and friends. CHECKSYNONYM? returns true by default. The control byte in the dictionary header for a word now uses 5 bits for header information, with bit 4 being the synonym bit. Win32: To avoid problems with certain printer drivers, the DLL entry point function defined by DLLMAIN: now touches the stack every 4kb. Win: Restored the facility to have a local Windows help file. See the Windows Tools chapter and the Studio IDE. LIB and STUDIO -------------- Restored the local Windows Help file options in the Studio IDE, now that we have found one we can put on our web site. It's very old and doesn't look pretty on a modern PC, but it'll have to do. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.61.3422 20 May 2013 ====================== KERNEL ------ Corrected moves into EDX, EAX for division. Some moves incorrectly eliminated code. Added more protection to >NAME ( xt -- nfs ). A dummy name "???" is returned if the xt is outside the dictionary area. Mac/Lin: Updated command line parser to handle spaces better. Mac: Updated MacForth on VFX to 10.472. LIB and STUDIO -------------- Updated Lib/Doubles.fth, mostly CCSisms. Added debug facilities in Lib/PDFhelp.fth to Linux and Mac versions as well as Windows. EXAMPLES -------- DOC --- Mac: The Mac manual is now built on the Mac using TexLive2012. Manual rebuilt by release script. TOOLS ----- 4.61.3405 9 February 2013 ========================== KERNEL ------ Improved the register load code generator to reduce the number of stack shuffles when indirect loads are present. Corrected INSTRING to prevent a potential buffer overlow issue. Regrouped and rewrote and updated STRRMATCH and friends. The new code is shorter and faster. A new word WCMATCH? \ src slen ptn plen -- t/f is exposed. Our thanks to Graham Smith at Tectime. See the manual for details of the new code. Updated documentation for turnkey apps and moved the startup and shutdown sequence description to it. Moved some of the words for handling zero-terminated strings. LIB and STUDIO -------------- Win: Started interfacing to undocumented functions in NTDLL.DLL. See Lib\Win32\SharedLibs\ntdll. Added quad by single divide operators to CCSisms in Lib/Doubles.fth EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 4.60.3393 8 December 2012 ========================== KERNEL ------ Corrected SUBSTITUTE for single % character. LIB and STUDIO -------------- Improved error handling in Lib/FileHacks.fth. SLURP and INHALE now zero-terminate the memory when a file is read into ALLOCATEd memory. EXAMPLES -------- Added Examples/usenet/Marcel/why2001.fth. Win: Updated ForthEd2 for file load and text macro problems. Lin: Corrected use of accept() in PowerNet servers. Removed Examples/FileHacks.fth; use Lib/FileHacks.fth instead. DOC --- Manual rebuilt by release script. TOOLS ----- 4.60.3364 23 July 2012 ======================= KERNEL ------ Added more error codes. Allowed locals to be nested. Added WID-THREADS ( wid -- addr len ) which is given a wid and returns the table of threads for that wid. Improved robustness of locals start required for a truly obnoxious hack demanded by a client. Win: Improved close of RichEdit control. Allowed users to supply their own right-click menus and access the default find operation. See the manual. LIB and STUDIO -------------- Win: Provided more facilities for line control in the serial driver Lib\Win32\Genio\serial.fth. Improved parameter checking. Win: Removed Win32 API Help File buttons and tools. The default file is no longer available and is obsolete. Use the online help selection instead. Win: Updated PAUSE in Lib\Win32\MultiWin32 to use EMPTYIDLE rather than BUSYIDLE. The change allows the message pump to run more often. Win: Added more to Lib\Win32\TextColour.fth. Mac: The source code in Lib/Osx32/Cocoa is now released under a Creative Commons licence. See Lib/Osx32/Cocoa/LICENSE.txt. Improved robustness of floating point output in Lib/Ndp387.fth. Thanks, Ed. EXAMPLES -------- Added Quotations.fth which permits nested definitions. DOC --- Manual rebuilt by release script. TOOLS ----- 4.60.3334 30 May 2012 ====================== KERNEL ------ If SAVE is used inside a source file, the file's locate information is now set before the save takes place. The random number generator word RANDOM has been refactored and is now a DEFERred word. See the manual for more details. Win: The following text macros no longer have trailing '\' characters: LOAD_PATH BIN LIBRARYDIR LIB Although this change may break some code, it brings the Windows and DOS versions into line with the Linux and Mac OS X versions, as well as being what most of you want and how most of you actually use the macros. GET as a synonym for INCLUDE has been removed. Some versions may now now use GET and RELEASE for mutex variable access in the classical Forth manner. Added additional notations to the EXTERN: mechanism for converting code from other Forth systems. See the manual for more details, e.g. function: foo3 ( a b c d -- el eh } Added DEFERred word SourceTrackRename ( zaddr -- ) so that users can adjust names in the source tracking system to suit their habits. Added FUNCTION: and friends as compatibility words for converting code from other systems. See the DLL and Shared library chapter of the manual. Added CB: ( xt #in "" -- ; entry ) for compatibility. Mac: Added Roelf's FRAMEWORK word. See the EXTERN chapter of the manual. Mac: Added WORKINGDIR ( -- caddr len ) to return the current working directory. LIB and STUDIO -------------- Added Lib/SharedLibs which contains interfaces to several shared libraries which are available on most platforms. The initial set is: libcurl libiconv SQLite3 zlib Moved the SQLite3 interface from Examples\DataBases to Lib\SharedLibs. Moved MD5.FTH, RC4.FTH and SHA.FTH from Examples to Lib. Win: The ini file that was %LOAD_PATH%\USERIDE.INI is now %IniDir%\UserIde.ini. If the new file does not exist, the old one is copied over. Win: Updated the Blowpipe interface in Lib/Win32/Blowpipe.fth to include a generic I/O device, which makes Blowpipe much easier to use. See the manual or the source code for details. Mac: Added Roelf Toxopeus' Cocoa interface. See Lib/Osx32/Cocoa Overhauled the TextView interface. Updated the multitasker Lib/Osx32/MultiOsx32.fth with input from Roelf. The multitasker is a major overhaul. Please see the manual. EXAMPLES -------- Moved MD5.FTH, RC4.FTH and SHA.FTH from Examples to Lib. Moved the SQLite3 interface from Examples\DataBases to Lib\SharedLibs. DOC --- Manual rebuilt by release script. TOOLS ----- 4.50.3327 17 April 2012 ======================== KERNEL ------ Prevented words containing EXTERNs from being inlined, as was the practice in previous versions. Overhauled console pause word HALT? Mac: Updated support library with more constants. Mac/Lin: Fixed paste problem in X-terminal. Added SubstituteC and SubstituteZ : substituteC \ src slen dest dlen -- \ Expand the source string using text macro substitutions, \ placing the result as a counted string at dest/dlen. \ If an error occurred, the length of the counted string \ is zero. : substituteZ \ src slen dest dlen -- All versions now provide COPY-FILE. : copy-file \ src srclen dest destlen nooverwrite -- ior \ Copy the file named src/srclen to the file named dest/destlen. \ Macros are expanded. If nooverwrite is non-zero and the \ destination already exists, no copy occurs and an error is \ returned. Made DELETE-FILE and RENAME-FILE expand macros. Overhauled the INI file default handling to provide a common interface for all operating systems. See the manual for more details. LIB and STUDIO -------------- Win: Updated the Blowpipe debugger support code so that a Blowpipe I/O device is available. See Lib\Win32\BlowPipe.fth Lin: SocketIo.fth now sets IPaddress to a more reasonable value on most networks. EXAMPLES -------- Lin: PowerNet now defaults to port 5080 for HTTP to avoid some network permissions problems. Win: Updated GUIgen so that it can be compiled inside another vocabulary for isolation from application code. See Examples\Win32\GUIgen Win: Updated the ShareServer code so that it can be compiled inside another vocabulary for isolation from application code. See Examples\Win32\PowerNet\Examples\ShareServer Also improved some error recovery in ShareServer. DOC --- Manual rebuilt by release script. TOOLS ----- 4.50.3294 26 February 2012 =========================== KERNEL ------ Added better code generation for U< and U>. Added code generation for WITHIN. Mac: The ini file is no longer the Unix style %$home%/.VfxForth.ini It is now %$home%/Library/Application Support/VfxForth/VfxForth.ini The old file will be copied over. Default INI files can be described. See the manual. Mac: Added additional operations for directory creation. Moved more macros into the kernel to reduce differences between operating systems. Refactored the error handling in INCLUDED and friends. More resets of the exception stack. Corrected COMP: Corrected EMPTY and TRIM-DICTIONARY. Added CUT-DICTIONARY. Added ZAPPEND for consistency in the zero terminated string words. New code should use ZAPPEND instead of APPENDZ. Both words have the same behaviour. Recoded ZMOVE for performance. Added CMPXCHG BSWAP and INVD to the assembler and disassembler. Made LOCALS| ... | capable of multi-line operation. Corrected COMP: for occasions when the word being modified could be tokenised. This bug affected SAVE operations on custom code generators. Added minimal support for varargs calls into shared libraries. LIB and STUDIO -------------- Updated Lib/oop/FMS to v4.1b. Mac: Updated the multitasker in Lib/Osx32/MultiOsx32.fth. EXAMPLES -------- Win: Examples\Win32\1Wire - updated tools and added drivers for DS2413 and DS2450 devices. DOC --- Manual rebuilt by release script. TOOLS ----- 4.50.3246 28 November 2011 =========================== KERNEL ------ Improved tab parsing in EXTERN: and friends. Corrected EMPTY. Improved detection of source file names without an extension. LIB and STUDIO -------------- Win: Added the BlowPipe debugger which allows text to be sent to a separate application outside VFX Forth. See Lib\Win32\BlowPipe.fth Bin\BlowPipe.exe EXAMPLES -------- GTK - The previous operating system specific folders have been removed. A considerably enhanced GTK interface with graphics drawing and more examples, including a simple text editor, may be found in Examples/GTK Note that this code may be run unchanged on Windows, Mac OS X and Linux once GTK+ has been installed. Win: Revamped turnkey examples in \Examples\Win32 turnkey1.fth turnkey2.fth turnkey3.fth DOC --- Updated the description of the rebuild process. Manual rebuilt by release script. TOOLS ----- Win: Added Tools\BlowPipe 4.44.3243 26 October 2011 ========================== KERNEL ------ Fixed spacing problem in LOCALS|. Enhanced the dictionary statistics tools in Examples/DictStats.fth. Added #BADEXTERNS #BADLIBS and .BADLIBS to the Extern: words. See the manual for details. Added StopIncluding and the synonym \\ ( -- ) to provide a comment to end of file facility. Win: Added PLONG type to list of Windows types. Mac: Changed kernel start up code for OS X 10.7 Lion. Also changed SAVE and friends. Fixed obscure code generation bug revealed in an implementation specific OOP prototype. LIB and STUDIO -------------- Fixed problem with OUT not being updated in a TYPE operation in Lib/Genio/file.fth. Overhauled the ClassVFX intelligent structures package in Lib/oop/ClassVFX. Added Doug Hoffman's FMS (Forth Meets Smalltalk) package in Lib/oop/FMS. EXAMPLES -------- Updated Examples/fJACK to v1.13. Added Examples/GTK which contains an interface to the platform independent GTK+ GUI and graphics libraries. Application code can be run unchanged on VFX Forth for Windows, Linux and Mac OS X. DOC --- Manual rebuilt by release script. TOOLS ----- 4.43.3229 14 June 2011 ======================= KERNEL ------ Linux/Mac: RESIZE-FILE corrected and CREATE-FILE updated. Linux/Mac: Edit on error problems fixed. LOCATE and HELP updated. Win: Scroll wheel support now works in RichEdit windows. Changed the default value of the IDIR macro to ".". This value is also set when including directly from the working directory. Pointer parsing has been improved in the EXTERN: interface. LIB and STUDIO -------------- In Lib/fsl/library, modified FSL routines in VfxLoad.fth and Vfx4Util.fth for VFX Forth v4.4 onwards. Overhauled the FP output routines in Lib/Ndp387.fth and Lib/Hfp387.fth. Additional output words are now available. See the manual for more details. Thanks to Ed. The old files are retained as Lib/Ndp387.v442.fth and Lib/Hfp387.v442.fth. EXAMPLES -------- Moved goodies.scr and hanoi.fth from the Lib folder. Updated hanoi.fth to use a terminal window with VFX Forth for Windows. DOC --- TOOLS ----- 4.42.3209 26 April 2011 ======================== KERNEL ------ Minor tweak to DUP code generator. Win: Fixed DLL generation problem introduced in build 3180. The guts of the text macro substitution has been rewritten so that the primitives can be considered thread-safe. See the manual for more details. The EXTERN: interface now supports C comments in declarations. See the manual for more details. LIB and STUDIO -------------- PARSED and DOCONLY in DocGen now set the include directory macro %IDIR%. Updated Lib/oop/ClassVFX for v4.4. EXAMPLES -------- Win: Added Examples\Win32\1Wire which contains code to access Dallas/maxim 1-Wire devices on network adapterss connected to a PC. Added Examples\DataBases\SQLite3 directory which contains sqlite3h.fth, a Forth translation of the sqlite3.h C header file. DOC --- TOOLS ----- 4.42.3180 11 March 2011 ======================== KERNEL ------ Increased the output buffer size in the default character mode console to improve performance. Mac: Console mode kernel is done and can rebuild itself. Minor update to INI file system to correct a limit condition that is only visible under OS X. Win: Added more version and company information to all EXE files. Removed need for make-exe.exe. These changes should reduce the false positives from anti-virus software, especially for Pro and Mission version users. Win: Improved the performance of the console and RichEdit device output. This is particularly noticeable under Vista and Windows7. Win: For operating systems other than Win9x, the system INI file VfxForth.ini is in the Windows local application data folder. If no file exists, but there is one in the executable directory, that one is copied over. Detail configuration changes for the OS X version. Corrected problem in mixed optimised/unoptimised code at branch boundaries. LIB and STUDIO -------------- Win: Updated Lib\Genio\serial.fth to have 64kb input buffers by default. The serial structure is exposed for the user. EXAMPLES -------- Win: Added "Petzold" style graphics demos Examples\Win32\AnaClock.fth - analogue clock Examples\Win32\Bounce.fth - bouncing ball Examples\Win32\RandRect.fth - random rectangles Removed the Examples\Win32\frompfw2 folder as it is redundant. OSX: Added GTK+ demo interface. See Examples/Osx32/gtk/ DOC --- TOOLS ----- 4.42.3139 5 October 2010 ========================= KERNEL ------ Started the Forth200x update process. The following accepted CfVs are implemented: XCHARs SYNONYM Escaped strings N>R and NR> 2VALUE Separate FP stack Number prefixes Structures One-time file loading [DEFINED] and [UNDEFINED] PARSE-NAME Deferred words To be done: Text substitution Wordset queries THROW iors The ENVIRONMENT system is now extensible. Tuned DUP again for current CPUs. Added code generator for 2ROT - just bragging, really. LIB and STUDIO -------------- Added a Forth200x XCHARs implementation in Lib/xchar.fth. EXAMPLES -------- Added an RPC implementation in Examples\Win32\PowerNet\Examples\ShareServer DOC --- TOOLS ----- 4.41.3127 1 September 2010 =========================== KERNEL ------ Win: As of this release, the Windows 9x operating systems are no longer officially supported. We'll do what we can, i.e. we will not deliberately break code, but it may happen. The recommended base system is now Windows XP, SP3. Win: You can now set the window backround colour in a RichEdit device such as the console. Win: Windows 7 changes for console mode actions. Win: Corrected exception stack linkage for Win32Catch and and Win32ExceptThrow. Protected exception handler around callbacks. Win: Exposed the __CONTEXT__ structure that defined the Windows EXCEPTION_CONTEXT structure for 32 bit use. Also exposed getFS:[0] \ -- x setFS:[0] \ x -- which fetch and store the top of the Windows exception chain. See http://www.microsoft.com/msj/0197/Exception/Exception.aspx for the gory details and Lib\Win32\exexcept.fth. LIB and STUDIO -------------- Added Lib/Genio/FileBuff.fth. This is a file generic I/O device with buffered output. When used with small elements such as text, the new device is very much faster than the previous device in file.fth. See also Lib/bin2c-b.fth for a usage example. Win: Removed the dependencies in Lib\Win32\Genio\Serial.fth on the file device. Win: Added Lib\Win32\TextColour.fth which contains a dialog and tools for setting the text colours in an edit control. Updated the Studio front-end to use this dialog. Corrected Lib/ConfigTools.fth. Corrected DLL scanner. EXAMPLES -------- The Examples folder for the Win32 version of PowerNet includes the ShareServer folder which contains a mechanism and examples of Remote Procedure Calls (RPC) in Forth. fJACK is now at version 1.01. Win: Updated GUIgen. Added Examples\Win32\VMdetect.fth which contains tools to detect if your application is running under Virtual PC or VMware. DOC --- TOOLS ----- 4.41.3092 4 April 2010 ======================= KERNEL ------ Enhanced robustness of the build numbering system. Added PROC to the assembler. PROC behaves like LBL:, except that it initialises local labels. Use in the form: proc end-code When executes, it returns the address of the start of the code. Added macros for Forth200x proposal testing: IDIR - the current include file directory RD - as IDIR WD - working directory, ".". Win: Enhanced the default exception handler to resume safely from faults caused by MOVE and COMPARE. Win: Corrected CPU hogging problem in RichEdit console. Added syntax check to { ... } local variable parser. Added output buffering to the first-stage console to improve the cross-compiler performance with redirected I/O. LIB and STUDIO ------------- EXAMPLES -------- DOC --- TOOLS ----- 4.40.3048 28 February 2010 =========================== KERNEL ------ Win: Added optional protection mechanism to EXTERNs and CALLBACKs. Updated the default exception handler to permit recovery from protected EXTERNs and CALLBACKs. Added CS-DROP. Improved error recovery in ASSESS. LIB and STUDIO ------------- Lin: improved interpretation of serial configuration strings in Lib/Lin32/Genio/Serial.fth. EXAMPLES -------- DOC --- TOOLS ----- 4.40.3007 21 December 2009 =========================== KERNEL ------ Added words to ease extending the assembler: dxb $55 \ lay a byte dxw $7788 \ lay a 16-bit item dxl $11223344 \ lay a 32 bit item $ \ -- ; gives HERE (start of opcode) The previous wordset has been withdrawn because it caused too many conflicts with HEX numbers. Added CS-PICK and CS-ROLL. Added .\" (like .") to handle escaped strings. Win: Performance enhancement to API calls. LIB and STUDIO ------------- Updated DocGen for stricter HTML compliance. Updated FATAN2 in Lib/Ndp387.fth for Forth200x. EXAMPLES -------- DOC --- TOOLS ----- 4.40.2996 7 December 2009 ========================== KERNEL ------ Added support for LongLong return valies in EXTERN: calls. Improved performance of some EXTERN: calls. Ensured that the following instructions are visible in the assembler: CPUID RDTSC RDMSR WRMSR EMMS RDPMC RSM Lin: Added more libc calls. Win/Lin: Improved performance of callback entry code. LIB and STUDIO ------------- EXAMPLES -------- Release 113 of Hanno Schwalm's fJACK interface to the JACK Audio Connection Kit is in Examples/fJACK. DOC --- TOOLS ----- 4.40.2939 23 October 2009 ========================== The 4.4 release is the result of many changes in the v4.3 "rapid technology development" releases. All the changes during the v4.3 process have been consolidated into the v4.3 notes below. Please read them. KERNEL ------ Fixed cross-compiled kernel issue affecting headerless words. Changed numeric input handling to remove problems when compiling strict ANS code. The previous variables DP-CHAR and FP-CHAR are now byte arrays that hold up to four characters that can be used as indicators. The default contents for DP-CHAR are ',' and '.'. The default contents for FP-CHAR are '.'. IGN-CHAR is now also a byte array. The primary impact of this change is that double number conversion works with either ',' or '.' as the double number indicator. Moved the xxxIDLE words into the kernel build. The words are defer IDLE ( -- ) \ Windows: wait for event/message defer WAITIDLE ( -- ) \ DOS/Lin: wait for event/message defer BUSYIDLE ( -- ) \ process one message if present and continue defer EMPTYIDLE ( -- ) \ process all present messages and continue Lin: Improved terminal detection and set up so that GUI systems can be run in the background or detached. Win: Changed name of RECOVER or RECOVERY to XCALL-FAULT in the external call mechanism. Win: improved buffer handling in RichEdit devices. Fixed some corner cases in the tokeniser which only occurred for users switching between OPTIMISED and UNOPTIMISED. Removed the FASTDO switches from the code generator, now using the previous +FASTDO selection. Recoded the unoptimised versions of DO, LOOP, I and friends to match the FASTDO handling. These changes reduce problems for people who still use UNOPTIMISED. Added U>= and U<= to the kernel. Added [INTERP] which behaves like [COMPILE] but compiles the interpretation behaviour of the word. Added HOLDS ( caddr len -- ) which adds a string to the current pictured output. String words such as S" are no longer IMMEDIATE or state-smart. Chidren of SYNONYM are no longer IMMEDIATE or state-smart. LIB and STUDIO ------------- Added missing FLNP1 to Lib\Ndp387.fth. Win: Added +CRASHSCREEN to Lib\Win32\exexcept.fth to restore the default crash screen as the current debugger. Corrected BLOCKS.FTH for initialisation under Linux. EXAMPLES -------- Lin: A new release of the Minos/Theseus GUI system by Bernd Paysan may be found in Examples/Lin32/Minos. The documentation is still minimal, but a first draft is in the main Minos directory. Release 105 of Hanno Schwalm's fJACK interface to the JACK Audio Kit is in Examples/fJACK. DOC --- TOOLS ----- 4.30.2887 9 June 2009 ====================== The v4.3x releases are preparation for the v4.4 release. All v4.3x releases are subject to changes in the internal mechanism for shared library interfacing. The source inliner has been replaced by the tokeniser. In consequence, you will have to modify your production code on v4.3x releases if you make any assumptions about the shared library interface or tokeniser. In some cases you may also have to replace the almost obsolete [COMPILE] by POSTPONE (see below). KERNEL ------ Added additional checks for when the optimiser is turned off. Some words with carnal knowledge make direct references to their code generators, and hence indirectly to the optimiser. Despite the VFX code generator being mature, some users have portions of code that still turn off the code generator. If you have code which still breaks the code generator, we really want to hear from you! Added #! ( -- ) as a line comment for compatibility with Unix shells. Added -WHITE ( caddr len -- caddr' len' ) which removes leading and trailing white space from a string. Lin: Restored OS_RENAME-FILE. Win: More detail changes to the Extern: interface. Declarations involving floating point data now work better. Win: Added FROMC ( -- ) to the callback interface to specify a C- style callback that does not clean up the calling stack, e.g. fromC 4 1 CallBack: CalledFromC Added ASSESS which behaves as EVALUATE but forces interpretation first and restores state afterwards. Changed S" and friends so that a second use does not overwrite the first string, e.g. s" Henrietta" s" Hello " type type will display Hello Henrietta Removed uses of PAD in the Forth kernel. Many words (such as IF and DO) involved in control flow are no longer IMMEDIATE. This will not affect you unless you use [COMPILE] with them. In these cases replace [COMPILE] by POSTPONE. The source inliner has been replaced by a tokeniser. The change was made to improve ANS and Forth200x standards compliance, and to reduce issues with particularly "guru" code. To prevent breaking your existing code, the tokeniser uses the same word names for its control words. See the manual for more details. Added GET-COMPILER SET-COMPILER and INTERP> to reduce the number of state-smart words in the system. Operators such as TO and children of VALUE are no longer IMMEDIATE or state-smart. Code/data separation with the +IDATA switch is now the default. See the VFX code generator section of the manual for more details. Note that phrases such as Variable foo 100 allot will fail to do what you expect, as ALLOT refers to dictionary space, and VARIABLE reserves a cell in a separated data region. If you are not already using the +IDATA switch, you should observe some performance gains. If your application fails with +IDATA, recompile it with -IDATA. Note that with +IDATA, use of >BODY and BODY> still refers to the dictionary area, not the IDATA region. The EXTERN: interface has been rewritten and provides support for the following additional data types: LongLong - 64 bit signed/unsigned integers Float - 32 bit floats Double - 64 bit Floats Existing declarations will be unaffected, except that the default calling convention is that of the operating system, rather than "C". Floats are taken from and returned to the NDP stack. In practice this means that only Lib/Ndp387.fth is appropriate for use with shared library routines. LongLongs are passed in and out in Forth format (TOS is the most significant portion). Conversion to and from the C/native format is performed by the EXTERN: mechanism. Note that the EXTERN: mechanism does not use the NXCALL interface below. LOCALEXTERN: behaves as ALIASEDEXTERN: except that the Forth word is built into the CURRENT vocabulary. The function of LOCALEXTERN: is superceded by INCURRENT and INEXTERNALS ( -- ) which force the new definition to be placed in the CURRENT wordlist or the EXTERNALS vocabulary (default). To support portable code that must be compiled on several different Forth systems with a support harness for each Forth, we have introduced L>R and R>L. By default, arguments are assumed to be on the Forth stack with the top item rightmost in the declaration so that the Forth parameter order matches the C declaration. R>L reverses this, and is provided for writing portability harness for code that is used by several different Forth systems. We strongly recommend that R>L only be used with LOCALEXTERN: to prevent interference with previous declarations of the same external function, e.g. LocalExtern: MyFooBar int R>L FooBar( int a, int b); This produces MyFooBar \ b a -- res User extensibility of the EXTERN: mechanism has changed. You can install your actions in the deferred words PREEXTCALL and POSTEXTCALL. The deferred word RECOVER is now called RECOVERY and is intended for use in the action of POSTEXTERN. See the manual for details and examples. Code generation for shared library calls has changed to allow for future releases on various operating systems with different call conventions. As a result, the previous XCALL mechanism: XCALL \ n1 .. nn addr -- result has been replced by NXCALL NXCALL \ n1 .. nn addr n -- result where (as before) nn is the topmost argument on the Forth stack, addr is the address to call, and (new) n is the number of arguments. The arguments are always removed from the Forth stack, regardless of the call conventions in the operating system. NXCALL treats everything as cells, and nn is always topmost on the receiving function's stack. The layout of the stacks in memory has changed, so that the Forth return stack is lowest. One consequence is that memory consumption is reduced. Fixed corner cases in D< D> DMIN DMAX. Added floating point locals to the { ... } notation. See the manual for the details. FP arguments and locals are preceeded by F:. Local arrays are as before. FP arguments and locals accept the operators TO, ADDR, ADD or +TO, SUB or -TO. Win: The raw reason code after an exception is saved in the variable ExcReasonCode. Fixed code generation bug for M* with literals. Lin: ARGC and ARGV[ now just extract the data passed by the Linux shell. COMMANDLINE ( -- caddr len ) returns a reconstructed complete command line. Note that on most Linux implementations you can use single quotes to denote a literal string: vfxlin s" foo bar" type will fail, but following is accepted: vfxlin 's" foo bar"' type 1 ARGV[ will return s" foo bar" and 2 ARGV[ will return type Win: Fixed paste to console for text that uses LF line endings. LIB and STUDIO -------------- Fixed long-standing (back to 1999) bug in XREF.FTH for floating point literals. Updated FLITERAL in Ndp387.fth and Hfp387.fth for the tokeniser, and added disassembly support. As of this release, the NDP387.fth float pack is the supported floating point package. HFP387.FTH and HFPGL32.FTH are still provided, but will only be minimally maintained. Changed FVALUEs to use the new compiler and tokeniser mechanisms. As of this release, the NDP387.fth float pack is the supported floating point package. HFP387.FTH and HFPGL32.FTH are still provided, but will not be further maintained. After discussion on comp.lang.fth, FATAN2 in NDP387.FTH has been modified to return the principal angle in the range -PI..+PI. This matches other trig words and the behaviour in other languages. Our thanks to Rafael Gonzalez. Lin: Added test code in Lib/Ndp387.fth to demonstrate calling shared library functions that use floating point data. Win: Updated the display in LIB\Exexcept.fth. Lin: Added test code in Lib/Ndp387.fth to demonstrate calling shared library functions that use floating point data. EXAMPLES -------- Win/Lin: Added Hanno Schwalm's fJACK interface to the JACK Audio Connection Kit for low-latency audio handling. Thank you, Hanno, for an example of a substantial piece of Forth code that is not only cross-platform but also cross-Forth - the supplied code runs on more than one Forth! DOC --- TOOLS ----- 4.22.2718 19 January 2009 ========================== KERNEL ------ Win: Updated Richedit device backspace handling for Vista. Fixed obscure code generation issue for OF. Improved code generator for OF and other conditions of severe register pressure. Forced local buffers to an aligned size. This prevents problems with operating system calls that require aligned addresses. EXAMPLES -------- LIB and STUDIO -------------- DOC --- TOOLS ----- 4.21.2669 2 October 2008 ========================= KERNEL ------ SHOWERRORLINE does nothing if LINE# contains -1. ShowSourceOnError does nothing if >IN contains -1. The interpreted version of 4/ is signed. Added DU< and DU> to the kernel. Added the ANS words FILE-STATUS and RENAME-FILE to the kernel. The new INI file mechanism is now used by both the Windows and Linux versions. The previous code is in Lib\Win32\PROFILE.FTH and the new INI file handler has moved to VFXBase\IniParser.fth. New extensions are documented in the manual. For Windows users the benefit is more facilities and increased speed at system start up and shutdown. Note that mpeparser.dll is needed and should be copied from the Bin folder to Windows\System32. The new mechanism will read your previous .INI files, but you should check all the entries in the Options menu as some may require minor edits. INI files are plain-vanilla text files which can be edited by any text editor. Win: The name of the Windows configuration file has changed from PFWVFX.INI to VfxForth.ini If you want to preserve your previous screen position and command history, rename the old file before launching VFX Forth. Added the deferred word QUITHOOK ( -- ) which is run when a THROW is caught in QUIT. You can assign any additional clean up actions you need. The default action is NOOP. Win: The RichEdit I/O device now handles the WM_GETFONT and WM_SETFONT messages - the Windows API does not handle them. Exposed ConsoleDev ( -- sid ), the default RichEdit I/O device and added hConsoleFont ( -- hFont ) to allow initialisation routines in the cold chain to define their own fonts for the console. Moved (.) ( n -- caddr len ) to the kernel. Added optimiser for ?NEGATE. Note that ?NEGATE now produces much better code than the phrase: 0< IF NEGATE THEN Improved optimiser for ABS. Fixed DMIN. DMAX was already correct. Removed unused words OnCompilation and Saved>Here. Removed code that managed them. LIB and STUDIO -------------- Win: Added USERACTION1 to the Tools menu. USERACTION1 ( -- ) is a DEFERred word (see Studio\XTB.FTH) to which you can assign an action. Fixed rounding errors during display of floating point numbers, ( NDP387.FTH and HFP387.FTH), and improved FACOS, FASIN, and FEXPM1. Win: The Options -> Set Console Font menu item now saves state and restores it correctly. See Studio\XTB.FTH for the gory details. Moved all the OOP packages to the new Lib\OOP directory. Version 2.0 of the Neon distribution by Doug Hoffman is in the v2.x folder, but is not yet fully optimised for VFX Forth. The previous 1.x version is in the v1.x folder. Corrected INI.WRITEINT in Lib\IniParser.fth for negative numbers. Linux: Lib/Lin32/Serial.fth overhauled to improve raw mode over a wider range of boxes and distributions. EXAMPLES -------- Win: Added Examples\Win32\WorkerTask.fth which illustrates how to use a background worker task to avoid delay and to avoid the "Not Responding" Windows message during time-consuming actions (e.g. network file open) in a winproc. Win: Added the Examples\Win32\FCOM folder, which contains Thomas Dixon's FCOM library ported to VFX Forth. This supports COM and ActiveX interfacing. Provided examples are: ExcelTest1.fth launches and exchanges data with Excel Flash.fth play a Shockwave Flash movie in a window MSCAL.fth Use the MS ActiveX calendar control in a window SAPItest.fth Text to speech translation Win: Added Examples\Win32\SplitWins.fth which shows how to create a window with splitter bars and four child windows which can be adjusted by dragging the bars. DOC --- TOOLS ----- 4.12.2599 12 May 2008 ====================== KERNEL ------ Replaced MIN and MAX in the kernel by UMIN and UMAX as appropriate. Moved TICKS and friends to the kernel, and removed them from Lib//TimeBase.fth. This allows the standard delay wordset to be used without compiling TimeBase.fth. Added BUIDFILE for cross compiler compatibilty. Use in the form: BuildFile The file path/name is obtained using GETPATHSPEC. Added table generation and image file handling to DocGen. See the manual for more details. Added some string words. See the manual for more details. $Null \ -- caddr 0 extractNum \ caddr len base -- caddr' len' u ExtractText \ caddr len char -- raddr rlen laddr llen Linux: Overhauled the system INI file handling and state save/restore. See the manual installation chapter for more details. Enhanced Lib\iniparser.fth with save and restore chains. The kernel is now compiled using the Forth 7 cross compiler. Added EXPAND, which performs text macro expansion on caddr/len strings. : Expand \ caddr len -- caddr' len' Win: Added SHELL functions compatible with the Linux version. LIB and STUDIO -------------- Win: Improved startup and accuracy in Lib\Win32\Timebase.fth. Linux: Added Lib\Lin32\Genio\SocketIo.fth, a socket device. Added Lib\PDFhelp.fth, which allows you to type HELP and view the relevant page of the PDF manual. The source code is documented in the Tools chapter of the manual. For Windows, configuration can be performed in the Options menu. For Linux, you must do this manually, where %p% and %h% are page number and base help file name macros, e.g. S\" &" HelpCmd$ place S\" /usr/share/doc/VfxForth/PDFs/VfxLin" HelpBase$ place #13 HelpPage0 ! \ adjust to get correct page display Note that some Linux distributions require compressed files in the /usr/share directory. Win: Added more dialog helper functions in Lib\Win32\Helpers.fth. EXAMPLES -------- Linux: Added GTK interface example. Linux: (Professional) Added Powernet with Telnet, web server and SOAP. DOC --- Removed release notes for versions before 4.00 and moved them to the release history file. TOOLS ----- 4.05.2556 12 February 2008 =========================== The directory format has changed so that Lib and Examples now have subdirectories for the operating system specific files. To ease portability, some conditional compilation has been used in the common files. KERNEL ------ Linux: Added shared library for Linux constants. Added a serial driver in *\i{Lib/Lin32/Genio/Serial.fth}. Win/Linux: Added environment variable support. See the operating system specific tools chapter of the manual. Win: Added PROFILE::Close ( -- ; a NOOP ) to provide compatibility with the new IniParser mechanism. We strongly recommend that every use of PROFILE::SetFileName is matched with a PROFILE::Close. This will avoid problems when the PROFILE mechanism is replaced by the IniParser mechanism added to the Lib folder. The PROFILE words will then only be available using a compatibility harness. Linux: Added Timebase system in Lib/Lin32/TimeBase.fth. Added critical section handlers. See the manual for details. Linux: Added multitasker in Lib/Lin32/MultiLin32.fth. Linux: Corrected CPU hogging problems. Linux: Added vfxlin386 which only requires a 386 class CPU. This version is suitable for embedded applications. We can supply Puppy Linux for the Ebox2300SX. Linux: Corrected SAVE for new code size. DOS: Added missing CD functions. Added additional DOS functions. See the DOS functions section of the manual. Improved performance of S" and C" runtime. Corrected EVALUATE to prevent source inliner problems. The words ] and IMMEDIATE now prevent source inlining of the affected words. This change reduces problems with "guru" code and OOP extensions. Added FLUSH-FILE from the FILE EXT wordset. LIB and STUDIO -------------- Win: Reduced CPU usage in Lib\Win32\Genio\Serial.fth. WIN/Linux: Added Lib/IniParser.fth which is another configuration file system that can be used with source compatibility under both operating systems. The generated files are compatible with Window INI files. This sytem is much faster than the Windows INI file mechanism. It will replace the current Windows PROFILE mechanism in a future release. For Linux, this is the default configuration file mechanism and the file is compiled as part of the second stage build. DOS: Added an ANSI.SYS compatible console with cursor positioning, colours, line editing and session line history. This is the default for the second stage build. See the Generic I/O section of the manual. Linux: Added XTERM console driver with positioning, colours, line editing and persistent line history. This code is compiled as part of the second stage build. See the Generic I/O section of the manual. EXAMPLES -------- DOC --- TOOLS ----- Added Nicholas Devilla's iniParser system in both Linux and Windows builds. Note that this has been extended for MPE use. 4.05.2532 14 December 2007 =========================== KERNEL ------ Corrected Extern: and friends for void parameter list in C style APIs. This did not affect Windows users unless calling a DLL that used a "caller cleans up" convention and the argument list was void. WIN: Changed default action of double click in console to LOCATE. Improved ANS and Forth 200x compatibility by converting name headers to upper case during the moves. This should lead to a small improvement in compilation speed as well. Added the following words which convert the strings to upper case on the fly. UMOVE \ src dest len -- UCMOVE \ src dest len -- UCMOVE> \ src dest len -- Added SEARCH-CONTEXT ( caddr len -- 0 | xt 1 xt -1 ) by analogy with SEARCH-WORDLIST. Added PARSE-NAME ( -- caddr len ) from the upcoming Forth 200x standard. This is equivalent to BL WORD COUNT but does *not* perform a copy to a temporary location and returns a string in the input buffer. This string must not be modified. Added EMPTY ( -- ) to clear the dictionary without reloading the system. Linux: The Linux version is now built from the same source tree. It has been tested under White Box 4 and Suse 9. Ubuntu will be next. DOS: PowerNet has been ported to VFX Forth for DOS and is available separately. Depending on the version of DOS and your Ethernet hardware, you may need to write (or ask MPE to write) an Ethernet driver. Some standard Ethernet drivers do not work correctly with some embedded DOS products. DOS: SAVE now produces a true EXE file with the DOS extender included. The use of STUBIT.EXE is only required after the kernel has been cross-compiled. DOS: Forced kernel build and optimisation to 386 instruction set. You can select the Pentium 2 and above instructions, e.g. CMOVcc, using CPU=P4. However, many embedded 586 class CPUS, e.g. AMD SC520, do not include the CMOVcc instructions. DOS: Overhauled the DOS interrupt and exception handling mechanism. See the manual for more details. Added handling of OUT to EMIT/TYPE for the File device in Lib\Genio\File.fth. Improved Lib\Genio\Buffer.fth so that EMIT? returns number of free bytes, and updated documentation. WIN: Improved update performance of the GENIO terminal device to reduce flicker during rapid updates. Enhanced terminal redraw when window is overlaid by other application windows. WIN: Significantly improved Windows message handling performance in the RichEdit and default console devices. WIN: Added width option to separators in toolbars. This makes it easier to replace separators with controls. WIN: Fixed paste problem using Ctrl-V in RichEdit windows. Note that the Windows GetKeyState function returns the state in bit 15, not in bit 31. Added case insensitive string compares IS= and ISTR=. Changed PARSEUNTIL to be case insensitive. Improved code generation for MIN and MAX. Added UMIN and UMAX to the kernel. These words use the CMOVcc instructions if CPU=P4 or above is selected, and so require at least a Pentium Pro CPU. In practice, this means a Pentium 2 or above. If CPU=386 is selected, jumps and moves are used. LIB and STUDIO -------------- Forced >FLOAT in the floating point packs to convert in decimal regardless of the base set by the user. This behaviour is ANS compliant and removes problems in future Forth Scientific Library releases. EXAMPLES -------- DOC --- Rebuilt with some formatting improved, mostly for the assembler. TOOLS ----- 4.02.2441 29 August 2007 ======================== KERNEL ------ WIN: Increased default stack to 4 Mbytes. LIB and STUDIO -------------- WIN: TERMINAL.FTH has been upgraded to enhance use as a child window. Resizing is now supported. EXAMPLES -------- DOC --- Rebuilt with some formatting improved. TOOLS ----- 4.02.2437 14 August 2007 ======================== KERNEL ------ Added MACROEXISTS? ( caddr -- xt nz | 0 ) to determine whether a macro is already defined and MACROSET? ( caddr -- flag ) which only returns true if the macro exists and text has been set for it. Corrected obscure bugs in mixed magnitude multiply and divide code generator operations. WIN: Added a delay in the console-mode version of KEY if no characters are available to reduce CPU usage. WIN: Made a special case of BUTTON , TBSTYLE_SEP in TOOLBAR definitions. This done to allow separators to be converted into other controls. WIN: Added cursor positioning and colour setting facilities to the RichedEdit control driver, and hence to the console. See the GENIO section of the manual for details. WIN: Enhanced the startup code for systems using the -IDE and -CONSOLE command line switches. The default console-mode driver now behaves correctly when piped and runs the Windows message-pump while waiting for keyboard input so that additional windows can be run by these applications. LIB and STUDIO -------------- WIN: Added INITTERMINALSID ( sid -- ) to initialise a terminal. See Lib\GenIO\Terminal.fth. Forth Scientific Library: Updated Vfx4Util.fth, Dates.seq, and Amoeba.seq. WIN: Added colour setting facilities to the Terminal control driver. See the GENIO section of the manual for details. Overhauled the startup code for launching windows from comsole-mode applications. Fixed space and quotes problem in the Studio IDE: File -> Compile and Edit menu items. EXAMPLES -------- DOC --- Rebuilt with some formatting improved. TOOLS ----- 4.01.2393 16 March 2007 ======================== Corrected installer link generation. KERNEL ------ Added M*/ to the kernel. WIN: Corrected save of resources in .rsrc section when dictionary size is changed. Added RANDOM ( -- u ) and CHOOSE ( +n -- u ). RANDOM generates a 32 bit unsigned random number and CHOOSE generates a random number in the range 0..n-1. Added ReadEx-gxx to the GENIO system. This replaces the Reserved function 21. The stack effect is: caddr len sid -- #read ior This change has been made to make ReadEx-gxx match the Read-File operation and so that additional error checking can be provided when data is available, but not as much as was requested. LIB and STUDIO -------------- Updated REPRESENT in the floating point packs. DOS: Added the CLEARSCREEN function to the graphics TSR. Added Lib\Graphics\GDemo.fth which provides more usage examples for the graphics package. WIN: Added a "tip of the day" option to the front end. See Studio\TipOfTheDay.fth for the code. The tips file is TipOfDay.txt in the Bin folder, and you can edit this yourself. WIN: Changed Genio files SocketIo.fth and Buffer.fth to support the Genio READEX function. Some functionality in Buffer.fth has changed. See the manual for more details. WIN: Corrected the DLL Scanner. These changes were required because the previous changes to the heap mechanism revealed faults. EXAMPLES -------- WIN: PowerNet: Revamped PNmisc.fth to reduce code size and to support hex numbers without case sensitivity. In Services\HTTP.fth, CGI variable data is now decoded before storage. CGI variable names are not decoded. The CGI variable string sizes have been increased to 256 bytes. The PDF manual now has an index. WIN: Added a GUI front end dialog in Example\FTPinterface\WinFTP.fth. This provides FTP upload and download for applications. DOC --- TOOLS ----- 4.03.2370 24 November 2006 =========================== KERNEL ------ Fixed installer links problem. Fixed problem in initialisation of Eval version on some machines. This change also permits the evaluation version to use the faster heap mechanism introduced in v4.00 build 2356. Corrected a problem in S= which only affected compares for which the byte/word at the end of the second string was inaccessible, e.g. in a guard block. LIB and STUDIO -------------- EXAMPLES -------- WIN: Added an interface to the FTP client DLL provided by MarshallSoft Computing (www.marshallsoft.com). DOC --- TOOLS ----- 4.00.2356 2 October 2006 ========================= KERNEL ------ Improved dictionary hash system. The impact of this change will be seen in large applications. The CASE ... NEXTCASE control structure must now be implemented as BEGINCASE ... NEXTCASE. The heap system for ALLOCATE, FREE and RESIZE is new and these words are now directly DEFERred. The new heap is much faster but is far less tolerant of programming errors. In particular, releasing the same block twice may/will lead to a crash with the crash screen showing a fault outside VFX Forth. The SYSTEM vocabulary contains INITVFXHEAP ( -- ) and TERMVFXHEAP ( -- ) which initialise and destroy the heap. They are in the cold and exit chains. Note that if you are generating a DLL, these words must be explicitly run as the cold and exit chains are not run automatically before DLLMAIN. The v4.0 code generator produces code that benchmarks about 12% faster overall than that of v3.9. Some code, especially that involving array indexing, may see an improvement of 33% or more, e.g. the Dhrystone benchmark. If you have written custom optimisers, the EAX register is no longer free for use, but must be requested like any other working register. CODE definitions require no changes. Added +MUSTLOAD and -MUSTLOAD compiler switches. +MUSTLOAD forces indirect memory loads to be fetched into a register rather than delayed. For some applications (mostly calculations with array indexing) this can lead to a performance gain. +MustLoad \ -- ; force loads -MustLoad \ -- ; loads are delayed MustLoad? \ -- flag ; returns true if +MUSTLOAD is set Improved performance of CMOVE, CMOVE>, S= and FILL again. i32 Assembler: Allowed scaled index without base register; Corrected DR1? and DIR2? for SIB byte usage. LIB and STUDIO -------------- Overhauled REPRESENT in all floating point packs for correct rounding and to fit upcoming proposals in the Forth200x standards process. EXAMPLES -------- UseNet\FPout.fth has extended tests enabled. DOC --- TOOLS -----