SwiftForth Release History

Update policy

Updating to the latest version of SwiftForth is available to customers with current support subscriptions. The support subscription period included with your original purchase of a SwiftForth license or upgrade is one year. Support subscriptions may be renewed online for $129 per year. Included in the support period are unlimited downloads of new releases as well as engineer-level technical support via email.

SwiftForth-3.12.0 (21-Sep-2023)

All

  • Added “alias” bit to header flags field to better support Forth Standard SYNONYM behavior
  • Modified SEARCH-STRAND to return the xt of the synonym when the alias bit is set
  • Added user variable ‘LOCATE to hold the last “view” field found by SEARCH-STRAND
  • Modified WORD-LOCATION to use ‘LOCATE so it uses the found word and not the synonym
  • Updated AKA and SYNONYM to use the “alias” bit in the header and compile the offset to the synonym’s code field

Windows

  • Modified the debug window status line stack output to show values unsigned when base is HEX

SwiftForth-3.11.10 (12-Jan-2023)

All

  • Added code to CATCH and THROW that smudges the former return address (into CATCH) to prevent a discarded frame from being used by the system exception handler.

SwiftForth-3.11.9 (03-Sep-2022)

Windows

  • Fixed race condition with PostQuitMessage that could result in not saving registry settings (e.g., window position and size) on exit.

Linux

  • Recompiled binaries to prevent segfaults on latest Linux kernel.

SwiftForth-3.11.8 (27-Jul-2022)

All

  • Fixed bug in “transpose” function in IDE input line editing to check for empty input buffer.

SwiftForth-3.11.7 (22-Jul-2022)

All

  • Fixed bug in 2C!
  • Added “transpose” function to IDE input line editing. Use Ctrl-T to transpose characters surrounding the insert point (or last two if at end of line).

SwiftForth-3.11.6 (02-Jun-2022)

Windows

  • Updated Windows vectored exception handler to ignore non-Windows system status exceptions to operate correctly with the latest Windows Remote Desktop

SwiftForth-3.11.5 (30-Apr-2022)

ALL

  • Fixed typo in fpmath.f source
  • Corrected error in decode of PUSHA and POPA instructions in i386 disassembler
  • Added CELLS to the end of the high-level representation of HASH to match the code definition

Linux and macOS

  • Made RESET-TERM visible in the dictionary
  • Updated SwiftForth Reference Manual description of the “root” SwiftForth file path
  • Added bash-like clear function bound to Ctrl-L in line edit
  • Added Ctrl-P (up) and Ctrl-N (down) keys in line edit

Linux

  • Changed loader to use MOV instead of POP to get jump table address from the return stack in the SwiftForth ELF loader (prevents segfault on some systems)

SwiftForth-3.11.4 (05-Nov-2021)

Windows

  • Updated SwiftForth reference manual for Windows
  • Fixed buffer overrun error in IDE copy text to clipboard

SwiftForth-3.11.3 (29-Oct-2021)

ALL

  • Restore SET-MEMSIZE

Windows

  • SwiftForth-Win32 installer now requires a password, which is supplied in your notification email.

SwiftForth-3.11.2 (22-Jun-2021)

ALL

  • Traverse imported libraries recursively, opening libraries in the order they were declared.
  • Improved version of SYNONYM (thanks to contribution from comp.lang.forth discussion sent to us by Anton Ertl).

SwiftForth-3.11.1 (31-Mar-2021)

ALL

  • Added definition named SwiftForth for use by package managers
  • Added special case decode for SYNONYM in the decompiler

SwiftForth-3.11.0 (23-Feb-2021)

ALL

  • Updated most data stack pointer operations to use LEA instead ADD or SUB.
  • Changed most literal stack and pointer offsets to CELL units to facilitate porting to architecture with different cell size.
  • Forth Standard compatibility additions: 2VALUE (and extended TO), SYNONYM, REPLACES, SUBSTITUTE, UNESCAPE, REQUIRE, REQUIRED (not to be confused with SwiftForth’s REQUIRES, which is unchanged), HOLDS, PARSE-NAME, BEGIN-STRUCTURE (and friends, see src/ide/struct.f).
  • Updated NAME>COMPILE so it follows the behavior specified in the Forth Standard.

Windows

  • Changed name back to DCB: in sio.f after global rename of CB: in a previous release.
  • Fixed IS-FILE so it returns true if the specified path is not a directory.

SwiftForth-3.10.5 (15-Dec-2020)

ALL

  • Increased buffio.f buffer size to 1 MB.

macOS

  • Set FP config back to software stack for compatibility with fp-passing.f (required by SF-COCO).
  • Updated to latest SF-COCO.

SwiftForth-3.10.4 (22-Nov-2020)

ALL

  • Fixed FIND so it works with empty search order.

Windows

  • Fixed default command-line options for UEDIT selection in editor configuration dialog.

SwiftForth-3.10.3 (06-Oct-2020)

Windows

  • Added support for Windows command-line only turnkey. SwiftForth/bin/sf-cli.exe is the program. The source is in SwiftForth/src/ide/win32/console.

SwiftForth-3.10.2 (21-Aug-2020)

ALL

  • Replace EOL-SCANNER with improved version. (Thanks to Dr. Heinrich Hohl for the update.)

Windows

  • Expanded app icon area in the resource section of the sf-loader header image to 64k. It turns out 32k was a bit small for some our icons when converted to 256×256 PNG format.
  • Updated SwiftForth reference manual with new icon specification.
  • Fixed resource section meta data for app group icon.

SwiftForth-3.10.1 (18-Aug-2020)

ALL

  • Revised comments and formatting throughout the kernel source.
  • Made a few updates for 32- and 64-bit compatibility in the kernel and compiler source.
  • Factored out the common object file generation and loader access used by all three platforms.

Linux

  • Improved access to the sf-loader header fields by the target and turnkey compilers so they no longer use literal offsets into the header.

Windows

  • Improved the target and turnkey program generators to use SWOOP objects that access the sf-loader PE header fields instead of literal offsets. This should be more robust and easy to understand.
  • Moved Break to the Tools menu (where it belongs).
  • Retired a few ancient tools (memory watcher, words browser). Note that WORDS from the command line still works the same way. Only the old dialog box version is removed.
  • Updated the SwiftForth Reference Manual to reflect the above changes.

SwiftForth-3.10.0 (13-Aug-2020)

We’re doing some retrofitting in preparation for SwiftForth-x64, so there are some significant changes in this release. We try very hard to minimize code breakage, but please do read the notes for this release carefully.

ALL

  • A few files have been renamed to better reflect their contents (e.g., asm-i386.f).
  • All kernel program.f source files are now named save.f in keeping with the IDE turnkey save.f.
  • The target compiler (shared by all platforms) has been greatly simplified.
  • In preparation for SwiftForth-x64, we have added L@, L! (etc.) operators that strictly operate on 32-bit “longword” data. Many instances of @, ! (and friends) in the 32-bit version have been ported to their ‘L’ versions when we are accessing 32-bit data in structures that will be shared by their 64-bit counterparts. This provides better portability between systems. (Most of this is internal and won’t break your code.)
  • A few memory access operators that were holdovers from the polyFORTH era have been renamed to match common practice seen in wider use. The original names are retained in the source file legacy.f so you can continue to use them. We encourage updating your source to the modern names because eventually these will go away. U@, H@, H, and H! (so-called “half-cell” operators) are replaced by W@, W@S, W, and W! (16-bit “word” access, where the ‘S’ suffix is the sign-extending version).
  • The assembler IMUL instruction was missing two variants that prove useful for optimization (literal and r/m to register). Those have been added and put to good use in the optimizer.
  • The SwiftForth reference manuals have been updated to improve the assembler chapter (with sincere thanks to Dr. Heinrich Hohl for his wonderful and detailed contributions) and to correct a few other details.
  • All of the sf-loader.img files (the SwiftForth stub loaders used by the target and turnkey compilers to generate executable programs) have been renamed sf-loader.bin to avoid a naming collision with disk image files on Windows and macOS.

macOS

  • All the “osx” directories and paths have been updated to “macos” to follow Apple’s current naming practice. (Yes, we do know it should probably really be Darwin, but our intent here is to run on macOS hosted systems.)
  • The target and turnkey compiler object file generation has been greatly improved, including some SWOOP classes and objects to better manage the Mach-o file header access. This should be much more robust.
  • The sf-loader.bin is now generated with fixed minimum OS (10.6) and SDK (10.10) versions for Aqua compatibility. Many thanks to Roelf Toxopeus for helping chase down this long-standing issue.

