summaryrefslogtreecommitdiffstats
path: root/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-file.h
diff options
context:
space:
mode:
Diffstat (limited to 'debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-file.h')
-rw-r--r--debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-file.h435
1 files changed, 435 insertions, 0 deletions
diff --git a/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-file.h b/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-file.h
new file mode 100644
index 00000000..530997de
--- /dev/null
+++ b/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-file.h
@@ -0,0 +1,435 @@
+/*
+ * $Id: pi-file.h,v 1.29 2006/10/17 13:24:07 desrod Exp $
+ *
+ * pi-file.h: Pilot File Interface Library
+ *
+ * This is free software, licensed under the GNU Library Public License V2.
+ * See the file COPYING.LIB for details.
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This library 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 Library
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** @file pi-file.h
+ * @brief Database file install, retrieve and management interface
+ *
+ * The pi-file layer is a convenience management library that provides for
+ * easy access, creation, install and retrieve of database files (PRC, PDB,
+ * PQA)
+ *
+ * Palm databases on the local machines can be created with pi_file_create()
+ * or opened read-only using pi_file_open(). Several functions are provided
+ * to access resources and records. Caller must make sure to use the
+ * appropriate functions, depending on the type of the database (i.e. only
+ * use the record read/write functions on data databases, only use the
+ * resource read/write functions on resource databases).
+ *
+ * A set of utility functions are provided to facilitate installing and
+ * retrieving databases on the devide. pi_file_install() will perform all
+ * the steps required to install a database on a device. pi_file_merge() can
+ * be used to update an existing database or add new records/resources to
+ * it. pi_file_retrieve() will read a database from the device.
+ */
+
+#ifndef _PILOT_FILE_H_
+#define _PILOT_FILE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pi-dlp.h" /* For DBInfo */
+
+/** @brief Structure describing a record or resource entry in a database file */
+typedef struct pi_file_entry {
+ int offset; /**< Offset in the on-disk file */
+ int size; /**< Size of the resource or record */
+ int resource_id; /**< For resources, resource ID */
+ int attrs; /**< Record attributes */
+ unsigned long type; /**< For resdources, resource type */
+ recordid_t uid; /**< For records, record unique ID */
+} pi_file_entry_t;
+
+typedef struct pi_file {
+ int err;
+ int for_writing; /**< Non-zero if the file was opened with pi_file_create() */
+ int app_info_size; /**< Size of the appInfo block */
+ int sort_info_size; /**< Size of the sortInfo block */
+ int next_record_list_id;
+ int resource_flag;
+ int ent_hdr_size; /**< Size of the header for each resource/record (depends on whether the file is a resource or record file) */
+ int num_entries; /**< Number of actual entries in the entries memory block */
+ int num_entries_allocated; /**< Number of entries allocated in the entries memory block */
+ int rbuf_size; /**< Size of the internal read buffer */
+ FILE *f; /**< Actual on-disk file */
+ pi_buffer_t *tmpbuf; /**< Temporary buffer for databases opened with pi_file_create() */
+ char *file_name; /**< Access path */
+ void *app_info; /**< Pointer to the appInfo block or NULL */
+ void *sort_info; /**< Pointer to the sortInfo block or NULL */
+ void *rbuf; /**< Read buffer, used internally */
+ unsigned long unique_id_seed; /**< Database file's unique ID seed as read from an existing file */
+ struct DBInfo info; /**< Database information and attributes */
+ struct pi_file_entry *entries; /**< Array of records / resources */
+} pi_file_t;
+
+/** @brief Transfer progress callback structure
+ *
+ * The progress callback structure is prepared by the client application and
+ * passed to pi_file_install(), pi_file_merge() and pi_file_retrieve()
+ * functions. It allows the client application to be notified during a file
+ * transfer (i.e. to update a progress indicator) and gives it a chance to
+ * cancel transfers.
+ */
+typedef struct {
+ int type; /**< Transfer type (see #piProgressType enum) */
+ int transferred_bytes; /**< Current transferred bytes */
+ void *userinfo; /**< Provided by and passed back to client (not used for now, will be in a future release) */
+ union {
+ struct {
+ pi_file_t *pf; /**< May be NULL */
+ struct DBSizeInfo size; /**< Size information */
+ int transferred_records;/**< Number of records or resources */
+ } db;
+
+ struct {
+ char *path; /**< VFS file path */
+ long total_bytes; /**< File size in bytes */
+ } vfs;
+ } data;
+} pi_progress_t;
+
+/** @brief Progress callback function definition
+ *
+ * Callback should return either #PI_TRANSFER_STOP or
+ * #PI_TRANSFER_CONTINUE
+ */
+typedef int (*progress_func)(int socket, pi_progress_t *progress);
+
+/** @brief Transfer progress types for the @a type member of pi_progress_t */
+enum piProgressType {
+ PI_PROGRESS_SEND_DB = 1, /**< Sending a database */
+ PI_PROGRESS_RECEIVE_DB, /**< Receiving a database */
+ PI_PROGRESS_SEND_VFS, /**< Sending a VFS file */
+ PI_PROGRESS_RECEIVE_VFS /**< Receiving a VFS file */
+};
+
+
+#define PI_TRANSFER_STOP 0 /**< Returned by progress callback to stop the transfer */
+#define PI_TRANSFER_CONTINUE 1 /**< Returned by progress callback to continue the transfer */
+
+/** @name Opening and closing files */
+/*@{*/
+ /** @brief Open a database for read-only access
+ *
+ * Don't dispose of the returned structure directly.
+ * Use pi_file_close() instead.
+ *
+ * @param name The access path to the database to open on the local machine
+ * @return An initialized pi_file_t structure or NULL.
+ */
+ extern pi_file_t *pi_file_open
+ PI_ARGS((const char *name));
+
+ /** @brief Create a new database file
+ *
+ * A new database file is created on the local machine.
+ *
+ * @param name Access path of the new file to create
+ * @param INPUT Characteristics of the database to create
+ * @return A new pi_file_t structure. Use pi_file_close() to write data and close file.
+ */
+ extern pi_file_t *pi_file_create
+ PI_ARGS((const char *name, const struct DBInfo *INPUT));
+
+ /** @brief Closes a local file
+ *
+ * If the file had been opened with pi_file_create, all
+ * modifications are written to disk before the file is closed
+ *
+ * @param pf The pi_file_t structure is being disposed of by this function
+ * @return An error code (see file pi-error.h)
+ */
+ extern int pi_file_close PI_ARGS((pi_file_t *pf));
+/*@}*/
+
+/** @name Reading from open files */
+/*@{*/
+ /** @brief Returns database specification
+ *
+ * @param pf An open file
+ * @return DBInfo structure describing the file
+ */
+ extern void pi_file_get_info
+ PI_ARGS((const pi_file_t *pf, struct DBInfo *OUTPUT));
+
+ /** @brief Returns the file's appInfo block
+ *
+ * The returned data is not a copy of the pi_file_t's appInfo
+ * structures. Don't dispose or modify it.
+ *
+ * @param pf An open file
+ * @param datap On return, ptr to appInfo data or NULL
+ * @param sizep On return, size of the appInfoBlock
+ */
+ extern void pi_file_get_app_info
+ PI_ARGS((pi_file_t *pf, void **datap, size_t *sizep));
+
+ /** @brief Returns the file's sortInfo block
+ *
+ * The returned data is not a copy of the pi_file_t's sortInfo
+ * block: do not dispose of it!
+ *
+ * @param pf An open file
+ * @param datap On return, ptr to sortInfo data or NULL
+ * @param sizep On return, size of the sortInfoBlock
+ */
+ extern void pi_file_get_sort_info
+ PI_ARGS((pi_file_t *pf, void **dadtap, size_t *sizep));
+
+ /** @brief Read a resource by index
+ *
+ * If it exists, the returned data points directly into the file
+ * structures. Don't dispose or modify it.
+ *
+ * @param pf An open file
+ * @param resindex The resource index
+ * @param bufp On return, pointer to the resource data block
+ * @param sizep If not NULL, size of the resource data
+ * @param restype If not NULL, resource type
+ * @param resid If not NULL, resource
+ * @return Negative error code on error
+ */
+ extern int pi_file_read_resource
+ PI_ARGS((pi_file_t *pf, int resindex, void **bufp, size_t *sizep,
+ unsigned long *restype, int *resid));
+
+ /** @brief Read a resource by type and ID
+ *
+ * If it exists, the returned data points directly into the file
+ * structures.
+ *
+ * @param pf An open file
+ * @param restype Resource type
+ * @param resid Resource ID
+ * @param bufp On return, pointer to the resource data or NULL
+ * @param sizep If not NULL, the size of the resource data
+ * @param resindex If not NULL, on return contains the resource index
+ * @return Negative error code on error
+ */
+ extern int pi_file_read_resource_by_type_id
+ PI_ARGS((pi_file_t *pf, unsigned long restype, int resid,
+ void **bufp, size_t *sizep, int *resindex));
+
+ /** @brief Checks whether a resource type/id exists in an open file
+ *
+ * @param pf An open file
+ * @param restype Resource type to check
+ * @param resid Resource ID to check
+ * @return Non-zero if a resource with same type and id exists
+ */
+ extern int pi_file_type_id_used
+ PI_ARGS((const pi_file_t *pf, unsigned long restype, int resid));
+
+ /** @brief Checks whether a record with the given UID exists
+ *
+ * @param pf An open file
+ * @param uid The record UID to look for
+ * @return Non-zero if a record with the same UID exists
+ */
+ extern int pi_file_id_used
+ PI_ARGS((const pi_file_t *pf, recordid_t uid));
+
+ /** @brief Read a record by index
+ *
+ * If it exists, the returned data points directly into the file
+ * structures. Don't dispose or modify it.
+ *
+ * @param pf An open file
+ * @param recindex Record index
+ * @param bufp On return, pointer to the resource data or NULL
+ * @param sizep If not NULL, the size of the resource data
+ * @param recattrs If not NULL, the record attributes
+ * @param category If not NULL, the record category
+ * @param recuid If not NULL, the record unique ID
+ * @return Negative error code on error
+ */
+ extern int pi_file_read_record
+ PI_ARGS((pi_file_t *pf, int recindex, void **bufp, size_t *sizep,
+ int *recattrs, int *category, recordid_t *recuid));
+
+ /** @brief Read a record by unique ID
+ *
+ * If it exists, the returned data points directly into the file
+ * structures. Don't dispose or modify it.
+ *
+ * @param pf An open file
+ * @param recuid The record unique ID
+ * @param bufp On return, pointer to the resource data or NULL
+ * @param sizep If not NULL, the size of the resource data
+ * @param recindex If not NULL, the record index
+ * @param recattrs If not NULL, the record attributes
+ * @param category If not NULL, the record category
+ * @return Negative error code on error
+ */
+ extern int pi_file_read_record_by_id
+ PI_ARGS((pi_file_t *pf, recordid_t recuid, void **bufp,
+ size_t *sizep, int *recindex, int *recattrs, int *category));
+
+#ifndef SWIG
+ extern void pi_file_get_entries
+ PI_ARGS((pi_file_t *pf, int *entries));
+#endif
+/*@}*/
+
+/** @name Modifying files open for write */
+/*@{*/
+ /* may call these any time before close (even multiple times) */
+ extern int pi_file_set_info
+ PI_ARGS((pi_file_t *pf, const struct DBInfo *infop));
+
+ /** @brief Set the database's appInfo block
+ *
+ * The file takes ownership of the passed data block
+ *
+ * @param pf A file open for write
+ * @param data Pointer to the data or NULL to clear the appInfo block
+ * @param size Size of the new data block
+ * @return Negative code on error
+ */
+ extern int pi_file_set_app_info
+ PI_ARGS((pi_file_t *pf, void *data, size_t size));
+
+ /** @brief Set the database's sortInfo block
+ *
+ * The file takes ownership of the passed data block
+ *
+ * @param pf A file open for write
+ * @param data Pointer to the data or NULL to clear the sortInfo block
+ * @param size Size of the new data block
+ * @return Negative code on error
+ */
+ extern int pi_file_set_sort_info
+ PI_ARGS((pi_file_t *pf, void *data, size_t size));
+
+ /** @brief Add a resource to a file open for write
+ *
+ * The file takes ownership of the passed data block
+ * Function will return PI_ERR_FILE_ALREADY_EXISTS if resource with
+ * same type/id already exists
+ *
+ * @param pf A file open for write
+ * @param data The resource data
+ * @param size The resource size
+ * @param restype Resource type
+ * @param resid Resource ID
+ * @return Negative code on error.
+ */
+ extern int pi_file_append_resource
+ PI_ARGS((pi_file_t *pf, void *data, size_t size,
+ unsigned long restype, int resid));
+
+ /** @brief Add a record to a file open for write
+ *
+ * The file takes ownership of the passed data block Function will
+ * return PI_ERR_FILE_ALREADY_EXISTS if record with same unique ID
+ * already exists in the database
+ *
+ * @param pf A file open for write
+ * @param data The resource data
+ * @param size The resource size
+ * @param recattrs Record attributes
+ * @param category Record category
+ * @param recuid Record unique ID (pass 0 to have recuid automatically allocated)
+ * @return Negative code on error.
+ */
+ extern int pi_file_append_record
+ PI_ARGS((pi_file_t *pf, void *buf, size_t size, int recattrs,
+ int category, recordid_t recuid));
+/*@}*/
+
+/** @name File transfer utilities */
+/*@{*/
+ /** @brief Retrieve a file from the handheld
+ *
+ * You must first create the local file using pi_file_create()
+ *
+ * @param pf A file open for write
+ * @param socket Socket to the connected handheld
+ * @param cardno Card number the file resides on (usually 0)
+ * @param report_progress Progress function callback or NULL (see #pi_progress_t structure)
+ * @return Negative code on error
+ */
+ extern int pi_file_retrieve
+ PI_ARGS((pi_file_t *pf, int socket, int cardno,
+ progress_func report_progress));
+
+ /** @brief Install a new file on the handheld
+ *
+ * You must first open the local file with pi_file_open()
+ *
+ * @param pf An open file
+ * @param socket Socket to the connected handheld
+ * @param cardno Card number to install to (usually 0)
+ * @param report_progress Progress function callback or NULL (see #pi_progress_t structure)
+ * @return Negative code on error
+ */
+ extern int pi_file_install
+ PI_ARGS((pi_file_t *pf, int socket, int cardno,
+ progress_func report_progress));
+
+ /** @brief Install a new file on the handheld or merge with an existing file
+ *
+ * The difference between this function and pi_file_install() is
+ * that if the file already exists on the handheld, pi_file_merge()
+ * will append data to the existing file. For resource files, all
+ * resources from the local file are sent to the handheld. If
+ * resources with the same type/ID exist in the handheld file, they
+ * are replaced with the new one.
+ *
+ * You must first open the local file with pi_file_open()
+ *
+ * @param pf An open file
+ * @param socket Socket to the connected handheld
+ * @param cardno Card number to install to (usually 0)
+ * @param report_progress Progress function callback or NULL (see #pi_progress_t structure)
+ * @return Negative code on error
+ */
+ extern int pi_file_merge
+ PI_ARGS((pi_file_t *pf, int socket, int cardno,
+ progress_func report_progress));
+/*@}*/
+
+/** @name Time utilities */
+/*@{*/
+ /** @brief Convert Unix time to Palm OS time
+ *
+ * @param t Unix time value
+ * @return Time value with Palm OS timebase
+ */
+ extern unsigned long unix_time_to_pilot_time
+ PI_ARGS((time_t t));
+
+ /** @brief Convert Palm OS time to Unix time
+ *
+ * @param raw_time Time value expressed in Palm OS timebase (seconds from 01-JAN-1904, 00:00)
+ * @return Unix time
+ */
+ extern time_t pilot_time_to_unix_time
+ PI_ARGS((unsigned long raw_time));
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif