| News [Remove Frame]

May 21 - FOX DEVELOPMENT 1.7.90

- New unit-conversion facility (FXUnits). Convert from any unit to any other unit with ease; FXUnits also knows about prefixes such as k[ilo], m[illi], G[iga], etc. It will automatically parse these prefixes and apply the necessary scaling.
- Subtle bug fixed in FXString's number parser; you've probably not run into it, but when a number starts with 0, and more digits follow, it was sometimes switching to octal when it shouldn't.
- Class FXGlobVisitor has been split off from FXDirVisitor. FXGlobVisitor, as the name suggests, recursively walks directories, filters files and folders based on flags and wildcards.
- FXPath::expand() can now also expand ~user and ~ on Windows.
- FXSystem::getUserDirectory() improved for Windows port.
- Starting with version 1.7.90, FOX no longer uses Windows Registry; instead, it writes its files in user-friendly .ini format, under normally hidden APPDATA directory; this makes copying configurations between Windows and Linux much easier, and also allows hand-editing some configurations.
- Adie text editor tries a bit harder trying to find files in "Open Selected", using new parseFileAndLocation() routine. It handles drive-letters better on Windows as well.
- FXASSERT_STATIC() has been renamed FXSTATIC_ASSERT(). It maps to corresponding C++ static_assert() if your compiler supports it.
- FXTRACE() macro has been enhanced to use VA_ARGS feature in C/C++ preprocessor; thus, it no longer needs double parentheses!
- More work was performed on AARCH64 port; we now have AARCH64 v8.4 processor as well as good old Raspberry Pi. You will see more in the future, particularly AARCH64 on Windows!
- FXPath::simplify() was rewritten and no longer has arbitrary limits to path-components
- FXPath general bug fixes and improvements, particularly Windows support has made major steps forward.
- FXArray data pointer was not properly aligned for bigger data-types; now, FXArray returns data pointer aligned to 16-bytes on 64-bit systems, and 8-bytes on 32-bit systems.
- Small bug in memory-mapping fixed on Windows
- Slight speedup in FXQuat to euler calculations.
- Improvement in FXMat3d, etc. classes
- Last bunch of unsafe strncpy() calls removed from FOX.
- Additional compiler warning enabled, and those new warnings are now mostly fixed.
- FXASSERT() now has a touch of color. Hopefully, you won't see it.
- Print supports binary format (%b), now can write both 0b10101 as well as 0B10101, similar to hex support.
- FXRegistry parser is a bit more fanatic about what constitutes correct input.

Dec 31 - FOX DEVELOPMENT 1.7.89

- Visual Studio 2019 project files.

Dec 29 - FOX DEVELOPMENT 1.7.88

- The setTraceTopics() API is a little bit stricter on syntax.
- FXPath::convert() more battle-tested; new APIs convertToWindows(), convertFromWindows() added.
- FXPath::enquote(), FXPath::dequote() more solidly implemented, particularly Windows versions.
- FXURL::fileToURL(), FXURL::fileFromURL() use above convertToWindows(), convertFromWindows() to encode files to urls on Windows.
- FXPath dealings with non-fully qualified paths now improved.
- Updated FXPath::parseArgs().
- Updated internals of FXProcess building command lines for CreateProcess() on Windows.
- Modeline paring in Adie takes place after other methods.
- FXSettings key-value parser was improved: relaxed key- and section-names by allowing escapes for dangerous characters.
- FXPath implementation improvements, particularly for Windows.

November 19 - FOX DEVELOPMENT 1.7.87

- Updated implementation of __sscanf(), __strtod(), __strtof() using Lemire's algorithm.
- New closestAlongRay() API in FXVec3f, FXVec3d calculates closest point bewteen two 3D line segments.
- Fast, square-rootless and division-less approximate vector fastnormalize(); plus, inlined normalize().
- FXText drawing fix that will remove drawing limitations.
- Inlined character classifications in fxascii.h.
- Experimental FXPathBox replacing FXDirBox in FXFileDialog.
- FXFileDialog not listing ".." anymore; always caused problems.
- FXString wide-character unicode escaping sequences interpreted "\Uxxxxxxxx".
- Out-of-bounds read in FXString fixed.
- Super-accurate, branch-free setAxes() API in Quaternion classes.
- Quaternion setAxisAngle() API replaced by setRotate().
- Simplified (faster) setXRotate(), setYRotate(), setZRotate() APIs on Quaternion for quicker setup rotations about principle axes.
- FXPath improvements for dealing with Windows pathname idiosyncracies.
- FXDir listing files in a directory can return some extra information w/o need for a call to FXStat API, on filesystems where this is supported.
- FXPath pathname conversion from "foreign" to "local" operating system conventions.
- WIN32_LEAN_AND_MEAN prior to including windows.h.
- Slightly more accurate conversions between FXVec4f, FXVec4d and FXColor.
- List filename before context, and folder at the end in Adie FindInFiles.
- FXExpression can now have constants as well as variables.
- FXRex quick check for empty string.
- Adie text editor syntax pattern for YAML added.
- Syntax highlighting for Rust programming language added.
- When file being editor by Adie is changed outside of editor, or removed, a message is popped. A new option can now be used to avoid future popups if some process repeatedly changes the file. Also, when exiting Adie, if file was changed externally, you get one more chance to save text buffer contents.
- Added options to FXMessageBox.
- ControlPanel now has control to set display resolution (dpi).
- Fallback code for 64-bit leading zero count, trailing zero count on Windows.
- Ability to parse hexadecimal floats added.

When compiling on Windows, make sure a registry setting:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]

is set to:

    "LongPathsEnabled"=dword:00000001

it may be set to 0 by default, and this would cause VisualStudio's MSBuild to report path length errors.

May 18 - FOX DEVELOPMENT 1.7.86

- SEL_MOUSEWHEEL now bounced to target, similarly to other GUI events.
- New implementation of FXQuatf and FXQuatd setAxes() API. This one is singularity-free.
- New fastlerp() API in FXQuatf and FXQuatd implements trig-free quaternion interpolation.
- Improved pow() implementation in FXQuatf and FXQuatd.
- FOX Calculator fixes.
- Use argv[0] in adie as name of program in Registry. This means name of editor can be used to provide alternate configuration databases.
- FindInFiles shows file before reading it.
- FXPath now assumes user name may contain other characters in tilde-expansion.
- Missing fxstrcasestr() and fxstrstr() implementation added; needed for this and that.
- FXText draws control-characters differently now.
- FXString uncode escapes bug fix.

November 23 - FOX STABLE 1.6.59

- GIF loader bug fix for local colormaps.
- C++ register reserved word warnings fixed..

August 15 - FOX DEVELOPMENT 1.7.85

- New PNG image support. First, its faster! Also, it no longer requires libpng; the PNG format support is now built-in, although the libz compression library is still required [for now...].
- fxsavePNG() supports some fine-control via new save-flags. You can analyze the image, and shrink output by taking advantage of image features; for example, saving opaque image means alpha-channel may be dropped. If the image is gray-levels only, the RGB may be dropped to plain gray only. Also, shrinking further by emitting colormapped [indexed-color] image is possible if only a few colors are used. Finally, pre-compression filtering, as well as desired compression level can be selected.
- PNG I/O is optimized with when target ISA x86-64-v2 or higher are selected.
- FXStat::isSame() checks if two files are the same (same inode).
- FOX Desktop Calculator augmented with Unicode button labels (please select a font that has the math symbols!), also now supports additional functions, common physics constants, and other features.
- The fxCPUFeatures now can detect AVX512 presence.
- New FXPerformanceCounter and associated macros may be used to count clockcyles of critical code segments.
- FXAtomic.h APIs now mostly inlined for lower overhead.
- Read processor ticks on AARCH64.
- Adie text editor undo buffer size and undo buffer items can now be configured.
- New QOIF (Quite OK Image Format) now supported for either images (FXQOIFImage) or icons (FXQOIFIcon).
- FXColor to/from FXVec3d, FXVec3f, FXVec4d, FXVec4f now using SSE if compiled for x86-64-v2 or higher.
- Updated byte swap APIs in fxendian.h.
- New APIs in FXMat3f, FXMat3d, etc. classes to set up mirror-matrix.
- Moved new hash32() etc. functions into fxendian.h.
- Bug fix in FXIODevice reading > 1GB files in one readBlock(), writeBlock() call.
- Markdown syntax coloring in Adie.
- Per-syntax mode setting for removing trailing spaces in Adie saving a text file.
- Subtle change in operation of FXPath::relative().
- Support for CRC32 calculations added.
- Additional conversion options in FXString::fromFloat() and FXString::fromDouble(): thousands groupings, force decimal point, and hexadecimal float output.
- FXJSON JSON loader now may report duplicate key warning reading json file.
- FXMappedFile improvements.
- FXString uncode escapes bug fix.

May 13 - FOX STABLE 1.6.58

- FXSemaphore patch applied for MacOS build.

September 10 - FOX DEVELOPMENT 1.7.84

- (Redrop of this version due to file missing from manifest).
- New FXUndoList implementation. The new FXUndoList now supports an alternate history mode, i.e. it remembers redo-command after taking a different path. The internals of FXCommand have changed a bit, it now sports a reference count; for the most part that does not affect any user-code.
- Also in FXUndoList: on 64-bit machines, space-accounting is now performed in long to manage potentially large amounts of undo data.
- Adie editor undo sytem now supports merging undo commands, if the text is changed letter-by-letter it will consolidate contiguous commands, assuming they are considered mergeable. Currently we're keying on character classes to decide whether to merge or not. Idea is to not back up over programming-language special characters.
- Inlined some math functions for greater speed.
- Inlined some character-class APIs in fxascii for greater spead.
- FXSystem::system() to kick off command line via operating system shell (Windows).
- Minor annoyance in sideways scrolling fixed in PathFinder.
- Added "Seibenmeilenstiefel" scroll mode holding shift key.
- FXRex now has option to excape regular expression special characters. Major convenience mode.
- FXRex bug fix: could not always properly add control charactor using \cX syntax.
- FXRex bug fix: signed vs unsigned charactar issues surfaced due to internal representation change.
- Adie status-line indicator for current language mode.
- When loading a new file, Adie checks "emacs" modeline presence first, if modelines are on.
- New APIs added to Math namespace for hashing values (32- and 64-bit), as well as unhashing values. Hashing float and double added so as to use these in hash tables as a key.
- FXText now uses new UTF8 navigation techniques, where it makes sense. This is a performance upgrade.
- Minor bug fixes in FXText widget.
- Experimental -O3 when compiling for release mode; its a major performance bump.
- Inlined branch-free toUpper() and toLower() major boost in case-insensitive comparisons.
- PathFinder and Adie now has command line parameter to force window size and placement.

June 13 - FOX DEVELOPMENT 1.7.83

- FXThread::current() yields thread-id.
- Updated icons in FXFileDialog, PathFinder, and Adie editor.
- FXPath::enquote() should also engage escaping when embedded braces found in string.
- FXPath::enquote() places quotes around empty file, because it is the only way to pass empty string parameter sometimes when passing arguments to sub process.
- Updated help information in Adie editor.
- Adie now gives warnings if (1) file being edited is changed by another program, (2) file being editor was removed by another program If warnings are turned off, you will still get prompted when you're about to save or close the window. This minimized unexpected loss of information.
- X11 line width fix (needed for some broken GPU drivers).
- Updated VC++ project files.
- Ascii character classifications now inlined, potentially much faster. Important for Adie regex-based syntax coloring engine, where improvement is noticable.
- Adie editor search/replace now supports whole-word search option.
- Adie editor now has "New File" in addition to "New". The new option prompts user for filename immediately, and thus kicks syntax colorizer into the correct mode, if the mode is determined by file extension. This is normally the case.
- Adie word-wrap toggle on menu bar is helpful to quickly reveal long lines running past right edge of the screen.
- When you're in the middle of editing a large file, and scroll around to look at something (e.g. a declaration), you can now quickly jump back to the last location being edited. This is done by implicitly defined bookmark called the "Insert Point". Promise you will find this feature quite convenient.
- FXPath::title() has been renamed to FXPath::stem(). This seems to be the apropriate name for what it does, which is to return the name less the extension and the directory-part.
- Adie offers quick switching editing windows from right-mouse popup menu. Also added is "Open Selected" which opens the selected text as a filename.
- Some internal streamlining in FXRex, the regular expression engine. Also, word-mode automatically generates begin-word, end-word around top-level match. This also works for verbatim mode.
- FindInFiles dialog also supports whole-word search option.
- Incremental search looks updated, and whole-word mode added.
- Adie shell-command line and shell-command filter dialogs now have scroll-back through previously launched commands.
- FXFileDialog can side-scroll using mouse wheel when in the horizontal mode.
- FXScrollArea logic w.r.t. non-scrolling directions: mouse wheel is blocked from controlling scroll bar if scrolling is off in the horizontal (vertical) direction.
- Relaxed interpretation of reserved word in JSON parser: only reserved when they appear as a "value", not when they appear as a "key". Important when e.g. loading as plain JSON but then saving as JSON5 may be something that could break a file from being loaded otherwise.
- Checking for early end-of-file in JSON parser may yield more sensible warning messages.
- Added FXPath::isRelative() API. This returns true if the path leading up to a filename can be determined to be relative. Operates similar to FXPath::isAbsolute(). Note that it is possible both FXPath::isRelative() and FXPath::isAbsolute() to return false. Sometimes, there just isn't enough information to decide.
- Improved innards for FXPath::expand() to expand environment variables etc.
- In FXRex regular expression matcher, when performing backward matching, back references must refer forwards as the later-occuring parts of a string are matched first.
- API added to FXFontDialog to set sample text to font-display.

March 27 - FOX DEVELOPMENT 1.7.82

- New FXINI, FXINIFile classes added to parse (and unparse) configuration (registry) file format into FXVariant datastructure.
- Updated variant test program to load/save configuration (registry) file format.
- Some minor issues parsing infinity and nan fixed in JSON parser.
- Keyword recognition in JSON only when keyword expected. Now reserved words/keywords allowed in places where identifiers are expected (JSON5).
- Some minor issues parsing infinity and nan fixed in JSON parser.
- Shell-command dialog for Adie text editor now has command scrollback for previously executed commands.
- New feature to executed highlighted line as command in Adie.
- Fast conversion of FXColor (RGBA) pixel value to/from FXVec4f or FXVec4d using AVX2.
- Fixed default parameter in FXString find_last_of(), find_last_not_of().
- Quaternion normalize() will be replacing adjust(). A new fast incremental quaternion fastnormalize() API added to re-normalize almost-normalized quaternion. This technique is MUCH faster than normalize(), since only multiply-add used, no sqrt() or division.
- FXJSON parser speedups.
- FXFile, FXIODevice, FXIO updates.
- FXMappedFile class for memory mapped files added.
- New API FXThread::ticks() returns CPU tick counter; this replaces old fxgetticks().
- Some internal improvements w.r.t. FILETIME on Windows in different places.
- FXStat::stat() API added for getting permissions from open file by handle.

November 13 - FOX DEVELOPMENT 1.7.81

- Using _InterlockedExchangeAdd64 and other FXAtomic issues (Windows).
- FXApp should never write FOX-wide settings; only per-app settings. This rule was violated for a few types of settings.
- Horizontal and vertical scrollbar multi-line scrolling can now be individually controlled.
- Added a couple nice color themes in ControlPanal to choose from.
- Adie Syntax class API class leads to somewhat simpler code. Possibly faster.
- Tentative alias_cast() template may be used for shutting up GCC alias warnings. This means type-punning related warnings are now properly suppressed.
- Additional math-functions added to FXExpression mathematical expression evaluator.
- Some internal branch-avoiding optimizations in FXRex, the regular expression matcher.
- Subtle off-by-one bug fix in fxprintf, when very small, denormalized floating point numbers were printed.
- Added orthogonal() API for 3D vector classes: it returns vector orthogonal to given vector.
- More forgiving and simpler implementation of quaternion arc() implementation.

October 10 - FOX DEVELOPMENT 1.7.80

- New Visual C++ 2015 build project files for FOX distribution; you should be able to import them to any post-2015 version of Visual Studio.
- Conversions to smaller integer sizes in FXVariant now saturate to maximum (unsigned) values; success-flag will be set false if saturation happens.
- ControlPanel has new section for configuring "sub-pixel rendering" feature for Linux font system.
- New feature in JSON parser/unparser is to allow saving in JSON5 mode; default is still regular JSON mode.
- JSON unparser allow setting preferred quote type.
- JSON unparser allows unicode identifiers for keys.
- Minor bug in JSON parser when parsing and unescaping string: ensure we're using the correct quote type (JSON5 allows two quote types).
- Improved matrix to quaternion code.
- In FXVariantMap, space reserved for 32-bit machines was updated.
- FXVariant now has some API's to remove item from map (if map type), or array (if array type).
- Allow for a few more items in Adie's window list and recent file list.
- Minor updates to Adie man page for new commands format.
- Adie FindInFiles now remembers previous search directory when scrolling back to prior search commands.
- Can start Adie with given window size now.
- Slightly simpler syntax is possible to open file onto given line number (and column).
- Allow ascii mode when reading registry on Windows; is command line parameter in FXApp.
- Silenced numerous warnings introduced enabling new compiler flags.
- Small layout problem fixed in PathFinder.
- Updated VC++ Studio project files: 64-bit build now default..
- Some bug fixes in fxendian bit manipulation APIs.
- API added to find system directory.
- Also __snprintf() and __vsnprintf() now handle denormal floats even when library was compiled for release (with FTZ/DAZ).
- Bug fixes in FXText.
- Minor warning fixes.
- More user-friendly type-names in FXVariant.
- Fixes in FXReadWriteLock for MacOS.
- Calling adopt() on FXSettings sets both instances to modified, as it should have.
- FXColorDialog remembers its size from last time it was used.
- FXFileSelector/FXFileDialog change: in SELECTFILE_MULTIPLE and SELECTFILE_MULTIPLE_ALL more user-friendly encoding of multiple filenames in text box using commas ','.
- Adie editor Find In Files remembers search-folder as well as previous search-parameters in search-history scrollback.
- Launching Adie with not just file, but optionally line and column number as well. Handy for compiler warnings.
- Also, can pass geometry specification on command-line to bring up Adie with given window size and location.
- FOX applications can now load registry settings from text file on windows, thanks to new command-option parsed by FXApp.
- Use some intrinsic x86-64 (or x86) instructions for bit-manipulations where possible.
- Backward scanning UTF8 API, plus many other UTF8 APIs now inlined; some macroes replaced by inlines.