Windows

  • You may notice that sf-loader.bin is bigger. That’s because we expanded the space reserved for the icon image to 32k and are now providing for any Windows ICO format file (with a single icon) of any size up to 256×256 in either BMP or PNG format. We updated our app icons with PNG versions to take advantage of this change. (You can still use all your old app icons, but you can update to prettier ones when you’re ready.) To keep it simple (and not require you to use a third-party resource compiler), we’re not supporting multi-image ICO files.
  • The SwiftForth Reference Manual for Windows has been updated to include the change in icon specification.
  • The obsolete input/output drivers and libraries have been removed as they are no longer supported.

SwiftForth-3.9.2 (25-Jul-2020)

ALL

  • Added ESI (user pointer) and EDI (origin pointer) to CATCH stack frame for more robust recovery from system exceptions.
  • System exception (signal) handlers scan the return stack for a CATCH stack frame, updating the saved user context with its ESI for safe recovery by THROWBACK.
  • Updated company contact info in EULA text.
  • Free (evaluation) versions now include full kernel source for reference.

Windows

  • Removed obsolete Win32 API help files and replaced with link to Microsoft online API documentation hub.
  • Updated Help menu to include link to forth-standard.org.
  • Generated new graphics for About dialog box.
  • Updated SwiftForth Reference Manual to reflect recent changes in Warnings dialog.

SwiftForth-3.9.1 (19-Jul-2020)

macOS

  • Latest update to SF-COCO from its author, Roelf Toxopeus.
  • Masks floating-point exceptions for SF-COCO.

SwiftForth-3.9.0 (15-Jul-2020)

ALL

  • Kernel source is now included in the free version.
  • Refactored system exception handling into common .THROW debug display for system exceptions on Windows, Linux, and macOS. Read the SwiftForth Exception Handling article for details.
  • Capture return and data stack frames in THROW for non-system exceptions. This can be useful for debug info.
  • Simplified the use of the system WARNING flags, with named bit masks.
  • In the case of a system exception (Windows vectored exception, Linux and macOS signal), the command-line .CATCH behavior will always display the exception frame register and stack dump. This is no longer conditioned on the WARNINGS flags.

Windows

  • Replaced “under-the-hood” exception handling with more modern Windows Vectored Exceptions. See the article referenced above for details.
  • Extended the vectored CAUGHT behavior for callbacks to display both system exceptions (register dump, stack dumps) and application THROW codes (stack dumps only) in a “System Exception” dialog box.
  • Extended the TASK (Windows threads) ACTIVATE to use CATCH and pass return codes to CAUGHT, which pops up the System Exception dialog for better debugging of errors that occur in thread code.
  • Removed outdated “protection” settings from the Warnings dialog box.
  • Updated some deprecated CB: instances to use CALLBACK: instead.
  • Updated some of the Windows sample applications to close properly.

Linux and macOS

  • Renamed the kernel OS signal handler and reorganized for new common exception handling scheme. See above.

SwiftForth-3.8.0 (15-Jun-2020)

ALL

  • Fixed >FLOAT to correctly handle zero-length string.
  • Fixed test in optimizer that caused a direct branch to a word that starts with a quotation to break. (Many thanks to Gerry Jackson for the detective work on this.)
  • Removed NO-TAIL-RECURSION from ;] in quotations.
  • Replaced EOL-SCANNER with a much more efficient code version. (Thanks to Rick VanNorman for this nice optimization.)

macOS

  • Latest update to SF-COCO from its author, Roelf Toxopeus.

Windows

  • Moved .STACKS into CONSOLE-GUI personality to allow concurrent non-GUI tasks to run the QUIT loop.

SwiftForth-3.7.11 (22-May-2020)

ALL

  • Replaced all uses of assembler local variables with Forth assembler program structures (IF…THEN, BEGIN…UNTIL, etc.).
  • Update i386 disassembler to use JA mnemonic instead of JNBE for consistency with kernel source code.
  • Removed unused (commented out) source from nucleus.f
  • Removed some obsolete options in SwiftForth/lib.

macOS

  • Revert to previous sf-header.img for SF-COCO compatibility.

Windows

  • Removed some obsolete samples in SwiftForth/lib.
  • Preserve FPU control word in CATCH frames.
  • Fixed filename clipboard length in the SwiftForth console window. (Thanks to Mike Ghan for this.)

SwiftForth-3.7.10 (18-May-2020)

ALL

  • Added NO-TAIL-RECURSION to fix an edge case in ;] at the end of a quotation.
    (Thanks to Gerry Jackson for finding and report this.)
  • Tidied up the comments sections in some of the options and samples source files.

Windows

  • Fixed AppStart in winapp.f to permit restarting the sample app.

SwiftForth-3.7.9 (16-Feb-2020)

ALL

  • Corrected byte order of IP address returned by LOOKUP in the TCP/IP option package so it works with words like CLIENT.
  • Replaced standard word SM/REM and FM/MOD with fast code versions. (Thanks to Dr. Heinrich Hohl for this contribution.)

SwiftForth-3.7.8 (05-Jul-2019)

ALL

  • Corrections and reformatting of the SwiftForth Reference Manuals. (Printed copies are now available from our publishing partner Amazon.com.)
  • Fixed the size for SFVARIABLE in the fpmath SWOOP extension.
  • Fixed the output for FE. when PRECISION is small.

SwiftForth-3.7.7 (25-May-2019)

Windows

  • Backed out the vanishing cursor fix from SwiftForth 3.7.6 as it had worse side effects. We’ll come back to this with a better solution.
  • Fixed some block comments in the Windows version source code.

SwiftForth-3.7.6 (10-Jan-2019)

ALL

  • Restored JMP optimization in optimizer.f for compatibility with Mac sf-coco. (Apologies to Roelf Toxopeus for the 3.7.5 release code breakage.)

macOS

  • Latest update to SF-COCO from its author, Roelf Toxopeus. See the notes in IMPORTANT-NOTE.txt in SwiftForth/lib/samples/osx.

Windows

  • Fixed the long-standing “vanishing cursor” bug. Thanks to Allen Anway for the valuable feedback and code samples.

SwiftForth-3.7.5 (09-Dec-2018)

ALL

  • To make it easier to find (and more obvious as to its function), CB: has been renamed CALLBACK:. A synonym for CB: has been provided for compatibility. All references to CB: in the SwiftForth source have been changed to CALLBACK: . 
  • SwiftForth Reference Manuals have been updated with the CALLBACK: name change.

SwiftForth-3.7.4 (08-Nov-2018)

ALL

  • Revised SwiftForth reference manuals. Corrected a few typos in the SWITCH section.
  • Added F>N and F>2N for passing floats and doubles to external API calls.

SwiftForth-3.7.3 (22-Jul-2018)

ALL

  • Replaced a few instances of -ROT DROP with NIP SWAP (shorter and faster — thanks Allen Anway).
  • Cleaned up some comments and headers.

Linux and macOS

  • Updated installer script to remove some unnecessary Windows files from the tarball.

SwiftForth-3.7.2 (01-May-2018)

ALL

  • Changed default floating-point configuration word to $322 so default rounding is “round to nearest”. The old default was “truncate”, which is generally not the way this is used.

Linux and macOS

  • Update reference manual section on floating point configuration. (Thanks to Roger Levy for pointing this out!)

macOS

  • Latest update to SF-COCO from its author, Roelf Toxopeus.

SwiftForth-3.7.1 (13-Feb-2018)

