00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _MAPIHD_H_
00019 #define _MAPIHD_H_
00020
00021 #include <qmemarray.h>
00022
00023 #include "pab_xxport.h"
00024
00025 #define T_MS_ARRAY 0x1100 // Some sort of array
00026 #define T_MS_STRING ((unsigned long) 0x1e) // definitely a string
00027
00028 typedef unsigned long adr_t;
00029 typedef unsigned long content_t;
00030 typedef unsigned short pabsize_t;
00031 typedef unsigned char byte_t;
00032 typedef unsigned short word_t;
00033 typedef byte_t byte;
00034
00035 class pab;
00036
00037 class pabrec {
00038 private:
00039 char entry[1024];
00040 byte *_mem;
00041 word_t m_N;
00042 word_t *m_W;
00043 public:
00044 pabrec(pab &);
00045 ~pabrec();
00046 public:
00047 word_t N(void) { return m_N; }
00048 word_t operator[](int i) { return m_W[i]; }
00049 const char *getEntry(int i);
00050 public:
00051 content_t read(word_t offset);
00052 };
00053
00054 typedef enum {
00055 pr_unknown,pr_notused,
00056 pr_givenname,pr_email,
00057 pr_firstname,pr_additionalname,pr_lastname,pr_title,
00058 pr_address,pr_town,pr_state,pr_zip,pr_country,
00059 pr_organization,pr_department,pr_subdep,pr_job,
00060 pr_tel,pr_fax,pr_modem,pr_mobile,pr_url,pr_talk,
00061 pr_notes,pr_birthday
00062 }
00063 pabrec_entry;
00064
00065 class mapitag_t
00066 {
00067 friend bool operator < (mapitag_t &,mapitag_t &);
00068 friend bool operator > (mapitag_t &,mapitag_t &);
00069 friend bool operator == (mapitag_t &,mapitag_t &);
00070 private:
00071 word_t _tag;
00072 word_t _type;
00073 content_t _order;
00074 public:
00075 mapitag_t(content_t tag,content_t order) { _tag=(word_t) tag;_type=(word_t) (tag>>16);_order=order; }
00076 mapitag_t() { _tag=0;_type=0;_order=0; }
00077 public:
00078 mapitag_t & operator = (mapitag_t & t) { _tag=t._tag;_type=t._type;_order=t._order;return *this; }
00079 public:
00080 bool isUsed(void) { return (_type==T_MS_STRING || (_type&T_MS_ARRAY)!=0) && _order!=0; }
00081 word_t literal(void) { return _tag; }
00082 content_t order(void) { return _order; }
00083 pabrec_entry matchTag(void);
00084 };
00085
00086 bool operator < (mapitag_t & a,mapitag_t & b);
00087 bool operator > (mapitag_t & a,mapitag_t & b);
00088 bool operator == (mapitag_t & a,mapitag_t & b);
00089
00090 class pabfields_t
00091 {
00092 private:
00093 QMemArray<mapitag_t> tags,context_tags;
00094 pabrec *m_R;
00095 QString givenName,email,
00096 title,firstName,additionalName,lastName,
00097 address,town,state,zip,country,
00098 organization,department,subDep,job,
00099 tel,fax,modem,mobile,homepage,talk,
00100 comment,birthday;
00101 bool OK;
00102 private:
00103 bool isUsed(int k);
00104 pabrec_entry isWhat(int k);
00105 word_t literal(int k);
00106 content_t order(int k);
00107 public:
00108 pabfields_t(pabrec & R, QWidget *parent);
00109 public:
00110 KABC::Addressee get( );
00111 bool isOK(void) { return OK; }
00112 bool isUsable(void) { return givenName!=""; }
00113 };
00114
00115
00116 #endif
00117