There are 72555 unique visitors to this page.
Date Version Update description

The most important change in this version is FreeBSD support. It passes all unit tests.

The list of most important changes includes:

  • Added support for FreeBSD. Passed unit tests. The required compiler is GCC.
  • Optimized Buffer class performance
  • Optimized SocketPool class performance
  • Increased SQLite3 query performance
  • Socket reader optimization and code reformat
  • Modified SocketEventType to allow simultaneosly show data, hangup, and error conditions.
  • Updated SynchronizedQueue tests
  • Fixed unit tests for ThreadManager

The most important bugs fixed:

  • Fixed a bug in SQLite3Database for the long database path

After a long quiet time, a new version of SPTK is available.

One of the main changes is - SPTK is switched to C++ 20 and not going back. In 2023, there isn't match point supporting C++ 17 that is now about six years old.

The following changes are most interesting:
  • Added new class SocketReader. It is separated from TCPSocket and made thread-safe. The TCPSocket and SSLSocket classes are now unbuffered.
  • Optimised Timer class. Added new class IntervalTimer that is faster than Timer for constant intervals.
  • Moved all unit tests to under test sub-directory, and added many new unit tests.
  • Added unit_tests to auto-builds. Auto-builds are updated to the list of OSes that support C++ 20. Debian is not yet included as its stable version doesn't support C++ 20.
  • Modified TCPServer interface to be thread-safe.
  • Added xml2json utility. It allows conversions of the files from XML to JSON and back.
  • Added DateTime parameter support for SQLite3.
  • Added String::in() method.
  • Added better support for null values for WSInteger and WSDouble.
  • Upgraded googletest to release 1.11.
  • Switched code formatting to CLang-formatter
  • Added support for hex flag in Buffer output to stream.
  • Optimised generation of WS-classes. New version generates more modern code.
  • Removed xml:: and json:: classes - replaced with xdoc:: that can read and write both, XML and JSON, and convert one to another.
  • Re-written of log/log engine destructors to shared_ptr, and removed most race conditions.
  • Converted most of filename parameters from String to fs::path.
Fixed bugs, with most significant listed here:
  • Fixed COUT and CERR macros to require ';' at the end of statement
  • Fixed bug in ODBCConnection on getting object lists from the database
  • Fixed bug in Buffer compare
  • Fixed BLOB fields support for all drivers, except SQLite3. Added unit tests.
  • Fixed incorrect assignment of bool to Variant
  • Fixed incorrect detection of MySQL libs on Linux
  • Fixed bug in SQLite3 selects that fetch first row containing nulls. Added SQLIte3 unit tests

The new version, 5.4.0, is focused on making Web Service classes more compact and effective.

The tar XZ archive is here: download. The zip archive is here: download.

Generic enhancements:
  • Used #pragma once in all headers
  • Added better distinguishing between MySQL and MariaDB
  • Added InsertQuery class and tests
Web Service support enhancements

The generated Web Service code is decreased several times by using more common code for generated classes. Each generated service now may have own namespace, defined by command line parameter of wsdl2cxx utility.

  • Updated WS service base generation.
  • Moved load() and isNull() from generated classes to WSComplexType
  • Added user-override for WS service error logging and handling
  • Optimized restriction handling in generated WS classes
  • Added support for namespace for services generated by wsdl2cxx
  • Added support for multiple services in a single WSListener
Several bugs are discovered and fixed
  • Fixed bug in exporting XML to JSON
  • Fixed bug in Query::sql() method
  • Fixed error in statements auto-prepare release on Query::close()
  • Fixed bug in xml::select
  • Fixed bug in DateTime::dateFormat()
  • Fixed bug in RegularExpression
  • Fixed bug in handling restrictions on array elements in generated WS classes
  • Fixed case sensitivity for field names in FieldList
  • Fixed Bug in ZLib for invalid compression of large binary files
2020-10-16Package builds

Added new package builds for Ubuntu 18 (Bionic) and Ubuntu 20 (Focal)


The new version, 5.3.0, is focused on making the better implementation of Web Service classes. The new implementation can accept traditional SOAP Web Service, as well as REST Web Service. For the REST Web Service, it generates Open API specification. For several projects that use SPTK-generated Web Service, we conducted Zap-testing (using OWASP specs) and added several basic checks in WS-classes that prevent some of the OWASP-identified vulnerabilities.

The tar XZ archive is here: download. The zip archive is here: download.

New features
  • Added support for REST and OpenAPI in WebService
  • Added Brotli compression support to WebService
  • Added CORS support to WSWebService
  • Added Brotli compression support to HttpReader and HttpConnect
  • Added CLOB text for all drivers, and fixed revealed CLOB handling problems
  • Added preserving spaces to XML #text nodes in xml::Document
  • Added generation OpenAPI JSON when executing wsdl2cxx
  • Added support for multiple patterns in WS restrictions
  • Added support for offset in RegularExpression::m
  • ()
  • Switched to direct processing of REST requests bypassing XML in WSWebService
  • Doubled MD5 performance
  • Increased performance of RegularExpression and made it thread-safe
  • Modified JSON implementation to keep order of JSON elements
  • Modified Timer to use std::function for callback
  • .
  • Removed OS-dependent code from DirectoryDS, in favour to std::filesystem
  • Replaced mkdir() and getcwd() calls with filesystem:: calls
  • Switched SocketPool to use std::function for callback. Fixed StopWatch to initialize to current timestamp
  • .
  • Switched Timer to use std::function instead of void* for callback data
Bug fixes
  • Fixed bug in DatabaseConnectionString::toString
  • ()
  • Fixed bug in Field move assignment
  • Fixed bug in handling WS errors in REST mode
  • Fixed bug in Oracle batchSQL
  • Fixed bug in PG driver for BLOB parameters limited by 7K
  • Fixed bug in PostgreSQL bulk insert
  • Fixed bug in PostgreSQL DECIMAL and NUMERIC types fetch
  • Fixed handling NULLs in assignment of Variant to Variant
  • Fixed incorrect reading of some XML text nodes
  • Fixed sort order in CaseInsensitiveCompare
  • .
2019-06-22SPTK-5.19 packages

Added 'Download' page. The page provides downloads of SPTK packages for most popular operating systems. If you need a package for yet another OS, please let me know - the email is at the bottom.

Source tarball and Linux packages are generated nightly. Windows installer is generated weekly.

SMQ packages will be available with next SMQ minor release.


SMQ server has passed minimal tests for MQTT protocol connections, using QOS1. It means that MQTT clients may use QOS1 for connections, however server is not yet re-sending messages that were not ACKed by clients.


SMQ server has passed minimal tests for MQTT protocol connections, made with mosquitto_pub and mosquitto_sub utilities from Eclipse Mosquitto project. Mosquitto implements MQTT version 3.1 protocol.

SMQ server now passes the following unit tests:

  • Connection with username/password support. At the moment, only single username and password combination is supported per server instance.
  • Subscriptions to a topic. Topic name must start from '/topic/'. Only QOS0 is currently supported.
  • Subscriptions to a queue. Queue name may start from '/queue/'. Only QOS0 is currently supported.
  • Subscription to several topics or queues per client connection. Wilcard subscriptions are not yet supported.
  • Unsubscribe from a topic or queue.
  • Delivery of message to subscription.
  • Client disconnection. MQTT last will message is not yet supported.


The development of SMQ (Simple Message Queue) has started. The version 0.1 will be released around March 2019. See SMQ details.


This SPTK release is kind of special. Again, there are multiple additions, enhancements, and bug fixes. But it's more this time than usual.

The tar XZ archive is here: download. The zip archive is here: download.

The additions and enhancements are:

  • Added SNI hostname support in SSLSocket
  • Added TestRunner class and sputil library.
  • Added unit tests for MS SQL
  • Added unit test to HTTPException class
  • Added unit test to HTTPException class
  • Added unit test to Exception class
  • Added unit test to Strings class
  • Replaced Logger/LogEngines implementation with faster and with less race conditions.
  • Added Oracle connection and DDL unit tests
  • Added unit tests for UniqueInstance class
  • Converted XML* classes to xml::* classes
  • Added unit tests for xml::Document class
  • Added unit tests for Host class
  • Added unit tests for RWLock class
  • Added unit tests for Semaphore
  • Added unit tests for Query class
  • Added DatabaseConnectionPool unit tests
  • Added timeout exceptions for HTTP reads
  • Added unit tests for Database class
  • Added unit tests for DatabaseConnectionString class
  • Added unit tests for ThreadPool class
  • Added unit tests for Timer class
  • Added unit tests for Thread class
  • Added unit tests for Tar class
  • Added unit tests for HttpParams class
  • Added unit tests for TCPServer class
  • Added unit tests for HttpConnect class
  • Added unit tests for Host class
  • Added unit tests for JWT class
  • Added unit tests for json::Document class
  • GTest sources added into SPTK tree and included to build
  • Added ZLib unit tests.
  • Added Strings unit tests.
  • Added SharedStrings unit tests.
  • Added RegularExpression unit tests.
  • Added MD5 unit tests.
  • Added FieldList unit tests.
  • Added Variant unit tests.
  • Added unit tests for DirectoryDS class
  • Added unit tests for DateTime class
  • Added unit tests for CommandLine class
  • Extended Strings class to use binary_search() for sorted strings in indexOf().
  • Added REST support in WSListener.

And here are bug fixes:

  • Fixed spurious interrupts in Semaphore
  • Fixed MySQL transactions support.
  • Fixed bulkInsert() on PostgreSQL.
  • Fixed bug in MySQL DateTime Query parameter when it is null
  • Fixed MySQL client detection under Windows
  • Fixed crash during command line help print.
  • Fixed bugs in HttpConnect and HttpReader

Here is the next SPTK release. There are multiple additions, enhancements, and bug fixes.

The additions and enhancements are:

  • Migrated time intervals from int to chrono:milliseconds
  • Switched access to getaddrinfo in Host class synchronous - to prevent race conditions.
  • Updated Windows installer
  • Added caching host address in Host class.
  • Added HTTPException class.
  • Added mutex protection to WSComplexType and related classes, to support locking of derived types.
  • Added minimal HttpAuthentication support to WSRequest. Finalized handling name parameter in json::Element getNumber()..GetObject() methods.
  • Added support for optional child element name in json::Document methods getNumber()..getBoolean().
  • Optimized JSON parser performance.
  • Faster implementation of HttpReader::readData()
  • Added better support for Oracle query output parameters
  • Added JWT implementation.
  • Added (case-insensitive) substitution support in RegularExpression class
  • Removed unused logging and timing in DatabaseConnection (and derived drivers) and Query classes
  • Added option to select old or new compiler ABI on Linux.
  • Added initial support for listing database names
  • Added statusCode() and statusText() methods to HttpConnect class

And here are bug fixes:

  • Removed several race conditions
  • Fixed several race conditions.
  • Fixed bug in XML PI duplication
  • Fixed bug in MD5 class
  • Fixed bug in Host class on Windows
  • Fixed bug in MySQL driver for NULL in DateTime values
  • Fixed bug in CMySQLStatement
  • Fixed incorrect SSL context initialization in SSLSocket class.

Besides code changes, SPTK now passes Coverity static analysis check. The icon with current Coverity check status is displayed at the right bottom corner

The tar XZ archive is here: download. The zip archive is here: download.

2018-03-10SPTK 5.2.13

Here is the next SPTK release. The most important new features listed below.

The tar XZ archive is here: download. The zip archive is here: download.

