version 3.5.5 (2015-01-08)

  * ioninja: typo in SerialSession.onParityChanged ()
  * njscroll: bugfix: once record is hidden, it was impossible to un-hide it
    (even if filter were to return true) -- hidden bit was kind of sticky.
  * ioninja: add an option to disable terminal pane for stream sessions (as an
    performance tweak; plus it might also help to isolate problems when crashes
    occur)
  * ioninja: don't emit SerialStatusLineChanged event on
    IOCTL_SERIAL_GET_MODEMSTATUS, insteqd keep track of the latest status line
    and emit event only when some line actually chanes
  * njscroll: critical bugfix: incorrect destruct sequence in CacheMgr
  * ioninja: start log server suspended when opening log file
  * njscroll: support for starting server in suspended state, resume later.
    this is important for opening ioninja logs (before representer is set)
  * ioninja: change shutdown sequence (stop log server IO thread in the 
    beginning, but close record file in the very end)
  * njscroll: bugfix: NotifyCode_RebuildCompleted was never issued on amd64,
    resulting in hang-on-log-rebuild
  * ioninja: serial session port prop is now gui.StringProperty (without port
    list suggestion)
  * njscroll: bugfix: incorrect cursor advance when typing at the end of
    hex-pane
  * njscroll: bugfix: incorrect logic for changing console size
  * axl: use CLOCK_REALTIME_COARSE only if it's available (fallback to
    CLOCK_REALTIME otherwise -- older Linuxes don't have CLOCK_REALTIME_COARSE)
  * axl: make libudev optional (use find_path to determine whether libudev is
    installed and choose whether to build AXL wrappers for it).
    sys::lnx::SerialPortEnumerator simply returns a fixed list of devices if
    libudev is not available
  * axl: don't use C++ rtti typeid anymore
  * cmake: make GCC rtti optional and OFF by default
    using RTTI under GCC is really annoying. AXL used RTTI to get nicely
    formatted typenames, however under GCC typeid (T).name () gives a
    mangled name anyway. Even bigger issue is that it's impossible to derive
    from an interface class (with virtual functions) defined in a -fno-rtti
    library (and LLVM uses -fno-rtti by default, so it would require to rebuild
    LLVM with LLVM_REQUIRES_RTTI=1).
  * axl: bugfix: memory leak in cf::TypeRef::getDescription ()

...............................................................................

version 3.5.4 (2015-12-31)

  * axl: minor update re moving time functions to axl::sys namespace
  * axl: fsm subsystem is separated into a dedicated lib
  * axl: cf lib (Mac OSX Core Foundation Framework wrappers)
  * axl: iok lib (Mac OSX IOKit Framework wrappers)
  * ioninja: serial enumeration is implemented on Mac (using IOKit)
  * jancy: detect USB serial disconnect io.Serial implementation for POSIX
  * jancy: io_base.jncx should link to libudev
  * axl: sys::lnx::Udev classes
  * axl: sys::lnx::SerialPortEnumerator (via udev)
  * ioninja: terminal scrollback limit implemented (translates to
    Terminal::setHistoryLimit)
  * ioninja: gui.ComboBox.clear () method
  * ioninja: refresh com port list in both Serial and SerialMon sessions
  * ioninja: handling IoError in SerialSession (especially important during USB
    serial ports surprise removal)
  * ioninja: log error format change: (error-desc) -> : error-desc
  * njscroll: TerminalWidget history limit implemented
  * jancy: IoError event for various IO classes (particularly important for
    USB serial ports)
  * jancy: FileStream overlapped bugfix (potential lost of read blocks)
  * axl: serial port enumerator
  * njscroll: bugfix in TerminalWidget: terminal could crashed on invalid
    input due to unverified escRestoreCursor
  
...............................................................................

version 3.5.2 (2015-12-21)

  * ioninja: bugfix: File->Exit caused a hang
  * ioninja: dock state persistency fix
  * ioninja: font family should not be altered if it's not set properly
  * jancy: first add library, then do forcedExport
  * jancy: forcedExport did not check for addImport result
  * ioninja: mac dmg installer background image update
  * ioninja: update nj_io_mon to reflect the latest jancy change (.jncx is now
    .zip)
  * jancy: extension lib redesign: .jncx is now a .zip archive with .jnc
    source files and .bin dynamic library
  * axl: io::getTempDir
  * ioninja: add /d switch when signing installer (otherwise UAC displays some
    random tmp file name)
  * devmon: MSI installer fixes (did not work with UAC on)
  * axl: bugfix in AccessToken::getTokenInformation
  * jancy: remove jncx-info -- .jncx file is going to be a .zip archive
  * ioninja: installer can now execute nested MSIs
  * axl: zip read support (library axl_zip, class axl::zip::ZipReader)
  * ioninja: bugfix: installer did not ask to install Device Monitor if
    WinPcap feature was not selected
  * ioninja: rephrased installer message "XX-bit version already installed"
  * devmon: check for admin rights before admin-sensitive operations
  * devmon: update removeAllPnpFilters to ignore devices with no physical name 
    (yes, it might happen in win10)
  * axl: simple access token wrappers
  * axl: sid wrappers
  * ioninja: proper handling of SSH re-authentification (need to reconnect
    when user name changes)
  * ioninja: appearance settings (fonts & colors)
  * njscroll: bugfix: icon placement was calculated incorrectly
  * njscroll: also, icon placement must be updated upon font change.
  * njscroll: critical bugfix: fold record should nullify current line
  * ioninja: bugfix: Serial was using wrong settings on open (should use combo
    boxes, not properties)
  * ioninja: zip package on windows changed to 7z
  * ioninja: mac packages (tar & dmg)
  * unix tar packages now use xz compression
  * ioninja: mac app bundle support
  * jancy: bugfix: jancy.exe crashed on --help command line switch
    (--import-dir had missing value)
  * ioninja: bug fix: session menu was created too late (caused an occasional
    crash)
  * bugfix: QT toolbar buttons had background on MacOS X

...............................................................................

version 3.5.1 (2015-11-24)

  * ioninja: session link re-implemented (via dedicated Session Link dialog)

...............................................................................