March 11 - FOX DEVELOPMENT 1.7.79

- FXJSON parser fix identifier recognition issue.
- Added Adie syntax colorizer for data tables.
- New rule type in Adie syntax colorizer: span rule.
- Changed keywords in Adie syntax colorizer: more succint.
- Syntax colorizer now UTF8 aware.
- Some speed-ups in FXRex.
- Adie syntax patterns for C++ have been sped up with use of possessive match where possible.
- More checks in Syntax Parser.
- Math implementation updates: faster pow10i(), fpMantissa().
- The function fpExponent() in Math has been fixed to return correct exponent for denormal floats.
- Internal number formatting routine __snprintf() and __vsnprintf() bug fixes for hexadecimal float conversion.
- Also __snprintf() and __vsnprintf() now handle denormal floats even when library was compiled for release (with FTZ/DAZ).
- In addition __snprintf() and __vsnprintf() more spiffy formatting options for "engineering mode" with exponent mode enabled, and nice columnar formatting also supported.
- The __snprintf() and __vsnprintf() now use substantially less stack space for conversion.
- The __snprintf() and __vsnprintf() properly handle zero-precision case for integer conversions.

February 15 - FOX DEVELOPMENT 1.7.78

- Major rewrite of FXJSON parser. Faster, stricter, better UTF8 support.
- Bug fixes in FXString.
- New functions added to math APIs.
- Minor fixes to FXPtrList.
- Better HotKey processing in FXAccelTable.
- Now use nullptr in lieu of NULL (C++ compiler feature).
- Julia syntax highlighting added to Adie text editor.
- Drop conversion check in FXJSON parser.
- FXPath::expand() recursive environment expension [up to some limit].
- FXCondition can use FXScopedMutex and FXReverseMutex.
- Use of static_assert() conditional upon compiler support.
- URL encode should also encode @ and :.
- Off-by-one bug fix in FXText.
- Warning fixes.

April 20 - FOX DEVELOPMENT 1.7.77

- Subtle FXString::format() numeric rounding bugs fixed.
- Adie text editor rare crash bug fixed.
- FXString unicode conversion bug fixes.
- Additional checking ensuring FXString::substitute() called properly.
- Subtle FXString manipulation bug fixes.

April 1 - FOX DEVELOPMENT 1.7.76

- Add handy icon button to Adie file list widget to hide/show hidden files.
- FXText widget parameter verification improved for content-modification APIs.
- FXText widget block mode replace, block insert, and other block operation regressions fixed.
- FXText widget block selection issues fixed.
- FXRex grammar depiction fix.
- In FXJSON parser, a single bad-utf8 prefix case label was missing.
- Not all systems have pthread_rwlock_setkind_np(), causing compile to fail on those systems.
- New FXASSERT_STATIC macro added; it is defined for C++ language > 2011.
- Scoped FXReverseSpinLock class added, similar to FXReverseMutex scoped lock.
- The unixToDos() API would potentially add a second CR if input was already DOS format; now fixed.
- Adie text buffer loading and saving updated.
- Adie extract range selection to file, and extract block selection to file option added.
- Adie replace text range from file, or replace text block from file option added.
- FXString::length() now returns boolean instead of throwing exception when out of space; internals of FXString somewhat fortified against low-memory situations (you're unlikely to run into memory issues on FXString on modern machines, unless you're dealing with truly gigantic strings).
- A number of places are now defining specific trace topics using the new topic-tracing implementation.

March 2 - FOX DEVELOPMENT 1.7.75

- FXSystem::getUserDirectory() had bug on Windows with non-unicode build.
- Configure scripts allows specification of freetype2 install locations.
- Adie rules for C# language updated with current set of keywords.
- Added TypeScript coloring rules to Adie syntax file.
- FXDir::createDirectories() now insists on absolute path as input.
- FXPath::upLevel() now works for relative paths as well.
- FXPath::enquote() bug fix: enquoting string containing '#' was flawed.
- Building using VC++ now keys on DEBUG not _DEBUG.
- Adie syntax rule fix for CMake.
- Some small fixes to FXPath::simplify() for path separators.
- Set DPI Awareness upon launch on Windows.
- Dropped unnecessary asserts in FXCursor (Windows).
- Updated FXTRACE() implementation. Trace topics in addition to levels. You can change the set of topics to trace using new -tracetopics command line parameter. The old -tracelevel is still there, it sets a range of topics. New APIs are added to set topics programmatically: setTraceTopic(), setTraceLevel(), setTraceTopics(). The trace topics allow dumping reduced amounts of information when debugging a particular aspect of your program.
- Removed fxstrhash() in favor of FXString::hash().
- Support convert to/from Modified Rodrigues Parameter in quaternion classes.
- Orthogonalize 2x2, 3x3, 4x4 matrices using Gram-Schmidt orthogonalization added.
- Some further work in FXReactor, FXDispatcher.
- Fix address sanitizer issues in FXDictionary, FXHash, FXReverseDictionary, FXSettings, FXStringDictionary, FXVariantMap.
- Leaked icon resource fix in Adie, ControlPanel, PathFinder Preference panel.
- Fix to SUNRAS image loader loading 1-bit per pixel images.
- Potential NULL cursor pointer issue during create() fixed.
- Miscellaneous compiler warnings fixed here and there.

December 3 - FOX DEVELOPMENT 1.7.74: Sinterklaas Release!

- API additions in FXAccelTable for convenient single call parse- and add to table.
- Support for Borland C++, Digital Mars C++, and Watcom C++ removed.
- FXXMLString class added; deserialize XML from an FXString.
- Work-around for VC++ lack of support for hexadecimal floating point literals.
- FXCursor.cpp non-compile bug fix.
- Lots of warnings fixed.
- All "register" declarations now expunged.
- Miscompile and performance bug in FXRandom implementation fixed.
- Engineering mode display option in Calculator.
- Engineering mode option formatting doubles in FXString.
- Expression now allows underscore in variable names; internal optimizations in parser.
- Relaxed parsing of fractional seconds in systemTimeParse().
- Obtain leap seconds given TAI, in addition to leapseconds from UTC.
- Highlight text block via keyboard arrow keys in FXText.

August 24 - FOX DEVELOPMENT 1.7.73

- Added math function Math::pow10i(). Performs integer power of 10. NOTE: function Math::pow10() will go away as this has been deprecated; use Math::exp10() instead!
- FXString::hash() now switched over to FNV1a algorithm; is slightly better than old one on dictionary tests; the classname hashing in FXMetaClass was switched too. Note this means libraries using FOX that need hashing would need to be recompiled!
- Serious bug in FXText fixed: caused assertions from book-keeping discrepancies in cursor movement.
- More stringent checking floating point input containing thousands-grouping.
- Hexadecimal floating point input (fxscanf) now supported.
- Hexadecimal floating point output (fxprintf) now supported.
- Possible speedup in FXDictionary, FXSettings, FXStringDictionary, and FXVariantMap.
- Non-compile issue discovered in *BSD.
- Finite wait-API added in FXSemaQueue.
- Adie text editor bookmark menu labels slightly more intelligent caption.
- Bug printing out denormalized numbers, in optimized mode [FTZ/DAZ floating point flags in effect].
- When printing out floating point numbers, correct exponent in case it was denormalized. Important note: we have reason to believe (a) glibc version of fprintf() has a bug with small denormalized numbers printed with "%a", and (b) we believe both GCC and clang++ compilers have bugs parsing hexadecimal denormalized floating point numbers.
- Some math functions renamed for consistency: ipow() to powi().
- Change in behaviour: Math::fpExponent() now returns exponent without bias.
- Change in behaviour: Math::fpMantissa() now returns mantissa including the hidden bit [unless number is denormalized].

July 14 - FOX DEVELOPMENT 1.7.72

- Added math function Math::pow10i(). Performs integer power of 10. NOTE: function Math::pow10() will go away as this has been deprecated; use Math::exp10() instead!
- String to double conversion routines accuracy improvement fix implemented; approximately 16th digit accuracy now.
- Added %a and %A handling in fxscanf.cpp. Hex float support parsing to be switched in soon; not yet 100% working at this time.
- When parsing exponent-part of floating point number fails, properly rewind input to the part before it; this will leave the rest of the string for another conversion specifier if there is one.
- When parsing number-separator, don't allow consecutive number separators. Future implementations may be more strict still.
- FXThread thread naming update for MacOSX and other operating systems.
- The math.cpp test program now implements testing functions when they are missing from the operating system.

July 6 - FOX DEVELOPMENT 1.7.71

- FXSystem::Time not initialized inside FXSystem::systemTimeParse(); must initialize to zero prior to call. Reason: need to be able to determine what fields were actually set during the parse.
- Added FXSystem::daylightSavingsActive() API. Determines if daylight savings time in effect at the given time.
- On Windows, FXSystem::daylightSavingsActive() uses TIME_ZONE_INFORMATION to determine when daylight savings is to be switched. But Linux and Windows versions may need additional work.
- FXSystem::localTimeZoneName() returns time zone name as known by O.S. Note its returned as UTF8 string.

June 28 - FOX DEVELOPMENT 1.7.70

- Changed order of paramter in FXSystem::systemTimeParse(); new order allows default parameter for time parsing format, "%m/%d/%Y %H:%M:%S", which is very convenient .
- Added localTimeZoneName() API.
- Changed parameter order and implementation of universalTime() and localTime(); the new order now allows default parameter ("%m/%d/%Y %H:%M:%S") for time formatting and parsing. New implementation using recently added routines also allows adjustment for time zone offset if time zone offset is parsed from time string (%Z or %z option).
- FXSystem::systemTimeParse() does not initialize FXSystem::Time struct anymore; thus, should be zeroed out prior to being called. However, FXSystem::systemTimeParse() will assign as much as it can based on the time- and date-components being parsed. Also note, FXSystem::systemTimeParse() can properly parse ISO week number and day, and compute proper date from that. Its a bit tricky.

June 24 - FOX DEVELOPMENT 1.7.69

- More FXSystem time related API changes.
- FXString 16-bit character conversion fix.
- Military time zone parse.
- FXFileSelector onCmdDirectoryUp() selects directory we were in before, for quick downward navigation.
- FXFileList sets both current and anchor item when entering directory.
- The fxprintf.cpp used in string formatting now supports %a and %A for floating point printout.

April 29 - FOX DEVELOPMENT 1.7.68

- Added FXSystem::Time struct, system-independent time in parts. This comes with (at the moment) two routines, FXSystem::systemTimeFromTime() which converts FXTime to FXSystem::Time, and FXSystem::timeFromSystemTime() which converts time in parts to FXTime (in nanoseconds).
- New routine FXSystem::systemTimeFormat() formats FXSystem::Time to a string, similar to strftime(), with a few extensions.
- New routine FXSystem::systemTimeParse() parses FXSystem::Time from a string, similar to strptime(), with a few (more) extensions.
- New routine FXSystem::daysFromCivil() converts year, month, day to days since Unix Epoch in days.
- New routine FXSystem::civilFromDays() converts Unix Epoch in days to year, month, day.
- New routine FXSystem::timeFromNTPTime() Converts NTP time (64-bit ssss:ffff) to FXTime, nanoseconds since Unix Epoch).
- New routine FXSystem::ntpTimeFromTime() Converts FXTime time to NTP time (64-bit ssss:ffff).
- New routine FXSystem::leapSeconds() returns number of leap seconds since FXTime. It can be used to compute UT1 time (plus or minus fraction of a second).
- The sysctl.h is now obsolete on Linux [still checked as not obsolete on *BSD].
- Blending on in FXGLShape.
- WM_ERASEBKGND message handler (on Windows) should return 1.
- Small default width/height size calculation bug in FXTable fixed.
- Some fixes in FXMat3d, FXMat3f with some SSE/AVX code.
- Additional routines in fxendian.h: pop64(), pop32().
- New routines in FXElement.
- Some more missing math functions added in fxmath.h.
- Fix in FXDate for pre-1970 time values (rounding wrong way).
- FXTRACE in FXMetaClass constructors/destructors.
- Some progress on new FXEventLoop/FXDispatcher/FXReactor classes.
- FXThread naming.
- Initialize FXQuatf/FXQuatd with Rodrigues angles, other APIs for Rodrigues angles added.
- FXJSON parser exponent parsing bug fix.
- FXCallback bug fixes.
- FXText bug fixes/improvements.

September 11 - FOX DEVELOPMENT 1.7.67

- Two subtle bug fixes in new double to string conversion fxprintf.cpp; first, compiler optimization caused code to be generated that overflowed, making results incorrect when optimization was on. Second, another (unrelated) overflow situation happened converting double to unsigned long. Now that both are fixed I believe we have a very fast numerical conversion that appears to be reliably generating about 15 to 16 digits out output [last digit may be off by 1 or 2 in typical case].
- Allow more bookmarks in FXFileSelector, for frequently visited directories.
- Work-around for operating systems missing lrint() and lrintf() in fxmath.h. Testing reveals replacement implementation to be very close to original, with exception of tie-breaking rule rounding numbers that are exactly midway between two integers; we are, however, mostly happy with the way our implementation works if lrint() is needed on an operating system where theses functions are missing.

August 23 - FOX DEVELOPMENT 1.7.66

- FXString::escape(): encode illegal UTF8 as hex-sequence regardless of flags.
- FXJSON bug fixes for support of JSON5.
- FXJSON parser strictly reject bad (ill-formatted) UTF8 characters.
- FXPath UNICODE user home directory fix.
- Fleshed out thousands-grouping in fxprintf (used by FXString and other places for number-conversion). Print comma-separated thousands in the integer fraction. New: when in exponential mode, adjust the exponent and decimal point location such that the exponent is a multiple of 3.
- New, faster, and often more accurate floating point to string conversion. No, this is not based on Ryu paper. New method reliably generates 16 digits, and does much better rounding.

May 3 - FOX DEVELOPMENT 1.7.65

- FXJSON now has JSON5 JSON5 support; line-comments, multi-line comments, unquoted key names, etc.
- Experimental block-selection in FXText widget.
- Fixed fxscanf.cpp to be able to read NaN and Infinity/Inf.
- Fixed strtod() to recognize Infinity.
- The escape() of empty string returns "", not empty string.
- The unescape() supports line-continuations.
- Additions to Math namespace.
- Additions to FXQuatd and FXQuatf.
- Some missing functions added to FXExpression.
- FXPath::convert() transforms foreign operating system-style paths to local conventions (path separator, path list separator, environment variable syntax).
- Improved FXPath::expand().
- FXThread::wakeat() now using absolute time on Windows (using undocumented API).
- FXReverseDictionary class added.
- FXDirWatch class added.

April 3 - FOX STABLE 1.6.57

- Libtool flags added on behalf of FXRuby builds and missing UNICODE flag added for CYGWIN32 build.

February 20 - FOX DEVELOPMENT 1.7.64

- Switched FXDir to use readdir() instead of now-deprecated readdir_r(). Supposedly now thread-safe.
- Some internal streamlining in FXRex.
- In FXText, duplicate line leaves cursor in place, but highlights the new line (if you duplicate one too many, you can therefore immediately delete it again).
- Add some help messages for PathFinder's Preferences dialog.
- Add columnFromPos() and posFromColumn() functions in FXText.
- Fixed bug in FXText not recalculating width if only single line present (was introduced recently).
- FXRex reverse algorithm was not working for verbatim mode; it does now.
- Some limitations on FXRex regex-reversal algorithm removed.
- Adie open-selected rework had introduced some bugs; is fixed now.
- Added new convenient API's to Math namespace.
- Added new API's to vector classes.
- FXText block select, block copy to clipboard, and block delete now work.
- FXText shiftText() had minor issue shifting text containing tabs; this has been dealt with in a very sophisticated way, an internal routine which is also needed for block operations.

January 16 - FOX STABLE 1.6.56

- Problem fixed in FXString vformat().

December 18 - FOX DEVELOPMENT 1.7.63

- PathFinder now stores execpath, which is used to locate executables listed in icon-associations; it can be changed via Preferences Dialog. This is for people who are not able to set system environment variables directly.

December 13 - FOX DEVELOPMENT 1.7.62

- Newly added arbitrary-length look-behind assertions in FXRex are a bit more bullet-proofed.
- Some bugs with partially filled buffers in FXText fixed.
- Large number of updates to syntax patterns in Adie.stx.
- Fixed some minor issues in reversing of regular expressions, needed for arbitrary-lookbehind assertions in regular expression engine.
- Bug fixes in FXDispatcher.
- Added disconnect API to FXCallback, the new fast delegation class.
- Word boundary in back-scanning regex engine fixed.
- FXRex empty branch issue fixed; empty branches no longer allowed.
- Removed limitations on message lenghts in fxerror(), fxwarning(), etc.
- In FXRex, when patterns are reversed, some escape sequences are dangerous; partially, this could be fixed by requiring that the hex escape sequence require two hex characters. For octal character sequences, however, this can not be done, so those are flagged as unsupported in look-behind patterns.
- Some bugs fixed for Windows build.
- Added API to FXPath to check if a filename is a reserved filename, such as "COM1", "PRN" etc.
- Fixed FXDirBox flicker, particularly under Windows, due to bad implementation.
- The call to ::system() does not work as desired under Windows. Calls to ::system() are used to spawn child processes, for instance, clicking on an icon in PathFinder. These calls have now all been replaced by newly developed APIs in FXPath, like parseArgs().
- A Windows-specific version of parseArgs() has been added, it follows Windows commandline escaping rules.
- More options in file-associations for launching applications from PathFinder. Applications may be launched with the current file (%f), the list of all selected files (%F), the url of the current file (%u), the url's of all selected files (%U), or the current directory (%d). These options can be used at the same time, for instance, an association "tar cvfz %d.tar.gz %F" would tar up all the selected files into an archive that's named after the current directory.
- Updated Makefile colorizing.
- PathFinder now as its own notion of executable paths; this allows users to add additonal paths to the shell-provided PATH environment variable. Handy as not everyone knows how, or is allowed to change system PATH variables.
- Show exact bytes in tooltip on bottom of PathFinder window.
- Fixed FXAtomic problems on Windows.
- FXText widget has tooltip timer, and will be able to pop a tooltip with location-dependent content.
- Duplicate accelerator issue fixed in FXReplaceDialog.
- Try and prevent Adie from loading insanely large files [for example, accidentally clicking on an .iso].
- Strange Dell mice issue issuing dual mouse-wheel reports. This caused some minor issues with scrolling. The FXScrollBar has been fixed for this problem.
- At the same time, changed anomation parameters of FXScrollBar slightly; animation time-step is now raised to 16ms, which is about one frame-time on 60Hz screen. This means scrolling is a bit less CPU-hoggy as the amount of work is dropped to 1/3.
- Find In Files has some utility improvements.