New features:

  • Added substitution support in RegularExpression class
  • Removed unused logging and timing in DatabaseConnection (and derived drivers) and Query classes
  • Added JWT support and test.
  • Added statusCode() and statusText() methods to HttpConnect class
  • Added option in CMake build system to select old or new compiler ABI on Linux.

Bug Fixes:

  • Fixed bug in SSLSocket context usage
  • Fixed bug in MySQL driver for NULL in DateTime values
  • Fixed exception in Transaction destructor.
  • Fixed bug in XML PI duplication
  • Fixed bug in Query::sql() that cause wrong query parameter detection
  • Fixed bug in HttpConnect
  • Migrated all time and timeout method parameters to chrono:milliseconds
2017-10-21SPTK 5.2.12

This release doesn't include revolutionary changes - mostly bug fixes. However, some applications may find useful the conversions between JSON and XML, implemented as export methods.

The tar XZ archive is here: download. The zip archive is here: download.

  • Windows logger fixes. Event Log messages now use correct reference to message resources.
  • Added export to XML from json::Document
  • Added export to JSON from XMlDocument
  • Switched net classes to use Host class
  • Fixed several bugs in JSON parser
  • Fixed locating mc compiler on Windows
  • Modified Windows installer projects
  • Fixed bug in Query SQL parser, related to multiline comments.
  • Fixed load of NULL data in WS basic types
  • Added query SQL to error messages in ODBCConnection::executeBatchSQL()
  • Added support for block comments in Query class
  • Added support of inline comments to Query class
  • Fixed incorrect socket state after TCP connection timeout
  • Added DateTime::setTimeZone() method
  • Added GMT support in DateTime methods dateString and timeString.
2017-03-20SPTK 5.2.11

Several modifications in HttpConnect class:

  • Added HttpConnect::cmd_put() method
  • Added HttpConnect::cmd_put() method
  • Added data waiting in HttpConnect::getResponse() method

The tar XZ archive is here: download. The zip archive is here: download.


New classes and features

  • Added JSON Document support
  • Added MS SQL support based on ODBC driver, with UTF-8 support.
  • Added move assignment operator in Buffer and Strings classes.
  • Added socket connect timeout support.
  • Decreased CPU load for SSL connect timeout wait.
  • Added support for non-blocked socket mode in SSL read.

Bug fixes:

  • Fixed XML encoding.
  • Fixed bug in PostgreSQLParamValues
  • Fixed race condition in DateTime.
  • Fixed race condition in Semaphore.
  • Fixed memory leaks upon SSL unload.
  • Fixed bug in Variant::asInt64().
  • Fixed bug in Base64 encoding/decoding.
  • Fixed bug in String::endsWith().

The tar XZ archive is here: download. The zip archive is here: download.

2016-06-24SPTK 5.2.4

All the classes but FLTK-related, lost leading 'C' in class names. So, instead of using CBuffer, now we use just Buffer. If you want to continue using existing code with old class names, simply declare someting like:

typedef sptk::Buffer CBuffer;

  • Re-worked iterators in FieldList class, mostly to make it suitable for extended 'for' loop.
  • Fixed bug in XML encoder.
  • Fixed race conditions in DateTime class.
  • Fixed race conditions in HTTPParams.
  • Fixed incorrect daylight savings offset in DateTime class.
  • Fixed memory leak in DirectoryDS.
  • Methods grep() and join() in Strings are made const. Added replace() method.
  • Class idstring renamed to String, to move towards Java String class, and added methods: split(), toUpperCase(), toLowerCase(), matches(), startWith(), endWith().
  • Changed implementation of Logger, to exclude race conditions.
  • Fixed race conditions in TCPSocket
  • The tar bzip2 archive is here: download. The zip archive is here: download.

    2016-04-28SPTK 5.2.0

    Starting from this release, SPTK switches of support for non-C++11 compliant compilers. This means, for example, that threads are now using C++11 classes instead of native OS APIs.

    There are, of course some enhancements and bug fixes:

    • In CRegExp class, added methods split() and matches(). Also, added workaround for PCRE error in optimization (AKA study) of some regular expressions.
    • In CStrings class, added join() and grep() methods and move ctor. Also, added SM_REGEXP delimiter mode in ctor.
    • Added support for executing unprepared queries for PostgreSQL and MySQL
    • Added draft support for executing SQL batch files for PostgreSQL, MySQL, and Oracle

    The tar bzip2 archive is here: download. The zip archive is here: download.

    2016-01-08SPTK-5.1.19Bug fix release

    • Fixed incorrect reading of response to HTTP request
    • Fixed Windows build for PostgreSQL/MySQL/Oracle drivers
    • Modified CVariant::AsBool() to return false on NULL value
    • Fixed bug in CQuery that recognized PG datatype qualifiers as parameters
    • Added search for required libraries in both 'Program Files' and 'Program Files (x86)' directories (on Windows)
    • Fixed bug in CRegExp::replaceAll method
    • Fixed several bugs in Oracle driver
    • Fixed several bugs in MySQL driver
    • Added CCommandLine class and usage example

    The tar bzip2 archive is here: download. The zip archive is here: download.

    2015-07-22SPTK-5.1.17Bug fix release

    • Fixed bug in CBase64 class: added encoded buffer zero-termination. Bug showed up only on Windows systems.
    • Fixed bug in CSMTPConnect: replaced LF- command termination with CRLF. Added support for no-user/pass connection. Bug showed up on connections to Exchange servers.
    • Added support of not authenticated login to SMTP servers (empty username and password). Useful when connecting to open SMTP relay.

    The tar bzip2 archive is here: download. The zip archive is here: download.

    2015-05-30SPTK 5.1.15Bug fix release

    • Web Service support: fixed parsing of the complex type
    • Web Service support: added methods copyFrom() and clear() to generated classes
    • Web Service support: added initial support for elements multiplicity definition
    • TCP Server: Modified CTCPServerConnection to allow deriving SSL connections
    • Logging: fixed log concurrency race conditions
    • Thread: fixed memory leak in CThread class

    The tar bzip2 archive here: download.

    2015-03-16SPTK 5.1.12Bug fix release

    • Fixed timezone bug in CDateTime
    • Fixed handling of dateTime type in WSDateTime - to use universal date format that includes timezone.
    • Fixed bug in WS code generator that produced incorrect WS response.
    • Fixed compilation and install of database drivers on Windows
    • Added CMake module FindSPTK.cmake - to simplify usage of SPTK in CMake projects.

    The tar bzip2 archive here: download.

    2015-01-03SPTK 5.1.9Back from oblivion

    After some technical problems with the hosting, we are back online. Unfortunately, old (archived) 5.x tarballs are lost. The only old version available is 5.1.7.

    The latest tar bzip2 archive here: download.

    2014-05-10SPTK 5.1.7

    Minor fixes release, focused on better support for CLang compiler. CLang compiler didn't strike me as anyhow special compiler. But simply because it may be used by someone, and such attempt would print way to many compile-time warnings, I decided to give it a try. Today, many of the compile warnings are fixed, and some are blocking since they make no sense (for me). The compile options for Clang were set to most pedantic possible, though.

    There is one limitation, though. FLTK 1.3 that SPTK is optionally using, is not prepared for compiling with that warning level, so compiling SPTK with FLTK support is going to trigger many warnings.

    • Added better support for Clang with strict options
    • Fixed many compile warnings (with Clang)

    The tar bzip2 archive here: download.

    2014-04-22SPTK 5.1.6

    This minor release is dedicated to Windows. We just reported that Windows compilation was broken with FLTK version change. Several things stopped working simultaneously. Also, it was pointed out, that building SPTK+FLTK on Windows is not trivial. This resulted in following changes:

    • Updated HowTo on compiling SPTK on Windows
    • Fixed FLTK and PCRE CMake modules for more reliable locating of said libraries
    • Fixed multiple warnings compiling on Windows
    • Fixed loading themes on Windows
    • Fixed button icons
    • Fixed color profile in PNG button images to avoid libpng warning when openning these images

    The tar bzip2 archive here: download.

    2014-03-27SPTK 5.1.3

    This minor release is dedicated to CRegExp class. The major changes are:

    • Fixed incompatibility with old (prior to 8.x) versions of PCRE.
    • Increased matching == and != operations performance by interrupting as soon as result is determined, instead of more universal approach \'find match count\'
    • Increased string extraction performance by minimizing sting copy operations
    • Added support for output pattern (second argument in Perl \'s\' command

    The tar bzip2 archive here: download.

    2014-03-23SPTK 5.1.2

    This is a bug-fix release, patching Firebird driver for correct fetching NULL data. The tar bzip2 archive here: download.

    2014-03-09SPTK 5.1.1

    After an unsuccessful attempt to compile new c++11 SPTK on RHEL6, there was an enlightenment that future, sometimes, is a bit more remote. RHEL6 still uses GCC 4.4.7, released in March 2012. The problem is resolved by adding c++11-compatible compiler, and CMake option to switch off c++11 code if needed. In that case, on *nux, SPTK uses old code. On Windows, since the last three versions of MS Visual Studio support c++11, that option should be always on.

    You can get it as tar bzip2 archive here: download.

    2014-01-27SPTK 5.1.0

    This release makes use of new c++11 features, in particular - new standard STL threads class, std::thread. All thread-related classes significantly simplified, and valgrind is much happier now. In order to compile this release, it takes pretty modern compilers, such as GCC 4.7+ (Linux and Cygwin) and Visual Studio 2012+ (Windows). Borland compilers are untested at this stage.

    You can get it as tar bzip2 archive here: download.

    2014-01-03SPTK 5.1.9After a period of some technical problems with the site, it's back online. Unfortunately, old 5.x version tarballs are lost. So, here is a latest one:
    2013-09-07SPTK 5.0.0

    After extensive testing, SPTK 5.0.0 is finally available to download. You can get it as tar bzip2 archive here: download.

    Here are some highlights:

    • Implemented Oracle, Postgres, and MySQL drivers. The new modular approach allows using same approach under *nix and Windows: DB drivers are compiled as separate shared libraries and loaded when needed.
    • Implemented connection pooling in database connectors.
    • Implemented draft Web Service skeleton generator that allows creating Web Services.
    • Added initial support for timezones in CDateTime. When CDateTime is created from a string and that string contains timezone offset in format of [+-]HH24:MM, the that time is converted to local timezone. Also, converting CDateTime to a string using timeString() now allows including timezone offset.

    2013-07-27Oracle & MySQL driversFixed Oracle driver enough to pass basic functionality tests, including BLOB/CLOB support. Added MySQL driver prototype.
    2013-07-20Oracle support developmentAdded the draft version of Oracle driver. It is not completely functional yet, however all the basic functionaly is implemented. The following functionality is not implemented yet:
    • BLOB/CLOB support
    • Output paramaters
    The testing is started, and the next SPTK minor version will be generated upon driver debugging/testing completion.
    2012-03-06Technology preview

    Updated development snapshot. The new thread support implementation is compiled and tested in the following environments:

    • Linux/GCC 4.5.3
    • FreeBSD/GCC 4.2.1
    • Windows/VS 2010
    • Windows/Cygwin (latest)
    • Windows/Borland C++ 2006

    The current development snapshot is here .

    2012-03-03Technology preview

    This is the very first of SPTK after development restart. Until new SPTK API is stabilized, the version number would be 4.99.x. The current development snapshot is here . We do not suggest using 4.99.x versions in any production projects, until API is stabilized in 5.x versions.

    The following list of changes is introduced in this snapshot as a part of thread classes re-implementation:

    • Thread development based of deriving from CThread class is deprecated. New approach introduces CRunable class that is used for deriving task classes. Tasks are executed by threads in thread pool. The most noticable differences between tasks and threads are: tasks may be executed multiple times, and tasks are nor aware of threads and thread implementation.
    • Thread events class is introduced. It is used to notify thread caller (such as CThreadPool) about important thread events (such as start/finish thread, or start/finish runable task).
    • Thread pool is completely re-designed to support self-adjusting number of threads and CRunable-derived task queue. Threads in thread pool are created when required, and released when threads are idle for longer than defined period.
    • Code synchronization is re-defined. Instead of former CWaiter & friends classes, SPTK5 introduces set of classes CSynchronized and CSynchronizedCode with cleaner syntax and simplified use.

    The following changes remove outdated parts of the project:

    • Excel classes are removed. The old Excel 2000 file format is no longer the most popular format. There are no immediate plans to implement support for modern spreadsheet formats until someone contributes the code.
    • Excel documentation is also removed for the same reason.
    • Dev C++ SPTK HowTo documentation and project files are removed as outdated and not maintained.

    2012-02-21SPTK Restart

    Due to undisclosed circumstances, the development of SPTK is rolled back to stable version 3.5.7 dated July 2008. The development is restarted from this check point, and the next SPTK version would be 5.0. SPTK versions after 3.5.7 and before 5.0 are not supported.

    The following code is going to be re-designed significantly within 5.x:

    • Sockets are becoming completely asynchronous.
    • Threads are going be re-implemented based on the pools of worker threads
    • Database connections are going to be implemented as connection pools

    These changes are meant to drastically increase network and database connections performance. If you have something to say about re-design requirements, feel free to send us your thoughts.

    2008-07-14SPTK SVN

    Added limited TLS support to CSocket class. Now, after issuing startTLS() command, communication through CSocket would be encrypted. New feature is used so far in CSmtpConnect class, to support STARTTLS command of SMTP protocol.

    Re-written the MIME message implementation used in CSmtpConnect for outgoing messages, to closer match the standards. New code is also cleaner and faster.

    2008-06-16SPTK SVN

    SPTK themes support is getting a new push.

    After a long argument, we decided to add some support for GTK2 themes. \'Some\' means that we plan supporting GTK2 \'pixmap\' engine, and only the most important Look-N-Feel features. The main idea is to have pretty much the same Look-N-Fell for SPTK applications as GTK2 applications.

    Currently, only the basic support for GTK2 buttons is implemented. All the other form elements and color schema support would be added in the nearest future.


    SPTK is out. You can download this version *nix tarball or zip archive .

    This version is a bug fix release. It fixes the compilation under GCC 4.3.x.


    SPTK is out. You can download this version *nix tarball or zip archive .

    This version is a bug fix release. One of the projects revealed a few minor bugs in sql2cpp utilily.

    2008-04-25SPTK SVN

    SPTK SVN is updated: SPTK PostgreSQL driver got another optimization. This time, the fetch performance is increased by about 24%.


    SPTK is out. You can download this version *nix tarball or zip archive .

    This release introduces a new part of the site - DB tools . Currently, there is only one Sql2Cpp Perl script presented there. However, this script was used in multiple projects and has proven to be really useful.


    This release includes several fixes for CSocket class. The patch was created by Dmitry Girsky. SPTK team thanks Dmitry for discovering and fixing these bugs:

    • In CSocket::close(), replaced the call of ::shutdown() with call of ::close(). The call of ::shutdown() doesn\'t actually close the socket and doesn\'t release the socket descriptor.
    • Added several exceptions thrown in case of errors in socket-related system calls.

    You can download this version *nix tarball or zip archive .


    This release accumulates all the latest fixes published in SVN.

    You can download this version *nix tarball or zip archive .

    2008-03-21SPTK SVN

    SPTK SVN is updated. Added several new methods to class CVariant: setExternalString(), setExternalBuffer(), and setExternalText(). The new methods allow to assign an external memory object to CVariant, without letting CVariant maintaining the object\'s memory.

    These new methods were added to speed up the PostgreSQL driver. The PostgreSQL access library, libPQ, returns datasets (as SELECT results) presented somewhat like memory arrays. The old implementation of CVariant had to copy the dataset information before SPTK could access it. The new implementation only copies the numeric and datetime data, and copies the string or buffer pointers instead of duplicating the string or buffer memory.

    There is also an interesting side effect of this change in SPTK. Now, it becomes possible to use faster working string or buffer parameters. For instance, now we can write:

    string myName(\"Nemo\");
    CQuery query(&db,\"INSERT INTO names (name) VALUES (:name)\");


    This is bug-fix release. It fixes two errors in SPTK PGSQL driver.

    • Incorrect fetch of the BOOLEAN columns
    • Incorrect fetch of the VARCHAR columns with 0 length

    You can download this version *nix tarball or zip archive .


    SPTK 3.5.7 is out. You can download the updated version *nix tarball or zip archive .

    This release contains a set of bug fixes for SPTK PostgreSQL driver. It also includes a new class, CProxyLog. The new CProxyLog class works almost like any other log class in SPTK, but the output is written into the parent log defined in CProxyLog constructor. The main idea is to provide thread-safe way for several threads to write into the same physical log.

    The existing class CBaseLog was extended to support minimal log priority. For instance, defining minimal log priority as CLP_ERROR allows blocking all the log messages with less priority, like CLP_DEBUG or CLP_INFO. Also, you can use defaultPriority() method to define a default log message priority.

    2008-01-07SPTK SVN

    Fixed the bug in PostgreSQL driver: Attempt to call PostrgeSQL function returning void was throwing an exception.

    2007-12-04SPTK SVN

    Fixed the compilation bugs:

    • Fixed compilation of CSocket.cpp on FreeBSD - incorrect usage of strerror()
    • Fixed compilation of CDateTime.cpp on FreeBSD - in timezone determination
    • Fixed link of DB examples that required some libs


    SPTK 3.5.6 is out. You can download the updated version *nix tarball or zip archive .

    This release introduces general UTF-8 compatibility of the whole toolkit. It means that most of the components work with UTF-8 just fine.

    The GUI components, however, require FLTK-utf8 in order to work with UTF-8. SPTK automatically selects FLTK-utf8 if both FLTK versions are installed on the system. Also, for masked inputs, UTF-8 masks with non-ASCII chars wouldn\'t work correctly.

    The GUI headers in this version are separated into sptk3/gui directory. If your code uses #include then it wouldn\'t be affected. If you configured SPTK without FLTK support then GUI headers are not installed.

    2007-09-27SPTK 3.5.5-r1

    This is a bug-fix release. You can download the updated version *nix tarball or zip archive . During the routine tests, the valgrind check revealed GPF conditions in new CParam implementation. The problem is fixed in this release.

    2007-09-26SPTK 3.5.5

    SPTK 3.5.5 is out. You can download the updated version *nix tarball or zip archive .

    After much consideration, SPTK team decided to switch the license to BSD license. BSD license is more permissive than LGPL we used before. The license description is already replaced in all the SPTK source code and effective from now on.

    • There are several bugs fixed in new CPostgreSQLDatabase class, and now it\'s more or less safe to use it instead CODBCDatabase (for PostgreSQL databases). The performance gain varies from 10% to 50%, depending on the performance of your PostgreSQL server and network.
    • The compilation on Sun Studio Pro compiler (under Solaris, including Sparc) was cleaned of warnings.
    • Fixed incorrect usage (in CODBCDatabase driver) of query parameters if the parameter name appeared more than once in the query. Fixed GPF in CPostgreSQLDatabase for the same reason.
    • Fixed conditional compilation of examples (depending on NO_FLTK and similar options).


    SPTK SVN is updated

    • Increased performance of the CQuery objects. Replaced abused usage of relatively expensive CDateTime::Now() for measuring execution time with faster alternative.
    • Increased performance of the CParam objects. Minimized memory reallocation in manipulations with string CParam objects.
    • Completed support for PostgreSQL database. The driver uses libpq to access the PostgreSQL database. The performance testing shows a gain of 20% to 50% comparatively to fastest ODBC driver available (from UnixODBC project).
    • Fixed compilation under Solaris with Sun Studio Pro compiler. The main problem was the non-standard implemetaion of some STL functions in Rogue Wave STL used by this compiler.
    • In CMake building system, added the ability to disable parts of the libraries with the defines: NO_ODBC, NO_SQLITE3, NO_POSTGRESQL, NO_ASPELL, NO_FLTK. The cmake configuration command can be something like this (to disable FLTK:

      cmake -DNO_FLTK:BOOLEAN=ON .

      Of course, you can combine several flags together if you need to. This is standard command line syntax for cmake.


    SPTK SVN is updated

    Added preliminary support for PostgreSQL database. The driver uses libpq to access the PostgreSQL database. The examples/postgresql_test.cpp test is added to allow brief testing of the basic functions.

    At this moment, only limited number of native types is supported. Some PostgreSQL native data types can\'t be used as query parameters. Also, only limited testing is done.


    The SPTK XML interface is altered to match the traditional implementation: The XML attributes now are presented as nodes. This allows XPath select to return XML attributes in the result list.

    Also, a simple XML UTF-8 test was added to confirm that XML code is UTF-8 compatible. This test would be extended to include more different XML elements.

    2007-08-04SPTK SVN

    Replaced any usage of Fl_Pixmap class with CThemes::getIconImage(). The directories that contained pixmap images are removed.

    This has the advantage that images depend on current theme. Also, libsptk now doesn\'t compile these images in, so the library size is slightly decreased.

    Fixed several bugs:

    • Fixed GPF in CListView when connected to CDirectoryDS or CFtpDS
    • Fixed GPF in message dialogs


    SPTK 3.5.4 is out. You can download the updated version *nix tarball or zip archive .

    This version fixes compilation problems while compiling with GCC-4.2.x. Also, fixed broken VC7 project files.

    This version introduces a limited support for XPath in CXMLNode::select() method. The new example, examples/xml/xml_test3.cpp, shows supported XPath features. We wouldn\'t suggest to use these new features yet, but any comments are welcome.


    With the new release of GCC, 4.2.2, SPTK (latest release version) build is broken due to enforcement of language standard. Therefore, here is an update, currently in SVN only, that fixes the new error messages and warnings.

    So, what\'s new and shiny?

    • SPTK now compiles under GCC-4.2.2
    • CMake build system now optionally builds available examples. The list of built examples is determined by the detected components such as FLTK, SQLite3, ODBC, ASpell
    • If examples were built with CMake build system, they would be installed into $PREFIX/share/sptk/bin by make install command
    • Fixed an old bug in CODBCDatabase::open() that incorrectly discovered ODBC driver type and caused SIGSEGV on some configurations.

    The release version of SPTK with these features would be available within a week or two, after the proper testing.


    Updated CMake building system in SPTK. The changes include building the themes, better FLTK/ODBC/ASpell/SQLite3 detection, and added compiler optimization options. CMake builds were tested in Linux and Windows.

    Also, SPTK now detects fltk-utf8-config (if installed in your system) and builds with FLTK-utf8 (if installed) or with regular FLTK.At this point, no modifications is made to support UTF8 in SPTK.

    2007-06-23SPTK 3.5.3

    SPTK 3.5.3 is fixing just a single bug. It caused buttons to ignore change of image if the theme is changed. You can download the updated version *nix tarball or zip archive .

    2007-06-13SPTK 3.5.2

    SPTK version 3.5.2 is out. You can download *nix tarball or zip archive .

    News in this version: fixed bugs in CTar and themes that caused access violation.


    Fixed bug caused access violation in CTar during switching themes in cgroup_test. Bug was reported by Michael Perlov.

    2007-06-06Gentoo portage

    Gentoo portage system is updated to include latest SPTK version 3.5.1, in unstable (~) mode.

    2007-05-28SPTK 3.5.1

    Version 3.5.1 is, mainly, a bug fix. You can download *nix tarball or zip archive .

    Bugs, fixed since 3.5.0:

    • Bugs in CSocket with incorrect size of sock_addr structure. Reported and fixed by Bernhard Buss
    • Bugs in CHTTPConnect with ignoring Content-Length HTTP header. Reported by Bernhard Buss
    • Removed FLTK dependencies introduced by moving datasource (DS) into sputil3 library, from sputil3

    2007-05-23SPTK 3.5.0

    SPTK version 3.5.0 is out. You can download *nix tarball or zip archive .

    News in this version:

    • An updated CMake building system. It now detects installed system components SPTK may use, much better
    • A new class, CGuard, that is a logical equivalent to CriticalSection in Win32.
    • Fixed several bugs in thread management


    Added support for \'install\' targets in CMake building system. Assuming that you have CMake installed, you can now do:

    cd /sptk3_source_dir
    cmake .
    make install


    Bool data type support is added to CVariant, CField, and CParam classes.

    The implementation is currently tested on PostgreSQL server. We are planning to test it on MS SQL server ASAP. Please, try it on your favorite server and let us know.


    We just discovered two bugs in version 3.4.0, so here comes 3.4.1 - purely a bug fix release. You can download *nix tarball or zip archive .

    Here are the bugs fixed:

    • Deadlock in CWaiter::waitForSignal caused by incorrect mutex locking
    • XML parser didn\'t correctly parse comments if there were \'>\' within the comments


    SPTK version 3.4.0 is out. You can download *nix tarball or zip archive .

    This version includes all the enhancements from SVN version. Besides the features announced in SVN version earlier (since version 3.3) it also has a speed-up on some database operations.


    SPTK SVN got a major update. We finally decided to make everything 32bit/64bit compatible.

    The way it\'s done now is - we replaced the most popular types like short,int, unsigned, long, size_t with int16_t, int32_t, int64_t, uint16_t, uint32_t, uint64_t. On different platforms, these types still have the same size.

    The testing is currently conducted with GCC4 on Linux 32 and 64 bit, GCC 3.4 (Cygwin) and MSVC7 on Windows 32 bit. When the basic testing and debugging is finished, this version becomes 3.4.

    2006-11-29XML Parser

    After spending a lot of time on SPTK XML code optimization, SPTK now got a new XML parser. It doesn\'t include the support for HTML parsing. The support for SAX would be added later.

    Here are the compare results for SPTK versions 3.3 and 3.3.1 (SVN). The tests were conducted using examples/xml/xml_test2.cpp. The Windows machine used 2GB of RAM and 3.4GHz Intel processor. The compiler used was VC++ 7. The Linux machine used 512MB of RAM and Dual Core 1.83GHz processor (only one core used). The compiler was gcc 4.1.1. The test creates 500K nodes, writes them to the file, reads them from the file.

    Operation SPTK 3.3, Windows SPTK 3.3.1, Windows SPTK 3.3, Linux SPTK 3.3.1, Linux
    Create 500K nodes 0.74 sec 0.58 sec 0.39 sec 0.39 sec
    Save 500K nodes to buffer 16.08 sec 0.19 sec 0.48 sec 0.15 sec
    Clear a document of 500K nodes 0.30 sec 0.26 sec 0.15 sec 0.10 sec
    Load 500K nodes from buffer 2.09 sec 0.58 sec 1.31 sec 0.39 sec

    This optimization was, again, completed on Windows machine.

    2006-11-23SVN testsHere are the compare results for SPTK versions 3.2 and 3.3 (SVN). The tests were conducted using examples/xml/xml_test2.cpp. The Windows machine used 2GB of RAM and 3.4GHz Intel processor. The compiler used was VC++ 7. The Linux machine used 512MB of RAM and Dual Core 1.83GHz processor (only one core used). The compiler was gcc 4.1.1. The test creates 500K nodes, writes them to the file, reads them from the file.

    Operation SPTK 3.2.2, Windows SPTK 3.3, Windows SPTK 3.2.2, Linux SPTK 3.3, Linux
    Create 500K nodes 2.02 sec 0.74 sec 0.69 sec 0.39 sec
    Save 500K nodes to buffer 18.81 sec 16.08 sec 2.05 sec 0.48 sec
    Load 500K nodes from buffer 18.45 sec 2.09 sec 5.15 sec 1.31 sec
    sizeof(CXmlNode) 20 16 20 16
    Memory allocated for 500K nodes 87.7 Mb 51.2 MB 33 Mb 33 Mb

    This optimization was completed on Windows machine. Of course, it also speeds up test on Linux, but the goal was to bring Windows results as high as possible.


    Added the preliminary support for Excel Unicode strings in Excel reader. The conversion is done to the current locale. For Linux, this locale should be set to non-Unicode locale using setlocale() prior to reading an Excel file. For Windows it works even without it. It probably wouldn\'t work on Solaris and other Unix systems. This compatibility is yet to be tested.


    Fixed bug in drawing boxes in themes appeared after adding themed frames support.

    Added support for the showing shaped windows in task bar - on Windows and Linux. I can\'t implement OSX support at the moment - I have no access to OSX.


    Fixed \"Make a Donation\" button. I don\'t know now - for how long time it was broken, but it was leading to the incorrect e-mail address not connected to any PayPal account.


    After some experiments with Shaped_Window classes (FLTK 2.x), I have found more or less working solution for resizable non-rectangular windows. It uses an std::vector of CPoint objects to define a polynomial region that shapes the window. During the window resize, a virtual method CWindow::resizeShape(int x,int y) is called. If you change the CWindow::m_shapePoints vector inside this method to have some points, then these points make the shape of the window. If m_shapePoints vector is empty, then the shape support is not used.

    The example program examples/shaped_window demonstrates how the shaped window can be used. It also contains a preliminary code to resize the border less shaped window. Most likely, that code would eventually make CShapedWindow class.

    The described features are only available in SVN version

    2006-10-13SPTK 3.3.0

    SPTK version 3.3.0 is out. You can download *nix tarball .

    Since version 3.2.x, we fixed several bugs, and added multiple features. Here is the list of most new important features:

    • The size of CXmlNode is decreased from 20 to 16 bytes. This does not affect the speed of CXmlNode, but saves same memory
    • In many cases, replaced unsigned int & unsigned long with size_t - for 64-bit compatibility. This does not affect the GUI components.
    • Themes updated to work with PNG files. Themes are now packed into tar archives, and total size of the theme files is decreased about 3 times.
    • Added XML support for CGroup, CScroll, and CWindow layouts. That allows to define a group or a window in XML
    • Added CFrame class - to draw nice risizable frames from frame PNG image. The themes now may include the frame images.
    • Added Dark and E17 themes
    • Added support for POST, HTTP headers and HTTP 1.1 chunked encoding.
    • Added objectList method to CDatabase that returns the list of available tables, views, and stored procedures (where applicable).
    • Added CPngImage to read PNG images from memory buffer.
    • Added CTar class to read tar archives, including from the memory buffer.
    • Added support for int64_t/uint64_t to CVariant and CXmlAttribute.
    • Added kdevelop project files. The SPTK development now is conducted mostly in KDevelop.
    • Added sptk namespace - to prevent any name conflicts. If you do not want to change much your code using SPTK, just add using namespace sptk; at the begining of the source file, right after #include directives.
    2006-09-10SVN access

    For several important reasons, SPTK site is migrated to the new server. Our new generous host is Total Knowledge . Also, SPTK has migrated from CVS to SVN. Our new SVN repository does not have the history.

    To check it out: svn co

    Please, remember - there will be no updates to the CVS repository anymore.

    2006-07-15SPTK SVN

    CSocket implementation is extended with limited TLS support. The purpose was to add STARTTLS support to SMTP implementation. Even that these changes are still have to go through the extensive testing, the first tests were successful.

    MIME encoding in SMTP messages is rewritten to better match with multipart messages standard.

    2006-07-13SPTK 3.2.2

    SPTK team proudly presents a new generation of SPTK, built all around XML. You can download version 3.2.2 as *nix tarball and Windows zip .
    This version of SPTK introduces a new approach to the data transfer within SPTK and outside, based on XML. Therefore, the XML parser and storage were reworked to work faster and use less memory.
    Here are the compare results for SPTK versions 3.1 and 3.2. The tests were conducted using examples/xml/xml_test2.cpp. The Windows machine used 2GB of RAM and 3.2GHz Intel processor. The compiler used was VC++ 6. The Linux machine used 512MB of RAM and Dual Core 1.83GHz processor. The compiler was gcc 4.1.1. The test creates 500K nodes, writes them to the file, reads them from the file.

    Operation SPTK 3.1, Windows SPTK 3.2.2, Windows SPTK 3.1, Linux SPTK 3.2.2, Linux
    Create 500K nodes 18.17 sec 2.02 sec 12.08 sec 0.69 sec
    Save 500K nodes to buffer 19.12 sec 18.81 sec 2.21 sec 2.05 sec
    Load 500K nodes from buffer 36.08 sec 18.45 sec 16.36 sec 5.15 sec
    sizeof(CXmlNode) 80 20 60 20
    Memory allocated for 500K nodes 202.4 Mb 87.7 MB 57 Mb 33 Mb
    As you can clearly see, the speed up and memory use change are pretty significant. The bad news - the CXmlNode API has changed. The access to subnodes and attributes used to be done by using childNodes() and attributes() methodes. Now it is done by using the node itself as a vector of subnodes, and attributes is simply a public variable in CXmlNode class, not a method.

    The methods used to achieve these performance changes are also interesting. Nodes now are not losing space for the data they can't use. For instance, CXmlElement can't have a value, and CXmlText can't have subnodes, attributes, or name. Attributes still use map, but it's only allocated if the element has any attributes. The names of the tags and attributes are kept in the SST (Shared Strings Table) and don't take much space.

    The changes in GUI components include the XML connectors save() and load() for the CControl-derived components, CGroup and CScroll. This allows to save and load windows or groups into/from XML files. It's really useful for storing the program state, or the state of settings window, for instance.


    Fixed bug in CTar causing access violation in cgroup_test during switching themes. Bug was reported by Michael Perlov.

    2006-06-06Gentoo portage

    Gentoo portage system is updated to include latest SPTK version 3.5.1, in unstable (~) mode.

    2006-06-06Gentoo portage

    Gentoo portage system is updated to include latest SPTK version 3.5.1, in unstable (~) mode.

    2006-05-21Code::Blocks support

    The support for Code::Blocks IDE is added to CVS version. Currently, only the project files for GCC are available. The Code::Blocks IDE project files for Windows would be added in the near future.

    2006-03-09New Developer

    I'm very pleased to announce that a new SPTK developer, mr. Loony Wombat, is joining our team today. He would be working on Visual C++ 6.0 and 2005 compatibility. As a first step, the projects for VC2005 would be released in several days.

    This message is also distributed through SPTK mailing list.

    2006-03-08SPTK 3.1

    This is a new SPTK milestone. Version 3.1 went the long way of corrections made since version 3.0. The testing process revealed several bugs that were fixed. You can download version 3.1 as *nix tarball and Windows zip .

    There is one important announcement I have to make. We are going to migrate SPTK website to the different hoster, and switch SPTK site changes notification to SPTK mailing list. The instructions on how to join SPTK mailing list are placed on top of this page. This announcement will be repeated once before the site change notification stopped. We can't automatically migrate your old subscription since mailing list is something different. We also hope that using mailing list will help us better understand SPTK users.

    2006-02-20SPTK 3.0.18

    This version adds couple of log classes: CFileLog and CSysLog. Both classes use stream-based approach to the logging. The base class for these new classes is CBaseLog that allows to create a custom log class by overwriting a single virtual method, and possibly creating a custom constructor.

    Fixed a bug in CParamList that caused incorrect indexing of query parameters if existing query SQl was redefined.

    You can download this version as *nix tarball and Windows zip .

    2006-01-28SPTK 3.0.15

    This is a bug-fix release. Fixed an error in Excel file generator. The error was causing the Excel sheet columns to be written with incorrect indices. This means - if you were trying to set a column width for the column 1, it would be stored for column 2, etc..

    You can download this version as *nix tarball and Windows zip .

    2006-01-20SPTK 3.0.13

    This is just a bug-fix release. I've found a strange error in GCC strtol() implementation. For some reason, strtol() doesn't change the value of errno after successful conversion. Currently, I've added a workaround that sets errno to 0 before calling strtol().

    You can download this version as *nix tarball and Windows zip .

    2006-01-16SPTK 3.0.12

    SPTK 3.0.12 adds support for the database driver messages. These messages may be sent to the driver by the database server on different occasions. These messages may include the extended error information, and the messages created by a stored procedure using (for MSSQL, for instance) PRINT statement. Here is the example:

    create procedure hello 
         print 'Hello, World'
         print 'The weather is great!'

    After executing that stored procedure using CQuery object, the method messages() would return CString& object with two rows of text.

    You can download this version as *nix tarball and Windows zip .


    Fixed the link to SPTK 3.0.9 in the announce of 3.0.11.

    Added SPTK mailing list. The hosting for the mailing list is kindly provided by Total Knowledge . We hope that adding more means for you to give us your opinion about SPTK, or ask about your problems, will be a benefit for everybody.

    2005-12-04SPTK 3.0.11

    SPTK 3.0.11 is just a bug fix. You can get it as *nix tarball and Windows zip .

    • Fixed a bug in CField::asString() that cause returning an empty string for some non-empty fields.
    • Added couple of small fixes for better error hanling in CRegistry.
    2005-11-18SPTK 3.0.9

    SPTK 3.0.9 is available for download as *nix tarball and Windows zip .

    Changes in this version:

    • Added SPTK support for SQLite3. Added the example demonstrating the features, including the transaction support.
    • Added the complete support for thread-safe database operation. All the basic classes now automatically lock the shared resources.
    • Fixed a memory leak in ODBC support
    • Fixed some standards compatibility issues with HTTP classes.
    • Updated several classes to make SPTK compile in GCC 4.x
    2005-10-10SPTK 3.06

    SPTK 3.0.6 is available for download as *nix tarball and Windows zip .

    Changes in this version:

    • SPTK 3 now has a new repository, sptk3. The CVS usage instructions are updated accordingly.
    • Doxygen documentation is updated. Finally, all the classes are included in one or another group of classes.
    • Resolved some performance issues with classes idstring and CXmlAttribute. The performance drawback was caused by MS VC++ compatibility code. Finally, we found a way to trick MS VC++ without sacrificing the performance.
    2005-10-03SPTK CVS update

    SPTK developers decided to separate the very basic classes in SPTK that are not related to database, into libsputil3. That should allow to use some SPTK classes in emebedded systems without putting much overhead.

    There is also a new document, SPTK XML HowTo, that describes how to create a simple XML document in SPTK. The matching example, examples/xml/xml_test2.cpp, implements a working program.

    Added a link that allows to access SPTK changes through gitweb.

    2005-09-25SPTK CVS update

    The massive SPTK CVS update is just completed. The building system is replaced by autoconf/automake based. So, the following changes are made:

    • Include files now reside in sptk3/ (not in sptk/). That should allow to install both SPTK versions, 2.x and 3.x, simultaneously.
    • All the SPTK libraries now have the major version number 3 (not 2) :,, etc..
    • Configure script (./configure) now includes --enable-examples switch to enable building examples.

    In the source code, there are 3 sets of changes. If used correctly, these changes allow you to simplify your code and make it work faster.

    • In the XML module, the method CXmlDoc::createElement() and similar are no longer public. Instead, sptk3/xml/CXmlNode.h gives you several simple classes that allow to create XML object.

      Old style code

          CXmlDoc *doc = parentNode->document();
          CXmlNode *node = doc->createElement("book");

      New style code

          CXmlNode *node = new CXmlElement(parentNode,"book"); 

      While the new form is obviously shorter, it also makes sure that the node is attached to the parentNode. Don't try to use NULL for the parentNode - it would cause GPF instantly :)
    • The CXmlNode methods getAttribute() and setAttribute() got a new optional parameter, const char *defaultValue. If defined, it makes getAttribute() method return the value to if attribute is missing. For the setAttribute(), the defaultValue makes CXmlNode to remove the attribute. This way, if a lot of the attributes in XML file have the default values, the size of the file is drastically decreased.
    • The CFieldList class got a support for the streamed output for most used SPTK classes. The following example illustrates it:
            int id;
            std::string name;
            CDateTime birthDate;
            CQuery query(db,"select id,name,dob from people");
            while (!query.eof()) {
               query.fields() >> id >> name >> birthDate;
    • The CParams class got a support for the streamed input for most used SPTK classes. The following example illustrates it:
            int id = 12345;
            std::string name = "Alex";
            CDateTime birthDate;
            CQuery query(db,"select id,name,dob from people where id > :id and name = :name");
            query.params() << id << name;

    These changes would be available in the next version, SPTK 3.1, after about a week of testing. Feel free to drop me a line.

    2005-09-18SPTK 3.0.3

    SPTK 3.0 is updated. The new version, 3.0.3, contains several bug fixes and has a major improvement - 64bit compatibility. You can get it here: *nix tarball and Windows zip .

    • The comaptibility with 64bit systems is just added. It's not much tested yet (I only tested database access modules on Origin 2000 so far), but couple of projects require it so testing would follow.
    • In CDatabase, driverDescription() method is added. It should help to adjust your program behaviour depending on connected database.
    • SPTK examples that use ODBC and temporary tables, modified to run on MS SQL, too. The problem was in special naming convention for temporary table names in that server.
    • Added support for simple XML in CRegistry class. It's now capable of reading an old-fashion INI files and XML files and can save them in INI or XML format. However, the general interface of CRegistry class is kept intact. It only allows to have two levels in CRegistry - topics and items. Topics may not contain other topics. If you want to have the full-blown XML in your configs, simply use CXMLDoc class.

    2005-09-13Win32 HowTo

    Added a short HowTo compile SPTK with Windows Visual C++


    SPTK 3.0 is out. Here are *nix tarball and Windows zip . Starting from this version, I'm going to provide both archive types to make Windows compilation easier.

    This version is currently under intensive testing in production environment. Several small bugs were since 2.99 fixed, mostly related to CRegistry and compatibilty with MS Visual C++.

    2005-08-31SPTK 2.99

    SPTK 2.99 announce

    Trying to meet multiple requests, SPTK is switching from using it's own collection of string, list, etc.. classes to using STL classes. The new version would have 3.0 as version number.

    The SPTK version using STL is available from CVS for about 2 months already. We are conducting an extensive testing for last several weeks. The first stage of testing using test cases is completed now, switching into the phase of testing SPTK in real programs.

    The new version, SPTK 2.99, is quite different from SPTK before 2.4. All the favorite classes CString, CStringList, CStringMap, etc.. are replaced with std::string, std::vector, std::map and relatives. So, if you are going to migrate your old SPTK applications to the new one, it's going to take you a while. If you have difficulties, feel free to drop me a line, and don't forget to mention SPTK in the subject.

    2005-05-18SPTK 2.3.90

    SPTK is switching to the new phase that would become SPTK 2.4. As sptk is used in CPPSERV, we decided to pay more attention to threading technologies.

    The current version, SPTK 2.3.90, adds a new class, CRWLock to provide better thread synchronization, and fixes few race conditions in CThread and CWaiter class

    2005-04-22Project news

    SPTK project got a new developer, Ilya Volynets-Evenbakh aka iluxa, that suppose to bring fresh ideas to the old project.

    SPTK CVS officially switched back to Source Forge. The SPTK CVS instructions are updated. The old CVS @ is no longer updated.

    The CSocket class is going to get into the serious development. We have started to develop a stream interface for it. The implementation details aren't clear yet.

    2005-04-18New SPTK site nameSPTK web site just got a new name: I'm also adding a new page on the site 'Projects using SPTK'. If you're using SPTK in your project, I'd be glad to add your site URL and brief description to that page.
    2005-03-27SPTK 2.3 r2This is mostly a bug-fix release. You may download it here.
    • Added theme support for scrollbars. Now scrollbars slider and buttons finaly may be defined. Added scrollbar theme images for Blue, OSX, and Keramic themes.
    • Fixed the background drawing for CScrollbar class. The background used to be drawn incorrectly.
    • Fixed a bug in CExcel module reported by Pettery Larjos. The bug was affecting only very small floating point numbers in Excel cells. Thanks, Pettery.
    If you have any webpages describing the applications, designed with SPTK, I'd be glad to publish a list of such applications here.
    2004-12-02SPTK 2.3 r1Bug-fix release. You may get it here.
    • Riccardo Trocca reported a bug in CFileDialog class, and offered a fix for it. The bug occured on some Windows computers if the diskette wasn't in drive. Thanks, Ricardo!
    • Added FLTK-style constructor (compatibility mode) for CEditor class.
    • Fixed some clipping problems in CTreeControl.
    2004-11-30IRC chat roomLet's try to communicate better.
    I'm hanging out everyday on IRC server The primary room is #Gentoo, and if anybody comes - I'd make a special room #SPTK. My nicks there are Gentoo and HSquirrel. The acceptable languages are English and Russian (the only two I know, sorry).
    2004-11-27SPTKSPTK 2.3 (release) is available for download. You may get it here.

    This version is much better adapted for Gentoo distribution system (Portage). It also fixes several bugs and brings couple of new features. Here is the list of everything:

    • CTreeControl is reworked completely. It uses different ideas even if the class interface is the same. The main idea was to make the tree items better adapt to the different items.
    • Found and fixed memory leak in CStringMap. Somewhere in the modifications of this class, the speed advantage against the STL. After an extra optimization, CStringMap is again 5% to 15% faster than STL's map class.
    • Added a new module, CMessageDialog. This is a replacement for standard FLTK dialogs fl_ask and friends. The classes in the module use SPTK themes, and support simple HTML for the message text.
    • CTabs is rewritten. The new code is cleaner, shorter. Finally, CTabs within CTabs are supported.
    • Added support for background in CScroll. Unfortunately, doesn't FLTK support theming for Fl_Scroll background, so CScroll now provides the complete implementation not using Fl_Scroll.
    2004-10-06SPTKSPTK 2.3 (beta 1) is available for download. You may get it here.
    • Fixed the reading of Excel file structure for Excel files version 5.0/95
    • Added theming for CProgressBar. The class is completely re-written and doesn't use Fl_Progress as a base class anymore. Added the theming images for OSX, Keramic, and Blue themes.
    • The example program examples/cgroup_test.cpp is added CProgressBar to show the look of it in the different themes.
    • The installation directory for SPTK themes has changed. It is now {WINDIR}\.themes.sptk on Windows and /usr/share/themes/sptk on *nix.
    • Fixed a memory leak in CStringMap. This also made this class faster 5%..10%
    • Modified CTreeControl to better conformation with the theme.
    • Fixed several small bugs in documentation.
    2004-09-02SPTK websiteSPTK website got completely new look and feel.

    The new design was made by Michael Perlov. Thanks, Michael!

    2004-08-15sameSPTK 2.2 is now included into Gentoo Linux distribution.
    • Added the configure script parameters--enable-fltk and --disable-fltk
    • Added the configure script parameters--enable-odbc and --disable-odbc
    The new configure options allow you to disable FLTK and/or ODBC support in SPTK even if they are installed on your system
    2004-08-03SPTK 2.2SPTK 2.2 (release) is available for download. You may get it here.
    • Fixed the incorrect Excel file structure for the very large files created with CExcelBook
    • Fixed the bug in CTransaction that caused the fault on openning transaction if the database was closed
    • Added compatibility of the files generated with CExcelBook, with MS Excel 2003
    • I've modified the SPTK License agreement to meet requirements of more people, and match FLTK License Agreement
    My company is using the Excel file generator in full scale. It is pretty stable now.
    2004-06-14SPTK 2.2 beta2SPTK 2.2 beta 2 is availabe for download. You may get it here.
    • Fixed the bugs in examples/tree_view.cpp
    • Fixed the incorrect Excel file structure for the very small files created with CExcelBook
    • Added support for column attributes in CExcelSheet
    • Fixed the ODBC handling for LONG VAR BINARY parameters
    I'm starting to use the Excel file generator in my company's main system. It may take couple of weeks before it would be really stable and interface would be frozen, but I was able to generate pretty complicated reports already.
    2004-06-03(same)Several people report problems in the project files.

    So, the project files for Borland C++ Builder, MS VC++, CForge and regular configure/make system are updated.

    The changes are applied to the same beta 1 version file.

    2004-06-01SPTK 2.2 beta 1SPTK 2.2 beta 1 is availabe for download. You may get it here.

    It is currently in the testing stage. The writing of Excel spreadsheets is generally implemented. The implementation is still simplified, yet should be enough for the most practical purposes.

    The writing of Excel is tested with OpenOffice Calc and M$ Excel. The main limitations of the alpha version for maximum file size and maximum string (in the cell) length are gone. Added simple support for cell formatting that allows to define font, color, and frame of any cell.

    The list of the changes in this version:

    • CVariant lost some weight - its size decreased from 32 to 24 bytes. This makes CExcelBook, CMemoryDS and some other classes that use CVariant to use 25% less memory
    • Excel reader/writer (CExcelBook) supports the Shared String Table (SST)
    • Excel reader/writer (CExcelBook) supports the long strings (> 255 chars) and very long strings (> 8120 chars), and a CONTINUE record
    • Excel reader/writer (CExcelBook) supports the very big files (XBAT records)
    • Fixed bugs in CObjectList top() and pop() methods. Thanks Treeve for finding it!
    2004-05-31SPTK website Dev C++ and SPTK made easy!

    Andreas Bresser has contributed a great Dev C++ guide for SPTK. You can check it out on SPTK's documentation page. The guide takes you through the setting up an SPTK project in Dev C++, building your first SPTK project, and more. Nice screenshots make the understanding very easy.

    Thanks, Andreas!

    2004-04-29SPTK 2.2 alphaSPTK 2.2 has started. You may get it here.

    This version's goal is to provide the reading (partially implemented befor) and writing of Excel spreadsheets. For the Excel files created with Excel 5 (BIFF5) the reading and writing is trivial. Unfortunately, the limitations of this format - max length of the string in the cell is 255 chars, maximum 16384 rows per file, not possible to create multiple spreadsheets in one file, etc - are just too much.

    Version 2.2 introduces the writing of Excel files version 97 (BIFF8). It is a format I have the most information about. The introductory implementation is capable of creating a very simple an small files now. It doesn't have good formating methods, it can't create files bigger than about 7Mb, etc.

    In the nearest future I'm planning to implement the following features:

    • Support for the cell formating
    • Suppot for a big strings (String length is almost unlimited - CONTINUE record)
    • Support for the very big files (XBAT records)
    • Support for the HTML import/export (currently, only CSV and XLS are supported)

    Added a missing \'install\' target into CMake-based building system. Now, it\'s finally possible (if you have CMake installed) to compile and install SPTK using CMake:

    cd sptk3/
    cmake .
    make install

    2004-03-09SPTK 2.1SPTK 2.1 (release) is finally completed. You may get it here. It is working in the production application on more than 70 workstations in my company for about a month. Here is the list of bugs and changes since the last release candidate.
    • Minor update of visible row positioning in CListView.
    • Fixed an error decoding RK-numbers in Excel Reader for Little Endian machines
    • Added preliminary support for --enable-debug configure flag.
    • Fixed excessive item height computations that gives significant performance gain on large lists.
    • Minor compatibility corrections in CParams cpp/h.
    • Added surrounding frames (outer and inner) support for CGroup.
    • Fixed high CPU usage in CDialog::showModal().
    This is a release version. Of course, I'm still expecting the more or less significant updates, but all I wanted to put in that version is already here :)

    As usually, I'm expecting anyone who uses (or wants to use) SPTK to tell me what is wrong or what is missing in the toolkit

    2004-02-09SPTK 2.1rc1SPTK 2.1 rc1 is out. You may get it here. It is finally working in the production application on more than 70 workstations in my company. The bugs fixed this time are mostly related to the interface components.
    • Fixed string conversion of CDateTime for times before 1900-01-01. This is important if you're trying to store just time into some SQL servers. Added static CDateTime::time24mode(bool) method to make CDateTime convert time to 12hrs or 24hrs. Still not know how to obtain system's 12/24 hrs setting.
    • Fixed CFileDialog to show the current directory name.
    • Added CSplitter widget. It allows to resize a widget (say, CListView) on the form. Currently, only SPTK widgets on SPTK group are supported. Added examples/splitter.cpp to illustrate the usage.
    • The performance of CListView with multiple columns is enhanced.
    I'm getting closer to the release version. Please, let me know about the problems or desirable modifications.
    2004-01-21SPTK 2.1b3SPTK 2.1.b3 is out. You may get it here. This beta is mostly dedicated to the Excel files reader.
    • The ExcelReader.cpp file is split on several modules.
    • Added support for files created with OpenOffice. Those files have slightely different structure for the Workbook records and contain several records with incorrect field indexes. Consequent reading of all the records in Excel file helps to ignore the incorrect indexes.
    • Added support for the BigEndian machines. Tested on Sparc architecture so far.
    • Added support for the files with several Excel 97 structure violations.
    • The performance has grown about 60%.
    The structure violations mentioned above are, probably, the extensions of Excel 2000 etc format. The latest description I have now is Excel 97 format. Even for Excel 97 files created with M$ Office 97 I've found several things that violate the official description. I'm not trying to use them - just trying to go around them. Among these violation are the 'black holes' (strange junk areas inside the Excel file) and strings in SST table that have an extra fields.
    2003-12-22SPTK 2.1b2SPTK 2.1.b2 is out. You may get it here. This is the second beta. I continue to collect the error reports from different people. The changes:
    • Fixed bug in CListView::sort() that didn't use a sorted column type correctly
    • CListView is much beter handling the font type and size changes. After such change, the first redraw() call would recompute sizes of the existing items in the list
    • Fixed the GP Fault in CTreeView on click in the widget after clear(). Thanks to Ryan Greene who found and reported the bug.
    • CThemes now support a FLAT BUTTON mode. Added couple of themes to demonstrate it.
    • Added a new theme 'Opera'
    • Added a new class CEditorSpellChecker that uses Aspell to implement the spell checking for CEditor. Also added the examples/spell_checker to illustrate how it works. This a very first draft of the spell checker in SPTK and it will be extended in the future.
    • Added a configure script. It tries to detect if FLTK is installed, and only then compile SPTK. It also tries to detect if ODBC support is installed, and only then compile ODBC-related classes. And, finally, it checks if Aspell is available, and only if both, FLTK and Aspell, are available, compiles CEditorSpellChecker.
    2003-12-01SPTK 2.1b1

    SPTK 2.1.b1 is out. You may get it here.

    This is the first beta. It means, that it is successfully used in at least three of my production projects, and it generally works. However, I expect to have fixes and feature additions.

    The changes:

    • Fixed bug in CListView::addRow() that didn\'t pass a row ID to the list view
    • Fixed bug in CComboBox that caused drawing the whole combo box outside of the window, on the parent window, on closing the drop-down list.
    • Added the collapse functionality to CToolBar. If the parent() widget of it uses layouts properly, all the resizing is done automatically.
    • Fixed some layout problems in CThemes.
    • Added a new Flat theme, still thinking what to make of it.
    • Fixed a minor bug that prevented the correct work of CQuery on Gentoo Linux.
    2003-11-13SPTK 2.1a4SPTK 2.1.a4 is out. You may get it here. The main news is - the theme support is added. I've quickly made 3 themes - Blue, Keramic and OSX.

    For *nix users, SPTK installs the themes' directory '.themes.sptk' into user home directory. For Windows, SPTK doesn't provide the theme installation support and one should install them manually. Here is the instruction (Windows only!):

    • If the HOMEDIR and HOMEDRIVE environment variables are defined, the directory '.themes.sptk' should be copied into %HOMEDIR%\%HOMEDRIVE
    • If the HOMEDIR and HOMEDRIVE environment variables are NOT defined, the directory '.themes.sptk' should be copied into %WINDIR%

    The example of using themes is shown in 'examples\cgroup_test', for instance. Look for something like CThemes::set("Keramic") function call. The location of this function call is currently critical, due the bug in FLTK, and should be between and Fl::run().

    • Added theme support for CButton, CListView, CCheckBoxes, CRadioButtons
    • Web site is update to show the available themes.
    • Fixed bug in CButtonGroup::preferredSize().
    • Added one more variation addRow() method in CComboBox.
    2003-11-04SPTK 2.1a3SPTK 2.1.a3 is out. You may get it here. The changes:
    • In CDateTime, added two new static members: CDateTime::timeZoneName and CDateTime::timeZoneOffset
    • Fixed bug in CComboBox that prevented the incremental type-in search
    • Corrected the CButtonGroup::preferredSize() method to consider the label size.
    • Added semi-automatic support for the CListView::dataMode(). Depending on the dataMode() flag, CListView and CComboBox would operate with list view row caption, argument (key value) or index.
    • Slightly corrected the drawing of CTabs
    2003-10-22SPTK 2.1a2SPTK 2.1.a2 is out. You may get it here. The changes:
    • Added CBuilderX support (partial)
    • CSocket just got listen() and accept() methods. I've also added an attach() method.
    • Added missing VC++ examples project files
    • BCB projects updated to use SPDB/SPTK combination
    • Added support by CDialog for FGE_MANDATORY flag of the CControl. Such controls must have non-empty value or CDialog would show an error and wouldn't close on Ok button.
    • Fixed pattern bug in CDirectoryDS.
    • CControlList fix for VC++: it threw an exception on a simple dynamic cast.
    • Added fix for CString constructor from the (char *) null
    • Fixed error in CDatabase::close(). The list of attached queries was emptied on call of that method.
    2003-10-06SPTK 2.1a1SPTK 2.1 is started. It has several new things, mostly incomplete yet. You may get it here. The changes:
    • CDateTime class uses the sytem's default locale for the weekday names and date formats. Let me know if it creates any problems.
    • CCalendar and CPopupCalendar use the weekday names first letters from CDateTime.
    • CQuery, CParams, CDatabase are nor implementing the particular database access anymore. All the database-specific functions
    • moved to the database drivers. There is only one such driver available now, and it's CODBCDatabase. I expect to have more in the future.
    • Started the work on CBridgedDatabase. The class is just defined, so don't try to use it. ODBC bridge would connect SPTK to a server-side program that actually uses ODBC. It helps when you don't have a particular driver-OS-database combination.
    • Blocked exceptions in CDatabase destructor. That sometimes creates an unenspected exception, especially if the database connection closed on the other side.
    2003-09-22SPTK 2.0SPTK 2.0 is released. You may get it here.

    The major change is: the license changed from GPL to LGPL. Several people asked about it, and I don't see - why not :) I'm starting to work on version 2.1. The CVS version would be not usable for some time, till the first alpha is out.

    2003-09-18SPTK 2.0rc2 SPTK 2.0 rc 2 is available for download. Bug fixes/updates:
    • fixed a minor bug in CProgressBar, reported by Serge Semashko
    • added case-insensitive keys (optional) in CStringMap
    • added the explicit prepare()/unprepare() support in CQuery
    2003-09-12SPTK 2.0rc1 SPTK 2.0 rc 1 is available for download. Bug fixes:
    • Fixed a bug on storing a big BLOB data (32K and more) in CParam/CQuery.
    • Modified Unix Makefiles to use 'fltk-config' instead of hard-encoded options. Works if your FLTK is installed correctly.
    • Fixed a bug in CFileSaveDialog that was creating a read-only file on trying to save to a new file
    This version is practically done. I'm starting 2.1 this week. The major change will be the abstract classes CDatabase, CQuery, CParam that would allow to create CDatabase-derived classes like CODBCDatabase, CMySQLDatabase, etc .. The first set of this classes would include ODBC and bridged ODBC connections. If you have any ideas or comments - don't be shy to drop me a line.
    2003-09-02(same)Bug fixes:
    • Fixed couple of bugs in CThread class. CThread.cpp is added to the Makefile.
    • Added an example of usage of CThread class as examples/thread_test.
    • Visual C++ project files are corrected to avoid creating and extra 'example' directory for creating *.exe files.
    2003-08-29SPTK 2.0b4 SPTK 2.0 beta 4 is available for download.
    • Fixed small bug in XML module in parsing CData section - thanks to Mikko Lahteenmaki.
    • CField convertor to CString now distinguishes VAR_DATE and VAR_DATE_TIME, so the resulting string doesn't contain the time for VAR_DATE. It also uses the precision information from the database field to convert the floating poin fields into CString better.
    • Several small corrections are made in Borland CBuilder project files.
    • An active row moving bug in CListView was fixed by Paolo Dozio.
    This version is getting ready to release. If it will be no major fixes during next two weeks - 2.0 will be switched to a release candidate.
    • Fixed a bug in the transaction support that prevented the database to be closed if the transaction is still active. Now it's possible, but the transaction will be rolled back if it's still in progress and CDatabase is closed or destroyed.
    • Added a simple CTransaction class to support transactions. This class provides methods begin(), commit(), and rollback(). If the CTransaction object is destroyed (directly or goes out of scope) and the transaction is active, it rolls back the transaction.
    • XML module documentation is extended. The first draft didn't include many class methods and members.
    • I'm beginning to group the source code documentation into modules. Currently, only Database and XML modules are ready. You can see it in the online class hierarchy.
    • Borland C++ Builder project files are updated to include latest changes and additions
    2003-08-18SPTK 2.0b3 SPTK 2.0 beta 3 is available for download.
    • XML support is added. It is a port of XML support library developed by Mikko Lahteenmaki . I have also ported one of his XML test programs in examples/xml/xml_test1.cpp
    • Added a very simple class CStringStack, mostly to support the XML code.
    2003-08-04(same) SPTK welcomes Mac users!

    Many thanks to Aaron Ucko, Alan Sill, Matthias M., Greg Ercolano who made SPTK to compile and run under Darwin/Jaguar.

    The main SPTK Makefile is modified to include the Mac-specific link commands for dynamic libraries. The source code is patched to include #ifdef __APPLE__ in couple of files. It's not a completed port yet, but I'd call it a good start.

    Bug fixes and changes:

    • Added the examples/README.txt file. It briefly describes the examples compilation and the ODBC-datasource requirements for examples.
    • The Excel file reader (examples/xls_read) is modified to process the included xls_read.xls file if no command-line arguments are used with xls_read.
    My SPTK application that processes my company's incoming/outgoing mail is running for two weeks by now w/o interruption, and counting. It actively uses the database classes CDatabase, CParams, CQuery, the mail-related classes CBase64, CIMAPConnect, CSMTP, and widgets CListView, CButton, etc.. That kind of proves the relability of the code, doesn't it? :)
    2003-07-30(same)The class reference is completed. Please, visit the documentation page and check it out.

    It may be not of the best quality so I'm accepting questions and suggestions.

    2003-07-29SPTK 2.0b2 SPTK 2.0 beta 2 is available for download. This beta version has several bugs fixed and really extended online documentation. I still have to go throuugh about 38 classes but this looks like pinats already.
    • Applied patch by Kai Stannigel for the make files. Now, examples makefiles are using fltk-config for link libraries list. Thanks, Kai!
    • Greg Ercolano compiled SPTK under Mac OS (Jaguar). He has added several defines and missing include files. Thanks, Greg!
    Now, SPTK compiles on Mac OS up to static libraries. It still can't compile the dynamic libraries, and since I have nor Macs around - I'm waiting on the comunity help on this.
    2003-07-25(same)Bug fixes and changes:
    • Applied patch by Kai Stannigel. The patched fixes the problems in several widgets' constructors to work in FLTK compatibility mode. Kai also fixed several more or less serious bugs. Thanks!
    • Added an extra reference on the documents page on SPTK website - to the Doxygen style class reference. It's draft and incomplete, but it's just the beginning.
    2003-07-22(same)Fixed several bugs in CFileOpenDialog and CFileSaveDialog. The examples/ceditor.cpp is updated to use these new dialogs instead of FLTK fl_file_chooser.

    The SPTK distibution for SPTK-2.0-beta1 is updated. If you're using it, please download it agian.

    2003-07-20SPTK 2.0b1 SPTK 2.0 beta 1 is available for download. This is the first beta version. It means that I consider the library generally working. I have two applications ported into SPTK2, and so far they work more or less stable. At this point, the new feature development is frozen and project goes into testing stage.

    Changes in this version:

    • CListView doesn't use type() to define the browser mode. The old code based on Fl_Browser is gone. Instead, ClistView now supports the multipleSelection() flag, that allows multiple selections, and supports multiple selection with the mouse ( Ctrl+mouse or Shift+mouse).
    • Added CFileOpenDialog and CFileSaveDialog. Added an example of usage for these classes as examples/dialogs/file_dialogs.
    • Fixed couple of small problems in CListView and CComboBox.
    2003-07-16SPTK 2.0a6 SPTK 2.0 alpha 6 is available for download. Changes in this version:
    • Library is split on two parts: and First ( contains the class library for everything not related to GUI. It is, basically, extended version of former SPDB. Second ( is the actual SPTK. It's necessary, however, to link both libraries to your application if you want to use any GUI components.
    • CListView scrolling and drawing speed is greatly improved. The CPackedStrings class lost the 'position' member (4 bytes gain on every item). The scrollbar now scrolls the rows and not the screen position.
    • CListView algorithm to show and position scrollbars is updated.
    • CListView now 'understands' PgUp, PgDn, Home, and End buttons.
    • Cursor changes the shape to a 'beam' than enters the CInput-related widgets, and changes it back to default than it leaves the input area.
    • CListBrowser class is finally gone with a lot of legacy code from FLTK' Fl_Browser. I'm still cleaning it up, though.
    • Fixed the bug in CComboBox drawing that clipped the inside drawing more than it should.
    • Fixed the bug in CDatabase destructor that didn't correctly unlink the attached CQuery objects.
    • Fixed the bug in CStringList::loadFromFile() that caused the new line characters at the end of strings.
    • Fixed the bug in CStringMap constructor didn't initialize the auto cleanup flag. That caused the problems during CDialog destruction.
    • Paolo Dozio provided the VC++ project files update to compile both the debug and release versions of SPTK and examples.
    • Web site is slightly updated to be compatible with Netscape 4.7. The pages were not shown due to missing tags.
    • Web site is added a micro-survey (please, participate) to let me know if anybody is using SPTK and how. If a lot a people would take it then I have to think about extending the project. Otherwise it will stay one-man project.
    • Web site counters are changed to reflect only unique IP address visitors.

    It looks like SPTK 2.0 will be in beta stage soon. I have already couple of projects in testing stage and one – in production.

    2003-07-10SPTK 2.0a5 SPTK version 2.0 alpha 5 is avalable for download. Bug Fixes:
    • Added index checking in operator[] in CListViewRows - after suggestion of Paolo Dozio
    • Fixed a GP Fault in CComboBox when it was empty (also, thank you, Paolo)
    • Modules: CSmtpConnect and CImapConnect now use '\n\r' instead of just '\n' for the new line in message encoding. Without that change it doesn't work properly on some IMAP/SMTP servers. Both modules are under the testing in my production project as you read it.
    • SPTK2 moved on the personal CVS server, and finally the anonymous (checkout) access is avalable.
    • CBuffer, CString, CStringList all got some new constructors/convertors to be compatible with GCC 3.3.
    2003-07-05SPTK 2.0a4 SPTK version 2.0 alpha 4 is avalable for download. The following bugs are fixed in that version:
    • CListView::fill() method had problems with restoring the selection if the key field isn't defined
    • CListView was incorrectly computing the size of the scrolled area after calling the fill() on non-empty CListView
    • CListView scrolling speed highly improved on the big lists (more than 10K records)
    • CString is equiped ome more version for operator + to maintain the compatibility with GCC 3.3
    • CImapDS made to work
    • CDirectoryDS made to work
    • CSmtpConnect is fixed and working in the production robot for last 3 days w/o breaking up
    A new directory is added, examples/datasources - to demonstrate the possible usage of the datasources. The following examples are added to this new directory (so far):
    • directory_ds
    • imap_ds
    The latest SPTK and examples are tested on the following systems:
    • GCC 2.95 on Solaris Sparc
    • GCC 3.3 on Solaris Sparc
    • MS VC++ 6.0 on Windows 98
    • Borland CBulder 6.0 on Windows 98
    • GCC 3.2.3 (MINGW) on Windows
    I'd really appreciate any reports from any other platforms/compilers.
    2003-07-01(same) Bug fixes:
    • Fixed deadlock situation during the ODBC error processing.
    • Fixed M$ Access incompatibilty in examples/db_list_view.cpp and example/sptk_test.cpp.
    • Fixed bug in CDialog::load()
    2003-06-30(same)Minor update for 2.0 alpha 3:
    • Removed references on absolete files CToggle* From GCC make file.
    • Removed references on absolete files from BCBuilder project files.
    • Fixed couple of warnings in CCalendar for VC++
    • Fixed incorrect link on the SPTK alpha 2 instead of alpha 3 in prior message.
    2003-06-29SPTK 2.0a3The SPTK version 2.0 alpha 3 is here. Below is the list of changes (probably, incomplete, but still..):
    • This site got a new name: . Thanks to my friend and boss Konstantine Kondakov.
    • Fixed Can't remove callback bug in CEditor.
    • Added several new images to CButton - check the examples/sptk_test.
    • The TreeView and TreeControl widgets are rewritten from the scratch. Now it's own SPTK code not based on anything. See examples/tree_view for the demo.
    • Fixed the bug in CScroll that caused it to scroll to upper left every time when it's resized.
    • Fixed the bug in CBox that caused GPF if CBox was the first widget in the window.
    • Added MSVC++ project files contributed by Paolo Dozio. Fixed a lot of warnings generated by VC++, and a couple of errors specific to that compiler.
    • MSVC++ project is extended to include all the examples
    • Added couple of Net-related classes, like CImapConnect, CSmtpConnect, etc...
    • Added code for the DataSources. That includes classes like CDirectoryDS, CImapDS, etc..
    • CListView now is DataSource-aware. It means, any CDataSource descendant can use CListView to output data. The examples will be added later, in SPTK 2.0 alpha 4.
    • Several examples got a few cosmetic changes.
    I'm going to include the examples and documentation for Net-related classes and DataSources in SPTK 2.0 alpha 4.
    2003-06-18SPTK 2.0a2I've made a lot of changes since version 1.3b, so it doesn't look like it relates to 1.3 anymore. As a matter of fact, I'm starting a version 2.0. So, here we go. The SPTK version 2.0 alpha 2 is here. Below is the list of changes:
    • Class CControl now uses the transparent background (FL_NO_BOX). It allows to place CControl-derived widgets on the group or window with the image background.
    • Class ClayoutManager (CWindow, CGroup) got a new method backgroundImage(). Several examples are modified to use the background pixmaps. The image in background currently is always tiled.
    • Fixed some layout problems in CComboBox, added an example combo_test.
    • Added CTreeView control (a very draft version, but working) based on the FLEK widget. It only currently supports layouts and native methods of the original FLEK widget. I've only slightely changed the way how to add new items to the tree (so far).
    • Replaced CEditor with Fl_Text_Editor. The old editor is excluded.
    • Added CMenuBar::prefferedSize() so it's possible to use it's ctor without parameters in most of the cases.
    • Modified CButton::prefferedSize() so the button can be wider than required width if needed.
    • CVariant and CString are updated with new converters, ctors and assignments. In CVariant the data type names changed from CVT_XXX to VAR_XXX (just a cosmetic change), and added the data type VAR_DATE.
    • CControl::text(CString) methods are replaced with CControl::data(CVariant) to make the data passed in and out of the CControl more widget-specific.
    • Classes CIntMap and CStringMap are completely rewritten to use the sorted maps inside. I've added also the corresponding template classes to make something like CIntMap<CString>. Some of the classes in SPTK already use these new maps.
    • The names of the most files are changed from the form like 'ccontrol.h' to 'CControl.h'.
    I have some more unfinished additions to be completed inside the next week.
    2003-06-05SPTK 1.3b3 SPTK version 1.3 beta 3 is available for download. That version (b3) is necessary to make the CDialog documentation to match the actual code. The website suffered several changes, I hope - for the good reason.
    • Removed the hopelessly outdated page for BCB support.
    • Added a Documentation page
    • Added the documentation for CDialog
    • Corrected a little the documentation for Layouts
    Please, let me know which documentation you need most - I'll try to add it when it's possible.
    2003-06-04SPTK 1.3b2 SPTK version 1.3 beta 2 is available for download.

    Changes/updates in this version:

    • CLayoutManager: multiple small corrections that make it more useful
    • CScroll: a new class that supports layouts at certain degree. It's useful on big dialogs, for instance. Added an example to demonstrate how it works.
    • CMultiTabs: added support for CScroll. CMultiTabs now has two methods to create new pages: newPage() and new Scroll().
    • CDialog: added support for CScroll. CDialog now has two methods to create new pages: newPage() and new Scroll().
    • CQuery: fixed an error on fetching a NULL DATE value. Support for database locks is changed to prevent deadlocks on nested database operations.
    • CParams: fixed an error on writing NULL value on Windows

    Also, I've changed the location of the header files. After 'make install' the header files are installed into /usr/local/include/sptk. In the programs, SPTK headers should be addressed as #include I'm currently re-writing one of my projects to use the layouts. Although it's working already, I expect to have more bugfixes during the next 6..10 days of testing.
    2003-05-28SPTK 1.3b SPTK version 1.3 beta is available for download.

    This version is intended to create a little disturbance. It defines the alternative way to create an FLTK applications. The new layout system defines the automatic layout for widgets and automatic grow of groups. You can read little bit more about it in the draft document I just put together. Also, the draft version of VC++ project is added (it will be updated soon, I hope).

    2003-05-22SPTK 1.2 SPTK 1.2 is switched to release version. The minimal corrections include adding missing include file in cdatetime.cpp. The long-time promised VC++ support is still in testing phase. I'll include it if anyone willing to help me to complete the contributed VC++ project files.

    Special thanks to:

    • Alexander Kazinetz - for contributing VC++ project files
    • Kai Stannigel - for testing SPTK on Debian
    2003-05-06(same)I have added a new page on this site - 'Going eFLTK way'.

    eFLTK is a more advanced version of FLTK and has a lot of features an FLTK developer may want, and as a part of standard package, supported by the authors. That includes extended widgets, database support, etc..

    It could be also interesting for you to try the Equinox Desktop Environment (EDE) built completely on eFLTK.

    2003-04-10SPTK 1.2rc SPTK version 1.2 release candidate is available for download.

    The only change from 1.2b versions is the fix for the reading date fields in CQuery.

    2003-03-22SPTK 1.2b SPTK version 1.2 beta is available for download.
    • Class CStringList has a new constructor (that allows to build it from CBuffer) and two new methods (fromString and fromBuffer).
    • Class CRegistry is revised. Now it can use CStringList as a source of data. That gives us an opportunity to store it anywhere, including the database.
    • Class CMemoInput now can keep it's size when it's added to CDialog. Before, it was shrinking to the size of CInput.
    • Class CDateInput is added a width limit.
    • Class CPhoneInput is added a width limit.
    • Applied a fix for CPopupCalendar offered by Manel de Vicente. CPopupCalendar was crashing during the mouse drag.
    • Added type information into CColumn. That allows CListView to sort dates, integer and floating point numbers correctly. Before, it was just a string-presentation sort.
    • Class CListView now uses the scrolling by row, meaning that top line is always shown completely. The CListview example shows how to use an auto-height rows, and show/hide grid. The CListView sort algorithm is altered to sort dates, floating-point numbers, dates, and strings correctly.
    • All of the SPTK widgets derived from CControl now understand a multiple-event callbacks. Such widgets may receive multiple events in the same callback function and can distinguish them by checking CControl::event_type() and event_argument(). The example/sptk_test.cpp shows how you can use it.
    • Any of the SPTK widgets derived from CControl that use Date input now include calendar button(s)
    • Several small bugs fixed everywhere :)
    2003-03-21websiteI finally got lazy enough to clean this page a little and store the history of changes into the database. Since the list of e-mail addresses I have to send a change notification to is growing, these notifications will be automated and go right out of the database.
    2003-01-31SPTK 1.0 SPTK version 1.0 is available for download. Changes in this version include several small but nice things.

    I've added the event processing in CListView, so now it can generate 11 different events like LVE_ON_ADD_ITEM or LVE_ON_DOUBLE_CLICK. These events are independent from each other. Also, I've added the C-Forge project file. It's very convinient IDE and fast, too.

    Several small bugs were fixed.
    2003-01-07SPTK 0.99 SPTK version 0.99 is available for download. This version has rewritten classes CCheckBoxes and CRadioButtons, both classes now contain a 'freetype' item. Check the examples if you're interested in it. I also changed the make files to use unixODBC - Open Source ODBC manager, instead of my usual Informix ODBC. It requires you to install unixODBC, but it worth it. I have included the example files from SPDB into SPTK for your convenience.

    SPTK is pretty close to become a release. My commercial application that uses SPTK is on release-candidate stage now.

    The Open Source project EDE uses some ideas of SPTK in their eFLTK library. It's worth to check it out, anyway. The EDE team currently works on adding database support to eFLTK. That database support will use the classes, similar to Fl_Query, Fl_Params, Fl_Database, but isn't limited to ODBC. The EDE team plans to add a set of native driver classes (MySQL,Postgress,Informix,etc..).

    2002-10-30SPDB 1.04 SPDB version 1.0.4 and SPTK version 0.98 are available for download. CDateTime class is updated. The CDateTime::Now() function now works with a fractions of second that allows to measure the time intervals with the accuracy of at least 0.05 second - depends on the OS/platform. The new CDateTime::System(CDateTime) function allows to synchronize your program with an external system. It doesn't touch the system timer, though. The time offset between two systems is used to produce the synchronized time. This class is updated in both SPDB/SPTK.
    2002-10-07SPDB 1.03 SPDB version 1.0.3 is available for download. This is just a bug-fix release. The discovered bug was kind of Y2K problem in CDateTime class. This class is also updated in SPTK.
    2002-09-19SPDB 1.02 SPDB version 1.0.2 is available for download. Finally, make builds a shared library, too. Also, I've fixed a minor bug in transaction support. The similar changes will be applied to SPTK inside several days.
    2002-08-24SPTK 0.96 SPTK version 0.96 is available for download. The version 0.95 made several classes (like CRadioBox) obsolete. So I finally excluded them. All the descendants of CControl class now have the menu() method that allows to assisgn a popup menu (for right mouse click). Also, the refresh problems were reported and fixed for CDBListView class.
    2002-08-24SPDB 1.01 SPDB version 1.0.1 is available for download. I have added an example of reading an Excel spreadsheet.
    2002-08-13SPDB 1.00 SPDB version 1.0 is available for download. I have fixed some minor bugs and now consider it a release. Please, let me know if you find anything I didn't fix yet. It had been pretty stable lately (last month, at least).
    2002-07-20SPTK 0.95 SPTK version 0.95 is available for download. I have added some intersting features. All the descendants of CControl class now can call the autoHeight() method to determine the desirable height of the widget. If the widget's label is too long it will be wrapped, and the height of it may also affect the height of the widget. The CRadioButtons class now is one of the descendants of CBaseList. It means you can work with it the same way as with CListView. The new implementation of CRadioButtons class also uses round buttons instead of diamonds, and may use several columns (not just one). The CColumn class, which is used to define a column for CListView-like classes, now may use width=-1 for auto width.
    2002-07-15SPTK 0.92 SPTK version 0.92 is available for download. At last, I've added one example to show the abilities of the library. Here you can find some screenshots from that example. There is still no documentation available.
    2002-07-15BCBfl 1.00 BCB 6 support for FLTK is available for download. Since BCB6 support in FLTK is still broken (last checked 1.1rc4) I decided to publish my successful project files for BCB6 IDE. You can check my page dedicated to this matter but presently it's very short.
    2002-07-05SPTK 0.9 SPTK version 0.9 is available for download. There are no examples or documentation available at this point. I'm going to add it soon.
    2002-06-21MTabs 0.99 Multitabs version 0.99 is available for download. Fixed the effect of 'blinking' controls that have bigger height than tab they are placed on.

    Valid XHTML 1.0! If you have any questions or comments regarding this page feel free to drop a line to Alexey Parshin.
    Design by Michael Perlov