home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / progect-src-0.20.tar.gz / progect-src-0.20.tar / progect-0.20 / AddressDB.h < prev    next >
C/C++ Source or Header  |  2000-10-26  |  10KB  |  318 lines

  1. /******************************************************************************
  2.  *
  3.  * Copyright (c) 1995-1999 Palm Computing, Inc. or its subsidiaries.
  4.  * All rights reserved.
  5.  *
  6.  * File: AddressDB.h
  7.  *
  8.  * Description:
  9.  *        Header for the Address Manager
  10.  *
  11.  * History:
  12.  *       1/3/95  rsf - Created
  13.  *        10/1/99 jmp - Added AddrGetDataBase() routine.
  14.  *
  15.  *****************************************************************************/
  16.  
  17. #ifndef __ADDRESSDB_H__
  18. #define __ADDRESSDB_H__
  19.  
  20. #include "AppLaunchCmd.h"
  21.  
  22.  
  23. #define LocalizedAppInfoStr    1000
  24.  
  25. #define addrLabelLength            16
  26. #define addrNumFields            19
  27.  
  28.  
  29. typedef union {
  30.     struct {
  31.         unsigned reserved        :13;
  32.         unsigned note        :1;    // set if record contains a note handle
  33.         unsigned custom4     :1;    // set if record contains a custom4
  34.         unsigned custom3     :1;    // set if record contains a custom3
  35.         unsigned custom2     :1;    // set if record contains a custom2
  36.         unsigned custom1     :1;    // set if record contains a custom1
  37.         unsigned title       :1;    // set if record contains a title
  38.         unsigned country        :1;    // set if record contains a birthday
  39.         unsigned zipCode        :1;    // set if record contains a birthday
  40.         unsigned state            :1;    // set if record contains a birthday
  41.         unsigned city           :1;    // set if record contains a birthday
  42.         unsigned address     :1;    // set if record contains a address
  43.         unsigned phone5      :1;    // set if record contains a phone5
  44.         unsigned phone4      :1;    // set if record contains a phone4
  45.         unsigned phone3      :1;    // set if record contains a phone3
  46.         unsigned phone2      :1;    // set if record contains a phone2
  47.         unsigned phone1      :1;    // set if record contains a phone1
  48.         unsigned company     :1;    // set if record contains a company
  49.         unsigned firstName   :1;    // set if record contains a firstName
  50.         unsigned name        :1;    // set if record contains a name (bit 0)
  51.         
  52.     } bits;
  53.     UInt32 allBits;
  54. } AddrDBRecordFlags;
  55.  
  56. typedef union {
  57.     struct {
  58.         unsigned reserved        :10;
  59.         unsigned phone8      :1;    // set if phone8 label is dirty
  60.         unsigned phone7      :1;    // set if phone7 label is dirty
  61.         unsigned phone6      :1;    // set if phone6 label is dirty
  62.         unsigned note        :1;    // set if note label is dirty
  63.         unsigned custom4     :1;    // set if custom4 label is dirty
  64.         unsigned custom3     :1;    // set if custom3 label is dirty
  65.         unsigned custom2     :1;    // set if custom2 label is dirty
  66.         unsigned custom1     :1;    // set if custom1 label is dirty
  67.         unsigned title       :1;    // set if title label is dirty
  68.         unsigned country        :1;    // set if country label is dirty
  69.         unsigned zipCode        :1;    // set if zipCode label is dirty
  70.         unsigned state            :1;    // set if state label is dirty
  71.         unsigned city           :1;    // set if city label is dirty
  72.         unsigned address     :1;    // set if address label is dirty
  73.         unsigned phone5      :1;    // set if phone5 label is dirty
  74.         unsigned phone4      :1;    // set if phone4 label is dirty
  75.         unsigned phone3      :1;    // set if phone3 label is dirty
  76.         unsigned phone2      :1;    // set if phone2 label is dirty
  77.         unsigned phone1      :1;    // set if phone1 label is dirty
  78.         unsigned company     :1;    // set if company label is dirty
  79.         unsigned firstName   :1;    // set if firstName label is dirty
  80.         unsigned name        :1;    // set if name label is dirty (bit 0)
  81.         
  82.     } bits;
  83.     UInt32 allBits;
  84. } AddrDBFieldLabelsDirtyFlags;
  85.  
  86. /*
  87.  
  88. #define nameFlag            ((UInt32) 1 << name)
  89. #define firstNameFlag    ((UInt32) 1 << firstName)
  90. #define companyFlag        ((UInt32) 1 << company)
  91. #define phone1Flag        ((UInt32) 1 << phone1)
  92. #define phone2Flag        ((UInt32) 1 << phone2)
  93. #define phone3Flag        ((UInt32) 1 << phone3)
  94. #define phone4Flag        ((UInt32) 1 << phone4)
  95. #define phone5Flag        ((UInt32) 1 << phone5)
  96. #define addressFlag        ((UInt32) 1 << address)
  97. #define cityFlag            ((UInt32) 1 << city)
  98. #define stateFlag            ((UInt32) 1 << state)
  99. #define zipCodeFlag        ((UInt32) 1 << zipCode)
  100. #define countryFlag        ((UInt32) 1 << country)
  101. #define titleFlag            ((UInt32) 1 << title)
  102. #define custom1Flag        ((UInt32) 1 << custom1)
  103. #define custom2Flag        ((UInt32) 1 << custom2)
  104. #define custom3Flag        ((UInt32) 1 << custom3)
  105. #define custom4Flag        ((UInt32) 1 << custom4)
  106. #define noteFlag            ((UInt32) 1 << note)
  107.  
  108. typedef char AddrDBRecordFlags[3];
  109. */
  110.  
  111.  
  112. typedef struct {
  113.     unsigned reserved:7;
  114.     unsigned sortByCompany    :1;
  115. } AddrDBMisc;
  116.  
  117. typedef enum {
  118.     name,
  119.     firstName,
  120.     company,
  121.     phone1,
  122.     phone2,
  123.     phone3,
  124.     phone4,
  125.     phone5,
  126.     address,
  127.     city,
  128.     state,
  129.     zipCode,
  130.     country,
  131.     title,
  132.     custom1,
  133.     custom2,
  134.     custom3,
  135.     custom4,
  136.     note,            // This field is assumed to be < 4K 
  137.     addressFieldsCount
  138. } AddressFields;
  139.  
  140.  
  141. // This structure is only for the exchange of address records.
  142. typedef union {
  143.     struct {
  144.         unsigned reserved        :8;
  145.         
  146.         // Typically only one of these are set
  147.         unsigned email            :1;    // set if data is an email address
  148.         unsigned fax            :1;    // set if data is a fax
  149.         unsigned pager            :1;    // set if data is a pager
  150.         unsigned voice            :1;    // set if data is a phone
  151.         
  152.         unsigned mobile        :1;    // set if data is a mobile phone
  153.         
  154.         // These are set in addition to other flags.
  155.         unsigned work            :1;    // set if phone is at work
  156.         unsigned home            :1;    // set if phone is at home
  157.         
  158.         // Set if this number is preferred over others.  May be preferred
  159.         // over all others.  May be preferred over other emails.  One 
  160.         // preferred number should be listed next to the person's name.
  161.         unsigned preferred   :1;    // set if this phone is preferred (bit 0)
  162.     } bits;
  163.     UInt32 allBits;
  164. } AddrDBPhoneFlags;
  165.  
  166. typedef enum {
  167.     workLabel,
  168.     homeLabel,
  169.     faxLabel,
  170.     otherLabel,
  171.     emailLabel,
  172.     mainLabel,
  173.     pagerLabel,
  174.     mobileLabel
  175. } AddressPhoneLabels;
  176.  
  177.  
  178. #define noRecord 0xffff
  179.  
  180. #define firstAddressField    name
  181. #define firstPhoneField        phone1
  182. #define lastPhoneField        phone5
  183. #define numPhoneLabels        8
  184. #define numPhoneFields        (lastPhoneField - firstPhoneField + 1)
  185. #define numPhoneLabelsStoredFirst    numPhoneFields
  186. #define numPhoneLabelsStoredSecond    (numPhoneLabels - numPhoneLabelsStoredFirst)
  187.  
  188. #define firstRenameableLabel    custom1
  189. #define lastRenameableLabel    custom4
  190. #define lastLabel                    (addressFieldsCount + numPhoneLabelsStoredSecond)
  191.  
  192. #define IsPhoneLookupField(p)    (addrLookupWork <= (p) && (p) <= addrLookupMobile)
  193.  
  194.  
  195. typedef union {
  196.     struct {
  197.         unsigned reserved:8;
  198.         unsigned displayPhoneForList:4;    // The phone displayed for the list view 0 - 4
  199.         unsigned phone5:4;                // Which phone (home, work, car, ...)
  200.         unsigned phone4:4;
  201.         unsigned phone3:4;
  202.         unsigned phone2:4;
  203.         unsigned phone1:4;
  204.     } phones;
  205.     UInt32 phoneBits;
  206. } AddrOptionsType;
  207.  
  208.  
  209.  
  210. // AddrDBRecord.
  211. //
  212. // This is the unpacked record form as used by the app.  Pointers are 
  213. // either NULL or point to strings elsewhere on the card.  All strings 
  214. // are null character terminated.
  215.  
  216. typedef struct {
  217.     AddrOptionsType    options;        // Display by company or by name
  218.     Char *            fields[addressFieldsCount];
  219. } AddrDBRecordType;
  220.  
  221. typedef AddrDBRecordType *AddrDBRecordPtr;
  222.  
  223.  
  224. // AddrPackedDBRecord
  225. //
  226. // Immediately following this structure are 0 - 15 data strings.  Each string
  227. // is present ONLY if the appropriate flag is set in the AddrDBRecordFlags.
  228. // Each string is in the same order as in AddrDBRecordFlags.
  229.  
  230. // typedef {
  231. //        AddrOptionsType     options;        // Display by company or by name
  232. //        AddrDBRecordFlags   flags;
  233. //        UInt8        companyFieldOffset;
  234. //        char                firstField;
  235. // } AddrPackedDBRecord;
  236.  
  237.  
  238. // The labels for phone fields are stored specially.  Each phone field
  239. // can use one of eight labels.  Part of those eight labels are stored
  240. // where the phone field labels are.  The remainder (phoneLabelsStoredAtEnd)
  241. // are stored after the labels for all the fields.
  242.  
  243. typedef char addressLabel[addrLabelLength];
  244.  
  245.  
  246. typedef struct {
  247.     UInt16                renamedCategories;    // bitfield of categories with a different name
  248.     char                     categoryLabels[dmRecNumCategories][dmCategoryLength];
  249.     UInt8                 categoryUniqIDs[dmRecNumCategories];
  250.     UInt8                    lastUniqID;    // Uniq IDs generated by the device are between
  251.                                             // 0 - 127.  Those from the PC are 128 - 255.
  252.     UInt8                    reserved1;    // from the compiler word aligning things
  253.     UInt16                reserved2;
  254.     AddrDBFieldLabelsDirtyFlags dirtyFieldLabels;
  255.     addressLabel         fieldLabels[addrNumFields + numPhoneLabelsStoredSecond];
  256.     CountryType         country;        // Country the database (labels) is formatted for
  257.     UInt8                 reserved;
  258.     AddrDBMisc            misc;
  259. } AddrAppInfoType;
  260.  
  261. typedef AddrAppInfoType *AddrAppInfoPtr;
  262.  
  263.  
  264. #define GetPhoneLabel(r, p)    (((r)->options.phoneBits >> (((p) - firstPhoneField) << 2)) & 0xF)
  265.  
  266. #define SetPhoneLabel(r, p, pl)    ((r)->options.phoneBits = ((r)->options.phoneBits & ~((UInt32) 0x0000000F << (((p) - firstPhoneField) << 2))) | ((UInt32) pl << (((p) - firstPhoneField) << 2)))
  267.  
  268.  
  269. #ifdef __cplusplus
  270. extern "C" {
  271. #endif
  272.  
  273.  
  274. Err                AddrGetRecord(DmOpenRef dbP, UInt16 index, AddrDBRecordPtr recordP, 
  275.                         MemHandle *recordH);
  276.     
  277. Err                 AddrNewRecord(DmOpenRef dbP, AddrDBRecordPtr r, UInt16 *index);
  278.  
  279. Err                 AddrChangeRecord(DmOpenRef dbP, UInt16 *index, AddrDBRecordPtr r, 
  280.                         AddrDBRecordFlags changedFields);
  281.  
  282. Err                 AddrChangeSortOrder(DmOpenRef dbP, Boolean sortByCompany);
  283.  
  284. AddrAppInfoPtr    AddrAppInfoGetPtr(DmOpenRef dbP);
  285.  
  286. Err                 AddrAppInfoInit(DmOpenRef dbP);
  287.  
  288. //void                 AddrChangeCountry(AddrAppInfoPtr appInfoP);
  289.  
  290. void                 AddrSetFieldLabel(DmOpenRef dbP, UInt16 fieldNum, Char *fieldLabel);
  291.  
  292. Boolean             AddrLookupString(DmOpenRef dbP, Char *key, 
  293.                         Boolean sortByCompany, UInt16 category, UInt16 *recordP, 
  294.                         Boolean *completeMatch,Boolean masked);
  295.  
  296. Boolean            AddrLookupSeekRecord (DmOpenRef dbP, UInt16 *indexP, 
  297.                         Int16 *phoneP, Int16 offset, Int16 direction, 
  298.                         AddressLookupFields field1, AddressLookupFields field2, 
  299.                         AddressFields lookupFieldMap[]);
  300.  
  301. Boolean            AddrLookupLookupString(DmOpenRef dbP, Char *key, 
  302.                         Boolean sortByCompany, AddressLookupFields field1, 
  303.                         AddressLookupFields field2, UInt16 *recordP, Int16 *phoneP, 
  304.                         AddressFields lookupFieldMap[], 
  305.                         Boolean *completeMatch, Boolean *uniqueMatch);
  306.  
  307. Boolean             RecordContainsData (AddrDBRecordPtr recordP);
  308.  
  309. Err                 AddrGetDatabase (DmOpenRef *addrPP, UInt16 mode);
  310.  
  311. #ifdef __cplusplus
  312. }
  313. #endif
  314.  
  315.  
  316. #endif
  317.  
  318.