September 22 - FOX DEVELOPMENT 1.7.61

- Regular expression now supports non-simple possessive matching.
- Possible signed character issues fixed in fxscanf.
- Some better feedback in Adie while searching patterns in multiple files.
- Find in files in Adie remembers last-used patterns and folders.
- APIs added to FXText to manage virtual columns (columns past end of line). This will be needed for block select operations.
- FXIconList lasso speedup, especially when YUGE numbers of files in a folder.
- Minor PathFinder spruce-ups.
- New APIs in FXPath: parseArgs() builds argv vector from command line, suitable to passing to execve() (etc.) system calls (or FXProcess).
- Improved enquote() and dequote() for UNIX in FXPath.
- In Adie, ShellCommand now kicks off sub-command w/o needing a shell; uses new API parseArgs() to assemble command and start sub-process with it.
- Minor fixes in FXCallback template.
- Added rotate() to FXVec3d and FXVec3f.
- Added additional APIs to FXAtomic.

July 19 - FOX STABLE 1.6.55

- Fix FXMemoryStream position() API: error code was set moving stream position to end of buffer.

May 17 - FOX DEVELOPMENT 1.7.60

- Context back-up changed in incremental syntax recolorizer (Adie).
- Some typos fixed here and there.
- Configure script and makefile updates.
- Many updates being worked on inside FXText.
- Compiler warnings fixes for GCC 6.3.1, which seems to flag a few new things.
- Some FXText widget speedups.
- Bug fixes in FXString.
- Added visiting() API to FXDirVisitor.
- Disable and enable buttons in FindInFiles dialog in Adie editor when starting/stopping searches.
- Brace-matching change: matching brace can now stay visible as long as cursor on a brace (if enabled). Enabling permanent highlighting also makes the match search outside of the visible part of the text buffer, in case the matching brace is scrolled into view later. Thus, people with slow machines may notice brace-match could take slightly more time, when working with really large files.

April 20 - FOX STABLE 1.6.54

- Fix core dump using old GNU C Library or CYGWIN inside FXString::vformat.cpp.

April 14 - FOX DEVELOPMENT 1.7.59

- Changed the way bookmarks are done in Adie; you can delete them one by one.
- A fair number of changes and bug-fixes in FXText widget.
- Cursor doesn't blink during movement in FXText and FXTextField.
- Limit accumulation of repaint-areas yields less visible flicker in some case.
- Redraw of line numbers in FXText now with less flicker during resizing.
- Adie text editor now supports adie, emacs, and vim modeline parsing; you can set language (syntax) mode, tab width, wrapping, and a few other things.
- Dropped jump-scroll mode support in Adie: never used by anyone.
- Some extra options added to Adie Preferences Dialog.
- Syntax file for Adie can now force hard-tabs, autoindent, and other attributes. This means editing 'Makefile' will automatically switch hard-tabs on!!.
- Adie on-line help updated with description of syntax for 'Adie.stx' syntax description file.
- Documentation in FXAccelTable.h expanded to include syntax for accelerator keys.
- Option for brace-matching added to FXText. Also, added option to keep brace highlighted forever, or until cursor moves or a selection is made.
- Show 'indeterminate' state for checkbuttons in Preferences panel, if default settings for tab-mode, wrap-mode, auto-indent have been superceeded by attributes from the syntax-file or a parsed modeline.
- Added 'SaveTo' option in File Menu of Adie text editor.

March 13 - FOX DEVELOPMENT 1.7.58

- Adie improvement: don't clear bookmark selecting it 2nd time; now, remove bookmark by invoking "Delete Bookmark" with the cursor on the bookmark to be deleted.
- Bookmarks now at start of line; thus, only one per line.
- Use __buildin_bswapXX() only for GCC 4.8 and newer; older versions buggy, apparently.
- Added SaveTo option in Adie text editor.
- FXText and FXTextField cursor blink fix; don't blink while moving (so user doesn't lose track of where it is!).
- When multi-file mode in FXFileSelector, enquote files only when needed; and escape quotes and backslashes if they appear.
- FXFileSelector now returns filenames as typed into the box in all modes, including multi-file mode.
- Now allow relative search paths in Adie file search paths. This means you can list places to look for files in your project directory subtree, regardless of where the project subtree is referenced from; for example, "../include:../lib" will let you open a file from "../include" when you're in "lib", and vice-versa.
- FXFileList properly hops back to original directory when dragging over directories.
- Major speedup in FXIconList lasso-selection mode. Much, much faster when lassoing items in very large folders.
- FXFileSelector's getFilename() returns first of many, if box contains multiple names.
- FXFileSelector scans for first non-wildcard extension when substituting extensions when filter is changed.
- FXTreeList and FXFoldingList should issue SEL_EXPANDED message as side effect of makeItemVisible expanding a subtree.
- Missing setPattern(), getPattern() API's added for FXDirDialog and FXDirSelector.
- Added syntax pattern for hexadecimal floating point numbers.

December 3 - FOX DEVELOPMENT 1.7.57