version 3.5.0 (2015-11-20)

  introduces: Jancy dynamic extensions (.jncx); Jancy multi-line literals; 
  new Tibbo Device Monitor service for Windows with support for early attach 
  to PNP devices; Serial Monitor plugin uses new Tibbo Device Monitor; Jancy 
  compiles and runs on Mac OSX; 

  * jancy: io::Socket::open did not translate io::AddressFamily_Ip6 to AF_INET6
  * jancy: io::SshChannel did not report libssh2 errors properly (should use 
    libssh2_session_last_error)
  * ioninja: hex-view & plain-text icons resized to 20x20
  * all: port to MaxOSX
  * jancy: critical bugfix: using _alloca to determine stack epoch is not safe.
    turned out under certain conditions the first _alloca was above subsequent 
    _alloca's (initializeThread () also uses up some stack). so we better use 
    ExceptionRecordSnapshot pointer on stack, which is guaranteed to be above 
    any subsequent stack allocations.
  * all: add -fPIC to all libraries. on amd64 gcc refuses to build shared 
    objects unless all used static libraries are compiled with -fPIC. so, let's 
    add -fPIC to all static libraries (libssh2/openssl for amd64 were also 
    rebuilt with -fPIC)
  * ioninja: include .jncx extensions into deb & rpm package
  * ioninja: don't automatically add scipts/api to import path (rather, use
    paths.conf -- it's more consistent and more flexible)
  * ioninja: if server process terminates normally, just wait (rather than
    abruptly cancel pending requests -- this might result in losing compile
    error messages)
  * axl: allow read from SharedMemoryTransport even after remote disconnect
  * ioninja: add io_base.jncx. io_pcap.jncx and io_ssh.jncx to tar package
  * ioninja: premature termination of ioninja-server should report some error
    (before it was "no error")
  * ioninja: . in paths.conf should refer to conf dir, not to bin dir
  * axl: no need to have pvoid_cast (int) specialization on gcc
  * all: Version.h.in -> version.h.in
  * ioninja: msi and zip packages include tdevmon.msi and extensions:
    io_base.jncx , io_pcap.jncx, io_ssh.jncx, io_pcap.jncx
  * devmon: disable damn OACR in wdk build
  * ioninja: serialmon bugfix (m_dataSize was not set)
  * ioninja: SrvLib was not really added to module (printf/trace were not 
    linked properly)
  * ioninja: serialmon had missing JNC_BEGIN_CALL_SITE around jnc::rt::memDup
    also, it's necessary to protect m_eventParamArray against race conditions
    in enumOpaqueGcRoots (we use JNC_BEGIN_CALL_SITE for that)
  * sh: devmon added to build scripts
  * ioninja: switch from old tdevmon to new tdevmon
  * ioninja: error propagation in shared extension lib nj_io_mon.jncx
  * jancy: error propagation in shared extension libraries io_*.jncx
  * devmon: cmake prefix change: DM_xxx -> DEVMON_xxx
  * axl: err::ErrorHdr& -> err::ErrorHdr*
  * devmon: forced stop support (for uninstall/reinstall). in case safe stop
    is not possible, service is still stopped (but the driver actually remains
    in memory in limbo state (reboot is required)
  * devmon: prevent unsafe filter device stoppage even in debug build
    (otherwise it's difficult to test release-expected behaviour)
  * devmon: critical bugfix in FilterDevice_dispatchCreate: caused a BSOD for
    non-exclusive devices.
  * devmon: msi package executes tdevmon.exe to perform necessary service
    actions (create, start, stop etc)
  * all: version.h.in VERSION_FULL is now defined as MAKELONG (MAKEWORD
    (VERSION_REVISION, VERSION_MINOR), VERSION_MAJOR)
    this is to allow specifying version in a natural way (2 hex digits for each
    version part, e.g.: 0x10203 --> 1.2.3)
  * devmon: critical bugfix: m_exclusiveFileCount did not account for initial
    ObDereferenceObject
  * axl: class sys::win::Process; sys::win::syncExec ()
  * devmon: MSI package prototype
  * devmon: driver signing (now that the new Tibbo code-sigining installed)
  * devmon: listing devices (all or devices of specified class)
  * devmon: getting device info
  * devmon: installing/removing PNP filters using physical device name or device 
    class
  * devmon: removing PNP filters for all devices
  * axl: support for enumerators in sys::win::DeviceInfo
  * devmon: starting and stopping core service should also update service start
    type
  * devmon: stats for PNP beacon device
  * devmon: proper propagation of DeviceType and DeviceCharacteristics in both
    FilterDevice and PnpDevice.
  * devmon: major update: support for early pnp device attach via pnp filter
    driver tdevmonp.sys
  * axl: setupapi wrappers (sys::win::DeviceInfo)
  * axl: better overlapped IO support in io::win::File/io::win::FileHandle
  * devmon: application displays driver version, description and build time
  * devmon: all the binary data of read/write/ioctl requests is displayed in 
    hex-view
  * devmon: supports for driver description, build time and asynchronous reads
    in client library
  * devmon: build driver with cmake (invokes WDK build as custom command)
  * devmon: handle IRP_MJ_INTERNAL_DEVICE_CONTROL
  * devmon: don't copy extra bytes besides the header on 
    ntm_NotifyFlag_InsufficientBuffer
  * devmon: provide information on driver description and build time
  * axl: mt::win::WaitableTimer
  * devmon: initial release of the new device monitor (driver, library and
    application)
  * cmake: WDK support
  * ioninja: old njdm (device monitor) is removed
  * axl: sys::win::Service/ServiceMgr wrappers for SCM
  * jancy: multi-line literals
  * enumeration of source files in extension libraries.
  * axl: mt::DynamicLibrary method renames (load -> open; release -> close)
  * axl: add pvoid_cast specialization for int (othersize it was impossible to
    use pvoid_cast (NULL) on 64-bit systems)
  * ioninja: remove lib-prefix from jancy extension io_mon.jncx
  * jancy: remove lib-prefix from jancy extensions io_base, io_pcap, io_ssh
  * axl: remove extern "C" from AXL_EXPORT macro (must specify it explicitly)
  * ioninja: link jnc.stdLib explicitly
  * jancy: stdLib must be linked explicitly due to the link-order importance
  * jancy: llvm tag decoration bugfix.
  * ioninja: migration to the new jancy extension model
  * jancy: jnc::rt::RuntimeRef -> jnc::rt::Runtime (opaque in shared 
    extensions)
  * jancy: jnc2cpp.pl is made public
  * jancy: minor bugfixes in jnc_io_base jnc sources.
  * jancy: major extension framework redesign; now suitable for shared 
    libraries as well.
  * axl: rtl->sl (bad naming, besides, rtl is now used in jancy lib, and there
    it really means run-time-support-lib)
  * jancy: extension framework is somewhat functional
  * axl: bugfix in rtl::StringSlice::isEmpty
  * axl: GUID_Xxx -> g_xxxGuid
  * axl: minor improvements in rtl::StringCache
  * axl: rtl::BoxList::copy ()
  * axl: rtl::StringSlice

...............................................................................

version 3.4.11 (2015-09-25)

  * ioninja: save-session and load-session are functional
  * njscroll: better to make renameRecordFile copy the file (on Windows it's
    not possible to remove FILE_FLAG_DELETE_ON_CLOSE flag unless using
    undocumented methods)
  * bugfix: io::MappedFile::write did not update m_fileSize.
  * ioninja: remove unlink for CmdLineFlag_TmpLogFile (now it's done
    automatically in njs::Server
  * njscroll: support for io::FileFlag_DeleteOnClose (also on POSIX)
  * njscroll: extra file flags argument for rename record file method
  * njscroll: support for layer removal
  * support for record file renaming
  * njscroll: njs::LayerMgr::removeLayer ()
  * axl: io.renameFile (), io::copyFile (), io::deleteFile ()
  * axl: io::MappedFile::write method (uses io::File::writeAt)


...............................................................................

version 3.4.10 (2015-09-23)

  * ioninja: serial session: all serial settings are available via toolbar
    combo boxes
  * ioninja: pass plugin and log settings via temporary files during document
    creation
  * njscroll: additional BinDataConfig argument in njs::Server::create ()
  * ioninja: bugfix: gui::ComboBox::setCurrentIndex did not update value field
    m_currentIndex
  * axl: io.TemporaryFile (on windows uses FileFlag_DeleteOnClose, on POSIX
    deletes file in destructor)
  * ioninja: setting for gc-safe-point method (write-barrier vs simple-call)
  * jancy: support for simple gc-safe-points via call (rather than write
    barrier). write barrier safe points are not currently possible on win64 
    because SEH 64 relies on being able to walk the call stack, and it doesnt 
    work with llvm-jitted functions
  * jancy: critical bugfix in linux garbage collector
  * jancy: system V on amd64 incorrectly passed 128-bit structures
  * ioninja: support for redirecting of dbg::trace to ioninja-server-log
  * axl: support for redirection of dbg::trace to a file
  * axl: io::SharedMemoryTransport uses io::Mapping directly (without the
    overhead of io::MappedFile)

...............................................................................

version 3.4.9 (2015-09-16)

  * jancy: critical bugfix: crash on windows 10 due to different base address 
    of ntdll.dll (__chkstk was too far, more than 4GB away from the generated
    code, therefore relative call was not possible)

...............................................................................

version 3.4.8 (2015-09-14)

  introduces: new Jancy pointer safety model; new Jancy garbage collector
  implementation; support for retro-colorization in Ninja Scroll engine; 
  Syntax Highlighter plugin wizard in IO Ninja; new setting UI in IO Ninja

  * ioninja: apply method for Jancy Settings page
  * ioninja: set acceleration=true for large-value spin-boxes
  * jancy: setters for stack size limit, gc heap size trigger and gc period
    size trigger
  * ioninja: Colorizer plugin wizard is now called Syntax Highlighter plugin
    wizard; by default it generates a full C-language syntax highlighter 
    including keywords, comments, and literals.
  * jancy: bugfix: accessing autoget property field of parent class did not
    work
  * jancy: improvement: allow non-closure-aware function ptr casts
  * jancy: jnc.AutomatonFunc typedef
  * jancy: function ptr type should update its signature on calc-layout.
  * jancy: minor bugfix in qt_test syntax highlighters
  * jancy: remove pseudo-chars ^/$ from jnc.Recognizer
  * axl: remove pseudo-chars ^/$ from FSM (was not an efficient implementation
    anyway)
  * ioninja: serial mon session now has filters for serial setting changes,
    serial control line changes, serial status line changes.
  * ioninja: show session settings by default when a session is open
  * jancy: JNC_END_CALL_SITE should only leave no collect region if no
    exception happened (otherwise gc shadow stack might contain invalid entries
    which will lead to crash)
  * ioninja: colorizer plugin wizard
  * ioninja: bugfix: protocol analyzer wizard used incorrect automaton
    declaration
  * njscroll: retro-colorize should redraw all the affected lines (previously
    only the last line was redrawn)
  * ioninja: colorization of protocol headers in network sniffer
  * ioninja: retro-colorize support
  * jancy: support for line continuation sequences in regexp literals
  * axl: support for line continuation sequences in FSM compiler
  * njscroll: bugfix: retro-colorize should drop
    CacheBinLineFlag_FinalAttrArrayReady
  * jancy: bugfixes in jnc.Recognizer: updating currentOffset should
    synchronously update lexemeOffset and currentOffset
  * jancy: changing lexemeLengthLimit didn't update lexeme buffer accordingly
  * njscroll: retro-colorization support
  * njscroll: bugfix: addPartBuffer did not properly update longest line
    length if lines were unmerged
  * njscroll: RepresenterTarget::writeRecord for strings.
  * ioninja: toolbar button binary data view switch
  * ioninja: critical bugfix: call-function-in-worker-thread req entry must be
    removed INSIDE jancy call site -- otherwise FunctionPtr might be deleted
    during gc-mark
  * ioninja: rebuild log progress dialog
  * ioninja: critical bugfix in all io-related classes: waiting functions
    should be enclosed in gc-wait regions (deadlocks otherwise)
  * ioninja: bugfixes in dialog classes construction
  * njscroll: rebuild log progress notifications
  * njscroll: remove half-impltemented colorizer architecture
  * jancy: JANCY_CALL_SITE_FINALLY
  * axl: AXL_MT_LONG_JMP_FINALLY
  * ioninja: bump up the size of setting dialog
  * ioninja: under kubuntu page area of setting dialog was too small to 
    accomodate the minimum size of some pages
  * jancy: bugfixes in jnc::callFunction/jnc::callFunctionPtr
  * axl: remove mulDiv64 -- (bad performance and non-amd64 compatible); use
    simpler and faster approach with cast-to-double.
  * ioninja: jancy settings page is functional
  * ioninja: gc trigger sizes/stack limit size are being passed in command line 
    and in setJancySettings msg
  * ioninja: gc stats is being collected by ioninja-server and displayed on 
    jancy  settings page.
  * jancy: gc alloc size trigger
  * jancy: gc stats is available.
  * njscroll: use axl::g::getPreciseTimestamp for log record timestamps and
    for profiling
  * axl: critical bugfix re timestamps on windows: now there are 
    axl::g::getTimestamp () using GetSystemTimeAsFileTime and 
    axl::g::getPreciseTimestamp () using QPC
  * ioninja: no need to unparent property widget in ~SettingDlg
  * ioninja: major update: new settings dialog
  * ioninja: all objects created by layers now consolidated and can be removed
    all together
  * ioninja: remove-layer and remove-all-layers are functional
  * jancy: markOpaqueGcRoots func should be a member function rather than
    static
  * jancy: improvement/simplification in weak function/property pointers: weak
    mask is gone -- only 'this' arg can be made weak
  * jancy: no weakening-operator is required now
  * jancy: scheduled function pointers are properly weak-traced now.
  * ioninja: better design for main thread scheduler (as dedicated opaque
    class)
  * jancy: add TypeFlag_GcRoot if class type has mark opaque gc roots func
  * ioninja: major redesign: each plugin has its own runtime (now it's
    possible to remove plugins one-by-one)
  * jancy: jnc::construct/jnc::destruct moved to axl
  * jancy: rename JNC_BEGIN/JNC_END to JNC_BEGIN_CALL_SITE/JNC_END_CALL_SITE
  * jancy: JNC_BEGIN_CALL_SITE_NO_COLLECT for creating non-collectible call 
    sites
  * jancy: support for direct function calls (when already inside call site)
  * axl: memory allocation and ref-counting model redesign:
  * axl: factories are gone (were poorly designed anyway)
  * axl: support for easy switching of base allocator
  * axl: support for constructor arguments (!)
  * axl: switch from explicit destruct function pointer to virtual destructor 
    in RefCount
  * axl: decrease of size for child and in-place RefCount objects
  * ioninja: minor api redesign: use opaque class fields instead of pointers
    wherever possible (before it was impossible to instantiate opaque classes
    as variables or fields)
  * ioninja: remove FileDlg, LoginDlg etc dialogs from plugin host (should be 
    created by plugins as needed)
  * jancy: bugfix: reactor layout could not be calculated due to the bug in
    lookupIdentifierType -- variable or field always yielded DataRef (for
    classes should be ClassRef)
  * jancy: ApiBase <T> --> ApiBaseTailPadding <T>; this is to allow arguments 
    in base constructors.
  * ioninja: don't allocate log on gc-heap (it's static anyway)
  * jancy: critical bugfix: new (p) T () -> new (p) T
  * jancy: prevent zero-initializing already-primed headers
  * jancy: allocate large structs/unions/arrays directly on the gc-heap
  * jancy: minor bugfix: in multi-declarator declarations with implicit storage
    specifier, the first deduced storage specifier was used for all the other
    declarators (without re-evaluation)
  * ioninja: bugfixes and updates re io object on POSIX
  * jancy: bugfixes and updates re GC on POSIX
  * axl: mt.atomic functions for size_t on POSIX
  * ioninja: minor bugfix in io.Ssh: 64-bit size_t <-> int cast
  * ioninja: prevent unnecessary setError in Ssh::write ()
  * ioninja: major cleanup of api prime/construct calls
  * jancy: ApiClassBox is gone; ClassBox does not implicitly call constructor
  * ioninja: major update of all the API re latest jancy change in opaque
    classes design
  * jancy: major opaque class redesign: allow deriving from opaque classes,
    allocation as variables or fields etc -- basically, opaque classes are now
    just like normal classes but with opaque padding. 'operator new' is gone.
  * axl: minor StringCache bugfixes
  * jancy: bugfix: variable declaration for non-creatable types caused a crash
  * ioninja: bugfix: exception in log representer caused in 'result' being
    used without initialization
  * ioninja: critical bugfix: jancy exception in plugin constructor lead to
    deadlock (mutator thread has been not unregistered)
  * jancy: callFunction uses new axl-mt-long-jmp-try
  * jancy: JNC_END_EX returns status (so JNC_CATCH can be in many cases omitted)
  * jancy: more strict checks on ExceptionRecoverySnapshot.
  * axl: long-jmp-try can now return status via AXL_MT_END_LONG_JMP_TRY_EX (so
    AXL_MT_LONG_JMP_CATCH can be in many cases omitted)
  * jancy: exception recovery snapshots
  * jancy: handle destructor exceptions individually.
  * ioninja: remove debug printf's from io_PCapDeviceUi.jnc
  * jancy: memory leak in jnc.StringHashTable and jnc.VariantHashTable
  * ioninja: bugfix: no collect regions in Serial::fireSerialEvent and
    PCap::firePCapEvent
  * jancy: major update: multicasts & snapshots now use gc heap only instead
    of malloc/free (in-destructors)
  * ioninja: bugfix: serial log had skipped trailing argument in formatting
    literal
  * jancy: disallow argument skipping in formatting literals
  * jancy: formatting literal improvements: remove special gc handling (use
    fat pointer instead)
  * jancy: check for unused formatting literal arguments
  * axl: minor fix re io.UsbDevice on amd64
  * jancy: optimized method addRootArray for adding continual regions of roots
  * ioninja: major update of all api implementation classes re latest jancy
    changes
  * jancy: majort redesign of garbage collector and pointer-related structures
  * axl: minor update of mem-tracker report format
  * jancy: allow nested JNC_BEGIN-s (keep thread init count in tls)
  * ioninja: all the plugins compile
  * jancy: markStackGcRoot accepts target scope
  * jancy: StdFunction_CreateDataPtrValidator
  * jancy: jnc.memDup
  * jancy: LeanDataPtrValidator from class ptr
  * jancy: create reactor bindsite variables in entry block
  * ioninja: minor serial log colorization fix
  * axl: io.UsbDevice cleanup of 64-bit incompatibilities

...............................................................................

version 3.4.7 (2015-09-07)

  * axl: undo broken QPC implementation of timestamps

...............................................................................

version 3.4.6 (2015-07-16)

  * ioninja: devmon32 caused crash on installation -- replaced with the stable
    one from ioninja-2.3.5
  * ioninja: minor serial log colorization fix
  * axl: io.UsbDevice cleanup of 64-bit incompatibilities
  * changelog: force re-generation of changelog.txt every time
  * axl: err::SystemErrorCode_ObjectNameNotFound->ENOINT
  * axl: minor bugfix in hex-encoding
  * jancy: support for binary numbers and binary-literals (token is still
    called HexLiteral -- it yields the same results in all regards)
  * axl: improvements in libusb support; extended test for libusb enumeration
  * axl: minor update in ref::Buf (use pointers instead of references)
  * jancy: bugfix: formatting literals did not handle int64/uint64 properly
  * axl: high-resolution timestamps on windows (GetSystemFileAsFileTime proved
    to be way imprecise)

...............................................................................
    
version 3.4.5 (2015-06-23)

  * ioninja: bugfixes in scripts (re moving network adapter UI from API to
    common)
  * ioninja: updates re IP-defragmentation in all pcap-based plugins (Network
    Sniffer, TCP Flow Mon, UDP Flow Mon)
  * jancy: bugfix: deleteUnreachableBlocks used llvm::Value::hasOneUse () while
    it should have used llvm::Value::use_empty ()
  * jancy: bugfix: logical or/and should promote reachability flag BEFORE 
    compiling the second operand.
  * jancy: bugfix: struct/union member functions did not work (due to
    incorrect lean this-pointer)
  * jancy: bugfix: locally declared named types did not work (due to missing
    calc-layout)
  * ioninja: tcp-flow-mon, udp-flow-mon plugin updates
  * ioninja: hide "add new layer" button (not relevant now)
  * ioninja: gui.ComboBox crashed on addEditTextToHistory with null-string
  * ioninja: io.PCap.openFile
  * ioninja: ip4 header fragmentation fields
  * axl: io::parseSocketAddress with empty string now yields zero'ed ip4
  * axl: io::PCap::openFile
  * jancy: jnc.List class
  * jancy: jnc.StringHashTable, jnc.VariantHashTable
  * jancy: bigendian bitfield support
  * ioninja: context menus for hex-edit & terminal widgets
  * bugfix in context menu (mouse-drag was not released)
  * njscroll: improvements in undo/redo: sanity checks, clear/setData/writeData
    registers with transaction history, caret update post setData/clear
  * njscroll: undo/redo in hex-edit widget
  * njscroll: select word on double-click
  * axl: don't disply 0.0.0.0 when formatting IPv4 address (display port only)
  * ioninja: Displaying update error message in About dialog in a single line.
  * ioninja: Displaying error description in About dialog when update fails.

...............................................................................

version 3.4.4 (2015-06-08)

  * ioninja: bugfix: test code in MainWindow::onHelpAbout caused a crash
  * ioninja: update session to reflect recent jancy change re dynamic
    sizeof/dynamic countof
  * ioninja: serial session improvements
  * ioninja: gui.ComboBox.adjustSizeToContents method
  * jancy: dynamic sizeof/dynamic countof now require pointers rather than
    references
  * ioninja: serial: only report when current value is different from the
    previously reported one
  * jancy: bugfix: variantRelationalOperator did not work
  * njscroll: timestamp visibility setting (never, smart, verbose)
  * njscroll: add CursorFlag_EnsureVisible when setting cursor on mouse move
    (very useful when selecting data in big log so it's possible to jerk mouse
    around to scroll)
  * axl: force english for windows error description (otherwise it causes
    problems with chinese windows and njscroll log engine)
  * ioninja: change log update, website update
  * ioninja: rollback defaults of auto-convert single lf/single cr to lf/cr
    pair to FALSE (just wasted almost an hour trying to figure out why mc
    doesn't work in ssh session)
  * njscroll: bugfix: xterm saved cursor and caret attr should be part of
    screen buffer
  * njscroll: bugfix: invalid bin line size was used in cache processors (bug
    introduced with recent changes in unicode drawing)

...............................................................................

version 3.4.3 (2015-06-01)

  introduces: TCP Flow Monitor, UDP Flow Monitor, proper display of unicode 
  characters spanning across line borders, member operator for jancy enums

  * axl: release 5.3.7
  * jancy: release 1.5.5
  * ioninja: rollback defaults of auto-convert single lf/single cr to lf/cr
    pair to FALSE
  * njscroll: bugfix: xterm saved cursor and caret attr should be part of
    screen buffer
  * njscroll: bugfix: invalid bin line size was used in cache processors (bug
    introduced with recent changes in unicode drawing)
  * jancy: adjust function tag of std functions memcpy, memset, strlen etc as
    to avoid mapping conflicts
  * jancy: use zeroInitialize rather than store for stack variables
  * jancy: add memset, memcpy, memmove to global mapping (required by llvm
    intrinsics)
  * jancy: bugfix: getMemberOperatorResultType () and memberOperator () should
    use OpFlag_KeepEnum when preparing operand (now that we have enum member
    operators for simplified enum value checking)
  * jancy: remove explicit cast requirement for integer truncations (it's
    really annoying)
  * ioninja: tcp-flow-mon explicit cast size_t->uint32_t
  * jancy: bugfix: using enum constants from within the same enum caused
    calc-layout recursion error
  * jancy: bugfix: deleteUnreachableBlocks might have lead to situation when
    block is marked unreachable but still had uses. changed to a fixed-point
    computation to delete unreachable blocks in proper order
  * jancy: llvm.memcpy, llvm.memset, llvm.memmove
  * zero-initialize large variables with llvm.memset (rather than store)
  * jancy: member operator for enums (allows skip writing fully-qualifed
    member names when you need to check the value of a enum variable/field)
  * ioninja: tcp flow monitor/udp flow monitor icons from leo
  * ioninja: change the size of buffer back to 1600 (apparently, windows does
    not reassemble IP-fragmented datagrams, so it doesn't really matter)
  * added minhook library and test (for api hooking in ioninja)
  * cmake: create_flag_setting improvements: modify both C and C++ flags
  * automatically detect configuration-independent/configuration-specific
    flags.
  * ioninja: change min/max packet size limits to 0..65536
  * ioninja: tcp flow mon session: support for out-of-order TCP segments
  * ioninja: udp session: read buffer should be 65535
  * udp flow mon sessions: read buffer should be 1600 (no IP fragmentation
    supported yet)
  * ioninja: bugfix: sniffer session did not handle invalid UDP/TCP sizes
    properly
  * ethernet frame buffer was too small (should be 1600)
  * ioninja: filter combo in sniffer
  * bugfix in tcp flow mon
  * ioninja: re-arrange plugin groups (UDP is now client, TCP proxy is now
    server)
  * axl: io::SockAddr::parse also accepts single port string (results in IPv4
    with zero-ed address)
  * ioninja: UDP flow monitor
  * axl: bugfix: rtl::String::insertSpace did not work properly on libc
    (memcpy vs memmove)
  * ioninja: TCP flow monitor (uses pcap to build clean TCP data flow log)
  * axl: SockAddr utils for equality checking and filter matching
  * ioninja: clean-up of test code in ioninja-server
  * ioninja: support for job objects (turns out to be unreliable and have *a
    lot* of corner cases)
  * support for waiting for parent object, so any of the following will
    terminate server process: 1) disconnect message or 2) shared-memory
    transport disconnect or 3) parent process finished
  * axl: mt::win::JobObject wrapper
  * ioninja: prevent windows crash & send report dialog when ioninja-server
    crashes
  * ioninja: remove windows-vs-linux closeKind configuration (always use
    SO_LINGER)
  * axl: test_mini simple socket test re graceful close/reset
  * ioninja: bugfix: doc.Storage incorrectly saved empty strings (as '(null)'
    values)
  * ioninja: --root flag was ignored
  * ioninja: sniffer session should use device name if description is null
  * jancy: strdup should return null for empty strings
  * ioninja: bugfix: socket property disconnectKind (graceful/reset) did not
    work
  * ioninja: disconnect message (rather than waiting for stdin to be closed)
    reading stdin interferes with the new design of gdb debugging
  * ioninja: major redesign of debugger interface: instead of initially 
    staring ioninja-server in suspended state to give gdb a chance to attach 
    and resume it later, we now start gdb directly. communication with gdb is 
    supposed to be done via TCP port passed in a command line (e.g. -d=1234).
  * njscroll: pending cursor validation (when we set cursor into an un-cached
    area)
  * njscroll: don't scroll to bottom on resize unless the vertical scroll bar
    is maxed (before it was cursor based, which was really annoying)
  * njscroll: bugfix in CacheBinHexLine::addBinData: now we need to manually
    check if the line is full (and if yes, then try to fill extra utf bytes)
  * njscroll: let BinLine decide the size of accepted chunk (bin hex lines did
    that outside of addBinData, which now is wrong cause we want to save extra
    bytes past end-of-line for better UTF display)
  * njscroll: save up to 3 extra bytes in bin-hex lines (may help with proper
    UTF display)
  * ioninja: add changelog to windows packages zip/msi
  * ioninja: changelog
  * jancy: major bugfix: const 64-bit integer arithmetics used 32-bit
    operations (potentially resulting in garbage in high bits of results)
  * axl/njscroll: update in unicode bintext painting: use buffer past 
    end-of-line (if available) to correctly display characters which are 
    encoded acroll line boundaries
  * ioninja: CMakeLists.txt had qt rpath-link added twice (removed old one)
  * ioninja: website and article updates
  * cmake: remove rpath when compiling release unix binaries
  * that also requires manually adding rpath-link (otherwise linker failes
  * to build qt-dependent binaries)
  * axl: warning suppression for gcc64
  * ioninja: debian package depends field
  * debian dependency calc perl script
  
...............................................................................

version 3.4.2 (2015-05-13)

  * don't try to display utf combining marks in hex-view and hex-editor (it 
    turns into a mess anyways)
  * bugfix: merge threshold didnt work as expected (milliseconds were
    not converted to 100-nanoseconds)
  * bugfixes re suspended/resume states under linux
  * bugfix: removing packet template crashed ninja
  * 3 extra std log record codes (plain text, hyper text, bin)
  * msvc redistributables were not included in zip packages
  * jancy: critical bugfix in checkVariantScopeLevel re TypeFlag_StructRet

