| News [Remove Frame]

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-2016 Jeroen van der Zijp