[kde-doc-english] [tellico/frameworks] /: Remove PilotDB exporter. Who uses a Pilot now?

Robby Stephenson robby at periapsis.org
Sun Mar 15 19:24:53 UTC 2015


Git commit e6f0843b7d638db2809f84ed0f157f762051761b by Robby Stephenson.
Committed on 15/03/2015 at 19:24.
Pushed by rstephenson into branch 'frameworks'.

Remove PilotDB exporter. Who uses a Pilot now?

M  +4    -0    ChangeLog
M  +1    -2    doc/advanced.docbook
D  +-    --    doc/export-pdb.png
M  +0    -23   doc/hacking.docbook
M  +0    -17   doc/importing-exporting.docbook
M  +2    -8    src/3rdparty/CMakeLists.txt
D  +0    -17   src/3rdparty/pilotdb/CMakeLists.txt
D  +0    -9    src/3rdparty/pilotdb/libflatfile/CMakeLists.txt
D  +0    -1425 src/3rdparty/pilotdb/libflatfile/DB.cpp
D  +0    -166  src/3rdparty/pilotdb/libflatfile/DB.h
D  +0    -324  src/3rdparty/pilotdb/libflatfile/Database.cpp
D  +0    -320  src/3rdparty/pilotdb/libflatfile/Database.h
D  +0    -48   src/3rdparty/pilotdb/libflatfile/FType.h
D  +0    -119  src/3rdparty/pilotdb/libflatfile/Field.h
D  +0    -77   src/3rdparty/pilotdb/libflatfile/ListView.h
D  +0    -19   src/3rdparty/pilotdb/libflatfile/ListViewColumn.h
D  +0    -45   src/3rdparty/pilotdb/libflatfile/Record.h
D  +0    -85   src/3rdparty/pilotdb/libpalm/Block.cpp
D  +0    -187  src/3rdparty/pilotdb/libpalm/Block.h
D  +0    -9    src/3rdparty/pilotdb/libpalm/CMakeLists.txt
D  +0    -43   src/3rdparty/pilotdb/libpalm/Database.cpp
D  +0    -181  src/3rdparty/pilotdb/libpalm/Database.h
D  +0    -168  src/3rdparty/pilotdb/libpalm/Record.h
D  +0    -85   src/3rdparty/pilotdb/libpalm/Resource.h
D  +0    -117  src/3rdparty/pilotdb/libpalm/palmtypes.h
D  +0    -287  src/3rdparty/pilotdb/pilotdb.cpp
D  +0    -138  src/3rdparty/pilotdb/pilotdb.h
D  +0    -66   src/3rdparty/pilotdb/portability.h
D  +0    -590  src/3rdparty/pilotdb/strop.cpp
D  +0    -153  src/3rdparty/pilotdb/strop.h
M  +0    -1    src/CMakeLists.txt
M  +0    -2    src/core/dbusinterface.h
M  +1    -10   src/exportdialog.cpp
M  +0    -3    src/mainwindow.cpp
M  +1    -2    src/tellicoui.rc
M  +0    -1    src/translators/CMakeLists.txt
D  +0    -246  src/translators/pilotdbexporter.cpp
D  +0    -66   src/translators/pilotdbexporter.h
M  +1    -1    src/translators/translators.h
M  +20   -20   tellico.appdata.xml

http://commits.kde.org/tellico/e6f0843b7d638db2809f84ed0f157f762051761b

diff --git a/ChangeLog b/ChangeLog
index 865add9..eb91b15 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-03-15  Robby Stephenson  <robby at homebase.mars>
+
+	* Removed the PilotDB exporter.
+
 2015-02-15  Robby Stephenson  <robby at periapsis.org>
 
 	* Released Tellico 2.3.10.
diff --git a/doc/advanced.docbook b/doc/advanced.docbook
index 33e8c75..6f9460f 100644
--- a/doc/advanced.docbook
+++ b/doc/advanced.docbook
@@ -52,7 +52,6 @@ bool exportZip(QString file)
 bool exportBibtex(QString file)
 bool exportHTML(QString file)
 bool exportCSV(QString file)
-bool exportPilotDB(QString file)
 QList<int> selectedEntries()
 QList<int> filteredEntries()
 void openFile(QString file)
@@ -65,7 +64,7 @@ For the four import commands, the first argument is the file to import, and the
 </para>
 
 <para>
-The current open collection in &appname; may be exported to a file, in either Tellico &XML; format, Tellico ZIP format, Bibtex, &HTML;, comma-separated values (CSV), or the PilotDB format.
+The current open collection in &appname; may be exported to a file, in either Tellico &XML; format, Tellico ZIP format, Bibtex, &HTML;, or comma-separated values (CSV).
 </para>
 
 <para>A list of the entry IDs currently selected or being filtered is able to facilitate showing or updating entries in the view.</para>
diff --git a/doc/export-pdb.png b/doc/export-pdb.png
deleted file mode 100644
index 2f2bd9a..0000000
Binary files a/doc/export-pdb.png and /dev/null differ
diff --git a/doc/hacking.docbook b/doc/hacking.docbook
index 38faa1e..f7656e0 100644
--- a/doc/hacking.docbook
+++ b/doc/hacking.docbook
@@ -360,29 +360,6 @@ This setting is for the location of the lyxpipe for sending bibliographic citati
 </sect3>
 </sect2>
 
-<sect2 id="hidden-export-options-pilotdb">
-<title>[Export Options - PilotDB]</title>
-
-<para>
-These settings should be placed in the <emphasis>Export Options - PilotDB</emphasis> group.
-</para>
-
-<sect3>
-<title>Charset</title>
-
-<para>
-The encoding of the exported data within the PilotDB file may be changed with this setting. The default value is the character set for the user's locale.
-</para>
-</sect3>
-
-<sect3>
-<title>Example</title>
-<informalexample>
-<para><userinput>Charset=Windows-1250</userinput></para>
-</informalexample>
-</sect3>
-</sect2>
-
 </sect1>
 
 <sect1 id="bibtex-translation">
diff --git a/doc/importing-exporting.docbook b/doc/importing-exporting.docbook
index 26b436a..4ecc851 100644
--- a/doc/importing-exporting.docbook
+++ b/doc/importing-exporting.docbook
@@ -321,23 +321,6 @@ Comma-separated values (CSV) are a common way of importing and exporting tabular
 </screenshot>
 </sect2>
 
-<sect2 id="exporting-pilotdb">
-<title>Exporting Pilot-DB</title>
-
-<para>
-<ulink url="http://pilot-db.sourceforge.net">Pilot-DB</ulink> is a database format for &PalmOS;. Various desktop applications can read and write Pilot-DB files. Exported <literal role="extension">.pdb</literal> files can be transferred to a PDA, and used directly. At the moment, &appname; is not able to import Pilot-DB files.
-</para>
-
-<screenshot>
-<screeninfo>Pilot-DB Export Options</screeninfo>
-<mediaobject>
-<imageobject><imagedata format="PNG" fileref="export-pdb.png"/></imageobject>
-<textobject><phrase>Pilot-DB Export Options</phrase></textobject>
-</mediaobject>
-</screenshot>
-
-</sect2>
-
 <sect2 id="exporting-alexandria">
 <title>Exporting Alexandria</title>
 
diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt
index 35432ed..945772f 100644
--- a/src/3rdparty/CMakeLists.txt
+++ b/src/3rdparty/CMakeLists.txt
@@ -1,15 +1,9 @@
 IF( NOT BTPARSE_FOUND )
   ADD_SUBDIRECTORY( btparse )
 ENDIF( NOT BTPARSE_FOUND )
+
 IF( NOT CSV_FOUND )
   ADD_SUBDIRECTORY( libcsv )
 ENDIF( NOT CSV_FOUND )
-ADD_SUBDIRECTORY( rtf2html )
-ADD_SUBDIRECTORY( pilotdb )
 