...............................................................................

version 3.4.1 (2015-05-06)

  * jancy: critical bugfix: gc root variables should be zero-initialized even
    if they have initializer (cause initializer can induce gc-run)
  * jancy: critical bugfix: variant should have TypeFlag_StructRet (otherwise
    it results in invalid argument/retval ABI)

...............................................................................

version 3.4.0 (2015-05-05)

  introduces: IPv6 support, named regexps and standard character classes in 
  automatons, variants, dynamic library access, SSH session re-authentication, 
  x-term changeable terminal console size

  * bugfix: scripts did not compile under x64 due to size_t->int cast (made
    cast explicit)
  * jancy: critical bugfix in gc (due to typo destructGuards of other threads
    were not marked)
  * jancy: null default for automatonFunc in jnc.Recognizer constructor
  * remove extra space from labels like "Address: " (now toolbar injects space
    widgets)
  * minor updates/bugfixes in jnc.Recognizer
  * jancy: bugfix: member automatons produced compile error (did not take
    'this' into account)
  * axl bugfix: RegExpCompiler skipped repeat-char after ')' 
  * jancy: recognizer samples updates
  * jancy: update re new regexp engine: AutomatonResult type (to distinguish 
    between error and stop)
  * support for named regexp definitions in automatons
  * major regexp engine improvements: support for ^ $ anchors
  * support for std char classes \w \W \s \S \d \D \h \H
  * tcp plugin, ssh plugin -- minor updates in log record logic
  * size hints for toolbar combo boxes
  * forced spacings before toolbar labels and combo boxes
  * network adapter properties update in all plugins
  * AF_INET and AF_INET6 constants are exported into script namespaces
    (AF_INET6 is platform-dependent)
  * jancy: support for export of constants into script namespace
  * change 'debug-info' switch to 'debug'
  * jancy: bugfix: debug info for variant type
  * IPv6 support
  * IPv6 support updates: socket fixes, host name resolving, network
    adapter enumeration
  * adjust property grid drop-down width using QComboBox::sizeHint
  * linux fixes re latest socket changes
  * struct SockAddr as union of sockaddr_in and sockaddr_in6
  * replace all out args of type sockaddr* with SockAddr* (preparation for IPv6
    support in ninja)
  * network adapter enumeration
  * comply with WSAAddressToStringA on windows (or with inet_ntop otherwise)
  * IPv6 parsing and formatting linux fixes
  * IPv6 address parsing and formatting
  * jancy: check variant scope levels
  * throw long-jmp exceptions if library function is called from within
    non-throwing scope
  * check pointer should either soft-throw or long-jmp-throw (ignore try
    operators)
  * full-clear runtime in Runtime::destroy (caused crashes)
  * mt.win.Library fixes
  * remove duplicate strings in dynamic library error messages
  * jnc.Library uses axl.DynamicLibrary, works on Windows and POSIX
  * mt.DynamicLibrary class
  * update tar-building scripts to remove '.'
  * jancy: major update: unsafe functions, unsafe regions, dynamic libraries
  * jancy: declarator syntax update (so it's possible to use 'throws' and
    'const' modifiers in any sequence)
  * SSH channel improvements: re-authenticate, console size change handling
  * jancy: std function jnc.throw ()
  * jancy: bugfix: cast from variant did not handle null variant
  * gui.LoginDlg, gui.MessageDlg
  * remove 'object' (use 'class' instead) and 'object <T>' (use
    'variant' instead)
  * jancy: variant relational operator (at runtime)
  * jancy: allow casts non-POD* --> POD thin*
  * jancy: make variants, structs, unions and arrays nullable (assigning null
    means zero-initialize)

