diff options
Diffstat (limited to 'debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-dlp.h')
-rw-r--r-- | debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-dlp.h | 1856 |
1 files changed, 1856 insertions, 0 deletions
diff --git a/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-dlp.h b/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-dlp.h new file mode 100644 index 00000000..dfa516fe --- /dev/null +++ b/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-dlp.h @@ -0,0 +1,1856 @@ +/* + * $Id: pi-dlp.h,v 1.76 2006/10/17 13:24:06 desrod Exp $ + * + * pi-dlp.h: Desktop Link Protocol implementation (ala SLP) + * + * 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-dlp.h + * @brief Direct protocol interface to the device using the HotSync protocol. + * + * The DLP layer is the lowest interface layer applications can use to + * access a handheld. It provides equivalents to Palm Conduit Development + * Kit (CDK)'s SyncXXX functions, as well as a number of convenience + * functions that are not found in the CDK. + * + * Once you have a socket number and a device is connected, you can start + * using DLP calls to talk with the device. All DLP calls are @b + * synchronous: they are immediately sent to the device and the current + * thread is blocked until either a response is received, or an error + * occurs. + * + * It is a good pratice to always check errors returned by DLP calls. + * Usually, if the value is nagative, it is an error code. If the error is + * #PI_ERR_DLP_PALMOS, an error code was returned by the device itself: you + * can get this error code by calling pi_palmos_error() on the current + * socket. Besides all the Palm OS error code defined in Palm's + * documentation, there are a few values between #dlpErrNoError and + * #dlpErrUnknown which are error returned by the DLP layer itself on the + * device. + * + * The DLP protocol is the low level protocol that HotSync uses. Over the + * years, there have been several iterations of DLP. Pre-Palm OS 5 devices + * have DLP 1.2 or lower. Palm OS 5 devices have DLP 1.3 or 1.4 (Palm OS 5.2 + * and up). Cobalt (Palm OS 6) uses DLP 2.1. + * + * Devices with DLP 1.4 and later are known to support transfers of large + * records and resources (of size bigger than 64k). This is the case of the + * Tapwave Zodiac, for example. + * + * Note that some devices report an incorrect version of DLP. Some Palm OS 5 + * devices report using DLP 1.2 whereas they really support DLP 1.3. + * + * Depending on which devices you plan on being compatible with, you should adjust + * #PI_DLP_VERSION_MAJOR and #PI_DLP_VERSION_MINOR. If you want to support + * devices up to and including Palm OS 5, setting your DLP version to 1.4 is + * a good idea. If you want to be able to connect to Palm OS 6, you need to + * set your DLP version to 2.1. + */ + +#ifndef _PILOT_DLP_H_ +#define _PILOT_DLP_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <unistd.h> + +#include "pi-macros.h" /* For recordid_t */ +#include "pi-buffer.h" /* For pi_buffer_t */ +#include "pi-error.h" /* For PI_ERR */ + +/* version of the DLP protocol supported in this version */ +/* Hint for existing versions: + * 1.2: Palm OS 4 / Palm OS 5 (OS 5 should be 1.3 but incorrectly reports 1.2) + * 1.4: TapWave Palm OS 5 + * 2.1: Palm OS 6 + */ +#define PI_DLP_VERSION_MAJOR 1 /**< Major DLP protocol version we report to the device. */ +#define PI_DLP_VERSION_MINOR 4 /**< Minor DLP protocol version we report to the device. */ + +#ifndef SWIG + #define DLP_BUF_SIZE 0xffff /**< Kept for compatibility, applications should avoid using this value. */ +#endif /* !SWIG */ + +/** @name Internal definitions used to assemble DLP calls */ +/*@{*/ +#ifndef SWIG + #define PI_DLP_OFFSET_CMD 0 + #define PI_DLP_OFFSET_ARGC 1 + #define PI_DLP_OFFSET_ARGV 2 + + #define PI_DLP_ARG_TINY_LEN 0x000000FFL + #define PI_DLP_ARG_SHORT_LEN 0x0000FFFFL + #define PI_DLP_ARG_LONG_LEN 0xFFFFFFFFL + + #define PI_DLP_ARG_FLAG_TINY 0x00 + #define PI_DLP_ARG_FLAG_SHORT 0x80 + #define PI_DLP_ARG_FLAG_LONG 0x40 + #define PI_DLP_ARG_FLAG_MASK 0xC0 + + #define PI_DLP_ARG_FIRST_ID 0x20 +#endif /* !SWIG */ +/*@}*/ + +/** @name VFS definitions */ +/*@{*/ +#define vfsMountFlagsUseThisFileSystem 0x01 /**< Mount/Format the volume with the filesystem specified */ +#define vfsMAXFILENAME 256 /**< The maximum size of a filename in a VFS volume */ +#define vfsInvalidVolRef 0 /**< constant for an invalid volume reference, guaranteed not to represent a valid one. Use it like you would use NULL for a FILE*. */ +#define vfsInvalidFileRef 0L /**< constant for an invalid file reference, guaranteed not to represent a valid one. Use it like you would use NULL for a FILE*. */ +/*@}*/ + +typedef unsigned long FileRef; /**< Type for file references when working with VFS files and directories. */ + +/** @brief Information retrieved by dlp_VFSDirEntryEnumerate() */ +struct VFSDirInfo { + unsigned long attr; /**< File or directory attributes (see VSF File attribute definitions) */ + char name[vfsMAXFILENAME]; /**< File or directory name */ +}; + +/** @brief Information used to format a volume with dlp_VFSVolumeFormat() */ +struct VFSAnyMountParam { + unsigned short volRefNum; + unsigned short reserved; + unsigned long mountClass; +}; + +/** @brief Information used to format a volume with dlp_VFSVolumeFormat() */ +struct VFSSlotMountParam { + struct VFSAnyMountParam vfsMountParam; + unsigned short slotLibRefNum; + unsigned short slotRefNum; +}; + +/** @brief Information about a VFS volume, returned by dlp_VFSVolumeInfo() */ +struct VFSInfo { + /* 0: read-only etc. */ + unsigned long attributes; /**< Volume attributes (see #dlpVFSVolumeAttributes enum) */ + + /* 4: Filesystem type for this volume (defined below). + These you can expect to see in devices: + 'vfat' (FAT12/FAT16 with long name support) + + Other values observed: + 'twmf' (Tapwave Zodiac internal VFS) + + PalmSource defines these, but don't bet on device support: + 'afsu' (Andrew network filesystem) + 'ext2' (Linux ext2 filesystem) + 'fats' (FAT12/FAT16 with 8.3 names) + 'ffsb' (BSD block-based filesystem) + 'hfse' (Macintosh HFS+) + 'hfss' (Macintosh HFS, pre-8.x) + 'hpfs' (OS/2 High Performance Filesystem) + 'mfso' (Original Macintosh filesystem) + 'nfsu' (NFS mount) + 'novl' (Novell filesystem) + 'ntfs' (Windows NT filesystem) + */ + unsigned long fsType; /**< File system time (four-char code, see above) */ + + /* 8: Creator code of filesystem driver for this volume. */ + unsigned long fsCreator; /**< File system creator (four-char code) */ + + /* For slot based filesystems: (mountClass = VFSMountClass_SlotDriver) + 12: mount class that mounted this volume */ + unsigned long mountClass; /**< Mount class */ + + /* 16: Library on which the volume is mounted */ + int slotLibRefNum; /**< Slot library reference number */ + + /* 18: ExpMgr slot number of card containing volume */ + int slotRefNum; /**< Expansion manager slot number */ + + /* 20: Type of card media (mediaMemoryStick, mediaCompactFlash, etc.) + These you can expect to see in devices: + 'cfsh' (CompactFlash) + 'mmcd' (MultiMedia Card) + 'mstk' (Memory Stick) + 'sdig' (SD card) + + Other values observed: + 'TFFS' (palmOne Tungsten T5 internal VFS) + 'twMF' (Tapwave Zodiac internal VFS) + + PalmSource also defines these: + 'pose' (Host filesystem emulated by POSE) + 'PSim' (Host filesystem emulated by Mac Simulator) + 'ramd' (RAM disk) + 'smed' (SmartMedia) + */ + unsigned long mediaType; /**< Media type (see above) */ + + /* 24: reserved for future use (other mountclasses may need more space) */ + unsigned long reserved; /**< Reserved, set to 0 */ +}; + +/** @brief Information about the handheld user + * + * This structure is used in dlp_ReadUserInfo() and dlp_WriteUserInfo() + */ +struct PilotUser { + size_t passwordLength; + char username[128]; + char password[128]; + unsigned long userID; + unsigned long viewerID; + unsigned long lastSyncPC; + time_t successfulSyncDate; + time_t lastSyncDate; +}; + +/** @brief Device information. + * + * This structure is filled by dlp_ReadSysInfo() + */ +struct SysInfo { + unsigned long romVersion; /**< Version of the device ROM, of the form 0xMMmmffssbb where MM=Major, mm=minor, ff=fix, ss=stage, bb=build */ + unsigned long locale; /**< Locale for this device */ + unsigned char prodIDLength; /**< Length of the prodID string */ + char prodID[128]; /**< Product ID */ + unsigned short dlpMajorVersion; /**< Major version of the DLP protocol on this device */ + unsigned short dlpMinorVersion; /**< Minor version of the DLP protocol on this device */ + unsigned short compatMajorVersion; /**< Minimum major version of DLP this device is compatible with */ + unsigned short compatMinorVersion; /**< Minimum minor version of DLP this device is compatible with */ + unsigned long maxRecSize; /**< Maximum record size. Usually <=0xFFFF or ==0 for older devices (means records are limited to 64k), can be much larger for devices with DLP >= 1.4 (i.e. 0x00FFFFFE) */ +}; + +/** @brief Database information. + * + * A database information block is returned by dlp_ReadDBList(), dlp_FindDBInfo(), dlp_FindDBByName(), dlp_FindDBByOpenHandle() + * and dlp_FindDBByTypeCreator(). + */ +struct DBInfo { + int more; /**< When reading database list using dlp_ReadDBList(), this flag is set if there are more databases to come */ + char name[34]; /**< Database name, 32 characters max. */ + unsigned int flags; /**< Database flags (@see dlpDBFlags enum) */ + unsigned int miscFlags; /**< Additional database flags filled by pilot-link (@see dlpDBMiscFlags enum) */ + unsigned int version; /**< Database version number */ + unsigned long type; /**< Database type (four-char code, i.e. 'appl') */ + unsigned long creator; /**< Database creator (four-char code, i.e. 'DATA') */ + unsigned long modnum; /**< Modification count */ + unsigned int index; /**< Database index in database list */ + time_t createDate; /**< Database creation date (using the machine's local time zone) */ + time_t modifyDate; /**< Last time this database was modified (using the machine's local time zone). If the database was never modified, this field is set to 0x83DAC000 (Fri Jan 1 00:00:00 1904 GMT) */ + time_t backupDate; /**< Last time this database was backed up using HotSync. If the database was never backed up, this field is set to 0x83DAC000 (Fri Jan 1 00:00:00 1904 GMT) */ +}; + +/** @brief Size information for a database. + * + * Returned by dlp_FindDBByName(), dlp_FindDBByOpenHandle() and dlp_FindDBByTypeCreator(). + */ +struct DBSizeInfo { + unsigned long numRecords; /**< Number of records or resources */ + unsigned long totalBytes; /**< Total number of bytes occupied by the database, including header and records list */ + unsigned long dataBytes; /**< Total number of data bytes contained in the database's records or resources */ + unsigned long appBlockSize; /**< Size of the appInfo block */ + unsigned long sortBlockSize; /**< Size of the sortInfo block */ + unsigned long maxRecSize; /**< note: this field is always set to 0 on return from dlp_FindDBxxx */ +}; + +/** @brief Information about a memory card. + * + * This structure describes a device's internal storage only, not removable media. + * It is returned by dlp_ReadStorageInfo(). + */ +struct CardInfo { + int card; /**< Memory card index (most devices only have one). */ + int version; /**< Version of the card */ + int more; /**< Set if there is another card after this one */ + time_t creation; /**< Creation date (using the computer's local time zone) */ + unsigned long romSize; /**< Size of the ROM block on this card (in bytes) */ + unsigned long ramSize; /**< Size of the RAM block on this card (in bytes) */ + unsigned long ramFree; /**< Total free RAM bytes */ + char name[128]; /**< Card name */ + char manufacturer[128]; /**< Card manufacturer name */ +}; + +/** @brief Network HotSync information. + * + * Returned by dlp_ReadNetSyncInfo(). Gives the network location of a remote handheld. + */ +struct NetSyncInfo { + int lanSync; /**< Non-zero if LanSync is turned on on the device */ + char hostName[256]; /**< Device hostname if any. Null terminated string. */ + char hostAddress[40]; /**< Device host address. Null terminated string. */ + char hostSubnetMask[40]; /**< Device subnet mask. Null terminated string */ +}; + +#ifndef SWIG /* no need to clutter the bindings with this */ +enum dlpFunctions { + /* range reserved for internal use */ + dlpReservedFunc = 0x0F, + + /* DLP 1.0 FUNCTIONS START HERE (PalmOS v1.0) */ + dlpFuncReadUserInfo, /* 0x10 */ + dlpFuncWriteUserInfo, /* 0x11 */ + dlpFuncReadSysInfo, /* 0x12 */ + dlpFuncGetSysDateTime, /* 0x13 */ + dlpFuncSetSysDateTime, /* 0x14 */ + dlpFuncReadStorageInfo, /* 0x15 */ + dlpFuncReadDBList, /* 0x16 */ + dlpFuncOpenDB, /* 0x17 */ + dlpFuncCreateDB, /* 0x18 */ + dlpFuncCloseDB, /* 0x19 */ + dlpFuncDeleteDB, /* 0x1a */ + dlpFuncReadAppBlock, /* 0x1b */ + dlpFuncWriteAppBlock, /* 0x1c */ + dlpFuncReadSortBlock, /* 0x1d */ + dlpFuncWriteSortBlock, /* 0x1e */ + dlpFuncReadNextModifiedRec, /* 0x1f */ + dlpFuncReadRecord, /* 0x20 */ + dlpFuncWriteRecord, /* 0x21 */ + dlpFuncDeleteRecord, /* 0x22 */ + dlpFuncReadResource, /* 0x23 */ + dlpFuncWriteResource, /* 0x24 */ + dlpFuncDeleteResource, /* 0x25 */ + dlpFuncCleanUpDatabase, /* 0x26 */ + dlpFuncResetSyncFlags, /* 0x27 */ + dlpFuncCallApplication, /* 0x28 */ + dlpFuncResetSystem, /* 0x29 */ + dlpFuncAddSyncLogEntry, /* 0x2a */ + dlpFuncReadOpenDBInfo, /* 0x2b */ + dlpFuncMoveCategory, /* 0x2c */ + dlpProcessRPC, /* 0x2d */ + dlpFuncOpenConduit, /* 0x2e */ + dlpFuncEndOfSync, /* 0x2f */ + dlpFuncResetRecordIndex, /* 0x30 */ + dlpFuncReadRecordIDList, /* 0x31 */ + + /* DLP 1.1 FUNCTIONS ADDED HERE (PalmOS v2.0 Personal, and Professional) */ + dlpFuncReadNextRecInCategory, /* 0x32 */ + dlpFuncReadNextModifiedRecInCategory, /* 0x33 */ + dlpFuncReadAppPreference, /* 0x34 */ + dlpFuncWriteAppPreference, /* 0x35 */ + dlpFuncReadNetSyncInfo, /* 0x36 */ + dlpFuncWriteNetSyncInfo, /* 0x37 */ + dlpFuncReadFeature, /* 0x38 */ + + /* DLP 1.2 FUNCTIONS ADDED HERE (PalmOS v3.0) */ + dlpFuncFindDB, /* 0x39 */ + dlpFuncSetDBInfo, /* 0x3a */ + + /* DLP 1.3 FUNCTIONS ADDED HERE (PalmOS v4.0) */ + dlpLoopBackTest, /* 0x3b */ + dlpFuncExpSlotEnumerate, /* 0x3c */ + dlpFuncExpCardPresent, /* 0x3d */ + dlpFuncExpCardInfo, /* 0x3e */ + dlpFuncVFSCustomControl, /* 0x3f */ + dlpFuncVFSGetDefaultDir, /* 0x40 */ + dlpFuncVFSImportDatabaseFromFile, /* 0x41 */ + dlpFuncVFSExportDatabaseToFile, /* 0x42 */ + dlpFuncVFSFileCreate, /* 0x43 */ + dlpFuncVFSFileOpen, /* 0x44 */ + dlpFuncVFSFileClose, /* 0x45 */ + dlpFuncVFSFileWrite, /* 0x46 */ + dlpFuncVFSFileRead, /* 0x47 */ + dlpFuncVFSFileDelete, /* 0x48 */ + dlpFuncVFSFileRename, /* 0x49 */ + dlpFuncVFSFileEOF, /* 0x4a */ + dlpFuncVFSFileTell, /* 0x4b */ + dlpFuncVFSFileGetAttributes, /* 0x4c */ + dlpFuncVFSFileSetAttributes, /* 0x4d */ + dlpFuncVFSFileGetDate, /* 0x4e */ + dlpFuncVFSFileSetDate, /* 0x4f */ + dlpFuncVFSDirCreate, /* 0x50 */ + dlpFuncVFSDirEntryEnumerate, /* 0x51 */ + dlpFuncVFSGetFile, /* 0x52 */ + dlpFuncVFSPutFile, /* 0x53 */ + dlpFuncVFSVolumeFormat, /* 0x54 */ + dlpFuncVFSVolumeEnumerate, /* 0x55 */ + dlpFuncVFSVolumeInfo, /* 0x56 */ + dlpFuncVFSVolumeGetLabel, /* 0x57 */ + dlpFuncVFSVolumeSetLabel, /* 0x58 */ + dlpFuncVFSVolumeSize, /* 0x59 */ + dlpFuncVFSFileSeek, /* 0x5a */ + dlpFuncVFSFileResize, /* 0x5b */ + dlpFuncVFSFileSize, /* 0x5c */ + + /* DLP 1.4 functions added here (Palm OS 5.2+, ie Tapwave Zodiac) */ + dlpFuncExpSlotMediaType, /* 0x5d */ + dlpFuncWriteRecordEx, /* 0x5e - function to write >64k records in Tapwave */ + dlpFuncWriteResourceEx, /* 0x5f - function to write >64k resources in Tapwave */ + dlpFuncReadRecordEx, /* 0x60 - function to read >64k records by index in Tapwave */ + dlpFuncUnknown1, /* 0x61 (may be bogus definition in tapwave headers, is listed as dlpFuncReadRecordStream)*/ + dlpFuncUnknown3, /* 0x62 */ + dlpFuncUnknown4, /* 0x63 */ + dlpFuncReadResourceEx, /* 0x64 - function to read resources >64k by index in Tapwave */ + dlpLastFunc +}; + +#endif /* !SWIG */ + +/** @name Database and record attributes */ +/*@{*/ + /** @brief Database flags in DBInfo structure and also for dlp_CreateDB() */ + enum dlpDBFlags { + dlpDBFlagResource = 0x0001, /**< Resource database */ + dlpDBFlagReadOnly = 0x0002, /**< Database is read only */ + dlpDBFlagAppInfoDirty = 0x0004, /**< AppInfo data has been modified */ + dlpDBFlagBackup = 0x0008, /**< Database should be backed up during HotSync */ + dlpDBFlagHidden = 0x0100, /**< Database is hidden */ + dlpDBFlagLaunchable = 0x0200, /**< Database is launchable data (show in Launcher, launch app by Creator) */ + dlpDBFlagRecyclable = 0x0400, /**< Database will be deleted shortly */ + dlpDBFlagBundle = 0x0800, /**< Database is bundled with others having same creator (i.e. for Beam) */ + dlpDBFlagOpen = 0x8000, /**< Database is currently open */ + + /* v2.0 specific */ + dlpDBFlagNewer = 0x0010, /**< Newer version may be installed over open DB (Palm OS 2.0 and later) */ + dlpDBFlagReset = 0x0020, /**< Reset after installation (Palm OS 2.0 and later) */ + + /* v3.0 specific */ + dlpDBFlagCopyPrevention = 0x0040, /**< Database should not be beamed or sent (Palm OS 3.0 and later) */ + dlpDBFlagStream = 0x0080, /**< Database is a file stream (Palm OS 3.0 and later) */ + + /* OS 6+ */ + dlpDBFlagSchema = 0x1000, /**< Schema database (Palm OS 6.0 and later) */ + dlpDBFlagSecure = 0x2000, /**< Secure database (Palm OS 6.0 and later) */ + dlpDBFlagExtended = dlpDBFlagSecure, /**< Set if Schema not set and DB is Extended (Palm OS 6.0 and later) */ + dlpDBFlagFixedUp = 0x4000 /**< Temp flag used to clear DB on write (Palm OS 6.0 and later) */ + }; + + /** @brief Misc. flags in DBInfo structure */ + enum dlpDBMiscFlags { + dlpDBMiscFlagExcludeFromSync = 0x80, /**< DLP 1.1 and later: exclude this database from sync */ + dlpDBMiscFlagRamBased = 0x40 /**< DLP 1.2 and later: this database is in RAM */ + }; + + /** @brief Database record attributes */ + enum dlpRecAttributes { + dlpRecAttrDeleted = 0x80, /**< Tagged for deletion during next sync */ + dlpRecAttrDirty = 0x40, /**< Record modified */ + dlpRecAttrBusy = 0x20, /**< Record locked (in use) */ + dlpRecAttrSecret = 0x10, /**< Record is secret */ + dlpRecAttrArchived = 0x08 /**< Tagged for archival during next sync */ + }; + + /** @brief Mode flags used in dlp_OpenDB() */ + enum dlpOpenFlags { + dlpOpenRead = 0x80, /**< Open database for reading */ + dlpOpenWrite = 0x40, /**< Open database for writing */ + dlpOpenExclusive = 0x20, /**< Open database with exclusive access */ + dlpOpenSecret = 0x10, /**< Show secret records */ + dlpOpenReadWrite = 0xC0 /**< Open database for reading and writing (equivalent to (#dlpOpenRead | #dlpOpenWrite)) */ + }; + + /** @brief Flags passed to dlp_ReadDBList() */ + enum dlpDBList { + dlpDBListRAM = 0x80, /**< List RAM databases */ + dlpDBListROM = 0x40, /**< List ROM databases */ + dlpDBListMultiple = 0x20 /**< DLP 1.2 and above: list as many databases as possible at once */ + }; + + enum dlpFindDBOptFlags { + dlpFindDBOptFlagGetAttributes = 0x80, + dlpFindDBOptFlagGetSize = 0x40, + dlpFindDBOptFlagMaxRecSize = 0x20 + }; + + enum dlpFindDBSrchFlags { + dlpFindDBSrchFlagNewSearch = 0x80, + dlpFindDBSrchFlagOnlyLatest = 0x40 + }; + +/*@}*/ + +/** @brief End status values for dlp_EndOfSync() */ +enum dlpEndStatus { + dlpEndCodeNormal = 0, /**< Normal termination */ + dlpEndCodeOutOfMemory, /**< End due to low memory on device */ + dlpEndCodeUserCan, /**< Cancelled by user */ + dlpEndCodeOther /**< dlpEndCodeOther and higher == "Anything else" */ +}; + +/** @name Expansion manager and VFS manager constants */ +/*@{*/ + /** @brief Expansion card capabilities, as returned by dlp_ExpCardInfo() */ + enum dlpExpCardCapabilities { + dlpExpCapabilityHasStorage = 0x00000001, /**< Card supports reading (and maybe writing) */ + dlpExpCapabilityReadOnly = 0x00000002, /**< Card is read-only */ + dlpExpCapabilitySerial = 0x00000004 /**< Card supports dumb serial interface */ + }; + + /** @brief VFS volume attributes as found in the @a attributes member of a VFSInfo structure */ + enum dlpVFSVolumeAttributes { + vfsVolAttrSlotBased = 0x00000001, /**< Volume is inserted is an expansion slot */ + vfsVolAttrReadOnly = 0x00000002, /**< Volume is read-only */ + vfsVolAttrHidden = 0x00000004 /**< Volume is hidden */ + }; + + /** @brief Constants for dlp_VFSFileSeek() */ + enum dlpVFSSeekConstants { + vfsOriginBeginning = 0, /**< From the beginning (first data byte of file) */ + vfsOriginCurrent = 1, /**< from the current position */ + vfsOriginEnd = 2 /**< From the end of file (one position beyond last data byte, only negative offsets are legally allowed) */ + }; + + /** @brief Flags for dlp_VFSFileOpen() */ + enum dlpVFSOpenFlags { + dlpVFSOpenExclusive = 0x01, /**< For dlp_VFSFileOpen(). Exclusive access */ + dlpVFSOpenRead = 0x02, /**< For dlp_VFSFileOpen(). Read only */ + dlpVFSOpenWrite = 0x05, /**< For dlp_VFSFileOpen(). Write only. Implies exclusive */ + dlpVFSOpenReadWrite = 0x07, /**< For dlp_VFSFileOpen(). Read | write */ + + /* Remainder are aliases and special cases not for VFSFileOpen */ + vfsModeExclusive = dlpVFSOpenExclusive, /**< Alias to #dlpVFSOpenExclusive */ + vfsModeRead = dlpVFSOpenRead, /**< Alias to #dlpVFSOpenRead */ + vfsModeWrite = dlpVFSOpenWrite, /**< Alias to #dlpVFSOpenWrite */ + vfsModeReadWrite = vfsModeRead | vfsModeWrite, /**< Alias to #dlpVFSOpenReadWrite */ + vfsModeCreate = 0x08 /**< Not for dlp_VFSFileOpen(). Create file if it doesn't exist. */, + vfsModeTruncate = 0x10 /**< Not for dlp_VFSFileOpen(). Truncate to 0 bytes on open. */, + vfsModeLeaveOpen = 0x20 /**< Not for dlp_VFSFileOpen(). Leave file open even if foreground task closes. */ + } ; + + /** @brief VFS file attribute constants */ + enum dlpVFSFileAttributeConstants { + vfsFileAttrReadOnly = 0x00000001, /**< File is read only */ + vfsFileAttrHidden = 0x00000002, /**< File is hidden */ + vfsFileAttrSystem = 0x00000004, /**< File is a system file */ + vfsFileAttrVolumeLabel = 0x00000008, /**< File is the volume label */ + vfsFileAttrDirectory = 0x00000010, /**< File is a directory */ + vfsFileAttrArchive = 0x00000020, /**< File is archived */ + vfsFileAttrLink = 0x00000040 /**< File is a link to another file */ + }; + + /** @brief Constants for dlp_VFSFileGetDate() and dlp_VFSFileSetDate() */ + enum dlpVFSDateConstants { + vfsFileDateCreated = 1, /**< The date the file was created. */ + vfsFileDateModified = 2, /**< The date the file was last modified. */ + vfsFileDateAccessed = 3 /**< The date the file was last accessed. */ + }; + + /** @brief VFS file iterator constants */ + enum dlpVFSFileIteratorConstants { + vfsIteratorStart = 0, /** < Indicates that iterator is beginning */ + vfsIteratorStop = -1 /**< Indicate that iterator has gone through all items */ + }; +/*@}*/ + + +/** @brief Error codes returned by DLP transactions + * + * After a DLP transaction, there may be a DLP or Palm OS error + * if the result code is #PI_ERR_DLP_PALMOS. In this case, use + * pi_palmos_error() to obtain the error code. It can be in the + * DLP error range (0 > error < #dlpErrLastError), or otherwise + * in the Palm OS error range (see Palm OS header files for + * definitions, in relation with each DLP call) + */ +enum dlpErrors { + dlpErrNoError = 0, /**< No error */ + dlpErrSystem, /**< System error (0x0001) */ + dlpErrIllegalReq, /**< Illegal request, not supported by this version of DLP (0x0002) */ + dlpErrMemory, /**< Not enough memory (0x0003) */ + dlpErrParam, /**< Invalid parameter (0x0004) */ + dlpErrNotFound, /**< File, database or record not found (0x0005) */ + dlpErrNoneOpen, /**< No file opened (0x0006) */ + dlpErrAlreadyOpen, /**< File already open (0x0007) */ + dlpErrTooManyOpen, /**< Too many open files (0x0008) */ + dlpErrExists, /**< File already exists (0x0009) */ + dlpErrOpen, /**< Can't open file (0x000a) */ + dlpErrDeleted, /**< File deleted (0x000b) */ + dlpErrBusy, /**< Record busy (0x000c) */ + dlpErrNotSupp, /**< Call not supported (0x000d) */ + dlpErrUnused1, /**< @e Unused (0x000e) */ + dlpErrReadOnly, /**< File is read-only (0x000f) */ + dlpErrSpace, /**< Not enough space left on device (0x0010) */ + dlpErrLimit, /**< Limit reached (0x0011) */ + dlpErrSync, /**< Sync error (0x0012) */ + dlpErrWrapper, /**< Wrapper error (0x0013) */ + dlpErrArgument, /**< Invalid argument (0x0014) */ + dlpErrSize, /**< Invalid size (0x0015) */ + + dlpErrUnknown = 127 /**< Unknown error (0x007F) */ +}; + + +#ifndef SWIG /* no need to clutter the bindings with this */ + +/** @brief Internal DLP argument structure */ +struct dlpArg { + int id_; /**< Argument ID (start at #PI_DLP_ARG_FIRST_ID) */ + size_t len; /**< Argument length */ + char *data; /**< Argument data */ +}; + +/** @brief Internal DLP command request structure */ +struct dlpRequest { + enum dlpFunctions cmd; /**< Command ID */ + int argc; /**< Number of arguments */ + struct dlpArg **argv; /**< Ptr to arguments */ +}; + +/** @brief Internal DLP command response structure */ +struct dlpResponse { + enum dlpFunctions cmd; /**< Command ID as returned by device. If not the same than requested command, this is an error */ + enum dlpErrors err; /**< DLP error (see #dlpErrors enum) */ + int argc; /**< Number of response arguments */ + struct dlpArg **argv; /**< Response arguments */ +}; + +#endif /* !SWIG */ + +/* @name Functions used internally by dlp.c */ +/*@{*/ +#ifndef SWIG /* don't export these functions to bindings */ + extern struct dlpArg * dlp_arg_new PI_ARGS((int id_, size_t len)); + extern void dlp_arg_free PI_ARGS((struct dlpArg *arg)); + extern int dlp_arg_len PI_ARGS((int argc, struct dlpArg **argv)); + + extern struct dlpRequest *dlp_request_new + PI_ARGS((enum dlpFunctions cmd, int argc, ...)); + extern struct dlpRequest * dlp_request_new_with_argid + PI_ARGS((enum dlpFunctions cmd, int argid, int argc, ...)); + extern void dlp_request_free PI_ARGS((struct dlpRequest *req)); + + extern struct dlpResponse *dlp_response_new + PI_ARGS((enum dlpFunctions cmd, int argc)); + extern ssize_t dlp_response_read PI_ARGS((struct dlpResponse **res, + int sd)); + extern ssize_t dlp_request_write PI_ARGS((struct dlpRequest *req, + int sd)); + extern void dlp_response_free PI_ARGS((struct dlpResponse *req)); + + extern int dlp_exec PI_ARGS((int sd, struct dlpRequest *req, + struct dlpResponse **res)); + + extern char *dlp_errorlist[]; + extern char *dlp_strerror(int error); + + struct RPC_params; + extern int dlp_RPC + PI_ARGS((int sd, struct RPC_params * p, + unsigned long *result)); +#endif /* !SWIG */ +/*@}*/ + +/** @name DLP library functions */ +/*@{*/ + /** @brief Set the version of the DLP protocol we report to the device. + * + * During the handshake phase, the device and the desktop exchange the + * version of the DLP protocol both support. If the device's DLP version + * is higher than the desktop's, the device usually refuses to connect. + * + * @note Call this function prior to accepting or initiating a connection. + * + * @param major Protocol major version + * @param minor Protocol minor version + */ + extern void dlp_set_protocol_version + PI_ARGS((int major, int minor)); + + /** @brief Convert a Palm OS date to a local date + * + * Local dates are using the local machine's timezone. If the Palm OS date + * is undefined, the local date is set to @c 0x83DAC000 (Fri Jan 1 00:00:00 1904 GMT) + * + * @param timeDateData Ptr to a time/date data block returned by Palm OS + * @return converted date + */ + extern time_t dlp_ptohdate PI_ARGS((PI_CONST unsigned char *timeDateData)); + + /** @brief Convert a date to Palm OS date + * + * If the local date is @c 0x83DAC000 (Fri Jan 1 00:00:00 1904 GMT) the Palm OS date + * is set to undefined. Otherwise the date is converted from local time to Palm OS + * + * @param palm_time The date to convert + * @param timeDateData Ptr to an 8 byte buffer to hold the Palm OS date + */ + extern void dlp_htopdate PI_ARGS((time_t palm_time, unsigned char *timeDateData)); +/*@}*/ + +/** @name System functions */ +/*@{*/ + /** @brief Get the time from the device and return it as a local time_t value + * + * @param sd Socket number + * @param palm_time Pointer to a time_t to fill + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_GetSysDateTime PI_ARGS((int sd, time_t *palm_time)); + + /** @brief Set the time on the Palm using a local time_t value. + * + * @param sd Socket number + * @param palm_time New time to set the device to (expressed using the computer's timezone) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_SetSysDateTime PI_ARGS((int sd, time_t palm_time)); + + /** @brief Read the system information block + * + * @param sd Socket number + * @param sysinfo Returned system information + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadSysInfo PI_ARGS((int sd, struct SysInfo *sysinfo)); + + /** @brief Read information about internal handheld memory + * + * @param sd Socket number + * @param cardno Card number (zero based) + * @param cardinfo Returned information about the memory card. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadStorageInfo + PI_ARGS((int sd, int cardno, struct CardInfo *cardinfo)); + + /** @brief Read the device user information + * + * @param sd Socket number + * @param user Returned user info + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadUserInfo + PI_ARGS((int sd, struct PilotUser *user)); + + /** @brief Change the device user information + * + * @param sd Socket number + * @param INPUT New user info + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_WriteUserInfo + PI_ARGS((int sd, PI_CONST struct PilotUser *INPUT)); + + /** @brief Convenience function to reset lastSyncPC in the UserInfo to 0 + * + * @param sd Socket number + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ResetLastSyncPC PI_ARGS((int sd)); + + /** @brief Read Network HotSync information + * + * Supported on Palm OS 2.0 and later. + * + * @param sd Socket number + * @param OUTPUT On return, filled NetSyncInfo structure + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadNetSyncInfo + PI_ARGS((int sd, struct NetSyncInfo *OUTPUT)); + + /** @brief Set Network HotSync information + * + * Supported on Palm OS 2.0 and later + * + * @param sd Socket number + * @param INPUT NetSyncInfo structure to set + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_WriteNetSyncInfo + PI_ARGS((int sd, PI_CONST struct NetSyncInfo *INPUT)); + + /** @brief State that a conduit has started running on the desktop + * + * Puts up a status message on the device. Calling this method regularly + * is also the only reliable way to know whether the user pressed the Cancel + * button on the device. + * + * @param sd Socket number + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_OpenConduit PI_ARGS((int sd)); + + /** @brief Terminate connection with the device + * + * Required at the end of a session. The pi_socket layer + * will call this for you if you don't. After the device receives this + * command, it will terminate the connection. + * + * @param sd Socket number + * @param status End of sync status (see #dlpEndStatus enum) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_EndOfSync PI_ARGS((int sd, int status)); + + /** @brief Terminate HotSync _without_ notifying Palm. + * + * This will cause the Palm to time out, and should (if I remember right) + * lose any changes to unclosed databases. _Never_ use under ordinary + * circumstances. If the sync needs to be aborted in a reasonable + * manner, use EndOfSync with a non-zero status. + * + * @param sd Socket number + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_AbortSync PI_ARGS((int sd)); + + /** @brief Read a Feature from the device + * + * @param sd Socket number + * @param creator Feature creator + * @param num Feature number + * @param feature On return, the feature value + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadFeature + PI_ARGS((int sd, unsigned long creator, int num, + unsigned long *feature)); + + /** @brief Emulation of the SysGetROMToken function on the device + * + * Supported on Palm OS 2.0 through 4.0. Using this function + * is not recommended. + * + * @warning This function uses 68K RPC calls to perform its duty, + * and is therefore not supported on devices running Palm OS 5.0 + * and later. Actually, it may even crash the device. + * + * @param sd Socket number + * @param token ROM token to read + * @param databuf Buffer to store the token data in + * @param datasize Size of data to read + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_GetROMToken + PI_ARGS((int sd, unsigned long token, void *databuf, size_t *datasize)); + + /** @brief Add an entry into the HotSync log on the device + * + * Move to the next line with \\n, as usual. You may invoke this + * command once or more before calling dlp_EndOfSync(), but it is + * not required. + * + * @param sd Socket number + * @param string Nul-terminated string with the text to insert in the log + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_AddSyncLogEntry PI_ARGS((int sd, char *string)); + + /** @brief Call an application on the device + * + * 32-bit retcode and data over 64k only supported on Palm OS 2.0 and later. + * + * This function allows calling an application (or any PRC that responds + * to launch codes) using a custom launch code and custom data. The + * application can return data too, using DlkControl() and the + * dlkCtlSendCallAppReply selector. See Palm OS documentation for more + * information. + * + * @param sd Socket number + * @param creator Creator code of the application to call + * @param type Type code of the application to call + * @param action Launch code to send to the application + * @param datasize Length of data block to pass to the application + * @param databuf Data block to pass to the application + * @param retcode On return, result code returned by the application + * @param retbuf Buffer allocated using pi_buffer_new(). On return contains the data returned by the application + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_CallApplication + PI_ARGS((int sd, unsigned long creator, unsigned long type, + int action, size_t datasize, PI_CONST void *databuf, + unsigned long *retcode, pi_buffer_t *retbuf)); + + /** @brief Convenience function to ead an app preference data block + * + * Supported on Palm OS 2.0 and later, emulated for Palm OS 1.x. + * + * @param sd Socket number + * @param creator Application creator + * @param prefid Preference ID + * @param backup If set, read from backup prefs (see Palm OS documentation). This flag is ignored on Palm OS 1.x. + * @param maxsize Maximum size of the data to return in buffer + * @param databuf If not NULL, buffer should be of size @p maxsize. On return, contains the preference data + * @param datasize If not NULL, on return contains the size of the preference data block + * @param version If not NULL + * @return A negative value if an error occured (see pi-error.h), otherwise the size of the preference block + */ + extern PI_ERR dlp_ReadAppPreference + PI_ARGS((int sd, unsigned long creator, int prefid, int backup, + int maxsize, void *databuf, size_t *datasize, int *version)); + + /** @brief Write an app preference data block + * + * Supported on Palm OS 2.0 and later. Emulated on Palm OS 1.x. + * + * @param sd Socket number + * @param creator Application creator + * @param prefid Preference ID + * @param backup If set, write to backup prefs (see Palm OS documentation). This flag is ignored on Palm OS 1.x. + * @param version Version of the pref to write + * @param databuf Ptr to the data to write + * @param datasize Size of the data to write + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_WriteAppPreference + PI_ARGS((int sd, unsigned long creator, int prefid, int backup, + int version, PI_CONST void *databuf, size_t datasize)); + + /** @brief Require reboot of device after HotSync terminates + * + * @param sd Socket number + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ResetSystem PI_ARGS((int sd)); + +/*@}*/ + +/** @name Database access functions */ +/*@{*/ + /** @brief Read the database list from the device + * + * The database list can be read either one database at a time (slower), + * or passing ::dlpDBListMultiple in the @p flags member. Pass ::dlpDBListRAM + * in @p flags to get the list of databases in RAM, and ::dlpDBListROM to get + * the list of databases in ROM. You can mix flags to obtain the desired + * result. Passing ::dlpDBListMultiple will return several DBInfo + * structures at once (usually 20). Use (info->used / sizeof(DBInfo)) to + * know how many database information blocks were returned. + * For the next call, pass the last DBInfo->index value + 1 to start to + * the next database. @n @n + * When all the database informations have been retrieved, this function returns + * #PI_ERR_DLP_PALMOS and pi_palmos_error() returns #dlpErrNotFound. + * + * @param sd Socket number + * @param cardno Card number (should be 0) + * @param flags Flags (see #dlpDBList enum) + * @param start Index of first database to list (zero based) + * @param dblist Buffer filled with one or more DBInfo structure + * @return A negative value if an error occured or the DB list is exhausted (see pi-error.h) + * + */ + extern PI_ERR dlp_ReadDBList + PI_ARGS((int sd, int cardno, int flags, int start, + pi_buffer_t *dblist)); + + /** @brief Find a database by name + * + * Supported on Palm OS 3.0 (DLP 1.2) and later. + * + * @param sd Socket number + * @param cardno Memory card number (usually 0) + * @param dbname Database name + * @param localid If not NULL, on return contains the LocalID of the database if it was found + * @param dbhandle If not NULL, on return contains the handle of the database if it is currently open + * @param dbInfo If not NULL, on return contains information about the database + * @param dbSize If not NULL, on return contains information about the database size + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_FindDBByName + PI_ARGS((int sd, int cardno, PI_CONST char *dbname, unsigned long *localid, int *dbhandle, + struct DBInfo *dbInfo, struct DBSizeInfo *dbSize)); + + /** @brief Get information about an open database + * + * Supported on Palm OS 3.0 (DLP 1.2) and later. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param cardno If not NULL, on return contains the cardno of the memory card the database resides on + * @param localid If not NULL, on return contains the LocalID of the database + * @param dbInfo If not NULL, on return contains information about the database + * @param dbSize If not NULL, on return contains information about the database size + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_FindDBByOpenHandle + PI_ARGS((int sd, int dbhandle, int *cardno, unsigned long *localid, + struct DBInfo *dbInfo, struct DBSizeInfo *dbSize)); + + /** @brief Find databases by type and/or creator + * + * Supported on Palm OS 3.0 (DLP 1.2) and later. To look for multiple databases, + * make a first call with @p start set to 1, then subsequent calls with @p start set to 0 + * until no more database is found. + * + * @param sd Socket number + * @param type If not 0, type code to look for + * @param creator If not 0, creator code to look for + * @param start If set, start a new search + * @param latest If set, returns the database with the latest version if there are several identical databases + * @param cardno If not NULL, on return contains the memory card number the database resides on + * @param localid If not NULL, on return contains the LocalID of the database + * @param dbhandle If not NULL, on return contains the handle of the database if it is currently open + * @param dbInfo If not NULL, on return contains information about the database + * @param dbSize If not NULL, on return contains information about the database size + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_FindDBByTypeCreator + PI_ARGS((int sd, unsigned long type, unsigned long creator, int start, + int latest, int *cardno, unsigned long *localid, int *dbhandle, + struct DBInfo *dbInfo, struct DBSizeInfo *dbSize)); + + /** @brief Look for a database on the device + * + * This function does not match any DLP layer function, but is + * intended as a shortcut for programs looking for databases. It + * uses a fairly byzantine mechanism for ordering the RAM databases + * before the ROM ones. You must feed the @a index slot from the + * returned info in @p start the next time round. + * + * @param sd Socket number + * @param cardno Card number (should be 0) + * @param start Index of first database to list (zero based) + * @param dbname If not NULL, look for a database with this name + * @param type If not 0, matching database must have this type + * @param creator If not 0, matching database must have this creator code + * @param OUTPUT Returned database information on success + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_FindDBInfo + PI_ARGS((int sd, int cardno, int start, PI_CONST char *dbname, + unsigned long type, unsigned long creator, + struct DBInfo *OUTPUT)); + + /** @brief Open a database on the Palm. + * + * @param sd Socket number + * @param cardno Card number (should be 0) + * @param mode Open mode (see #dlpOpenFlags enum) + * @param dbname Database name + * @param dbhandle Returned database handle to use if other calls like dlp_CloseDB() + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_OpenDB + PI_ARGS((int sd, int cardno, int mode, PI_CONST char *dbname, + int *dbhandle)); + + /** @brief Close an opened database + * + * @param sd Socket number + * @param dbhandle The DB handle returned by dlp_OpenDB() + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_CloseDB PI_ARGS((int sd, int dbhandle)); + + /** @brief Close all opened databases + * + * @param sd Socket number + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_CloseDB_All PI_ARGS((int sd)); + + /** @brief Delete an existing database from the device + * + * @param sd Socket number + * @param cardno Card number (should be 0) + * @param dbname Database name + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_DeleteDB + PI_ARGS((int sd, int cardno, PI_CONST char *dbname)); + + /** @brief Create database on the device + * + * After creation, the database is open and ready for use. You should + * call dlp_CloseDB() once you're done with the database. + * + * @param sd Socket number + * @param creator Creator code for the new database (four-char code) + * @param type Type code for the new database (four-char code) + * @param cardno Card number (should be 0) + * @param flags Database flags (see #dlpDBFlags enum) + * @param version Database version number + * @param dbname Database name + * @param dbhandle On return, DB handle to pass to other calls like dlp_CloseDB() + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_CreateDB + PI_ARGS((int sd, unsigned long creator, unsigned long type, + int cardno, int flags, unsigned int version, + PI_CONST char *dbname, int *dbhandle)); + + /** @brief Return the number of records in an opened database. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param numrecs On return, number of records in the database + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadOpenDBInfo + PI_ARGS((int sd, int dbhandle, int *numrecs)); + + /** @brief Change information for an open database + * + * Supported on Palm OS 3.0 (DLP 1.2) and later. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param flags Flags to set for this database (see #dlpDBFlags enum) + * @param clearFlags Flags to clear for this database (see #dlpDBFlags enum) + * @param version Version of this database + * @param createDate Creation date of this database + * @param modifyDate Modification date of this database (use @c 0x83DAC000 to unset) + * @param backupDate Last backup date of this database (use @c 0x83DAC000 to unset) + * @param type Database type code (four-char code) + * @param creator Database creator code (four-char code) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_SetDBInfo + PI_ARGS((int sd, int dbhandle, int flags, int clearFlags, unsigned int version, + time_t createDate, time_t modifyDate, time_t backupDate, + unsigned long type, unsigned long creator)); + + /** @brief Delete a category from a database + * + * Any record in that category will be moved to the Unfiled category. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param category Category to delete + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_DeleteCategory + PI_ARGS((int sd, int dbhandle, int category)); + + /** @brief Move all records from a category to another category + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param fromcat Category to move from (0-15) + * @param tocat Category to move to (0-15) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_MoveCategory + PI_ARGS((int sd, int dbhandle, int fromcat, int tocat)); + + /** @brief Read a database's AppInfo block + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param offset Offset to start reading from (0 based) + * @param reqbytes Number of bytes to read (pass -1 to read all data from @p offset to the end of the AppInfo block) + * @param retbuf Buffer allocated using pi_buffer_new(). On return contains the data from the AppInfo block + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadAppBlock + PI_ARGS((int sd, int dbhandle, int offset, int reqbytes, + pi_buffer_t *retbuf)); + + /** @brief Write a database's AppInfo block + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param databuf Pointer to the new AppInfo data. + * @param datasize Length of the new AppInfo data. If 0, the AppInfo block is removed. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_WriteAppBlock + PI_ARGS((int sd, int dbhandle, PI_CONST void *databuf, size_t datasize)); + + /** @brief Read a database's SortInfo block + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param offset Offset to start reading from (0 based) + * @param reqbytes Number of bytes to read (pass -1 to read all data from @p offset to the end of the SortInfo block) + * @param retbuf Buffer allocated using pi_buffer_new(). On return contains the data from the SortInfo block + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadSortBlock + PI_ARGS((int sd, int dbhandle, int offset, int reqbytes, + pi_buffer_t *retbuf)); + + /** @brief Write a database's SortInfo block + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param databuf Pointer to the new SortInfo data. + * @param datasize Length of the new SortInfo data. If 0, the SortInfo block is removed. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_WriteSortBlock + PI_ARGS((int sd, int dbhandle, PI_CONST void *databuf, + size_t datasize)); + + /** @brief Clean up a database by removing deleted/archived records + * + * Delete all records in the opened database which are marked as + * archived or deleted. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_CleanUpDatabase PI_ARGS((int sd, int dbhandle)); + + /** @brief Reset dirty record flags, update sync time + * + * For record databases, reset all dirty flags. For both record and + * resource databases, set the last sync time to now. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ResetSyncFlags PI_ARGS((int sd, int dbhandle)); + + /** @brief Reset the nextRecord position used in dlp_ReadNextRecInCategory() + * + * This resets the nextRecord both internally and on the device. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ResetDBIndex PI_ARGS((int sd, int dbhandle)); + + /** @brief Read the list of record IDs from an open database + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param sort If non-zero, the on-device application with the same DB creator will be called to re-sort the records prior to returning the list + * @param start Index of first record ID to return (zero based) + * @param max Maximum number of record IDs to return + * @param recuids On return, @p count record UIDs + * @param count On return, the number of record IDs found in @p IDs + * @return A negative value if an error occured (see pi-error.h) + */ +#ifndef SWIG /* bindings provide a native implementation */ + extern PI_ERR dlp_ReadRecordIDList + PI_ARGS((int sd, int dbhandle, int sort, int start, int max, + recordid_t *recuids, int *count)); +#endif + + /** @brief Read a record using its unique ID + * + * Read a record identified by its unique ID. Make sure you only + * request records that effectively exist in the database (use + * dlp_ReadRecordIDList() to retrieve the unique IDs of all records + * in the database). + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param recuid Record unique ID + * @param retbuf If not NULL, a buffer allocated using pi_buffer_new(). On return, contains the record contents + * @param recindex If not NULL, contains the record index on return. + * @param recattrs If not NULL, contains the record attributes on return. + * @param category If not NULL, contains the record category on return. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadRecordById + PI_ARGS((int sd, int dbhandle, recordid_t recuid, pi_buffer_t *retbuf, + int *recindex, int *recattrs, int *category)); + + /** @brief Read a record using its index + * + * Read a record by record index (zero-based). Make sure you only + * request records within the bounds of database records + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param recindex Record index (zero based) + * @param retbuf If not NULL, a buffer allocated using pi_buffer_new(). On return, contains the record contents + * @param recuid If not NULL, contains the record UID on return. + * @param recattrs If not NULL, contains the record attributes on return. + * @param category If not NULL, contains the record category on return. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadRecordByIndex + PI_ARGS((int sd, int dbhandle, int recindex, pi_buffer_t *retbuf, + recordid_t *recuid, int *recattrs, int *category)); + + /** @brief Iterate through modified records in database + * + * Return subsequent modified records on each call. Use dlp_ResetDBIndex() + * prior to starting iterations. Once all the records have been seen, + * this function returns PI_ERR_DLP_PALMOS and pi_palmos_error() returns + * #dlpErrNotFound. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param retbuf If not NULL, a buffer created using pi_buffer_new(). Buffer is cleared first using pi_buffer_clear(). On return, contains the record data + * @param recuid If not NULL, contains the record unique ID on return + * @param recindex If not NULL, contains the record index on return + * @param recattrs If not NULL, contains the record attributes on return (see #dlpRecAttributes enum) + * @param category If not NULL, contains the record category on return + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadNextModifiedRec + PI_ARGS((int sd, int dbhandle, pi_buffer_t *retbuf, recordid_t *recuid, + int *recindex, int *recattrs, int *category)); + + /** @brief Iterate through modified records in category + * + * Return subsequent modified records on each call. Use dlp_ResetDBIndex() + * prior to starting iterations. Once all the records have been seen, + * this function returns PI_ERR_DLP_PALMOS and pi_palmos_error() returns + * #dlpErrNotFound. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param category The category to iterate into + * @param retbuf If not NULL, a buffer created using pi_buffer_new(). Buffer is cleared first using pi_buffer_clear(). On return, contains the record data + * @param recuid If not NULL, contains the record unique ID on return + * @param recindex If not NULL, contains the record index on return + * @param recattrs If not NULL, contains the record attributes on return (see #dlpRecAttributes enum) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadNextModifiedRecInCategory + PI_ARGS((int sd, int dbhandle, int category, pi_buffer_t *retbuf, + recordid_t *recuid, int *recindex, int *recattrs)); + + /** @brief Iterate through records in category + * + * Return subsequent records on each call. Use dlp_ResetDBIndex() + * prior to starting iterations. Once all the records have been seen, + * this function returns PI_ERR_DLP_PALMOS and pi_palmos_error() returns + * #dlpErrNotFound. + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param category The category to iterate into + * @param retbuf If not NULL, a buffer created using pi_buffer_new(). Buffer is cleared first using pi_buffer_clear(). On return, contains the record data + * @param recuid If not NULL, contains the record unique ID on return + * @param recindex If not NULL, contains the record index on return + * @param recattrs If not NULL, contains the record attributes on return (see #dlpRecAttributes enum) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadNextRecInCategory + PI_ARGS((int sd, int dbhandle, int category, pi_buffer_t *retbuf, + recordid_t *recuid, int *recindex, int *recattrs)); + + /** @brief Create a new record in a database + * + * Use this call to add records to a database. On DLP 1.4 and later, you can create records + * bigger than 64k. Set the record ID to 0 to have the device generate the record ID itself, + * or assign a record ID of your own. Read Palm's documentation for information about + * record IDs, as there is a way to indicate which records were created by the desktop and + * which ones were created by the device applications. + * + * If you pass -1 as the data length, the function will treat the data as a string and use + * strlen(data)+1 as the data length (that is, the string is written including the + * terminating nul character). + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param flags Record attributes (see #dlpRecAttributes enum) + * @param recuid Record ID of the new record. If 0, device will generate a new record ID for this record. + * @param catid Category of the new record + * @param databuf Ptr to record data + * @param datasize Record data length + * @param newrecuid On return, record ID that was assigned to this record + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_WriteRecord + PI_ARGS((int sd, int dbhandle, int flags, recordid_t recuid, + int catid, PI_CONST void *databuf, size_t datasize, + recordid_t *newrecuid)); + + /** @brief Delete an existing record from a database + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param all If set, ALL records are deleted from the database. + * @param recuid Record ID of record to delete if @p all == 0. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_DeleteRecord + PI_ARGS((int sd, int dbhandle, int all, recordid_t recuid)); + + /** @brief Read a resource identified by its type and ID + * + * @note To read resources larger than 64K, you should use dlp_ReadResourceByIndex(). + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param type Type code for the resource (four-char code) + * @param resid Resource ID + * @param retbuf If not NULL, a buffer allocated using pi_buffer_new(). On return, contains the resource contents + * @param resindex If not NULL, on return contains the resource index + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadResourceByType + PI_ARGS((int sd, int dbhandle, unsigned long type, int resid, + pi_buffer_t *retbuf, int *resindex)); + + /** @brief Read a resource identified by its resource index + * + * This function supports reading resources larger than 64k on + * DLP 1.4 and later (Palm OS 5.2 and later). + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param resindex Resource index + * @param retbuf If not NULL, a buffer allocated using pi_buffer_new(). On return, contains the resource contents + * @param restype If not NULL, on return contains the resource type + * @param resid If not NULL, on return contains the resource ID + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ReadResourceByIndex + PI_ARGS((int sd, int dbhandle, unsigned int resindex, pi_buffer_t *retbuf, + unsigned long *restype, int *resid)); + + /** @brief Create a new resource of overwrite an existing one + * + * This function supports writing resources larger than 64k on + * DLP 1.4 and later (Palm OS 5.2 and later). + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param restype Resource type (four-char code) + * @param resid Resource ID + * @param databuf Ptr to resource data + * @param datasize Length of resource data to write + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_WriteResource + PI_ARGS((int sd, int dbhandle, unsigned long restype, int resid, + PI_CONST void *databuf, size_t datasize)); + + /** @brief Delete a resource or all resources from a resource file + * + * @param sd Socket number + * @param dbhandle Open database handle, obtained from dlp_OpenDB() + * @param all If set, all resources are removed from this database (@p restype and @p resid are ignored) + * @param restype Resource type (four-char code) + * @param resid Resource ID + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_DeleteResource + PI_ARGS((int sd, int dbhandle, int all, unsigned long restype, + int resid)); +/*@}*/ + +/** @name Expansion manager functions */ +/*@{*/ + /** @brief Enumerate expansion slots + * + * Supported on Palm OS 4.0 and later. Expansion slots are physical slots + * present on the device. To check whether a card is inserted in a slot, + * use dlp_ExpCardPresent(). + * + * @param sd Socket number + * @param numslots On input, maximum number of slots that can be returned in the slotRefs array. On return, the actual number of slot references returned in @p slotRefs. + * @param slotrefs On return, @p numSlots slot references + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ExpSlotEnumerate + PI_ARGS((int sd, int *numslots, int *slotrefs)); + + /** @brief Checks whether a card is inserted in a slot + * + * Supported on Palm OS 4.0 and later. Returns >=0 if a card + * is inserted in the slot. + * + * @param sd Socket number + * @param slotref The slot reference as returned by dlp_ExpSlotEnumerate(). + * @return A negative value if an error occured (see pi-error.h), >=0 if a card is inserted + */ + extern PI_ERR dlp_ExpCardPresent + PI_ARGS((int sd, int slotref)); + + /** @brief Get information about a removable card inserted in an expansion slot + * + * Supported on Palm OS 4.0 and later. The info strings are returned in a + * single malloc()'ed buffer as a suite of nul-terminated string, one + * after the other. + * + * @param sd Socket number + * @param slotref The slot reference as returned by dlp_ExpSlotEnumerate(). + * @param expflags If not NULL, the card flags (see #dlpExpCardCapabilities enum) + * @param numstrings On return, the number of strings found in the @p strings array + * @param strings If not NULL, ptr to a char*. If there are strings to return, this function allocates a buffer to hold the strings. You are responsible for free()'ing the buffer once you're done with it. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ExpCardInfo + PI_ARGS((int sd, int slotref, unsigned long *expflags, + int *numstrings, char **strings)); + + /** @brief Return the type of media supported by an expansion slot + * + * Supported on Palm OS 5.2 and later (DLP 1.4 and later). + * + * @param sd Socket number + * @param slotref The slot reference as returned by dlp_ExpSlotEnumerate(). + * @param mediatype On return, the media type + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_ExpSlotMediaType + PI_ARGS((int sd, int slotref, unsigned long *mediatype)); +/*@}*/ + +/** @name VFS manager functions */ +/*@{*/ + /** @brief Returns a list of connected VFS volumes + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param numvols On input, the maximum number of volume references that can be returned. On output, the actual number of volume references + * @param volrefs On output, @p numVols volume references + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSVolumeEnumerate + PI_ARGS((int sd, int *numvols, int *volrefs)); + + /** @brief Returns information about a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param volinfo On return, volume information + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSVolumeInfo + PI_ARGS((int sd, int volref, struct VFSInfo *volinfo)); + + /** @brief Return the label (name) of a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param len On input, the maximum size of the name buffer. On output, the name length (including the ending nul byte) + * @param name On output, the nul-terminated volume name + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSVolumeGetLabel + PI_ARGS((int sd, int volref, int *len, char *name)); + + /** @brief Change the label (name) of a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param name New volume name + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSVolumeSetLabel + PI_ARGS((int sd, int volref, PI_CONST char *name)); + + /** @brief Return the total and used size of a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param usedbytes On return, number of bytes used on the volume + * @param totalbytes On return, total size of the volume in bytes + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSVolumeSize + PI_ARGS((int sd, int volref, long *usedbytes, long *totalbytes)); + + /** @brief Format a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fmtflags Format flags (undocumented for now) + * @param fsLibRef File system lib ref (undocumented for now) + * @param param Slot mount parameters (undocumented for now) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSVolumeFormat + PI_ARGS((int sd, unsigned char fmtflags, int fsLibRef, + struct VFSSlotMountParam *param)); + + /** @brief Get the default storage directory for a given file type + * + * Supported on Palm OS 4.0 and later. Return the default directory + * for a file type. File types as expressed as MIME types, for + * example "image/jpeg", or as a simple file extension (i.e. ".jpg") + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param name MIME type to get the default directory for + * @param dir A buffer to hold the default path + * @param len On input, the length of the @p dir buffer. On return, contains the length of the path string (including the nul terminator) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSGetDefaultDir + PI_ARGS((int sd, int volref, PI_CONST char *name, + char *dir, int *len)); + + /** @brief Iterate through the entries in a directory + * + * Supported on Palm OS 4.0 and later. At the beginning you set + * @p dirIterator to #vfsIteratorStart, then call this function + * repeatedly until it returns an error code of the iterator becomes + * #vfsIteratorStop. + * + * @bug On some early OS 5 devices like Tungsten T and Sony NX70, NX73 this + * call crashes the device. This has been confirmed to be a bug in HotSync on + * the device, as tests showed that a regular HotSync conduit does crash the + * device with this call too. + * + * @param sd Socket number + * @param dirref Directory reference obtained from dlp_VFSFileOpen() + * @param diriterator Ptr to an iterator. Start with #vfsIteratorStart + * @param maxitems On input, the max number of VFSDirInfo structures stored in @p dirItems. On output, the actual number of items. + * @param diritems Preallocated array that contains a number of VFSDirInfo structures on return. + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSDirEntryEnumerate + PI_ARGS((int sd, FileRef dirref, unsigned long *diriterator, + int *maxitems, struct VFSDirInfo *diritems)); + + /** @brief Create a new directory on a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param path Full path for the directory to create + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSDirCreate + PI_ARGS((int sd, int volref, PI_CONST char *path)); + + /** @brief Import a VFS file to a database on the handheld + * + * Supported on Palm OS 4.0 and later. The file is converted to a + * full fledged database and stored in the handheld's RAM. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param pathname Path of the file to transfer to the handheld + * @param cardno On return, card number the database was created on (usually 0) + * @param localid On return, LocalID of the database that was created + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSImportDatabaseFromFile + PI_ARGS((int sd, int volref, PI_CONST char *pathname, + int *cardno, unsigned long *localid)); + + /** @brief Export a database to a VFS file + * + * Supported on Palm OS 4.0 and later. The database is converted to a + * .prc, .pdb or .pqa file on the VFS volume. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param pathname Path of the file to create on the VFS volume + * @param cardno Card number the database resides on (usually 0) + * @param localid LocalID of the database to export + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSExportDatabaseToFile + PI_ARGS((int sd, int volref, PI_CONST char *pathname, + int cardno, unsigned int localid)); + + /** @brief Create a new file on a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param pathname Full path of the file to create + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileCreate + PI_ARGS((int sd, int volref, PI_CONST char *pathname)); + + /** @brief Open an existing file on a VFS volume + * + * Supported on Palm OS 4.0 and later. On some devices, it is required to open the + * file using the #dlpOpenReadWrite mode to be able to write to it (using + * #dlpOpenWrite is not enough). + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param path Full path of the file to open + * @param mode Open mode flags (see #dlpVFSOpenFlags enum) + * @param fileref On return, file reference to the open file + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileOpen + PI_ARGS((int sd, int volref, PI_CONST char *path, int mode, + FileRef *fileref)); + + /** @brief Close an open VFS file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File reference obtained from dlp_VFSFileOpen() + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileClose + PI_ARGS((int sd, FileRef fileref)); + + /** @brief Write data to an open file + * + * Supported on Palm OS 4.0 and later. Will return the number of bytes + * written if successful. + * + * @param sd Socket number + * @param fileref File reference obtained from dlp_VFSFileOpen() + * @param databuf Ptr to the data to write + * @param datasize Length of the data to write + * @return A negative value if an error occured (see pi-error.h), the number of bytes written otherwise. + */ + extern PI_ERR dlp_VFSFileWrite + PI_ARGS((int sd, FileRef fileref, PI_CONST void *databuf, size_t datasize)); + + /** @brief Read data from an open file + * + * Supported on Palm OS 4.0 and later. Will return the total number of bytes + * actually read. + * + * @param sd Socket number + * @param fileref File reference obtained from dlp_VFSFileOpen() + * @param retbuf Buffer allocated using pi_buffer_new(). Buffer is being emptied first with pi_buffer_clear(). On return contains the data read from the file. + * @param reqbytes Number of bytes to read from the file. + * @return A negative value if an error occured (see pi-error.h), or the total number of bytes read + */ + extern PI_ERR dlp_VFSFileRead + PI_ARGS((int sd, FileRef fileref, pi_buffer_t *retbuf, size_t reqbytes)); + + /** @brief Delete an existing file from a VFS volume + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param pathname Full access path to the file to delete + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileDelete + PI_ARGS((int sd, int volref, PI_CONST char *pathname)); + + /** @brief Rename an existing file + * + * Supported on Palm OS 4.0 and later. + * + * @note This function can NOT be used to move a file from one place + * to another. You can only rename a file that will stay in the same + * directory. + * + * @param sd Socket number + * @param volref Volume reference number (obtained from dlp_VFSVolumeEnumerate()) + * @param pathname Full access path to the file to rename + * @param newname New file name, without the rest of the access path + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileRename + PI_ARGS((int sd, int volref, PI_CONST char *pathname, + PI_CONST char *newname)); + + /** @brief Checks whether the current position is at the end of file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File reference obtained from dlp_VFSFileOpen() + * @return A negative value if an error occured (see pi-error.h). 0 if not at EOF, >0 if at EOF. + */ + extern PI_ERR dlp_VFSFileEOF + PI_ARGS((int sd, FileRef fileref)); + + /** @brief Return the current seek position in an open file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File reference obtained from dlp_VFSFileOpen() + * @param position On return, current absolute position in the file + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileTell + PI_ARGS((int sd, FileRef fileref, int *position)); + + /** @brief Return the attributes of an open file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File reference obtained from dlp_VFSFileOpen() + * @param fileattrs On return, file attributes (see #dlpVFSFileAttributeConstants enum) + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileGetAttributes + PI_ARGS((int sd, FileRef fileref, unsigned long *fileattrs)); + + /** @brief Change the attributes of an open file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File reference obtained from dlp_VFSFileOpen() + * @param fileattrs n-New file attributes (see #dlpVFSFileAttributeConstants enum) + * @return A negative value if an error occured (see pi-error.h). + */ + extern PI_ERR dlp_VFSFileSetAttributes + PI_ARGS((int sd, FileRef fileref, unsigned long fileattrs)); + + /** @brief Return one of the dates associated with an open file or directory + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File or directory reference obtained from dlp_VFSFileOpen() + * @param which The date you want (see #dlpVFSDateConstants enum) + * @param date On return, the requested date + * @return A negative value if an error occured (see pi-error.h). + */ + extern PI_ERR dlp_VFSFileGetDate + PI_ARGS((int sd, FileRef fileref, int which, time_t *date)); + + /** @brief Change one of the dates for an open file or directory + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File or directory reference obtained from dlp_VFSFileOpen() + * @param which The date you want to change (see #dlpVFSDateConstants enum) + * @param date The new date to set + * @return A negative value if an error occured (see pi-error.h). + */ + extern PI_ERR dlp_VFSFileSetDate + PI_ARGS((int sd, FileRef fileref, int which, time_t date)); + + /** @brief Change the current seek position in an open file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File or directory reference obtained from dlp_VFSFileOpen() + * @param origin Where to seek from (see #dlpVFSSeekConstants enum) + * @param offset Seek offset + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileSeek + PI_ARGS((int sd, FileRef fileref, int origin, int offset)); + + /** @brief Resize an open file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File or directory reference obtained from dlp_VFSFileOpen() + * @param newsize New file size + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileResize + PI_ARGS((int sd, FileRef fileref, int newsize)); + + /** @brief Return the size of an open file + * + * Supported on Palm OS 4.0 and later. + * + * @param sd Socket number + * @param fileref File or directory reference obtained from dlp_VFSFileOpen() + * @param size On return, the actual size of the file + * @return A negative value if an error occured (see pi-error.h) + */ + extern PI_ERR dlp_VFSFileSize + PI_ARGS((int sd, FileRef fileref, int *size)); +/*@}*/ + +#ifdef __cplusplus +} +#endif +#endif /*_PILOT_DLP_H_*/ |