ALL

  • Numeric output formatting ( <# , HOLD , #> and friends) were incorrectly sharing the DPL user variable with numeric input conversion. This caused a fatal exception when trying to do both at once (e.g., <# 1234. #> ). DPL retains its long-standing use for numeric input; we added HLD for use by output formatting. If you have any customized output formatting that was directly referencing DPL, it should probably be changed to HLD. (We hope you don’t, but just in case….) Thanks to Gerry Jackson for the good detective work.
  • A few minor corrections to comments and stack comments.

SwiftForth-3.7.0 (26-Jan-2018)

ALL

  • Added Forth-2012 character literals. Characters within single quotes are interpreted (and compiled) as literals. (E.g., ‘a’.)
  • Added Forth-2012 locals syntax using {: .  See Forth-2012 section 13.6.2.2550 for details.

macOS

  • Added the Cocoa interface from Roelf Toxopeus to the SwiftForth distribution. See SwiftForth/lib/samples/osx for a readme and the source files.

SwiftForth-3.6.5 (08-May-2017)

ALL

  • Fixed a long-standing bug in REPRESENT that was causing truncation instead of rounding.
  • Fixed the download links for the install tarballs (Linux and macOS).

SwiftForth-3.6.4 (21-Mar-2017)

ALL

  • Updated SwiftForth reference manual (additions and corrections).
  • Correct name ADDRESS-UNIT-BITS (was ADDRESS-UNITS-BITS) in environment query.

Linux and macOS

  • Expand path if needed, null-terminate filename before dlopen in LIBRARY.
  • Updated some comments to reflect Apple’s name change from OS X to macOS.

Windows

  • Expand path if needed, null-terminate filename before LoadLibrary in LIBRARY.
  • Clean up stack comments in a few source files.

SwiftForth-3.6.3 (29-Jun-2016)

Windows

  • Expanded clipboard text buffer (thanks to Mike Ghan).
  • Fixed >SHELL stack comments.

SwiftForth-3.6.2 (04-Apr-2016)

  • Fixed FATAN (thanks to George Kozlowski).
  • Updated installer script generation.

SwiftForth-3.6.1 (06-Feb-2016)

  • Software updates are now being delivered from our new server dl.forth.com
  • Due to security issues with public link expanders, we have abandoned the fth.link download links.
  • SwiftForth reference manual update. Thanks to John Rible for the corrections and additions.

SwiftForth 3.6.0 (31-Jan-2016)

ALL

  • Updated reference manuals (fixed a few typos).
  • Improved READ-LINE funcion.

Windows

  • Replaced old API function with one that uses a CHM file for Win32 API help.

SwiftForth 3.5.9 (12-Nov-2015)

ALL

  • Our notification emails now contain shortened URLs for the
    download links. A number of people had issues with their email clients
    splitting the long links in plaintext emails. This should solve that
    problem.
  • Updated to the released version of the Forth-2012 standard (PDF file in doc directory).
  • Fixed READ-LINE to comply with Forth standard.
  • Simplified transcendental functions in fpmath option.

Windows

  • Fixed bug in clipboard memory allocation.
  • Corrected some typos in source code comments.

SwiftForth 3.5.8 (24-Sep-2015)

ALL

  • Updated SwiftForth reference manuals.
  • Added type conversions to SwiftForth\lib\options\ip.f.
  • Added WDUMP to the DUMP tools for 16-bit word dump.
  • Added (B.0) and B.0 for formatted binary numeric output.
  • Split optimizer patterns into two sections.
  • Source file comment corrections and enhancements.
  • Updated FATAN2 to be standard compliant. Returned principle angle is in the range [-pi,pi] (formerly [0,2pi]).

Windows

  • Fixed “tabbed” demo.
  • Added UEDIT64 to the known editors list.
  • Replaced low-level Windows date/time access with a SWOOP object.
  • Removed ancient legacy date/time setting functions as these can’t be used in modern versions of Windows.
  • Added reg key and data access functions to registry.f.

SwiftForth 3.5.7 (22-Jan-2015)

All executables, drivers, libraries, and installers released under new GlobalSign code signing certificate.

SwiftForth 3.5.6 (26-Oct-2014)

ALL

  • Converted NR> to ICODE to prevent tail recursion. If you use NR>, you need this change. Thanks to Roelf Toxopeus.

SwiftForth 3.5.5 (19-Oct-2014)

ALL

  • Updated SwiftForth reference manuals.
  • Changed the wording of the error message when opening a library fails. Now says “Error opening library” instead of “not found”.

Linux

  • Added command-line option –uplink for interactive pipe operation.

SwiftForth 3.5.4 (03-Sep-2014)

ALL

  • Source file documenation update (mostly typos).

Linux and macOS

  • Refactored system timer code.
  • Use librt monotonic counter instead of gettime (Linux only). Thanks to Mike Ghan.
  • Enhanced editline features (VEOF, VWERASE, Ctrl-B, Ctrl-F, Ctrl-K, and Ctrl-L). Thanks to Marc Simpson.
  • Updated PDF reference manual (typos and corrections).

Windows

  • Updated Tetris sample code for current color mapping.

SwiftForth 3.5.3 (04-Feb-2014)

ALL

  • Changed all instances of DCOUNTER to uCOUNTER in lib/options files for cross-platform compatibility. (Thanks to Marc Simpson.)

Linux and macOS

  • Extended FUNCTION: to permit single- and double-cell return values (or no return, as before). (Thanks to Roelf Toxopeus.)

Windows

  • Added OPEN-SOCKS call on tcpip.f load and to ONSYSLOAD chain. This is required for the Windows TCP/IP interface only.

SwiftForth 3.5.2 (22-Dec-2013)

Linux

  • FILE-SIZE now uses lseek instead of fstat for better portability.

OS X

  • Improve SIGNAL handler for SIGINT during sleep.
  • Check for SIGINT return from nanosleep.

SwiftForth 3.5.1 (01-Dec-2013)

ALL

Minor update: Removed 3-line offset from LOCATE (by popular demand).

SwiftForth 3.5.0 (12-Oct-2013)

ALL

  • Ported the SwiftForth optimizer to the meta compiler used to
    generate the SFK kernel.
  • Added a subset of the optimizer rules to the kernel sources so the
    SFK kernel code is now optimzed. (Thank you Roelf Toxopius for the
    push to do this.)
  • Added .'(T) address illumination to the meta compiler for use as a
    debug tool when compiling custom kernels.
  • Added new Forth-2012 Standard word TRAVERSE-WORDLIST and ported
    WORDS and the cross-reference UNCALLED to use it instead of each
    having its own variant.
  • Moved COPY-WORDLIST to the PRIVATE section of package NAME-TOOLS
    in the new traverse.f source file.

Windows

  • Added CLASS GUICOMMON, a common ancestor for BASEWINDOW and BASEDIALOG.
  • Ported the word browser tool to use the common TRAVERSE-WORDLIST.

Linux and OS X

  • Added ior/throw codes to signal handlers for user interrupt, memory
    error, and divide by zero signals. Instead of throwing the generic
    IOR_SIGNAL, these signals will now throw their standard ior/throw
    codes.

SwiftForth 3.4.7 (21-Jul-2013)

ALL

  • Updated LOCATE (and friends) to show 3 lines previous to the located line.

Windows

  • Added deferred words for small and big toolbar BMP displays in frame.f.
  • Moved definition for HIDE from warnings.f to winmaker.f.
  • Extended list of common methods for dialog controls in winmaker.f.

SwiftForth 3.4.6 (24-May-2013)

ALL

  • EXISTS now returns a fully-formed flag.
  • Cleaned up some comments and source documentation.

Windows

  • Cleaned PROTECTION option in protection.f.
  • Added WSOCK32 option, a Winsock interface wrapped in a class. See SwiftForth/lib/options/win32/sockets.f.
  • Added “b” (unsigned binary) to SPRINTF types.
  • Added MI: to menucomp.f.
  • Use PARAMDIALOG instead of GENERICDIALOC in throws.f
  • Updated warnings config dialog to show extra options if PROTECTION option is loaded.
  • Updated winmaker.f for existing application code compatibility.

SwiftForth 3.4.5 (03-Oct-2012)

ALL

  • Improved comments for substring search words.
  • Added comments for floating point option bytes.
  • Standardardized default FP options to $F22. See fpconfig.f for details.

Windows

  • Improved GetDesktopSize in winmgmt.f.

Linux and OS X

  • Added display of CPU context and stacks after a SIGNAL. Includes
    traceback of both return and data stacks.

SwiftForth 3.4.4 (31-Jul-2012)

ALL

  • Fixed L in fileviewer.f for “no current file” case.
  • Gave GLOBAL: its own run-time code to avoid inlining by the optimizer.

Linux and OS X

  • Added sections on command-line arguments and environment variables to SwiftForth Reference Manual.
  • Updated comments in src/kernel/args.f for command-line arguments.

SwiftForth 3.4.3 (23-Jun-2012)

Windows

  • Added advanced layout tools for repetitive dialog boxes in SwiftForth/src/ide/win32/dialogs.f
  • Simplified pkcolor.f using the layout tools above.
  • Increased dictionary size requested by loader to 64MB.

Linux and OS X

  • Move initial stacks down in memory to allow a safety pad before the arg list passed in from the command line.

SwiftForth 3.4.2 (11-Feb-2012)

ALL

  • Added THROW# to system prune chain.
  • Source file comment corrections.

Windows

  • Update turnkey program generator for correct saving of sealed applications.

Linux

  • New ELF header format.
  • New turnkey program generator.
  • Fix program exit with no TTY.

SwiftForth 3.4.1 (14-Sep-2011)

ALL

  • Added output word H.8 (8-digit hex display).
  • Added WARNING bit for exception display.
  • Include info about R-ALLOC and R-BUF in exception output.

Windows

  • Fix Windows console-mode vectored KEY? and KEY functions.
  • Enhanced Windows exception display.
  • Fixed definition of RGB colors.
  • Added option to always show OS exception details.

SwiftForth 3.4.0 (08-Aug-2011)

ALL

  • Modified LIBRARY declaration so it smudges the dictionary entry
    for the library name if the library can’t be opened at the time it is
    defined (or is not marked as optional).
  • Fixed CB: so callbacks that take no parameters assemble the
    correct stack cleanup code.
  • PAGE clears the screen buffer (i.e. does not just scroll up).
  • INCLUDE (INCLUDE-FILE, etc.) will do nothing if the included file
    length is 0.
  • Added STRING operator DIVIDE, which splits a string into two
    parts. LOCATE DIVIDE in the SwiftForth debug window for details.

Windows

  • Overhauled the saving of SwiftForth program options in the Windows
    registry.
  • Added saving of “local” settings (debug window size,
    position, and colors) on a per-directory basis.
  • Removed global value THEKEY in favor of keeping a copy of the
    registry key on the stack or return stack and discarding it with the
    registry entry is closed.
  • The scrolling mode of words that generate lots of output (DUMP,
    WH, etc.) has been made optional. Look for “Pause while scrolling” on
    the Options|Preferences menu.
  • Saving options is no longer optional. On exit from the SwiftForth
    IDE, the configuration and window settings are updated in the registry
    unconditionally.
  • Replaced the old hand-crafted PE header with one built using a
    simple assembler loader and PE header. This provides a more standard
    PE header, which is less likely to be flagged by AV scanners. Another
    nice result of this is that program files (exe, dll, scr, or whatever)
    generated by SwiftForth can be signed with an Authenticode
    certificate using standard signing tool.
  • Added PROGRAM-SEALED, which should be used instead of PROGRAM if
    the turnkey program or DLL being generated is not extensible (does not
    extend the Forth dictionary space when it runs).
  • Both PROGRAM and PROGRAM-SEALED take an optional icon file name.
    The format is the same as previous versions of SwiftForth (single
    icon, 32×32 pixels, 16 colors). However, SwiftForth does a more
    strict format check of the ICO file header. You may need to update
    your custom icon files with an icon editor to be sure they have proper
    headers. As an alternative, you can always use a resource editor to
    replace the default SwiftForth icon with your own icon file in any
    format. The resource editors from Heaven Tools
    do the job nicely.
  • The initial cross-reference table is appended to the code image by
    PROGRAM. The separate XRF file is no longer generated or loaded.
  • Major update to the tools used to export DLL functions and build
    DLLs. The syntax remains the same. This is in support of the new PE
    loader format.
  • Updated the definition of HINST to use the GetModuleHandle API call.
  • Major update to the SwiftForth debug window. The TTY.DLL library
    is no longer required. The entire console window is now loaded from
    source as part of the Windows IDE. The source has been moved to the
    directory SwiftForth/src/ide/win32/tty/

OSX

  • Replaced the old hand-crafted Mach-o header with one built using a
    simple assembler loader. This provides a more standard Macho-o
    header, which is compatible with newer versions of the OSX dynamic
    program loader.
  • SwiftForth requires OS X 10.6 or later.

SwiftForth 3.3.2 (03-Jul-2011)

ALL

  • Changed NH from global variable to user variable.

Windows

  • Fixed warning message dialog box for imported functions from
    libraries that are marked [OPTIONAL] (e.g. TTY.DLL) and are called by
    a turnkey program at runtime. The reference to the called function’s
    pfa was incorrect, causing a program crash. It now functions
    correctly and issues a dialog box with details about the missing
    library and/or function.
  • Added information about Windows AV scanners with poor heuristics
    to the SwiftForth-Win32 installer.

SwiftForth 3.3.1 (20-Jun-2011)

ALL

  • Minor bug fix in PLACE.

Windows

  • Added TOOLTIPS option, with support for the Tooltip control.
  • Added DIALOG_TOOLTIPS, an example of a dialog box with tooltips for its controls.
  • Added DIALOG_APPLICATION, an example with a modeless dialog box as a standalone application.
  • Added IDSTRINGS extension to dialogs.f in Win32 IDE support.
    IDSTRINGS makes dialog boxes easier to build. There are no separate definitions
    of constants, no actual numbers in the dialog box template. The whole
    thing is compiled into the DLGCOMP package as an extension.

Linux and OSX

  • Updated FILE-SIZE and RESIZE-FILE and their underlying system
    calls to correctly use 64-bit file offsets.

SwiftForth 3.3.0 (02-May-2011)

ALL

  • First general release of SwiftForth including support for Linux and Mac OS X.
  • Documentation updates.
  • Added code to force top stack item to zero on launch.

Windows

  • Added simple parallel port access words to winio.f option.

SwiftForth 3.2.5 (10-Feb-2011)

ALL

  • Added BYE after ‘MAIN vectoring in START to handle a return from
    the vectored word.

Windows

  • Corrected processing of Windows message to fix broken “Break” button.
  • >PROCESS-WAIT now saves the process exit code in the variable
    ExitCodeProcess.
  • Added interfaces to InpOut32 and WinIO libraries as alternatives
    to GiveIO driver. REQUIRES INPOUT32 or REQUIRES WINIO to load them.
    See source files in lib/options/win32 for details.

Linux and OSX

  • Updated SwiftForth reference manual.
  • Added handlers for SIGCONT to correctly restore SwiftForth console
    I/O on ‘fg’ after Ctrl-Z.

SwiftForth 3.2.4 (11-Jan-2011)

ALL

  • Updated SwiftForth Reference Manuals multitasking sections.
  • Refactor ACTIVATE with separate CONSTRUCT so task’s user variables can be initialized before the task is activated.

Windows

  • Add TerminateThread function to fork.f option source.
  • Remove WaitForSingleObject function definition from commfunction.f option source.

SwiftForth 3.2.3 (05-Jan-2011)

ALL

  • Updated SwiftForth Reference Manuals.
  • Updated environment query support.
  • Improved the comments and made a general clean-up pass through aswoop.f, moving the obsolete swoop.f to the unsupported directory.

Windows

  • Removed superfluous :: references in many source files. These are no longer needed before Windows API calls.
  • Cleaned up callback code.
  • Improved A-TYPE< output in editline.f.
  • Updated Help menu.
  • Updated web browser URLs.
  • Wrapped runtime code for MI_PRINT, MI_SAVECOMMAND, and MI_SAVEHISTORY menu items inside an exception frame to handle the throw from cancel.
  • Added second cell to ‘MAIN for the application type (0=GUI; 1=Console; default is GUI).
  • Major overhaul of multitasking (threads) to better support 64-bit Windows versions.
  • Improved MOVEWIN and FONTMETRICS.
  • Added RESTART, which relaunches the SwiftForth environment just as it was
    originally started and quits the current instance. This is useful
    when working with Windows callbacks where an EMPTY tends to
    confuse Windows badly.

Linux and OSX

  • Added callback support (using CB: based on Windows version).
  • Split requires.f support for REQUIRES into separate Linux and OSX versions.
  • Fixed file type check so IS-FILE and IS-DIR work in both environments.
  • Made the multitasking (threads) support more compatible with the Windows version.
  • The root path is now derived from the path to the current executable. The FORTHINC environment variable is no longer used.

OSX

  • Ported sio.f serial port interface from Linux version.
  • Updated fp-passing.f (contributed by George Kozlowski).
  • Added timer callback sample itimer.f (contributed by Roelf Toxopeus).
  • Made OSX copy of fpconfig.f (not sharing the Linux one any more).

SwiftForth 3.2.2 (08-Jul-2010)

ALL

  • Updated SwiftForth Reference Manuals.
  • Modified FP control word default to mask underflow exception.
  • Added SWOOP Class Browser in lib/options.
  • Updated auxiliary trig functions in fpmath support.

Windows

  • Corrected +EXT stack problem in ofn.f.
  • Added GetWindowSize to winmgmt.f.

Linux and OSX

  • Fixed IS-DIR and IS-FILE tests.
  • Corrected FILE-SIZE operation.
  • Updated Linux stat and fstat functions to use libc calls.

SwiftForth 3.2.1 (28-Dec-2009)

ALL

  • Changed output in decompiler/disassembler to display unsigned
    32-bit literals and addresses where needed.
  • Fixed [IF], [THEN], etc. in the kernel meta compiler.

Windows

  • Fixed FUNCTION-EXISTS? so it correctly uses the new FIND-PROC parameters.
  • Added Notepad++
    to the list of known editors.
  • Extended the test in USE-NOTEPAD? to look for “NOTEPAD.EXE”
    instead of just “NOTEPAD” to allow for user-configured Notepad++
    editor.
  • Fixed -P in configuration.f so it parses the entire pathname
    passed in from the command line, even if it has spaces in it. This is
    primarily in support of the cross compilers that are built on top of
    SwiftForth.

Linux and OSX

  • Updated Section 7 of the SwiftForth Reference Manual.
  • Reorganized IDE source directories with common source files (most
    of them are common) in %SwiftForth/src/ide/ul. Subdirectories
    ul/linux and ul/osx have the platform-specific IDE source files.
  • Fixed GLOBAL: in ide and added GLOBAL: to kernel.
  • Add errno to kernel (defined with GLOBAL:) to support error
    checking after libc function calls.
  • Cleaned up Linux signal exception handling. Now using
    sa_sigaction instead of sa_handler and getting the user-level context
    pointer from from the ucontext_t structure whose pointer is passed to
    the sa_sigaction function.
  • Fixed KEY? in Linux sio.f.

SwiftForth 3.2.0 (24-Nov-2009)

ALL

  • Updated SwiftForth Reference Manuals.
  • /FORTH default search order has been simplified.
    Important: There is exactly and only one instance of FORTH in the
    search order after /FORTH.
    So don’t forget to use ALSO before you
    add to the search order.
  • AS has been moved to preamble.f (common to all).
  • SUPREME versions of DUMP, IDUMP, etc. have been moved to
    src/ide/tools.f (with the rest of the dump words).
  • Fixed CONVERT so its behavior conforms to ANS.
  • Fixed memory leak in }}free in fslib.
  • Fixed stray source comment in gaussj.f (part of fslib).
  • Adjusted case and source file path names in fslib/sciload.f so it
    works on all platforms.