...............................................................................

version 3.3.3 (2015-03-31)

  * bugfix: crash during binary transmit page destruction due to incorrect
    destruct order
  * enforce min and max sizes in HexEditWidget::setData
  * bugfix: unexpected jump to the next location when opening find dialog
    with something selected in log
  * bugfix: memory leak fix in Array::reserve
  * find dialog improvements
  * support for copying into string/array rather than clipboard
  * bugfix in property factory (properties were not deleted)
  * re-organize packet template widget
  * only update properties within modification range
  * hex edit widget dataChanged event now contains info about modified range
  * jancy: variant support in formatting literals
  * jancy: variant type basic functionality implemented
  * jancy: remove jnc_VariantType.h
  * typo in copy/paste/undo/redo shortcut handling
  * bugfix: packages did not include packets.conf

...............................................................................

version 3.3.2 (2015-03-16)

  * jancy: increase default stack limit (turned out jancy dialog sample failed
    with stack overflow on amd64)
  * axl: support for catchless long-jmp try
  * jancy: c++ exceptions replaced with long_jmp-based exceptions
  * axl: long_jmp-based exceptions (jancy: hard-throws do not work well with
    c++ exceptions)
  * cmake: fix CMP0043 warnings on newer CMake versions
  * jancy: critical bugfix in pointer arithmetics: increment of fat pointer
    was broken after pointer struct unification
  * jancy: remove thin-vs-fat varieties of check-ptr functions (doesn't work
    well under x64)
  * support for post-compile LLVM IR emission
  * jancy: namespace stack should also contain scope field (otherwise
    evaluateAlias nullifies current scope -- it opens namespace, in which alias
    was declared)
  * jancy: should also null-check class pointers before accessing vtable
  * jancy: property ptr vtable loads should add PtrTypeFlag_Safe to function
    pointers
  * jancy: all vtable entries should have PtrTypeFlag_Safe
  * jancy: also null-check thin function and property ptrs
  * jancy: null ptr checks use soft-throws if possible
  * jancy: function ptr and property ptr structs are the same for all pointers
    (cast is done at pointer access)
  * jancy: data ptr range checks use soft-throws if possible
  * jancy: data pointer struct is now the same for all pointers (cast is done
    at pointer access rather than pointer check)
  * jancy: prevent throw loops (catch label marks scope as non-catching)

...............................................................................

version 3.3.1 (2015-03-06)

  * important bugfixes in automaton functions
  * IDE plugin wizard updates
  * support for hex-code escape sequence in regexp \x00
  * DFA should use accept context of the NFA state with the lowest ID
  
...............................................................................

version 3.3.0 (2015-03-04)

  Introduces: automatons and recognizers, IDE wizards, import facilities

  * recognizers and automaton functions
  * IDE plugin wizards updates re automaton functions
  * IDE session plugin wizard is functional
  * bugfix: API slot conflicts
  * doc.Plugin.transmitString method
  * log.Writer should be allocated on heap, not on stack
  * jancy: std functions: strcat, strdup, memdup
  * bugfix: conflict between std api slots vs user api slots
  * jancy: bugfix: member automatons did not account for 'this' argument
  * jancy: minor update in comments in recognizer sample
  * jancy: test sequence fix
  * jancy: minor gcc fixes
  * jancy: bugfix in CallConv64::createArgVariables ()
  * jancy: automaton samples (plus minor bugfixes)
  * axl: err::getError --> err::getLastError
  * axl: rtl::AutoPtrArray update
  * jancy: on linux gc-stratgy requires stack module before JITting
  * jancy: eof handling in recognizers
  * jancy: major update: automaton functions
  * axl: fsm library (finite state machines)
  * minor updates in protocol analyzer wizard
  * log.attachConverter accepts extra representerFunc argument
  * jancy: allow implicit casts void* to char* and to uchar_t*
  * minor updates in scripts and wizards
  * jancy: memchr, strchr is changed to return char*
  * Cast_Array should have OpFlag_LoadArrayRef (for now, to be removed later)
  * jancy: const-cast for arrays
  * allow implicit casts between integer types of the same size
  * udp socket compass button
  * jancy: minor updates in stdFunction.jnc and stdTypes.jnc
  * jancy: update in jnc2cpp.pl: support for namespaces so io ninja IDE can
    properly add standard items
  * plugin default settings should also be used when creating session
    by plugin file path
  * udp session: auto-switch remote address setting
  * paths.conf update: user-plugin-dir
  * debug trace support
  * fixes regarding failed add-layer
  * udp session: uses std log record codes TX & RX
  * updates re latest jancy changes
  * layer IDE wizards (answering machine and protocol analyzer) are finally
    functional
  * jancy: remove current thread module dependencies
  * operator new takes extra type* parameter
  * extra std functions for memory ops
  * bugfixes in pointer diff operator
  * jancy: mark heap allocations in new operator as temp stack roots
  * bugfixes regarding plugin open process
  * msi fixes in Add/Remove Programs entries
  * bugfix in PacketPad.jnc creation
  * minor gcc vararg fix
  * all plugins use import facilities to reduce compilation time
  * log representer is now a function rather than class (to enforce its
    stateless nature)
  * jancy: optional types and functions in API declarations
  * minor modifications in imports implementation
  * jancy: import declaration
  * setData checks for minDataSize
  * bugfix in CMakeLists.txt tests
  * improved logic for backspace from hex0 + cursor4bit
  * major redesign of packet templates
  * HexEditWidget bugfix in replaceSelection
  * HexEditWidget bugfixes in setDataSizeLimits
  * bugfixes and improvements in HexEditWidget
  * website -- introduction update
  * jancy: website markdown files
  * website markdown files
  * mascot update
  * minor update on wizard files
  * sessions and layers dirs are merged together (pugins dir)
  * wizards dir added (3 wizards: session, protocol analyzer layer, answering
    machine layer)
  * wizards.conf added
  * geeky ninja icon
  * package cleanup before the release
  * jancy: linux fixes
  * JNC_GC_ROOT_ENUMERATOR -> JNC_OPAQUE_CLASS
  * intptr->int warnings suppressed
  * jancy: dialog sample (properties, events, reactive programming)
  * jancy: gc bugfixes
  * preConstructor -> preconstructor
  * opaque class setup must specify actual size
  * export sample

...............................................................................

