MPE VFX Forth for Windows, Linux, DOS - Release Notes ===================================================== Copyright (c) 1999-2005, 2006, 2007, 2008, 2009, 2010 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 and DOS. The build numbers refer to the Windows version. As of VFX Forth v4.0, the Windows executables are named "VFXBASE.xxx" and "VFXFORTH.xxx". As of build 2661, 3 Sept 2008, the configuration files are called VfxForth.ini. 4.41.3127 1 September 2010 =========================== 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 fiile 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 -----