Windows

  • Reorganized both kernel and IDE support for imported library (DLL)
    functions:
    • IMPORT: and CIMPORT: are obsolescent. Functions imported by
      SwiftForth are now all done using FUNCTION: (both in the kernel and
      the IDE). You are encouraged to transition to the use of FUNCTION:
      instead of IMPORT: for imported DLL functions.
      See section 8.2.1
      of the SwiftForth Reference Manual for details.
    • CFUNCTION: is no longer needed. FUNCTION: works for both Stdcall
      and C calling conventions. CFUNCTION: is still available, but it’s
      just a synonym for FUNCTION:.
    • Words defined by FUNCTION: are now just Forth words in the FORTH
      wordlist. The private, single-threaded wordlist and special extension
      to the compiler just to handle imported functions have been
      eliminated. This is a nice simplification and allows the use of all
      browsing tools (and even the decompiler) on FUNCTION: words as with
      any other Forth words in the dictionary.
    • IDE source file dllaccess.f has been replaced by imports.f.
    • Memory allocation words moved to separate source file allocate.f
      for consistency with Linux implementation.
    • /DLLS and /INTERNAL-DLLS have been replaced by /IMPORTS, which is
      defined in the kernel for basic library initialization and then
      extended in the IDE as needed.
  • Fixed broken samples in lib/options and lib/samples.
  • Added EMEDIT to the list of known editors in pickedit.f.
  • Added NO-XREF to turn off additions to the cross reference list.