version 3.2.5 (2014-12-31)

  * linux requires special handling of Ctrl+<letter>
  * jancy: linux bugfix re multicast destructors
  * TerminalWidget should kill selection on screen buffer change
  * bugfix in TerminalScreenBuffer::getLine ()
  * new defaults for ssh channel
  * pty: xterm
  * address: sdf.org:22
  * user: new
  * bugfix in TerminalWidget (TerminalLine* could be referred from
    both m_history and m_console)
  * bugfix: paint always painted all the way down till the end of
    console
  * copy/paste support in terminal
  * axl: ecc-key: set utf8 for console output
  * xterm mouse support
  * application cursor key mode support in TerminalWidget
  * xterm support
  * jancy: bugfix: jnc.FmtLiteral must be a root (even though it has no fat
    pointers)
  * support for connect cancellation in SSH channel
  * intercept ctrl+<letter> keys in terminal widget (optional)
  * exceptions in plugin constructor were not handled properly (main
    app remained waiting)
  * jancy: 'const' post-declarator modifier is made part of declarator_suffix
    (so 'throws' and 'const' can be specified in any order
  * changelog: show all comits after the latest release also
  * jancy: construction sequence change: field constructors -> field
    initializers -> property constructors -> preconstructor -> constructor
    (before field initializers were called as part of a preconstructor)
  * update ioninja api to re-used IfaceHdr of basetype (applies to
    Property->IntProperty and Plugin->Session/Layer)
  * jancy: major structural refactoring:
  * common code from DerivableType and Property moved to NamedTypeBlock
  * static and member destructors are called in reverse order of
    corresponding constructors
  * property constructors and field initializers implementation
  * class re-uses IfaceHdr from the first parent
  * jancy: VTable -> vtable
  * property getDefaultConstructor () removed -- properties don't have
    overloaded constructors anyway
  * jancy: property constructors, destructors, field initializers -- work in
    simple cases (still need to refine)
  * opaque class GC root enumerator placeholders
  * axl: CPCap -> PCap
  * jancy: allocate memory for formatting literals from GC heap
  * jancy: gc-mark opaque classes, multicasts and multicast snapshots
  * axl: bugfix: hexcode buffer must be at least 9 chars long
  * axl: bugfix in escape encoding -- must force null-termination of a hex
    code
  * axl: escape encoding now supports unicode characters \u \U
  * if pattern is incremental then start from the last found location
  * axl: bugfix: incremental boyer-moore find should use offset in case of
    empty pattern
  * axl: boyer-moore find should actually succeed on empty pattern
  * JNC_API_XXX --> JNC_XXX
  * jancy: JNC_API_XXX --> JNC_XXX
  * hexedit should paste text as hex if the cursor is in hex area
  * bugfix: copy from bintext line
  * jancy: prevent adding fields and virtual methods to extension namespaces
    (before it was possible to cheat by using in-property firleds or virtuals)
  * jancy: reactor recursion protection
  * refinement of comments in samples
  * jancy: sample pack comment updates by dima
  * jancy: minor sample updates
  * jancy: bugfix: remove TokenKind_Signed
  * jancy: gcc callconv fixes
  * jancy: major sample pack update
  * jancy: major redesign of extension namespaces
  * using declaration implemented
  * jancy: bugfix: arg_pass1 did not add parentheses into token list
  * jancy: bugfix: bitflag enum did not accept '0' (cause of recent integer
    const type change unsigned vs signed)
  * jancy: support for escape sequences in single-quoted literals
  * jancy: more bugfixes regarding try/catch/finally
  * jancy: bugfixes regarding try/catch/finally
  * jancy: jnc.setPosixError, jnc.setStringError std functions
  * jancy: bugfix: getInt32TypeKind_u/getInt64TypeKind_u should actually
    return signed types (otherwise all the integer constants are unsigned)
  * jancy: support for 'bindingof' without parentheses in 'onevent' statment
  * 'extend' -> 'extension' (for symmetry: extend is a verb, namespace is a
    noun)
  * jancy: allow casts from non-POD* to POD const*
  * jancy: update of the last commit
  * jancy: bugfix: tls object header was not constructed properly
  * variable scope level is NOT variabl->getScope ()->getLevel () (for example,
    local statics, or local tls variables)
  * jancy: assert statements implemented
  * changelog: linux fixes
  * changelog: created perl utility to generate changelog out of git commits
  * scripts updated to use dynamic sizeof instead of
    jnc.getDataPtrSpan
  * jancy: jnc.getDataPtrSpan is removed (not needed now when we have dynamic
    sizeof)
  * scripts brought to conformance with the latest jancy changes
    (i.e. dynamic casts and static new)
  * jancy: bugfix: getHeapVariableObjHdr caused a crash (cause of null type)
  * removed static new/stack new operators from jancy samples
  * jancy: prevent dynamic casts const->non-const
  * prevent casts non-pod -> void*
  * support for dynamic casts of arrays
  * jancy: variable object headers
  * dynamic casts
  * dynamic sizeof
  * dynamic countof
  * jancy: scripts brought to conformance with latest jancy grammar
    changes
  * jancy: grammar bugfix (now that we have dynamic sizeof/countof/typeof,
    type_name_or_expr must return Value, not Type*)
  * jancy: unmanaged heap -> gone
  * jancy: pragma pack -> gone
  * jancy: pack -> alignment
  * jancy: fenum -> bitflag enum
  * jancy: cenum -> exposed enum
  * jancy: dconst -> readonly
  * jancy: devent -> gone
  * jancy: dtypeof -> dynamic typeof
  * dynamic sizeof
  * dynamic countof
  * dynamic cast

...............................................................................

version 3.2.3 (2014-11-17)

  * handle LIBSSH2_ERROR_EGAIN in SshChannel::write ()
  * jancy: ragel highlighters included headers from src dir (which required
    adding src dir to includes)
  * cursor selection in ASCII area did not work properly
  * axl: MappedFile bugfix: under POSIX mapping view beyond end-of-file
    caused bus error

...............................................................................

version 3.2.2 (2014-11-14)

  * post-fold caret, selection and hilite validation and update
  * sessions use ansi-escape sequences for hyper text
  * bugfix: don't update CachePage::m_indexLeaf.m_lineCount int
    CachePage::insertRemoveLines (already done in 
    CacheMgr::onFoldRecordCompleted)
  * validate and update caret pos after fold completed
  * axl: HyperText -- actually, it should ignore \n: line-handling should
    be done before feeding data to HyperText
  * axl: bugfixes and updates
  * axl: AnsiAttrParser and HyperText bugfixes and updates
  * bugfix: length used before initialization
  * log widget validate cursor pos takes selAnchor into account
  * hex-edit widget validate cursor pos takes selAnchor into account
  * axl:fast widget scrolling support (instead of full redraw)
  * corner button bug fixes and adaptation for fast scrolling
  * axl:ansi attributes
  * hyper text uses ansi attributes instead of <> tags
  * forced limit in JncRepresenterTarget::addPart () -- Sniffer
    plugin occasionally crashed on bad packets
  * workaround: corner button was drawn on black background on linux
  * axl: bugfix: std palette did not mask out alpha channel
  * bugfix: widget should stop caret timer on destruction
  * axl: QT monospace font force integer metrics
  * QT std palette
  * axl: TextPaint update
  * LogWidget/HexEditWidget/Terminal widget update to use new TextPaint
  * cmake: include_directories should not be part of master CMakeLists.txt
    files
  * activationFinished signal should use int status (moc doesn't do
    well with nested typedefs)

...............................................................................

version 3.2.1 (2014-11-10)

  * axl: default font flags should be 0, not -1
  * axl: major gui subsystem redesign
  * axl: ecc-key -- linux update
  * nj_keygen is removed (no need anymore)
  * axl: ecc-key utility for generating license keys & product keys
  * LicenseMgr update -- rely on axl::cry::EcKey
  * support for 2 license kinds and 3 keys (personal, workgroup licenses +
    activation key)
  * axl: ecc product keys implemented
  * axl: open-ssl wrappers (axl::cry)
  * all codecs moved to axl::enc namespace
  * base32 encoding implemented

...............................................................................

version 3.2.0 (2014-11-03)

  introduces: Linux packages, Java naming convention, log search functionality, auto-update, option to sudo plugins under Linux

  * update-database change (split by os-cpu)
  * shell script updates (rpmbuild and debpkg should be sudone)
  * axl: gcc fixups in BoyerMooreFind
  * signed-unsigned comparison warning fix
  * reverse find implemented
  * LogWidget::processCache -- support for reverse line order (if startLine >
    lastLine)
  * bugfix: mouse wheel delta can actually be less than 120
  * so need to accumulate deltas
  * find improvements
  * switch to new boyer-moore find
  * text-find and binary-find
  * case-sensitive and whole-word-only features are functional
  * (find-prev not yet)
  * hex-edit data-changed notification
  * find uses new boyer-moore instead of boyer-moore horspool
  * jancy: tests->test
  * axl: boyer-moore bugfixes
  * tests->test
  * axl: boyer-moore enhancements:
  * whole-word support
  * pass offset in incremental-find
  * find and reverse-find return same offsets
  * axl: full boyer-moore (good-skip/bad-skip)
  * axl: horspool variation (bad-skip only)
  * axl: utf support in boyer-moore find
  * axl: case-insensitive find (unicode-aware, but no special cases)
  * axl: reverse boyer-moore find
  * axl: incremental boyer-moorefind
  * cmake: configure_file_w_permissions doesn't try to detect whether the full
    dst path was specified or not (use CMAKE_CURRENT_BINARY_DIR for output)
  * package scripts bugfixes
  * auto-update file format redesign (to support multiple
    installation types: msi, zip, deb, rpm, tar)
  * bugfix in AniLabelWidget
  * AniLabelWidget optimization attempt. CPU load showed 5% on Release build
    when About dialog was shown. ridiculous! i supposed switching from QTimer
    to QBasicTimer, caching rich text and  drawing only the visible part of it
    would speed up animation. turns out, no. the solution happened to be
    drawing background by hand, cpu load dropped to reasonable values after
    that
  * typo in transportFlags
  * hide run-as-root without layout distortion (change QHBoxLayout->QWidget
    container)
  * run as root via sudo
  * delete session temporary files
  * also, fixups regarding closing of the transport when terminating on
  * errors
  * axl: attach/detach file handles (io.File, io.MappedFile, 
    io.SharedMemoryTransport)
  * axl: FileFlag_DeleteOnClose calls unlink () on linux
  * desktop file for deb & rpm packages
  * remove tmp files generated as a result of erroneous linux conf
    files
  * jancy: don't create imports when parsing std function declarations
  * linux fixes
  * linux packages
  * package update (use specialized paths-*.cmake, without unnecessary
    libs/tools)
  * zip package
  * msi package update (do not expand paths.conf on installation
  * keep conf files in ./conf dir)
  * detect conf dir
  * expand std paths in paths.conf
  * axl: getExeFilePath (), getExeFileDir ()
  * zip packages for publishing
  * jancy: std function declarations are moved to jnc file just like std types
  * internal types are hidden from public jnc namespace
  * support for
    jnc.String/jnc.StringRef/jnc.ConstBuffer/jnc.ConstBufferRef/jnc.BufferRef
    in formatting literals
  * StdLib.getErrorDescription is moved to dedcated type jnc.Error (this way
    property m_description is not mapped unless type jnc.Error is really used)
  * jancy: return error if formatting literal doesn't know how to format a
    value
  * jancy: automatically cast from Derivable& to Derivable*
  * jancy: operator cdecl ... () is added to String and StringRef
  * jancy: operator ... / operator cdecl ... (to specify how to pass types in
    vararg functions)
  * jancy: typo in jnc_String.jnc
  * jancy: struct constructor cast should be prevented not via type map, but
    rather via simple bool flag -- multistep conversions should be disallowed
    anyway
  * jancy: String/StringRef/StringBuilder
  * jancy: ConstBuffer/ConstBufferRef/BufferRef/Buffer std types draft
  * jancy: support for skipping the first function overload
  * jancy: prevent infinite recursion when trying struct constructor casts
  * jancy: bugfix: formatting literal was losing the ending portion
  * jancy: formatting literal improvements (support for indexed-based argument
    injection)
  * jancy: function_suffix_rslv to allow C++-style constructors
  * jancy: setas declaration -- for specifying setter argument types
  * jancy: getArgCastKind for Value arrays
  * if CastOp::cast (): if constCast fails, fall back to llvmCast (essential
    for constructor-casts)
  * CastOp_Struct uses constructor-casts as a last-resort cast
  * jancy: std typedefs (size_t, uint_t etc)
  * jnc.String/StringRef draft
  * update re latest jancy changes
  * jancy: api overload mapping redesing
  * api macros for mapping struct and union members
  * jancy: overloaded function support via JNC_API_XXX macros
  * enum ApiSlotId -> enum ApiSlot
  * axl: replace ListLink with Entry in ListData -- this way it's easier
    to debug (can walk and inspect the whole list in locals/watch)
  * jancy: std type definitions are moved to perl-processed jancy source files
    (instead of manually assembling struct types by hand)
  * sh: test projects shell script, testing is made part of full rebuild
  * jancy: decided to remove throw conditions (it's never really needed
  * but it requires not-so-elegant syntax, a dedicated keyword and tricky error
    propagation logic)
  * sh: small updates in shell script output
  * cmake: disable linker warning 4221 (no public symbols in a source file)
  * update for the last fix: turns out, the style is not automatically deleted
    but it is altered upon during (and maybe after) setStyle (). therefore, we
    have to use the new instance every time and also make sure it doesn't
    linger indefinitely
  * bugfix: plugin list widget style should be dynamically created
    rather than static
  * ensure all stylesheets use namespaces
  * don't pass full source file list in command line, instead pass a
    single plugin file
  * switching read-only mode set 2px-wide caret (must be 1px)
  * axl: CMakeLists.txt update
  * axl: remove length limit in dbg::trace
  * axl: make gcc happy about names from base template type
  * axl: rename crc16 (used in Packetizer) to "checksum16" (cause it was not
    crc16)
  * remove redundant ...Kind suffixes from enum names (after java-style
    conversion)
  * keygen: signed/unsigned comparison warning
  * axl: Iterator redesign: instead of storing ListLink pointer, it's
    better to store Entry pointer -- this way it's easier to see contents of
    iterator in the debugger
  * linux fixes
  * qtWidget -> QtWidget
  * keygen: fixed size_t -> int warnings on amd64 builds
  * java naming convention
  * jancy: java naming convention
  * bulldozer: java naming convention
  * axl: type names brought to java naming convention
  * axl: variables, fields, functions brought to java naming convention
  * keygen: during linux port attempt it stopped compiling under windows
    restore for now, refactor/port later
  * windows shell scripts update -- detect CPU by default
  * don't build keygen on linux yet
  * keygen doesn't compile on linux and needs minor porting. but it has to
    be refactored anyway, so postpone that for now
  * linux shell script updates
  * calculate build times
  * halt build process on any error
  * use native processor architecture by default
  * accept processor aliases (x86/i386, amd64/x86_64/x64)
  * bugfix: shell script rebuild-all calculated elapsed time
    incorrectly
  * wix installer fix (incorrect redist dir)
  * shell script updates: add calc-time-diff script to calculate
    build times
  * switch to lowercase (most examples on the web use lowercase)
  * wix installer updates
  * shell scripts no longer copies stuff into files/ dir before invoking
    heat/candle/light (instead, it uses original files directly)
  * INSTALLDIR layout has been redesigned a little bit: executables,
    redistributables and conf files go into INSTALLDIR/bin
  * uninstall shortcut is created
  * remove 'scripts' folder from the project (no more CMakeLists.txt
    in 'scripts') originally it was useful to edit plugin and api .jnc files from Visual Studio. now it's much more convenient to do with IO Ninja IDE

...............................................................................

version 3.1.2 (2014-09-23)

  * trim user name and product key
  * disabling activation bugfixes
  * activation disabled
  * sample packet-templates.jnc is put into scripts/samples
  * nj_keygen app
  * sh: build for windows no longer requires WIX in the PATH
  * installer build scripts re-engineered
  * installers for linux: deb, rpm, tar
  * bulldozer: bugfix: CppParserUtils.lua should be prepended with '/'
  * axl: bugfix: incorrect posix flags in CFile::Open
  * cmake: Paths.cmake.template had QT_DLL_DIR missing
  * bulldozer: frame for c++ parser is split into 2 files (CppParser.cpp.in
    and CppParser.h.in)
  * lua support code is put into CppParserUtils.lua
  * bulldozer.cmake is updated to support generation of both *.llk.cpp and
    *.llk.h files in one go
  * sh: update: clean everything first, then build
  * cmake: bugfixes: added @ONLY for generated cmake modules
  * sh: update of linux set-variables shell script
  * jancy: update: on 64-bit there are no divdi3/moddi3
  * jancy: add mappings for divdi3/udivdi3/moddi3/umoddi3
  * cmake: bugfix: generated files in cmake/latest had TARGET_CPU already
    substituted, need to use @ONLY
  * debug trace in PaintLineRange
  * sitara transfer plugin
  * bugfix: serial session port-open did not use current values of
    Baud and FlowControl combos
  * crc16
  * typo in CMakeLists.txt
  * bugfix: filteransmitpage -- m_progressDlg was not nullified
    (caused a crash)
  * git: remove set-variables.template, remove set-variables from gitignore
  * git: remove cmake/latest/*.* from history
  * git: typo in gitignore
  * cmake: generated cmake files from the latest build are placed in
    cmake/latest
  * cmake:sh: cmake and build shell script updates for linux
  * cmake: sh: major refactoring of cmake and shell scripts
  * linux fixes
  * cmake: updates for linux
  * axl: libusb support

...............................................................................

version 3.1.1 (2014-08-28)

  * fold record-related bugfixes: bindata config was not passed and
    follow-up foldrecord line indices were not re-indexed properly
  * log file save / load works now (before there were access issues)
  * remove io::EFileFlag_ReadOnly from record file open -- otherwise
    cannot fold
  * add line feed \n to record, index node and merge point
    signatures
  * axl: shared memory transport: add line feed \n to message signature
  * tmp-log-file command line switch -- adds
    io::EFileFlag_DeleteOnClose when opening log file
  * axl: shared memory transport uses io::EFileFlag_DeleteOnClose when
    creating transport file
  * axl: add FILE_SHARE_DELETE flag to file open flags -- important when
    using io::EFileFlag_DeleteOnClose
  * bugfix: not all the property grid calls were properly tunneled
  * jancy: always create alloca in entry block
  * otherwise it causes crash due to garbled address of __chkstk on windows 8
  * actually, it's an LLVM bug (incorrect sign-extension of address during
    lowering -- most likely they store address in 'int'), but the easy
    workaround turns out to be simply move allocas to entry block
  * bulldozer: version info, cmdline parsing via axl facilities
  * udp session: save last port in combo box history
  * git: remove set-variables.bat from history
  * jancy: bugfix: atoi was declared incorrectly
  * sh: to avoid confusion, renamed 'build' folders to 'sh' -- 'build' is
    commonly used as build location (='prj' in our case)
  * one week worth of refactoring

...............................................................................

version 3.1.0 (2014-08-15)

  initial public release of IO Ninja 3 (accumulation of 3.0.x improvements)

  * showing error message when trying to install 32-Bit and 64-Bit versions at
    the same time
  * axl: bugfix: incorrect cast in return from -1
  * include tag suffix and cpu suffix in version string
  * axl: dword_t -> size_t (otherwise it's very error-prone on win64)
  * version info resources
  * visualizing state about linked or layered sessions through MDI
    tab icons
  * copying redistributables from the folder named after TARGET_CPU
    specified in set-variables.bat

...............................................................................

version 3.0.21 (2014-08-13)

  * added null-ptr checks to keyboard handlers (crashed on empty
    log)
  * removed old stdin-stdout transport (use shared memory transport)
  * use stdin in ioninja-server to control life time (once stdin is
    disconnected, terminate ioninja-server process)
  * remove m_menuAction from Document (not really necessary)
  * each session has its own menu (before menu items from different
    sesssion accumulated in stdMenu (SessionMenu))
  * added icon for the executable on windows
  * document didn't remove widget from status bar on deactivation
  * cmake: copy_qt_dll_files incorrectly created Debug or Release file
    (instead of the directory) which, in turn, prevented subsequent builds
  * jancy: on MSVC it is illegal to create zero-length array, so CApiBaseT was
    adjusted
  * bugfix: scroll buttons in MDI's tab bar displayed transparent
  * changed it to white background with a solid border matching rest of the
    tabs
  * a couple of gcc warning-related fixes
  * bulldozer: a couple of gcc warning-related fixes
  * compiles and runs on linux-x86_64 -- finally
  * jancy: x86_64 System V ABI support
  * cmake: gcc setting for no-invalid-offsetof warning
  * jancy: gcc tail-padding issue workaround
  * axl: shared memory transport for POSIX
  * shrinking tabs in MDI's tab bar as much as possible before
    showing scroll buttons
  * 64-bit installer
  * 64-bit installer can be run by setting TARGET_CPU flag in set-variables.bat
    to 'amd64'
  * minor bugfixes in jancy files
  * tests for running ioninja-server on all official plugins
  * -x switch for passing plugin project file instead of full list of
    jancy source files
  * axl: CParserT::ParseFile
  * axl: CString 'operator +' for utf32_t (was missing)
  * axl: CMapping and CSimpleMappedFile updates
  * bugfix: struct LineAttr was incorrectly declared (layout
    inconsistency ninja scroll C++ vs jancy)
  * jancy: bugfix: incorrect struct aligned size calculation
  * jancy: remove SRet attribute from Microsoft x64 calling convention (LLVM
    JIT crashes if sret is present)
  * remove compile warnings
  * jancy: bugfixes re amd64
  * jancy: bugfix: calling convention was not properly assigned to user
    functions
  * jancy: thiscall support
  * default calling convention for methods is still cdecl (unless explicitly
    specified as 'thiscall')
  * axl: rtl::CAutoPtrArrayT
  * jancy: Microsoft x64 calling convention implemented. IO Ninja runs under
    amd64
  * copy QT dlls
  * cmake: copy QT dlls for ioninja and JncQtTest
  * bugfixes: uint_t -> size_t (important on amd64)
  * cmake: macro for copying QT dlls -- important when 2 builds of QT (both
    x86 & amd64) present on a computer
  * axl: bugfix: register format should be uintptr_t, not uint_t
  * jancy: bugfix: formatting literal for char array reference

...............................................................................

version 3.0.19 (2014-07-28)

  * replace app-srv communications via stdin/stdout with shared
    memory transport, results in dramatic performance improvement under
    windows
  * axl: shared memory transport
  * simple mapped file
  * cross-platform mapping object
  * forgot to uncomment subsystem linker pragma
  * save log as text progress dialog, start session by specifying
    either session name, or session plugin path
  * jancy: when adding methods to a class, no need to overwrite tags (Parser 
    should do it)
  * wrong QT file filter (extensions should be space-separated)
  * StatusBar.m_pane should be a const property
  * jancy: function tagging critucal temp-fix (operator-new -> operator_new)
  * show line/col/offset status panes for log documents
  * different cache page size defaults
  * cache process cancellation
  * find progress, find completion notifications
  * find dialog progress bar & cancellation support

...............................................................................

version 3.0.18 (2014-07-18)

  * bugfix: installer did not find correct files for updating WinPcap
    and Serial Monitor

...............................................................................

version 3.0.17 (2014-07-17)

  * re-engineer action UI in all sessions: replace pairs of action
    (like Open/Close, Connect/Disconnect etc) with single action with toggled
    semantic
  * added 2 properties to gui.Action: m_text & m_icon

...............................................................................

version 3.0.16 (2014-07-16)

  * mark inactive MDI tabs which have unseen log records
  * status panes for the rest of plugins (file, pipe listener, serial
    monitor, network sniffer, tcp listener, tcp proxy udp socket)
  * status panes for Serial plugin
  * jancy: reactor starter should also bind to bind-sites in skipped branches
    of operators &&, ||, ?
  * currently, && and || are replaced with full-circuit evaluation via bitwise
    & and |
  * obviously, this is not a 100% clean solution
  * in the future on potentially skipped bind-sites should be flagged (if
    skipped in starter, then delay-bind)
  * jancy: bugfix: reactors potentially stored invalid event pointer in
    bindsite
  * status panes for SSH Channel plugin
  * status panes for Listener Socket plugin
  * status bar API
  * status panes for Connection Socket plugin
  * jancy: bugfix: static fields/variables with initializers were checked
    incorrectly
  * jancy: static field initialization
  * find dialog Cancel button connection
  * make a compilation-time define for choosing whether or not to
    show cache miss using different background color
  * NetworkSniffer Session: apply capture filter when pcap is open
  * improvemnts in copy from log (use the application/njs-bin) format
    in addition to text
  * edit commands support for HexEditWidget
  * Copy Bin as Jancy: Hex-literal command
  * improvements in paste operation in hex editor
  * copy/paste in hex editor
  * registry formats support (hex editor should copy both textual
    representation, which depends on cursor pos AND the actual binary data)
  * save log as text fixes:
  * \r\n on windows
  * keep IsTimestampVisible setting
  * keep IsIconVisible setting
  * keep IsOffsetVisible setting
  * different background for hexedit hex and ascii panes
  * read only mode for hex edit
  * new logo hexedit -- always have 1 line
  * even when there is no data
  * linux fixes
  * build scripts: mkdir --> mkdir -p
  * sniffer session: incorrect replace (new io.PCapDeviceDescList -->
  * io.createPCapDeviceDescList)
  * io_Socket updates re disconnect event
  * io_SocketAddress compatibility fixes

...............................................................................

version 3.0.15 (2014-07-02)

  * sign binaries (including installer MSI)
  * jancy: change default throw conditions: retval < 0 for signed integers
  * retval == -1 for unsigned integers
  * update scripts as they don't need explicit cast literal->char
    const* in conditional expressions
  * jancy: array ref -> data ptr conversion is not performed by default
    anymore, instead, now it's an optional flag to PrepareOperand and
    PrepareOperandType. adjust GetConditionalOperatorResult: works for literals
    and keeps references if true and false types match

...............................................................................

version 3.0.14 (2014-07-02)

  * TCP close kind property, TCP disconnect kind flags in
    SocketEvents, added 'from' information to Connect log record, added
    'close-kind' and 'initiator' information to Disconnect log record

...............................................................................

version 3.0.13 (2014-07-01)

  * msi installer now includes qico.dll -- turns out QT needs a plugin for 
    .ico support
  * remove record size limit to decide whether to buffer or not (it
    causes empty "stripes"). instead, always buffer during incremental update
    (non-rebuild). also, enforce check for missing parts in cache mgr (instead
    of assert)
  * don't report disconnect if GetIncomingDataSize () is zero --
    there is a race with the main thread, so 0 is actually normal
  * jancy: bitwise & operator yields fenum if one of the operands is fenum

...............................................................................

version 3.0.11 (2014-06-23)

  * jancy: replace no_specifier -> wo_specifier in *.llk files
  * bulldozer: generation of "clean" EBNF presentation of input grammar
  * all the plugins now create opaque classes with 'new operator'
    (instead of 'createXxx' functions)
  * jancy: operator new for opaque classes
  * small bugfixes after linux port
  * api.conf and plugins.conf are made platform-dependent
  * sh: update set-variables.template for linux
  * git: remove set-variables from git history
  * git: update gitignore to include build/linux/set-variables
  * bugfixes: sockets, SSH
  * posix socket used incorrect error code for asynchronous connect
  * SSH channel was reporting incorrect event after TCP connect completed
  * include --debug flag for ioninja-server process on linux if NDEBUG flag
    is not set
  * sh: build scripts for linux
  * axl: remove ui_mainwindow.h
  * bugfixes: linux version is now functional
  * axl:gcc-compliance: project compiles on linux
  * jancy: bugfix: tmp gc roots were unconditionally nullified
  * nullify gc-root happened post-statement regardless of whether the block
  * is reachable or not. this caused an abort in MCJIT cause code was
  * injected past basic-block terminator (return statement). the solution is
  * to only nullify tmp gc rool list if the block is reachable
  * bugfix: installer did not overwrite all files when used in repair
    mode
  * bugfix: installer did not configure paths.conf due to missing
    rights
  * using a deferred custom action for gaining elevated rights. Must also use a
    further custom action for setting custom data for the deferred custom
    action
  * bugfix: corner button displayed too small

...............................................................................

version 3.0.11 (2014-06-12)

  * new icon resources
  * bugfix: bin text map was calculated incorrectly if the data
    block ended in-between multi-unit code point..
  * bugfix: bin text map for the lines terminated with '\n'
  * typo in SnifferLog_Ip.jnc
  * document activate/deactivate improvements: use
    mdiArea->activeSubWindow instead of event argument
  * save current transmit page
  * removed merged record count tracking from index mgr (not
    releavant)
  * bugfixes: hiding messages did not properly work before. remove
    binary record count, merged record count and foldable record count from
    index leaf (not really relevant)
  * instead add hidden record count (important for caching). binary and
    foldable record count must still be tracked in index mgr (to determine
    whether changing bin-data-config should finalize the current leaf or not)
  * bugfix: serial log filter used incorrect flag variable for status
    line change check
  * bugfix: CIndexMgr incorrectly determined whether the first part
    was merged or not (relied on PartIdx, which gets reset every time parts are
    not merged). replace it with IsFirstPart flag
  * packet template editor dialog -- remove icon from the caption
  * bugfix: io::CSerial should force-set settings after open
    (otherwise baudRate, flowControl and other properties get out-of-sync, and,
    more importantly, read interval might be invalid (serial.read might wait
    for the whole buffer to fill)
  * bugfixes: SSH & TCP connection should close socket when remote
    side closes connection (otherwise there is a possible syncId mix up with
    SocketAddressResolver) 
  * replace ProgressDlg and QFileDlg members with pointers -- this
    way plugin startup dialog for the documents shows up faster and response
    better (most likely, QFileDlg constructors initiates some jobs in
    background?)
  * bulldozer: lookahead statement syntax change

...............................................................................

version 3.0.10 (2014-06-09)

  * file transmit is functional
  * resources update by leo: plugin icons, file icons, installer splash &
    banner

...............................................................................

version 3.0.9 (2014-06-03)

  * bugfix: unexpected mdi tab switch after transmit pane tab switch
    (findNextPrevChild issue)
  * bring back file transmit page
  * proxy session icon
  * improvements of focus handling (set focus to contents of tab
    widget on current tab change)
  * small icons for drop down menus / tabs
  * big icons update from leo
  * small icons
  * new icons
  * log widget, terminal widget & hex edit widget now provide events for
    handling cursor pos change
  * ioninja main window displays line, col, offset, range in status bar
  * bugfix: incremental find should be reset when lines are not
    merged
  * basic find functionality is implemented (no
    case-insensitive/whole-words yet)
  * MRU list implemented
  * save-log-as-text is functional
  * log widget keyboard handling fixes
  * new layer dialog brought to consistency (vs new session dialog style)
  * log copy/save-bin-to-file is functional
  * corrected edit button title in binary transmit settings
  * cache processing prototypes (find, copy, copy-bin-as,
    save-bin-as-file, save-log-as-text)
  * plugin groups
  * remove CCopyMgr, CFindMgr -- they will be part of CLogWidget
  * add dropdown for New Layer toolbar command
  * bugfix: MDI area's tab bar and sub window was drawn too far to the
    right
  * implemented group functionality for New Session dialog's list
    view (including test groups)
  * displaying corner button in packet template property grid over
    header
  * bugfix: shortcut for 'New Session' action didn't work
  * modified MDI tab close icons
  * bugfix: MDI area's tab bar was drawn to far to the right
  * made selected MDI tab and MDI pane look connected by removing tab
    border
  * revert back TX & RX codes (not really important -- just so it
    matches with previously saved logs)
  * major update of logging engine
  * fold flags are now stored in record file rather than index file -- this
    allows for persistency of fold state across log file rebuilds/reopens
  * record code no longer needs to have mergeable flags: parts are what's
    merged, not records
  * instead of log filter which generates secondary log we now have 2 options:
    1) simple filter just hides unwanted messages (using fold flag field) and
    does NOT generate secondary log and 2) converter, which does generate
    secondary log. when only simple filter is attached, fold state persist
    across log file rebuilds
  * bugfix: 'New Session' action in menu also contained drop down list
  * separated 'New Session' action in two actions one containing drop down list
    used in toolbar and one without used in standard menu
  * drop down list in New Session action with list of all session
    providers
  * using rectangular MDI tabs with custom close icon
  * jancy: bugfix: COperatorMgr::GetArgCastKind didn't take default arguments
    into account
  * added corner button to packet template property grid
  * displaying Packet Template Editor when clicked
  * qtpropertybrowser: Added method for access to tree widget
  * bugfix: Packet Template Editor wasn't centered relative to the
    settings dialog
  * displaying message in About dialog when update check failed
  * corrected name in About dialog's team info label

...............................................................................

version 3.0.8 (2014-05-22)

  * bugfix: corner button not positioned correctly in terminal widget
  * this was due to sizeHint() being called after updatePos() resulting in an
    incorrect corner button size
  * UI/API prototype for copy/find
  * save/load log is functional
  * ClearCache -> Rebuild (cause it's not just clear cache but also
    clear index)
  * clear part buffer after UpdateIndex (cause subsequent SetBinDataConfig
    might re-send what's left in the buffer)
  * set representer guid on log server create
  * axl: TGuid::Parse
  * added readme and license files to installer resources
  * bugfix: installer couldn't be built because of old reference to
    session-providers.conf instead of plugins.conf
  * save -> save session, save session as, save log as
  * save log implemented
  * forgot to uncomment subsystem/entry pragma in main.cpp
  * refactoring of license management UI
  * animated label widget with team info in AboutDlg
  * AniLabelWidget (for running line on team info)
  * implemented license registration and activation (server-side response
    handling not implemented yet)
  * listener is now a function* rather than class* -- this allows
    easy scheduling (we normally want to invoke listener in main thread)
  * listener sensitivity check (live-records-only vs all-records)
  * jancy: instead of marking as gc-collectible, add a tmp gc-root for every
    heap-new (marking as gc-collectible still does not invoke gcEnter/gcLeave
    if no roots are found). besides, gc-roots are still necessary for temporary
    closure objects
  * jancy: mark every function invoking gcAllocate as gc-collectible
  * jancy: scheduler had 'safe' modifier in function pointer argument --
    better take it out (not that necessary, and developers (me included) will
    constantly bump into 'override signature mismatch'
  * transmit history maintans 2 current blocks (text & binary)
  * changing tabs in setting dlg also changes to the corresponding tab in
    document/transmit widget
  * bugfix: fold record did not adjust cache page state line idx
  * bugfix: if fold record line count delta is non-null, invalidation should
    range all the way to the bottom
  * bugfix: foldable records calculated line count incorrectly (did
    not nullify m_pCurrentFoldableRecord)
  * sniffer interface list now includes IP address and excludes
    device name (which is real ugly)
  * generic file session: distinguish between file stream kinds (disk
    files, pipes, serial devices)
  * allow writing past EOF for disk files
  * add clear function for disk files
  * New Layer action is placed in File Menu and main-toolbar
  * document-specific actions are disabled if there is no active document
  * xmodem receive is functional
  * xmodem transmit is functional
  * gui.FileDlg, gui.ProgressDlg, io.MappedFile
  * Link Sessions functionality is now accessible via Setting Dialog
    rather than session tab context menu
  * filtering layers are functional (PPP sample)
  * *.njssp -> *.njplg
  * jancy: bugfix: POD*->void* should always be implicit
  * bugfix: pointer difference for void* caused division-by-zero
  * jancy: bugfix: static new class variables were primed twice, writing data
    out of allocated range
  * jancy: bugfix: pointer difference operator did not work
  * properties for plugins are grouped
  * already-added layer plugins are disabled
  * adding layers feature is functional!
  * ioninja-server compiles and jits additional layers
  * jancy: CModule - CRuntime pair redesign (move LlvmExecutionEngine to
    CModule to allow multiple modules to work with the single runtime) -- in
    preparation for incremental compilation & jitting (adding layers in
    ioninja-server)
  * minor design update in AboutDlg check-for-updates
  * setting dlg: rebuild log layout -> rebuild log widget (to
    simplify hiding it completely when m_document == NULL)
  * namespace prefix only for API files
  * plain names for folders (api, sessions, layers)
  * currently there is no reason to have namespace prefixes for the rest of
    plugin files, so as to avoid unnecessary questions i decided to simplify
    everything to a more conventional and less cryptic scheme
  * plugin manamenent cleanup
  * plugin management and api further updates
  * document model update (2 kinds of plugins: sessions and
    protocols)
  * log filtering is functional, serial session provider
    uses filters to show/hide groups of notification messages
  * jancy: bugfix: empty condition in for stmt caused a crash on JIT (compiler
    was creating an invalid basic block graph)
  * bugfix: API function 'io.createSerialPortList' accidentally removed
  * added Device Monitor feature to installer
  * added buttons for adding and removing filters in session settings dialog

...............................................................................

version 3.0.7 (2014-04-26)

  * remove all the serial settings & lines (baud, flowcontrol, dtr,
    rts etc), from io.SerialMon -- instead of 'state' semantics, they should be
    represented by 'event' semantics. bugfix in io.SerialLogRepresenter: status
    line change parts were not merged properly
  * bugfix: incorrect line range update on tail-leaf-update
  * nj_srv should close .conf files when its done reading the
    configuration
  * serial mon plugin logs all the events (using SerialLogRecordCode
    / SerialLogRepresenter for most of the records)
  * jancy: re-fix the previous commits. todo: really clean this shit up
  * jancy: bugfix: the previous commit has broken certain scenarios (e.g when
    unnamed union is half way to the field, union-coord was added twice)
  * jancy: bugfix: resolve import types did not work properly if class had
    import base
  * bugfix: nested unnamed structs & unions did not work correctly in some
    cases (and i suspect still not 100% correct -- double check!)
  * jancy: creating member closures moved from CParser -> COperatorMgr
  * when using qualified name for virtual functions don't lookup vtable (get
    LlvmValue of the parent class)
  * making use of 'io.createSerialPortList' and
    'Document.createSerialPortProperty' in Serial session provider
  * added io.createSerialPortList and Document.createSerialPortProperty to API
  * jancy: allow using basetype in functions other than constructors: as type
    specifiers and as namespaces
  * background change of combo boxes if local port or target address
    changed while listening in TCP Proxy session provider
  * jancy: don't erase unreachable blocks if they were added to function
    (potentially causes assert failures in LLVM: value is used. most likely
    this assert is not relevant: block is used from unreachable block, but
    still)
  * serial mon plugin base functionality (using tdevmon service)
  * axl: legacy packetizer (compatible with previous versions of AXL, and
    tdevmon in particular)
  * background change of local port combo box in UDP session provider
    if port changed during open state
  * added 'gui.ComboBox.m_backgroundColor ' property to API
  * using address resolver for target address in TCP Proxy session
    provider
  * using address resolver for remote address in UDP session
    provider
  * refactored UDP session provider to share same code style as the
    other session providers
  * out of class definitions
  * use of State enum
  * use of ActionId enum
  * cleaned up Serial session provider
  * bugfix: io.CSerial had incorrect order of autoget fields
  * bugfix: io.CSerial did not update autoget fields on serial
    setting change
  * jancy: bugfix: getLastError () did not copy the TError struct (previous
    commit actually had incorrect description: actually it implements host name
    resolver and proper error handling in SSH channel session)
  * jancy: bugfix: getLastError () did not copy the TError struct
  * axl: remove CString::c () (cast to char*)
  * CString::cc () never returns NULL
  * socket address resolver implemented
  * TCP Connection session uses this resolver, allowing specifying address by
    name
  * displaying 'Run IO Ninja 3' checkbox in installer only if color
    depth of screen is 32 bit. this is to avoid that the checkbox otherwise
    overlays the background (alpha bitmap) with its own control background
  * io.Socket properties: m_closeKind, m_isNagleEnabled
  * use these properties in TcpConnection session provider
  * added default packet template file to installer
  * creating default packet templates files if none exists
  * reading and writing packet template file in user's documents
    directory
  * only reloading packet template and clearing hex editor when
    template was modified
  * bugfix: current data in binary transmit widget not always kept when
    swichting sessions
  * bugfix in CHexEditWidget::CalcCursorPos () -- incorrect column
    calculation
  * bugfix: hex editor data wasn't applied to array properties in packet
    template widget

...............................................................................

version 3.0.6 (2014-04-21)

  * loading hex editor data into packet template property widget when
    transmitting
  * bugfix: unlink sessions menu item was not connected properly
  * session linking is implemented
  * serverProcess_readyRead () slot: replace loop with a single readAll () -- 
    if ioninja-server produces data faster than log widget can update index
    and cache pages, the loop never exits, and requires extra event
    processing (to keep ninja responsive)
  * renamed packet template file (packet_templates.jnc -> packet-templates.jnc)
  * axl: critical bugfix: MappedFile on Windows sometimes failed View ()
    if aligned end-of-view fell behind mapped-size
  * loading proper default values in packet template property widget
  * displaying bit fields with a bit count of 1 as a bool property within
    packet template widget
  * highlighting selected packet template property in hex editor
  * qtpropertybrowser: changed first column's tooltip (property name) with
    property tooltip
  * bugfix: pressing Enter in packet template widget caused the transmit
    action to be triggered
  * bugfix: packet template file not created when trying to edit a new
    template file
  * link sessions menus
  * support for hexadecimal input for bit fields in packet template widget
  * removed signed/unsigned checks in packet template widget
  * warning about errors in packet template editor
  * include part-buffer in update-tail-leaf notification. this
    way log-widget can update its cache without the need of sending
    represnet-request to the log-server
  * indicating if packet templates are available or not in settings
    dialog
  * bugfix: current packet template wasn't selected in settings dialog
  * removed bit count from bit field properties in packet template
    widget
  * renamed "transmit template" to "packet template"
  * optimized mask creation for bit field modifications in packet
    template widget
  * hexedit: highlight on write capability
  * modified echos in installer build script

...............................................................................

version 3.0.5 (2014-04-17)

  * LogSettingPage: disable 'apply-to-all-log' if log widget is NULL
  * prompt for unsaved changes before closing transmit template editor
  * remove main window search loop
  * sticky log (scroll to bottom when vscroll is maxed)
  * scroll-to-bottom corner button in log widget
  * added button for checking for updates in About dialog
  * jancy: restore original order of resolve-orphans and resolve-import types
  * templatetransmitmanager -> templatetransmitmgr
  * jancy: bugfix: DeleteUnreachableBlock caused a dangling pointer write in
    case last current block was unreachable block
  * CModule support for calc-layout without actual compilation
  * bugfix: update check not working correctly
  * cmake: PCH for MSVC is placed in $(Configuration) subfolder
  * jancy: bugfix: ensure 8 bytes for const buffer (GetLlvmConst
    unconditionally reads 8 bytes)

...............................................................................

version 3.0.4 (2014-04-16)

  * catch exceptions in ioninja-server and report them to the application
  * prompt before closing unsaved changes in transmit template editor
  * removal of undesired delimiter above TransmitWidget tab implemented 
    transmit templates
  * jancy: bugfix: bit-field offset calculation during CalcLayout
  * isTransmitEnabled property -- to disable 'Send' button when there
    is no connection
  * bugfix: delete all the page requests from the map when the page
    is dropped
  * fold record support in new log engine design
  * SSH channel session: log messages update (merge all the 'connecting' 
    messages together, so there are no inter-line delimiters)
  * bugfixes in logging engine
  * index mgr: finalize leaf on mergable record
  * cache mgr: set index tail leaf bin data config
  * bin text line: bin text map calculation and code point decoder state
  * highlight unprintable chars setting
  * axl: bugfix in CCharCodec::LoadState/SaveState
  * bugfixes and updates (mostly re bin-text mode)
  * new log engine design updates
  * major redesign of logging engine and protocol (initial commit)
  * qtpropertybrowser: header column labels can be set via constructor
  * fixed "mismatched component reference" warning when building
    installer
  * sh: build-projects.bat saves and restores current dir (otherwise
    rebuild-all fails to build installer)
  * build and installer scripts cleanup
  * adjusted corner button fade time
  * added "Run IO Ninja" to exit dialog of installer
  * msi installer actions DLL project is generated by CMake and is
    built together with other ioninja binaries
  * formatted batch scripts
  * removed directory "icons" from installer
  * added folder 'redist' to gitignore
  * WIX installer updates
  * generate .rl.cpp & .llk.h in output folder to keep source folder clean
  * WIX installer's build.bat takes a parameter defining base directory for 
    files, redistributables and output
  * cmake: version templates for ioninja app and installer
  * initial commit of encoding support in log-plain-text mode
  * WIX installer
  * version automation and build script adjustments still missing

...............................................................................

version 3.0.2 (2014-04-07)

  * session startup dialog update (display errors)
  * remove UTF32->UTF8 conversion in terminal lines (draw UTF32 directly)
  * axl: support for UTF32 drawing in gui::CTextPaint
  * session startup dialog
  * log setting page update
  * all the dialogs tab order fixups
  * log setting page: include showСheckerPattern option + some layout
    modifications
  * checker pattern colorization (to show merged packet boundaries)

...............................................................................

version 3.0.1 (2014-04-02)

  initial internal release of IO Ninja 3