You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
6.1 KiB
182 lines
6.1 KiB
15 years ago
|
/*
|
||
|
* palm-db-tools: General interface to a PalmOS database.
|
||
|
* Copyright (C) 2000 by Tom Dyas (tdyas@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 unsigned 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
|