Linux

  • Added library function import support to the kernel.
  • Replaced syscall interface with imported libc functions.
  • Memory allocation words moved to the kernel for consistency with
    Win32 implementation.
  • Signal trap handler has been split out from except.f and moved to
    its own source file trap.f to support the load order for the imported
    library functions.

SwiftForth 3.1.12 (24-Jul-2009)

ALL

  • Strip trailing spaces in >FLOAT.
  • Add +BAL to CS-PICK.
  • Use -13 throw code (as suggested in ANS Forth-94 standard) for word not found in dictionary.
  • ROOT-WORDLIST is the default set by -1 SET-ORDER (per ANS).
  • Added user variable >MAPPED to manage “mapped” files (mainly in support of INCLUDE-FILE).
  • Added CONVERT, the old number conversion primitive. This word is
    obsolescent and is included in support of legacy applications. Its
    function is superseded by >NUMBER.

Windows

  • Added support for all DCBflags bits in sio.f serial driver.
  • Fixed include paths in some Win32 samples (e.g. sokoban).
  • Use a local buffer instead of HERE for calendar.f Windows time and date functions.
  • Removed obsolete names DLL: and WINPROC: from Windows library support. Please use LIBRARY and FUNCTION: instead.
  • Updated KNOWN-EDITORS list in pickedit.f to support TextPad latest exe name.
  • Made DISPATCHER public in tasker.f (as it used to be before tasker reorg).
  • Simplified Windows constants interface in winconstants.f.
  • Simplified extern proc call in kernel/win32/imports.f.

SwiftForth 3.1.11 (03-Mar-2009)

ALL

  • Added NO-TAIL-RECURSION directive (used after a definition, like
    IMMEDIATE) to prevent tail recursion (converting a CALL to a
    JMP) by the optimizer.
  • Applied NO-TAIL-RECURSION to RESTORE in the DBSS package.
  • Updated \ to work inside block files.
  • Updated SwiftForth Reference Manual.

SwiftForth 3.1.10 (07-Jan-2009)

ALL

  • Added CMPXCHG instruction (32-bit only) to support multitasker
    facility variable operators.
  • Added common tasking.f for facility variables.

Windows

  • Replaced facility variable support with common one referenced
    above. No longer requires Windows critical section support.

Linux

  • Added multitasker support using POSIX threads.

SwiftForth 3.1.9 (22-Dec-2008)

ALL

  • Added kernel constants |FPSTACK|, |USER|, and |TIB| so these are
    available at runtime.

Windows

  • Fixed LIBRARY so it does not leave extra stack item if library is
    already defined.

Linux

  • Fixed SERIAL= and COM= in sio.f serial port support.
  • Use /proc/self/exe (or its equivalent) to determine path to
    executable when generating turnkey program.
  • Added pthreads multitasking support. See source file
    SwiftForth/src/ide/linux/tasking.f for details.
  • Added -NAME to strip off name and trailing / from a full path name string.
  • Added THIS-EXE-NAME to provide same function as Win32 version.
  • Correct number of parameters passed to sys_unlink.
  • Added sys_mkdir and sys_readlink system calls.

SwiftForth 3.1.8 (07-Oct-2008)

ALL

  • Perform addition of file name to files list both at beginning and
    conditionally at end of INCLUDED and MACRO-INCLUDED so file name is
    available for text macros.

Windows

  • Persistent command-line history (saved in “%USERPROFILE%\Application Data\ForthInc\SwiftForth_history.dat”).
  • Force high byte of DCBflags in sio.f to 0 when setting comm port
    parameters to clear XON/XOFF flow control.
  • Move “requires blocks” earlier in dbss.f to be within first 10
    lines for automatic options menu discovery.
  • New tty.dll with smaller virtual screen buffer size. The larger
    buffer caused a serious startup delay on some older versions of
    Windows.

Linux

  • Added sio.f serial port support with API based on the Win32 version. See source file for usage rules.

SwiftForth 3.1.7 (08-Aug-2008)

ALL

  • Added generic option to support run-time source macro
    interpretation. See SwiftForth/lib/options/macros.f for details.
    “REQUIRES macros” to load the source from the command line.
  • Put head back on ‘FNAME in kernel/src/files.f for use by the source macro
    interpreter.

Windows

  • Fixed long-standing bug in copy to clipboard from debug window.
    The buffer being passed to the clipboard is now truncated, which
    should provide better performance.
  • Removed unused source file SwiftForth/src/console/bufman.f.

SwiftForth 3.1.6 (24-Jun-2008)

Windows

  • Fixed column-width issue in debug window.
  • Fixed paste text to handle tab character as whitespace (instead of tab expansion) in debug window.

Linux

  • Moved the path to the editor to the buffer EDITPATH to allow
    turnkey programs to specify a different location for the editor
    script.
  • Fixed bug in LOCATE for words ending in ‘|’ (and not a cross-reference file/line pair).

SwiftForth 3.1.5 (13-Jun-2008)

ALL

  • Updated SwiftForth Reference Manual.
  • Expanded data formats in calendar.f.
  • .HISTORY displays command-line history.

Windows

  • Added modem status line tests to sio.f.
  • Added Komodo Edit to known editors list.
  • Added F8 (INCLUDE BUILD) and F9 (INCLUDE DEBUG) to editline input functions (like SwiftX).
  • Local directory added to the beginning of the list of paths used by REQUIRES.
  • New word .LAST-ERROR displays text message (if available) for most
    recent GetLastError result. Must be used immediately after returning from the
    function that returns the error.
  • Enhanced warning to display name of user variable whose definition breaks the callback limit.
  • Added environment query and display words FIND-ENV and PRINTENV.

Linux

  • Added recvfrom and sento functions to sockets.f.
  • Added GLOBAL: to dlaccess.f; defines a global data address in a library.
  • Ctrl-H backspaces in editline input.

SwiftForth 3.1.4 (27-Mar-2008)

