/* *@@sourcefile vcard.h: * header file for vcard.c. See remarks there. * * Note: Version numbering in this file relates to XWorkplace version * numbering. * *@@include #include *@@include #include "helpers\vcard.h" */ /* Copyright (C) 2002 Ulrich M”ller. * This file is part of the "XWorkplace helpers" source package. * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, in version 2 as it comes in the * "COPYING" file of the XWorkplace main distribution. * This program 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 General Public License for more details. */ #if __cplusplus extern "C" { #endif #ifndef VCARD_HEADER_INCLUDED #define VCARD_HEADER_INCLUDED /* ****************************************************************** * * Strings * ********************************************************************/ // DECLARE_VCARD_STRING is a handy macro which saves us from // keeping two string lists in both the .h and the .c file. // If this include file is included from the .c file, the // string is defined as a global variable. Otherwise // it is only declared as "extern" so other files can // see it. #ifdef INCLUDE_VCARD_PRIVATE #define DECLARE_VCARD_STRING(str, def) const char *str = def #else #define DECLARE_VCARD_STRING(str, def) extern const char *str; #endif // +//ISBN 1-887687-00-9::versit::PDI//vCard DECLARE_VCARD_STRING(VCF_FORMAL_IDENTIFIER, "+//ISBN 1-887687-00-9::versit::PDI//vCard"); // common parameters DECLARE_VCARD_STRING(VCFPARAM_ENCODING, "ENCODING"); // either BASE64, QUOTED-PRINTABLE, 8BIT DECLARE_VCARD_STRING(VCFPARAM_CHARSET, "CHARSET"); // ADR;CHARSET=ISO-8859-8:... DECLARE_VCARD_STRING(VCFPARAM_LANGUAGE, "LANGUAGE"); // ADR;LANGUAGE=fr-CA:... DECLARE_VCARD_STRING(VCFPARAM_VALUE, "VALUE"); // INLINE (default) // CONTENT-ID or CID (in separate MIME entity) // URL // formatted name (what is displayed) DECLARE_VCARD_STRING(VCFPROP_FN, "FN"); // name DECLARE_VCARD_STRING(VCFPROP_N, "N"); #define VCF_VALUE_INDEX_N_FAMILY 0 #define VCF_VALUE_INDEX_N_GIVEN 1 // first name #define VCF_VALUE_INDEX_N_ADDITIONAL 2 // additional (middle) names #define VCF_VALUE_INDEX_N_PREFIX 3 // prefix (Dr.) #define VCF_VALUE_INDEX_N_SUFFIX 4 // suffix // PHOTO DECLARE_VCARD_STRING(VCFPROP_PHOTO, "PHOTO"); // parameters: DECLARE_VCARD_STRING(VCFPARAM_TYPE, "TYPE"); // one of GIF, CGM, WMF, BMP, MET, PMB, DIB, // PICT, TIFF, PS, PDF, JPEG, MPEG, MPEG2, // AVI, QTIME // birthday DECLARE_VCARD_STRING(VCFPROP_BDAY, "BDAY"); // delivery address DECLARE_VCARD_STRING(VCFPROP_ADR, "ADR"); // parameters: // DECLARE_VCARD_STRING(VCFPARAM_TYPE, "TYPE"); // one or several of: DECLARE_VCARD_STRING(VCF_TYPE_ADR_DOM, "DOM"); // domestic DECLARE_VCARD_STRING(VCF_TYPE_ADR_INTL, "INTL"); // international address DECLARE_VCARD_STRING(VCF_TYPE_ADR_POSTAL, "POSTAL"); // postal delivery address DECLARE_VCARD_STRING(VCF_TYPE_ADR_PARCEL, "PARCEL"); // parcel delivery address DECLARE_VCARD_STRING(VCF_TYPE_ADR_HOME, "HOME"); // home delivery address DECLARE_VCARD_STRING(VCF_TYPE_ADR_WORK, "WORK"); // work delivery address // default is INTL, WORK, POSTAL, PARCEL // ADR;DOM;HOME:P.O. Box 101;Suite 101;123 Main Street;Any Town;CA;91921-1234; #define VCF_VALUE_INDEX_ADR_POSTOFFICE 0 // post office, e.g. "P.O. Box 101" #define VCF_VALUE_INDEX_ADR_EXTENDED 1 // "Suite 101" #define VCF_VALUE_INDEX_ADR_STREET 2 #define VCF_VALUE_INDEX_ADR_LOCALITY 3 // town #define VCF_VALUE_INDEX_ADR_REGION 4 // CA #define VCF_VALUE_INDEX_ADR_POSTALCODE 5 // zip code #define VCF_VALUE_INDEX_ADR_COUNTRY 6 // country // formatted delivery label DECLARE_VCARD_STRING(VCFPROP_LABEL, "LABEL"); // parameters: TYPE as with ADR // telephone DECLARE_VCARD_STRING(VCFPROP_TEL, "TEL"); // parameters: // DECLARE_VCARD_STRING(VCFPARAM_TYPE, "TYPE"); // one or several of: DECLARE_VCARD_STRING(VCF_TYPE_TEL_PREF, "PREF"); // preferred no. DECLARE_VCARD_STRING(VCF_TYPE_TEL_WORK, "WORK"); // work no. DECLARE_VCARD_STRING(VCF_TYPE_TEL_HOME, "HOME"); // home no. DECLARE_VCARD_STRING(VCF_TYPE_TEL_VOICE, "VOICE"); // voice no. (default) DECLARE_VCARD_STRING(VCF_TYPE_TEL_FAX, "FAX"); // fax no. DECLARE_VCARD_STRING(VCF_TYPE_TEL_MSG, "MSG"); // messaging service DECLARE_VCARD_STRING(VCF_TYPE_TEL_CELL, "CELL"); // cell phone DECLARE_VCARD_STRING(VCF_TYPE_TEL_PAGER, "PAGER"); // pager DECLARE_VCARD_STRING(VCF_TYPE_TEL_BBS, "BBS"); // bulletin board service DECLARE_VCARD_STRING(VCF_TYPE_TEL_MODEM, "MODEM"); // modem DECLARE_VCARD_STRING(VCF_TYPE_TEL_CAR, "CAR"); // car phone DECLARE_VCARD_STRING(VCF_TYPE_TEL_ISDN, "ISDN"); // isdn DECLARE_VCARD_STRING(VCF_TYPE_TEL_VIDEO, "VIDEO"); // video phone // default is VOICE only // EMAIL DECLARE_VCARD_STRING(VCFPROP_EMAIL, "EMAIL"); // parameters: // DECLARE_VCARD_STRING(VCFPARAM_TYPE, "TYPE"); // one or several of: DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_AOL, "AOL"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_APPLELINK, "AppleLink"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_ATTMAIL, "ATTMail"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_CIS, "CIS"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_EWORLD, "eWorld"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_INTERNET, "INTERNET"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_IBMMAIL, "IBMMail"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_MCIMAIL, "MCIMail"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_POWERSHARE, "POWERSHARE"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_PRODIGY, "PRODIGY"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_TLX, "TLX"); DECLARE_VCARD_STRING(VCF_TYPE_EMAIL_X400, "X400"); // MAILER software DECLARE_VCARD_STRING(VCFPROP_MAILER, "MAILER"); // timezone DECLARE_VCARD_STRING(VCFPROP_TZ, "TZ"); // geographic position DECLARE_VCARD_STRING(VCFPROP_GEO, "GEO"); // job title DECLARE_VCARD_STRING(VCFPROP_TITLE, "TITLE"); // business role DECLARE_VCARD_STRING(VCFPROP_ROLE, "ROLE"); // company logo DECLARE_VCARD_STRING(VCFPROP_LOGO, "LOGO"); // parameters: TYPE as with PHOTO // organization name DECLARE_VCARD_STRING(VCFPROP_ORG, "ORG"); #define VCF_VALUE_INDEX_ORG_NAME 0 // organization name #define VCF_VALUE_INDEX_ORG_UNIT 1 // organization unit (division) // comment DECLARE_VCARD_STRING(VCFPROP_NOTE, "NOTE"); // when vCard was last modified DECLARE_VCARD_STRING(VCFPROP_REV, "REV"); // ISO 8601 // format: REV:19951031T222710 // or REV:1995-10-31T22:27:10Z // sound data DECLARE_VCARD_STRING(VCFPROP_SOUND, "SOUND"); // DECLARE_VCARD_STRING(VCFPARAM_TYPE, "TYPE"); // one of WAVE, PCM, AIFF // where to find up-to-date information DECLARE_VCARD_STRING(VCFPROP_URL, "URL"); // unique vCard identifier DECLARE_VCARD_STRING(VCFPROP_UID, "UID"); // vCard version info (2.1) DECLARE_VCARD_STRING(VCFPROP_VERSION, "VERSION"); // must be "2.1" // public key DECLARE_VCARD_STRING(VCFPROP_KEY, "KEY"); // DECLARE_VCARD_STRING(VCFPARAM_TYPE, "TYPE"); // one of: // -- X509 // -- PGP // X-*: anything starting with X- is an extension /* ****************************************************************** * * Declarations * ********************************************************************/ #ifdef INCLUDE_VCARD_ALL /* *@@ VCFPROPERTY: * */ typedef struct _VCFPROPERTY { XSTRING strProperty; PLINKLIST pllSubList; // if != NULL, nested list of // PROPERTY structs ULONG cParameters; PXSTRING pastrParameters; // array of cParameters XSTRINGs ULONG cValues; PXSTRING pastrValues; // array of cValues XSTRINGs } VCFPROPERTY, *PVCFPROPERTY; #endif /* *@@ VCDATE: * */ typedef struct _VCDATE { UCHAR ucDay, ucMonth; USHORT usYear; } VCDATE, *PVCDATE; /* *@@ VCTIME: * */ typedef struct _VCTIME { UCHAR ucHour, ucMinutes, ucSeconds; } VCTIME, *PVCTIME; /* *@@ VCADDRESS: * */ typedef struct _VCADDRESS { PCSZ apcszAddress[7]; /* #define VCF_VALUE_INDEX_ADR_POSTOFFICE 0 // post office, e.g. "P.O. Box 101" #define VCF_VALUE_INDEX_ADR_EXTENDED 1 // "Suite 101" #define VCF_VALUE_INDEX_ADR_STREET 2 #define VCF_VALUE_INDEX_ADR_LOCALITY 3 // town #define VCF_VALUE_INDEX_ADR_REGION 4 // CA #define VCF_VALUE_INDEX_ADR_POSTALCODE 5 // zip code #define VCF_VALUE_INDEX_ADR_COUNTRY 6 // country */ ULONG fl; #define VCF_ADDRFL_DOM 0x0001 // domestic #define VCF_ADDRFL_INTL 0x0002 // international address #define VCF_ADDRFL_POSTAL 0x0004 // postal delivery address #define VCF_ADDRFL_PARCEL 0x0008 // parcel delivery address #define VCF_ADDRFL_HOME 0x0010 // home delivery address #define VCF_ADDRFL_WORK 0x0020 // work delivery address // default is INTL, WORK, POSTAL, PARCEL } VCADDRESS, *PVCADDRESS; /* *@@ VCLABEL: * */ typedef struct _VCLABEL { PCSZ pcszLabel; ULONG fl; // VCF_ADDRFL_* flags } VCLABEL, *PVCLABEL; /* *@@ VCPHONE: * */ typedef struct _VCPHONE { PCSZ pcszNumber; ULONG fl; #define VCF_PHONEFL_PREF 0x0001 // preferred no. #define VCF_PHONEFL_WORK 0x0002 // work no. #define VCF_PHONEFL_HOME 0x0004 // home no. #define VCF_PHONEFL_VOICE 0x0008 // voice no. (default) #define VCF_PHONEFL_FAX 0x0010 // fax no. #define VCF_PHONEFL_MSG 0x0020 // messaging service #define VCF_PHONEFL_CELL 0x0040 // cell phone #define VCF_PHONEFL_PAGER 0x0080 // pager #define VCF_PHONEFL_BBS 0x0100 // bulletin board service #define VCF_PHONEFL_MODEM 0x0200 // modem #define VCF_PHONEFL_CAR 0x0400 // car phone #define VCF_PHONEFL_ISDN 0x0800 // isdn #define VCF_PHONEFL_VIDEO 0x1000 // video phone } VCPHONE, *PVCPHONE; /* *@@ VCARD: * *@@added V0.9.16 (2002-02-02) [umoeller] */ typedef struct _VCARD { PCSZ pcszFormattedName; PCSZ apcszName[5]; // VCF_VALUE_INDEX_N_FAMILY 0 // VCF_VALUE_INDEX_N_GIVEN 1 // first name // VCF_VALUE_INDEX_N_ADDITIONAL 2 // additional (middle) names // VCF_VALUE_INDEX_N_PREFIX 3 // prefix (Dr.) // VCF_VALUE_INDEX_N_SUFFIX 4 // suffix VCDATE vcdBirthday; ULONG cDeliveryAddresses; PVCADDRESS paDeliveryAddresses; // array of cAddresses VCADDRESS structs ULONG cLabels; PVCLABEL paLabels; ULONG cPhones; PVCPHONE paPhones; PCSZ pcszEmail; PCSZ pcszTimeZone; PCSZ pcszJobTitle; PCSZ pcszBusinessRole; PCSZ pcszOrganizationName, pcszOrganizationUnit; PCSZ pcszURL; VCDATE vcdRevision; VCTIME vctRevision; // private linked list of vCard properties PLINKLIST pll; } VCARD, *PVCARD; APIRET vcfRead(PCSZ pcszFilename, PVCARD *ppvCard); APIRET vcfFree(PVCARD *pphvCard); #endif #if __cplusplus } #endif