+#include "webserver.h"
+#include "calendar.h"
+
+CtxType CTX_VCARD = CTX_NONE;
+CtxType CTX_VCARD_LIST = CTX_NONE;
+CtxType CTX_VCARD_TYPE = CTX_NONE;
+long VCEnumCounter = 0;
+
+typedef enum _VCStrEnum {
+ FlatString,
+ StringCluster,
+ PhoneNumber,
+ EmailAddr,
+ Address,
+ Street,
+ Number,
+ AliasFor,
+ Base64BinaryAttachment,
+ UnKnown,
+ TerminateList
+}VCStrEnum;
+typedef struct vcField vcField;
+struct vcField {
+ ConstStr STR;
+ VCStrEnum Type;
+ vcField *Sub;
+ long cval;
+ long parentCVal;
+ ConstStr Name;
+};
+
+vcField VCStr_Ns [] = {
+ {{HKEY("last")}, FlatString, NULL, 0, 0, {HKEY("Last Name")}},
+ {{HKEY("first")}, FlatString, NULL, 0, 0, {HKEY("First Name")}},
+ {{HKEY("middle")}, FlatString, NULL, 0, 0, {HKEY("Middle Name")}},
+ {{HKEY("prefix")}, FlatString, NULL, 0, 0, {HKEY("Prefix")}},
+ {{HKEY("suffix")}, FlatString, NULL, 0, 0, {HKEY("Suffix")}},
+ {{HKEY("")}, TerminateList, NULL, 0, 0, {HKEY("")}}
+};
+
+vcField VCStr_Addrs [] = {
+ {{HKEY("POBox")}, Address, NULL, 0, 0, {HKEY("PO box")}},
+ {{HKEY("extadr")}, Address, NULL, 0, 0, {HKEY("Address")}},
+ {{HKEY("street")}, Address, NULL, 0, 0, {HKEY("")}},
+ {{HKEY("city")}, Address, NULL, 0, 0, {HKEY("City")}},
+ {{HKEY("state")}, Address, NULL, 0, 0, {HKEY("State")}},
+ {{HKEY("zip")}, Address, NULL, 0, 0, {HKEY("ZIP code")}},
+ {{HKEY("country")}, Address, NULL, 0, 0, {HKEY("Country")}},
+ {{HKEY("")}, TerminateList, NULL, 0, 0, {HKEY("")}}
+};
+
+vcField VCStrE [] = {
+ {{HKEY("version")}, Number, NULL, 0, 0, {HKEY("")}},
+ {{HKEY("rev")}, Number, NULL, 0, 0, {HKEY("")}},
+ {{HKEY("label")}, FlatString, NULL, 0, 0, {HKEY("")}},
+ {{HKEY("uid")}, FlatString, NULL, 0, 0, {HKEY("")}},
+ {{HKEY("n")}, StringCluster, VCStr_Ns, 0, 0, {HKEY("")}}, /* N is name, but only if there's no FN already there */
+ {{HKEY("fn")}, FlatString, NULL, 0, 0, {HKEY("")}}, /* FN (full name) is a true 'display name' field */
+ {{HKEY("title")}, FlatString, NULL, 0, 0, {HKEY("Title:")}},
+ {{HKEY("org")}, FlatString, NULL, 0, 0, {HKEY("Organization:")}},/* organization */
+ {{HKEY("email")}, EmailAddr, NULL, 0, 0, {HKEY("E-mail:")}},
+ {{HKEY("tel")}, PhoneNumber, NULL, 0, 0, {HKEY("Telephone:")}},
+ {{HKEY("adr")}, StringCluster, VCStr_Addrs, 0, 0, {HKEY("Address:")}},
+ {{HKEY("photo")}, Base64BinaryAttachment, NULL, 0, 0, {HKEY("Photo:")}},
+ {{HKEY("tel;home")}, PhoneNumber, NULL, 0, 0, {HKEY(" (home)")}},
+ {{HKEY("tel;work")}, PhoneNumber, NULL, 0, 0, {HKEY(" (work)")}},
+ {{HKEY("tel;fax")}, PhoneNumber, NULL, 0, 0, {HKEY(" (fax)")}},
+ {{HKEY("tel;cell")}, PhoneNumber, NULL, 0, 0, {HKEY(" (cell)")}},
+ {{HKEY("email;internet")}, EmailAddr, NULL, 0, 0, {HKEY("E-mail:")}},
+ {{HKEY("UNKNOWN")}, UnKnown, NULL, 0, 0, {HKEY("")}},
+ {{HKEY("")}, TerminateList, NULL, 0, 0, {HKEY("")}}
+};
+
+ConstStr VCStr [] = {
+ {HKEY("")},
+ {HKEY("n")}, /* N is name, but only if there's no FN already there */
+ {HKEY("fn")}, /* FN (full name) is a true 'display name' field */
+ {HKEY("title")}, /* title */
+ {HKEY("org")}, /* organization */
+ {HKEY("email")},
+ {HKEY("tel")},
+ {HKEY("work")},
+ {HKEY("home")},
+ {HKEY("cell")},
+ {HKEY("adr")},
+ {HKEY("photo")},
+ {HKEY("version")},
+ {HKEY("rev")},
+ {HKEY("label")},
+ {HKEY("uid")}
+};