ALL

  • Fixed bug in PRUNE that was allowing a MARKER (or REMEMBER) to
    roll back before the point protected by GILD.
  • Moved block (and block editor) support to SwiftForth/lib/options,
    renamed as blocks.f and blockedit.f.
  • Updated items in the word list searched by ENVIRONMENT?
  • Added initial port of the polyFORTH database support system
    (DBSS). ‘REQUIRES dbss’ to load.
  • Added .\” which is like .” but adds the quoted characters feature from S\”. Read
    the comment block at the top of src/ide/strings.f for details.
  • Updated the SwiftForth/unsupported/src2txt utility to use the new blocks support.

Windows

  • Updated Block Support appendix in SwiftForth Reference Manual.
  • Removed forced upper case in PROGRAM, the turnkey generator.
    Executable file will be as you type it, not forced to upper case.
    Automatically appended “exe” and “xrf” extensions are in lower
    case.
  • The SwiftForth kernel has been renamed from kernel.exe to sfk.exe
    and has also been given its own icon to distinguish it from the sf.exe
    turnkey GUI app. Change any kernel.exe references in your local
    batch files or Windows shortcuts to use sfk.exe instead. Use
    SwiftForth/bin/turnkey.bat as a model for generating a turnkey with
    the sf.ico icon.
    The installer will generate both sfk.exe and
    kernel.exe (which are identical) for the next few releases. The use
    of kernel.exe is deprecated (and it will go away in the near future).
  • Changed sfk.exe and sf.exe icons. The batch files
    that generate
    sf.exe replace the kernel’s “console” icon with a different one for
    the turnkey “GUI” program.
  • Added command .OPTIONS to display the entire LOADED-OPTIONS wordlist.

Linux

  • Preliminary draft of SwiftForth Reference Manual (Linux Version)
    is in SwiftForth/doc/swiftforth-linux.pdf.
  • Added $ command to send the rest of the command line to the Linux
    shell. LOCATE $ for details. Use >SHELL to send any command string to
    the shell.
  • The new $ shell command makes our limit LS obsolete, so LS will
    now just remind you to use $ instead.
  • Added the sendmail example to SwiftForth/lib/samples/linux.
    ‘REQUIRES sendmail’ to load.
  • Moved all syscalls to the kernel source to keep them in one place.

SwiftForth 3.1.3 (29-Feb-2008)

ALL

  • New word INCLUDING returns the address and length of the full
    filename currently being included. If you were digging down in the
    kernel source and using the undocumented variable ‘FNAME, this is now
    the official API. ‘FNAME is now headless (and subject to change). See
    the glossary at the end of Section 3.1 of the SwiftForth reference
    manual, or LOCATE INCLUDING, for details.
  • Fixed the case of the filenames after REQUIRES in the common
    lib/options and lib/samples directories for compatibility with the
    Linux case-sensitive file system.
  • Changed CD so it no longer does 0 WORD (thus consuming the whole
    line), but instead will honor quoted path names (which may contain
    spaces), or unquoted (no spaces). This permits comments to follow on
    the same line if a CD is done in a source file.
  • The cross-reference output now has the system “file number” along
    with the line number for each line displayed. This resolves a very old
    bug that prevents editing or locating cross-reference lines in any but
    the most recent xref output. This should be a great improvement for
    those who rely on the cross-reference utility.
  • Moved src/ide/win32/verbose.f from the shared src/ide directory so
    it can be used by the Win32 and Linux versions.
  • Added names for the terminal I/O “personality” vectors (the
    stucture pointed to by user variable ‘PERSONALITY). For example,
    ‘TYPE now returns the address of the TYPE vector. LOCATE ‘TYPE to
    find the kernel source file.
  • Changed the file viewer output routines (used by LOCATE) to start
    with the exact line located. N and B (“next” and “back”) are no
    longer confusing in their behaviors. Try it.
  • Moved envq.f (environment queries) to common src/ide
    directory.
  • Escaped characters in strings parsed by S\” (C\”, etc.) are case
    sensitive. This was the original intent for this function and is the
    direction the next Forth standard is heading. If you use these
    functions, be sure your escaped characters are in lower case.
    Read
    the comment block at the top of src/ide/strings.f for details.
  • Moved ANS Forth ENVIRONMENT? query function to common src/ide
    directory so it can also be used by the Linux version.
  • Suppress duplicate output in single-step utility.
  • Moved FILE-EXISTS to common preamble.f so it’s available to both
    Windows and Linux versions.

Windows

  • Updated SwiftForth Reference Manual.
  • New installer, splash screen, and About box artwork.
  • Changed the interpretation of file/line references in cross-
    reference output to handle click/right-click LOCATE and EDIT for new
    output format.
  • Increased the total dictionary size from 4 MB to 8 MB, consistent
    with the Linux version.
  • Changed REQUIRES to restrict it to common and Win32 lib
    directories. LOCATE REQUIRES to see the list of directories
    traversed.
  • Fixed sender and recipient address formats in the sendmail.f
    sample application.
  • Incorporated changes to BITMAP rendering from SFTalk posts
    submitted by Mike Ghan, extending the BITMAP class to handle 24-bit
    “TrueColor” BMP files.

Linux

Although SwiftForth-Linux is not yet in general release, enough
people are alpha-testing it to make it worthwhile maintaining the
release notes here. If you are interested in being on the alpha test
list and have a current SwiftForth support subscription, please send an email to
support@forth.com
with the subject line “SwiftForth-Linux testing”.

  • The editline function in the ‘sf’ turnkey now saves the command-
    line history in $HOME/.SwiftForth_history. When the turnkey command-
    line environment is loaded, it loads the saved history (used for up-
    arrrow and tab completion).
  • Added REQUIRES for library support. LOCATE REQUIRES to see the
    list (and order) of paths searched when loading library source.
  • Added several more syscalls to support the I/O needed by SwiftX
    cross compilers.
  • Improved the extended key decoding facility, which is now located
    in src/ide/linux/keydecode.f. Input line editing, history, tab
    completion, etc., all rely on this. We’re trying to make the command-
    line behavior as common to both Linux and Windows versions. We would
    have loved to use the GNU Readline library here, but can’t due to its
    licensing.
  • Floating math support now working in the Linux version. The
    configuration tool has not been ported yet, so we’re using defaults.
    “REQUIRES fpmath” to load it.
  • Added time and modified Julian date (MJD) calendar support. Note
    that words to set the date and time are not supplied as these are
    properly privileged system-level functions.
  • Added method to return to the most recent working directory using
    “cd -“. As with the bash version of cd, one level of OLDPWD is
    supplied. Repeated “cd -” commands will toggle the working
    directory.
  • Added parsing of cross reference file/line number pairs (ending in
    ‘|’) to LOCATE. Example: LOCATE 10 32| goes to line 32 of the source
    file from a recent WH (cross-reference) listing.
  • Ported the sendmail.f sample application from Windows to Linux.
    This uses the socket interface to establish a TCP connection with an
    SMTP server and send a text file as email.
  • Extended BYE so it calls ONENVEXIT and ONSYSEXIT chains before
    exit.
  • Changed the console terminal’s vectored PAGE behavior to scroll
    instead of clearing. This preserves “scrollback” in terminal emulator
    windows.
  • Fixed ANS file access methods such that they are no longer file
    creation methods. These codes are still passed to both OPEN-FILE and
    CREATE-FILE, but in the case of CREATE-FILE, they do not set the
    permission bits.

SwiftForth 3.1.2 (29-Jan-2008)

  • Fix initial memory allocation in xref. If you use SwiftForth to
    generate turnkey programs that call EVALUATE or use the interpreter
    but do not instantiate the debug window and have the cross reference
    turned off (FLOOR set to -1), you need this update.
  • Corrected check for error return in FILE-SIZE. If you run
    SwiftForth on older versions of Windows (95/98/Me), you need this
    update.
  • Fixed test for control character while parsing from included files
    such that it does not convert accented characters (codes in the range
    $80..$FF) to spaces. If you use accented characters in your source
    code, you need this update.
  • Replaced old windowed single-step debug utility with one that
    works in the main debug window, thus offering scrollback history of
    debug activity. This is now found in the SwiftForth/lib/options
    directory. The SSTEST example is in SwiftForth/lib/samples.
  • Moved Windows-specific user variables from the kernel to
    SwiftForth/src/ide/Win32/preamble.f.
  • Removed extra formatting from output message in REQUIRES.
  • Ensure ‘WF is properly initialized in turnkey startup.
  • Add pause before scrolling in words that generate large amounts of
    output in the debug window. Implemented in DUMP tools, cross
    reference, and disassembler.
  • Added filter to prevent cross reference output from displaying
    duplicate lines if more than one reference occurs on the same
    line.
  • Updated SwiftForth Reference Manual.