-#add_library(3rdparty STATIC)
-
-#TARGET_LINK_LIBRARIES(3rdparty
-#    btparse
-#    libcsv
-#}
+ADD_SUBDIRECTORY( rtf2html )
diff --git a/src/3rdparty/pilotdb/CMakeLists.txt b/src/3rdparty/pilotdb/CMakeLists.txt
deleted file mode 100644
index ba59d51..0000000
--- a/src/3rdparty/pilotdb/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-ADD_SUBDIRECTORY( libflatfile )
-ADD_SUBDIRECTORY( libpalm )
-
-########### next target ###############
-
-SET(pilotdb_STAT_SRCS
-    pilotdb.cpp
-    strop.cpp
-   )
-
-ADD_LIBRARY(pilotdb-tellico STATIC ${pilotdb_STAT_SRCS})
-
-TARGET_LINK_LIBRARIES(pilotdb-tellico
-    libflatfile-tellico
-    libpalm-tellico
-    Qt5::Core
-    )
diff --git a/src/3rdparty/pilotdb/libflatfile/CMakeLists.txt b/src/3rdparty/pilotdb/libflatfile/CMakeLists.txt
deleted file mode 100644
index ed90fb4..0000000
--- a/src/3rdparty/pilotdb/libflatfile/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
-########### next target ###############
-
-SET(libflatfile_STAT_SRCS
-   DB.cpp
-   Database.cpp
-   )
-
-ADD_LIBRARY(libflatfile-tellico STATIC ${libflatfile_STAT_SRCS})
diff --git a/src/3rdparty/pilotdb/libflatfile/DB.cpp b/src/3rdparty/pilotdb/libflatfile/DB.cpp
deleted file mode 100644
index 979dc6b..0000000
--- a/src/3rdparty/pilotdb/libflatfile/DB.cpp
+++ /dev/null
@@ -1,1425 +0,0 @@
-/*
- * palm-db-tools: Read/write DB-format databases
- * Copyright (C) 1999-2001 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifh Floor, Boston, MA  02111-1307  USA
- */
-
-#include "DB.h"
-
-#include <iostream>
-#include <vector>
-#include <string>
-#include <stdexcept>
-#include <sstream>
-#include <time.h>
-
-#include <cstring>
-
-#include "../strop.h"
-
-#define charSeperator '/'
-#define VIEWFLAG_USE_IN_EDITVIEW 0x01
-
-#define INVALID_DEFAULT 0
-#define NOW_DEFAULT 1
-#define CONSTANT_DEFAULT 2
-
-using namespace PalmLib::FlatFile;
-using namespace PalmLib;
-
-namespace {
-  static const pi_uint16_t CHUNK_FIELD_NAMES         = 0;
-  static const pi_uint16_t CHUNK_FIELD_TYPES         = 1;
-  static const pi_uint16_t CHUNK_FIELD_DATA          = 2;
-  static const pi_uint16_t CHUNK_LISTVIEW_DEFINITION = 64;
-  static const pi_uint16_t CHUNK_LISTVIEW_OPTIONS    = 65;
-  static const pi_uint16_t CHUNK_LFIND_OPTIONS       = 128;
-  static const pi_uint16_t CHUNK_ABOUT               = 254;
-}
-
-template <class Map, class Key>
-static inline bool has_key(const Map& map, const Key& key)
-{
-    return map.find(key) != map.end();
-}
-
-bool PalmLib::FlatFile::DB::classify(PalmLib::Database& pdb)
-{
-    return (! pdb.isResourceDB())
-        && (pdb.creator() == PalmLib::mktag('D','B','O','S'))
-        && (pdb.type()    == PalmLib::mktag('D','B','0','0'));
-}
-
-bool PalmLib::FlatFile::DB::match_name(const std::string& name)
-{
-    return (name == "DB") || (name == "db");
-}
-
-void PalmLib::FlatFile::DB::extract_chunks(const PalmLib::Block& appinfo)
-{
-    size_t i;
-    pi_uint16_t chunk_type;
-    pi_uint16_t chunk_size;
-
-    if (appinfo.size() > 4) {
-        // Loop through each chunk in the block while data remains.
-        i = 4;
-        while (i < appinfo.size()) {
-            /* Stop the loop if there is not enough room for even one
-             * chunk header.
-             */
-            if (i + 4 >= appinfo.size()) {
-//                throw PalmLib::error("header is corrupt");
-//                 kDebug() << "header is corrupt";
-            }
-            // Copy the chunk type and size into the local buffer.
-            chunk_type = get_short(appinfo.data() + i);
-            chunk_size = get_short(appinfo.data() + i + 2);
-            i += 4;
-
-            // Copy the chunk into separate storage.
-            Chunk chunk(appinfo.data() + i, chunk_size);
-            chunk.chunk_type = chunk_type;
-            m_chunks[chunk.chunk_type].push_back(chunk);
-
-            /* Advance the index by the size of the chunk. */
-            i += chunk.size();
-        }
-
-        // If everything was correct, then we should be exactly at the
-        // end of the block.
-        if (i != appinfo.size()) {
-//            throw PalmLib::error("header is corrupt");
-//            kDebug() << "header is corrupt";
-        }
-    } else {
-//        throw PalmLib::error("header is corrupt");
-//        kDebug() << "header is corrupt";
-    }
-}
-
-void PalmLib::FlatFile::DB::extract_schema(unsigned numFields)
-{
-    unsigned i;
-
-    if (!has_key(m_chunks, CHUNK_FIELD_NAMES)
-        || !has_key(m_chunks, CHUNK_FIELD_TYPES)) {
-//        throw PalmLib::error("database is missing its schema");
-//        kDebug() << "database is missing its schema";
-        return;
-    }
-
-    Chunk names_chunk = m_chunks[CHUNK_FIELD_NAMES][0];
-    Chunk types_chunk = m_chunks[CHUNK_FIELD_TYPES][0];
-    pi_char_t* p = names_chunk.data();
-    pi_char_t* q = types_chunk.data();
-
-    // Ensure that the types chunk has the expected size.
-    if (types_chunk.size() != numFields * sizeof(pi_uint16_t)) {
-//        throw PalmLib::error("types chunk is corrupt");
-//        kDebug() << "types chunk is corrupt";
-    }
-    // Loop for each field and extract the name and type.
-    for (i = 0; i < numFields; ++i) {
-        PalmLib::FlatFile::Field::FieldType type;
-        int len;
-
-        // Determine the length of the name string. Ensure that the
-        // string does not go beyond the end of the chunk.
-        pi_char_t* null_p = reinterpret_cast<pi_char_t*>
-            (memchr(p, 0, names_chunk.size() - (p - names_chunk.data())));
-        if (!null_p) {
-//            throw PalmLib::error("names chunk is corrupt");
-//            kDebug() << "names chunk is corrupt";
-        }
-        len = null_p - p;
-
-        switch (PalmLib::get_short(q)) {
-        case 0:
-            type = PalmLib::FlatFile::Field::STRING;
-            break;
-
-        case 1:
-            type = PalmLib::FlatFile::Field::BOOLEAN;
-            break;
-
-        case 2:
-            type = PalmLib::FlatFile::Field::INTEGER;
-            break;
-
-        case 3:
-            type = PalmLib::FlatFile::Field::DATE;
-            break;
-
-        case 4:
-            type = PalmLib::FlatFile::Field::TIME;
-            break;
-
-        case 5:
-            type = PalmLib::FlatFile::Field::NOTE;
-            break;
-
-        case 6:
-            type = PalmLib::FlatFile::Field::LIST;
-            break;
-
-        case 7:
-            type = PalmLib::FlatFile::Field::LINK;
-            break;
-
-        case 8:
-            type = PalmLib::FlatFile::Field::FLOAT;
-            break;
-
-        case 9:
-            type = PalmLib::FlatFile::Field::CALCULATED;
-            break;
-
-        case 10:
-            type = PalmLib::FlatFile::Field::LINKED;
-            break;
-
-        default:
-//            throw PalmLib::error("unknown field type");
-//            kDebug() << "unknown field type";
-            type = PalmLib::FlatFile::Field::STRING;
-            break;
-        }
-
-        // Inform the superclass about this field.
-        appendField(std::string((char *) p, len), type, extract_fieldsdata(i, type));
-
-        // Advance to the information on the next field.
-        p += len + 1;
-        q += 2;
-    }
-}
-
-void PalmLib::FlatFile::DB::extract_listviews()
-{
-    if (!has_key(m_chunks, CHUNK_LISTVIEW_DEFINITION))
-        return;
-
-/*        throw PalmLib::error("no list views in database");*/
-
-    const std::vector<Chunk>& chunks = m_chunks[CHUNK_LISTVIEW_DEFINITION];
-
-    for (std::vector<Chunk>::const_iterator iter = chunks.begin();
-         iter != chunks.end(); ++iter) {
-        const Chunk& chunk = (*iter);
-        PalmLib::FlatFile::ListView lv;
-
-        if (chunk.size() < (2 + 2 + 32)) {
-//            throw PalmLib::error("list view is corrupt");
-//            kDebug() << "list view is corrupt";
-        }
-        pi_uint16_t flags = PalmLib::get_short(chunk.data());
-        pi_uint16_t num_cols = PalmLib::get_short(chunk.data() + 2);
-
-        lv.editoruse = false;
-        if (flags & VIEWFLAG_USE_IN_EDITVIEW)
-          lv.editoruse = true;
-
-        if (chunk.size() != static_cast<unsigned> (2 + 2 + 32 + num_cols * 4)) {
-//           throw PalmLib::error("list view is corrupt");
-//           kDebug() << "list view is corrupt";
-        }
-        // Determine the length of the name string.
-        const pi_char_t* null_ptr = reinterpret_cast<const pi_char_t*>
-            (memchr(chunk.data() + 4, 0, 32));
-        if (null_ptr)
-            lv.name = std::string((char *) (chunk.data() + 4),
-                                  null_ptr - (chunk.data() + 4));
-        else
-            lv.name = "Unknown";
-
-        const pi_char_t* p = chunk.data() + 2 + 2 + 32;
-        for (int i = 0; i < num_cols; ++i) {
-            pi_uint16_t field = PalmLib::get_short(p);
-            pi_uint16_t width = PalmLib::get_short(p + 2);
-            p += 2 * sizeof(pi_uint16_t);
-
-            if (field >= getNumOfFields()) {
-//                throw PalmLib::error("list view is corrupt");
-//                kDebug() << "list view is corrupt";
-            }
-            PalmLib::FlatFile::ListViewColumn col(field, width);
-            lv.push_back(col);
-        }
-
-        appendListView(lv);
-    }
-}
-
-std::string PalmLib::FlatFile::DB::extract_fieldsdata(pi_uint16_t field_search, PalmLib::FlatFile::Field::FieldType type)
-{
-    std::ostringstream theReturn;
-
-    if (!has_key(m_chunks, CHUNK_FIELD_DATA))
-        return std::string(theReturn.str());
-
-    std::vector<Chunk>& chunks = m_chunks[CHUNK_FIELD_DATA];
-
-    pi_uint16_t field_num = 0;
-    bool find = false;
-    std::vector<Chunk>::const_iterator iter = chunks.begin();
-    for ( ; iter != chunks.end(); ++iter) {
-        const Chunk& chunk = (*iter);
-
-            field_num = PalmLib::get_short(chunk.data());
-
-        if (field_num == field_search) {
-            find = true;
-            break;
-        }
-    }
-
-    if (find) {
-        const Chunk& chunk = (*iter);
-
-        switch (type) {
-
-            case PalmLib::FlatFile::Field::STRING:
-            theReturn << std::string((const char *)chunk.data()+2, chunk.size() - 2);
-        break;
-
-        case PalmLib::FlatFile::Field::BOOLEAN:
-        break;
-
-        case PalmLib::FlatFile::Field::INTEGER:
-            theReturn << PalmLib::get_long(chunk.data() + sizeof(pi_uint16_t));
-            theReturn << charSeperator;
-            theReturn << PalmLib::get_short(chunk.data() + sizeof(pi_uint16_t) + sizeof(pi_uint32_t));
-        break;
-
-        case PalmLib::FlatFile::Field::FLOAT: {
-            pi_double_t value;
-            value.words.hi = PalmLib::get_long(chunk.data() + 2);
-            value.words.lo = PalmLib::get_long(chunk.data() + 6);
-
-            theReturn << value.number;
-        }
-        break;
-
-        case PalmLib::FlatFile::Field::DATE:
-            if (*(chunk.data() + sizeof(pi_uint16_t)) == NOW_DEFAULT)
-                theReturn << "now";
-            else if (*(chunk.data() + sizeof(pi_uint16_t)) == CONSTANT_DEFAULT) {
-                const pi_char_t * ptr = chunk.data() + sizeof(pi_uint16_t) + 1;
-                struct tm date;
-                            date.tm_year = PalmLib::get_short(ptr) - 1900;
-                            date.tm_mon = (static_cast<int> (*(ptr + 2))) - 1;
-                            date.tm_mday = static_cast<int> (*(ptr + 3));
-
-                        (void) mktime(&date);
-
-                        char buf[1024];
-
-                        // Clear out the output buffer.
-                        memset(buf, 0, sizeof(buf));
-
-                        // Convert and output the date using the format.
-                        strftime(buf, sizeof(buf), "%Y/%m/%d", &date);
-
-                theReturn << buf;
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::TIME:
-            if (*(chunk.data() + sizeof(pi_uint16_t)) == NOW_DEFAULT)
-                theReturn << "now";
-            else if (*(chunk.data() + sizeof(pi_uint16_t)) == CONSTANT_DEFAULT) {
-                const pi_char_t * ptr = chunk.data() + sizeof(pi_uint16_t) + 1;
-                struct tm t;
-                const struct tm * tm_ptr;
-                time_t now;
-
-                time(&now);
-                tm_ptr = localtime(&now);
-                memcpy(&t, tm_ptr, sizeof(tm));
-
-                t.tm_hour = static_cast<int> (*(ptr));
-                t.tm_min = static_cast<int> (*(ptr + 1));
-                t.tm_sec = 0;
-
-                char buf[1024];
-
-                // Clear out the output buffer.
-                memset(buf, 0, sizeof(buf));
-
-                // Convert and output the date using the format.
-                strftime(buf, sizeof(buf), "%H:%M", &t);
-
-                theReturn << buf;
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::NOTE:
-        break;
-
-        case PalmLib::FlatFile::Field::LIST: {
-            unsigned short numItems = PalmLib::get_short(chunk.data() + sizeof(pi_uint16_t));
-            int prevLength = 0;
-            std::string item;
-
-            if (numItems > 0) {
-                for (unsigned short i = 0; i < numItems - 1; i++) {
-                    item = std::string((const char *)chunk.data() + 3 * sizeof(pi_uint16_t) + prevLength);
-                    theReturn << item << charSeperator;
-                    prevLength += item.length() + 1;
-                }
-                item = std::string((const char *)chunk.data() + 3 * sizeof(pi_uint16_t) + prevLength);
-                theReturn << item;
-            }
-        }
-        break;
-
-        case PalmLib::FlatFile::Field::LINK:
-            theReturn << std::string((const char *)chunk.data()+sizeof(pi_uint16_t));
-//            theReturn << std::string((const char *)chunk.data()+sizeof(pi_uint16_t), chunk.size() - 2);
-            theReturn << charSeperator;
-            theReturn << PalmLib::get_short(chunk.data() + sizeof(pi_uint16_t) + 32 * sizeof(pi_char_t));
-        break;
-
-        case PalmLib::FlatFile::Field::LINKED:
-            theReturn << PalmLib::get_short(chunk.data() + sizeof(pi_uint16_t));
-            theReturn << charSeperator;
-            theReturn << PalmLib::get_short(chunk.data() + 2 * sizeof(pi_uint16_t));
-        break;
-
-        case PalmLib::FlatFile::Field::CALCULATED:
-        break;
-
-        default:
-//            kDebug() << "unknown field type";
-            break;
-        }
-    }
-    return std::string(theReturn.str());
-}
-
-void PalmLib::FlatFile::DB::extract_aboutinfo()
-{
-    if (!has_key(m_chunks, CHUNK_ABOUT))
-        return;
-
-    Chunk chunk = m_chunks[CHUNK_ABOUT][0];
-    pi_char_t* header = chunk.data();
-    pi_char_t* q = chunk.data() + PalmLib::get_short(header);
-
-    setAboutInformation( (char*)q);
-}
-
-void PalmLib::FlatFile::DB::parse_record(PalmLib::Record& record,
-                                         std::vector<pi_char_t *>& ptrs,
-                                         std::vector<size_t>& sizes)
-{
-    unsigned i;
-
-    // Ensure that enough space for the offset table exists.
-    if (record.size() < getNumOfFields() * sizeof(pi_uint16_t)) {
-//        throw PalmLib::error("record is corrupt");
-//        kDebug() << "record is corrupt";
-    }
-    // Extract the offsets from the record. Determine field pointers.
-    std::vector<pi_uint16_t> offsets(getNumOfFields());
-    for (i = 0; i < getNumOfFields(); ++i) {
-        offsets[i] = get_short(record.data() + i * sizeof(pi_uint16_t));
-        if (offsets[i] >= record.size()) {
-//            throw PalmLib::error("record is corrupt");
-//            kDebug() << "record is corrupt";
-        }
-        ptrs.push_back(record.data() + offsets[i]);
-    }
-
-    // Determine the field sizes.
-    for (i = 0; i < getNumOfFields() - 1; ++i) {
-        sizes.push_back(offsets[i + 1] - offsets[i]);
-    }
-    sizes.push_back(record.size() - offsets[getNumOfFields() - 1]);
-}
-
-PalmLib::FlatFile::DB::DB(PalmLib::Database& pdb)
-    : Database("db", pdb), m_flags(0)
-{
-    // Split the application information block into its component chunks.
-    extract_chunks(pdb.getAppInfoBlock());
-
-    // Pull the header fields and schema out of the databasse.
-    m_flags = get_short(pdb.getAppInfoBlock().data());
-    unsigned numFields = get_short(pdb.getAppInfoBlock().data() + 2);
-    extract_schema(numFields);
-
-    // Extract all of the list views.
-    extract_listviews();
-
-    extract_aboutinfo();
-
-    for (unsigned i = 0; i < pdb.getNumRecords(); ++i) {
-        PalmLib::Record record = pdb.getRecord(i);
-        Record rec;
-
-            std::vector<pi_char_t *> ptrs;
-            std::vector<size_t> sizes;
-            parse_record(record, ptrs, sizes);
-            for (unsigned j = 0; j < getNumOfFields(); ++j) {
-                PalmLib::FlatFile::Field f;
-        f.type = field_type(j);
-
-                switch (field_type(j)) {
-                case PalmLib::FlatFile::Field::STRING:
-                            f.type = PalmLib::FlatFile::Field::STRING;
-                            f.v_string = std::string((char *) ptrs[j], sizes[j] - 1);
-                    break;
-
-                case PalmLib::FlatFile::Field::BOOLEAN:
-                            f.type = PalmLib::FlatFile::Field::BOOLEAN;
-                            if (*(ptrs[j]))
-                                f.v_boolean = true;
-                            else
-                                f.v_boolean = false;
-                    break;
-
-                case PalmLib::FlatFile::Field::INTEGER:
-                            f.type = PalmLib::FlatFile::Field::INTEGER;
-                            f.v_integer = PalmLib::get_long(ptrs[j]);
-                break;
-
-                case PalmLib::FlatFile::Field::FLOAT: {
-                            // Place data from database in a union for conversion.
-                            pi_double_t value;
-                            value.words.hi = PalmLib::get_long(ptrs[j]);
-                            value.words.lo = PalmLib::get_long(ptrs[j] + 4);
-
-                            // Fill out the information for this field.
-                            f.type = PalmLib::FlatFile::Field::FLOAT;
-                            f.v_float = value.number;
-                    }
-                break;
-
-                    case PalmLib::FlatFile::Field::DATE:
-                            f.type = PalmLib::FlatFile::Field::DATE;
-                            f.v_date.year = PalmLib::get_short(ptrs[j]);
-                            f.v_date.month = static_cast<int> (*(ptrs[j] + 2));
-                            f.v_date.day = static_cast<int> (*(ptrs[j] + 3));
-                break;
-
-                    case PalmLib::FlatFile::Field::TIME:
-                            f.type = PalmLib::FlatFile::Field::TIME;
-                            f.v_time.hour = static_cast<int> (*(ptrs[j]));
-                            f.v_time.minute = static_cast<int> (*(ptrs[j] + 1));
-                break;
-
-                case PalmLib::FlatFile::Field::NOTE:
-                            f.type = PalmLib::FlatFile::Field::NOTE;
-                            f.v_string = std::string((char *) ptrs[j], sizes[j] - 3);
-                            f.v_note = std::string((char *) (record.data() + get_short(ptrs[j] + strlen(f.v_string.c_str()) + 1)));
-                break;
-
-                case PalmLib::FlatFile::Field::LIST:
-                            f.type = PalmLib::FlatFile::Field::LIST;
-                if (!field(j).argument().empty()) {
-                    std::string data = field(j).argument();
-                    unsigned int k;
-                    std::string::size_type pos = 0;
-                    pi_uint16_t itemID = *ptrs[j]; // TR: a list value is stored on 1 byte
-
-                    for (k = 0; k < itemID; k++) {
-                        if ((pos = data.find(charSeperator, pos)) == std::string::npos) {
-                            break;
-                        }
-                        pos++;
-                    }
-                    if (pos == std::string::npos) {
-                        f.v_string = "N/A";
-                    } else {
-                        if (data.find(charSeperator, pos) == std::string::npos) {
-                            f.v_string = data.substr( pos, std::string::npos);
-                        } else {
-                            f.v_string = data.substr( pos, data.find(charSeperator, pos) - pos);
-            }
-                    }
-                }
-                break;
-
-                case PalmLib::FlatFile::Field::LINK:
-                            f.type = PalmLib::FlatFile::Field::LINK;
-                            f.v_integer = PalmLib::get_long(ptrs[j]);
-                            f.v_string = std::string((char *) (ptrs[j] + 4), sizes[j] - 5);
-                break;
-
-                case PalmLib::FlatFile::Field::LINKED:
-                            f.type = PalmLib::FlatFile::Field::LINKED;
-                            f.v_string = std::string((char *) ptrs[j], sizes[j] - 1);
-                break;
-
-                case PalmLib::FlatFile::Field::CALCULATED: {
-                std::ostringstream value;
-                            f.type = PalmLib::FlatFile::Field::CALCULATED;
-                switch (ptrs[j][0]) {
-                case 1: //string
-                    value << std::string((char *) ptrs[j] + 1, sizes[j] - 2);
-                break;
-                case 2: //integer
-                    value << PalmLib::get_long(ptrs[j] + 1);
-                break;
-                case 9: //float
-                {
-                    pi_double_t fvalue;
-                    fvalue.words.hi = PalmLib::get_long(ptrs[j] + 1);
-                    fvalue.words.lo = PalmLib::get_long(ptrs[j] + 5);
-
-                    value << fvalue.number;
-                    }
-                default:
-                    value << "N/A";
-                }
-                f.v_string = value.str();
-                } break;
-
-                    default:
-//                            kDebug() << "unknown field type";
-                            break;
-            }
-
-            // Append this field to the record.
-            rec.appendField(f);
-        }
-        rec.unique_id(record.unique_id());
-        // Append this record to the database.
-        appendRecord(rec);
-    }
-}
-
-void PalmLib::FlatFile::DB::make_record(PalmLib::Record& pdb_record,
-                                        const Record& record) const
-{
-  unsigned int i;
-
-    // Determine the packed size of this record.
-    size_t size = getNumOfFields() * sizeof(pi_uint16_t);
-    for (i = 0; i < getNumOfFields(); i++) {
-      const Field field = record.fields().at(i);
-        switch (field.type) {
-        case PalmLib::FlatFile::Field::STRING:
-            size += field.v_string.length() + 1;
-            break;
-
-        case PalmLib::FlatFile::Field::NOTE:
-            size += field.v_string.length() + 3;
-        size += field.v_note.length() + 1;
-            break;
-
-        case PalmLib::FlatFile::Field::BOOLEAN:
-            size += 1;
-            break;
-
-        case PalmLib::FlatFile::Field::INTEGER:
-            size += 4;
-            break;
-
-        case PalmLib::FlatFile::Field::FLOAT:
-            size += 8;
-            break;
-
-        case PalmLib::FlatFile::Field::DATE:
-            size += sizeof(pi_uint16_t) + 2 * sizeof(pi_char_t);
-            break;
-
-        case PalmLib::FlatFile::Field::TIME:
-            size += 2 * sizeof(pi_char_t);
-            break;
-
-        case PalmLib::FlatFile::Field::LIST:
-            size += sizeof(pi_char_t);
-            break;
-
-        case PalmLib::FlatFile::Field::LINK:
-            size += sizeof(pi_int32_t);
-            size += field.v_string.length() + 1;
-            break;
-
-        case PalmLib::FlatFile::Field::LINKED:
-            size += field.v_string.length() + 1;
-            break;
-
-    case PalmLib::FlatFile::Field::CALCULATED:
-        size += 1;
-        break;
-
-        default:
-//            kDebug() << "unsupported field type";
-            break;
-        }
-    }
-
-    // Allocate a block for the packed record and setup the pointers.
-    pi_char_t* buf = new pi_char_t[size];
-    pi_char_t* p = buf + getNumOfFields() * sizeof(pi_uint16_t);
-    pi_char_t* offsets = buf;
-
-    // Pack the fields into the buffer.
-    for (i = 0; i < getNumOfFields(); ++i) {
-        pi_char_t* noteOffsetOffset = 0;
-        bool setNote = false;
-        const Field fieldData = record.fields().at(i);
-
-        // Mark the offset to the start of this field in the offests table.
-        PalmLib::set_short(offsets, static_cast<pi_uint16_t> (p - buf));
-        offsets += sizeof(pi_uint16_t);
-
-        // Pack the field.
-        switch (fieldData.type) {
-        case PalmLib::FlatFile::Field::STRING:
-            memcpy(p, fieldData.v_string.c_str(), fieldData.v_string.length() + 1);
-            p += fieldData.v_string.length() + 1;
-            break;
-
-        case PalmLib::FlatFile::Field::NOTE:
-          if (setNote)
-//            kDebug() << "unsupported field type";
-            memcpy(p, fieldData.v_string.c_str(), fieldData.v_string.length() + 1);
-            p += fieldData.v_string.length() + 1;
-            noteOffsetOffset = p;
-            p += 2;
-            setNote = true;
-            break;
-
-        case PalmLib::FlatFile::Field::BOOLEAN:
-            *p++ = ((fieldData.v_boolean) ? 1 : 0);
-            break;
-
-        case PalmLib::FlatFile::Field::INTEGER:
-            PalmLib::set_long(p, fieldData.v_integer);
-            p += sizeof(pi_int32_t);
-            break;
-
-        case PalmLib::FlatFile::Field::FLOAT: {
-            // Place data the data in a union for easy conversion.
-            pi_double_t value;
-            value.number = fieldData.v_float;
-            PalmLib::set_long(p, value.words.hi);
-            p += sizeof(pi_uint32_t);
-            PalmLib::set_long(p, value.words.lo);
-            p += sizeof(pi_uint32_t);
-            break;
-        }
-
-        case PalmLib::FlatFile::Field::DATE:
-            PalmLib::set_short(p, fieldData.v_date.year);
-            p += sizeof(pi_uint16_t);
-            *p++ = static_cast<pi_char_t> (fieldData.v_date.month & 0xFF);
-            *p++ = static_cast<pi_char_t> (fieldData.v_date.day & 0xFF);
-            break;
-
-        case PalmLib::FlatFile::Field::TIME:
-            *p++ = static_cast<pi_char_t> (fieldData.v_time.hour & 0xFF);
-            *p++ = static_cast<pi_char_t> (fieldData.v_time.minute & 0xFF);
-            break;
-
-        case PalmLib::FlatFile::Field::LIST:
-        if (!field(i).argument().empty()) {
-            std::string data = field(i).argument();
-            std::string::size_type pos = 0, next;
-            unsigned int j = 0;
-            pi_int16_t itemID = -1;
-
-            while ( (next = data.find(charSeperator, pos)) != std::string::npos) {
-                if (fieldData.v_string == data.substr( pos, next - pos)) {
-                    itemID = j;
-                    break;
-                }
-                j++;
-                pos = next + 1;
-            }
-      // TR: the following test handles the case where the field value
-      // equals the last item in list (bugfix)
-            if (itemID == -1 && fieldData.v_string == data.substr( pos, std::string::npos)) {
-                itemID = j;
-            }
-            p[0] = itemID; // TR: a list value is stored on 1 byte
-            p += sizeof(pi_char_t);
-        }
-            break;
-
-        case PalmLib::FlatFile::Field::LINK:
-            PalmLib::set_long(p, fieldData.v_integer);
-            p += sizeof(pi_int32_t);
-            memcpy(p, fieldData.v_string.c_str(), fieldData.v_string.length() + 1);
-            p += fieldData.v_string.length() + 1;
-            break;
-
-        case PalmLib::FlatFile::Field::LINKED:
-            memcpy(p, fieldData.v_string.c_str(), fieldData.v_string.length() + 1);
-            p += fieldData.v_string.length() + 1;
-            break;
-
-    case PalmLib::FlatFile::Field::CALCULATED:
-        *p = 13;
-        p++;
-        break;
-
-        default:
-//            kDebug() << "unsupported field type";
-            break;
-        }
-    if (setNote) {
-        if (fieldData.v_note.length()) {
-                memcpy(p, fieldData.v_note.c_str(), fieldData.v_note.length() + 1);
-                PalmLib::set_short(noteOffsetOffset, (pi_uint16_t)(p - buf));
-                p += fieldData.v_note.length() + 1;
-        } else {
-                PalmLib::set_short(noteOffsetOffset, 0);
-        }
-    }
-    }
-
-    // Place the packed data into the PalmOS record.
-    pdb_record.set_raw(buf, size);
-    delete [] buf;
-}
-
-void PalmLib::FlatFile::DB::build_fieldsdata_chunks(std::vector<DB::Chunk>& chunks) const
-{
-    pi_char_t * buf = 0, * p;
-    unsigned int size, i;
-
-    for (i = 0; i < getNumOfFields(); ++i) {
-        size = 0;
-        switch (field_type(i)) {
-        case PalmLib::FlatFile::Field::STRING:
-            if (!field(i).argument().empty()) {
-                size = (field(i).argument().length() + 1) + 2;
-                buf = new pi_char_t[size];
-                PalmLib::set_short(buf, i);
-                strcpy((char *) (buf + 2), field(i).argument().c_str());
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::BOOLEAN:
-        break;
-
-        case PalmLib::FlatFile::Field::INTEGER:
-            if (!field(i).argument().empty()) {
-                std::string data = field(i).argument();
-                std::pair< PalmLib::pi_int32_t, PalmLib::pi_int16_t> values(0, 0);
-
-                if ( data.find(charSeperator) != std::string::npos) {
-                    StrOps::convert_string(data.substr( 0, data.find(charSeperator)), values.first);
-                    StrOps::convert_string(data.substr( data.find(charSeperator) + 1, std::string::npos), values.second);
-                } else
-                    StrOps::convert_string(data, values.first);
-
-                size = 2 + sizeof(pi_uint32_t) + sizeof(pi_uint16_t);
-                buf = new pi_char_t[size];
-                p = buf;
-                PalmLib::set_short(p, i);
-                p += sizeof(pi_uint16_t);
-                    PalmLib::set_long(p, values.first);
-                    p += sizeof(pi_uint32_t);
-                    PalmLib::set_short(p, values.second);
-                    p += sizeof(pi_uint16_t);
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::FLOAT:
-            if (!field(i).argument().empty()) {
-                std::string data = field(i).argument();
-                pi_double_t value;
-
-                StrOps::convert_string(data, value.number);
-
-                size = 2 + 2 * sizeof(pi_uint32_t);
-                buf = new pi_char_t[size];
-                p = buf;
-                PalmLib::set_short(p, i);
-                p += sizeof(pi_uint16_t);
-                PalmLib::set_long(p, value.words.hi);
-                p += sizeof(pi_uint32_t);
-                PalmLib::set_long(p, value.words.lo);
-                p += sizeof(pi_uint32_t);
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::DATE:
-            if (!field(i).argument().empty()) {
-                std::string data = field(i).argument();
-                struct tm date;
-                pi_char_t type;
-
-                if (data.substr(0, 3) == "now") {
-                    type = NOW_DEFAULT;
-                            const struct tm * tm_ptr;
-                            time_t now;
-
-                            time(&now);
-                            tm_ptr = localtime(&now);
-                            memcpy(&date, tm_ptr, sizeof(tm));
-                } else
-#ifdef strptime
-                    if (strptime(data.c_str(), "%Y/%m/%d", &date))
-#else
-                    if (StrOps::strptime(data.c_str(), "%Y/%m/%d", &date))
-#endif
-                    type = CONSTANT_DEFAULT;
-                else
-                    type = INVALID_DEFAULT;
-
-                if (type != INVALID_DEFAULT) {
-                    size = sizeof(pi_uint16_t) + 1 + sizeof(pi_uint16_t) + 2;
-                    buf = new pi_char_t[size];
-                    p = buf;
-                    PalmLib::set_short(p, i);
-                    p += sizeof(pi_uint16_t);
-                    *p++ = static_cast<pi_char_t> (type & 0xFF);
-                    PalmLib::set_short(p, date.tm_year + 1900);
-                    p += sizeof(pi_uint16_t);
-                    *p++ = static_cast<pi_char_t> ((date.tm_mon + 1) & 0xFF);
-                    *p++ = static_cast<pi_char_t> (date.tm_mday & 0xFF);
-                }
-
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::TIME:
-            if (!field(i).argument().empty()) {
-                std::string data = field(i).argument();
-                struct tm t;
-                pi_char_t type;
-
-                if (data == "now") {
-                    type = NOW_DEFAULT;
-                    const struct tm * tm_ptr;
-                    time_t now;
-
-                    time(&now);
-                    tm_ptr = localtime(&now);
-                    memcpy(&t, tm_ptr, sizeof(tm));
-                } else
-#ifdef strptime
-                if (!strptime(data.c_str(), "%H/%M", &t))
-#else
-                if (!StrOps::strptime(data.c_str(), "%H/%M", &t))
-#endif
-                    type = CONSTANT_DEFAULT;
-                else
-                    type = INVALID_DEFAULT;
-
-                if (type != INVALID_DEFAULT) {
-                    size = sizeof(pi_uint16_t) + 1 + sizeof(pi_uint16_t) + 2;
-                    buf = new pi_char_t[size];
-                    p = buf;
-                    PalmLib::set_short(p, i);
-                    p += sizeof(pi_uint16_t);
-                    *p++ = static_cast<pi_char_t> (type & 0xFF);
-                    *p++ = static_cast<pi_char_t> (t.tm_hour & 0xFF);
-                    *p++ = static_cast<pi_char_t> (t.tm_min & 0xFF);
-                }
-
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::NOTE:
-        break;
-
-        case PalmLib::FlatFile::Field::LIST:
-            if (!field(i).argument().empty()) {
-                std::string data = field(i).argument();
-                std::vector<std::string> items;
-                std::string::size_type pos = 0, next;
-                std::vector<std::string>::iterator iter;
-                size = 2 + 2 * sizeof(pi_uint16_t);
-                while ( (next = data.find(charSeperator, pos)) != std::string::npos) {
-                    std::string item = data.substr( pos, next - pos);
-                    items.push_back(item);
-                    size += item.length() + 1;
-                    pos = next + 1;
-                }
-                if (pos != std::string::npos) {
-                    std::string item = data.substr( pos, std::string::npos);
-                    items.push_back(item);
-                    size += item.length() + 1;
-                }
-
-                buf = new pi_char_t[size];
-                p = buf;
-                PalmLib::set_short(p, i);
-                p += sizeof(pi_uint16_t);
-                PalmLib::set_short(p, items.size());
-                p += sizeof(pi_uint16_t);
-                p += sizeof(pi_uint16_t);
-                for (iter = items.begin(); iter != items.end(); ++iter) {
-                    std::string& item = (*iter);
-                    strcpy((char *) p, item.c_str());
-                    p[item.length()] = 0;
-                    p += item.length() + 1;
-                }
-
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::LINK:
-            if (!field(i).argument().empty()) {
-                std::string data = field(i).argument();
-                std::string databasename;
-                pi_uint16_t fieldnum;
-
-                if ( data.find(charSeperator) != std::string::npos) {
-                    databasename = data.substr( 0, data.find(charSeperator));
-                    StrOps::convert_string(data.substr( data.find(charSeperator) + 1, std::string::npos), fieldnum);
-                } else {
-                    databasename = data;
-                    fieldnum = 0;
-                }
-
-                size = 2 + 32 * sizeof(pi_char_t) + sizeof(pi_uint16_t);
-                buf = new pi_char_t[size];
-                p = buf;
-                PalmLib::set_short(p, i);
-                p += sizeof(pi_uint16_t);
-                strcpy((char *) p, databasename.c_str());
-                p += 32 * sizeof(pi_char_t);
-                PalmLib::set_short(p, fieldnum);
-                p += sizeof(pi_uint16_t);
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::LINKED:
-            if (!field(i).argument().empty()) {
-                std::string data = field(i).argument();
-                pi_uint16_t linknum;
-                pi_uint16_t fieldnum;
-
-                if ( data.find(charSeperator) != std::string::npos) {
-                    StrOps::convert_string(data.substr( 0, data.find(charSeperator)), linknum);
-                    StrOps::convert_string(data.substr( data.find(charSeperator) + 1, std::string::npos), fieldnum);
-                    if (field_type(linknum) != PalmLib::FlatFile::Field::LINK) {
-                        unsigned int j = 0;
-                        while (field_type(j) != PalmLib::FlatFile::Field::LINK && j < i) j++;
-                        linknum = j;
-                    }
-                } else {
-                    unsigned int j = 0;
-                    while (field_type(j) != PalmLib::FlatFile::Field::LINK && j < i) j++;
-                    linknum = j;
-                    fieldnum = 0;
-                }
-
-                size = 2 + 2 *  sizeof(pi_uint16_t);
-                buf = new pi_char_t[size];
-                p = buf;
-                PalmLib::set_short(p, i);
-                p += sizeof(pi_uint16_t);
-                       PalmLib::set_short(p, linknum);
-                    p += sizeof(pi_uint16_t);
-                       PalmLib::set_short(p, fieldnum);
-                    p += sizeof(pi_uint16_t);
-            }
-        break;
-
-        case PalmLib::FlatFile::Field::CALCULATED:
-        break;
-
-        default:
-//            kDebug() << "unknown field type";
-            break;
-        }
-
-        if (size) {
-            Chunk data_chunk(buf, size);
-            data_chunk.chunk_type = CHUNK_FIELD_DATA;
-            delete [] buf;
-            chunks.push_back(data_chunk);
-        }
-    }
-}
-
-void PalmLib::FlatFile::DB::build_about_chunk(std::vector<DB::Chunk>& chunks) const
-{
-    pi_char_t* buf;
-    pi_char_t* p;
-    int headersize = 2*sizeof(pi_uint16_t);
-    std::string information = getAboutInformation();
-
-    if (!information.length())
-        return;
-    // Build the names chunk.
-    buf = new pi_char_t[headersize + information.length() + 1];
-    p = buf;
-
-    PalmLib::set_short(p, headersize);
-    p += 2;
-    PalmLib::set_short(p, 1); //about type version
-    p += 2;
-    memcpy(p, information.c_str(), information.length() + 1);
-    p += information.length() + 1;
-    Chunk chunk(buf, headersize + information.length() + 1);
-    chunk.chunk_type = CHUNK_ABOUT;
-    delete [] buf;
-    chunks.push_back(chunk);
-
-}
-
-void PalmLib::FlatFile::DB::build_standard_chunks(std::vector<DB::Chunk>& chunks) const
-{
-    pi_char_t* buf;
-    pi_char_t* p;
-    unsigned i;
-
-    // Determine the size needed for the names chunk.
-    size_t names_chunk_size = 0;
-    for (i = 0; i < getNumOfFields(); ++i) {
-        names_chunk_size += field_name(i).length() + 1;
-    }
-
-    // Build the names chunk.
-    buf = new pi_char_t[names_chunk_size];
-    p = buf;
-    for (i = 0; i < getNumOfFields(); ++i) {
-        const std::string name = field_name(i);
-        memcpy(p, name.c_str(), name.length() + 1);
-        p += name.length() + 1;
-    }
-    Chunk names_chunk(buf, names_chunk_size);
-    names_chunk.chunk_type = CHUNK_FIELD_NAMES;
-    delete [] buf;
-
-    // Build the types chunk.
-    buf = new pi_char_t[getNumOfFields() * sizeof(pi_uint16_t)];
-    p = buf;
-    for (i = 0; i < getNumOfFields(); ++i) {
-        // Pack the type of the current field.
-        switch (field_type(i)) {
-        case PalmLib::FlatFile::Field::STRING:
-            PalmLib::set_short(p, 0);
-            break;
-
-        case PalmLib::FlatFile::Field::BOOLEAN:
-            PalmLib::set_short(p, 1);
-            break;
-
-        case PalmLib::FlatFile::Field::INTEGER:
-            PalmLib::set_short(p, 2);
-            break;
-
-        case PalmLib::FlatFile::Field::DATE:
-            PalmLib::set_short(p, 3);
-            break;
-
-        case PalmLib::FlatFile::Field::TIME:
-            PalmLib::set_short(p, 4);
-            break;
-
-        case PalmLib::FlatFile::Field::NOTE:
-            PalmLib::set_short(p, 5);
-            break;
-
-        case PalmLib::FlatFile::Field::LIST:
-            PalmLib::set_short(p, 6);
-            break;
-
-        case PalmLib::FlatFile::Field::LINK:
-            PalmLib::set_short(p, 7);
-            break;
-
-        case PalmLib::FlatFile::Field::FLOAT:
-            PalmLib::set_short(p, 8);
-            break;
-
-        case PalmLib::FlatFile::Field::CALCULATED:
-            PalmLib::set_short(p, 9);
-            break;
-
-        case PalmLib::FlatFile::Field::LINKED:
-            PalmLib::set_short(p, 10);
-            break;
-
-        default:
-//            kDebug() << "unsupported field type";
-            break;
-        }
-
-        // Advance to the next position.
-        p += sizeof(pi_uint16_t);
-    }
-    Chunk types_chunk(buf, getNumOfFields() * sizeof(pi_uint16_t));
-    types_chunk.chunk_type = CHUNK_FIELD_TYPES;
-    delete [] buf;
-
-    // Build the list view options chunk.
-    buf = new pi_char_t[2 * sizeof(pi_uint16_t)];
-    PalmLib::set_short(buf, 0);
-    PalmLib::set_short(buf + sizeof(pi_uint16_t), 0);
-    Chunk listview_options_chunk(buf, 2 * sizeof(pi_uint16_t));
-    listview_options_chunk.chunk_type = CHUNK_LISTVIEW_OPTIONS;
-    delete [] buf;
-
-    // Build the local find options chunk.
-    buf = new pi_char_t[sizeof(pi_uint16_t)];
-    PalmLib::set_short(buf, 0);
-    Chunk lfind_options_chunk(buf, 1 * sizeof(pi_uint16_t));
-    lfind_options_chunk.chunk_type = CHUNK_LFIND_OPTIONS;
-    delete [] buf;
-
-    // Add all the chunks to the chunk list.
-    chunks.push_back(names_chunk);
-    chunks.push_back(types_chunk);
-    chunks.push_back(listview_options_chunk);
-    chunks.push_back(lfind_options_chunk);
-}
-
-void PalmLib::FlatFile::DB::build_listview_chunk(std::vector<DB::Chunk>& chunks,
-                                                 const ListView& lv) const
-{
-    // Calculate size and allocate space for the temporary buffer.
-    size_t size = 2 * sizeof(pi_uint16_t) + 32
-        + lv.size() * (2 * sizeof(pi_uint16_t));
-    pi_char_t* buf = new pi_char_t[size];
-
-    // Fill in the header details.
-  pi_uint16_t flags = 0;
-  if (lv.editoruse) {
-    std::cout << "editoruse\n";
-    flags |= VIEWFLAG_USE_IN_EDITVIEW;
-  }
-    PalmLib::set_short(buf, flags);
-    PalmLib::set_short(buf + sizeof(pi_uint16_t), lv.size());
-    memset((char *) (buf + 4), 0, 32);
-    strncpy((char *) (buf + 4), lv.name.c_str(), 32);
-
-    // Fill in the column details.
-    pi_char_t* p = buf + 4 + 32;
-    for (ListView::const_iterator i = lv.begin(); i != lv.end(); ++i) {
-        const ListViewColumn& col = (*i);
-        PalmLib::set_short(p, col.field);
-        PalmLib::set_short(p + sizeof(pi_uint16_t), col.width);
-        p += 2 * sizeof(pi_uint16_t);
-    }
-
-    // Create the chunk and place it in the chunks list.
-    Chunk chunk(buf, size);
-    chunk.chunk_type = CHUNK_LISTVIEW_DEFINITION;
-    delete [] buf;
-    chunks.push_back(chunk);
-}
-
-void PalmLib::FlatFile::DB::build_appinfo_block(const std::vector<DB::Chunk>& chunks, PalmLib::Block& appinfo) const
-{
-    std::vector<Chunk>::const_iterator iter;
-
-    // Determine the size of the final app info block.
-    size_t size = 2 * sizeof(pi_uint16_t);
-    for (iter = chunks.begin(); iter != chunks.end(); ++iter) {
-        const Chunk& chunk = (*iter);
-        size += 2 * sizeof(pi_uint16_t) + chunk.size();
-    }
-
-    // Allocate the temporary buffer. Fill in the header.
-    pi_char_t* buf = new pi_char_t[size];
-    PalmLib::set_short(buf, m_flags);
-    PalmLib::set_short(buf + sizeof(pi_uint16_t), getNumOfFields());
-
-    // Pack the chunks into the buffer.
-    size_t i = 4;
-    for (iter = chunks.begin(); iter != chunks.end(); ++iter) {
-        const Chunk& chunk = (*iter);
-        // Set the chunk type and size.
-        PalmLib::set_short(buf + i, chunk.chunk_type);
-        PalmLib::set_short(buf + i + 2, chunk.size());
-        i += 4;
-
-        // Copy the chunk data into the buffer.
-        memcpy(buf + i, chunk.data(), chunk.size());
-        i += chunk.size();
-    }
-
-    // Finally, move the buffer into the provided appinfo block.
-    appinfo.set_raw(buf, size);
-    delete [] buf;
-}
-
-void PalmLib::FlatFile::DB::outputPDB(PalmLib::Database& pdb) const
-{
-    unsigned i;
-
-    // Let the superclass have a chance.
-    SUPERCLASS(PalmLib::FlatFile, Database, outputPDB, (pdb));
-
-    // Set the database's type and creator.
-    pdb.type(PalmLib::mktag('D','B','0','0'));
-    pdb.creator(PalmLib::mktag('D','B','O','S'));
-
-    // Create the app info block.
-    std::vector<Chunk> chunks;
-    build_standard_chunks(chunks);
-    for (i = 0; i < getNumOfListViews(); ++i) {
-        build_listview_chunk(chunks, getListView(i));
-    }
-    build_fieldsdata_chunks(chunks);
-    build_about_chunk(chunks);
-
-    PalmLib::Block appinfo;
-    build_appinfo_block(chunks, appinfo);
-    pdb.setAppInfoBlock(appinfo);
-
-    // Output each record to the PalmOS database.
-    for (i = 0; i < getNumRecords(); ++i) {
-        Record record = getRecord(i);
-        PalmLib::Record pdb_record;
-
-        make_record(pdb_record, record);
-        pdb.appendRecord(pdb_record);
-    }
-}
-
-unsigned PalmLib::FlatFile::DB::getMaxNumOfFields() const
-{
-    return 0;
-}
-
-bool
-PalmLib::FlatFile::DB::supportsFieldType(const Field::FieldType& type) const
-{
-    switch (type) {
-        case PalmLib::FlatFile::Field::STRING:
-        case PalmLib::FlatFile::Field::BOOLEAN:
-        case PalmLib::FlatFile::Field::INTEGER:
-        case PalmLib::FlatFile::Field::FLOAT:
-        case PalmLib::FlatFile::Field::DATE:
-        case PalmLib::FlatFile::Field::TIME:
-        case PalmLib::FlatFile::Field::NOTE:
-        case PalmLib::FlatFile::Field::LIST:
-        case PalmLib::FlatFile::Field::LINK:
-        case PalmLib::FlatFile::Field::LINKED:
-        case PalmLib::FlatFile::Field::CALCULATED:
-        return true;
-    default:
-        return false;
-    }
-}
-
-std::vector<std::string>
-PalmLib::FlatFile::DB::field_argumentf(int i, std::string& format)
-{
-    std::vector<std::string> vtitles(0, std::string(""));
-        int j;
-
-    switch (field_type(i)) {
-    case PalmLib::FlatFile::Field::STRING:
-        format = std::string("%s");
-        vtitles.push_back(std::string("default value"));
-    break;
-    case PalmLib::FlatFile::Field::INTEGER:
-        format = std::string("%ld/%d");
-        vtitles.push_back(std::string("default value"));
-        vtitles.push_back(std::string("increment"));
-    break;
-    case PalmLib::FlatFile::Field::FLOAT:
-        format = std::string("%f");
-        vtitles.push_back(std::string("default value"));
-    break;
-    case PalmLib::FlatFile::Field::DATE:
-        format = std::string("%d/%d/%d");
-        vtitles.push_back(std::string("Year (or now)"));
-        vtitles.push_back(std::string("Month"));
-        vtitles.push_back(std::string("Day in the month"));
-    break;
-    case PalmLib::FlatFile::Field::TIME:
-        format = std::string("%d/%d");
-        vtitles.push_back(std::string("Hour (or now)"));
-        vtitles.push_back(std::string("Minute"));
-    break;
-        case PalmLib::FlatFile::Field::LIST:
-        format = std::string("");
-        for (j = 0; j < 31; ++i) {
-            format += std::string("%s/");
-            std::ostringstream  title;
-            title << "item " << j;
-            vtitles.push_back(title.str());
-        }
-        format += std::string("%s");
-        vtitles.push_back(std::string("item 32"));
-    break;
-        case PalmLib::FlatFile::Field::LINK:
-        format = std::string("%s/%d");
-        vtitles.push_back(std::string("database"));
-        vtitles.push_back(std::string("field number"));
-    break;
-        case PalmLib::FlatFile::Field::LINKED:
-        format = std::string("%d/%d");
-        vtitles.push_back(std::string("link field number"));
-        vtitles.push_back(std::string("field number"));
-    break;
-        case PalmLib::FlatFile::Field::CALCULATED:
-    case PalmLib::FlatFile::Field::BOOLEAN:
-        case PalmLib::FlatFile::Field::NOTE:
-    default:
-        format = std::string("");
-    break;
-    }
-    return vtitles;
-}
-
-unsigned PalmLib::FlatFile::DB::getMaxNumOfListViews() const
-{
-    return 0;
-}
-
-void PalmLib::FlatFile::DB::doneWithSchema()
-{
-    // Let the superclass have a chance.
-    SUPERCLASS(PalmLib::FlatFile, Database, doneWithSchema, ());
-/* false from the 0.3.3 version
-    if (getNumOfListViews() < 1)
-        throw PalmLib::error("at least one list view must be specified");
-*/
-}
-
-void PalmLib::FlatFile::DB::setOption(const std::string& name,
-                                      const std::string& value)
-{
-    if (name == "find") {
-        if (!StrOps::string2boolean(value))
-            m_flags &= ~(1);
-        else
-            m_flags |= 1;
-    } else if (name == "read-only"
-                || name == "readonly") {
-        if (!StrOps::string2boolean(value))
-            m_flags &= ~(0x8000);
-        else
-            m_flags |= 0x8000;
-    } else {
-        SUPERCLASS(PalmLib::FlatFile, Database, setOption, (name, value));
-    }
-}
-
-PalmLib::FlatFile::Database::options_list_t
-PalmLib::FlatFile::DB::getOptions(void) const
-{
-    typedef PalmLib::FlatFile::Database::options_list_t::value_type value;
-    PalmLib::FlatFile::Database::options_list_t result;
-
-    result = SUPERCLASS(PalmLib::FlatFile, Database, getOptions, ());
-
-    if (m_flags & 1)
-        result.push_back(value("find", "true"));
-
-    if (m_flags & 0x8000)
-        result.push_back(value("read-only", "true"));
-
-    return result;
-}
diff --git a/src/3rdparty/pilotdb/libflatfile/DB.h b/src/3rdparty/pilotdb/libflatfile/DB.h
deleted file mode 100644
index dd09d36..0000000
--- a/src/3rdparty/pilotdb/libflatfile/DB.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * This class provides access to DB-format databases.
- */
-
-#ifndef __PALMLIB_FLATFILE_DB_H__
-#define __PALMLIB_FLATFILE_DB_H__
-
-#include <map>
-#include <string>
-
-#include "../libpalm/Block.h"
-#include "../libpalm/Database.h"
-#include "Database.h"
-
-namespace PalmLib {
-    namespace FlatFile {
-
-  class DB : public Database {
-  public:
-      /**
-       * Return true if this class can handle the given PalmOS
-       * database.
-       *
-       * @param pdb PalmOS database to check for support.
-       */
-      static bool classify(PalmLib::Database& pdb);
-
-      /**
-       * Return true if this class is the database identified by
-       * name.
-       *
-       * @param name A database type name to check.
-       */
-      static bool match_name(const std::string& name);
-
-      /**
-       * Default constructor for an initially empty database.
-       */
-      DB():Database("db"), m_flags(0) { }
-
-      /**
-       * Constructor which fills the flat-file structure from a
-       * PalmOS database.
-       */
-      DB(PalmLib::Database&);
-
-      // destructor
-      virtual ~DB() { }
-
-        /**
-         * After all processing to add fields and records is done,
-         * outputPDB is called to create the actual file format
-         * used by the flat-file database product.
-         *
-         * @param pdb An instance of PalmLib::Database.
-       */
-        virtual void outputPDB(PalmLib::Database& pdb) const;
-
-        /**
-         * Return the maximum number of fields allowed in the
-         * database. This class returns 0 since there is no limit.
-       */
-        virtual unsigned getMaxNumOfFields() const;
-
-      /**
-       * Return true for the field types that this class
-       * currently supports. Returns false otherwise.
-       *
-       * @param type The field type to check for support.
-       */
-      virtual bool supportsFieldType(const Field::FieldType& type) const;
-
-        /**
-         * write the format of the field's argument in format,
-         * and return a strings' vector with name of each argument part.
-         * the format use the same display as used by printf
-         */
-        virtual std::vector<std::string> field_argumentf(int i, std::string& format);
-
-        /**
-         * Return the maximum number of views supported by this
-         * type of flat-file database.
-       */
-      virtual unsigned getMaxNumOfListViews() const;
-
-      /**
-       * Hook the end of the schema processing.
-       */
-      virtual void doneWithSchema();
-
-      /**
-       * Set a extra option.
-       *
-       * @param opt_name  The name of the option to set.
-       * @param opt_value The value to assign to this option.
-       */
-      virtual void setOption(const std::string& name,
-           const std::string& value);
-
-      /**
-       * Get a list of extra options.
-       */
-      virtual options_list_t getOptions(void) const;
-
-      // Produce a PalmOS record from a flat-file record.
-      void make_record(PalmLib::Record& pdb_record,
-           const PalmLib::FlatFile::Record& record) const;
-
-  private:
-      pi_uint16_t m_flags;
-
-      class Chunk : public PalmLib::Block {
-      public:
-    Chunk() : PalmLib::Block(), chunk_type(0) { }
-    Chunk(const Chunk& rhs)
-        : PalmLib::Block(rhs), chunk_type(rhs.chunk_type) { }
-    Chunk(PalmLib::Block::const_pointer data,
-          const PalmLib::Block::size_type size)
-        : PalmLib::Block(data, size), chunk_type(0) { }
-    Chunk& operator = (const Chunk& rhs) {
-        Block::operator = (rhs);
-        chunk_type = rhs.chunk_type;
-        return *this;
-    }
-
-    pi_uint16_t chunk_type;
-      };
-
-      typedef std::map<pi_uint16_t, std::vector<Chunk> > chunks_t;
-      chunks_t m_chunks;
-
-      // Extract the chunks from an app info block to m_chunks.
-      void extract_chunks(const PalmLib::Block&);
-
-      // Extract the schema.
-      void extract_schema(unsigned numFields);
-
-      // Extract the list views from the app info block.
-      void extract_listviews();
-
-        //extract the field data
-        std::string extract_fieldsdata(pi_uint16_t field_search,
-                  PalmLib::FlatFile::Field::FieldType type);
-
-        void extract_aboutinfo();
-
-      // Determine location and size of each field.
-      void parse_record(PalmLib::Record& record,
-            std::vector<pi_char_t *>& ptrs,
-            std::vector<size_t>& sizes);
-
-      // The following routines build various types of chunks
-      // for the app info block and assemble them all.
-        void build_fieldsdata_chunks(std::vector<Chunk>& chunks) const;
-      void build_standard_chunks(std::vector<Chunk>&) const;
-      void build_listview_chunk(std::vector<Chunk>&,
-              const ListView&) const;
-  void build_about_chunk(std::vector<Chunk>& chunks) const;
-      void build_appinfo_block(const std::vector<Chunk>&,
-             PalmLib::Block&) const;
-  };
-
-    }
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libflatfile/Database.cpp b/src/3rdparty/pilotdb/libflatfile/Database.cpp
deleted file mode 100644
index fc064bd..0000000
--- a/src/3rdparty/pilotdb/libflatfile/Database.cpp
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * palm-db-tools: Abstract adaptor for flat-file databases.
- * Copyright (C) 1999-2000 by Tom Dyas (tdyas at users.sourceforge.net)
- */
-
-#include "Database.h"
-
-#include <iostream>
-#include <stdexcept>
-#include <sstream>
-#include <utility>
-#include <cctype>
-
-PalmLib::FlatFile::Database::Database(std::string p_Type, const PalmLib::Database& pdb)
-    : m_Type(p_Type)
-{
-    title(pdb.name());
-    m_backup = pdb.backup();
-    m_readonly = pdb.readonly();
-    m_copy_prevention = pdb.copy_prevention();
-}
-
-void
-PalmLib::FlatFile::Database::outputPDB(PalmLib::Database& pdb) const
-{
-    pdb.name(title());
-    pdb.backup(m_backup);
-    pdb.readonly(m_readonly);
-    pdb.copy_prevention(m_copy_prevention);
-}
-
-std::string
-PalmLib::FlatFile::Database::title() const
-{
-    return m_title;
-}
-
-void
-PalmLib::FlatFile::Database::title(const std::string& title)
-{
-    m_title = title;
-}
-
-unsigned
-PalmLib::FlatFile::Database::getNumOfFields() const
-{
-    return m_fields.size();
-}
-
-std::string
-PalmLib::FlatFile::Database::field_name(int i) const
-{
-    return m_fields[i].title();
-/*    return m_fields[i].first;*/
-}
-
-PalmLib::FlatFile::Field::FieldType
-PalmLib::FlatFile::Database::field_type(int i) const
-{
-    return m_fields[i].type();
-/*    return m_fields[i].second;*/
-}
-
-PalmLib::FlatFile::FType
-PalmLib::FlatFile::Database::field(int i) const
-{
-    return m_fields[i];
-}
-
-void
-PalmLib::FlatFile::Database::appendField(PalmLib::FlatFile::FType field)
-{
-    if (! supportsFieldType(field.type())) {
-//        throw PalmLib::error("unsupported field type");
-//          kDebug() << "unsupported field type";
-          return;
-    }
-    if (getMaxNumOfFields() != 0 && getNumOfFields() + 1 > getMaxNumOfFields()) {
-//        throw PalmLib::error("maximum number of fields reached");
-//          kDebug() << "maximum number of fields reached";
-          return;
-    }
-    m_fields.push_back(field);
-}
-
-void
-PalmLib::FlatFile::Database::appendField(const std::string& name,
-                                         Field::FieldType type, std::string data)
-{
-    if (! supportsFieldType(type)) {
-//      kDebug() << "unsupported field type";
-        return;
-    }
-//        throw PalmLib::error("unsupported field type");
-    if (getMaxNumOfFields() != 0 && getNumOfFields() + 1 > getMaxNumOfFields()) {
-//      kDebug() << "maximum number of fields reached";
-        return;
-      }
-//        throw PalmLib::error("maximum number of fields reached");
-
-/*    m_fields.push_back(std::make_pair(name, type));*/
-/*    m_fields.push_back(PalmLib::FlatFile::make_ftype(name, type));*/
-    m_fields.push_back(PalmLib::FlatFile::FType(name, type, data));
-}
-
-void
-PalmLib::FlatFile::Database::insertField(int i, PalmLib::FlatFile::FType field)
-{
-    if (! supportsFieldType(field.type())) {
-//        throw PalmLib::error("unsupported field type");
-//        kDebug() << "unsupported field type";
-        return;
-    }
-    if (getMaxNumOfFields() != 0 && getNumOfFields() + 1 > getMaxNumOfFields()) {
-//        throw PalmLib::error("maximum number of fields reached");
-//        kDebug() << "maximum number of fields reached";
-        return;
-      }
-/*    m_fields.push_back(std::make_pair(name, type));*/
-/*    m_fields.push_back(PalmLib::FlatFile::make_ftype(name, type));*/
-    m_fields.insert(m_fields.begin() + i, field);
-}
-
-void
-PalmLib::FlatFile::Database::insertField(int i, const std::string& name,
-                                         Field::FieldType type, std::string data)
-{
-    if (! supportsFieldType(type)) {
-//        throw PalmLib::error("unsupported field type");
-//        kDebug() << "unsupported field type";
-        return;
-    }
-    if (getMaxNumOfFields() != 0 && getNumOfFields() + 1 > getMaxNumOfFields()) {
-//        throw PalmLib::error("maximum number of fields reached");
-//        kDebug() << "maximum number of fields reached";
-        return;
-      }
-/*    m_fields.push_back(std::make_pair(name, type));*/
-/*    m_fields.push_back(PalmLib::FlatFile::make_ftype(name, type));*/
-    m_fields.insert(m_fields.begin() + i, PalmLib::FlatFile::FType(name, type, data));
-}
-
-void
-PalmLib::FlatFile::Database::removeField(int i)
-{
-    m_fields.erase(m_fields.begin() + i);
-}
-
-unsigned
-PalmLib::FlatFile::Database::getNumRecords() const
-{
-    return m_records.size();
-}
-
-PalmLib::FlatFile::Record
-PalmLib::FlatFile::Database::getRecord(unsigned index) const
-{
-    if (index >= getNumRecords()) {
-//      kDebug() << "invalid index";
-     //throw std::out_of_range("invalid index");
-    }
-    return m_records[index];
-}
-
-void
-PalmLib::FlatFile::Database::appendRecord(PalmLib::FlatFile::Record rec)
-{
-    if (rec.fields().size() != getNumOfFields()) {
-//        throw PalmLib::error("the number of fields mismatch");
-//        kDebug() << "the number of fields mismatch";
-        return;
-    }
-    for (unsigned int i = 0; i < getNumOfFields(); i++) {
-        const Field field = rec.fields().at(i);
-        if (field.type != field_type(i)) {
-//          kDebug() << "field " << i << " type " << field_type(i) << " mismatch: " << field.type;
-          return;
-//            throw PalmLib::error(buffer.str());
-        }
-    }
-    m_records.push_back(rec);
-}
-
-void
-PalmLib::FlatFile::Database::deleteRecord(unsigned index)
-{
-    m_records.erase(m_records.begin() + index);
-}
-
-void
-PalmLib::FlatFile::Database::clearRecords()
-{
-    m_records.clear();
-}
-
-unsigned
-PalmLib::FlatFile::Database::getNumOfListViews() const
-{
-    return m_listviews.size();
-}
-
-PalmLib::FlatFile::ListView
-PalmLib::FlatFile::Database::getListView(unsigned index) const
-{
-    return m_listviews[index];
-}
-
-void
-PalmLib::FlatFile::Database::setListView(unsigned index,
-                                         const PalmLib::FlatFile::ListView& lv)
-{
-    // Ensure that the field numbers are within range.
-    for (PalmLib::FlatFile::ListView::const_iterator i = lv.begin();
-         i != lv.end(); ++i) {
-        if ((*i).field >= getNumOfFields())
-            return;
-    }
-
-    m_listviews[index] = lv;
-}
-
-void
-PalmLib::FlatFile::Database::appendListView(const ListView& lv)
-{
-    // Enforce any limit of the maximum number of list views.
-    if (getMaxNumOfListViews() != 0
-        && getNumOfListViews() + 1 > getMaxNumOfListViews())
-        return;
-//        throw PalmLib::error("too many list views for this database type");
-
-    // Ensure that the field numbers are within range.
-    for (PalmLib::FlatFile::ListView::const_iterator i = lv.begin();
-         i != lv.end(); ++i) {
-        if ((*i).field >= getNumOfFields())
-            return;
-    }
-    m_listviews.push_back(lv);
-}
-
-void
-PalmLib::FlatFile::Database::removeListView(unsigned index)
-{
-    if (index < getNumOfListViews())
-        m_listviews.erase( m_listviews.begin()+index);
-}
-
-static void
-strlower(std::string& str)
-{
-    for (std::string::iterator p = str.begin(); p != str.end(); ++p) {
-        if (isupper(*p))
-            *p = tolower(*p);
-    }
-}
-
-static bool
-string2boolean(std::string str)
-{
-    strlower(str);
-    if (str == "on")
-        return true;
-    else if (str == "off")
-        return false;
-    else if (str == "true")
-        return true;
-    else if (str == "t")
-        return true;
-    else if (str == "false")
-        return false;
-    else if (str == "f")
-        return false;
-    else {
-        int num = 0;
-
-        std::istringstream(str.c_str()) >> num;
-        return num != 0 ? true : false;
-    }
-}
-
-void
-PalmLib::FlatFile::Database::setOption(const std::string& name,
-                                       const std::string& value)
-{
-    if (name == "backup")
-        m_backup = string2boolean(value);
-    else if (name == "inROM")
-        m_readonly = string2boolean(value);
-    else if (name == "copy-prevention")
-        m_copy_prevention = string2boolean(value);
-}
-
-PalmLib::FlatFile::Database::options_list_t
-PalmLib::FlatFile::Database::getOptions() const
-{
-    PalmLib::FlatFile::Database::options_list_t set;
-    typedef PalmLib::FlatFile::Database::options_list_t::value_type value;
-
-    if (m_backup)
-        set.push_back(value("backup", "true"));
-    else
-        set.push_back(value("backup", "false"));
-
-    if (m_readonly)
-        set.push_back(value("inROM", "true"));
-
-    if (m_copy_prevention)
-        set.push_back(value("copy-prevention", "true"));
-
-    return set;
-}
-
-void
-PalmLib::FlatFile::Database::doneWithSchema()
-{
-    // Ensure that the database has at least one field.
-    if (getNumOfFields() == 0)
-        return;
-//        throw PalmLib::error("at least one field must be specified");
-
-    // Ensure that the database has a title.
-    if (title().empty())
-        return;
-//        throw PalmLib::error("a title must be specified");
-}
diff --git a/src/3rdparty/pilotdb/libflatfile/Database.h b/src/3rdparty/pilotdb/libflatfile/Database.h
deleted file mode 100644
index e3b2979..0000000
--- a/src/3rdparty/pilotdb/libflatfile/Database.h
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * palm-db-tools: Abstract adaptor for flat-file databases.
- * Copyright (C) 1999-2000 by Tom Dyas (tdyas at users.sourceforge.net)
- */
-
-#ifndef __PALMLIB_FLATFILE_DATABASE_H__
-#define __PALMLIB_FLATFILE_DATABASE_H__
-
-#include <vector>
-#include <string>
-#include <utility>
-
-#include "../libpalm/Database.h"
-#include "Field.h"
-#include "Record.h"
-#include "ListView.h"
-#include "FType.h"
-
-#define NOTETITLE_LENGTH 32
-
-namespace PalmLib {
-    namespace FlatFile {
-
-  // This class is an in-memory representation of a typical
-  // PalmOS flat-file database. The caller can request write the
-  // data to a real PalmLib::Database object at any time to
-  // actually obtain the data in a format usable on the Palm
-  // Pilot.
-
-  class Database {
-  public:
-      // convenience type for the options list parsing
-      typedef std::vector< std::pair< std::string, std::string> > options_list_t;
-
-      /**
-       * Default constructor which creates an empty
-       * database. Subclasses should provide a default
-       * constructor and an additional constructorwhich takes a
-       * PalmOS::Database as an argument.
-       */
-      Database(std::string p_Type)
-            : m_backup(false), m_readonly(false),
-              m_copy_prevention(false), m_Type(p_Type)
-            { }
-
-        /**
-         * Constructor which fills the flat-file structure from a
-         * PalmOS database.
-       *
-       * @param pdb PalmOS database to read from.
-         */
-        Database(std::string p_Type, const PalmLib::Database& pdb);
-
-      /**
-       * The destructor is empty since we have no other objects
-       * to dispose of. It is virtual since we have subclasses
-       * for specific flat-file database products.
-       */
-      virtual ~Database() { }
-
-      /**
-       * After all processing to add fields and records is done,
-       * outputPDB is called to create the actual file format
-       * used by the flat-file database product. This method is
-       * abstract since only subclasses know the specific file
-       * formats.
-       *
-       * @param pdb An instance of PalmLib::Database.
-       */
-      virtual void outputPDB(PalmLib::Database& pdb) const;
-
-      /**
-       * Return the title of this flat-file database.
-       */
-      virtual std::string title() const;
-
-      /**
-       * Set the title of this database.
-       *
-       * @param title New title of the database.
-       */
-      virtual void title(const std::string& title);
-
-      /**
-       * Return the maximum number of fields allowed in the
-       * database. The object will not allow the number of
-       * fields to exceed the returned value. This method is
-       * abstract since only the subclasses know the limit on
-       * fields. 0 is returned if there is no limit.
-       */
-      virtual unsigned getMaxNumOfFields() const = 0;
-
-      /**
-       * Return the number of fields in the database.
-       */
-      virtual unsigned getNumOfFields() const;
-
-      /**
-       * Accessor function for the name of a field.
-       */
-      virtual std::string field_name(int i) const;
-
-      /**
-       * Accessor function for type of a field.
-       */
-      virtual Field::FieldType field_type(int i) const;
-
-      /**
-       * Accessor function for the field information
-       */
-      virtual FType field(int i) const;
-
-      /**
-       * write the format of the field's argument in format,
-       * and return a strings' vector with name of each argument part.
-       * the format use the same display as used by printf
-       */
-      virtual std::vector<std::string> field_argumentf(int, std::string& format)
-                 { format = std::string(""); return std::vector<std::string>(0, std::string(""));}
-
-      /**
-       * Add a field to the flat-file database. An exception
-       * will be thrown if the maximum number of fields would be
-       * exceeded or the field type is unsupported.
-       *
-       * @param name Name of the new field.
-       * @param type The type of the new field.
-       */
-      virtual void appendField(FType field);
-      virtual void appendField(const std::string& name,
-             Field::FieldType type, std::string data = std::string(""));
-
-      /**
-       * Insert a field to the flat-file database. An exception
-       * will be thrown if the maximum number of fields would be
-       * exceeded or the field type is unsupported.
-       *
-       * @param name Name of the new field.
-       * @param type The type of the new field.
-       */
-      virtual void insertField(int i, FType field);
-      virtual void insertField(int i, const std::string& name,
-             Field::FieldType type, std::string data = std::string(""));
-
-      /**
-       * Remove a Field in the flat-file database. An Exception
-       * will thrown if the field doesn't exist.
-       */
-      virtual void removeField(int i);
-
-      /**
-       * Returns true if this database supports a specific field
-       * type. This method is abstract since only the subclasses
-       * know which field types are supported.
-       *
-       * @param type The field type that should be checked for support.
-       */
-      virtual bool supportsFieldType(const Field::FieldType& type) const = 0;
-
-      /**
-       * Return the number of records in the database.
-       */
-      virtual unsigned getNumRecords() const;
-
-      /**
-       * Return the record with the given index. The caller gets
-       * a private copy of the data and _not_ a reference to the
-       * data.
-       *
-       * @param index Index of the record to retrieve.
-       */
-      virtual Record getRecord(unsigned index) const;
-
-      /**
-       * Append a record to the database. An exception will be
-       * thrown if their are not enough fields or if field types
-       * mismatch.
-       *
-       * @param rec The record to append.
-       */
-      virtual void appendRecord(Record rec);
-
-      /**
-       * Remove all records from the database
-       */
-      virtual void clearRecords();
-
-      /**
-       * Remove a record from the database
-       */
-      virtual void deleteRecord(unsigned index);
-
-      /**
-       * Return the maximum number of views supported by this
-       * type of flat-file database. This method is abstract
-       * since only the subclasses know the exact value.
-       */
-      virtual unsigned getMaxNumOfListViews() const = 0;
-
-      /**
-       * Return the actual number of views present in this
-       * database.
-       */
-      virtual unsigned getNumOfListViews() const;
-
-      /**
-       * Return a copy of the list view at the given index.
-       *
-       * @param index Index of the list view to return.
-       */
-      virtual ListView getListView(unsigned index) const;
-
-      /**
-       * Set the list view at the given index to the new list
-       * view. An exception may be thrown if field numbers are
-       * invalid or the list view doesn't pass muster with the
-       * subclass.
-       *
-       * @param index    Index of the list view to set.
-       * @param listview The new list view.
-       */
-      virtual void setListView(unsigned index, const ListView& listview);
-
-      /**
-       * Append a new list view. This will fail if the maximum
-       * number of list views would be exceeded.
-       *
-       * @param listview The new list view to append.
-       */
-      virtual void appendListView(const ListView& listview);
-
-      /**
-       * Remove a list view.
-       *
-       * @param index Index of the list view to remove.
-       */
-      virtual void removeListView(unsigned index);
-
-      /**
-       * Process a special option. If the option is not
-       * supported, then it is silently ignored. Subclasses
-       * should call the base class first so that options common
-       * to all flat-file databases can be processed.
-       *
-       * @param name  Name of the option.
-       * @param value String value assigned to the option.  */
-      virtual void setOption(const std::string& name,
-           const std::string& value);
-
-      /**
-       * Return a list of of all extra options supported by this
-       * database. Subclasses should call the base class first
-       * and then merge any extra options. Get a list of extra
-       * options.
-       */
-      virtual options_list_t getOptions(void) const;
-
-      /**
-       * Hook function which should be invoked by a caller after
-       * all calls the meta-deta functions have completed. This
-       * allows the database type-specific code to do final
-       * checks on the meta-data. An exception will be throw if
-       * there is an error. Otherwise, nothing will happen.
-       */
-      virtual void doneWithSchema();
-
-      /**
-       * Change and Return the about information
-       * of the database when it's supportted
-       */
-      virtual void setAboutInformation(std::string _string)
-        {
-            about.information = _string;
-        }
-
-      virtual std::string getAboutInformation() const
-        {
-            return about.information;
-        }
-
-      std::string type() const
-        {
-            return m_Type;
-        }
-
-  private:
-      // We provide a dummy copy constructor and assignment
-      // operator in order to prevent any copying of the object.
-      Database(const Database&) { }
-      Database& operator = (const Database&) { return *this; }
-
-/*      typedef std::vector< std::pair< std::string, Field::FieldType > >*/
-        typedef std::vector< FType>
-    field_list_t;
-      typedef std::vector<Record> record_list_t;
-      typedef std::vector<ListView> listview_list_t;
-
-        typedef std::vector< std::pair< std::string, std::vector< std::string > > >
-        listitems_list_t;
-
-      field_list_t m_fields;       // database schema
-      record_list_t m_records;     // the database itself
-        listitems_list_t m_list;     // the items lists include in the database
-      listview_list_t m_listviews; // list views
-      bool m_backup;               // backup flag for PDB
-      bool m_readonly;             // readonly flag for PDB
-      bool m_copy_prevention;      // copy prevention for PDB
-      std::string m_title;         // name of database
-        class About
-        {
-        public:
-            std::string information;
-        } about;
-      std::string m_Type;
-  };
-
-    } // namespace FlatFile
-} // namespace PalmLib
-
-#endif
diff --git a/src/3rdparty/pilotdb/libflatfile/FType.h b/src/3rdparty/pilotdb/libflatfile/FType.h
deleted file mode 100644
index 86396b3..0000000
--- a/src/3rdparty/pilotdb/libflatfile/FType.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * palm-db-tools: Field Type definitions for flat-file database objects.
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- */
-
-#ifndef __PALMLIB_FLATFILE_FTYPE_H__
-#define __PALMLIB_FLATFILE_FTYPE_H__
-
-#include <string>
-#include <utility>
-
-#include "../libpalm/palmtypes.h"
-#include "Field.h"
-
-namespace PalmLib {
-    namespace FlatFile {
-
-  class FType {
-  public:
-        friend class PalmLib::FlatFile::Field;
-        FType(std::string title, PalmLib::FlatFile::Field::FieldType type) :
-            m_title(title), m_type(type), m_data("") { }
-
-        FType(std::string title, PalmLib::FlatFile::Field::FieldType type, std::string data) :
-            m_title(title), m_type(type), m_data(data) { }
-
-        virtual ~FType() { }
-
-        std::string title() const {return m_title;}
-        virtual PalmLib::FlatFile::Field::FieldType type() const
-            { return m_type;}
-
-        virtual std::string argument() const { return m_data;}
-
-        void set_argument( const std::string data) { m_data = data;}
-
-        void setTitle( const std::string value) { m_title = value;}
-        void setType( const PalmLib::FlatFile::Field::FieldType value) { m_type = value;}
-    private:
-        std::string         m_title;
-        PalmLib::FlatFile::Field::FieldType    m_type;
-
-        std::string         m_data;
-    };
-  }
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libflatfile/Field.h b/src/3rdparty/pilotdb/libflatfile/Field.h
deleted file mode 100644
index 583bc21..0000000
--- a/src/3rdparty/pilotdb/libflatfile/Field.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * palm-db-tools: Field definitions for flat-file database objects.
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- */
-
-#ifndef __PALMLIB_FLATFILE_FIELD_H__
-#define __PALMLIB_FLATFILE_FIELD_H__
-
-#include <string>
-
-#include "../libpalm/palmtypes.h"
-
-namespace PalmLib {
-    namespace FlatFile {
-
-  class Field {
-  public:
-      Field() : no_value(false), type(STRING), v_boolean(false),
-    v_integer(0), v_float(0) { }
-    ~Field() { }
-
-      // True if this field has no value. (NULL in SQL terms)
-      bool no_value;
-
-      enum FieldType {
-        STRING,
-        BOOLEAN,
-        INTEGER,
-        FLOAT,
-        DATE,
-        TIME,
-        DATETIME,
-        LIST,
-        LINK,
-        NOTE,
-        CALCULATED,
-        LINKED,
-        LAST
-      };
-
-      enum FieldType type;
-
-      std::string v_string;
-      std::string v_note;
-      bool v_boolean;
-      PalmLib::pi_int32_t v_integer;
-      long double v_float;
-      struct {
-    int month;
-    int day;
-    int year;
-      } v_date;          // valid for DATE and DATETIME
-      struct {
-    int hour;
-    int minute;
-      } v_time;          // valid for TIME and DATETIME
-
-  /*
-    friend Field operator = (const Field& y)
-    {
-      this.v_string = y.v_string;
-      this.v_boolean = y.v_boolean;
-      this.v_integer = y.v_integer;
-      this.v_float = y.v_float;
-      this.v_date.month = y.v_date.month;
-            this.v_date.day = y.v_date.day;
-            this.v_date.year = y.v_date.year;
-      this.v_time.hour = y.v_time.hour;
-            this.v_time.minute = y.v_time.minute;
-      this.v_note = y.v_note;
-    }
-*/
-        friend bool operator==(const Field& x, const Field& y)
-        {
-            if (x.type != y.type)
-                return false;
-            switch (x.type) {
-            case STRING:
-                return (x.v_string == y.v_string);
-            case BOOLEAN:
-                return (x.v_boolean == y.v_boolean);
-            case INTEGER:
-                return (x.v_integer == y.v_integer);
-            case FLOAT:
-                return (x.v_float == y.v_float);
-            case DATE:
-                return (x.v_date.month == y.v_date.month
-                        && x.v_date.day == y.v_date.day
-                        && x.v_date.year == y.v_date.year);
-            case TIME:
-                return (x.v_time.hour == y.v_time.hour
-                        && x.v_time.minute == y.v_time.minute);
-            case DATETIME:
-                return (x.v_date.month == y.v_date.month
-                        && x.v_date.day == y.v_date.day
-                        && x.v_date.year == y.v_date.year
-                        && x.v_time.hour == y.v_time.hour
-                        && x.v_time.minute == y.v_time.minute);
-            case LIST:
-                return (x.v_string == y.v_string);
-            case LINK:
-                return (x.v_string == y.v_string);
-            case NOTE:
-                return (x.v_string == y.v_string
-                        && x.v_note == y.v_note);
-            case CALCULATED:
-                return true; //a calculated field could be recalculate at each time
-            case LINKED:
-                return (x.v_string == y.v_string);
-            default:
-                return (x.v_string == y.v_string);
-            }
-    }
-  };
-
-  }
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libflatfile/ListView.h b/src/3rdparty/pilotdb/libflatfile/ListView.h
deleted file mode 100644
index 7fd1bd1..0000000
--- a/src/3rdparty/pilotdb/libflatfile/ListView.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef FLATFILE_LISTVIEW_H__
-#define FLATFILE_LISTVIEW_H__
-
-#include <string>
-#include <vector>
-
-#include "ListViewColumn.h"
-
-namespace PalmLib {
-    namespace FlatFile {
-
-  // The ListView class represents the a "list view" as
-  // implemented by the major PalmOS flat-file programs. The
-  // main idea is a series of columns that display a field of
-  // the database.
-  //
-  // For fun, this class exports the STL interface of the STL
-  // class it uses to store the ListViewColumn classes.
-
-  class ListView {
-  private:
-      typedef std::vector<ListViewColumn> rep_type;
-      rep_type rep;
-
-  public:
-      typedef rep_type::value_type value_type;
-      typedef rep_type::iterator iterator;
-      typedef rep_type::const_iterator const_iterator;
-      typedef rep_type::reference reference;
-      typedef rep_type::const_reference const_reference;
-      typedef rep_type::size_type size_type;
-      typedef rep_type::difference_type difference_type;
-      typedef rep_type::reverse_iterator reverse_iterator;
-      typedef rep_type::const_reverse_iterator const_reverse_iterator;
-
-      // global fields
-      std::string name;
-      bool editoruse;
-
-      // STL pull-up interface (probably not complete)
-      iterator begin() { return rep.begin(); }
-      const_iterator begin() const { return rep.begin(); }
-      iterator end() { return rep.end(); }
-      const_iterator end() const { return rep.end(); }
-      reverse_iterator rbegin() { return rep.rbegin(); }
-      const_reverse_iterator rbegin() const { return rep.rbegin(); }
-      reverse_iterator rend() { return rep.rend(); }
-      const_reverse_iterator rend() const { return rep.rend(); }
-      size_type size() const { return rep.size(); }
-      size_type max_size() const { return rep.max_size(); }
-      bool empty() const { return rep.empty(); }
-      reference front() { return rep.front(); }
-      const_reference front() const { return rep.front(); }
-      reference back() { return rep.back(); }
-      const_reference back() const { return rep.back(); }
-      void push_back(const ListViewColumn& x) { rep.push_back(x); }
-      void pop_back() { rep.pop_back(); }
-      void clear() { rep.clear(); }
-      void resize(size_type new_size, const ListViewColumn& x)
-        { rep.resize(new_size, x); }
-      void resize(size_type new_size)
-        { rep.resize(new_size, ListViewColumn()); }
-
-      ListView() : rep(), name(""), editoruse(false) { }
-      ListView(const ListView& rhs) : rep(rhs.rep), name(rhs.name), editoruse(false) { }
-      ListView& operator = (const ListView& rhs) {
-        name = rhs.name;
-        rep = rhs.rep;
-        return *this;
-      }
-
-    };
-
-  }
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libflatfile/ListViewColumn.h b/src/3rdparty/pilotdb/libflatfile/ListViewColumn.h
deleted file mode 100644
index 7b5330e..0000000
--- a/src/3rdparty/pilotdb/libflatfile/ListViewColumn.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __PALMLIB_FLATFILE_LISTVIEWCOLUMN_H__
-#define __PALMLIB_FLATFILE_LISTVIEWCOLUMN_H__
-
-namespace PalmLib {
-  namespace FlatFile {
-
-    // The ListViewColumn class stores the field number and column
-    // width for a column in a list view.
-
-    struct ListViewColumn {
-      ListViewColumn() : field(0), width(80) { }
-      ListViewColumn(unsigned a1, unsigned a2) : field(a1), width(a2) { }
-      unsigned field;
-      unsigned width;
-    };
-  }
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libflatfile/Record.h b/src/3rdparty/pilotdb/libflatfile/Record.h
deleted file mode 100644
index 537953e..0000000
--- a/src/3rdparty/pilotdb/libflatfile/Record.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * palm-db-tools: Field definitions for flat-file database objects.
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- */
-
-#ifndef __PALMLIB_FLATFILE_RECORD_H__
-#define __PALMLIB_FLATFILE_RECORD_H__
-
-#include <vector>
-
-#include "Field.h"
-
-namespace PalmLib {
-    namespace FlatFile {
-//  typedef std::vector<Field> Record;
-
-  class Record{
-        public:
-
-      const std::vector<Field> fields() const { return m_Fields; }
-
-      void appendField(Field newfield) { m_Fields.push_back(newfield); }
-            bool created() const { return m_New;}
-            void created(bool on){ m_New = on;}
-            bool secret() const { return m_Secret;}
-            void secret(bool on) { m_Secret = on;}
-
-      bool dirty() const { return m_Dirty; }
-      void dirty( bool on) { m_Dirty = on; }
-
-            pi_uint32_t  unique_id() const { return m_UID; }
-            void unique_id(pi_uint32_t id) { m_UID = id; }
-        private:
-
-      std::vector<Field> m_Fields;
-            bool m_Secret;
-            bool m_New;
-
-      bool m_Dirty;
-            pi_uint32_t m_UID;
-        };
-    }
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libpalm/Block.cpp b/src/3rdparty/pilotdb/libpalm/Block.cpp
deleted file mode 100644
index 3a71c86..0000000
--- a/src/3rdparty/pilotdb/libpalm/Block.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * palm-db-tools: Encapsulate "blocks" of data.
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * The PalmLib::Block class represents a generic block of data. It is
- * used to simplify passing arrays of pi_char_t around.
- */
-
-#include "Block.h"
-
-#include <cstring>
-
-void PalmLib::Block::reserve(PalmLib::Block::size_type new_size)
-{
-    if (new_size > capacity()) {
-        // Allocate a new buffer containing a copy of the old with the
-        // remainder zero'ed out.
-        pointer new_data = new pi_char_t[new_size];
-        memcpy(new_data, m_data, m_size);
-        memset(new_data + m_size, 0, new_size - m_size);
-
-        // Replace the existing buffer.
-        delete [] m_data;
-        m_data = new_data;
-        m_size = new_size;
-    }
-}
-
-void PalmLib::Block::resize(size_type new_size)
-{
-    if (new_size < m_size) {
-        // Copy the data that will remain to a new buffer and switch to it.
-        pointer new_data = new pi_char_t[new_size];
-        memcpy(new_data, m_data, new_size);
-
-        // Replace the existing buffer.
-        delete [] m_data;
-        m_data = new_data;
-        m_size = new_size;
-    } else if (new_size > m_size) {
-        // Copy the data that will remain to a new buffer and switch to it.
-        pointer new_data = new pi_char_t[new_size];
-        memcpy(new_data, m_data, m_size);
-        memset(new_data + m_size, 0, new_size - m_size);
-
-        // Replace the existing buffer.
-        delete [] m_data;
-        m_data = new_data;
-        m_size = new_size;
-    }
-}
-
-void PalmLib::Block::assign(PalmLib::Block::const_pointer data,
-                            const PalmLib::Block::size_type size)
-{
-    clear();
-    if (data && size > 0) {
-        m_size = size;
-        m_data = new pi_char_t[m_size];
-        memcpy(m_data, data, m_size);
-    }
-}
-
-void PalmLib::Block::assign(const PalmLib::Block::size_type size,
-                            const PalmLib::Block::value_type value)
-{
-    clear();
-    if (size > 0) {
-        m_size = size;
-        m_data = new pi_char_t[m_size];
-        memset(m_data, value, m_size);
-    }
-}
-
-bool operator == (const PalmLib::Block& lhs, const PalmLib::Block& rhs)
-{
-    if (lhs.size() == rhs.size()) {
-        if (lhs.data()) {
-            if (memcmp(lhs.data(), rhs.data(), lhs.size()) != 0)
-                return false;
-        }
-        return true;
-    }
-    return false;
-}
diff --git a/src/3rdparty/pilotdb/libpalm/Block.h b/src/3rdparty/pilotdb/libpalm/Block.h
deleted file mode 100644
index 43eaf8e..0000000
--- a/src/3rdparty/pilotdb/libpalm/Block.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * palm-db-tools: Encapsulate "blocks" of data.
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * The PalmLib::Block class represents a generic block of data. It is
- * used to make passing pi_char_t buffers around very easy. The Record
- * and Resource classes both inherit from this class. A STL interface
- * is also attempted though it is probably not complete.
- */
-
-#ifndef __PALMLIB_BLOCK_H__
-#define __PALMLIB_BLOCK_H__
-
-#include <cstddef>
-#include <algorithm>
-#include <iterator>
-
-#include "palmtypes.h"
-
-namespace PalmLib {
-
-    class Block {
-    public:
-      // STL: container type definitions
-     typedef PalmLib::pi_char_t value_type;
-     typedef value_type* pointer;
-     typedef const value_type* const_pointer;
-     typedef value_type* iterator;
-     typedef const value_type* const_iterator;
-     typedef value_type& reference;
-     typedef const value_type& const_reference;
-     typedef size_t size_type;
-     typedef ptrdiff_t difference_type;
-
-     // STL: reverisible container type definitions
-#ifdef __GNUG__
-     typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-     typedef std::reverse_iterator<iterator> reverse_iterator;
-#endif
-
-  /**
-   * Default constructor.
-   */
-  Block() : m_data(0), m_size(0) { }
-
-  /**
-   * Constructor which fills the block from buffer "raw" with
-   * length "len".
-   */
-  Block(const_pointer raw, const size_type len) : m_data(0), m_size(0) {
-      assign(raw, len);
-  }
-
-  /**
-   * Constructor which takes a size and allocates a zero'ed out
-   * buffer of that size. (STL: Sequence: default fill
-   * constructor)
-   */
-  explicit Block(const size_type size, const value_type value = 0)
-      : m_data(0), m_size(0) {
-      assign(size, value);
-  }
-
-  /**
-   * Constructor which takes two iterators and builds the block
-   * from the region between the iterators. (STL: Sequence:
-   * range constructor)
-   */
-  Block(const_iterator a, const_iterator b) : m_data(0), m_size(0) {
-      assign(a, b - a);
-  }
-
-  /**
-   * Copy constructor. Just copies the data from the other block
-   * into this block.
-   */
-  Block(const Block& rhs) : m_data(0), m_size(0) {
-      assign(rhs.data(), rhs.size());
-  }
-
-  /**
-   * Destructor. Just frees the buffer if it exists.
-   */
-  virtual ~Block() { clear(); }
-
-  /**
-   * Assignment operator.
-   *
-   * @param rhs The block whose contents should be copied.
-   */
-  Block& operator = (const Block& rhs) {
-      assign(rhs.data(), rhs.size());
-      return *this;
-  }
-
-  // STL: Container
-  iterator begin() { return m_data; }
-  const_iterator begin() const { return m_data; }
-  iterator end() { return (m_data != 0) ? (m_data + m_size) : (0); }
-  const_iterator end() const
-      { return (m_data != 0) ? (m_data + m_size) : (0); }
-  size_type size() const { return m_size; }
-  size_type max_size() const {
-      return size_type(-1) / sizeof(value_type);
-  }
-  bool empty() const { return m_size == 0; }
-
-  // STL: Reversible Container
-#ifdef __GNUG__
-  reverse_iterator rbegin() { return reverse_iterator(end()); }
-  const_reverse_iterator rbegin() const {
-      return const_reverse_iterator(end());
-  }
-  reverse_iterator rend() { return reverse_iterator(begin()); }
-  const_reverse_iterator rend() const {
-      return const_reverse_iterator(begin());
-  }
-#endif
-
-  // STL: Random Access Container
-  reference operator [] (size_type index) { return m_data[index]; }
-  const_reference operator [] (size_type index) const
-      { return m_data[index]; }
-
-  // STL: Sequence (not complete)
-  void clear() {
-      if (m_data) {
-    delete [] m_data;
-    m_data = 0;
-    m_size = 0;
-      }
-  }
-  void resize(size_type n);
-  reference front() { return m_data[0]; }
-  const_reference front() const { return m_data[0]; }
-
-  // STL: (present in vector but not part of a interface spec)
-  size_type capacity() const { return m_size; }
-  void reserve(size_type size);
-
-  /**
-   * Return a pointer to the data area. If there are no
-   * contents, then the return value will be NULL. This is not
-   * an STL method but goes with this class as a singular data
-   * block and not a container (even though it is).
-   */
-  iterator data() { return m_data; }
-  const_iterator data() const { return m_data; }
-
-  /**
-   * Replace the existing contents of the Block with the buffer
-   * that starts at raw of size len.
-   *
-   * @param raw Pointer to the new contents.
-   * @param len Size of the new contents.
-   */
-  void assign(const_pointer data, const size_type size);
-
-  /**
-   * Replace the existing contents of the Block with a buffer
-   * consisting of size elements equal to fill.
-   *
-   * @param size The size of the new contents.
-   * @param value Value to fill the contents with.
-   */
-     void assign(const size_type size, const value_type value = 0);
-
-     // compatibility functions (remove before final 0.3.0 release)
-     const_pointer raw_data() const { return data(); }
-     pointer raw_data() { return data(); }
-     size_type raw_size() const { return size(); }
-     void set_raw(const_pointer raw, const size_type len)
-         { assign(raw, len); }
-
-    private:
-     pointer m_data;
-     size_type m_size;
-    };
-
-}
-
-bool operator == (const PalmLib::Block& lhs, const PalmLib::Block& rhs);
-
-inline bool operator != (const PalmLib::Block& lhs, const PalmLib::Block& rhs)
-{ return ! (lhs == rhs); }
-
-#endif
diff --git a/src/3rdparty/pilotdb/libpalm/CMakeLists.txt b/src/3rdparty/pilotdb/libpalm/CMakeLists.txt
deleted file mode 100644
index bccdcb4..0000000
--- a/src/3rdparty/pilotdb/libpalm/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
-########### next target ###############
-
-SET(libpalm_STAT_SRCS
-   Database.cpp
-   Block.cpp
-   )
-
-ADD_LIBRARY(libpalm-tellico STATIC ${libpalm_STAT_SRCS})
diff --git a/src/3rdparty/pilotdb/libpalm/Database.cpp b/src/3rdparty/pilotdb/libpalm/Database.cpp
deleted file mode 100644
index 2f0d038..0000000
--- a/src/3rdparty/pilotdb/libpalm/Database.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * palm-db-tools: General interface to a PalmOS database.
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * This file implens an abstract interface to PalmOS
- * databases. Subclasses would include the class that reads/writes PDB
- * files and possibly databases that can be accessed over the HotSync
- * protocols.
- */
-
-#include "Database.h"
-#include "palmtypes.h"
-#include "Record.h"
-
-#ifndef __GNUG__
-
-// MSVC: Visual C++ doesn't like initializers in the header ...
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_RESOURCE = 0x0001;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_READ_ONLY = 0x0002;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_APPINFO_DIRTY = 0x0004;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_BACKUP = 0x0008;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_OK_TO_INSTALL_NEWER = 0x0010;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_RESET_AFTER_INSTALL = 0x0020;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_COPY_PREVENTION = 0x0040;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_STREAM = 0x0080;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_HIDDEN = 0x0100;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_LAUNCHABLE_DATA = 0x0200;
-const PalmLib::pi_uint16_t PalmLib::Database::FLAG_HDR_OPEN = 0x8000;
-const PalmLib::pi_char_t PalmLib::Record::FLAG_ATTR_DELETED = 0x80;
-const PalmLib::pi_char_t PalmLib::Record::FLAG_ATTR_DIRTY   = 0x40;
-const PalmLib::pi_char_t PalmLib::Record::FLAG_ATTR_BUSY    = 0x20;
-const PalmLib::pi_char_t PalmLib::Record::FLAG_ATTR_SECRET  = 0x10;
-
-#endif
-
-PalmLib::Database::Database(bool resourceDB)
-    : m_name(""), m_version(0), m_time_created(0), m_time_modified(0),
-      m_time_backup(0), m_modification(0), m_unique_id_seed(0)
-{
-    m_flags = resourceDB ? FLAG_HDR_RESOURCE : 0;
-    m_type = PalmLib::mktag(' ', ' ', ' ', ' ');
-    m_creator = PalmLib::mktag(' ', ' ', ' ', ' ');
-}
diff --git a/src/3rdparty/pilotdb/libpalm/Database.h b/src/3rdparty/pilotdb/libpalm/Database.h
deleted file mode 100644
index ba66013..0000000
--- a/src/3rdparty/pilotdb/libpalm/Database.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * palm-db-tools: General interface to a PalmOS database.
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * This header defines an abstract interface to PalmOS
- * databases. Subclasses would include the class that reads/writes PDB
- * files and possibly databases that can be accessed over the HotSync
- * protocols.
- */
-
-#ifndef __PALMLIB_DATABASE_H__
-#define __PALMLIB_DATABASE_H__
-
-#include <string>
-
-#include "palmtypes.h"
-#include "Block.h"
-#include "Record.h"
-#include "Resource.h"
-
-namespace PalmLib {
-
-    class Database {
-    public:
-  // Constants for bits in the flags field of a PalmOS database.
-#ifdef __GNUG__
-  static const pi_uint16_t FLAG_HDR_RESOURCE            = 0x0001;
-  static const pi_uint16_t FLAG_HDR_READ_ONLY           = 0x0002;
-  static const pi_uint16_t FLAG_HDR_APPINFO_DIRTY       = 0x0004;
-  static const pi_uint16_t FLAG_HDR_BACKUP              = 0x0008;
-  static const pi_uint16_t FLAG_HDR_OK_TO_INSTALL_NEWER = 0x0010;
-  static const pi_uint16_t FLAG_HDR_RESET_AFTER_INSTALL = 0x0020;
-  static const pi_uint16_t FLAG_HDR_COPY_PREVENTION     = 0x0040;
-  static const pi_uint16_t FLAG_HDR_STREAM              = 0x0080;
-  static const pi_uint16_t FLAG_HDR_HIDDEN              = 0x0100;
-  static const pi_uint16_t FLAG_HDR_LAUNCHABLE_DATA     = 0x0200;
-  static const pi_uint16_t FLAG_HDR_OPEN                = 0x8000;
-#else
-  static const pi_uint16_t FLAG_HDR_RESOURCE;
-  static const pi_uint16_t FLAG_HDR_READ_ONLY;
-  static const pi_uint16_t FLAG_HDR_APPINFO_DIRTY;
-  static const pi_uint16_t FLAG_HDR_BACKUP;
-  static const pi_uint16_t FLAG_HDR_OK_TO_INSTALL_NEWER;
-  static const pi_uint16_t FLAG_HDR_RESET_AFTER_INSTALL;
-  static const pi_uint16_t FLAG_HDR_COPY_PREVENTION;
-  static const pi_uint16_t FLAG_HDR_STREAM;
-  static const pi_uint16_t FLAG_HDR_HIDDEN;
-  static const pi_uint16_t FLAG_HDR_LAUNCHABLE_DATA;
-  static const pi_uint16_t FLAG_HDR_OPEN;
-#endif
-
-  Database(bool resourceDB = false);
-  virtual ~Database() { }
-
-  bool isResourceDB() const {return (m_flags & FLAG_HDR_RESOURCE) != 0;}
-
-  virtual pi_uint32_t type() const { return m_type; }
-  virtual void type(pi_uint32_t new_type) { m_type = new_type; }
-
-  virtual pi_uint32_t creator() const { return m_creator; }
-  virtual void creator(pi_uint32_t new_creator)
-      { m_creator = new_creator; }
-
-  virtual pi_uint16_t version() const { return m_version; }
-  virtual void version(pi_uint16_t v) { m_version = v; }
-
-  virtual pi_int32_t creation_time() const { return m_time_created; }
-  virtual void creation_time(pi_int32_t ct) { m_time_created = ct; }
-
-  virtual pi_uint32_t modification_time() const
-      { return m_time_modified; }
-  virtual void modification_time(pi_uint32_t mt)
-      { m_time_modified = mt; }
-
-  virtual pi_uint32_t backup_time() const { return m_time_backup; }
-  virtual void backup_time(pi_uint32_t bt) { m_time_backup = bt; }
-
-  virtual pi_uint32_t modnum() const { return m_modification; }
-  virtual void modnum(pi_uint32_t new_modnum)
-      { m_modification = new_modnum; }
-
-  virtual pi_uint32_t unique_id_seed() const
-      { return m_unique_id_seed; }
-  virtual void unique_id_seed(pi_uint32_t uid_seed)
-      { m_unique_id_seed = uid_seed; }
-
-  virtual pi_uint16_t flags() const { return m_flags; }
-  virtual void flags(pi_uint16_t flags)
-      { m_flags = flags & ~(FLAG_HDR_RESOURCE | FLAG_HDR_OPEN); }
-
-  virtual std::string name() const { return m_name; }
-  virtual void name(const std::string& new_name) { m_name = new_name; }
-
-  virtual bool backup() const
-      { return (m_flags & FLAG_HDR_BACKUP) != 0; }
-  virtual void backup(bool state) {
-      if (state)
-    m_flags |= FLAG_HDR_BACKUP;
-      else
-    m_flags &= ~(FLAG_HDR_BACKUP);
-  }
-
-  virtual bool readonly() const
-      { return (m_flags & FLAG_HDR_READ_ONLY) != 0; }
-  virtual void readonly(bool state) {
-      if (state)
-    m_flags |= FLAG_HDR_READ_ONLY;
-      else
-    m_flags &= ~(FLAG_HDR_READ_ONLY);
-  }
-
-  virtual bool copy_prevention() const
-      { return (m_flags & FLAG_HDR_COPY_PREVENTION) != 0; }
-  virtual void copy_prevention(bool state) {
-      if (state)
-    m_flags |= FLAG_HDR_COPY_PREVENTION;
-      else
-    m_flags &= ~(FLAG_HDR_COPY_PREVENTION);
-  }
-
-  // Return the total number of records/resources in this
-  // database.
-  virtual size_t getNumRecords() const = 0;
-
-  // Return the database's application info block as a Block
-  // object.
-  virtual Block getAppInfoBlock() const { return Block(); }
-
-  // Set the database's app info block to the contents of the
-  // passed Block object.
-  virtual void setAppInfoBlock(const Block &) { }
-
-  // Return the database's sort info block as a Block object.
-  virtual Block getSortInfoBlock() const { return Block(); }
-
-  // Set the database's sort info block to the contents of the
-  // passed Block object.
-  virtual void setSortInfoBlock(const Block &) { }
-
-  // Return the record identified by the given index. The caller
-  // owns the returned RawRecord object.
-  virtual Record getRecord(unsigned index) const = 0;
-
-  // Set the record identified by the given index to the given
-  // record.
-  virtual void setRecord(unsigned index, const Record& rec) = 0;
-
-  // Append the given record to the database.
-  virtual void appendRecord(const Record& rec) = 0;
-
-  // returned if the specified (type, ID) combination is not
-  // present in the database. The caller owns the returned
-  // RawRecord object.
-  virtual Resource getResourceByType(pi_uint32_t type,
-             pi_uint32_t id) const = 0;
-
-  // Return the resource present at the given index. NULL is
-  // returned if the index is invalid. The caller owns the
-  // returned RawRecord object.
-  virtual Resource getResourceByIndex(unsigned index) const = 0;
-
-  // Set the resouce at given index to passed Resource object.
-  virtual void setResource(unsigned index, const Resource& rsrc) = 0;
-
-    private:
-        std::string m_name;
-        pi_uint16_t m_flags;
-        pi_uint16_t m_version;
-        pi_uint32_t m_time_created;
-        pi_uint32_t m_time_modified;
-        pi_uint32_t m_time_backup;
-        pi_uint32_t m_modification;
-        pi_uint32_t m_type;
-        pi_uint32_t m_creator;
-        pi_uint32_t m_unique_id_seed;
-
-    };
-
-} // namespace PalmLib
-
-#endif
diff --git a/src/3rdparty/pilotdb/libpalm/Record.h b/src/3rdparty/pilotdb/libpalm/Record.h
deleted file mode 100644
index ecf19e3..0000000
--- a/src/3rdparty/pilotdb/libpalm/Record.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * palm-db-tools: Raw PalmOS Records
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- */
-
-#ifndef __PALMLIB_RECORD_H__
-#define __PALMLIB_RECORD_H__
-
-#include "Block.h"
-
-namespace PalmLib {
-
-    class Record : public Block {
-    public:
-#ifdef __GNUG__
-  static const pi_char_t FLAG_ATTR_DELETED = 0x80;
-  static const pi_char_t FLAG_ATTR_DIRTY   = 0x40;
-  static const pi_char_t FLAG_ATTR_BUSY    = 0x20;
-  static const pi_char_t FLAG_ATTR_SECRET  = 0x10;
-#else
-  static const pi_char_t FLAG_ATTR_DELETED;
-  static const pi_char_t FLAG_ATTR_DIRTY;
-  static const pi_char_t FLAG_ATTR_BUSY;
-  static const pi_char_t FLAG_ATTR_SECRET;
-#endif
-
-  /**
-   * Default constructor.
-   */
-  Record() : Block(), m_attrs(0), m_unique_id(0) { }
-
-  /**
-   * Copy constructor.
-   */
-  Record(const Record& rhs) : Block(rhs.data(), rhs.size()) {
-      m_attrs = rhs.attrs();
-      m_unique_id = rhs.unique_id();
-  }
-
-  /**
-   * Destructor.
-   */
-  virtual ~Record() { }
-
-  /**
-   * Constructor which lets the caller specify all the
-   * parameters.
-   *
-   * @param attrs     Attribute byte (flags + category).
-   * @param unique_id Unique ID for this record.
-   * @param data      Start of buffer to copy (or 0 for empty).
-   * @param size      Size of the buffer to copy.
-   */
-  Record(pi_char_t attrs, pi_uint32_t unique_id,
-         Block::const_pointer data, const Block::size_type size)
-      : Block(data, size), m_attrs(attrs), m_unique_id(unique_id) { }
-
-  /**
-   * Constructor which lets the caller use the default fill
-   * constructor.
-   * @param attrs     Attribute byte (flags + category).
-   * @param unique_id Unique ID for this record.
-   * @param size      Size of buffer to generate.
-   * @param value     Value to fill buffer with.
-   */
-  Record(pi_char_t attrs, pi_uint32_t unique_id,
-         const size_type size, const value_type value = 0)
-      : Block(size, value), m_attrs(attrs), m_unique_id(unique_id) { }
-
-  /**
-   * Assignment operator.
-   *
-   * @param rhs The PalmLib::Record we should become.  */
-  Record& operator = (const Record& rhs) {
-      Block::operator = (rhs);
-      m_attrs = rhs.attrs();
-      m_unique_id = rhs.unique_id();
-      return *this;
-  }
-
-  /**
-   * Return the attributes byte which contains the category and
-   * flags.
-   */
-  pi_char_t attrs() const { return m_attrs; }
-
-  /**
-   * Return the state of the record's "deleted" flag.
-   */
-  bool deleted() const { return (m_attrs & FLAG_ATTR_DELETED) != 0; }
-
-  /**
-   * Set the state of the record's "deleted" flag.
-   *
-   * @param state New state of the "deleted" flag.
-   */
-  void deleted(bool state) {
-      if (state)
-    m_attrs |= FLAG_ATTR_DELETED;
-      else
-    m_attrs &= ~(FLAG_ATTR_DELETED);
-  }
-
-  /**
-   * Return the state of the record's "dirty" flag.
-   */
-  bool dirty() const { return (m_attrs & FLAG_ATTR_DIRTY) != 0; }
-
-  /**
-   * Set the state of the record's "dirty" flag.
-   *
-   * @param state New state of the "dirty" flag.
-   */
-  void dirty(bool state) {
-      if (state)
-    m_attrs |= FLAG_ATTR_DIRTY;
-      else
-    m_attrs &= ~(FLAG_ATTR_DIRTY);
-  }
-
-  /**
-   * Return the state of the record's "secret" flag.
-   */
-  bool secret() const { return (m_attrs & FLAG_ATTR_SECRET) != 0; }
-
-  /**
-   * Set the state of the record's "secret" flag.
-   *
-   * @param state New state of the "secret" flag.
-   */
-  void secret(bool state) {
-      if (state)
-    m_attrs |= FLAG_ATTR_SECRET;
-      else
-    m_attrs &= ~(FLAG_ATTR_SECRET);
-  }
-
-  /**
-   * Return the category of this record.
-   */
-  pi_char_t category() const { return (m_attrs & 0x0F); }
-
-  /**
-   * Set the category of this record.
-   */
-  void category(pi_char_t cat)
-      { m_attrs &= ~(0x0F); m_attrs |= (cat & 0x0F); }
-
-  /**
-   * Return the unique ID of this record.
-   */
-  pi_uint32_t unique_id() const { return m_unique_id; }
-
-  /**
-   * Set the unique ID of this record to uid.
-   *
-   * @param uid New unique ID for this record.
-   */
-  void unique_id(pi_uint32_t uid) { m_unique_id = uid; }
-
-    private:
-  pi_char_t m_attrs;
-  pi_uint32_t m_unique_id;
-    };
-
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libpalm/Resource.h b/src/3rdparty/pilotdb/libpalm/Resource.h
deleted file mode 100644
index b98f718..0000000
--- a/src/3rdparty/pilotdb/libpalm/Resource.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * palm-db-tools: PalmOS Resources
- * Copyright (C) 2000 by Tom Dyas (tdyas at users.sourceforge.net)
- */
-
-#ifndef __PALMLIB_RESOURCE_H__
-#define __PALMLIB_RESOURCE_H__
-
-#include "Block.h"
-#include "palmtypes.h"
-
-namespace PalmLib {
-
-    class Resource : public Block {
-    public:
-  /**
-   * Default constructor.
-   */
-  Resource() : Block(), m_type(0), m_id(0) { }
-
-  /**
-   * Copy constructor.
-   */
-  Resource(const Resource& rhs) : Block(rhs.data(), rhs.size()) {
-      m_type = rhs.type();
-      m_id = rhs.id();
-  }
-
-  /**
-   * Destructor.
-   */
-  virtual ~Resource() { }
-
-  /**
-         * Constructor which lets the caller specify all the
-         * parameters.
-         *
-         * @param type      Resource type
-         * @param id        Resource ID
-         * @param data      Start of buffer to copy.
-         * @param size      Size of the buffer to copy.
-         */
-  Resource(pi_uint32_t type, pi_uint32_t id,
-     const_pointer data, const size_type size)
-      : Block(data, size), m_type(type), m_id(id) { }
-
-  /**
-         * Constructor which lets the caller use the default fill
-         * constructor.
-         *
-         * @param type      Resource type
-         * @param id        Resource ID
-   * @param size      Size of buffer to generate.
-         * @param value     Value to fill buffer with.
-   */
-  Resource(pi_uint32_t type, pi_uint32_t id,
-     const size_type size, const value_type value = 0)
-      : Block(size, value), m_type(type), m_id(id) { }
-
-  /**
-   * Assignment operator.
-   */
-  Resource& operator = (const Resource& rhs) {
-      Block::operator = (rhs);
-      m_type = rhs.type();
-      m_id = rhs.id();
-      return *this;
-  }
-
-  // Accessor functions for the resource type.
-  pi_uint32_t type() const { return m_type; }
-  void type(const pi_uint32_t _type) { m_type = _type; }
-
-  // Accessor functions for the resource ID.
-  pi_uint32_t id() const { return m_id; }
-  void id(const pi_uint32_t _id) { m_id = _id; }
-
-    private:
-  pi_uint32_t m_type;
-  pi_uint32_t m_id;
-    };
-
-}
-
-#endif
diff --git a/src/3rdparty/pilotdb/libpalm/palmtypes.h b/src/3rdparty/pilotdb/libpalm/palmtypes.h
deleted file mode 100644
index 5c12262..0000000
--- a/src/3rdparty/pilotdb/libpalm/palmtypes.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * This file contains type definitions and helper functions to make
- * access to data in Palm Pilot order easier.
- */
-
-#ifndef __LIBPALM_PALMTYPES_H__
-#define __LIBPALM_PALMTYPES_H__
-
-#include <stdexcept>
-
-#include "../portability.h"
-
-namespace PalmLib {
-
-#if SIZEOF_UNSIGNED_CHAR == 1
-    typedef unsigned char pi_char_t;
-#else
-#error Unable to determine the size of pi_char_t.
-#endif
-
-#if SIZEOF_UNSIGNED_LONG == 2
-    typedef unsigned long pi_uint16_t;
-#elif SIZEOF_UNSIGNED_INT == 2
-    typedef unsigned int pi_uint16_t;
-#elif SIZEOF_UNSIGNED_SHORT == 2
-    typedef unsigned short pi_uint16_t;
-#else
-#error Unable to determine the size of pi_uint16_t.
-#endif
-
-#if SIZEOF_LONG == 2
-    typedef long pi_int16_t;
-#elif SIZEOF_INT == 2
-    typedef int pi_int16_t;
-#elif SIZEOF_SHORT == 2
-    typedef short pi_int16_t;
-#else
-#error Unable to determine the size of pi_int16_t.
-#endif
-
-#if SIZEOF_UNSIGNED_LONG == 4
-    typedef unsigned long pi_uint32_t;
-#elif SIZEOF_UNSIGNED_INT == 4
-    typedef unsigned int pi_uint32_t;
-#elif SIZEOF_UNSIGNED_SHORT == 4
-    typedef unsigned short pi_uint32_t;
-#else
-#error Unable to determine the size of pi_uint32_t.
-#endif
-
-#if SIZEOF_LONG == 4
-    typedef long pi_int32_t;
-#elif SIZEOF_INT == 4
-    typedef int pi_int32_t;
-#elif SIZEOF_SHORT == 4
-    typedef short pi_int32_t;
-#else
-#error Unable to determine the size of pi_int32_t.
-#endif
-
-typedef union {
-    double number;
-#ifdef WORDS_BIGENDIAN
-    struct {
-        PalmLib::pi_uint32_t hi;
-        PalmLib::pi_uint32_t lo;
-    } words;
-#else
-    struct {
-        PalmLib::pi_uint32_t lo;
-        PalmLib::pi_uint32_t hi;
-    } words;
-#endif
-} pi_double_t;
-
-    inline pi_int32_t get_long(const pi_char_t* p) {
-      return ( (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3] );
-    }
-
-    inline pi_int32_t get_treble(const pi_char_t* p) {
-      return ( (p[0] << 16) || (p[1] << 8) || p[0]);
-    }
-
-    inline pi_int16_t get_short(const pi_char_t* p) {
-      return ( (p[0] << 8) | p[1] );
-    }
-
-    inline void set_long(pi_char_t *p, pi_int32_t v) {
-      p[0] = (v >> 24) & 0xFF;
-      p[1] = (v >> 16) & 0xFF;
-      p[2] = (v >> 8 ) & 0xFF;
-      p[3] = (v      ) & 0xFF;
-    }
-
-    inline void set_treble(pi_char_t *p, pi_int32_t v) {
-      p[0] = (v >> 16) & 0xFF;
-      p[1] = (v >> 8 ) & 0xFF;
-      p[2] = (v      ) & 0xFF;
-    }
-
-    inline void set_short(pi_char_t *p, pi_int16_t v) {
-      p[0] = (v >> 8) & 0xFF;
-      p[1] = (v     ) & 0xFF;
-    }
-
-    inline pi_uint32_t mktag(pi_char_t c1, pi_char_t c2,
-           pi_char_t c3, pi_char_t c4)
-    { return (((c1)<<24)|((c2)<<16)|((c3)<<8)|(c4)); }
-
-    class error : public std::runtime_error {
-    public:
-      error(const std::string & what_arg) : std::runtime_error(what_arg) { }
-    };
-
-} // namespace PalmLib
-
-#endif
diff --git a/src/3rdparty/pilotdb/pilotdb.cpp b/src/3rdparty/pilotdb/pilotdb.cpp
deleted file mode 100644
index b13cb12..0000000
--- a/src/3rdparty/pilotdb/pilotdb.cpp
+++ /dev/null
@@ -1,287 +0,0 @@
-/***************************************************************************
-    Copyright (C) 2003-2009 Robby Stephenson <robby at periapsis.org>
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or         *
- *   modify it under the terms of the GNU General Public License as        *
- *   published by the Free Software Foundation; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
- *                                                                         *
- ***************************************************************************/
-
-#include "pilotdb.h"
-#include "strop.h"
-#include "libflatfile/Record.h"
-#include "../../tellico_debug.h"
-
-#include <QBuffer>
-
-using namespace PalmLib;
-using Tellico::Export::PilotDatabase;
-
-namespace {
-  static const int PI_HDR_SIZE          = 78;
-  static const int PI_RESOURCE_ENT_SIZE = 10;
-  static const int PI_RECORD_ENT_SIZE   = 8;
-}
-
-PilotDatabase::PilotDatabase() : Database(false), m_app_info(), m_sort_info(),
-    m_next_record_list_id(0) {
-  pi_int32_t now = StrOps::get_current_time();
-  creation_time(now);
-  modification_time(now);
-  backup_time(now);
-}
-
-PilotDatabase::~PilotDatabase() {
-  for(record_list_t::iterator i = m_records.begin(); i != m_records.end(); ++i) {
-    delete (*i);
-  }
-}
-
-QByteArray PilotDatabase::data() {
-  QBuffer b;
-  b.open(QIODevice::WriteOnly);
-
-  pi_char_t buf[PI_HDR_SIZE];
-  pi_int16_t ent_hdr_size = isResourceDB() ? PI_RESOURCE_ENT_SIZE : PI_RECORD_ENT_SIZE;
-  std::streampos offset = PI_HDR_SIZE + m_records.size() * ent_hdr_size + 2;
-
-  for(int i=0; i<32; ++i) {
-    buf[i] = 0;
-  }
-  memcpy(buf, name().c_str(), qMin((size_t)31, name().length()));
-  set_short(buf + 32, flags());
-  set_short(buf + 34, version());
-  set_long(buf + 36, creation_time());
-  set_long(buf + 40, modification_time());
-  set_long(buf + 44, backup_time());
-  set_long(buf + 48, modnum());
-  if(m_app_info.raw_size() > 0) {
-    set_long(buf + 52, offset);
-    offset += m_app_info.raw_size();
-  } else {
-    set_long(buf + 52, 0);
-  }
-  if(m_sort_info.raw_size() > 0) {
-    set_long(buf + 56, offset);
-    offset += m_sort_info.raw_size();
-  } else {
-    set_long(buf + 56, 0);
-  }
-  set_long(buf + 60, type());
-  set_long(buf + 64, creator());
-  set_long(buf + 68, unique_id_seed());
-  set_long(buf + 72, m_next_record_list_id);
-  set_short(buf + 76, m_records.size());
-
-  // Write the PDB/PRC header to the string.
-  b.write(reinterpret_cast<char *>(buf), sizeof(buf));
-
-  for(record_list_t::iterator i = m_records.begin(); i != m_records.end(); ++i) {
-    Block* entry = *i;
-
-    if(isResourceDB()) {
-      Resource * resource = reinterpret_cast<Resource *> (entry);
-      set_long(buf, resource->type());
-      set_short(buf + 4, resource->id());
-      set_long(buf + 6, offset);
-    } else {
-      Record * record = reinterpret_cast<Record *> (entry);
-      set_long(buf, offset);
-      buf[4] = record->attrs();
-      set_treble(buf + 5, record->unique_id());
-    }
-    b.write(reinterpret_cast<char *>(buf), ent_hdr_size);
-    offset += entry->raw_size();
-  }
-
-  b.write("\0", 1);
-  b.write("\0", 1);
-
-  if(m_app_info.raw_size() > 0) {
-    b.write((char *) m_app_info.raw_data(), m_app_info.raw_size());
-  }
-
-  if(m_sort_info.raw_size() > 0) {
-    b.write((char *) m_sort_info.raw_data(), m_sort_info.raw_size());
-  }
-
-  for(record_list_t::iterator q = m_records.begin(); q != m_records.end(); ++q) {
-    Block* entry = *q;
-    b.write((char *) entry->raw_data(), entry->raw_size());
-  }
-
-  b.close();
-  return b.buffer();
-}
-
-// Return the record identified by the given index. The caller owns
-// the returned RawRecord object.
-Record PilotDatabase::getRecord(unsigned index) const
-{
-    if (index >= m_records.size()) myDebug() << "invalid index";
-    return *(reinterpret_cast<Record *> (m_records[index]));
-}
-
-// Set the record identified by the given index to the given record.
-void PilotDatabase::setRecord(unsigned index, const Record& rec)
-{
-//    if (index >= m_records.size()) myDebug() << "invalid index");
-    *(reinterpret_cast<Record *> (m_records[index])) = rec;
-}
-
-// Append the given record to the database.
-void PilotDatabase::appendRecord(const Record& rec)
-{
-    Record* record = new Record(rec);
-
-    // If this new record has a unique ID that duplicates any other
-    // record, then reset the unique ID to an unused value.
-    if (m_uid_map.find(record->unique_id()) != m_uid_map.end()) {
-        uid_map_t::iterator iter = max_element(m_uid_map.begin(),
-                                               m_uid_map.end());
-        pi_uint32_t maxuid = (*iter).first;
-
-        // The new unique ID becomes the max plus one.
-        record->unique_id(maxuid + 1);
-    }
-
-    m_uid_map[record->unique_id()] = record;
-    m_records.push_back(record);
-}
-
-
-void PilotDatabase::clearRecords()
-{
-  m_records.erase(m_records.begin(), m_records.end());
-}
-
-// Return the resource with the given type and ID. NULL is returned if
-// the specified (type, ID) combination is not present in the
-// database. The caller owns the returned RawRecord object.
-Resource PilotDatabase::getResourceByType(pi_uint32_t type, pi_uint32_t id) const
-{
-    for (record_list_t::const_iterator i = m_records.begin();
-         i != m_records.end(); ++i) {
-        Resource* resource = reinterpret_cast<Resource *> (*i);
-        if (resource->type() == type && resource->id() == id)
-            return *resource;
-    }
-
-  myWarning() << "not found!";
-  return Resource();
-}
-
-// Return the resource present at the given index. NULL is returned if
-// the index is invalid. The caller owns the returned RawRecord
-// object.
-Resource PilotDatabase::getResourceByIndex(unsigned index) const
-{
-    if (index >= m_records.size()) myDebug() << "invalid index";
-    return *(reinterpret_cast<Resource *> (m_records[index]));
-}
-
-// Set the resouce at given index to passed RawResource object.
-void PilotDatabase::setResource(unsigned index, const Resource& resource)
-{
-    if (index >= m_records.size()) myDebug() << "invalid index";
-    *(reinterpret_cast<Resource *> (m_records[index])) = resource;
-}
-
-FlatFile::Field PilotDatabase::string2field(FlatFile::Field::FieldType type, const std::string& fldstr) {
-  FlatFile::Field field;
-
-  switch (type) {
-    case FlatFile::Field::STRING:
-      field.type = FlatFile::Field::STRING;
-      field.v_string = fldstr;
-      break;
-
-    case FlatFile::Field::BOOLEAN:
-      field.type = FlatFile::Field::BOOLEAN;
-      field.v_boolean = StrOps::string2boolean(fldstr);
-      break;
-
-    case FlatFile::Field::INTEGER:
-      field.type = FlatFile::Field::INTEGER;
-      StrOps::convert_string(fldstr, field.v_integer);
-      break;
-
-    case FlatFile::Field::FLOAT:
-      field.type = FlatFile::Field::FLOAT;
-      StrOps::convert_string(fldstr, field.v_float);
-      break;
-
-    case FlatFile::Field::NOTE:
-      field.type = FlatFile::Field::NOTE;
-      field.v_string = fldstr.substr(0,NOTETITLE_LENGTH - 1);
-      field.v_note = fldstr;
-      break;
-
-    case FlatFile::Field::LIST:
-      field.type = FlatFile::Field::LIST;
-      field.v_string = fldstr;
-      break;
-
-    case FlatFile::Field::LINK:
-      field.type = FlatFile::Field::LINK;
-      field.v_integer = 0;
-      field.v_string = fldstr;
-      break;
-
-    case FlatFile::Field::LINKED:
-      field.type = FlatFile::Field::LINKED;
-      field.v_string = fldstr;
-      break;
-
-    case FlatFile::Field::CALCULATED:
-      field.type = FlatFile::Field::CALCULATED;
-      field.v_string = fldstr;
-      break;
-
-    case FlatFile::Field::DATE:
-      field.type = FlatFile::Field::DATE;
-      struct tm time;
-      if (!fldstr.empty()) {
-#ifdef strptime
-        if(!strptime(fldstr.c_str(), "%Y/%m/%d", &time)) {
-#else
-        if(!StrOps::strptime(fldstr.c_str(), "%Y/%m/%d", &time)) {
-#endif
-          myDebug() << "invalid date in field";
-        }
-        field.v_date.month = time.tm_mon + 1;
-        field.v_date.day = time.tm_mday;
-        field.v_date.year = time.tm_year + 1900;
-        field.v_time.hour = time.tm_hour;
-        field.v_time.minute = time.tm_min;
-      } else {
-        field.v_date.month = 0;
-        field.v_date.day = 0;
-        field.v_date.year = 0;
-        field.v_time.hour = 24;
-        field.v_time.minute = 0;
-      }
-      break;
-
-    default:
-      myWarning() << "unsupported field type";
-      break;
-  }
-
-  return field;
-}
diff --git a/src/3rdparty/pilotdb/pilotdb.h b/src/3rdparty/pilotdb/pilotdb.h
deleted file mode 100644
index f48d3b1..0000000
--- a/src/3rdparty/pilotdb/pilotdb.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/***************************************************************************
-                                  pilotdb.h
-                             -------------------
-    begin                : Thu Nov 20 2003
-    Copyright (C) 2003-2009 Robby Stephenson <robby at periapsis.org>
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or         *
- *   modify it under the terms of the GNU General Public License as        *
- *   published by the Free Software Foundation; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
- *                                                                         *
- ***************************************************************************/
-
-#ifndef PILOTDB_H
-#define PILOTDB_H
-
-#include <map>
-#include <vector>
-
-#include "libpalm/Database.h"
-#include "libflatfile/Field.h"
-
-class QByteArray;
-
-namespace Tellico {
-  namespace Export {
-
-/**
- * @author Robby Stephenson
- */
-class PilotDatabase : public PalmLib::Database {
-public:
-  PilotDatabase();
-  ~PilotDatabase();
-
-  QByteArray data();
-
-  /**
-   * Return the total number of records/resources in this database.
-   */
-  virtual size_t getNumRecords() const { return m_records.size(); }
-
-  /**
-   * Return the database's application info block as a Block
-   * object. The caller owns the returned object.
-   */
-  virtual PalmLib::Block getAppInfoBlock() const { return m_app_info; }
-
-  /**
-   * Set the database's app info block to the contents of the
-   * passed Block object.
-   */
-  virtual void setAppInfoBlock(const PalmLib::Block& new_app_info) { m_app_info = new_app_info; }
-
-  /**
-   * Return the database's sort info block as a Block
-   * object. The caller owns the returned object.
-   */
-  virtual PalmLib::Block getSortInfoBlock() const { return m_sort_info; }
-
-  /**
-   * Set the database's sort info block to the contents of the
-   * passed Block object.
-   */
-  virtual void setSortInfoBlock(const PalmLib::Block& new_sort_info) { m_sort_info = new_sort_info; }
-
-  /**
-   * Return the record identified by the given index. The caller
-   * owns the returned RawRecord object.
-   */
-  virtual PalmLib::Record getRecord(unsigned index) const;
-
-  /**
-   * Set the record identified by the given index to the given record.
-   */
-  virtual void setRecord(unsigned index, const PalmLib::Record& rec);
-
-  /**
-   * Append the given record to the database.
-   */
-  virtual void appendRecord(const PalmLib::Record& rec);
-
-  /**
-   * Delete all records
-   */
-  virtual void clearRecords();
-
-  /**
-   * returned if the specified (type, ID) combination is not
-   * present in the database. The caller owns the returned RawRecord object.
-   */
-  virtual PalmLib::Resource getResourceByType(PalmLib::pi_uint32_t type, PalmLib::pi_uint32_t id) const;
-
-  /**
-   * Return the resource present at the given index. NULL is
-   * returned if the index is invalid. The caller owns the
-   * returned RawRecord object.
-   */
-  virtual PalmLib::Resource getResourceByIndex(unsigned index) const;
-
-  /**
-   * Set the resource at given index to passed Resource object.
-   */
-  virtual void setResource(unsigned index, const PalmLib::Resource& rsrc);
-
-  static PalmLib::FlatFile::Field string2field(PalmLib::FlatFile::Field::FieldType type,
-                                               const std::string& fldstr);
-
-protected:
-  typedef std::vector<PalmLib::Block *> record_list_t;
-  typedef std::map<PalmLib::pi_uint32_t, PalmLib::Record *> uid_map_t;
-
-  record_list_t m_records;
-  uid_map_t m_uid_map;
-
-private:
-  PalmLib::Block m_app_info;
-  PalmLib::Block m_sort_info;
-  PalmLib::pi_int32_t m_next_record_list_id;
-};
-
-  } //end namespace
-} // end namespace
-#endif
diff --git a/src/3rdparty/pilotdb/portability.h b/src/3rdparty/pilotdb/portability.h
deleted file mode 100644
index f5144d6..0000000
--- a/src/3rdparty/pilotdb/portability.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * palm-db-tools: Support Library: String Parsing Utility Functions
- * Copyright (C) 1999-2000 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifh Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __LIBSUPPORT_PORTABILITY_H__
-#define __LIBSUPPORT_PORTABILITY_H__
-
-/*
- * Pull in the correct configuration header.
- */
-
-#include "config.h"
-
-#ifdef _MSC_VER
-/* Borrowed from GLib: Make MSVC more pedantic, this is a recommended
- * pragma list from _Win32_Programming_ by Rector and Newcomer.
- */
-#pragma warning(error:4002)
-#pragma warning(error:4003)
-#pragma warning(1:4010)
-#pragma warning(error:4013)
-#pragma warning(1:4016)
-#pragma warning(error:4020)
-#pragma warning(error:4021)
-#pragma warning(error:4027)
-#pragma warning(error:4029)
-#pragma warning(error:4033)
-#pragma warning(error:4035)
-#pragma warning(error:4045)
-#pragma warning(error:4047)
-#pragma warning(error:4049)
-#pragma warning(error:4053)
-#pragma warning(error:4071)
-#pragma warning(disable:4101)
-#pragma warning(error:4150)
- 
-#pragma warning(disable:4244)   /* No possible loss of data warnings */
-#pragma warning(disable:4305)   /* No truncation from int to char warnings */
-#endif /* _MSC_VER */
-
-/* MSVC is screwed up when it comes to calling base class virtual
- * functions from a subclass. Thus, the following macro which makes
- * calling the superclass nice and simple.
- */
-#ifndef _MSC_VER
-#define SUPERCLASS(namespace, class, function, args) namespace::class::function args
-#else
-#define SUPERCLASS(namespace, class, function, args) this-> class::function args
-#endif
-
-#endif
diff --git a/src/3rdparty/pilotdb/strop.cpp b/src/3rdparty/pilotdb/strop.cpp
deleted file mode 100644
index 142b4b2..0000000
--- a/src/3rdparty/pilotdb/strop.cpp
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * palm-db-tools: Support Library: String Parsing Utility Functions
- * Copyright (C) 1999-2000 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifh Floor, Boston, MA  02110-1301  USA
- */
-
-#include "strop.h"
-
-#include <string>
-#include <vector>
-#include <algorithm>
-#include <cctype>
-#include <sstream>
-
-#include "../../tellico_debug.h"
-
-std::ostream* err;
-
-void StrOps::lower(std::string& str)
-{
-    for (std::string::iterator p = str.begin(); p != str.end(); ++p) {
-        if (isupper(*p))
-            *p = tolower(*p);
-    }
-}
-
-bool StrOps::string2boolean(const std::string& str)
-{
-    std::string value(str);
-
-    StrOps::lower(value);
-
-    if (value == "on")       return true;
-    else if (str == "off")   return false;
-    else if (str == "true")  return true;
-    else if (str == "t")     return true;
-    else if (str == "false") return false;
-    else if (str == "f")     return false;
-    else {
-        int num = 0;
-
-        std::istringstream(str.c_str()) >> num;
-        return num != 0 ? true : false;
-    }
-}
-
-std::string StrOps::type2string(PalmLib::FlatFile::Field::FieldType t)
-{
-    switch (t) {
-    case PalmLib::FlatFile::Field::STRING:
-        return "string";
-
-    case PalmLib::FlatFile::Field::BOOLEAN:
-        return "boolean";
-
-    case PalmLib::FlatFile::Field::INTEGER:
-        return "integer";
-
-    case PalmLib::FlatFile::Field::FLOAT:
-        return "float";
-
-    case PalmLib::FlatFile::Field::DATE:
-        return "date";
-
-    case PalmLib::FlatFile::Field::TIME:
-        return "time";
-
-    case PalmLib::FlatFile::Field::DATETIME:
-        return "datetime";
-
-    case PalmLib::FlatFile::Field::NOTE:
-        return "note";
-
-    case PalmLib::FlatFile::Field::LIST:
-        return "list";
-
-    case PalmLib::FlatFile::Field::LINK:
-        return "link";
-
-    case PalmLib::FlatFile::Field::CALCULATED:
-        return "calculated";
-
-    case PalmLib::FlatFile::Field::LINKED:
-        return "linked";
-
-    default:
-        // If we don't support the field type, then fake it as a string.
-        return "string";
-    }
-}
-
-PalmLib::FlatFile::Field::FieldType StrOps::string2type(std::string typestr)
-{
-    StrOps::lower(typestr);
-    if (typestr == "string")
-        return PalmLib::FlatFile::Field::STRING;
-    else if (typestr == "str")
-        return PalmLib::FlatFile::Field::STRING;
-    else if (typestr == "note")
-        return PalmLib::FlatFile::Field::NOTE;
-    else if (typestr == "bool")
-        return PalmLib::FlatFile::Field::BOOLEAN;
-    else if (typestr == "boolean")
-        return PalmLib::FlatFile::Field::BOOLEAN;
-    else if (typestr == "integer")
-        return PalmLib::FlatFile::Field::INTEGER;
-    else if (typestr == "int")
-        return PalmLib::FlatFile::Field::INTEGER;
-    else if (typestr == "float")
-        return PalmLib::FlatFile::Field::FLOAT;
-    else if (typestr == "date")
-        return PalmLib::FlatFile::Field::DATE;
-    else if (typestr == "time")
-        return PalmLib::FlatFile::Field::TIME;
-    else if (typestr == "datetime")
-        return PalmLib::FlatFile::Field::DATETIME;
-    else if (typestr == "list")
-        return PalmLib::FlatFile::Field::LIST;
-    else if (typestr == "link")
-        return PalmLib::FlatFile::Field::LINK;
-    else if (typestr == "linked")
-        return PalmLib::FlatFile::Field::LINKED;
-    else if (typestr == "calculated")
-        return PalmLib::FlatFile::Field::CALCULATED;
-    else
-        myDebug() << "unknown field type";
-    return PalmLib::FlatFile::Field::STRING;
-}
-
-std::string StrOps::strip_back(const std::string& str, const std::string& what)
-{
-    std::string result(str);
-    std::string::reverse_iterator p = result.rbegin();
-
-    while (p != result.rend()
-           && (std::find(what.begin(), what.end(), *p) != what.end())) ++p;
-
-    result.erase(p.base(), result.end());
-
-    return result;
-}
-
-std::string StrOps::strip_front(const std::string& str,const std::string& what)
-{
-    std::string result(str);
-    std::string::iterator p = result.begin();
-
-    while (p != result.end()
-           && (std::find(what.begin(), what.end(), *p) != what.end())) ++p;
-
-    result.erase(result.begin(), p);
-
-    return result;
-}
-
-StrOps::string_list_t StrOps::csv_to_array(const std::string& str, char delim, bool quoted_string)
-{
-    enum { STATE_NORMAL, STATE_QUOTES } state;
-    StrOps::string_list_t result;
-    std::string elem;
-
-    state = STATE_NORMAL;
-    for (std::string::const_iterator p = str.begin(); p != str.end(); ++p) {
-        switch (state) {
-        case STATE_NORMAL:
-            if (quoted_string && *p == '"') {
-                state = STATE_QUOTES;
-            } else if (*p == delim) {
-                result.push_back(elem);
-                elem = "";
-            } else {
-                elem += *p;
-            }
-        break;
-
-        case STATE_QUOTES:
-            if (quoted_string && *p == '"') {
-                if ((p + 1) != str.end() && *(p+1) == '"') {
-                    ++p;
-                    elem += '"';
-                } else {
-                    state = STATE_NORMAL;
-                }
-            } else {
-                elem += *p;
-            }
-        break;
-        }
-    }
-
-    switch (state) {
-    case STATE_NORMAL:
-        result.push_back(elem);
-    break;
-    case STATE_QUOTES:
-        myDebug() << "unterminated quotes";
-    break;
-    }
-
-    return result;
-}
-
-StrOps::string_list_t
-StrOps::str_to_array(const std::string& str, const std::string& delim,
-                     bool multiple_delim, bool handle_comments)
-{
-    enum { STATE_NORMAL, STATE_COMMENT, STATE_QUOTE_DOUBLE, STATE_QUOTE_SINGLE,
-           STATE_BACKSLASH, STATE_BACKSLASH_DOUBLEQUOTE } state;
-    StrOps::string_list_t result;
-    std::string elem;
-
-    state = STATE_NORMAL;
-    for (std::string::const_iterator p = str.begin(); p != str.end(); ++p) {
-        switch (state) {
-        case STATE_NORMAL:
-            if (*p == '"') {
-                state = STATE_QUOTE_DOUBLE;
-            } else if (*p == '\'') {
-                state = STATE_QUOTE_SINGLE;
-            } else if (std::find(delim.begin(), delim.end(), *p) != delim.end()) {
-                if (multiple_delim) {
-                    ++p;
-                    while (p != str.end()
-                       && std::find(delim.begin(), delim.end(), *p) != delim.end()) {
-                        ++p;
-                    }
-                    --p;
-                }
-                result.push_back(elem);
-                elem = "";
-            } else if (*p == '\\') {
-                state = STATE_BACKSLASH;
-            } else if (handle_comments && *p == '#') {
-                state = STATE_COMMENT;
-            } else {
-                elem += *p;
-            }
-        break;
-
-        case STATE_COMMENT:
-        break;
-
-        case STATE_QUOTE_DOUBLE:
-            if (*p == '"')
-                state = STATE_NORMAL;
-            else if (*p == '\\')
-                state = STATE_BACKSLASH_DOUBLEQUOTE;
-            else
-                elem += *p;
-        break;
-
-        case STATE_QUOTE_SINGLE:
-            if (*p == '\'')
-                state = STATE_NORMAL;
-            else
-                elem += *p;
-            break;
-
-        case STATE_BACKSLASH:
-            elem += *p;
-            state = STATE_NORMAL;
-        break;
-
-        case STATE_BACKSLASH_DOUBLEQUOTE:
-            switch (*p) {
-            case '\\':
-                elem += '\\';
-            break;
-
-            case 'n':
-                elem += '\n';
-            break;
-
-            case 'r':
-                elem += '\r';
-            break;
-
-            case 't':
-                elem += '\t';
-            break;
-
-            case 'v':
-                elem += '\v';
-            break;
-
-            case '"':
-                elem += '"';
-            break;
-
-            case 'x':
-                {
-                char buf[3];
-
-                // Extract and check the first hexadecimal character.
-                if ((p + 1) == str.end())
-                    myDebug() << "truncated escape";
-                if (! isxdigit(*(p + 1)))
-                    myDebug() << "invalid hex character";
-                buf[0] = *++p;
-
-                // Extract and check the second (if any) hex character.
-                if ((p + 1) != str.end() && isxdigit(*(p + 1))) {
-                    buf[1] = *++p;
-                    buf[2] = '\0';
-                } else {
-                    buf[1] = buf[2] = '\0';
-                }
-
-                std::istringstream stream(buf);
-                stream.setf(std::ios::hex, std::ios::basefield);
-                unsigned value;
-                stream >> value;
-
-                elem += static_cast<char> (value & 0xFFu);
-            }
-            break;
-            }
-
-            // Escape is done. Go back to the normal double quote state.
-            state = STATE_QUOTE_DOUBLE;
-        break;
-        }
-    }
-
-    switch (state) {
-    case STATE_NORMAL:
-        result.push_back(elem);
-    break;
-
-    case STATE_QUOTE_DOUBLE:
-        myDebug() << "unterminated double quotes";
-    break;
-
-    case STATE_QUOTE_SINGLE:
-        myDebug() << "unterminated single quotes";
-    break;
-
-    case STATE_BACKSLASH:
-    case STATE_BACKSLASH_DOUBLEQUOTE:
-        myDebug() << "an escape character must follow a backslash";
-    break;
-
-    default:
-    break;
-    }
-
-    return result;
-}
-
-PalmLib::pi_uint32_t
-StrOps::get_current_time(void)
-{
-    time_t now;
-
-    time(&now);
-    return static_cast<PalmLib::pi_uint32_t> (now) + PalmLib::pi_uint32_t(2082844800);
-}
-
-char *
-StrOps::strptime(const char *s, const char  *format,  struct tm *tm)
-{
-    char *data = (char *)s;
-    char option = false;
-
-    while (*format != 0) {
-        if (*data == 0)
-            return NULL;
-        switch (*format) {
-        case '%':
-            option = true;
-            format++;
-        break;
-        case 'd':
-            if (option) {
-                tm->tm_mday = strtol(data, &data, 10);
-                if (tm->tm_mday < 1 || tm->tm_mday > 31)
-                    return NULL;
-            } else if (*data != 'd') {
-                return  data;
-            }
-            option = false;
-            format++;
-        break;
-        case 'm':
-            if (option) {
-                /* tm_mon between 0 and 11 */
-                tm->tm_mon = strtol(data, &data, 10) - 1;
-                if (tm->tm_mon < 0 || tm->tm_mon > 11)
-                    return NULL;
-            } else if (*data != 'm') {
-                return  data;
-            }
-            option = false;
-            format++;
-        break;
-        case 'y':
-            if (option) {
-                tm->tm_year = strtol(data, &data, 10);
-                if (tm->tm_year < 60) tm->tm_year += 100;
-            } else if (*data != 'y') {
-                return  data;
-            }
-            option = false;
-            format++;
-        break;
-        case 'Y':
-            if (option) {
-                tm->tm_year = strtol(data, &data, 10) - 1900;
-            } else if (*data != 'Y') {
-                return  data;
-            }
-            option = false;
-            format++;
-        break;
-        case 'H':
-            if (option) {
-                tm->tm_hour = strtol(data, &data, 10);
-                if (tm->tm_hour < 0 || tm->tm_hour > 23)
-                    return NULL;
-            } else if (*data != 'H') {
-                return  data;
-            }
-            option = false;
-            format++;
-        break;
-        case 'M':
-            if (option) {
-                tm->tm_min = strtol(data, &data, 10);
-                if (tm->tm_min < 0 || tm->tm_min > 59)
-                    return NULL;
-            } else if (*data != 'M') {
-                return  data;
-            }
-            option = false;
-            format++;
-        break;
-        default:
-            if (option)
-                return data;
-            if (*data != *format)
-                return data;
-            format++;
-            data++;
-        }
-    }
-    return data;
-}
-
-// Read a line from an istream w/o concern for buffer limitations.
-std::string
-StrOps::readline(std::istream& stream)
-{
-    std::string line;
-    char buf[1024];
-
-    while (1) {
-        // Read the next line (or part thereof) from the stream.
-        stream.getline(buf, sizeof(buf));
-        // Bail out of the loop if the stream has reached end-of-file.
-        if ((stream.eof() && !buf[0]) || stream.bad())
-            break;
-
-        // Append the data read to the result string.
-        line.append(buf);
-
-        // If the stream is good, then stop. Otherwise, clear the
-        // error indicator so that getline will work again.
-        if ((stream.eof() && buf[0]) || stream.good())
-            break;
-        stream.clear();
-    }
-
-    return line;
-}
-
-std::string
-StrOps::quote_string(std::string str, bool extended_mode)
-{
-    std::string result;
-    std::ostringstream error;
-
-    if (extended_mode) {
-        result += '"';
-        for (std::string::iterator c = str.begin(); c != str.end(); ++c) {
-            switch (*c) {
-            case '\\':
-                result += '\\';
-                result += '\\';
-            break;
-
-            case '\r':
-                result += '\\';
-                result += 'r';
-            break;
-
-            case '\n':
-                result += '\\';
-                result += 'n';
-            break;
-
-            case '\t':
-                result += '\\';
-                result += 't';
-            break;
-
-            case '\v':
-                result += '\\';
-                result += 'v';
-            break;
-
-            case '"':
-                result += '\\';
-                result += '"';
-            break;
-
-            default:
-                if (isprint(*c)) {
-                    result += *c;
-                } else {
-                    std::ostringstream buf;
-                    buf.width(2);
-                    buf.setf(std::ios::hex, std::ios::basefield);
-                    buf.setf(std::ios::left);
-                    buf << ((static_cast<unsigned> (*c)) & 0xFF) << std::ends;
-
-                    result += "\\x";
-                    result += buf.str();
-                }
-            break;
-            }
-        }
-        result += '"';
-    } else {
-        result += '"';
-        for (std::string::iterator c = str.begin(); c != str.end(); ++c) {
-            if (*c == '"') {
-                result += "\"\"";
-            } else if (*c == '\n' || *c == '\r') {
-                error << "use extended csv mode for newlines\n";
-                *err << error.str();
-               myDebug() << error.str().c_str();
-            } else {
-                result += *c;
-            }
-        }
-        result += '"';
-    }
-
-    return result;
-}
-
-std::string
-StrOps::concatenatepath(std::string p_Path,
-        std::string p_FileName, std::string p_Ext)
-{
-    std::string l_FilePath;
-#ifdef WIN32
-    if (p_FileName[1] == ':' || p_FileName[0] == '\\')
-        return p_FileName;
-    else if (p_Path.empty())
-      l_FilePath = p_FileName;
-    else
-        l_FilePath = p_Path + std::string("\\") + p_FileName;
-#else
-    if (p_FileName[0] == '/')
-        return p_FileName;
-    else if (p_Path.empty())
-      l_FilePath = p_FileName;
-    else
-        l_FilePath = p_Path + std::string("/") + p_FileName;
-
-#endif
-    if (!p_Ext.empty() && (p_FileName.rfind(p_Ext) == std::string::npos))
-        l_FilePath += p_Ext;
-
-    return l_FilePath;
-}
diff --git a/src/3rdparty/pilotdb/strop.h b/src/3rdparty/pilotdb/strop.h
deleted file mode 100644
index 8c7c896..0000000
--- a/src/3rdparty/pilotdb/strop.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * palm-db-tools: Support Library: String Parsing Utility Functions
- * Copyright (C) 1999-2000 by Tom Dyas (tdyas at users.sourceforge.net)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifh Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __LIBSUPPORT_STROP_H__
-#define __LIBSUPPORT_STROP_H__
-
-#include <stdexcept>
-#include <vector>
-#include <string>
-#include <sstream>
-#include <time.h>
-#include "libflatfile/Database.h"
-
-namespace StrOps {
-
-    // This exception is thrown whenever an error is encountered in
-    // csv_to_array and str_to_array.
-    class csv_parse_error : public std::runtime_error {
-    public:
-      csv_parse_error(const std::string& msg) : std::runtime_error(msg) { }
-    };
-
-    class csv_unterminated_quote : public std::runtime_error {
-    public:
-      csv_unterminated_quote(const std::string& msg) : std::runtime_error(msg) { }
-    };
-
-    // The results of any parse are returned as this type.
-    typedef std::vector<std::string> string_list_t;
-
-
-    /**
-     * Convert all uppercase characters in a string to lowercase.
-     */
-    void lower(std::string& str);
-
-    /**
-     * Convert a string to a boolean value.
-     *
-     * @param str The string containing a boolean value to convert.
-     */
-    bool string2boolean(const std::string& str);
-
-    /**
-     * Convert a string to a FieldType value.
-     *
-     * @param typestr The string containing a FieldType value to convert.
-     */
-    PalmLib::FlatFile::Field::FieldType string2type(std::string typestr);
-
-    /**
-     * Convert a FieldType value to a string.
-     *
-     * @param t The FieldType value containing a string to convert.
-     */
-    std::string type2string(PalmLib::FlatFile::Field::FieldType t);
-
-    /**
-     * Strip trailing characters from a string.
-     *
-     * @param str  The string to strip characters from.
-     * @param what The string containing characters to strip.
-     */
-    std::string strip_back(const std::string& str, const std::string& what);
-
-    /**
-     * Strip leading characters from a string.
-     *
-     * @param str  The string to strip characters from.
-     * @param what The string containing characters to strip.
-     */
-    std::string strip_front(const std::string& str, const std::string& what);
-
-    /**
-     * Convert a string to a target type using a istringstream.
-     */
-    template<class T>
-    inline void convert_string(const std::string& str, T& result) {
-      std::istringstream(str.c_str()) >> result;
-    }
-
-    /**
-     * Parse a string in CSV (comman-separated values) format and
-     * return it as a list.
-     *
-     * @param str The string containing the CSV fields.
-     * @param delim The field delimiter. Defaults to a comma.
-     */
-    string_list_t csv_to_array(const std::string& str, char delim = ',', bool quoted_string = true);
-
-
-    /**
-     * Parse an argv-style array and return it as a list.
-     *
-     * @param str             The string to parse.
-     * @param delim           String containing the delimiter characters.
-     * @param multiple_delim  Should multiple delimiters count as one?
-     * @param handle_comments Handle # as a comment character.
-     */
-    string_list_t str_to_array(const std::string& str,
-             const std::string& delim,
-             bool multiple_delim,
-             bool handle_comments);
-
-    /**
-     * return the current date in the palm format.
-     */
-    PalmLib::pi_uint32_t get_current_time(void);
-
-    /**
-     * fill a char array with a tm structure in the format passed.
-     * @param s the char array filled.
-     * @param format the string of the format to use to print the date.
-     * @param tm a pointer to time structure.
-     */
-    char *strptime(const char *s, const char  *format,  struct tm *tm);
-
-    /**
-     * read one line from the input stream of a file
-     */
-    std::string readline(std::istream& stream);
-
-    /**
-     * add the quotes to a string
-     */
-    std::string quote_string(std::string str, bool extended_mode);
-
-    /**
-     * concatenate the path directory, the file name and the extension
-     * to give the file path to a file
-     */
-    std::string concatenatepath(std::string p_Path, std::string p_FileName,
-        std::string p_Ext = std::string(""));
-
-} // namespace StrOps
-
-#endif
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9b71314..0926b72 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -79,7 +79,6 @@ TARGET_LINK_LIBRARIES(tellico
     tellicomodels
     utils
     newstuff
-    pilotdb-tellico
     rtf2html-tellico
     ${TELLICO_BTPARSE_LIBS}
     ${TELLICO_CSV_LIBS}
diff --git a/src/core/dbusinterface.h b/src/core/dbusinterface.h
index 96aa664..ddb988e 100644
--- a/src/core/dbusinterface.h
+++ b/src/core/dbusinterface.h
@@ -64,8 +64,6 @@ public slots:
     { return exportCollection(Export::HTML, KUrl::fromPath(file)); }
   Q_SCRIPTABLE bool exportCSV(const QString& file)
     { return exportCollection(Export::CSV, KUrl::fromPath(file)); }
-  Q_SCRIPTABLE bool exportPilotDB(const QString& file)
-    { return exportCollection(Export::PilotDB, KUrl::fromPath(file)); }
 
   Q_SCRIPTABLE QList<int> selectedEntries() const;
   Q_SCRIPTABLE QList<int> filteredEntries() const;
diff --git a/src/exportdialog.cpp b/src/exportdialog.cpp
index b2e641d..996b5b6 100644
--- a/src/exportdialog.cpp
+++ b/src/exportdialog.cpp
@@ -37,7 +37,6 @@
 #include "translators/bibtexexporter.h"
 #include "translators/bibtexmlexporter.h"
 #include "translators/xsltexporter.h"
-#include "translators/pilotdbexporter.h"
 #include "translators/alexandriaexporter.h"
 #include "translators/onixexporter.h"
 #include "translators/gcstarexporter.h"
@@ -124,7 +123,7 @@ ExportDialog::ExportDialog(Tellico::Export::Format format_, Tellico::Data::CollP
 
   setMainWidget(widget);
   readOptions();
-  if(format_ == Export::Alexandria || format_ == Export::PilotDB) {
+  if(format_ == Export::Alexandria) {
     // no encoding options enabled
     group2->setEnabled(false);
   }
@@ -204,14 +203,6 @@ Tellico::Export::Exporter* ExportDialog::exporter(Tellico::Export::Format format
       exporter = new Export::XSLTExporter(coll_);
       break;
 
-    case Export::PilotDB:
-      {
-        Export::PilotDBExporter* pdbExp = new Export::PilotDBExporter(coll_);
-        pdbExp->setColumns(Controller::self()->visibleColumns());
-        exporter = pdbExp;
-      }
-      break;
-
     case Export::Alexandria:
       exporter = new Export::AlexandriaExporter(coll_);
       break;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 32978ff..e37a38c 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -433,9 +433,6 @@ void MainWindow::initActions() {
   EXPORT_ACTION(Export::CSV, "file_export_csv", i18n("Export to CSV..."),
                 i18n("Export to a comma-separated values file"), mimeIcon("text/csv", "text/x-csv"));
 
-  EXPORT_ACTION(Export::PilotDB, "file_export_pilotdb", i18n("Export to PilotDB..."),
-                i18n("Export to a PilotDB database"), BarIcon(QLatin1String("palm")));
-
   EXPORT_ACTION(Export::Alexandria, "file_export_alexandria", i18n("Export to Alexandria..."),
                 i18n("Export to an Alexandria library"), BarIcon(QLatin1String("alexandria")));
 
diff --git a/src/tellicoui.rc b/src/tellicoui.rc
index 6f15410..29e2fad 100644
--- a/src/tellicoui.rc
+++ b/src/tellicoui.rc
@@ -1,6 +1,6 @@
 <?xml version = '1.0'?>
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<kpartgui version="34" name="tellico">
+<kpartgui version="35" name="tellico">
  <MenuBar>
   <Menu name="file">
    <text>&File</text>
@@ -56,7 +56,6 @@
     <Action name="file_export_zip"/>
     <Action name="file_export_html"/>
     <Action name="file_export_csv"/>
-    <Action name="file_export_pilotdb"/>
     <Separator/>
     <Action name="file_export_alexandria"/>
     <Action name="file_export_bibtex"/>
diff --git a/src/translators/CMakeLists.txt b/src/translators/CMakeLists.txt
index a4838b4..eb2eb5c 100644
--- a/src/translators/CMakeLists.txt
+++ b/src/translators/CMakeLists.txt
@@ -32,7 +32,6 @@ SET(translators_STAT_SRCS
    importer.cpp
    onixexporter.cpp
    pdfimporter.cpp
-   pilotdbexporter.cpp
    referencerimporter.cpp
    risimporter.cpp
    tellico_xml.cpp
diff --git a/src/translators/pilotdbexporter.cpp b/src/translators/pilotdbexporter.cpp
deleted file mode 100644
index d0d46d9..0000000
--- a/src/translators/pilotdbexporter.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/***************************************************************************
-    Copyright (C) 2003-2009 Robby Stephenson <robby at periapsis.org>
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or         *
- *   modify it under the terms of the GNU General Public License as        *
- *   published by the Free Software Foundation; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
- *                                                                         *
- ***************************************************************************/
-
-#include "pilotdbexporter.h"
-#include "pilotdb/pilotdb.h"
-#include "pilotdb/libflatfile/DB.h"
-
-#include "../collection.h"
-#include "../core/filehandler.h"
-#include "../tellico_debug.h"
-
-#include <klocale.h>
-#include <KConfigGroup>
-#include <kglobal.h>
-#include <kcharsets.h>
-
-#include <QGroupBox>
-#include <QCheckBox>
-#include <QTextCodec>
-#include <QDateTime>
-#include <QVBoxLayout>
-
-using namespace Tellico;
-using Tellico::Export::PilotDBExporter;
-
-PilotDBExporter::PilotDBExporter(Data::CollPtr coll_) : Tellico::Export::Exporter(coll_),
-      m_backup(true),
-      m_widget(0),
-      m_checkBackup(0) {
-}
-
-QString PilotDBExporter::formatString() const {
-  return i18n("PilotDB");
-}
-
-QString PilotDBExporter::fileFilter() const {
-  return i18n("*.pdb|Pilot Database Files (*.pdb)") + QLatin1Char('\n') + i18n("*|All Files");
-}
-
-bool PilotDBExporter::exec() {
-  Data::CollPtr coll = collection();
-  if(!coll) {
-    return false;
-  }
-
-  // This is something of a hidden preference cause I don't want to put it in the GUI right now
-  // Latin1 by default
-  QTextCodec* codec = 0;
-  {
-    // Latin1 is default
-    KConfigGroup group(KGlobal::config(), QString::fromLatin1("ExportOptions - %1").arg(formatString()));
-    codec = KGlobal::charsets()->codecForName(group.readEntry("Charset"));
-  }
-  if(!codec) {
-    myWarning() << "no QTextCodec!";
-    return false;
-#ifndef NDEBUG
-  } else {
-    myDebug() << "encoding with " << codec->name();
-#endif
-  }
-
-  // DB 0.3.x format
-  PalmLib::FlatFile::DB db;
-
-  // set database title
-  db.title(codec->fromUnicode(coll->title()).data());
-
-  // set backup option
-//  db.setOption("backup", (m_checkBackup && m_checkBackup->isChecked()) ? "true" : "false");
-
-  // all fields are added
-  // except that only one field of type NOTE
-  bool hasNote = false;
-  Data::FieldList outputFields; // not all fields will be output
-  foreach(Data::FieldPtr fIt, fields()) {
-    switch(fIt->type()) {
-      case Data::Field::Choice:
-        // the charSeparator is actually defined in DB.h
-        db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::LIST,
-                       codec->fromUnicode(fIt->allowed().join(QLatin1String("/"))).data());
-        outputFields.append(fIt);
-        break;
-
-      case Data::Field::Number:
-        // the DB only supports single values of integers
-        if(fIt->hasFlag(Data::Field::AllowMultiple)) {
-          db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::STRING);
-        } else {
-          db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::INTEGER);
-        }
-        outputFields.append(fIt);
-        break;
-
-      case Data::Field::Bool:
-        db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::BOOLEAN);
-        outputFields.append(fIt);
-        break;
-
-      case Data::Field::Para:
-        if(hasNote) { // only one is allowed, according to palm-db-tools documentation
-          myDebug() << "adding note as string";
-          db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::STRING);
-        } else {
-          myDebug() << "adding note";
-          db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::NOTE);
-          hasNote = true;
-        }
-        outputFields.append(fIt);
-        break;
-
-      case Data::Field::Date:
-        db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::DATE);
-        outputFields.append(fIt);
-        break;
-
-      case Data::Field::Image:
-        // don't include images
-        myDebug() << "skipping " << fIt->title() << "image field";
-        break;
-
-      default:
-        db.appendField(codec->fromUnicode(fIt->title()).data(), PalmLib::FlatFile::Field::STRING);
-        outputFields.append(fIt);
-        break;
-    }
-  }
-
-  // add view with visible fields
-  if(m_columns.count() > 0) {
-    PalmLib::FlatFile::ListView lv;
-    lv.name = codec->fromUnicode(i18n("View Columns")).data();
-    foreach(const QString& column, m_columns) {
-      PalmLib::FlatFile::ListViewColumn col;
-      col.field = coll->fieldTitles().indexOf(column);
-      lv.push_back(col);
-    }
-    db.appendListView(lv);
-  }
-  db.doneWithSchema();
-
-  FieldFormat::Request format = (options() & Export::ExportFormatted ?
-                                                FieldFormat::ForceFormat :
-                                                FieldFormat::AsIsFormat);
-
-  QRegExp br(QLatin1String("<br/?>"));
-  QRegExp tags(QLatin1String("<.*>"));
-  tags.setMinimal(true);
-
-  QString value;
-  foreach(Data::EntryPtr entryIt, entries()) {
-    PalmLib::FlatFile::Record record;
-    unsigned i = 0;
-    foreach(Data::FieldPtr fIt, outputFields) {
-      value = entryIt->formattedField(fIt->name(), format);
-
-      if(fIt->type() == Data::Field::Date) {
-        QStringList s = value.split(QLatin1Char('-'), QString::KeepEmptyParts);
-        bool ok = true;
-        int y = s.count() > 0 ? s[0].toInt(&ok) : QDate::currentDate().year();
-        if(!ok) {
-          y = QDate::currentDate().year();
-        }
-        int m = s.count() > 1 ? s[1].toInt(&ok) : 1;
-        if(!ok) {
-          m = 1;
-        }
-        int d = s.count() > 2 ? s[2].toInt(&ok) : 1;
-        if(!ok) {
-          d = 1;
-        }
-        QDate date(y, m, d);
-        value = date.toString(QLatin1String("yyyy/MM/dd"));
-      } else if(fIt->type() == Data::Field::Para) {
-        value.replace(br, QLatin1String("\n"));
-        value.remove(tags);
-      }
-      // the number of fields in the record must match the number of fields in the database
-      record.appendField(PilotDatabase::string2field(db.field_type(i),
-                         value.isEmpty() ? std::string() : codec->fromUnicode(value).data()));
-      ++i;
-    }
-    // Add the record to the database.
-    db.appendRecord(record);
-  }
-
-  PilotDatabase pdb;
-  db.outputPDB(pdb);
-
-  return FileHandler::writeDataURL(url(), pdb.data(), options() & Export::ExportForce);
-}
-
-QWidget* PilotDBExporter::widget(QWidget* parent_) {
-  if(m_widget) {
-    return m_widget;
-  }
-
-  m_widget = new QWidget(parent_);
-  QVBoxLayout* l = new QVBoxLayout(m_widget);
-
-  QGroupBox* gbox = new QGroupBox(i18n("PilotDB Options"), m_widget);
-  QVBoxLayout* vlay = new QVBoxLayout(gbox);
-
-  m_checkBackup = new QCheckBox(i18n("Set PDA backup flag for database"), gbox);
-  m_checkBackup->setChecked(m_backup);
-  m_checkBackup->setWhatsThis(i18n("Set PDA backup flag for database"));
-
-  vlay->addWidget(m_checkBackup);
-
-  l->addWidget(gbox);
-  l->addStretch(1);
-  return m_widget;
-}
-
-void PilotDBExporter::readOptions(KSharedConfigPtr config_) {
-  KConfigGroup group(config_, QString::fromLatin1("ExportOptions - %1").arg(formatString()));
-  m_backup = group.readEntry("Backup", m_backup);
-}
-
-void PilotDBExporter::saveOptions(KSharedConfigPtr config_) {
-  KConfigGroup group(config_, QString::fromLatin1("ExportOptions - %1").arg(formatString()));
-  m_backup = m_checkBackup->isChecked();
-  group.writeEntry("Backup", m_backup);
-}
-
diff --git a/src/translators/pilotdbexporter.h b/src/translators/pilotdbexporter.h
deleted file mode 100644
index bc663d1..0000000
--- a/src/translators/pilotdbexporter.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/***************************************************************************
-    Copyright (C) 2003-2009 Robby Stephenson <robby at periapsis.org>
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or         *
- *   modify it under the terms of the GNU General Public License as        *
- *   published by the Free Software Foundation; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
- *                                                                         *
- ***************************************************************************/
-
-#ifndef TELLICO_PILOTDBEXPORTER_H
-#define TELLICO_PILOTDBEXPORTER_H
-
-class QCheckBox;
-
-#include "exporter.h"
-
-#include <QStringList>
-
-namespace Tellico {
-  namespace Export {
-
-/**
- * @author Robby Stephenson
- */
-class PilotDBExporter : public Exporter {
-Q_OBJECT
-
-public:
-  PilotDBExporter(Data::CollPtr coll);
-
-  virtual bool exec();
-  virtual QString formatString() const;
-  virtual QString fileFilter() const;
-
-  virtual QWidget* widget(QWidget* parent);
-  virtual void readOptions(KSharedConfigPtr cfg);
-  virtual void saveOptions(KSharedConfigPtr cfg);
-
-  void setColumns(const QStringList& columns) { m_columns = columns; }
-
-private:
-  bool m_backup;
-
-  QWidget* m_widget;
-  QCheckBox* m_checkBackup;
-  QStringList m_columns;
-};
-
-  } // end namespace
-} // end namespace
-#endif
diff --git a/src/translators/translators.h b/src/translators/translators.h
index 04ddd44..5735347 100644
--- a/src/translators/translators.h
+++ b/src/translators/translators.h
@@ -75,7 +75,7 @@ namespace Tellico {
       CSV,
       XSLT,
       Text,
-      PilotDB,
+      PilotDB, // Deprecated
       Alexandria,
       ONIX,
       GCstar
diff --git a/tellico.appdata.xml b/tellico.appdata.xml
index f496f4c..27480b2 100644
--- a/tellico.appdata.xml
+++ b/tellico.appdata.xml
@@ -272,26 +272,26 @@
       <li xml:lang="tr">MODS, Bibtex, RIS, CSV, PDF üst verisi ve pek çok diğer biçimi içe aktarır</li>
       <li xml:lang="uk">Імпортування метаданих MODS, Bibtex, RIS, CSV, PDF та даних у багатьох інших форматах.</li>
       <li xml:lang="x-test">xxImports MODS, Bibtex, RIS, CSV, PDF metadata, and many other formatsxx</li>
-      <li>Exports to Bibtex, ONIX, CSV, HTML, PilotDB, and other formats</li>
-      <li xml:lang="bs">Izvozi u Bibtex, ONIX, CSV, HTML, PilotDB, i druge formate</li>
-      <li xml:lang="ca">Exporta a Bibtex, ONIX, CSV, HTML, PilotDB i altres formats</li>
-      <li xml:lang="da">Eksporterer til Bibtex, ONIX, CSV, HTML, PilotDB og andre formater</li>
-      <li xml:lang="de">Export zu Bibtex, ONIX, CSV, HTML, PilotDB, und andere Formate</li>
-      <li xml:lang="en-GB">Exports to Bibtex, ONIX, CSV, HTML, PilotDB, and other formats</li>
-      <li xml:lang="es">Exporta a Bibtex, ONIX, CSV, HTML, PilotDB, y otros formatos</li>
-      <li xml:lang="et">Eksport Bibtexi, ONIX-i, CSV, HTML-i, PilotDB ja veel paljudesse vormingutesse</li>
-      <li xml:lang="fr">Exporte vers Bibtex, ONIX, CSV, HTML, PilotDB, et beaucoup d'autres formats</li>
-      <li xml:lang="ia">Il exporta a Bibtex, ONIX, CV, HTML, PilotDB, e altere formatos</li>
-      <li xml:lang="nl">Exporteert naar Bibtex, ONIX, CSV, HTML, PilotDB en andere formaten</li>
-      <li xml:lang="pl">Eksportowanie Bibtex, ONIX, CSV, HTML, PilotDB i innych formatów</li>
-      <li xml:lang="pt">Exporta para o Bibtex, ONIX, CSV, HTML, PilotDB, entre outros formatos</li>
-      <li xml:lang="pt-BR">Exporta para o Bibtex, ONIX, CSV, HTML, PilotDB, entre outros formatos</li>
-      <li xml:lang="sk">Exportuje do Bibtex, ONIX, CSV, HTML, PilotDB a iných formátov</li>
-      <li xml:lang="sl">Zna izvoziti v Bibtex, ONIX, CSV, HTML, PilotDB in druge vrste datotek</li>
-      <li xml:lang="sv">Exporterar till Bibtex, ONIX, CSV, HTML, PilotDB och andra format</li>
-      <li xml:lang="tr">Bibtex, ONIX, CSV, HTML, PilotDB ve pek çok diğer biçimi dışa aktarır</li>
-      <li xml:lang="uk">Експортування даних у форматах Bibtex, ONIX, CSV, HTML, PilotDB тощо.</li>
-      <li xml:lang="x-test">xxExports to Bibtex, ONIX, CSV, HTML, PilotDB, and other formatsxx</li>
+      <li>Exports to Bibtex, ONIX, CSV, HTML, and other formats</li>
+      <li xml:lang="bs">Izvozi u Bibtex, ONIX, CSV, HTML, i druge formate</li>
+      <li xml:lang="ca">Exporta a Bibtex, ONIX, CSV, HTML i altres formats</li>
+      <li xml:lang="da">Eksporterer til Bibtex, ONIX, CSV, HTML og andre formater</li>
+      <li xml:lang="de">Export zu Bibtex, ONIX, CSV, HTML, und andere Formate</li>
+      <li xml:lang="en-GB">Exports to Bibtex, ONIX, CSV, HTML, and other formats</li>
+      <li xml:lang="es">Exporta a Bibtex, ONIX, CSV, HTML, y otros formatos</li>
+      <li xml:lang="et">Eksport Bibtexi, ONIX-i, CSV, HTML-i ja veel paljudesse vormingutesse</li>
+      <li xml:lang="fr">Exporte vers Bibtex, ONIX, CSV, HTML, et beaucoup d'autres formats</li>
+      <li xml:lang="ia">Il exporta a Bibtex, ONIX, CV, HTML, e altere formatos</li>
+      <li xml:lang="nl">Exporteert naar Bibtex, ONIX, CSV, HTML en andere formaten</li>
+      <li xml:lang="pl">Eksportowanie Bibtex, ONIX, CSV, HTML i innych formatów</li>
+      <li xml:lang="pt">Exporta para o Bibtex, ONIX, CSV, HTML, entre outros formatos</li>
+      <li xml:lang="pt-BR">Exporta para o Bibtex, ONIX, CSV, HTML, entre outros formatos</li>
+      <li xml:lang="sk">Exportuje do Bibtex, ONIX, CSV, HTML a iných formátov</li>
+      <li xml:lang="sl">Zna izvoziti v Bibtex, ONIX, CSV, HTML in druge vrste datotek</li>
+      <li xml:lang="sv">Exporterar till Bibtex, ONIX, CSV, HTML och andra format</li>
+      <li xml:lang="tr">Bibtex, ONIX, CSV, HTML ve pek çok diğer biçimi dışa aktarır</li>
+      <li xml:lang="uk">Експортування даних у форматах Bibtex, ONIX, CSV, HTML тощо.</li>
+      <li xml:lang="x-test">xxExports to Bibtex, ONIX, CSV, HTML, and other formatsxx</li>
       <li>Imports information directly from Amazon.com, IMDb, z39.50 servers, PubMed, SRU servers, CrossRef.org, various other websites, and from external scripts</li>
       <li xml:lang="bs">Uvozi informacije direktno sa Amazon.com, IMDb, z39.50 servera, PubMed, SRU servera, CrossRef.org, različitih drugih web stranica, i iz vanjskih skripti</li>
       <li xml:lang="ca">Importa informació directament des d'Amazon.com, IMDb, servidors z39.50, PubMed, servidors SRU, CrossRef.org, altres llocs web, i des d'scripts externs</li>


More information about the kde-doc-english mailing list