MPE VFX Forth for Windows - Release Notes ========================================= Copyright (c) 1999-2003, 2004, 2005, 2008 MicroProcessor Engineering Ltd. 133 Hill Lane Southampton SO15 5AF England tel: +44 (0)23 8063 1441 fax: +44 (0)23 8033 9691 net: mpe@mpeltd.demon.co.uk tech-support@mpeltd.demon.co.uk web: www.mpeltd.demon.co.uk This file contains release notes for VFX Forth for Windows up to and including the 3.9x.xxxx releases. 3.92.2069 18 July 2006 ======================= KERNEL ------ To avoid problems with Windows XP Service Pack 2, the floating point state is preserved across all XCALLs. This behaviour is controlled by the global variable XCALLSAVENDP? which can be cleared to stop the NDP save and restore actions. Improved code generation for LOOP. Improved CMOVE, CMOVE>, S= and FILL for current CPUs. In particular CMOVE performance is considerably better. WIN: Modified system set up code for Unix compatibility. WIN: Renamed BEEP to BEEPER in WINTOOLS.FTH to avoid a name conflict with the Windows API function. WIN: Fixed bug in LIB\GENIO\SocketIO.fth. LIB and STUDIO -------------- WIN: Improved display of word name in EXEXCEPT.FTH. WIN: Lib\Helpers.fth - changed EXECVFXDOC to refer to the LOAD_PATH folder. This eases use in applications. The consequences of this change have been applied in STUDIO\XTB.FTH. EXAMPLES -------- Added the Pfannkuch bemchmark file Pfannkuch.fth to the folder Examples\Benchmrk. WIN: Added PowerNet MultiChat example. This provides text chat between VFX Forth applications. WIN: GUIgen overhauled with separate manual. WIN: Corrected bugs in ForthEd2 that affect startup of the turnkey version. DOC --- Reorganised to reduce the number of chapters and to emphasise use of the files in the LIB and EXAMPLES folders. TOOLS ----- 3.90.2029 20 February 2006 =========================== KERNEL ------ WIN: The word -ACCELERATOR added in v3.90 RC1 has a changed stack effect. It was hwnd -- but is now hwnd hAccel -- This change was made to ease use of multiple accelerator tables, e.g. with application extensible dialogs. Major overhaul of command line processing. See the Tools chapter for more details. WIN: The default exception handler displays the name of the Forth word in which the exception happed. WIN: Major overhaul of the printer support. See manual for more details. WIN: Modified resource script parser to accept escaped strings in some places. Note that this affects the use of the '\' character. WIN: Added many additional Windows API calls and utility words. See the manual chapter "Windows tools" for more details. WIN: Revamped message loop handling to ease use of accelerators and MDI applications. See manual for more details. Added the value EXTERNWARNINGS? which can be set non-zero to show where attempted redefinitions of DLL or shared library calls occur. Added Z\", for laying down zero-terminated escaped strings. Added (u.) and (u.r) for passing numeric strings. (u.) \ u -- caddr len (u.r) \ u +n -- caddr len Added (:) which starts a colon definition whose name is given by a string. (:) \ caddr len -- colon-sys Fixed LOCALS| with :NONAME. LIB and STUDIO -------------- WIN: Updated LIB\GUIGEN with a grid control and HTML and PDF manuals. WIN: Overhauled Lib\Helpers.fth. Moved some definitions into the kernel and added others. DocGen in Lib\DocGen.fth no longer generates an HTML BGCOLOR when the output file is INDEX.HTML. This was done because most MPE project files use frames. Added HTMLBACK ( caddr len -- ) to set the HTML background colour, e.g. s" #00C1B4" HTMLback A line break macro *\br{} has been added. Bulleted list can be nested and the bullet style can be controlled using the *( and *) tags. See the manual for more details. Overhauled Lib\Genio\File.fth to reduce size. Added INITFILEDEV ( sid -- ) to initialise dynamically allocated file devices. Added /FILEDEV ( -- len ) which returns the size of the file device structure. Note that file devices still do not affect OUT. Added Lib\ConfigTools.fth to ease use of the Forth interpreter for application configuration files. See manual for more details. EXAMPLES -------- WIN: Added ForthEd2 text editor. This an MDI text editor that demonstrates many Windows techniques including: Multi Document Interface (MDI) techniques keyboard acclerators printing text font selection resource scripts edit controls dialogs tool tips and string tables configuration files multitasking pipes DocGen project techniques Generating a turnkey application. DOC --- Reorganised to reduce the number of chapters and to emphasise use of the files in the LIB and EXAMPLES folders. TOOLS ----- 3.80.1941 30 November 2005 ========================== KERNEL ------ Fixed D> - we're really embarassed! WIN: Fixed DLL generation bug in support DLL. LIB and STUDIO -------------- Tuned DocGen for MikTex v2.4. Changed LIB\GENIO\Serial.fth so that the KEY function always blocks until a character is available. EXAMPLES -------- PowerNet has been enhanced to provide scripting in the WSDL and ASMX file requests. See the PowerNet manual for more details. Added the CLASSVFX folder which contains intelligent structures - a halfway house between structures and a full object-oriented system. See ClassVFX.fth for more details. DOC --- Rebuilt manual with MiKTeX v2.4. This corrects previous problems with bookmarks in the PDF manual. TOOLS ----- WIN: MikTex v2.4 is supplied with all CD releases. 3.80.1936 14 September 2005 ============================ KERNEL ------ Improved protection in text macro expansion against misused '%' delimiters. Added MS" and MC" which behave like S" and C" but expand text macros at compile time. Removed optimiser bug for sequence "R> >R R@" which can be encountered during source-inlining. Added CMOVcc instructions to the assembler. Added CPU selection for assembler and code generator. See the assembler section of the manual. Added MEM-OPEN-FILE ( caddr u fam -- handle ior ) and INCLUDEMEM ( caddr u -- ) for compiling from memory blocks. Fixed memory leak in cached memory file closes. Added PROTALLOC ( u -- addr } and PROTFREE ( addr -- ) which are convenient versions of ALLOCATE and FREE that THROW on error. Added S\" C\" Z\" and \", which behave like S" C" Z" and ", but use '\' escapes for control characters, quote marks and so on. See the manual for full details. Moved INSTANCE to LIB\OBSOLETE.FTH. Prevented base overrides being checked twice in INTEGER? under some conditions. WIN: Added EMPTYIDLE to CR in RichEdit device to force output to display. DOS: Changed DOS Bios drivers to be tasking aware. LIB and STUDIO -------------- Added Lib\XML.fth which provides a simple user extensible XML input parser, facilities for reading data from XML files and for outputting data in XML format. Lib\Genio\Buffer.fth enhanced. DOS: Lib\Genio\Int010.fth updated. WIN: Lib\Genio\socketio.fth: New general purpose socket functions. WIN: Lib\MultiWin32: Fixed initialisation problem in semaphores. WIN: Lib\TimeBase.fth: Preserved old version of MS and start timers in compilation and at cold start. Changed and documented SETPOS action of the memory buffer device in LIB\GENIO\BUFFER.FTH. EXAMPLES -------- WIN: GuiGen enhanced. Now includes Grid and other controls. WIN: PowerNet has been extended to support SOAP and XML web services. An example web service is provided. Sudoku solver courtesy of Rob Spykerman. Added FileHacks.fth which contains quick and dirty file handling tools for use during development. DOC --- Added PDF versions of "Prgram Forth" by Stephen Pelc, "Thinking Forth" by Leo Brodie, the ANS standard and a quick reference to it - thanks to Neal Bridges. DOS: Added TED text file editor documentation. TOOLS ----- DOS: Added TED text file editor manual. 3.70.1889 29 April 2005 ======================== KERNEL ------ SAVE, SAVECONSOLE and SAVEGUI now set CONSOLEAPP? appropriately. If you do not want this behaviour, use $SAVEEXT instead. Optimiser improvememts for zero literals. The DEFERred word REDEFHOOK now contains all display action when a word is redefined. The default action is (REDEFHOOK). LIB and STUDIO -------------- XREF.FTH has been updated to make it smaller and more reliable. These changes fix problems when saving and reloading executable and XREF data files. These problems in turn lead to incorrect operation of XREF-ALL and XREF-UNUSED. EXAMPLES -------- Added FUZZY.FTH, a fuzzy logic example taken from public domain. Added MD5.FTH example. Made PowerNet's page directory user configurable. DOC --- TOOLS ----- 3.70.1834 4 January 2005 ========================= KERNEL ------ Detail changes to improve displays for console applications in the Windows, DOS, and Linux versions of VFX Forth. PAUSECONSOLE \ -- sid If the output device is the same as PAUSECONSOLE (a VALUE), output by words such as DUMP, WORDS and DIS will pause every so often. The height of the display (characters per column) is given by the contents of the variable C/COLS. C/COLS \ -- addr Updated HALT? to include this behaviour. Increased maximum image size to 32 Mb. Moved DocGen.fth into the LIB folder. DocGen is no longer part of PFWBASE.EXE, but is part of PFWVFX.EXE. This change reduces the size of the base VFX Forth system. Added a default icon to all saved EXE and DLL files. Note that the new VFXSUPP.DLL with this release must be used. No harm will come if it is not used, but the VFX Forth icon will not appear in SAVEd applications. Added words to help handling of pathological code styles which may affect the source inliner. See the manual's VFX Code Generator section for more details. Sinlined? \ xt -- flag RemoveSin \ xt -- DoNotSin \ -- Added a compiler directive LOOPALIGNMENT ( n -- ) which forces the top of BEGIN..XXX and DO..LOOP structures to be aligned on an n-byte boundary, where n must be a power of two. This is useful to force the head of a loop onto a cache line or memory buffer boundary. #16 LoopAlignment \ set to 16 byte boundary 0 LoopAlignment \ revert to lowest setting The default is 8. Improved code generation of UM/MOD. Added UM* optimiser. Improved indexed memory handling. Improved DO..LOOP code generation. Improved BEGIN..XXX loop performance for Pentium 4. Improved >R R@. Improved the Pentium 4 code/data alignments when +IDATA is active, giving a 12% improvement in the overall benchmark suite and a 69% improvement in the LZ77 test performance. LIB and STUDIO -------------- Moved DocGen.fth into the LIB folder. Added table of contents and index file generation to the HTML personality in DocGen. Added index generation to the Texinfo personality. See the manual for further details. The Studio build no longer automatically generates DocGen files. The list of files to be used by DocGen is in Vfx3DocFiles.fth. Rewrote the array handling in LIB\FSL\LIBRARY\VFXUTIL.FTH to cope with Pentium 4 data alignment requirements. Note that with these changes, the use of the FSL word & is restricted to use with DEFINES. EXAMPLES -------- Added RC4.FTH, which handles the very useful RC4 stream encoder. Added BIN2C.FTH which converts a binary image file to C source code which represents it. DOC --- Added a PDF version of the classic Forth book "Thinking Forth" by Leo Brodie to the documentation in Thinking-forth.pdf. Added a paper on floating point arithmetic in FPgoldberg.pdf. TOOLS ----- Added a new Tools folder which contains utilities we have found useful. The Tools folder is not present in the Evaluation version of VFX Forth, but all these tools are available from the Internet. ResHacker can be used to add to and modify resources, including application icons, in executable files. IconSuite is an Icon editor which allows several resolutions of one icon to be edited and included. Frhed allows any file to be patched. 3.70.1691 3 August 2004 ======================== KERNEL ------ The default behaviour of MDIIDLE has changed to use the GetMessage() API call rather than PeekMessage(). If you need the previous behaviour use MDIBUSYIDLE or the new MDIEMPTYIDLE. See the manual for more details. Added LISTBOX and COMBOBOX id, x, y, w, h [,style [,exstyle]] to the resource script compiler. Improved disassembler for DEFERred words. Added REDEFHOOK ( -- ) for processing redefinitions. Added the value SINACTIVE? ( -- flag ) which returns true when the source inliner is active. Added GetComputerName, GetComputerNameEx, GetVersion and GetVersionEx API calls. Made >NUMBER case insensitive. Added $, ( caddr len -- ) to compile a string into the dictionary. The end of the string is aligned. Added M", which behaves like ", except that text macros are expanded at compile time. Added .MACRO which displays the macro text for macro . Enhanced DocGen's formatting for the HTML and Texinfo personalities to improve the manual layout with recent versions of MikTex. These changes were tested with MikTex v2.3. Removed redundant variable $LENGTH in BUILD.FTH. Performed a major overhaul of DocGen to reduce size and add new features. DocGen now includes formatting commands that can be used inside the DocGen comments. See the manual for more details. Corrected a mismatch between the cross compiler and VFX Forth optimisers which affected CONTEXT and MINCONTEXT. This fault was introduced around build 1500. Optimised more kernel user variables, HALF-ALIGNED, and added code generators for W+! C+! -! W-! C-!. Improved error recovery after code generation errors. Overhauled the CALLBACK mechanism to make it smaller, significantly faster and safer. In order to support large applications with serious subclassing, the default stack allocation has been increased to 2Mb. As part of these changes, the return stack (which also holds local variables and local buffers) is now restricted to 64kb and very large numbers of nested big local buffers may overflow this limit. Callbacks may be nested about 25 deep before problems may occur. Note also that any application which compiles CALLBACK-EXIT directly must change: CALLBACK-EXIT DoCall, \ or DoLayAbsCall to: CALLBACK-EXIT DoLayAbsCall \ lay call $C2 c, #in cells w, \ lay RET # #in cells $C3 c, \ keeps disassembler happy If you are using CALLBACK-ENTRY or CALLBACK-EXIT yourself, please contact MPE so that we can avoid future problems. Note also that the MAKE-EXE.EXE and VFXSUPP.DLL have also been updated. They are compatible with earlier versions but create applications with more stack space. Changed to an hourglass cursor when saving the base INI file as Windows 2000/XP is very slow at this. LIB and STUDIO -------------- Modified the debugger user interface in STUDIO\DEBUGGER\DEBUG.FTH and added a a function to step out of a word. Added user help on '?'. Added function to set a breakpoint after the current instruction in order to permit loops to be run to completion. Modified the debugger file SOURCEVIEW.FTH so that an update is always performed. This improves the display but changes the display highlight to the source token that causes optimised code generation for that address. Improved the key entry routines to flush before key entry is required. Added FINDXREFNEAREST ( pc xt -- info|0 ) to XREF.FTH. This returns the XREF packet whose code range includes pc. Unlike FINDXREFINFO, which returns the first packet starting at pc, FINDXREFNEAREST returns the packet which includes pc. Added a warning message box when XREF memory overflows. A floating point optimiser has been added to NDP387.FTH, nearly doubling overall performance of the matrix multiply benchmarks. The unoptimised version is still available as NDP387.V36.FTH. The file LIB\FSL\VFXUTIL.FTH also has changes to improve index generation in 2-D arrays. A matrix multiplication benchmark has been added in EXAMPLES\BENCHMRK\MM.FTH. The FSL file DYNMEM.SEQ has been removed as all its functionality is now part of VFXUTIL.FTH. Because the FSL requires it, the range checked version of F** has been restored in the floating point packages. Added LIB\DEBUGTOOLS.FTH which provides debugging tools compatible with those provided for embedded systems. Added .TASK ( task -- ) to LIB\MULTIWIN32.FTH. Changed to an hourglass cursor when saving the Studio INI file. EXAMPLES -------- A floating point matrix multiplication benchmark MM.FTH has been added to the EXAMPLES\BENCHMRK folder. The CDKEY example has a second version that uses GUIgen for its user interface. 3.62.1500 14 April 2004 ======================== The installer has been updated and problems with Windows XP should now be a thing of the past. KERNEL ------ Improved text string parsing in resource file compiler to eliminate problems with null text strings, e.g. in GROUPBOX definitions. EXTERN: definitions may now extend over multiple lines. Added code generators for: HALF-ALIGNED W+! C+! -! W-! C-! Added NEXTCASE and NEXT-CASE. These behave like ENDCASE and END-CASE respectively, but compile a branch back to CASE. The result is a loop in which the OF...ENDOF clauses cause an exit from the loop. Moved OFFSET and BOFFSET to LIB\OBSOLETE.FTH. The FORTH vocabulary now has 256 threads. This greatly improves compilation speed, especially for large applications. For other wordlists, the default number of threads is now 32. The name hashing algorithm has changed. Changed the third stage build macros. Removed the redundant macro KRNLSRCD. Improved the reliability of >NAME. Because >NAME can theoretically fail, SEARCH-WORDLIST and friends now set the value LASTNAMEFOUND ( -- nfa|0) to the NFA of the last word found, or 0 if one was not found. As a consequence the words (HIDE) and (REVEAL) have been removed and similar functions HIDENAME and REVEALNAME (see manual) are provided. Note that IP>NFA attempts to find a name field from any address, and >NAME should only be used from an xt. MOVEWORDTOWID is replaced by MOVENAMETOWID. See the manual for more details. Fixed problems using local variables in the CREATE portion of defining words. Added the C style "/* ... */" comment. Added SHOWMACROS ( -- ) to display all text macro names and contents. Added VFX icon to main window. Fixed occasional problem with local names. LIB and STUDIO -------------- LIB\HELPERS.FTH: Renamed elements of the /CHOOSEFONT structure to avoid name conflicts in applications. Added "bouncing ball" mode to DFX debugger, which shows the source code of the words being debugged, with the display being updated as source token is reached. This mode requires the code being debugged to have been compiled with XREFs. Added ExecAppDoc ( z$ -- ) to LIB\HELPERS.FTH to run a file or document from the directory from which the application was loaded. Fixed problem in LIB\BLOCKS.FTH. EXAMPLES -------- Added CDKEY folder providing a framework for generating application install keys. This also demonstrates some interesting Windows techniques. Added GUIGEN folder providing a more Forth-like framework for building GUI interfaces with less dependence on Microsoft tools and documentation. Our thanks to Graham Smith and Tectime Data Systems Ltd for permission to publish this code. 3.60.1388 16 December 2003 =========================== The Forge environment is no longer part of the installation, but is supplied as FORGE.ZIP on CDs or as a separate download for the evaluation version of VFX Forth. KERNEL ------ Increased size of data stack to 128kb in callbacks. Increased guard space on data stacks to 16 cells to improve robustness on data stack underflows in callbacks. Disabled source inlining of words containing references to EXTERN: definitions. This removes about 10 kb from PFWVFX.EXE. Improved code for references to some DEFERred kernel words. Removed wsock32.dll from the library list and replaced it with ws2_32.dll. LIB and STUDIO -------------- Reworked LIB\SOCKETIO.FTH and added new IOCTL functions. EXAMPLES -------- Reworked the PowerNet server architecture. See the manual especially for the format of a server task. 3.60.1364 4 December 2003 ========================== New features ------------ VFX Forth 3.60 can generate DLLs which are usable from any programming language system. VFXSUPP.DLL has also been updated for DLL generation. See the manual for more details. The PowerNet Echo, Telnet and Web servers have been ported to VFX Forth and are shipped with the Professional and Mission versions. These are multi-threaded servers. The Web server supports CGI and ASP, with Forth being used as the scripting language. There is a separate manual for PowerNet in the EXAMPLES\POWERNET\MANUAL folder. Added Pentium 3/4 specific optimisations. See the kernel section below for more details. KERNEL ------ The file Sources\Kernel\386Com\OPTIMISE\P4OPT.FTH (with Professional and Mission versions) contains a preliminary test of data space management for Pentium 3/4 processors. Initial results show that performance is improved by a factor of 2.3 on BENCHMRK.FTH and that performance is now independent of location. There is no degradation of performance on other CPUs. The code generation switches are: +IDATA \ -- ; enable P4 optimisations -IDATA \ -- ; dsable P4 optimisations Note that when enabled, phrases such as VARIABLE ALLOT will NOT give the expected result, but the following will be correct. BUFFER: Read the manual and the source code! Added WIN32CATCHBYTHROW ( -- ) to set Windows exceptions in the current thread/task to cause a THROW regardless of how other threads are set up. Added a Winsock device to the Generic I/O devices in LIB\GENIO\SOCKETIO.FTH. This also provides general WinSock primitives. Added ALIASEDEXTERN: which permits the Forth name of a DLL function to be different from the function name. This permits the API accept function to be accessed as SACCEPT to avoid a name conflict with the Forth word ACCEPT. Added the Windows data type SOCKET for EXTERNs. Added EKEY and EKEY? to the kernel for completeness. Similarly added DELLINK. Moved MS ( n -- ) into the kernel and deferred it. Fixed a callback problem when the number of input parameters is zero. Renamed GETCOMMANDLINE ( -- addr len ) to COMMANDLINE to avoid a name conflict with the API function GetCommandLine ( -- zaddr ). Added INIT-MODULE and TERM-MODULE to the modules system. See the manual for more details. LIB and STUDIO -------------- Added the [SYNC ... SNYC] structure and WAITFORSYNC to LIB\MULTWIN32.FTH to allow synchronisation of USER variables. See the manual or code for more details. Added TASKSTATE ( task -- state ) to allow users to determine if a task is running or inactive. Various internal changes make WINPROCINITIATE and WINPROCTERMINATE redundant, and these will be removed in a future release. Added heap functions to LIB\GENIO\BUFFER.FTH. See the manual or code for more details. Added LIB\GENIO\SOCKETIO.FTH for a Forth sockets interface and generic I/O device. See the manual or code for more details. EXAMPLES -------- Added GENDLLTEST.FTH as an example of generating a DLL. Added the EXAMPLES\POWERNET folder for Professional and Mission versions. 3.50.1222 17 September 2003 ============================ KERNEL ------ In order to fix some problems with Windows 2000, the kernel startup and support DLL have been changed. You must ensure that the right version of the support DLL is used with this release onwards, otherwise VFX Forth is unlikely to run. LIB\SAFECALLBACK.FTH has also been changed. Made the 2/ kernel definition perform an signed right shift to the ANS standard. This change will not affect optimised code as the code generator has always been compliant. Similarly for 4/. Added ARSHIFT ( x1 u -- x2 ) which performs an arithmetic right shift. Removed optimisation of division by a binary power, e.g. "4 /", as this is floored division rather than symmetric for negative dividends. A hangover from the Forth-83 ProForth 2.x kernel. Added CommandLine ( -- c-addr len ) which also initialises the ARGC/ARGV mechanism. Corrected the action of command line -CONSOLE switch, and added the following EXTERNs: Extern: BOOL PASCAL AllocConsole( void ); Extern: HANDLE PASCAL GetStdHandle( DWORD nStdHandle ); Extern: BOOL PASCAL SetConsoleMode( HANDLE hCons, DWORD mode ); Extern: BOOL PASCAL GetConsoleMode( HANDLE hCons, DWORD * mode ); At long last fixed KEY? for console mode applications. LIB and STUDIO -------------- EXAMPLES -------- 3.50.1183 2 September 2003 =========================== KERNEL ------ Corrected DOCGEN HTML output for headers. This change improves display for the Opera and Netscape browsers. Forced CODE and COLON definitions to a 16 byte boundary, which improves performance by approximately 20% on some benchmark tests. Additional words have been provided to control the alignment. Children of CREATE are also aligned by default to a 16 byte boundary. 16 VALUE /CODE-ALIGNMENT \ -- n ; must be a power of two 16 VALUE /DATA-ALIGNMENT \ -- n ; must be a power of two SMALLER \ -- ; Set alignments to 4 FASTER \ -- ; Set alignments to above Added D0= optimiser for minor benchmark improvement. Added additional protection to :NONAME Added LATEST-XT ( -- xt ) which returns the XT of last definition with a dictionary header. LIB and STUDIO -------------- Replaced LATEST CTRL>NFA NAME> by LATEST-XT. 3.50.1115 12 May 2003 - v3.50 ===================== KERNEL ------ Retested the optimiser against the benchmark code, and modified the default state of various switches to increase overall performance. Added APPEND which is identical to ($+) except for its name. Adds a string to the end of a counted string. : append \ c-addr u $dest -- 3.50.1090 28 April 2003 - v3.50 ======================== Removed Forge from the distribution. KERNEL ------ Removed LR_SHARED flag from RESOURCE::CreateBitmap Added PROFILE::DeleteKey ( c-addr1 u1 -- flag ) to remove a key entry from a private profile. Restored the -IDE and -CONSOLE command line switches. The -IDE switch allows output to be captured by AIDE. The -CONSOLE switch runs a GUI application in console mode. Fixed ALIAS: for the pathological case of redefinitions. CREATE-FILE now expands text macros. Modified the order of some words to improve the manual. Added documentation for some undocumented words. Removed unused and undocumented words from the kernel. Corrected problem with INTEGER? in which '0' could be treated as a hexadecimal prefix in rare cases. Added YIELD ( -- ) which is defined as "BUSYIDLE 0 SLEEP". These are the minimum actions required to keep the application message loop running and to permit Windows to service other programs without hogging the CPU. The multitasker word PAUSE is now DEFERred and in the kernel. Until a multitasker is installed, its action is YIELD. The word PAUSE in LIB\MULTWIN32.FTH is replaced by (PAUSE) which becomes the action of PAUSE. (PAUSE) includes "BUSYIDLE 0 SLEEP". Exposed HWNDMAIN so that applications can use this as a global application window handle. See the Turnkey section of the manual. WINAPPHANDLE@ is now obsolete and has been moved to LIB\OBSOLETE.FTH. Enhanced the resource compiler so that child windows work better. Note that menus can be referenced in WINDOW scripts. See EXAMPLES below. Removals: *** CCS please note! *** Removed a number of obsolete words from the kernel. Their sources may be found in LIB\OBSOLETE.FTH. The file MINPFW22.FTH is no longer precompiled. It may be found as LIB\MINPFW22.FTH and will require LIB\OBSOLETE.FTH. Additions: For number scanning: variable ign-char char : ign-char ! This character (if non-zero) is ignored by the number scanner. This makes it much easier to enter 32 bit hex numbers correctly! Changed .LWORD to match. For filename scanning, in preparation for the Linux version. variable dir1-char char \ dir1-char ! variable dir2-char char / dir2-char ! : dirChar? \ char -- flag Returns true if the character is one of the two directory separators specified in the system variables DIR1-CHAR and DIR2-CHAR. : Extension? \ c-addr u -- len true | false Treats c-addr/u as a file name and returns the extension length and true if the file name has an extension (i.e. it ends in '.xxx'), or just false if no extension is present. See the manual for more details. The value CONSOLEAPP? ( -- flag ) returns true if an application was saved as a console mode application. Use CONSOLEAPP? if you want initialisation code or application code to behave differently if the application is running in console mode rather than in GUI mode. The utility MAKE-EXE.EXE is no longer needed as it has been integrated into the support DLL VFXSUPP.DLL. This is almost transparent to the user as SAVE now generates an EXE file directly. To create a console mode application as before, use SAVECONSOLE . MAKE-EXE is still supplied with the Professional and Mission versions to generate KERN386.EXE from the image file. The EXTERN: mechanism has been extended to support calling C++ functions exported in DLLs. See the manual section about "Linking to External API Calls" for more details. Example code is available in EXAMPLES\VC++. More information about the CONTEXT and CURRENT vocabularies (or wids) is presented on the status bar. LIB and STUDIO -------------- Added memory overflow protection to LIB\XREF.FTH. Added LIB\CQUEUES.FTH which provides circular queues. Forced F>D and F>S to truncate to 0 according to the ANS specification in LIB\NDP387.FTH, LIB\HFP387.FTH and LIB\HFPGL32.FTH. Added FR>D and FR>S which use the current rounding mode. *** CHECK YOUR FLOATING POINT CODE *** Modified PAUSE in LIB\MULTIWIN32.FTH to perform BUSYIDLE and to yield the time slice to Windows. Although this may marginally reduce the responsiveness of VFX Forth tasks, it considerably reduces the impact on other programs. PAUSE is now a DEFERred word in the kernel and PAUSEs have been added to the LIB\GENIO functions as appropriate. This prevents some problems when running GENIO devices in threads. Added LIB\OBSOLETE.FTH which contains obsolete words removed from the kernel. Modified OVLVFX.FTH to use EXTENSION? Added WINPROCINITIATE and WINPROCTERMINATE to LIB\MULTIWIN32.FTH to perform safe starting and terminating of tasks from winprocs and callbacks. See the manual. EXAMPLES -------- Added examples of using the resource scripts in the following files in the EXAMPLES directory. CHILDWIN.FTH - a simple child window MENUTEST.FTH - a parent window with a menu The directory EXAMPLES\VC++ has been added and contains example code for linking to C++ DLLs produced by VC++ v6.0. 3.40.0891 11 August 2002 ========================= KERNEL ------ Fixed stack fault for S= ( addr1 addr2 len -- flag ) for len=0. Added more protection to the RICHEDIT device handler. Checked that uses of SETPROP have corresponding REMOVEPROP and added Windows API call RemoveProp to the kernel. OUT is now correctly updated inside ACCEPT when directed to a RichEdit device. LIB and STUDIO -------------- Checked that uses of SETPROP have corresponding REMOVEPROP. EXAMPLES -------- 3.40.0873 16 May 2002 ====================== KERNEL ------ Improved DO..LOOP code generation by favouring the use of I over LOOP. Performance when I/J are not used should be marginally slower, but caching makes this very marginal. When I/J are used, loop performance improves and benchmarking indicates an overall performance improvement of 1-2%. For the moment, the code generation for DO..LOOP and friends is controlled by the switches +NEW-DO and -NEW-DO with the state being returned by NEW-DO? Added optimisation of I I pairs. Improved code generation for EXECUTE. LIB and STUDIO -------------- EXAMPLES -------- 3.40.0849 08 April 2002 ======================== KERNEL ------ Extended the size of a number conversion buffer to 256 characters so that it cannot be overflowed. Fixed bug in source inliner for empty DOES> clauses. LIB and STUDIO -------------- Replaced LIB\GENIO\FCONDEV.FTH by LIB\GENIO\TERMINAL.FTH which has identical functionality, but has been overhauled and is faster. The previous GCONSOLE: definition is replaced by TERMINAL: . Renamed CreateFont to FontSelector defined in LIB\HELPERS.FTH and used in STUDIO\XTB.FTH. This avoids a name conflict with the Windows API CreateFont(..) function. Added Hans Bezemer's Forth Primer as DOCS\FORTH_PRIMER.PDF and placed a link to it on the Help menu. Thank you, Hans. EXAMPLES -------- Added EXAMPLES\REMEMBER.FTH which implements a variant of MARKER called REMEMBER. 3.40.0843 26 March 2002 ======================== KERNEL ------ Fixed bug in Cursor handling of WINDOW definitions. Added display of free space to status bar. Prevented binary inlining of words containing DO..LOOP and friends because of absolute address references. The disassembler has been modified to permit user extension so that the disassembler, and hence the debugger, can step over user defined compilation structures. Decompilation of CALL instructions causes the target address to be passed to the SWITCH chain DASM-SWITCH. To use this, look at the disassembler source code in: SOURCES\KERNEL\386COM\DASM386.FTH Added LIB\SAFECALLBACK.FTH for very paranoid error recovery through callbacks. Added LINK, and ADDLINK to the kernel for chain construction. *** CCS please note *** Modified dictionary search mechanism to avoid problems in multi-level overlay builds. This has also affected the source inliner and LIB\OVLVFX.FTH. The DICTIONARY-LIMBO mechanism has been removed. Enhanced INFORTH? to return true for addresses in the transient dictionary used by local variables. Added the following words which allow short branch gneration to be controlled more easily. [-short-branches \ -- sys ; start section with no short branches [-short-branches \ -- sys ; start section with short branches short-branches] \ -- sys ; end section, restore previous state Added WALKALLWORDS ( xt -- ) which applies xt to all words in the dictionary using the rules of WALKWORDLIST. Added CHECKDICT which generates a -418 THROW if the dictionary is corrupt. The NFA of the bad word is contained in the value DICTBAD. Added CHECKDICT to SAVE and MAKE-OVERLAY. LIB and STUDIO -------------- Moved INTERPWINDOW.FTH from STUDIO\DEBUGGER to LIB. The debug interprereter is now available from the dialog produced by EXEXCEPT.FTH. As a consequence EXEXCEPT.FTH also compiles LIB\HELPERS.FTH LIB\INTERPWINDOW.FTH LIB\MULTIWIN32.FTH Overhauled LIB\OVLVFX.FTH for the new dictionary search mechanism and added more error checking. Overhauled REPRESENT and >FLOAT in the the floating point packs. EXAMPLES -------- Added EXAMPLES\PROFILE.FTH, a simple execution profiler. 3.40.0786 21 February 2002 =========================== KERNEL ------ Corrected size of PAD in environment system. Do not rely on the size of PAD being greater than 256 bytes in future releases. Finally fixed assembler bug in FSUB/R reg, reg opcodes. Added similar corrections to the disassembler. Fixed problem which required the source inliner to be turned off when defining BNF rules. This problem is discussed in the "gotchas" section of the VFX optimiser chapter. Improved code generation for " +". Fixed assembler bug for immediate shifts by 0. LIB and STUDIO -------------- Improved the rounding control in the floating point packages, and prevented numeric display errors. Extended the floating point disassembler for FIST opcodes. Added checkbox support to LIB\HELPERS.FTH. Added "Edit on Error" option of the STUDIO Options -> Set Editor dialog. When checked, the system will open the editor at the file and line that caused the error. EXAMPLES -------- Added DDE examples in the DDEEX and DDEML folders. Both of these demonstrate an interface to Excel. The DDEEX example is now mostly historical, as it uses the original DDE interface. The DDEEX example is present to ease conversion of ProForth 2.x applications. The DDEML example has been overhauled for VFX Forth and uses the DDE Management Library (DDEML) interface. The DDEML example is the recommended one. FORGE ----- FORGE WILL BE UNSUPPRTED IN A FUTURE RELEASE! Because all the functionality of Forge except the file pool is now available in the Studio environment, Forge will no longer be maintained and may be removed in a future release. If you want it, we may put the sources in all releases as unsupported code. 3.40.0764 12 December 2001 =========================== KERNEL ------ Added a status bar to the console. Corrected RESOLVEINCLUDEFILENAME by terminating a ( ...) comment! Provided more optimisation control for the truly paranoid. These changes are documented in the manual. Increased the size of the optimiser working stack to cope with Win32 API calls with 32 parameters. Added code generators for SET-BIT CLEAR-BIT TOGGLE-BIT and TEST-BIT. These are bit mask operators on bytes. TEST-BIT has been moved from the file STUDIO\DEBUG.FTH to the kernel. Exposed the value WARNINGS? which is true when redefinition warnings are enabled. When this flag is true, the source inliner will now automatically handle the source inline problem reported in build 0688 by preventing the new definition from being source inlined. Bullet-proofed EVALUATE to avoid interactions between users' macro handlers and the source inliner. Similarly bullet-proofed SAVE to remove source-inline state from the output. Added the ANS word RESIZE-FILE ( ud fileid -- ior ) which had inexplicably disappeared! Moved GETPATHSPEC to the first stage build, and incorporated it into INCLUDE and friends, so that INCLUDE and friends will now handle file names with spaces. Names with spaces should be in the forms: "foo bar.fth" the quotes will be removed or: ("foo bar.fth") the brackets will be removed, but the quotes will be retained Added DOCONLY to DOCGEN to handle generation of documentation. As this uses GETPATHSPEC, long file names are supported. Fixed ALLOCATE bug in RICHEDIT.FTH and checked for same in the other source files. Fixed bug in the Richedit DELETE key handler for len=0. Fixed bug overwriting initial contents of line. LIB and STUDIO -------------- Changed overlay handler to require less space for relocation records. Fixed relocation issue at end-address+1. See LIB\OVLVFX.FTH. Changed CPUID code in LIB\PENTIUM.FTH. 3.40.0688 21 August 2001 ========================= KERNEL ------ Speed improvements in the source inliner. Null definitions are short-cuited without rerunning the source code. If you redefine a word and call the previous version in the new word, you must disable the source inliner around the new word. If you do not do this, when FOO below is later expanded, the source inliner will try to expand the new FOO rather than the old FOO when old FOO is referenced inside new FOO inside BAH. [-sin : foo ... foo ... ; sin] : bah ... foo ... ; Improved the performance and size of CATCH and THROW. LIB and STUDIO -------------- Added CREATEFONT ( -- hfont|0 ) to LIB\HELPERS.FTH to run the Windows font selection dialog, returning a font handle or zero to indicate no selection. Added a console font selection to the Options menu of Studio. Put [-SIN and SIN] around redefinitions of the form described in the KERNEL notes above. Reduced size of the relocation records in OVLVFX.FTH. 3.40.0667 15 July 2001 ======================= KERNEL ------ Added OR! AND! XOR! and BIC! which act like +! but perform logical operations on cells in memory. BIC! ( x addr -- ) is a bit clear operation which inverts x and then performs AND!. Fixed bug in overlay search exclusion. Improved optimisation of "2 PICK". The RichEdit generic I/O device can now use the cursor, Delete, Home and End keys for editing the current line. The previous control key operation is maintained. See the Richedit Generic I/O device section of the manual. Added GetTickCount ( -- ms ) to the set of predefined Win32 API calls. GetTickCount returns a system timer value in milliseconds. Improved compilation speed. Added SYSERRDEF for defining MPE and system extension error messages. See manual. LIB --- Tidied up the error recovery in LIB\OVLVFX.FTH. Added BLOCK support in LIB\BLOCKS.FTH, and a sample screen file LIB\GOODIES.SCR. 3.40.0610 29 June 2001 ======================= KERNEL ------ Changed ?DNEGATE to use a 0< test for compatibility with past practice and with ?NEGATE. Added the VFX Forth optimiser changes to the XVFX 386 cross-compiler which generates the first staqe build. The result is a faster and smaller kernel. Added redundant move elimination to the VFX code generator. While this is under test, you can use +MERGES and -MERGES to control merging of instructions. Improved the number of optimised USER variables. Removed the FAST-USER control switches. Paid some attention to the source inliner. The result is faster and smaller applications. Overhaul of the BNF parser so that it can handle scripts with or without line break checking. The backtracking is now integrated with SAVE-INPUT and RESTORE-INPUT for better error recovery. Overhaul of the resource compiler to reduce size and improve error checking in complex scripts. See the manual for details of interpreting resource script errors. Improved performance of ZSTRLEN and ZCOUNT. Added code generators for , W, and C, in preparation for a blitz on compile speed. Rewrote many of the shell commands to handle macros better, and to process long file names. Exposed GETPATHSPEC which handles long file names, MATCHFIRSTFILE, EXECPERDIRENT and EXECPERFILEENT. See the Shell command section of the manual for details. Changed the build system so that the VFXPATH macro does not require a trailing '\' character. 3.40.0481 16 June 2001 ======================= KERNEL ------ Moved WCOUNT and (W") to KERNEL.FTH and added (W") to the disassembler. See also VFXBASE\PARSEL.FTH. Fixed disassembly of code in overlays. Fixed overlay problems when referencing an absolute address in another overlay. Added LOCATE information to the whole of the kernel. Changed source macro organisation. Added value BUILDLEVEL and DEVPATH macro. If BUILDLEVEL is set to -1 the contents of the DEVPATH macro are prepended to the source file name used by source tracking functions such as LOCATE. See the manual for full details. Added default initialisation of IP-HANDLE and OP-HANDLE from variables IP-DEFAULT and OP-DEFAULT during callback and thread initialisation. Unless modified by the user, these point to the development console. Converted LINE# to a USER variable. Added OP-LINE# as a USER variable which is incremented by CR. These changes emphasise that LINE# is the source input line number for source file management and OP-LINE# counts output lines. Line number counting is now accurate. Added GET-WORD which behaves like WORD except that it will REFILL the input stream and try again if a token is not found. Extended the behaviour of { ... } local variables so that { ... } may extend over multiple lines. Improved the behaviour of RESTORE-INPUT. A consequence of this is that if you change the source stream using TO-SOURCE, you MUST set SOURCE-ID correctly to 0 for a console or -1 for a string in memory. If you do not do this, RESTORE-INPUT may/will behave incorrectly. LIB --- Enhanced XREF.FTH to reject more false cases. Added macro expansion to the XREF file load and save operations. Cross reference generation is inhibited during source inlining. STUDIO ------ Incorporated new XREF which significantly improves the accuracy of the bouncing ball debugger. Added window position restoration to the DFX debugger. 3.40.0411 31 May 2001 ====================== KERNEL ------ Added the VALUE GENINI? which, when set, enables the generation and restoration of the console and Studio IDE INI files. Corrected return result of FLOORED environment string to FALSE as division is symmetric by default. Changed .THROW so that display of the source line for ABORT" is handled by the deferred word DOABORTMESSAGE. CATCH and THROW can now be user extended. See the CATCH and THROW section of the manual for details. Added CURRSOURCENAME ( -- c-addr u ) which returns the address and length of the current source file name. 3.40.0400 30 April 2001 ======================== KERNEL ------ Removed problem with control key handling reported only by users of Windows ME. Removed an interaction between DOCGEN and the source inliner. Note that this has required a (documented) change to the DOCGEN installable hooks mechanism. OTHER ----- Added PID.FTH to the EXAMPLES directory. This file contains the implementation of a proportional, integral, and differential three-term controller with deadband facilties and user hooks for input and output. The file is DOCGENned. Added STATEMACHINE.FTH to the EXAMPLES directory. This file provides a simple finite state machine compiler and tools. The file is DOCGENned. 3.40.0383 18 April 2001 ======================== *** Now at version 3.4 *** KERNEL ------ Tidied up the RichEdit control GENIO device. See the documentation of the Richedit GENIO device for full details. Ctrl-F now works for finding text, ctrl-P to print and the text find has been made more robust. Command line history is also more robust, especially with Windows 2000. Various control keys are now trapped and are not passed to the receiving application. The Richedit device now ALWAYS displays input in the Richedit control when the word ACCEPT is used. KEY does not echo for a Richedit control. Integrated Richedit command line editing and history. Ctrl-W moves the cursor one character left in the command line. Ctrl-R moves the cursor one character right in the command line. The backspace key deletes (as normal) the character to the left of the cursor. The history buffer is accessed using control-E to get the previous line and control-D to get the next line. Since the standard Forth console is a Richedit device, the Forth console inherits these features. Removed the time limit on the evaluation version, but disabled the SAVE operation. Updated VFXSUPP.DLL which MUST be correctly installed for v3.4. Previous releases of VFX Forth will still operate correctly with this DLL, but v3.4 onwards requires the current DLL file. INCLUDE and friends now empty the Windows message loop before loading the file. This prevents VFX Forth from hogging the CPU during compilation and allows the console to update during compilation. The downside is that compilation speed is reduced by the additional screen update time. You can avoid this by setting NOOP to be the action of the DEFERed word EMPTYIDLE. assign noop to-do emptyidle Added the word IS as a synonym of TO-DO. This allows common practise in other Forths to be used in VFX Forth, e.g. ' noop is emptyidle *** FASTER COMPILATION *** The assembler, disassembler and optimiser are now themselves fully optimised during the build for a significant improvement in compilation speed with the optimiser and source inliner turned on. Error handling in the source inliner has been improved, especially for inlining of DOES> clauses. This has significantly reduced the number of occasions in which the source inliner needs to be disabled. Added the words [SIN [-SIN and SIN] which allow you to control the source inliner and restore previous state. These words are documented in the manual. Improved the performance of DEFERred words, and made several other small improvements to the optimiser, based on profiling an 800,000 line VFX Forth client application. The kernel error messages (mostly) use the ERRDEF mechanism which is described in the manual. This mechanism is compatible with internationalisation. Added CNULL and ZNULL counted and zero-terminated null strings to the kernel as these are often used by applications. OTHER ----- *** INTERNATIONALISATION *** Added INTERNATIONAL.FTH to the LIB directory. This file permits full internationalisation of applications according to the ANS draft standard for internationalisation. Note that this code is subject to change as the standard evolves. The documentation is included in the VFX Forth manual. The manual has been tidied up to keep the HTML and PDF versions closer together. Exception handling documentation has been tidied and all brought into one chapter. The DFX debugger now has improved window handling. Added an interactive console to the debugger so that you can now access an interactive Forth while debugging your application. This is accessed from the View menu. The console runs in a separate thread and can be left open while debugging. The multitasker in LIB\MULTIWIN32.FTH is precompiled as part of PFWVFX.EXE. The multitasker has been overhauled, and can now run a clean up action when the task is TERMINATEd. See the manual for more details. The file naming conventions in the overlay handler in LIB\OVLVFX.FTH have been changed. See the manual for details. When overlays are loaded, whether or not messages are displayed is controlled by the +/-VERBOSEINCLUDE switch. Tidied up the LIB\WVIEW example. 3.30.0155 21 Mar 2001 ====================== KERNEL ------ Added long string support. Rewrote the ERRDEF mechanism to provide internationalisation support. In order to reduce code size, we prevented source inlining of words containing text strings. Improved prevention of source inlining of words with return stack imbalances. Improved the link between the source inliner and the code generator so that turning the optimiser off with UNOPTIMISED completely stops source inlining. When OPTIMISED is used, the previous source inliner switches are active again. Added additional documentation of source inlining. Exposed SINDOES? ( -- flag ) which returns true when the +SINDOES switch is active. Moved ($+) and $+ into the kernel to avoid repetition and removed them from other files. Added .EXTERNS to display a list of API and DLL calls by function name and called address. 3.30.0136 26 Feb 2001 ====================== KERNEL ------ Moved the value FPSYSTEM into the kernel so that the upcoming floating point optimiser can detect the required format. Moved -LEADING into the kernel. This is similar to -TRAILING but removes leading spaces and tabs. OTHER ----- Improved Windows resource documentation and added example class strings to the CONTROL section. Added TRACKBAR example in the EXAMPLES directory. Added XREF documentation to the manual. 3.30.0119 10 Jan 2001 ====================== KERNEL Added logical rotate operators ROL and ROR which act like LSHIFT and RSHIFT except that the data is rotated. Changed -TRAILING to skip tabs as well as spaces because of the previous changes to SKIP and SCAN in build 3.22.0042. Added "PASCAL", WINAPI and STDCALL calling conventions for EXTERN definitions. Please ALWAYS specify a calling convention with EXTERN. Added the ERRDEF mechanism for throw and error code handling. In a future release this will be merged with the GETERRORTEXT mechanism. The ERRDEF documentation is in the "Exception handling" section of the manual. OTHER Added PASCAL to EXTERN definitions in STUDIO directory. DOCGEN can now produce output for HTML, TeX with Texinfo, and for raw LaTeX2e. See the manual for full details. LIB\SWITCHES.FTH is now precompiled and has been changed so that children of [SWITCH are not inlined. Added floating point support to disassembler. Added LIB\NDP387.FTH and LIB\HFPOGL32.FTH. NDP387.FTH provides a floating point package that only uses the FPU's internal stack. This package is significantly faster than HFP387, but the internal stack is limited to eight items. HFPOGL32 is designed for interfacing to OpenGL libraries and uses 32 bit floating point numbers kept on the Forth data stack. All three packages have minor changes from previous releases, especially in rounding control during numeric output. Additional words have been documented. Added CIAO Object oriented system in the LIB\CIAO directory. From now on CIAO will be the Object Oriented system of choice for VFX Forth. 3.22.0042 ========= KERNEL Changed SKIP and SCAN not to modify the string when tab characters (ASCII 9) are encountered. This has had no side effects so far. Please note that SKIP and SCAN treat tab characters as spaces (ASCII 20h) and these are now passed to application programs by REFILL and READ-LINE. Corrected SETCURSOR in LIB\HELPERS.FTH. N.B. by default the EXTERN: mechanism selects "C". This will fail for API calls of some forms. It is as well to say what you mean every time you use EXTERN: or EXTERN. Most, and there are some exceptions, Windows API calls should be declared PASCAL. Added prefix operator checking to ';'. Correctly ALIGNed source-files entry. Replaced a number of kernel uses of ALIGN with ALIGN&ERASE to give known data in padding. Affects: SLITERAL WORDLIST Okay, this also affects library code such as OVLVFX. Therefore ALIGN and HALF-ALIGN have been changed in the kernel. *ALL* Dictionary alignments have known data (zero's) inserted. Removed "PDB" generation in favour of XREF OTHER OVLVFX now correctly discards source-inline macros on each build Installer now correctly installs VFXSUPP.DLL into the Windows SYSTEM32 directory. The installation can be removed by running UNWISE.EXE in the main PFWVFX directory. 3.22.027 ======== KERNEL Added more range protection in IP>NFA (fixes EXEXCEPT library file) Removed rogue italic fonts from dialogs in Windows2K Upgraded Floating-point packs Fixed nesting bug in SELECT.FTH in the library. Added %BIN% macro as an alias for %LOAD_PATH% also added %LIB% as an alias for %LIBRARYDIR% Moved OVI (overlay info structure) into base kernel. IP>NFA is now overlay aware. Added INFORTH? \ addr -- flag to Kernel. Definition will return TRUE if the supplied address is anywhere within the current KERNEL or loaded overlays! TOOLS Put correct toolbar image into developer studios' debugger 3.22.018 ======== KERNEL Added +USER to the kernel Moved overlay link variable to primary kernel EXTERN defined API imports can now have optional parameter names in their argument definitions, e.g. extern int PASCAL MessageBox( HWND hWnd, LPCTSTR text, LPCTSTR title, int mbType ) is now equivalent to extern int PASCAL MessageBox( HWND, LPCTSTR, LPCTSTR, int ) 3.21.000 (changes since 3.1.xxx) ======== KERNEL Various bug-fixes and enhancements in both float libraries. Added missing bullet style (*B) from HTML output of DOCGEN system. Added missing documentation for Richedit Generic IO Device. New Debugger and XREF System Added WALKALLWORDLISTS (See Manual) Added XT>WID (See Manual) Added MOVEWORDTOWID (See Manual) MODULE EXPORTs are now moved from the private wordlist to the public rather than having simple calling definitions built in public namespace. This means EXPORTed definitions when referenced from the public search-order use the current optimisers etc when available. (If you have any code which used the FIFO api you will notice a significant speed increase!) Moved to latest XC for Kernel Build Fixed behaviour of SOURCE and friends. Input stream is now thread safe. Fixed default definition of Forth-Buff Stopped resource defined windows from losing their menus Moved unique identifier seed variable into kernel and added to the save/restore sequence of MARKER. Stops continous compile and forget sessions from running out of IDs (!) Modified SKIP to handle zero length strings. Everything which exists for the COLD chain now exists for the BYE/EXIT sequence as well. Therefore AtExit \ xt -- ShowExitChain \ -- etc. Are now in the Kernel OTHER Now shipping two executables for the Kernel. PFWBASE.EXE (found in the BIN\ directory) is the equivalent to previous releases, whilst PFWVFX.EXE now has a pretty IDE interface and debugger. The user interface and debugger is built on top of the BASE version of the kernel from the sources found in the STUDIO\ directory of your distribution. The idea is that you develop code using PFWVFX.EXE and build final versions with the PFWBASE.EXE to reduce turnkey application overhead. Completely reworked the source tree and maintanence/build plan. Hopefully everything is still in place! x.xx.xxx KERNEL Repaired ALL and FROM-FILE Fixed ( now handles null comments Chained wordlists to aid marker Fixed stack fault and memory leak in RichEdit control code Increased speed of paste operations on richedit control/console various detail changes Added modeless dialog message loop support Modified TEXTMACRO documentation Added %LOAD_PATH% macro to default system. Holds the full path of a ProForth generated EXE on load time. Added FORTH-BUFF \ -- $ which returns a counted string of the EXE load path (see macro above!) Added NEXTID: to the Resource compiler. Also exposed .Resources \ -- Modified resource compiler to take window and control style constants from the vocabulary WINCONSTANTS rather than fixed BNF rules. Allows user extension. Constant names should only use alphanumeric characters and the underscore character. Removed case where source-file can be left open on error. Auto setup of of %LIBRARYDIR% on load, assuming that the original directory tree is maintained as per the MPE setup program. Changed about box in the USERIDE example code Added zero terminated version of $ExpandMacros, called z$ExpandMacros BITMAP CURSOR and ICON resources now expand macros in pathnames HELPERS.FTH added to library New examples: ProgressBar.Fth RES-LINK anchor moved to kernel Added WIDS to Kernel Dynamic import chains are now anchored in the Kernel New FORGET and MARKER system implemented. New Overlay manager in library, supports dynamic load/removal Fixed shortbranch code generation in ENDOF 3.10.040 ======== KERNEL Gone all over the kernel looking for wasted static space and/or more efficient ways of recycling data. Upshot is the kernel is 64k odd smaller Optimiser now generates short form machine branches. See manual section on Controlling the VFX Code Generator for details. Fixed DOCGEN HTML output to stop center justifying code examples! OTHER Added NDP Stack only version of the hardware floating point library. See Floating Point section of manual for details. Added Direct Port IO library and suitable NT Driver. See Hardware Port IO Access section of manual. 3.10.0021 ========= KERNEL Moved func-loaded? into EXTERN added all-func-loaded? \ -- flag which checks all import bindings 3.10.0019 ========= KERNEL Added short-branch optimisation code Reduced CPU time overhead for an IDLE console. Duplicate EXTERN definitions are now ignored 3.10.0001 ========= KERNEL Fixed build numbering system Improved code for /STRING SAVE now performs text macro expansion on filename BIND now performs text macro expansion Fixed optimiser bug for - (minus) 3.10.0000 ========= KERNEL Improved code generation for NREV, WITHIN?, HERE, ALLOT, ALIGNED ALIGN, comma, c-comma, w-comma Fixed bug in SLITERAL Allowed RECURSE to be used within a :NONAME. Recurse causes THROW if used outside of a noname or :. Also cannot be used after DOES>