SwiftForth 3.1.1 (22-Jan-2008)

  • Added global kernel-specific <EOL> (line-end sequence) for cross-platform compatibility.
  • Changed most <CRLF> references to use <EOL>.
  • Turnkey program generator will not save the cross-reference list
    if ‘FLOOR is -1. ‘FLOOR is public so you can set it to -1.
  • Changed .CATCH behavior on the command-line to be a bit more user friendly.
  • Improved the output display when a THROW occurs while including a
    source file. Generally, the error message should only display next to
    the formatted display of the source line on which the THROW occurs. The source
    traceback shows the nested includes in reverse order, then ends
    without any additional error messages.
  • Windows console-mode I/O in kernel.exe has been extensively re-written to support re-directed console input.
  • The kernel start code has been reorganized to support common start
    behavior in Windows and Linux versions.
  • Improved the behavior of command-line processing in console and
    GUI modes. On failure, an option menu is presented. On success,
    falls through to QUIT without displaying a system greeting message.
  • This release notes file has been updated to use a less ambiguous date format.

SwiftForth 3.1.0 (17-Jan-2008)

Significant Changes

  • Reorganized kernel and IDE source directories. The upcoming
    SwiftForth-Linux version (later this year 🙂 will share much of the
    common code in the SwiftForth source tree.
  • INCLUDE-FILE (the inner working of INCLUDED and INCLUDE) has been
    completely re-written to read in an entire source file into virtual
    memory and parse it from there. This makes loading source files about
    25% faster than the old way (using READ-LINE) and also removes the
    arbitrary 250-character limitation on line length.
  • Extended the kernel target compiler to generate a cross-reference
    list. Cross references are now avaiable all the way back into the
    kernel source (nice feature if you use the cross reference tool).
  • Added cross-reference tool to evaluation versions.
  • Converted kernel into a Windows console app. GUI mode is optional
    and is loaded with the system extensions.
  • Re-wrote internals of the DLL library and function import routines.
  • Added more decriptive error messages for missing DLLs and imported functions.
  • Made DLLs and imported functions optional: Precede the definition
    with [OPTIONAL]. LOCATE [OPTIONAL] and read its comment block for
    details.
  • Added a new section to the SwiftForth reference manual:
    “Recompiling SwiftForth.”
  • Moved DUMP from IDE extensions to kernel.
  • Changed the kernel definition HI such that it first looks for a
    hi.f source file in the current working directory before falling back
    to the default location (SwiftForth\src\ide\win32).
  • Passwords are no longer needed for downloaded SwiftForth
    installers. The install key is now part of the download path.
  • Replaced the output PE file generation method in the kernel target
    compiler. Requires pehead.img in the kernel source directory, so don’t
    delete it.
  • Added ‘%’ filename expansion to the turnkey save routine. You can
    now type PROGRAM %SwiftForth\bin\sf1 and it will work.
  • Added -BALANCE and +BALANCE to turn on and off control structure
    checking done at the end of each colon definition. Default is +BALANCE
    (balance checking enabled).
  • Renamed the SwiftForth Reference Manual to swiftforth-win32.pdf (in the swiftforth/doc directory).
  • Updated SwiftForth/doc/handbook.pdf to the new 3rd Edition of Forth Programmer’s Handbook.
  • Added direct MSDN Win32 API Library link to Help menu.

Maintenance

  • Added line numbers to LOCATE output.
  • Modified WHERE and LOCATE output formatting to make them similar in appearance.
  • Cleaned up several source files: added comments, corrected typos, general clean-up. Lots more to be done here in subsequent releases.
  • Added PARSE-WORD (as described in the ANS Forth standard supplemental information).
  • Added [COMPILE] for legacy application support.
  • Moved SPRINTF support to options.
  • Fixed some minor issues in aswoop.f.
  • Updated SQLite source with changes from original author.
  • Removed single-step debug utility.
  • Added decode method for (CREATE) words in the disassembler.
  • Added check for runaway disassembly. This still needs some improvement, but it’s much improved.


SwiftForth 3.0.13 (04-Dec-2007)

  • NEW! Added directory SwiftForth/Unsupported/Contrib for contributions and sample code from SwiftForth users. If you have code to contribute, please email it to support@forth.com with “SwiftForth Contribution” in the subject line.”
  • NEW! Added directory SwiftForth/Unsupported/SQLite with sample SQLite interface.
  • Added missing BSF and BSR opcodes to the disassembler.
  • Updated the “HelloWin” sample code: changed “Windows 95” to just plain “Windows”. Replaced the WAV file, too (voice of Leon Wagner, in case you wonder).

SwiftForth 3.0.12 (18-Sep-2007)

  • Changed the definition of NAMED in class ENTITIES, and ANOTHER in class LOCAL-VARIABLES to correct a bug where the use of (LOCAL) was not handled correctly for the “0 0 (LOCAL)” case.
  • Added >PROCESS-WAIT which launches a process given the full text string for the Windows command line and waits until the process terminates before returning to SwiftForth. LOCATE >PROCESS-WAIT and read its comment block for details.
  • Force DECIMAL during cross-reference output. Preserve oroginal base across call to WH ( WHERE )

SwiftForth 3.0.11 (11-Jul-2007)

  • Added CFunction: which works just like Function: but is used instead for C-prototype DLL calls. Use Function: only for Pascal-prototype function calls.
  • Corrected TAB-NOTIFY in Samples\Win32\Tabbed.f.
  • Updated SwiftForth Reference Manual.

SwiftForth 3.0.10 (04-May-2007)

  • Changed reference to ?.STATUS in Lib\Samples\Win32\Terminal.f to SIO.STATUS to call the correct support function in Sio.f.
  • Corrected comments in various source files.

SwiftForth 3.0.9 (21-Apr-2007)

  • Changed “REQUIRES CommonDlgConstants” to “REQUIRES CommonDialogConstants” in Lib\Options\Win32\Choosepath.f to match the actual filename.
  • Changed reference to .STATUS in Lib\Samples\Win32\Serial.f to SIO.STATUS to call the correct support function in Sio.f.
  • Added DEFER BAD-DLL and DEFER BAD-PROC hooks to allow the handers in Src\Ide\Win32\Dllaccess.f for bad library and function names to be changed.
  • Enhancements to command-line editor in Src\Ide\Win32\Editline.f:
    1. Allow up/down arrow keys to invoke auto-complete if not at line start.
    2. Save all lines one or more chars long into history buffer.
    3. Ctl Shift Del = Delete to End of Line.
    4. Ctl Home = Show History.
    5. F3 = Append Last to EOL (like DOS).
    6. Auto-complete comparison is now case-insensitive.
    7. Fixed a few zero length bugs (ie DO >> ?DO).
  • Corrected reference to release history file in the Help menu.
  • Increased NOBJECTS in LOCAL-OBJECTS from 8 to 20.
  • Added toggle window function to wordlist browser.
  • Updated SwiftForth Reference Manual.
  • Fixed IS-SUBDIR test in REQUIRES to descend into subdirectories only based on DIR flag.

SwiftForth 3.0.8 (18-Feb-2007)

  • Replaced ANS forth reference DPANS94.pdf with an updated PDF. The original had a problem displaying pages past 25. This has been corrected.
  • Added “launch SwiftForth” to the end of the installer.
  • Removed clipping of saved debug window origin to (0,0) to better support multi-display environments.

SwiftForth 3.0.7 (05-Jan-2007)

  • Added RStruct.f (from Charles Melice) to Lib\Options. See source file for details.
  • Added ASwoop.f (from Gene LeFave) to Src\Ide\Win32, included in Hi.f. See source file for details.
  • Changed window placement handling at startup to confine the
    SwiftForth debug window to the Windows “Work Area” to prevent it from
    being hidden under the taskbar.

SwiftForth 3.0.6 (27-Nov-2006)

  • Changed the behavior of INCLUDE-FILE-COMMAND (invoked by Include on the File menu) to wrap double quotes around the included file name for compatibility with the new INCLUDE, introduced in SwiftForth 3.0.5. Thanks, Randy.

SwiftForth 3.0.5 (22-Nov-2006)

  • Cleaned up single-step debug code, removed unused ‘?’ button, removed DEBUG-HELP and expanded comment block at the start of the source file.
  • Modified TTY.DLL and added the function SET-CARET which sets the width (in pixels) of the overstrike caret. A value of 0 sets the default (character width). This new feature is for compatibility with the JAWS screen reader for the visually impaired.
  • Changed the FILENAME parsing used by INCLUDE. Instead of repeatedly parsing for a space character and checking for file existence (which causes problems with file/directory name ambiguity), INCLUDE now uses the more standard technique of allowing optional double-quote delimited path names. The quotes are only required when the path name contains a space. In all other cases, this change has no impact.IMPORTANT: If you have any instances of INCLUDE that look like this:INCLUDE MY LONG DIRECTORY\MY FILEChange them to look like this:INCLUDE “MY LONG DIRECTORY\MY FILE”

SwiftForth 3.0.4 (17-Oct-2006)

  • Updated SwiftForth Reference Manual with corrections to single-step debug section.
  • Fixed a bug in the mod to Frame.f from the previous release that incorrectly recalls the size of the saved SwiftForth window on exit. This becomes more evident when the window is closed farther away from the upper left corner of the screen. Thanks, Jeff.
  • Updated SwiftForth Reference Manual with corrections, new graphics and screen shots, and a new format.
  • Fixed a bug in the mod to Frame.f from the previous release that incorrectly recalls the size of the saved SwiftForth window on exit. This becomes more evident when the window is closed farther away from the upper left corner of the screen. Thanks, Jeff.
  • Removed the extra ‘r’ from the word “derived” both in word names and in comments (examples: DERIVEDWINDOW, DERIVED-CLASS-MESSAGE)
  • Renamed FCOMPLEMENT as FSUPPLEMENT and made a new definition for FCOMPLEMENT that uses PI/2 instead of PI. Two angles are said to be supplementary if they produce a right angle (PI/2 radians) when combined and complementary if they produce a straight angle (PI radians) when combined. Thanks, Anil.
  • Removed obsolete reference to DIRTY in \Samples\Win32\Terminal.f.
  • Deleted some old debugging code from \Src\Ide\Win32\Help.f.
  • Fixed the initialization of ROOTPATH such that it is set to the “root” of the SwiftForth directory tree. This is the “grandparent” of the directory holding the SwiftForth executable. The version of /ROOTPATH introduced in release 3.0.2 incorrectly started from the root of the drive, which broke SwiftForth installations in any but the path level.

SwiftForth 3.0.3 (27-Sep-2006)

  • Added PortIO.f to the Samples directory. This shows how to perform direct port I/O using the installed Giveio.sys driver. Note that the driver is not required for Windows 9x and Me systems, but the same set of operators is used on all Windows systems.
  • New fixes to Frame.f which better enable SwiftForth to remember its size and position. Exiting when the window is maximized will restart with the window maximized, and will remember what the restored size was. Exiting when the window is minimzed will restart with the window in the restored size.
  • Added a system menu item (right-click on SwiftForth in the taskbar) to force the window to appear in a safe default onscreen placement where it can be resized and moved as needed.
  • Added a few more API calls to Dllfunctions.f, which are used to support window sizing.
  • Reversed the direction of the mouse wheel scrolling in the debug window. This results in a new TTY.DLL which is located in the SwiftForth\Bin directory.
  • Automatically append the default file extension when saving a log or text file.

SwiftForth 3.0.2 (08-Sep-2006)

  • Cleaned up SwiftForth Reference Manual, fixed broken links to Forth Programmer’s Handbook.
  • Reversed the direction of the mouse wheel scrolling in the debug window. This results in a new TTY.DLL which is located in the SwiftForth\Bin directory.
  • Corrected the exit condition in SUPERCLASS-DLGMESSAGE.
  • Improved inline code for some primitives in Inline.f.
  • Added ICODE SWAP-@ to optimizer rules.
  • Removed the Forth Source extensions from the TEXT-FILES list (used in Save File dialogs for text files).
  • Fixed a long-standing optimizer bug where the following compiled very bad code:: TRY 10 0 TEST ;The solution limits which “parent” xts are valid to consider for optimization to the set of defining words like (CREATE)
  • Fixed a bug in .’ that caused an exception if the name field address was below the origin.
  • Fixed COMPARE and SEARCH for 0 length case.
  • Changed the library search function in REQUIRES to search for a Lib directory in the current working directory, then in SwiftForth, and in SwiftX (which is itself a SwiftForth application).
  • Added a small dictionary alignment that attempts to prevent code from residing in the address space of same cache line as the PFA of the previous CREATE definition (which includes VARIABLEs and other data types built from CREATE. A serious slowdown occurs when a write occurs to the same cache line that a tight loop is also executing in.
  • Converted a few of the common math and double-number operators from CODE to ICODE so they will be inlined. This gives a nice performance improvement for compute-intensive applications.
  • Added the deferred word WHEN-CAUGHT in the exception handler to make troublesome debugs of exceptions easier.
  • Changed /ROOTPATH to back all the way up to the drive letter in the path before the root path determination is made.
  • INCLUDE-ERROR now always prints line # in DECIMAL.

SwiftForth 3.0.1 (09-Aug-2006)

  • Updated SwiftForth Reference Manual PDF so only top-level bookmarks are displayed in initial view.
  • Fixed an omission in the optimizer which resulted in seriously degraded performance in some instances.
  • Added a new optimizer rule to improve adding a literal to a CREATE address.
  • Changed the method for launching PDF files such to allow a path with spaces.

SwiftForth 3.0.0 (07-Aug-2006)

Significant Changes

  • SwiftForth and SwiftForth Pro have been merged in to a single version. All features formerly available only in the Pro version (kernel source, cross-compiler, etc.) are now fully integrated into SwiftForth. The ‘Pro’ designation has been dropped.
  • The previously unreleased source for the SwiftForth console window TTY.DLL is included for reference. This is actually a SwiftX/i386 application and requires SwiftX to compile it. In the unlikely event you need to modify it or wish to generate your own tiny Windows DLL or application, you will need SwiftX/i386.

Maintenance

  • The optimizer had several bugs, which have been fixed.
  • The GIVEIO.SYS driver has been moved into the Windows system drivers directory for compatibility with SwiftX. Any former instance of the service is removed.
  • A bug in COMPARE(NC) (version of COMPARE that is not case-sensitive) has been fixed.
  • The edit selection command-line parameter string for UltraEdit32 was incorrect and has been changed.
  • Added VIM and GVIM parameter strings to editor selection.
  • An advisory has been added to the installer to warn against installing SwiftForth in a path containing a blank (space).
  • The word HELP has been removed, as its original function is irrelevant.
  • In the Floating Point package, the words MAKE-ROUND-UP and MAKE-TRUNCATE contained incorrect constants (inconsistent with ROUND-UP and TRUNCATE).
  • F>D in the floating point library has been made to truncate regardless of rounding mode, as required by ANS Forth.
  • Floating point literals are now dumped as hex bytes in the decompiler.
  • The behavior of the dialog box that displays WORDS from the toolbar has been improved.
  • The character range for special characters processed by WITHIN has been fixed; it previously allowed @ to be considered a valid digit for BASE > 16.
  • Many minor bug fixes and improvements based on user feedback.
  • Newly revised SwiftForth Reference Manual.
  • Fixed DEL in Linked List support (Lib\Options\Win32\Linked.f).
  • Improved the SIO serial support (\Lib\Options\Win32\Sio.f).
  • Added warning messages to options not available for use in the SwiftForth Evaluation version.
  • Corrected the definitions of floating-point assembler mnemonics FDIV and FDIVR (they were swapped).
  • Added the DPANS94 copy of the ANS Forth standard to the Doc directory (also available from the SwiftForth Help menu).
  • If SwiftForth is launched after having been closed with the debug window minimized, it forces the debug window to be visible. Previously, closing SwiftForth with the debug window minimized was difficult to recover from.
  • Fixed default .THROW to handle -1 (ABORT) correctly.
  • Changed default error display method to debug window only. (Dialog box still available as a user option, but it is not the default.)
  • Cleaned up the import proc lists in Src\Kernel\Win32\Imports.f.
  • INCLUDED now resets FENCE to preserve the GILD space. This prevents the compiled source file name from being stomped on.
  • Optimized TNEGATE.


SwiftForth 2.2.3 (Legacy)

  • Z, and U, now have a max string length of 4096, up from 256.
  • The address in the ABOUT box is correct.
  • The ATTACH method in the PAINTCANVAS class now requires a window handle.
  • A new word \” is in the dialog compiler, allowing the use of strings with extended escape sequences in dialog control texts.
  • The GENERICWINDOW class method VISIBLE is now deferred, so an application can replace it with its own method of showing itself.
  • The COMMDRIVER extension has been revised again. Changes include additional words to make using it simpler, such as SER-EMIT and SER-KEY. The other principle feature is the addition of a hook for using the CommConfigDialog.
  • A new extension ENUMCOMM has been added to allow an application to discover all known serial devices in the system.
  • Various new extensions added: BMPANIMATION BMPFICHE XBITMAP STATUSLINE BUFOUT and CRC16. See the source files for details.