- Use _InterlockedExchange() in FXSpinLock instead of non-inlined version.
- Emulation code added for atomicBoolDCas(() if no built-in version available.
- Some bug fixes in FXXML parser.
- Check for decode error in XML parser.
- Encode non-ascii string in FXURL.
- Return original user-data pointer in addTimeout() and addDeadline(), addChore(), and removeChore(). This allows one to delete user-objects that may be referenced by those callbacks.
- Added non-wrap mode as output format in reswrap.
- Split off OpenGL objects from FOX library placed into separate glviewer subdirectory.
- Use nanosecond-accurate stat() output, if available, in FXStat.
- In FXText and FXTextField, can now use wide-character delimiters.
- Only escape left and right quotes in FXString escape() if non-zero.
- Fixed a problem in FXSpinner and FXRealSpinner.
- Factory function on abstract classes (FXIMPLEMENT_ABSTRACT) now yields NULL object instead of cratering program.
- FXApp runWhileEvents(() blocks for just a little bit, allowing for roundtrip in case last commands caused events.
- Removed FXFile::rename() and FXDir::rename() in favor of FXFile::move().
- Some improvements to PathFinder file manager.
- Disallow assignment to FXObjectListOf and FXPtrListOf from rvalues not type-compatible with lvalue.
- Added peek() API to FXPtrQueue.
- Namespace prefix needed in FXIMPLEMENT_ABSTRACT macro.
- In FXDirVisitor, check both file index (inode number) and volume id, as file indexes may be same on different volumes.
- In FXDirVisitor, drastically reduce number of system-calls by passing FXStat results when recursing.
- Fixes to selection-tracking variables in PathFinder.
- Improvements in fxscanf.cpp scanning digit groupings; not perfect yet however.
- Added API in FXDirVisitor to allow access to FXStat result while in callback; this can further reduce system calls.
- Some corner cases in FXPath::absolute() fixed.
- Bug fixes in FXFile::copy().
- Updates to Adie.stx default language syntax file.
- Compiler warning fixes.

December 3 - FOX STABLE 1.6.53

- Fixed typo in FXString::vformat.cpp.

May 23 - FOX DEVELOPMENT 1.7.56

- Removed quoted string length limitation in XML parser.
- Removed comment length limitation in XML parser.
- Pass all text of processing instruction in one single callback from XML parser.
- XML declaration now only recognized if followed by whitespace.
- Updated Visual Studio 2008 project files to add enable intrinsics flags. This was causing problems compiling FXAtomic file.
- In FXAtomic, favor inlined x86 or x86-64 assembly over GCC builtins, due to spotty implementation of these primitives.
- Quoted string in XML could have newlines or blanks; adjusted parsing routine to not lose track of line and column numbers while parsing over strings.

May 20 - FOX DEVELOPMENT 1.7.55

- Added XML Parser capability. This is a SAX parser, which generates callbacks for each XML element encountered. There are two new classes, FXXML which is the core parser class, and FXXMLFile which parses files or inputs from devices. The FXXML class may also be used to parse from memory buffers.
- FXWSQueue implements a work-stealing queue. A Work-Stealing queue supports a single thread adding or removing jobs from the front end, and multiple threads removing jobs from the backend.
- PathFinder now has new ways to select files quickly: by means of wild-card patterns. The new selection method is based on the list of file-patterns available from the normal filter drop-down box (which may be configured from the Settings Panel). It can be invoked from Edit/Select Files menu.
- New fxmath function fclamp() added; usually, this is implemented in terms of fmax() and fmin() which are branch-free on many machines.
- Using new Math functions in most places inside library itself.
- Added line to box (2D) functions to FXExtent.
- FXText shows block-cursor when in overstrike mode.
- Fix in case clearElms() is used with volatile pointers.
- More work done on FXDispatcher.
- Dont add accelerators for strings on Bookmarks menu in Adie editor.
- Escape & in FXRecentFiles to avoid accidentally installing accelerator.
- Fix index type in FXGLObject.
- Added new classes for generic callback infrastructure, FXCallback. To support older compilers, the current implementation does not yet use varyadic templates (maybe at some future time, it will). The new FXCallback mechanisms are already in use in FXXML and will soon be used in FXDispacher as well.
- Some bug fixes in FXJSON.
- Missing va_end() fixed in fxprintf() and fxcanf(). Not serious on most compilers, however.
- Updated syntax patterns for Adie editor.
- In fxscanf(), a %n does NOT increase return count.
- Thousands grouping in fxprintf().
- FXVariant (and other collection classes) indexed with FXival instead of FXint. Allowing for 64-bit very large data structures.
- More convenience APIs added to FXVariant.
- FXVec4d and FXVec4f: lerp in two fma's when compiled with AVX2 and FMA (nice trick!).
- Rare out-of-bounds memory read fixed in FXText.
- Renamed clashing math functions in fxmath.h; isnan(), etc. renamed to fpNan(), etc. Problem was these functions were sometimes macros on some operating systems; new ones are good C++ inside Math namespace. No other clashes have been reported so far.
- When going up one directory-level in PathFinder, select recent directory. Thus, keyboard directory navigation is greatly improved.
- File Dialog widgets also improved as above. This is a major keyboard navigation improvement.
- Added memory fence APIs to FXAtomic. Needed for lock-free programming paradigms.
- Byte swap stuff in fxendian.h.

March 15 - FOX STABLE 1.6.51

- Small fixes for 64-bit casts in dctest.cpp (compiler warning issues).
- JPEG image I/O color spaces handled better.
- FXApp input callback message ID for SEL_IO_EXCEPT was wrong.
- Change in how FXStat determines if a file is an executable (Windows).

January 6 - FOX DEVELOPMENT 1.7.54

- New namespace Math collects most math library calls in C++ namespace; also on Windows, implements missing math functions where needed. This includes single-precision math functions, and thus old macros for these have been removed.
- Help-file in Adie now regenerated during build from plain-text source.
- Block-cursor in FXText when in overstrike mode.
- Join-lines operation added to Adie.
- Removed deprecated API's from FXComplexd and FXComplexf.
- Updated VC++ project files.
- Handle NaN and Inf on floating point string input (fxstrtod).
- FXPath::isHidden() should work on Windows.
- Warnings in fxstrtoll() and fxstrtoull() fixed.
- Added at() API's to FXVariant, like FXDictionary and FXArray have (syntactical convenience).
- Use FXival for FXVariant which allows large sizes on 64-bit machines.

November 24 - FOX DEVELOPMENT 1.7.53

- FXFontDialog initialized to sensible size when first-ran.
- FXPath::match() algorithm major correctness improvements for nested patterns, and better error detection for broken patterns.
- Fixed some layout issues in PathFinder when choosing large fonts, menubar icons were not centered vertically.
- Dialog to search files for regular expression in Adie now fully functional.
- Invalidated bookmark locations could cause trouble when bookmark menu popped up; now fixed.
- Some functions refactored in Adie.
- Minor problem in groupbox example application fixed.
- Added facility to change scroll bar width in ControlPanel.
- Added checkbutton to search only for first occurrence of pattern in file in FindInFiles dialog.
- Pass base directory of search to FindInFiles visitor so we can relativize paths to it when recording search matches.
- Zero array in FXIcon to shut up valgrind.
- FXComplexf and FXComplexd APIs more compatible to standard C++ library: added norm(), abs(), arg(), exp(), log(), and conj(). The old names conjugate(), logarithm() and exponent() will probably be deprecated.
- Some improvements to Adie's incremental search capability.
- FXDirVisitor recursion limit added.
- FXDirVisitor now has skip as well as early-out return mode.
- Included paper reference motivating FXRandom shift-xor counts changes.
- Change file mode improvement in PathFinder.
- FXPath::isValidPath() API added.
- Some fixes to PathFinder directory handling.
- Expand environment variables when switching directories in PathFinder.
- Some compiler warnings fixed.
- FXThread priority issue fixed.
- FXSettings parser issues fixed.
- Incremental search history now being saved in Adie.
- Backward search issue fixed in Adie.
- Search and Replace Dialog fixes.

July 1 - FOX DEVELOPMENT 1.7.52

- Squeeze out useless instruction from fxgetticks().
- Add adopt() of FXVariantArray API to FXVariant.
- Fixes in Adie syntax parser.
- Problem in FXIODevice fixed.
- CMYK color conversion in JPEG image support fixed.
- Improved FXRandom implementation.
- Escape key to close dialogs now handled via FXAccelTable instead of hard-wired.
- FXReplaceDialog search history implementation improvement.
- Improvements to FXDirVisitor, and added early-out option.
- Fix Adie text editor core-dumping issue with backward searches.
- FXPath::match implementation improvements; more to come.
- Added return codes to FXIO, FXIODevice.
- Added setMode() API to FXIO, FXIODevice.
- Early-out in dictionary classes.
- Improved speed of failed search in dictionary classes.
- Better docs on FXExpression.
- Execute shell commands feature added to Adie.
- Scrolling Syntax menu in Adie; list of supported languages getting too big.
- Added some protection to FXMessageChannel.

March 15 - FOX DEVELOPMENT 1.7.51

- Syntax-colors in Adie can now be language-specific. Language families like C/C++/C#/Java share common syntax-colors.
- Syntax-colors in Adie now have initial (default) foreground color value in Adie.stx file. End-user can change, however.
- Fixed syntax-file parser in Adie: token hash incorrectly calculated.
- Fixed uninitialized value issue in FXFileSelector, flagged by Valgrind.
- Use thread-safe time functions on Windows, when available.
- Fixed potential endless loop in FXText::findText().
- Some fixes for VS2008.
- Removed deprecated FXMutexLock in favor of FXScopedMutex.
- Many standard clipboard types pre-registered now.
- Charset conversions moved into FXWindow getDNDData(), setDNDData(). UTF8, UTF16, and ASCII support, for FXString.
- Off-by-one error fixed in fxscanf() when scanning character-sets.
- Template FXHashOf added.
- New class FXDispatcher being implemented (experimental).
- Insertion of command output into Adie text buffer is now undo-able.
- Log-window added to Adie; pops up when executing command outputs to stderr.
- Implement Larsson, Moeller, Lengyel sphere-box overlap algorithm; use branch-free fmax, fmin, fmaxf, fminf where possible.
- Fix warning in fxendian.h.
- Added encode/decode URL feature to Adie.
- Equality operator in FXVariant has been removed.
- Inherit handle option works on Windows.
- Added return codes to FXIO, FXIODevice.
- Added setMode() API to FXIO, FXIODevice.
- Early-out in dictionary classes.
- Improved speed of failed search in dictionary classes.
- Better docs on FXExpression.
- Execute shell commands feature added to Adie.
- Scrolling Syntax menu in Adie; list of supported languages getting too big.
- Added some protection to FXMessageChannel.

November 10 - FOX DEVELOPMENT 1.7.50

- Major changes in the regular expression engine. New API amatch() for anchored match, and new API search which replaces match(). More sensible parameter order and moved some flags from run-time to compile time.
- Internals of FXRex are now ready for UTF8 matching; however parsing part will need to follow before these new capabilities can be put to use.
- FXRex::substitute() now interprets the usual escape sequences when creating replacement pattern from regular expression match captures.
- Speedup in FXText getByte(), getChar(), etc. by introduction of branch-free handling of gapped-buffer accesses.
- Moved hard-wired search and replace dialogs out of FXText and into Adie text editor; this is part of the FXText widget slim-down program.
- Adie text editor search and replace improvements. Basically, stream-lines mouse-free usability.
- Adie incremental search bar now pops up at bottom of window. This is much less disruptive as text does not get "pushed down" when this toolbar pops up.
- The FXHash find() routine now returns the slot index, or -1 if not found. If you use FXHash you should be aware that simply replacing find() by at() will fix your code to the new system. This was done based on request from a user who noted the find() API in FXHash behaved differently from the find() in FXDictionary.
- Strip leading and trailing space from display in Adie's bookmark menu.
- Added ParallelMax constant declaration for FXParallelFor.
- Change to FXText findText() API. The new version can perform not only forward and backward search, but also anchored match. The anchored match is performed if neither SEARCH_FORWARD or SEARCH_BACKWARD flags are passed.
- Goto Line dialog moved from FXText to Adie text editor proper (also part of FXText widget slimdown program).
- Adie Replace Dialog now has Search button.
- Adie Replace Dialog Replace function now first checks if current highlighted text is the one being searched for, and only searches further if it isn't. This logic will therefore replace already highlighted selection, and make it less likely you accidentally "skip" the first item in a search-and-replace session.
- Also, Search and Replace dialogs stay up until explicitly closed. It was often the case that the first search is not always the desired one, and one had to bring up the dialog a second time. Note that Escape hides the dialog, so no mouse interaction is required for "Power Users".
- Search and Replace dialog can now replace within selected text only.
- Some language pattern updates in Adie syntax coloring file.
- CMake coloring patterns added to syntax file.
- New match modes added to FXRex: Exact, and NotEmpty. The Exact mode succeeds only if a successful match eats the entire string. The NotEmpty mode succeeds only if the match eats at least one character. Note these are compile time flags, and implemented through special asserts in the matching engine. Thus, the engine will potentially backtrack earlier matches to try other possibilities!
- Regular expression match engine speeded up by streamlining matcher-setup internally; this particularly affects search().
- Fixed bug in FXHash::at().
- Eliminated recursion in simple possessive match in FXRex.
- Added handy isNull(), isBool(), etc. APIs to FXVariant.
- Made selection-changing APIs virtual in FXText, for subclassing.

July 29 - FOX DEVELOPMENT 1.7.49

- Major API changes to FXThreadPool: mostly, much more sane implementation, and optional FXCompletion parameter passed to perform wait on subset of tasks; see FXCompletion notes below.
- Added FXCompletion synchronization object. FXCompletion is now used in FXTaskGroup, FXThreadPool, but can also be used in your own programs whenever one thread needs to await the completion of multiple worker threads.
- Fixed bug in FXJSON parser: properly stop parsing at offending character.
- Byte order mark handling fix in FXJSON parser.
- Added toChars() API to FXVariant; it returns empty string unless variant is of type string. This is very similar to asChars(), except that toChars() is safe (always returns a non-NULL pointer).
- Renamed toPointer() to toPtr() in FXVariant for consistency.
- FXParallel implementation changes: don't kick off tasks via FXThreadPool in ParallelFor if there's only one task. Also, split ParallelFor into a number of pieces corresponding to the number of threads available in the FXThreadPool, unless this number is passed explicitly.
- Ensured FXParallelForFunctor's are aligned in ParallelFor.
- Updated VC++ 2008 Visual Studio project files.

July 6 - FOX DEVELOPMENT 1.7.48

- Added verbose option to reswrap.
- Updated BMP loader routines, some bullet-proofing against malicious bitmap files.
- Changes in FXVariant: operator bool returns true for non-zero numerical values, non-empty arrays or non-empty dictionaries. It only returns false if the variant is FXVariant::null. This new interpretation strokes much better with common usage patterns.
- Added asChars() API to FXVariant.
- FXPtrList now index with FXival.
- Print routines fxprintf() are now supporting NaN and Inf printouts. Also fixed -0 printout.
- Change in FXThreadPool::wait() routine: now waits till all jobs are finished.
- Added executeAndWait() routine to FXThreadPool and FXTaskGroup.
- Small change in FXParallel: ensure tasks are aligned in memory.
- Added FXEXEIcon and FXEXEImage. These should icons or bitmaps embedded in Windows Executable files.
- Added FXCOLORREF2RGB and FXRGB2COLORREF macros for Windows based FOX applications.
- Some complex math transcendentals added.
- Population-count inline functions added to fxendian.h. These use x86 builtins when possible.
- API fixes (bad parameter signatures) fixed in the list-widgets.
- CDECL attributes in some FXApp member functions (Windows Only).

May 19 - FOX DEVELOPMENT 1.7.47

- Project files updated to Visual Studio 2008.
- Much faster file dialog due to using file extension and PATHEXT for executable status.
- PathFinder lists files about to be deleted.
- New API's to list widgets for much more convenient way to populate with fixed lists of items.
- New selectAll() API added to list widgets.
- Updated syntax coloring file Adie.stx with FORTRAN syntax coloring.
- IMAGE_ALPHAGUESS used when loading BMP icons in FXIconSource.
- Added APIs filesToURIList() and filesFromURIList() in FXURL namespace.
- Bug fix in FXStringDictionary.
- Bug fixes in FXThreadPool.
- Replaced preprocessor MAYBE with enum maybe.
- Message map search improvement using branch probability macro and test-order.
- TIFF image loader improvements.
- FXString::format() now knows about thousands separator option for printing floating point.
- Bugs fixed in IRIS RGB image support.
- FXObjectListOf::adopt() argument should not have been declared const.
- Suggested file extension changes automatically ONLY when picking existing file.
- New hasExecExtension() API added to FXPath (Windows specific).
- Integer overflow fixed in FXApp having to do with click speed interval.
- New API getExecExtensions() added in FXSystem (Windows specific).
- If pipe2() system call not available, try set file descriptor flags with fcntl() instead.

January 29 - FOX DEVELOPMENT 1.7.46

- FXIconSource now can use icon/image contents to detect file format type [the stream must be seekable].
- A default FXIconSource implementation in FOX will be used to load icons if not overloaded by a user-extended one explicitly.
- Replaced FXIconDict with FXIconCache.
- Replaced FXFileDict with FXFileAssociations. The new implementation uses FXDictionary, and the new FXIconCache.
- Fixed problem in FXDictionary: object pointed to by data is itself not const. This affects const-accessors.
- Fixed bug in Adie: dumping core when started with unknown commandline parameter.
- Expunged FXDict and its subclasses. Now replaced with new implementations, see above.
- FXFileList now has explicit pointer to FXIconSource, for image preview purposes.
- Changed things around for FXFileAssociations to be more easily subclassable.
- In FXIconCache, don't add to the hash table until loading was successful.
- PathFinder icon previewing improved, more options for sizing.
- PathFinder custom iconpath wasn't being saved.
- In FXFileAssociations, don't add extension-association unless associated extension data from registry is fully and properly parsed.
- Fixed compile problem in FXPipe.

December 17 - FOX DEVELOPMENT 1.7.45

- FXJSONFile class added. Base class FXJSON improved and generalized.
- FXIO now tracks file position; new implementation of FXIO counts bytes read/written.
- FXPipe API's added, should now be functional.
- Renamed FXStringMap to FXStringDictionary for consistency.
- Fixed a few problems in FXVariantMap, FXDictionary.
- Fixed possible race in FXThreadPool::startWorker.
- New FXThreadException class added; FXThreadException will cause graceful early termination of a thread when thrown inside of FXThread.
- FXThread now interceps only FXException (and subclasses), rethrows other exceptions. This was necessary due to the way GNU C++ library performs thread exits.
- Non FOX exceptions thrown inside FXThread are now rethrown; but attempts are made to maintain proper bookkeeping when unrolling the stack.
- FXThreadPool tasks may throw exceptions. FXThreadPool now intercepts all FOX exceptions and updates bookkeeping when other exceptions are thrown. Note: tasks in FXThreadPool are executed by threads, but since sometimes the main thread is executing tasks in FXThreadPool also we can not allow tasks to throw FXThreadException.
- Exceptions thrown inside FXWorker now terminate the worker, and reclaim worker's thread and memory. Before exceptions were all caught, making it impossible to pass return codes from worker execution.
- Exceptions thrown in FXTaskGroup::Task correctly reclaim the FXTaskGroup::Task now, and will update completion count and notifications appropriately.
- The exception philosophy in FOX is that the library only manages FXExceptions and their subclasses; other exceptions will be either uncaught or caught and rethrown after bookkeeping updates; thus programs should be careful throwing exceptions other than FXExceptions.

December 5 - FOX DEVELOPMENT 1.7.44

- Updated FXJSON JavaScript Object Notation I/O class:- removed limits to token size in both input and output operations (formerly limited to buffer size).
- Minor changes to FXVariant:- added some missing API's, removed toChar() as its useless. Added has() to determine if key is present in case FXVariant is a map.
- Simplified FXFile and other FXIO subclasses a bit to remove redundant implementations.
- Added FXIOBuffer, an FXIO device that serializes to/from a memory buffer.
- FXRanged, FXRangef: now check intersect() results a bit differently.
- Ray to FXSpheref, FXSphered intersection test changed to allow origin inside sphere possibility.
- Fixed small bug in wc2nc().
- Possible buffer overrun in FXDir fixed.
- Added class FXStringMap.
- Changed some API's in FXDictionary. Added erase() API to allow removal of slot already located. This is faster, and needed for successful subclassing.
- FXStat problem fixed on Windows.

October 24 - FOX DEVELOPMENT 1.7.43

- Added FXJSON JavaScript Object Notation I/O class. FXJSON loads and saves JSON, and has a great number of options, extensive error reporting, and great degree of control over output.
- Problems in Windows version of fxcpuid.cpp fixed.
- Line segment to box and line segment to sphere intersection routines added; also computes intersection point..
- FXString escape() and unescape() now do \uXXXX unicode escaping. Old functions for these, fromAscii() and toAscii() have been removed. The new implementation properly handles surrogate pairs.
- Added some API's to FXGLGroup.
- FXListBox current item fix.
- Added new functions to FXElement.h. Particularly, bulk-comparison function.
- Use new fxstrlcpy() and fxstrlcat() where appropriate; these will always produce null-terminated strings.
- Passed wrong handle for error FD in FXProcess under Windows.
- Fix introduced bugs in FXHash and FXDict.
- Some extra checks added in GIF loader header detection.
- Typo fix in lock-free queue class FXLFQueue.
- Fast accessors added to FXVariant; they can be used if type already known.
- Fixed minor issues with FXVariant implementation.
- Missing FXAPI declaration in FXArrayBase added.
- Added area() and volume() calculation to FXRange and FXSphere classes; added area() to FXExtent classes.
- Added new FXDictionary class; this will replace FXDict at some point in the future.

September 15 - FOX DEVELOPMENT 1.7.42

- Added class FXVariant, and supporting classes FXVariantMap and FXVariantArray. The FXVariant class can store basic types like bool, int, or float, but also arrays of variants, or maps of variants. Thus, FXVariant can be used to store an arbitrarily complex tree-like data structure.
- Problems in Windows version of fxcpuid.cpp fixed.
- Fix cased from (__m128) to _mm_castsi128_ps() intrinsic for portability.
- Fix compare operation in FXSize.h.
- Added fxstrlcpy() and fxstrlcat() for safe string copy and string concatenation.
- Added __noreturn macro for flagging non-returning functions like fxerror(). This may help compilers generate better code for places where these functions are called.
- Removed fxsleep(), obsoleted by FXThread::sleep() and FXThread::wkaeat().
- Allow out-of-source builds of FOX on configure-based systems.
- Force end-of-string in value returned by gethostname().
- Fix introduced bugs in FXHash and FXDict.
- Added swapElms() to FXElement.h. Also added templated swap().
- Added internal function memswap().
- Don't include intrinsics header files unless target architecture is x86 or x86-64.
- Updated build on Fedora 18 for Raspberry Pi.

August 27 - FOX DEVELOPMENT 1.7.41

- Many changes to Matrix classes for AVX and SSE.
- FXHash hash-table improvements.
- FXHash, FXPtrList needlessly had virtual destructors.
- API's equalElms() added to FXElement.h.
- Problems with initial list fixed in FXFileList and FXDirList.
- Dropped default parameter value for FXString::mid() API.
- Signed/unsigned warning issues fixed in FXArray.h.
- FXArray and FXHash now use FXival to allow truly large arrays and dictionaries.
- Fixed some warnings compiling synchronization classes.
- Use FXuval for fxmalloc() and ilk.
- Minor additional tweaks to CPU identification.
- FXRefPtr moved into the Atomic Age:- use atomic swap when changing pointer value.
- Add overloads for long, unsigned long in FXElement.h.
- FXArray now consists of single (never NULL) pointer, same as FXString. This means FXArray takes up only a pointer's worth of space when empty.
- Sign-extend macro added to fxdefs.h.

July 18 - FOX DEVELOPMENT 1.7.40

- Updated fxcpuid() with AVX, AVX2, FMA, XOP, etc. detection.
- Updated tables for fxascii.cpp.
- Added various macros for memory alignment in fxdefs.h.
- Added API's to FXTreeList and FXFoldingList to replace one item with custom item.
- Added API to return processor index of calling thread in FXThread.
- Bounds check in FXTabBook's setCurrent().
- Added isAccessible API to FXStat.
- Added API to rotate vector by quaternion to FXQuatd, FXQuatf.
- Check valid path in FXPath.
- FXFileList Drag and Drop now enabled.
- Improvements to File Open Dialog right-click menu.
- Add ability to remove as well as add directory bookmarks in File Open Dialogs.
- AVX capabilities added to matrix and vector classes (if compiled with avx intrinsics).
- FXThread sleep() function reverts to sleep if interrupted by signal.
- 4x4 Double matrix transpose using AVX permute intrinsic.
- Check UTIME_OMIT before using utimensat().
- Updates to PathFinder file manager.
- Check for NULL name in FXMetaClass hash table additions.
- Added isBinDigit() and isOctDigit() to Ascii character class functions.

May 12 - FOX DEVELOPMENT 1.7.39

- Small changes to return types in FXIO (and subclasses) for flush(), eof().
- FXSemaphore implemented in terms of mutex and condition on MacOSX and Minix.
- FXMat4d and FXMat2d AVX accelerated when compiled for AVX.
- ADA programming language patterns added to Adie's syntax file.
- Fix in PathFinder escapement of filenames prior to spawning process to open document.
- Compile-time check improved before implementing call to utimensat() in FXStat.

April 7 - FOX STABLE 1.6.49

- Check index out of bounds in FXTabBook::setCurrent().

April 7 - FOX STABLE 1.6.48

- Patches 64-bit Windows MING-W64.

March 23 - FOX DEVELOPMENT 1.7.38

- Totally revamped implementation of FXThreadPool. The new FXThreadPool is organized about a lock-free queue, with semaphores managing synchronization between producer- and worker-threads. Thus, threads never block unless two edge conditions are reached: either the task-queue is empty, in which case worker threads will block (nothing to do), or task queue is filled up, and producer thread will block (no room in queue).
  An important new capability is for an additional thread to enter into the task-processing loop temporarily. Finally, the thread starting FXThreadPool, as well as the worker threads belonging to the FXThreadPool now have a thread-local variable referencing the FXThreadPool. This allows the threads involved to locate the address of the FXThreadPool, for instance to create an FXTaskGroup.
- New FXTaskGroup class manages groups of task to be executed in parallel on a FXThreadPool. Tasks started through the FXTaskGroup interface are guaranteed to be completed within the lifetime of the FXTaskGroup instance.
- New FXParallelInvoke and FXParallelFor template functions to implement parallel function call, and parallel for loop. This uses the new FXTaskGroup, and indirectly, FXThreadPool.
- Pass optional stacksize when constructing FXWorker. Added stacksize option to FXThreadPool with which new workers will be started.
- FXBarrier wait primitive now sports API's to change break-through threshold, and forced-release option.
- FXSemaphore now has API's for timed wait, and try-wait for non-blocking semaphore decrement.
- Added additional atomic variable types in FXAtomic.h.
- Added check for maximum dash-pattern length in FXDC and FXDCWindow.
- Fixed some issues with FXStat of files.
- Off-by-one error fixed in FXRex counted repeat of complex subpatterns.
- Clear internal text pointers in FXRex prior to a match.
- Added a few missing print-patterns to Adie.stx syntax file.
- Added FXSemaphore-protected queue class FXSemaQueue; this is itself a wrapper around FXPtrQueue.
- Added lock-free queue class FXLFQueue.
- Numeric conversion issues fixed in fxstrtod.cpp; in particular, some corner cases now give more accurate results.
- The function fxscanf.cpp does no longer eat the "e" when scanning for a number, unless actually followed by digits.
- Switch to statvfs() from statfs() in FXStat.
- Indexing operator added to FXAutoPtr.
- Added new class FXScopedThread. FXScopedThread automatically performs a join() upon destruction.

November 14 - FOX DEVELOPMENT 1.7.37

- Added auto-numbering in FXHeader.
- Added alpha-numbering in FXHeader.
- Fixes to FXProcess implementation on Windows.
- Fixed aligned to unaligned store in FXMat2f SSE implementation.
- Slightly stricter TGA header recognition.
- Removed FXSemaphore value() API. Never used, and not really useful.
- FXRecentFiles allows for up to 32 entries; still defaults to 10, however.
- Fix in Windows non-UNICODE implementation of FXStat created(), accessed(), and modified() API's.
- Added API's to FXWorker class.
- Added API to FXPtrQueue class.
- FXPath::contract() should only replace whole path-components.
- Prototype of wndproc() was not correct for 64-bit Windows.

November 14 - FOX STABLE 1.6.47

- Prototype of wndproc() was not correct for 64-bit Windows.

August 23 - FOX DEVELOPMENT 1.7.36

- FXPath::match is now UTF-8 aware in matching filenames.
- Keep directories up front in FXFileList.
- FXTable API additions for spanning cells.
- FXTable fixes to issue only single callback for spanning cells if multiple columns/rows fall in selection rectangle.
- Added GO Language support for Adie Text Editor.
- Added TENA .tdl Language support for Adie Text Editor.
- Switch to C++ casts in certain places kills of const cast warnings.
- The fox-config file for FOX project development has been re-instated.

July 24 - FOX DEVELOPMENT 1.7.35

- New feature in FXHeader control: auto-renumbering captions based on renumbering function; if a renumbering function (which computes the caption from the caption index) is set, then captions are automatically recomputed when the number of items in the FXHeader is changed.
- Updated FXTable to use this new feature in FXHeader. The old options for renumbering have been removed.
- Porting problem in FXMat4d, FXMat4f fixed, for CYGWIN32.
- Added API's to FXTable to return first and last row (or column) of a spanning cell.
- Added API to check if a cell is horizontally spanning or vertically spanning.
- Cutoff angles in FXQuatd are smaller than in FXQuatf, due to much greater precision of doubles versus floats.
- FOX on Raspberry Pi coming soon (I got one on order!).

July 12 - FOX DEVELOPMENT 1.7.34

- Added FXRandom fast, long-period, thread-safe psuedo-random number generator.
- Gamma-corrected image scaling option added.
- FXPath::relative() corner-cases fixed.
- FXPath::isHidden() now faster by scanning backward.
- Adie syntax highlight algorithm had some possible issues. Now expand context when incrementally recoloring.
- Include glext.h on Windows; missing symbol otherwise.
- Updated list of C++ keywords in Adie.stx style coloring file.
- Added enable/disable item API's to FXComboBox, FXListBox, FXTreeListBox.
- Added expression evaluate feature to Adie text editor.
- Internal anynymous name spaces introduced in FXExpression and FXRex due to symbol clashes on some compilers.
- Added ?: alternative expression to FXExpression.
- Array indexing problem fixed in FXFont.
- Typo fixed in FXAtomic.cpp.

July 11 - FOX STABLE 1.6.46

- Small tweak to FXIcon's guessthresh(), thanks to Fanglin.

April 27 - FOX DEVELOPMENT 1.7.33

- Issue with Windows7 OpenGL pixel format supporting composition is weighted heavier, thus picking composition mode preferentially. This makes it less likely that the visual will match non-Aero capable pixel formats.
- Fixed TIFF image save/load.
- Fixed quaternion arc() for vectors that are 180 degrees apart.
- Some tweaks in FXAtomic: more optimal code for non-PIC compiles; also, check for PIE (position independent executable).
- Fixed problem in FXRex regarding non-ASCII characters.
- Repaired some broken syntax patterns in Adie.stx syntax file.
- SSE-ified lerp() API added to vector classes.
- Fixed SSE unaligned store problem in FXMat4d; exhibited itself on 32-bit systems.
- Setjmp()/longjmp() issue fixed in fxpngio.cpp.
- Operator FXbool in FXAutoPtr and FXRefPtr interfered with comparison operators; removed it.
- Added API's to FXMat4 classes.
- Added serialization capability to FXExpression class.

April 27 - FOX STABLE 1.6.45

- Fixed quaternion arc() routine. In case of vectors that are (almost) 180 degrees apart, the wrong quaternion was returned.
- Issue with Windows7 OpenGL pixel format supporting composition is weighted heavier, thus picking composition mode preferentially. This makes it less likely that the visual will match non-Aero capable pixel formats.
- Invalid handle issue fixed in FXWindow.
- Backported FXPath shell escaping routine.

January 3 - FOX DEVELOPMENT 1.7.32

- New FXWEBPIcon and FXWEBPImage image support classes; this requires libwebp from google.
- Some changes and speedups in FXHash implementation.
- Define cpu_set_t for FreeBSD.
- Undefine VOID if defined (Windows thing).
- Removed copy constructor and assignment operator for FXDict; was never correct anyway, and its not used.
- Issue with FXMenuCheck and FXMenuRadio reimplementing ID_SETVALUE with a boolean argument, whereas baseclass implements ID_SETVALUE with string (since there is no check) This caused some breakage in apps.
- Scrolling widgets like FXIconList no longer do makeItemVisible if user clicks on item:- this was disconcerting and unnecessary; if you can click on it, then you must have been able to see it!
- Fixed few issues with incremental search bar visibility.

December 12 - FOX DEVELOPMENT 1.7.31

- Adie text editor Incremental Search Capability implemented.
- Started on WebP image I/O support.
- Problem in FXTable clipboard copy/cut operation fixed.
- Fixes in FXAtomic for VC++.
- Default value in FXURL url parser.
- Fixed bounded repeat bug in FXRex.
- Patch for FreeBSD processor affinity mask.
- Fixed case-insensitive FXString comparecase() routine for UTF8.
- Fixed potential issue using FXRex on non-x86 machines.
- Major FXRex regular expression engine overhaul and bug fixes.
- Startup of Adie editor now more sensible (thanks to Sander's manu suggestions); start with initial directory set properly and properly located untitled file.
- FXDirList's setCurrentFile() improved.
- Improvements in FXFileList and FXFileSelector; all and all removed many unnecessary directory parses, with concomitant speedups of the FXFileDialog panel.
- Bookmarks popup menu in Adie text editor.
- New Ctl-K keybinding clears current text line in FXTextField and FXText.
- FXDirSelector cleaned up a little.
- FXArrowButton made ever so slightly smaller/more distinguished.
- Ability to set style flags in Adie syntax color setup subpanel.
- Updated Adit text editor syntax style setup subpanel.
- FXColorWell no longer grabs primary selection (was awkward to use!).
- FXColorWell looks improvement: focus rectangle now inside well, well observes frame style now, so you may need to update your code unless default parameters were used.
- API's added to FXColors: blendOver(), blendOverBlac(), blendOverWhite() added.
- Fixes and improvements to SyntaxParser in Adie.

October 18 - FOX DEVELOPMENT 1.7.30

- Vastly expanded code docs for FXText widget.
- Improved Syntax parser for Adie text editor.
- FXFileList now issues proper callbacks when files or directories are changed on the disk while FXFileList is displaying them.
- FXFileSelector puts FXFileList into ICONLIST_SINGLESELECT mode when SELECTFILE_ANY mode is in effect. This is as it should be since the user may type a filename that doesn't yet exist.
- Several unnecessary directory scans have been eliminated when FXFileDialog first appears. This makes the FXFileDialog much faster than it was before.
- Python syntax rules updated in Adie.stx.
- Added coloring rules for merge-conflicts for C, C++, and a few other languages to Adie.stx.
- Fixed bugs in Adie.stx now flagged by stricter syntax parser.
- Non-recursive forceRefresh() in FXWindow.
- FXIconList generates SEL_DELETED, SEL_INSERTED instead of SEL_REPLACED. These callbacks are more useful.
- PathFinder shows useful information in its status line.
- Can now change permissions of multiple files from PathFinder properties panel.
- PathFinder can now change file-associations and icon-assignments, just like ControlPanel. For now, these have effect only in PathFinder itself, but this should change in the future.
- Typo in FXComplexd fixed.
- Workarounds for disk stat for MacOSX and other non-Linux Unices.
- Fixed bug in FXMat3d SSE2 code. Was using aligned access.
- FXFileList and FXDirList items keep track of mode-bits. This actually simplifies stuff quite a bit.
- Useless directory rescan eliminated when sort-function changed in FXFilelist and FXDirList.
- Issue SEL_CHANGED if current item is replaced in FXIconList, FXList, etc.
- Adie remembers if extension-less file syntax was changed by hand; next time same file is loaded, syntax will be restored properly.
- First-time bug in ControlPanel fixed; rare, issue only occurs ControlPanel is ran first time and no registry exists yet on disk.
- Option added to PathFinder to scale image to available space when using internal image viewer.
- Vendor-key in FXApp's constructor now defaults to FXString::null. This is the more common usage pattern.
- Option added to PathFinder to control file-item space and whether or not to auto-size columns display.
- Bold, strikethrough, underline style flags now saved in Adie.
- New syntax rule option in Adie.stx: all-matching "background" rule. When used, you can colorize all text not matched with the regular rules, as override to the default colors used by the Adie editor.

September 9 - FOX DEVELOPMENT 1.7.29

- Updated to Unicode 6.0 tables! This is a massive change! Added Arabic Joing groups table.
- We now have a FOX Forum! Register and log in to post articles and converse with other FOX Users!
- Added flag to FXString's shouldEscape() and escape(). If set, escape utf8 strings, otherwise only escape control characters.
- FXStatusLine bug fix: order is (1) text from help source (widget under the cursor), (2) text from GUI update callback to its target, (3) fallback text value supplied by setNormalText().
- Fleshed out some missing API's in FXDirList, FXFileList.
- Small problem in SSE2 in FXMat4f fixed.
- File bindings setup panel in PathFinder added.
- FXWindow::forceRefresh() now non-recursive (faster, stack-friendly).
- Meaningful stuff displayed on status line in PathFinder.
- FXString typo fixed.
- Don't assume filename order is stable when listing directory contents (FXFileList, FXDirList).
- Suspect float to double promotions fixed (thanks to CLang++/LLVM compiler!).
- Fixed problem in FXFileList and FXDirList with dead symlinks.
- Signed byte type added (FXschar).
- Updated Python syntax coloring for Adie. Also added JavaScript syntax coloring.
- First-time use of FOX ControlPanel didn't work properly; fixed this problem.
- Updated and clarified doc-comments in FXThread.
- Removed operator FXbool from FXComplexd and FXComplexf.
- Fixed typo in FXComplexf and FXComplexd.
- Added byte-swap built-ins for Microsoft C++ compiler.
- Updated Doxygen scripts for reference documentation generation from header files.
- Fix small bug in FXThreadPool.

August 3 - FOX DEVELOPMENT 1.7.28

- FXConcurrent can be subclassed to create subclassed FXWorker threads.
- Portability issue in FXFileList fixed.
- Cleanups in FXGLVisual.
- Added processor-affinity API's for FXThread.
- Added __prefetch() macro to invoke underlying (GNU C++ only) cache-prefetch instruction.
- Added FXScopedReadLock and FXScopedWriteLock.
- Fix to FXAutoPtr assignment operator.

July 22 - FOX DEVELOPMENT 1.7.27

- New class FXProcess to manage child process creation in a platform-independent way.
- Split out FXThread into constituent files, one for each class (FXMutex, FXSemaphore, etc).
- Overstrike mode behaviour improved in FXText.
- New collection of functions to deal with utf8/utf16/utf32 conversions to replace the old ones. The new implementations are more strict in stream errors and overrun-safe. Due to dropping non-unicode code points they are also perhaps a bit faster.
- New macros for testing utf8, utf16 lead/follow properties.
- New fxendian.h header file for fast byte swapping primitives, on processors where this is supported.
- New macro FXLONG() to embed 64-bit integer constants in your code, in a way that survives various compilers.
- Added FXIO::Inheritable flag for i/o devices. By default file handles are not inheritable by child processes.
- Added new FXConcurrent class. This provides multi-threaded SIMD style concurrency. It is extremely efficient for recurrent tasks due to predictable task-to-thread assignments.
- Better method to force thread signal masks when starting new threads using FXThread.
- Some improvements in the enquoting algorithm for shell-safe commandline parameters on Windows.
- Issues in fxscanf() for parsing doubles fixed.
- API's added to determine free disk space.
- Some members of FXEvent were not initialized in the constructor.
- New intermediate class FXIODevice. This makes FXIO an purely abstract base class.
- New class FXWorker is a thread that runs a FXRunnable. This makes sense for FXConcurrent and FXThreadPool.
- Renamed FXMutexLock to FXScopedMutex; added FXScopedSpinLock as well. Old FXMutexLock still works, but is now deprecated.
- Fix to FXAutoPtr when using implicitly called constructors or conversion operators.

May 17 - FOX DEVELOPMENT 1.7.26

- Switched image format over to BGRA instead of RGBA. This is now preferred format on most common platforms (Linux, Windows, etc.). Plus, directly supported by current OpenGL hardware.
- Fixed ray-box intersection test in FXRangef / FXRanged.
- Updated Makefile's for Borland C++.
- Implemented additional cases in .DDS image loader.
- Fixed implementation of findWindowAt() on Win32.
- Added lerpdot() (angular rate quaternion) API to FXQuatd and FXQuatf.
- New functions added to FXSystem.
- Additions and changes to FXQuatd and FXQuatf.
- Warning fixes in FXThread.
- Changes to FXAtomic.
- ControlPanel application fixes.
- Collection of changes for MINIX port.

January 29 - FOX STABLE 1.6.43

- Added missing AC_FUNC_MMAP to configure.ac. Presence of mmap() and munmap() API's we not being discovered properly.

January 29 - FOX STABLE 1.6.42

- Fix for Vista/Windows 7 which favors PFD_SUPPORT_COMPOSITION for OpenGL pixel formats.
- Fix libpng version 1.5. Members of png_struct are now hidden, so fxpngio.cpp must use newly introduced API to use embedded jmp_buf.
- Fix configure.ac type which caused linkage to libGL and libGLU even if compiled without GL support.

November 23 - FOX DEVELOPMENT 1.7.25

- Change in configure.ac to check intrinsics header files with modified compiler flags; header files are not compilable with default options.
- Updated Borland C++ makefiles.
- Update Visual Studio 6 project files with missing headers.
- Small fixes in FXAutoPtr.h.
- Change some inlined API's of FXProgressDialog to non-inline.

November 18 - FOX DEVELOPMENT 1.7.24

- Added FXMat2f, FXMat2d.
- Vectorized many functions in FXMat2d, FXMat2f, FXMat3d, FXMat3f, FXMat4d, FXMat4f (using SSE/SSE2/SSE3).
- Some fixes to FXPath::isInside().
- Fix to drawImage() in FXDCPrint.
- Added FXPtrList.
- Add FXbool return value to some API's in FXArray.

October 5 - FOX DEVELOPMENT 1.7.23

- New API FXPath::relativize() returns shortest (unique) relative filename of file given a list of search directories and absolute filename.
- Added intrinsics includes to xincs.h (enabled on Linux/GCC only for now).
- Small layout changes to FXFontDialog.
- Added API's to FXFontDialog to allow user to work with font spec string instead of just FXFontDesc.
- Added API's to FXFont for picking apart font spec string components.
- Added some API's to FXFontDesc.
- Added FXPtrQueue class.
- SSE intrinsics now used (with appropriate compiler options) in FXMat4f (on x86-64 by default and optional on x86). Windows compilers may follow.
- Updated ControlPanel for new registry location; cleaned it up a bit as well.
- Due to crash bug in openjpeg library, JPEG2000 support temporarily turned off.
- Default value for mark in FXSettings parse() and parseFile() was changed to true. This is more user-friendly because this causes entries to be written back in unparse() and unparseFile() even if not changed.

September 25 - FOX DEVELOPMENT 1.7.22

- FXRegistry now uses the FreeDesktop.Org specification. Registry files are located in locations determined according to the specification, $XDG_CONFIG_DIRS and $XDG_CONFIG_DIR. Also, registry files have a file extension ".rc" or in ascii mode on Windows, ".ini". The common FOX applications settings file is now called "fox.rc" ("fox.ini" on Windows if ascii mode) to avoid possible clashes with other systems.
- FXApp::runWhileEvents() and FXApp::runModalWhileEvents() only use blocking time when waiting for first event; after first event, don't block if no further events but just fall out.
- Better FXString::upper() and FXString::lower() implementation.
- Major cleanup of xincs.h.
- Major performance improvements in FXThreadPool.
- Dispatch WM_COPYDATA from FXApp (Windows).
- Dump FOX version number in very first trace command.
- FXThreadPool::start() should not return until all started worker threads are ready.
- FXString throws FXMemoryException if out of RAM.
- Improved FXString::escape() and FXString::unescape().
- Updates to Adie syntax file.
- Atomic primitives for integer and pointer variables added; not inlined due to possible differences in compiler settings between user's own code and FOX library.
- Adie "Open Selected" parses out filename,line number, and also (new) column (accomodate change of GCC error/warning outputs).
- Compiled regexes in FXRex now use HALF the amount of memory.
- New subdivision modes for FX4Splitter: preferred FOURSPLITTER_VERTICAL or FOURSPLITTER_HORIZONTAL flags control which way sub-panes expand if not all four sub-panes are visible.
- Fixed issue with FXThread priorities.
- Atomic (possessive) sub-group matching implemented in FXRex.
- New fxcpuid.h header added to allow checking processor types (currently supported on x86 and x86-64 on GCC, LLVM, and Intel-C++ only).
- New FXISUTF8(), FXISUTF16() macros added; FXISUTF() removed.
- API wcvalid() checks for valid utf8, utf16 (wide character) character sequence.
- Updated and corrected FXURL implementation; code to handle legacy URLs for Windows.
- New API's for quaternion implementation FXQuatf and FXQuatd.
- Added IMAGE_THRESGUESS flag for FXIcon. When passed, it auto-detects the etched-in looking icon threshold value using new protected member function guessthresh(). This works very similarly to IMAGE_ALPHAGUESS and guesstransp(). New API's setThresholdValue() and getThresholdValue() allow direct setting of this value.
- API to get temporary directory improved in FXSystem::getTempDirectory().
- Use thread-safe versions for time and dates in FXDate and FXSystem, whenever possible.
- FXBarrier class added to FXThread.h.
- Added very fast affineInvert() and even faster rigidInvert() to FXMat4f and FXMat4d.
- NEW FOX compile option "--enable-native" will generate native code support for machine you're on. This is faster if FOX is compiled use on your own machine only.
- Added __threadlocal attribute macro to declare thread-local variables.
- Compiling FXThread on newer Windows versions allows usage of newer kernel facilities such as RWLOCK, CONDITION_VARIABLE.
- Fixed small bug in FXDict.
- Fixed FXToolBarShell issue with FXToolBarShell not hiding when its child does.
- Fixed bunch of warnings found under LLVM clang++ compiler.
- FOX time settings variables no longer with "ns" suffix; no longer needed since registry now in new location there's no conflict with old FOX registry files.

September 2 - Half Floats

- A reader kindly pointed out a porting issue in the generation of the half-float table generation. I have revised the function to generate the tables, and an updated version of my fast half float to float conversion paper may be found here: fasthalffloatconversion.pdf.
  Note that the tables in FOX 1.7 are still correct:- they were generated on a machine where the problem didn't manifest itself.

August 31 - FOX STABLE 1.6.40

- Fix FOX package-config file.
- FXSystem::getTempDirectory() now uses TMPDIR environment variable if set.

August 24 - FOX STABLE 1.6.38

- Auto-guess icon etch mask threshold added.
- Updated compilation scripts to new autoconfig.
- Removed XGetDefault from code in ControlPanel.cpp.
- Compile Adie with static lib on Windows.

December 12 - FOX DEVELOPMENT 1.7.21

- Added fastnormalize() API's in FXVec{2,3,4}f, which use SSE rsqrtss and one Newton-Raphson step for fast and quite accurate vector normalization.
- Added JPEG 2000 support (FXJP2Icon, FXJP2Image).
- Added soft-tab insert, force auto-indent and no-auto-indent character entry.
- Fixed cursor-overhang issue (off-by-one redraw).
- Fixed FXCondition::wait().
- Added a few convenience-API's in FXMat{3,4}{d,f}.
- Obtain number of processors improved.
- Some small fixes in FXRex.
- Faster fxrandom() implementation using Marsaglia's algorithm; its better as well!
- Fix issue in FXThreadPool waking threads.
- Variable amount of wait adding job to FXThreadPool.
- Fixed a few warnings.
- Fixes in FXFont rolled in.
- Outer product added in FXMat3{d,f} and FXMat4{d,f}.

November 11 - FOX STABLE 1.6.37

- Fixed remainingTimeout() returning ns, not ms remaining time.
- Fixed bug in parsing of accelerators.
- Fixed wrong enum value in FXComboBox.
- Backported FXTable fix from 1.7 (delete of selected lines).

August 18 - FOX DEVELOPMENT 1.7.20

- Use relative value for FXCondition::wait() instead.
- Totally rewritten FXTheadPool class.
- Default argument for FXHash::insert() and FXHash::replace() is NULL.
- Added get()/set() to FXAutoThreadStorageKey class.
- Small reorganization of source files; allows in-situ usage of library.
- Removed getCursorItem() API from list widgets. Was not working reliably anyway.
- Changed the way tooltips are obtained in list widgets. New onQueryTip() implementation calls getCursorPosition(() and uses getItemAt() to determine which item to get tip from.
- Added getToolTip() API to list items. Default implementation returns label, but its a virtual intended to be overloaded in subclassed list items.
- Fixed the FXColorDialog's custom color wells. They were not saved to registry before. Code was moved from FXColorSelector to FXColorDialog, which simplifies FXColorSelector for more easy customization.
- Sort colors in FXColorSelector. First cut of algorithm is reasonable, but needs improving.
- Converted to new automake tools.
- Converted FOX from CVS to GIT repository.
- Fixed ID_DELETE being used for different things. This meant ID_DELETE_CHAR is now used in FXText and FXTextField to delete a character.
- Moved ID_AUTOSCROLL from FXWindow to FXScrollArea, FXScrollBar, and FXTextField; these are the only places this is used.
- Added missing FXAPI declaration to FXRulerView.
- Added icon-owned option to FXHeader control.
- Fixed enum value in FXComboBox.
- FXFile need not be friend of FXStat.
- Dramatic speedups in FXHash and FXDict.
- Fixed FXTable delete of selected lines. Selection wasn't properly adjusted.
- Added some API's to FXObjectList.
- Added non-const accessor API's to FXArray and FXString.
- Documentation comments added to FXTabBar and FXTabBook.
- Fix in FXSettings; don't create section just because we want to delete a key.
- Safer behavior in FXDict.
- New look for FXProgressBar.
- Cleaner tear-down logic in FXApp.
- FXRootWindow wasn't being deleted from XID -> FXWindow hash table.
- Added FXRefPtr class for reference counted objects.
- Speeded up FXStat::statFile() on Windows.
- Fixed bug in FXAccelTable.
- Added __likely() and __unlikely() macros; these help with branch-probabilities.
- Added FX_FORMAT macro. Useful for argument checking.
- Added FXColors, a handy list of pre-defined colors. Also some handy color API's.
- Added getWindowClass() API to FXWindow. This returns the window-type, which is role a window plays on a desktop. This hint is intended for Window Managers.
- Change FXPath::match() API parameters and enums; old fxfilematch() API now eliminated.
- Added FXALIGNED macro variable alignment attribute hint.
- Fix fxgetticks() implementation.
- New fxgetmxcsr() and fxsetmxcsr() API's (x86-64/Linux only).
- Added fxhsl_to_rgb() and fxrgb_to_hsl() API's.
- Allow setting fxTraceLevel from environment variable FOX_TRACE_LEVEL.
- Old getCursorItem() API's removed from List Widgets. Didn't work that well anyway.
- Better default colors in FXColorDialog.
- Transitioned from configure.in to configure.ac for new automake system.
- Directory layout change to allow in-situ usage.

March 17 - FOX STABLE 1.6.36

- Fixed FXTable startInput() issue.

February 05 - FOX DEVELOPMENT 1.7.19

- Reversed arguments in fxfilematch() and FXPath::match(); this allows default parameter to be passed for pattern (which is also self-documenting).
- FXString::format() and FXString::vformat() now return size of the string; this is more useful than self-reference.
- FXSettings APIs now sport versions which take FXString reference. This eliminates many ".text()" calls to pass char* pointers.
- FXRecentFiles now works on FXSettings, not FXApp. Now specifically disallows empty filenames.
- Added volume to FXStat. Volume and index uniquely identify a file in the system, even when symlinks are used. Interpretation of these values other than simple comparisons depends on the operating system, however!
- FXDirVisitor split off into its own file.
- Major speed improvement in FXMat4d, FXMat4f matrix inversion: speeded up by over factor two; this is based on a specific Laplace Expansion of the 4x4 Matrix which is based on 2x2 subblocks instead of the usual development by a row and 3x3 minors.
- Based on the above techique, we also have a faster 4x4 determinant calculation [about 25% fewer floating point operations].
- Block editing of FXTable cells which are disabled.
- Wrote a little piece on the new half-float support and the theory behind its implementation in FOX: see fasthalffloatconversion.pdf. This paper explains the new half-float representation [similar to IEEE754 float and double], and how extremely fast conversions can be obtained.
- Eliminated automatic conversion of FXColor to- and from FXVec4 and FXVec3. These API's have caused much hidden bugs and indeed after removing them even more bugs surfaces which were masked by these API's.
  The New API's are colorToVec4f(), colorFromVec4f(), colorToVec3f(), colorFromVec3f(), and their equivalent double-precison flavors.
  Also fixed at the same time is more correct rounding when convering from floating point to integral representations.
- Added FXAtomicPtr template class for lock-free programming support on SMP type systems. The new lock-free primitives require processor bus-locking support. Due to at least some GCC versions having problems, the new FXAtomicInt and FXAtomicPtr implementation in FOX prefers to use the inline assembly version over the GCC __sync_xyz() style built-ins. Some of the API's have been renamed to more commonly (and succinct) names, such as cas() (compare-and-swap), set() (exchange).
- New code in FXThread for determining #processors.
- New API's added to FXImage. The colorize() API colorizes an image by multiplying its luminance by a given color argument. The fade() API fades the image to a uniform given color, based on a fading-factor.
- Some more stringent checking and tracing in FXGLVisual matching added.
- Workaround added for non-conforming handling or GLX 1.3 or newer by allowing 0 for glXCreateWindow() in older glX implementations.

February 05 - FOX STABLE 1.6.35

- Backported FXFont Freetype pitch size.
- Fixed compose context create issue.
- Bug fix in fxloadPPM() when ascii black and white bitmap is loaded.
- Call tr() when populating color names.
- Small bug in FXTextField when I-beam cursor surrounded by non-ascii UTF8 characters and it near the beginning or end of the string.

November 24 - FOX DEVELOPMENT 1.7.18

- Added FXhalf half-precision floating point format support. This is a 16-bit float as needed for signal processing and high-dynamic range imaging. FXhalf is designed to behave in all respects like a float number, except with a more limited range [up to 65504.0]. We have developed some extremely fast, table-based conversion methods.
- Small problem in preprocessor conditions fixed in FXAtomic.h
- Get/set font added to FXCalendarView.
- FXCalendar header and body font can be changed independently.
- Now have ticket spinlock implementation inside FXThread [GCC/x86/x86-64 only].
- Added RGBA save for FXDDSImage and FXDDSIcon.
- Small API changes in FXStream and its subclasses. Made things more easy to remember and more consistent.
- Improved documentation in FXThread.h
- Added getSelectedFiles() API to FXFileList.
- API's added to FXStat to yield link count and file inode(index) on filesystems where such info is available.
- Simpler enumeration of entries in FXDir. Also, its faster.
- Added resetGradients() API to FXGradientBar.
- Initialize FXGradientBar to more sensible default gradient.
- Message handlers ID_UPPER_COLOR and ID_LOWER_COLOR could be interfaced directly to FXColorWell. Now, they can also be directly interfaced to FXColorDialog and FXColorSelector since these now ID_SETINTVALUE and ID_GETINTVALUE which permits bi-directional dataflow similar to other widgets which can be connected to FXDataTarget.
- FXMDIClient now as optional background tile image.
- Generate SEL_MINIMIZE, SEL_MAXIMIZE, SEL_RESTORE messages on Windows as well as X11 when windows are iconified/minimized, maximized, or restored through Window Manager.
- Added setOwned(), isOwned() API's to FXImage, FXBitmap. This affects the way the client-side pixel buffer is managed.
- Added getActualFontDesc() API to FXFont so we can get the info about which font was actually matched in a more convenient form than using the individual API's.
- DDS support now includes half float and float (R16F, G16R16F, A16B16G16R16F, R32F, G32R32F, A32B32G32R32F formats.
- Fixed problem in FXMessageChannel: using Semaphore instead of Event on Windows fixes sporadic lock-ups.
- Added extra option to FXMessageBox.
- FXProgressDialog and FXProgressBar now support ID_SETINTRANGE and ID_GETINTRANGE, permitting connection through messages.
- Updated XDND system with DRAG_ASK. DRAG_ASK causes menu popup; this eliminates accidental drag-and-drops when you really wanted to click.
- Some small fixes for compile w/o OpenGL.
- Fixed possible memory leak [small one] when things end with timer or chore.
- Fixed bug reading monochrome .pbm bitmap.

July 28 - FOX STABLE 1.6.34

- Fixed bug in FXSettings; symptoms: every once in a while, a key-value pair was skipped.
- Small update to MAC-OSX implementation of FXThread.
- Fixed some minor things in fxutils for particular Windows header files.
- On Windows, block widget size update if it is minimized; minimized is a state, and does not cause a new size.
- Minor tweak to order in which size constraints are being passed to Window Managers on X11. Some Window Managers had a problem with the old order.
- Added FXSGN() and FXSGNZ() macros.
- Updated FXFileList drag and drop. Popup menu appears when normal drop occurs.

July 1 - FOX DEVELOPMENT 1.7.17

- New Image Type supported: FXDDSImage and FXDDSIcon support ".dds" file type images; images are decoded when loaded (saving is not yet supported at this time). The following formats are implemented: DXT1 (BC1), DXT2, DXT3 (BC2), DXT4, DXT5 (BC3), ATI1 (BC4), 3DC (or ATI2/BC5), and RXGB. Also supported are non-compressed formats RGB and LUMINANCE.
  At this time, only the first image is loaded; future versions will probably load 3D images and possibly Cube Maps as well. Note: the image loader is not suitable for directly passing images through to OpenGL; this code will however be made available at some time as well.
- Added transform() API to FXSphere; it may be used to transform bounding sphere by affine transformation matrix.
- Also added transform to FXRange. Again, matrix must be an affine transformation matrix.
- Many Input Method Editor improvements.
- Added head() and tail() API's to FXArray and FXObjectList. Mostly for convenience sake.<\li>
- Updated documentation for FXRangeSlider.
- Extended drag and drop protocol with DND_ASK.
- FXAutoPtr class added. This represents owned, non-reference counted pointer variable. This is especially convenient for keeping tabs on all your icons and such.
- FXURL family of API's extended: encoding/decoding, but also picking apart URLS into parts according to the rfc3986 syntax.
- Added FXPath::share() API for Windows.
- Updating FXFileList for new DND_ASK type.
- FXIconSource now supports FXDDSImage and FXDDSIcon.
- Reimplemented utf2wcs(), utf2ncs(), wc2utfs() and nc2utfs() to be buffer overrun-safe.
- Updated FXThread for Mac OS-X.
- New API's in FXDCWindow: fillVerticalGradient() and fillHorizontalGradient() for gradient-fills.
- New API stackingOrder() added to FXTopWindow to control window stacking order explicitly. There are three types: STACK_NORMAL (the default) where the order is determined by owner windows; STACK_BOTTOM which will cause the window to be below other windows, and STACK_TOP which will constrain it to be above other windows.

April 29 - FOX STABLE 1.6.33

- Backported FXTopWindow resize() and position() fixes from FOX 1.7.
- Fixed GCC 4.3 warning in FXArray header file.
- Made internal data arrays static to prevent global name clashes on some compilers.
- Fixed uninitialized variable in FXFileDict.

April 22 - FOX DEVELOPMENT 1.7.16

- Fixed issue with unplugged XDevice (when xorg.conf contains device but device was unplugged).
- FXMenuButton pops and collapses with any mouse button, not just left one. This fixes a minor problem if one tries to right-click after having left-clicked FXMenuButton.
- FXIconSource now handles "jpeg" and "tiff" extensions instead of only "jpg" and "tif".
- Forgotten tr() added to FXMessageBox.
- Added NoAccessTime option for FXFile open() call.
- Added Rename option to FXFileSelector widget.<\li>
- FXString::vformat() and FXString::format() and other printf-like printing routines now support positional arguments.
- FXString::vscan() and FXString::scan() and other scanf-like reading routines now also support positional arguments.
- FXTopWindow not only UTF8 title but also sets 8859-1 title string for legacy window managers.
- Fixed numerous warnings due to GCC 4.3 new integer overflow rules (-fstrict-overflow and -Wstrict-overflow). Whenever the optimizer makes the assumption is made that expressions doesn't overflow, a warning is issued. Rewriting code in a way that makes the assumption go away will kill the warning; sometime, unsigned may be used as well. So I rewrote a lot of code in FOX to be more overflow-resistent.
- Fixed many warnings reported by Borland C++ compiler.
- Moved REGEX_ enums into FXRex class namespace.
- Applied FXComposeContext and FXApp patches for input methods on Windows; new message types have been introduced because of this, SEL_IME_START and SEL_IME_END.
- Corrected problem causing NVIDIA driver video-memory leak in FXGLContext when new GLX1.3 code is used on new Xorg X Server. The problem caused video memory to remain allocated past the termination of the program. Of course this should never happen, not even in incorrect programs. NVIDIA is looking at the problem from their end.

March 10 - FOX STABLE 1.6.32

- Fixed FXPath::simplify(). Backport from FOX 1.7.
- Fixed Adie CPU load issue caused by clock updating.
- Fixed FXURL::fileFromURL().

January 11 - FOX DEVELOPMENT 1.7.15

- Updated MS-Windows OpenGL implementation. Now uses wglGetPixelFormatAttribivARB() from ICD driver (where available) to determine extended PIXELFORMAT attributes. Of particular interest is the ability to match multi-sampling PIXELFORMATs which support hardware anti-aliasing.
- Fixed bug in FXSettings not dealing properly with CRLF on MS-Windows (when in ASCII mode; the regular mode uses the registry and that worked fine).
- Implemented PropertyNotify message from X11 to intercept _NET_WM_STATE changes. This allows us to send SEL_RESTORE, SEL_MAXIMIZE and SEL_MINIMIZE when the user manipulates an application's top-level window.

January 2 - FOX DEVELOPMENT 1.7.14

Happy New Year to all the FOX Users! Despite the holidays, its been a pretty busy over here with new FOX developments; since its the new year it was decided not to sit on this any longer but to release it and get some early feedback. So without further ado, here it is:

- Added 3DConnexion SpaceNavigator support (currently under Unix only). The SpaceNavigator device is a 6DOF motion controller; if your working with 3D software, you'll probably want to get one of these things. However, even if you're just fond of using Google Earth, you'll probably going to find this thing very useful.
  To get this device working on Linux, a recent Xorg X Server (7.3 or later) with USB HID XDevice support is needed. Of course, HID support in the linux kernel also needs to be enabled.
  Other than that, no special device drivers are required. However, some minor configuration files need to be changed to allow X11 to recognize the device. Simply include the following line in the "ServerLayout" section of your Xorg.conf file (typically located in the /etc/X11 directory on your system).

      	InputDevice    "SpaceBall" "SpaceBall"

  Also, add a new "InputDevice" section in your Xorg.conf file:

      Section "InputDevice"
      	Identifier  "SpaceBall"
      	Driver      "evdev"
      	Option	    "Name"   "3Dconnexion*"
      	Option	    "Pass"   "3"
              Option      "Mode"   "Relative"
              Option      "XRelativeAxisMap"  "0"
              Option      "YRelativeAxisMap"  "1"
              Option      "ZRelativeAxisMap"  "2"
              Option      "RXRelativeAxisMap" "3"
              Option      "RYRelativeAxisMap" "4"
              Option      "RZRelativeAxisMap" "5"
      	Option	    "ZRelativeAxisButtons" "off"
      EndSection

  After these changes, you should of course restart the X Server. There is no need for any additional driver modules; the new evdev device capability in the X Server does all the hard work.
  Your Space Navigator or Space Traveler (the Space Traveler is a portable version of the Space Navigator. It has a few more buttons.) should be plugged in prior to starting your FOX application.
- Added new message types SEL_SPACEBALLMOTION, SEL_SPACEBALLBUTTONPRESS, and SEL_SPACEBALLBUTTONRELEASE for 3DConnexion SpaceNavigator devices.
- Revamped OpenGL support with GLX 1.3 or higher (frame buffer config supprt). There are new options for FXGLVisual, and some older options have been renamed, to force updating of existing software.
  The new implementation allows multi-sampling frame buffer configurations, as well as explicit control of rendering surface types (Window, Image, or Buffer).
- Updated FXGLCanvas. FXGLCanvas now has the capability of using externally created FXGLContext or to use a private FXGLContext. Thus, FXGLContexts may be shared between instances of FXGLCanvas.
  There are a few news APIs to control the context being used, and a new option GLCANVAS_OWN_CONTEXT to specify if the FXGLCanvas should manage the FXGLContext or not.
- FXGLContext has been rewritten to use the updated FXGLVisual. The FXGLContext object's lifetime can be managed independently from the FXGLCanvas windows. This allows for better control of the OpenGL resources (textures, display lists, shaders, etc). FXGLCanvas windows may be created and destroyed without losing OpenGL objects.
- Fixed bug in fxprintf.cpp with "%n" format.
- Fixed core dump in fxtifio.cpp which was due to crappy TIFF library not handling errorhandling function-pointers nicely. We now get no messages, but at least some types of off-spec TIFF images no longer seem to cause core dumps.
- Fixed GCC type-punning warnings in FXThread.cpp.
- Fixed some warnings in FXApp.cpp.
- Simplified some code in FXDCWindow.cpp, and FXVisual.
- Added flag to force visual ID in FXVisual; this allows you to create a 2D drawable with a compatible visual to a 3D drawable.
- Added default handler for SEL_SPACEBALLMOTION, SEL_SPACEBALLBUTTONPRESS, and SEL_SPACEBALLBUTTONRELEASE in FXWindow.
- Added Space ball support for rotation, panning, and zooming in FXGLViewer.
- Spinlock support on MS-Windows added.

November 16 - FOX DEVELOPMENT 1.7.13

- Added FXRangeSlider widget.
- Updated FXAtomic with new API's, and made it use new GCC 4.1 compiler built-ins where available; it uses inline assembler code if not available.
- Added API to change threshold level in FXIcon; the threshold level is used to determine etched-in looking icon when button with icon on it is disabled.
- Added FXSpinLock spin locking primitive for multi-processing; Note: currently not available on MS-Windows yet; coming soon, however!
- Missing FXAPI declaration added to FXMessageChannel.
- Updated documentation for FXDLL.
- Fixed esoteric problem with GUI update refresh cycle; always skipped last widget. Not a very serious problem since refresh cycle always never starts from the same widget.
- Problem with FXDockBar stickyness fixed. Needed to block docking at unallowed dock sides even when done via menu.
- Every once in a while, got X-Window error from inside FXDockHandler. This was due to temporary dummy window which only exists during dragging. Made sure this is now blocked off.

November 16 - FOX STABLE 1.6.31

- Bug fix to strtoull() for systems which have no native strtoull().
- Missing tr() added in FXMDIClient.
- Fix for FXRuby in FXMDIClient (don't test for message==0 in notify message).

October 6 - FOX DEVELOPMENT 1.7.12

- Added additional API's to FXMat3d, FXMat3f, FXMat4d, FXMat4f.
- FXSlider, FXRealSlider didn't update tickmarks (if shown) when slider range was changed.
- Small typo found in fxfilematch() was found which affected character-range matching.
- Change in the order FXSphered, FXSpheref is expanded when bounding box is added, resulting, in most cases, in a smaller bounding sphere.
- API added to FXTreeListBox, FXListBox, to set shrink-wrap mode for popup pane; this allows minimum size depending on actual number of items in list.
- Logic of sizing items in FXIconList changed slightly.

October 6 - FOX STABLE 1.6.30

- Fixed some issues with flush() in FXBZFileStream and FXGZFileStream.
- FXDial didn't issue SEL_COMMAND when driven from keyboard.
- Small typo found in fxfilematch() was found which affected character-range matching.
- Problem in FX7Segment fixed.

August 9 - FOX STABLE 1.6.29

- Added ".jpeg" as additional extension for JPEG images in FXIconSource.
- Fix in FXSplashWindow not killing timer if it gets destroyed before timer goes off.
- FX7Segment had bug in onCmdGetStringValue() implementation (it was not returning the string).
- Cruft removed from FXMat3f.
- Bold style fixed in FXText.
- Read outside buffer problem (flagged in valgrind occasionally) fixed in FXText.
- Bugs in FXListBox and FXTreeListBox fixed.

July 31 - FOX DEVELOPMENT 1.7.11

- The FOX Library License has been changed to the new Lesser GPL Version 3! In addition, the FOX Library License Addendum has also been changed; a new clause has been added to the License Addendum.
  The new clause in the License Addendum stipulates that the License Addendum does not propagate to derivate works:- when you make a derivate work based on the FOX Library, this work may no longer carry over the FOX License Addendum. In practice, this means that derivate works will no longer support the relinking exception, but must fall back to the standard Lesser GPL license. Note that this does not fundamentally change use of the FOX Library in commercial applications; rather, it expands a little bit on the intent of the original License Addendum, which was to ensure that modified source code is released under the Lesser GPL.
  As you all are probably aware, several not-so-ethical companies [which, for now, shall remain nameless!] have been trying to perform an end-run around the old GNU GPL License. This necessitated an extensive revision of GNU GPL License. After a long period of extensive review, this revision was recently completed.
  I felt that the FOX Library also deserved the additional protections that this new license offers and therefore decided to exercise the "..or later version" provision of the GPL license to move all the source code over to this.
- Major improvements to FXChart widget, and introduced FX2DChart and FX2DPlot widgets.
- Extra constructors and set() API's added to FXRangef, FXRanged. Made radius have default parameter value in FXSphere to match the idea in FXRange.
- Fixed FXDockSite moveToolBar() problem when FXDockSite is docked at bottom side.
- Fixed FXComboBox, FXListBox, FXTreeListBox potentially reading freed memory. This happens at least with FXComboBox when used inside FXComboTableItem.
- FXIconSource now recognizes ".jpeg" extension.
- Added "special stacking orders" capability for FXTopWindow. STACK_TOP makes the window always stay on top of all other windows. STACK_BOTTOM makes it stay below others. STACK_NORMAL is the default behaviour. The STACK_TOP is the most interesting mode; it can be used for attention-dialogs like error boxes, or splash-windows.
- FXSettings has had a major overhaul. Arbitrary size limits for the strings have been removed.
- FXMat3d, FXMat3f, FXMat4d, FXMat4f have equality operators now.
- Added setOrtho(), setFrustum() to FXMat4d and FXMat4f. The new API's replace ortho() and frustum(). The new way is much faster because no matrix multiply is done anymore. Also new API's setInverseOrtho() and setInverseFrustum() have bee added. In addition, getOrtho(), getFrustum() extract the view-volume dimensions from the projection matrix, which may come in handy.
- FXMat3f, FXMat3d, FXMat4d, FXMat4f function eye() has been replaced with identity(). New API isIdentity() has been added also.
- New API getItem() added to FXOptionMenu.

June 4 - FOX DEVELOPMENT 1.7.10

- fxIsFinite(), fxIsInf(), fxIsNan() API's added.
- FXGradientBar visual aspects have more control now.
- FXShutter didn't issue message when shutter-item was pressed.
- The fxgetticks() API is now official. It returns the CPU's clocktick- counter, where supported. Otherwise it returns time in nanoseconds.
- Fixed rare corner-case with active-line coloring in FXText.
- When FXRegistry is in ascii mode on Windows, system registry should be searched in \WINDOWS\foxrc, and not in \WINDOWS\foxrc\foxrc.
- Fixed regression in glUseFXFont() when using Xft instead of XLFD.
- Small subtlety fixed with list widgets and drag-n-drop initiation.
- Fixed bug in FXMemMap.
- Fixed bug in FXVisual which caused drawing to FXBitmap to fail.
- Fixed bug FXWindow setDNDData() which affected MS-Windows clipboard operations.
- FXbool can not be relied upon to be 1-byte size. Removed the FXASSERT inside FXApp to that effect. Serialization should be OK since its cast to FXuchar.
- Added ability to set file-associations table in FXFileDialog, FXDirDialog so the associations may be shared between multiple widgets.
- Fixed issue with bold-face text not drawing correctly in FXText if gap happens to be in the text-fragment being drawn.
- Implemented __vsscanf() and __sscanf(). Since this native FOX implementation, and its now used on all platforms, there will be no more issues with 32-bit v.s. 64-bit architectures, or Windows v.s. Solaris v.s. GLIBC based systems. The new routine will always behave the same and support the same conversions.
- Decoration options interpreted under Windows-XP and UNIX as follows: DECOR_SHRINKABLE means window may be smaller, but not larger, than default size; DECOR_STRETCHABLE means window may be larger, but not smaller, than default size; and finally, DECOR_RESIZE means window may be both smaller or larger than default size.
- Implemented __snprintf() and __vsnprintf(). This takes care of all variability in these API's across platforms, and also 64- v.s. 32-bit issues.
- Fixed issue in multi-head API access under older Windows operating systems than Windows-XP.
- FXMDIChild resize animation speed changed a little bit.
- Added some exciting new applications to the list of projects.

June 4 - FOX STABLE 1.6.27

- Decoration options interpreted under Windows-XP and UNIX as follows: DECOR_SHRINKABLE means window may be smaller, but not larger, than default size; DECOR_STRETCHABLE means window may be larger, but not smaller, than default size; and finally, DECOR_RESIZE means window may be both smaller or larger than default size.
- Fixed regression in glUseFXFont() when using Xft instead of XLFD.
- Fixed bug in FXVisual which caused drawing to FXBitmap to fail.
- Fixed bug FXWindow setDNDData() which affected MS-Windows clipboard operations.
- Fixed issue with bold-face text not drawing correctly in FXText if gap happens to be in the text-fragment being drawn.
- Fixed issue in multi-head API access under older Windows operating systems than Windows-XP.
- FXMDIChild resize animation speed changed a little bit.
- Some MacOS-X porting issues fixed.

March 28 - FOX DEVELOPMENT 1.7.9

- Renamed FXString::HEX array to FXString::value2Digit; added FXString::digit2Value array. Removed FXString::hex (never used anywhere).
- Minor fix in Adie.stx file for sprintf-style format patterns.
- Fixed interpretation of DECOR_SHRINKABLE and DECOR_STRETCHABLE; when neither is specified, programmatically specified size is kept. If DECOR_STRETCHABLE is specified, size is constrained to be at least the default size. If DECOR_SHRINKABLE is specified, size is constrained to be at most the default size; finally, if DECOR_RESIZE (i.e. both DECOR_SHRINKABLE and DECOR_STRETCHABLE are set), then size is not constrained and window can be manipulated arbitrarily.
- Renamed FXURL::hostname() to FXSystem::getHostName(), which is more appropriate.
- More major updates in FXText.
- Lots of new API's in FXTextField:
  - API's added to incrementally modify text, rather than just replace all of it.
  - Cursor and anchor properly updated when text is changed.
  - API added to obtain only selected text.
  - Overstrike mode now works much better for UTF-8.
  - Cursor changes shape when in overstrike mode.
  - All manipulations done using a single message now.
  - API's added to manipulate clipboard and primary selection.
  - When setting new text, no longer immediately scrolls to make end of text visible (this caused ugliness inside FXComboBox when FXComboBox is too small to show all text).
- Changed behaviour of FXText: pasting from clipboard or primary selection now observe properly the overstrike mode-flag. When multi-line text is pasted, only text from cursor position till end of line is overstruck; the rest is just inserted.
- Added API to FXText to obtain selected text.
- Added some API's to FXGLShape, and other FXGLObject's.
- Hidden Windows-only GetClass() API now returns wide characters if FOX is compiled with -DUNICODE. Thus, window-titles now show properly in unicode.
- Secret convenience API's added: fxopen(), fxreopen(). These do what you expect, except they encode the filename to wide-characters on Windows. Note that these API's are not official and will be removed at some point in the future.
- Fixed _NET_WM_PING protocol issue (change in protocol).

March 28 - FOX STABLE 1.6.25

- Fixed compile problem with FXThread for build on MacOS-X.
- Fixed _NET_WM_PING protocol issue (change in protocol).

March 13 - FOX DEVELOPMENT 1.7.8

- Updates to Adie editor; starting it with a non-existing file will now set the text window's filename to the new file. Also, changed a few accelerators to more useful bindings. Tab-stops may be changed more quickly from a pulldown menu. Rearranged Preferences Dialog since most-often changed settings should be on the first page.
- Major improvements in FXText widget; many new API's added:
  - copySelection() copies the selection to the clipboard.
  - cutSelection() cuts the selection to the clipboard.
  - copySelection() copies the selection to the clipboard.
  - deleteSelection() deletes the selection.
  - pasteSelection() pastes the primary selection.
  - pasteClipboard() inserts the clipboard into the text.
  - replaceSelection() replaces the selection.
- Cursor movement has been improved:- no longer hides while moving. All actions are now mapped to an individual message handler.
- Cursor shape now changes when in overstrike mode.
- New FXAutoThreadStorageKey automatically generates and disposes of thread-local storage key. It behaves as a "pseudo-constant" in the sense that is generated at load-time simply by defining a global variable of this type.
- Updates to FXThread to use FXAutoThreadStorageKey for its own handle.
- Code to determine monitor (screen) on Windows no longer requires header files to be present; we provide our own prototypes. Now it works even with older compilers. Detection of API's is done purely at runtime.
- FXReplaceDialog and FXSearchDialog support wheel to scroll back through search history.
- FXScrollArea now initiates auto-scroll behaviour when cursor is near visible area [not the whole window!]. Now FXText to starts scrolling when cursor is near the numbers bar, instead of near the edge of the window.
- Fixed leaked resource handles in FXDCWindow, FXIcon; was flagged by GDI handle leak-checkers.
- Fixed bug in FXAccelTable::parseAccel(); was not handling "#XXX" properly.
- Added run-time test for multi-head display configuration; it no longer depends on having up-to-date header files.
- Fixed FXPath simplify() routine for lots of corner-cases.
- FXComboBox's setText() now has notify argument. When an item in the drop-down list, the text is selected only if the combobox is a non-static combobox.
- Fixed minor details in NET_WM_PING generated in FXApp; apparently, some minor details in the NET_WM_PING had changed.
- Now use unicode CreateWindowEx if -DUNICODE was passed. Window titles show up in unicode properly.

March 8 - FOX STABLE 1.6.24

- Fixed leaked resource handles in FXDCWindow, FXIcon; was flagged by GDI handle leak-checkers.
- Fixed bug in FXAccelTable::parseAccel(); was not handling "#XXX" properly.
- Added run-time test for multi-head display configuration; it no longer depends on having up-to-date header files.

February 22 - FOX STABLE 1.6.23

- Added test in WIN32 version of FXGLVisual to validate PIXELFORMAT prior to obtaining its attributes. Apparently some PIXELFORMAT's listed by DescribePixelFormat() do not actually describe a valid configuration on some graphics cards.
- Fixed problem with X11 XLFD fonts. If XLFD font name specified directly, no font was matched.
- Fixed FXSemaphore compilation issues on MacOSX. Also pass initial semphore value to MacOSX API.
- Fixed spurious call to removeItem() in extractItem() inside FXTreeListBox.

January 30 - FOX STABLE 1.6.21

- Always define vfscanf(), vscanf(), and vsscanf() when on Windows.
- Remove FXAPI in FXObjectListOf template.

December 7 - FOX DEVELOPMENT 1.7.7

- Forgot to mention: there has been an important change in the way MDI windows work. When closing an MDI Child, the MDI Child is now made inactive first; the target of the MDI Client gets a notification to that effect. Then a SEL_CLOSE message is delivered to the MDI Child's target. If the close is approved, the MDI Child will then be deleted. But if the close is not approved (SEL_CLOSE handler returns 1), then the MDI Child will be made the active MDI Child again (and the MDI Client's target will get a message to that effect). The rationale behind this change is that the MDI Child will be not the active window at the time of its demise, and thus updating the GUI now only needs to happen when an MDI Child is activated or deactivated (i.e. when the target of the MDI Child receives SEL_SELECTED and SEL_DESELECTED).
- FXDataTarget's support for FXlong and FXulong has been extended; when associated with FXlong, it now sends/receives ID_SETLONGVALUE and ID_GETLONGVALUE to the associated control. Most valuator controls have now been updated to respond to these messages.
- FXText and FXTextField now have auto-hiding cursor. As soon as the user begins typing, the mouse cursor will disappear to prevent obscuring the text. The mouse-cursor reappears when the mouse is moved.
- Added new API's, showCursor() and cursorShown() to FXWindow. These control mouse cursor visibility.
- Changes and additions to FXDLL. Added API to obtain DLL containing a function pointer. Also added API to obtain name of loaded DLL. And added API to get symbol name given function pointer (UNIX only). Renamed a few API's for consistency.
- Implemented Extended Window Manager methods to raise() or lower() toplevel windows. Now these work properly under EWMH-enabled Window Managers.
- New time-configuration varable added in FXApp (autoHideDelay). This controls I-beam cursor hiding of text controls.
- Fixed bug in FXLabel, FXMenuCaption, FXToggleButton's setText() API. Problem was changing accelerator or accelerator-location in a string, without changing the string itself. Bug was reported by Lothar.

December 5 - FOX DEVELOPMENT 1.7.6 (Sinterklaas-Editie!)

- FXThreadPool::execute() now returns FXWorker instead of a flag; this is convenient as you now have a handle to the thread responsible for executing your FXRunnable.
- Fixed a few buglets in FXThreadPool, particularly having to do with wierd cases like stopping the FXThreadPool while trying to schedule new jobs, etc.
- FXCondition::wait() now returns a flag also; return value is true if the function returns due to the condition being signalled, and false if interrupted or if there were errors. The overloaded version also returns false if the wait-time expired.
- Added some missing includes in fx.h.
- Fixed missing FXReactor FXIMPLEMENT issue.

November 30 - FOX DEVELOPMENT 1.7.5

- Added new FXThreadPool class. FXThreadPool allows parallel execution of jobs (FXRunnable) without the overhead of creating a thread for each job; instead, a pool of worker-threads are used to execute jobs, and thus the overhead is minimal. To ensure that the workers do not fall behind with the incoming job-stream, new jobs are only accepted when worker-threads are available. The FXThreadPool can adapt to changing workloads by spawning new workers during peak-loads (up to a set maximum), and removing workers from the pool when there are no jobs (down to a certain minimum). Worker threads may be started right away (ensuring that all worker-threads are ready for action), or on an as-needed basis.
- Added new FXReactor class. An FXReactor implements reactor pattern. FXReactor is thread-safe and will allow multi-threaded operation like the leader-follower pattern FXReactor is a key component for multi-thread platform-independent network-server development, and will also serve as the base class for the new event-dispatch structure being put into place.
- Changed FXApp to use the new pselect() system call. It provides nano-second timeouts and will also make non-immediate signal processing in FOX safe from race-conditions (or at least it will when your c-library and linux-kernel support the new pselect() system call ;-)).
- Added API's to FXThread for thread-local storage. This comes in addition to the thread-local storage already implicitly present for the self() API.
- Added API to FXThread to determine number of processors in the system; this may be used when creating the FXThreadPool to start the proper number of worker threads based on actual hardware in the system.
- FXThread now derives from FXRunnable, which encompasses an overloadable run function and some data. FXRunnable is also used in FXThreadPool.
- Made FXThread safe for suicide of FXThread:- in case of self-destruction, FXThread properly detaches the thread and cleans up TLS to FXThread binding. When FXThread is destroyed by another thread cancels the thread. Normal termination properly resets the running flag but leaves tid to allow a join() operation.
- Added new FXMessageChannel class. This replaces the old FXGUISignal. FXMessageChannel delivers a way to perform asynchronous message calls from a worker thread to the main GUI thread. It is implemented using an internally created pipe, which is connected to the GUI thread. A message written by a worker thread can thus be delivered to the GUI thread, and dispatched in the GUI thread's context. To obtain the behaviour of the old FXGUISignal, note that this is now simply a special case of an asynchronous call via FXMessageChannel with no data.
- Fixed bug in vsscanf; New versions of Visual Studio now have one of the two missing functions.
- Added special blank cursor stock cursor. This can be used when you desire to see no cursor at all.
- Speeded up signal handling stuff: only check non-immediate signals if one was actually raised.
- Fixed FXSpinner and FXRealSpinner; they were updating while being changed by the user through the text field.
- Fixed ugly look of FXHeader when no items are present (as reported for its use in FXTable).
- Improvements in FXText word-selection mode.

November 17 - FOX STABLE 1.6.20

- Rolled back explicit template instantiation stuff: not supported everywhere.

November 9 - FOX STABLE 1.6.19

- Fix bug in FXMutex::locked() implementation.
- Suppress 4244 warning (possible loss of data) on VC++ compiler.

November 7 - FOX STABLE 1.6.18

- Bug fix in FXApp drag and drop.
- Wrong error message in argument check in FXTable API.
- Fixed minor issues in FXPicker: now issues message on mouse button release.
- Fixed problems in FXFile, FXSocket, FXPipe occurring on 64-bit Windows.

September 30 - FOX STABLE 1.6.16

- Fixed issue with FXMDIChild and FXTopWindow close() routine; this mostly affects FXRuby.
- Fixed drag and drop issue with dropFinished() on Windows.
- Fixed FXTextField drawCursor() array overrun and text measurement bugs.

August 29 - FOX DEVELOPMENT 1.7.3

- Major upgrade to reswrap. New in reswrap is long option names. Also added are a number of new options, designed for more easy incorporation of reswrap into custom software build rules. First, options and filenames can now be mixed, allowing both icons.h and icons.cpp to be generated with one single reswrap command. Also, static and external linkage decorations can be generated for each symbol. Symbol names may be changed using prefixes, postfixes, or incorporated in namespaces. Size declarations may be added to header files to provide compiler with sizes of the embedded resources. For more, see updated reswrap documentation. One important warning: some options have been renamed for consistency!
- Redesign of inner workings of FXScrollArea; getViewportWidth() and getViewportHeight() have been removed. New API's getVisibleX(), getVisibleY(), getVisibleWidth() and getVisibleHeight() are added. Also added internal (protected) member function placeScrollBars() which is intended to be called by subclasses of FXScrollArea.
- Minor tweaks inside FXScrollBar.
- Added new FXConsole widget (under construction).
- Added some API's to FXArray.
- Fixed some FXFileList drag and drop issues.
- Cut down code size by means of explicit template instantiation.
- FXQuat{d,f} API's setAxisAngle(), and getAxisAngle() have been made safer.
- FXString inc() etc. made safer; won't increment too far.
- Fixed FXTextField drawCursor() array overrun and text measurement bugs.

August 14 - FOX STABLE 1.6.14

- Rolled back Niall's BOM-marker patch to FXDCWindow [not working].
- FXSlider, FXRealSlider arrow-movement was not generating callback to target.
- Include <asm/socket.h> for CYGWIN for X11 Windows build.
- Regenerate fxunicode.cpp with surrounding namespace for Digital Mars C++ compile.
- Surround fxascii with namespace for Digital Mars C++. Plus other issues brought to light on Digital Mars C++.

August 8 - FOX STABLE 1.6.13

- Fixed Digital Mars C++ makefile.
- Namespace qualification missing from macros in FXObject.h.
- End of stream bugs in FXGZFileStream and FXBZFileStream.
- BOM marker at end of text appears to fix WIN32 drawText() and drawImageText() in FXDCWindow.
- Removed some more FXTRACE statements; fixed trace-levels on some other FXTRACE statements; this only affects debug-mode builds.

August 1 - FOX STABLE 1.6.12

- Fix DLL issue [again].
- Some FXTRACE statements were at too low a level.
- Updated Visual C++ studio projects.
- FXToolTip place() fixed.

August 1 - FOX DEVELOPMENT 1.7.2

- Fix assorted typo's.
- Change PI, DTOR, RTOD, EULER to const declarations inside FX namespace, preventing conflicts.
- Fix FXChart Makefile.

July 30 - FOX DEVELOPMENT 1.7.1

- FXCalendar and FXCalendarView widgets added. The are written by Sander Jansen.
- Added positive (?<= expr) and negative (?<! expr) look-behind patterns to FXRex; look-behind patterns are finite-length patterns that need to be matched (or not matched), without eating any text.
- Fixed minor bug with case-insensitive back refecences in FXRex.
- Different method implemented for back references; back references now also work even if npar is 1 in FXRex::match().
- Added granularity option to FXRealSlider; if set greater than zero, values are rounded to multiples of granularity as slider is moved; this will cause slider to report nice round numbers.
- getNextEvent() can now be told to wait only a finite amount of time for incoming events.
- The addTimeout() and remainingTimeout() API's in FXApp now work in terms of nanoseconds.
- New addDeadline() API added to FXApp which sets absolute clock value when a timer will expire; thus this new API is not subject to cumulative errors. The timeout is set in nanoseconds since Jan 1st, 1970.
- Datatarget now supports FXbool type.
- Added ID_SETLONGVALUE and ID_GETLONGVALUE support to FXTextField.
- FXStream now supports FXbool type.
- FXbool type now defines as bool.
- FXToolBarShell now interprets its child's LAYOUT_FIX_WIDTH and LAYOUT_FIX_HEIGHT hints.
- Change addInput() API; it now takes a void* pointer which is then passed along into the SEL_IO_READ (etc.) message handlers. You can get the old behaviour by passing in the file-descriptor for the void* pointer.
- New FXGLConfig class decribes OpenGL framebuffer configuration.
- New FXGLContext uses FXGLConfig to match OpenGL hardware capabilities.
- Lasso selection in FXIconList no longer drawn as line, but solid rectangle. Looks MUCH nicer!.
- New DND type added for files; this is now used internally between FOX applications in preference to "text/uri-list", since its much easier to decode and encode.
- FXSettings and FXRegistry now support 64-bit integer values; this necessitated some small API changes: readUnsignedEntry() is now called readUIntEntry(), writeUnsignedEntry() is now writeUIntEntry(), and the new API's are called readLongEntry(), readULongEntry() and writeLongEntry(), writeULongEntry() respectively.
- Also new in FXSettings is support for the type FXbool, which is read/written as a more humanly readable "true" and "false" instead of 1 and 0.
- New class FXDLL and FXAUTODLL added to manage dynamic library (plugin) loading. This replaces the old function-based method. Also new, FXDLL has API to obtain FXDLL given a pointer; basically this allows you to determine the FXDLL containing a specific piece of code.
- FXToolBar's setDockingSide() now preserves flags. If both LAYOUT_FILL_Y and LAYOUT_FILL_X are set the will remain set when orientation flips.
- Added FXReadWriteLock class. This provides shared-lock support in a platform-independent way.
- Added FXAtomic class. It provides multi-processor safe incrementation/decrementation of a lock-variable.
- FXToolBarShell can resize its child if the LAYOUT_FIX_WIDTH and LAYOUT_FIX_HEIGHT are specified on the child [in other words, if its set to keep its given size, this size may be given through interaction with the user].
- Added missing set() API's to FXExtentf and FXExtentd.
- Cell being edited in FXTable now commits its value if clicking outside of table.
- Fixed subltety in FXPath::relative().
- Added new API FXPath::isInside().
- Speeded up FXString's enquote(), dequote() API's.
- Fixed drawing bug in FXTextField containing UTF8, when not all text is visible.
- Fixed problem of parameters shadowing member functions in FXDate.
- Changes in FXThread to eliminate race conditions.
- New classes FXComplexf and FXComplexd added.
- Fixed reset of scheduling policy in FXThread's priority() API.
- Added API to FXThread to get/set scheduling policy, on systems where scheduling policies are implemented.
- FXThread priority and policy now defined in terms of a range of enums for increased portability across platforms.
- Fixed bug in FXToolTip's place() routine on Windows.
- Fixed bug in FXDir on Windows where non-unicode version didn't compile.

July 25 - FOX STABLE 1.6.10

- Updated VC++ project files.
- Updated Adie.stx; new pattern for #ifdef 0 ... #endif method of commenting out code.
- FXExpression memory leak fix.
- Updated Visual C++ studio project: FXRulerView source file was omitted.
- Missing FXAPI declaration added to FXExtentd and FXExtentf.

July 17 - FOX STABLE 1.6.8

- Fixed drawing bug in FXTextField containing UTF8, when not all text is visible.
- Fixed problem of parameters shadowing member functions in FXDate.
- Missing FXAPI declaration added in FXSemaphore.
- Add fflush() to fxassert(), fxmessage(), etc.
- FXToolBar preserves flags if LAYOUT_FILL_X AND LAYOUT_FILL_Y both set on a bar.
- Bug in strtoll() fixed [on machines where no native strtoll() is available].
- A number of subtleties have been fixed in FXPath pathname manipulations.
- Click outside occupied table area now commits input in cell being edited.
- Small addition in Adie.stx for numerical size suffixes (c/c++ coloring).

June 15 - FOX STABLE 1.6.6

- Added fox.pc for pkgconfig support benefiting FOX package builders and developers.
- Added date-tooltip to Adie clock.
- Removed CXXFLAGS clear in configure.in so it can be passed.
- Removed test on zero-message for callback due to its use in FXRuby.
- Removed cruft from FXDragCorner.
- Fixed little bug in FXTable setItemText().
- Fixed csv clipboard issue in FXTable.
- Fixed clipboard issue in FXText.
- Added workaround for byte order in FXCursor render for Apple MacOSX X Server bug.
- Fixed buglet in own strtoll which is only used on machines which don't have native one.
- Fixed Python syntax pattern for Adie.stx.

June 15 - FOX STABLE 1.4.34

- Fixed buglet in own strtoll which is only used on machines which don't have native one.

April 17 - FOX STABLE 1.6.4

- Fixed two bugs in FXTable setItemText() and setItemIcon().
- Double-free in Xft mode fixed:- freetype now frees its memory!
- Patch for fxkeyboard.cpp for other compilers.
- Callbacks from FXListBox SEL_CHANGED message weren't passing item-index.
- Bounding box in fxpsio.cpp was wrong.
- VirtualAlloc() instead of FXMALLOC() in FXImage circumvents apparent driver bugs on Windows-Xp.

April 5 - FOX STABLE 1.6.3

- Fixed issue with multi-head on Windows-XP.
- Fixed issue with FXSphered/FXSpheref.

April 3 - FOX STABLE 1.6.2

- Fixed fxkeyboard.cpp build problem on Windows.
- Fixed sporadic core-dump due to SetDIBits() reacting poorly to malloc()-allocated memory; now using VirtualAlloc() instead of malloc() which gives whole pages.

April 1 - FOX STABLE 1.6.1

- Fixed fxgetticks() issue for AIX/PowerPC.
- Fixed round() API in FXExpression for other platforms.
- Incorporated Daniel Gehriger's keyboard path for Windows 9x/ME.
- Fixed FXThread::time() issue for non-POSIX199309 UNIX platforms.

March 21 - FOX STABLE 1.6.0

- New FXExpression class to evaluate numerical expressions. Its fast as it compiles to easy to interpret byte-code. It also allows expressions with variable arguments, which can be named arbitrarily.
- Fixed but in fxtoDos and fxfromDOS; the end-of-string is no longer accounted for in the length [but it is still added, for convenience].
- Changed sleep() API of FXThread; it now has a single argument, the number of nanoseconds to sleep.
- Added wakeat() API to FXThread. The wakeat() API sleeps till the given absolute time is reached. The time is expressed as a 64-bit long counting nanoseconds since Jan. 1, 1970.
- Added time() API to FXThread. It returns nanoseconds since Jan. 1, 1970.
- Internal timer calculations in FXApp now use FXThread::time() and so on.
- FXCondition's wait() API now also waits a number of nanoseconds.
- Fixed tooltip on FX7Segment widget.
- Fixed document-comment in FXString.
- Added update handlers for FXTable row/column selection.
- Bug in fxrgbio fixed.
- Warning in FXWindow fixed.
- Added sample program for expression class.
- fxsleep() is now deprecated. Please stop using it!

March 21 - FOX STABLE 1.4.32

- Back-ported fixes for GCC 4.1 C++ Language Changes [Friend Injection].

February 10 - FOX STABLE 1.6.0 (Release Candidate 4)

- Updated FXRealSpinner. New API setGranularity() allows the values to stay at "nice round numbers".
- Logarithmic mode of FXRealSpinner also updated.
- Updated FX4Splitter. In case only one panel is collapsed, panel besides it will stretch to fit.
- Also fixed layout issue with FX4Splitter which inadvertently placed barsize worth of pixels on the side even if all but one panel was collapsed.
- Update FX4Spliiter's default size computation based on which panels are collapsed; this has gotten a bit complex now.

February 6 - FOX STABLE 1.6.0 (Release Candidate 3)

- Reconciled API inconsistencies between FXObjectList and FXArray.
- Added mimeType constant to FX***Image and FX***Icon classes for drag and drop and clipboard support.
- Added auto-repeat snapshot capability to shutterbug.
- Added auto-renumbering option for row and column headers in FXTable.
- Implemented no-navigation mode in FXFileDialog.
- Extra option for compression quality added to FXJPGImage and FXJPGIcon.
- Added missing FXAPI to codec declarations.
- Block generation of some callback messages if message is 0.
- Improved fxbmpio implementation by directly using FXStream's primitive types.
- Fixed issue with FXStat::touched().
- Added bunch of missing API's to FXTable to control row and column header appearance.
- Added ComboBox table item to enter a choice among a number of strings.
- Added FXExpression which contains a function to evaluate expression.
- Added Control-click mode to FXSpinner and FXRealSpinner.
- Adie shows number of rows in status bar instead of byte count.
- Wheel support in FXOptionMenu.
- The setValue() API in FXRuler now has value relative to document position.
- The setArrowPosY() and setArrowPosY() APIs in FXRulerView also relative to document position.

December 19 - FOX STABLE 1.6.0 (Release Candidate 2)

- Added FXRulerView widget. The ruler view coordinates the scroll bars and rulers to automatically adjust to the stated document dimensions and margin settings for a document- oriented workview. It is intended as a base class for an applications document drawing framework.
- Added FILELIST_NO_PARENT option to FXFileList to suppress '.' and '..' display in directory lists.
- Added extra field in FILETYPES binding for "change directory" and "run in terminal" flags.
- Optimized FXText continuous wrap mode layout update when using fixed-pitch fonts; this frequent scenario is quite a bit faster now; also greatly simplified layout handling in FXText.
- Fixed layout issues with LAYOUT_FIX_X and LAYOUT_FIX_Y in FXPacker, FXTopWindow, FXGroupBox, FXHorizontalFrame, and FXVerticalFrame widgets.
- Updated FXArray implementation; many API's added, a few dropped to so as to require no insert- or extract operators, or equality operators, on the contained items.
- Updated FXVec{2,3,4}{d,f} classes; changed many friend functions to members, added explicit declarations for remaining friend functions in preparation for GCC 4.1 C++-language-change.
- Small changes to FXQuat{d,f}. Some friend functions have become member functions.
- Updated xinc.h to accomodate broken prototypes on older unix machines with respect to input method support.
- Also simplified FXText layout logic.
- Fixed tons of warnings on SGI, HPUX, Solaris, OSF1, and Windows builds.
- Split FXComposeContext creation from construction. This is necessary as input method editor server may come and go.
- Updated FXHash class with a few additional API's to make it easier to look over all contents in the table.
- Added clearElms() API to FXElement.h.
- Fixed FXVisual getNumGreen() and getNumBlue() access functions.
- Expunged a number of FXbool in favor of bool.
- Speeded up fxloadBMP(), fxsaveBMP(), fxloadICO() and fxsaveICO() functions through use of byte-swapping capability of FXStream.
- Fixed typo in FXDebugTarget.
- Fixed problem in FXFile::removeFiles().
- Removed tons of warnings on Solaris builds.
- Turned off XIM by default until it works across the board.

November 29 - FOX STABLE 1.4.26

- Fixed SUN Solaris compile issue with threads.
- Missing fxcheckTIF(), fxcheckPNG(), fxcheckJPG() declarations if TIF, PNG, and JPEG support is stubbed out.

November 14 - FOX STABLE 1.4.24

- Fixed small issue in FXVec4{d,f} distance() routine.

November 9 - FOX STABLE 1.4.23

- Fixed compile issue with new GetOwnModuleHandle() function.
- Delete thread local storage key upon global destructor in FXThread.

Older News

Older news...

Copyright © 1997-2026 Jeroen van der Zijp