+int VCEnumCounter = 0;
+
+typedef enum _VCStrEnum {
+ FlatString,
+ StringCluster,
+ PhoneNumber,
+ EmailAddr,
+ Street,
+ Number,
+ AliasFor,
+ Base64BinaryAttachment,
+ TerminateList
+}VCStrEnum;
+typedef struct vcField vcField;
+struct vcField {
+ ConstStr STR;
+ VCStrEnum Type;
+ vcField *Sub;
+ int cval;
+};
+
+vcField VCStr_Ns [] = {
+ {{HKEY("last")}, FlatString, NULL, 0},
+ {{HKEY("first")}, FlatString, NULL, 0},
+ {{HKEY("middle")}, FlatString, NULL, 0},
+ {{HKEY("prefix")}, FlatString, NULL, 0},
+ {{HKEY("suffix")}, FlatString, NULL, 0},
+ {{HKEY("")}, TerminateList, NULL, 0}
+};
+
+vcField VCStr_Addrs [] = {
+ {{HKEY("POBox")}, FlatString, NULL, 0},
+ {{HKEY("address")}, FlatString, NULL, 0},
+ {{HKEY("address2")}, FlatString, NULL, 0},
+ {{HKEY("city")}, FlatString, NULL, 0},
+ {{HKEY("state")}, FlatString, NULL, 0},
+ {{HKEY("zip")}, FlatString, NULL, 0},
+ {{HKEY("country")}, FlatString, NULL, 0},
+ {{HKEY("")}, TerminateList, NULL, 0}
+};
+
+vcField VCStrE [] = {
+ {{HKEY("n")}, StringCluster, VCStr_Ns, 0}, /* N is name, but only if there's no FN already there */
+ {{HKEY("fn")}, FlatString, NULL, 0}, /* FN (full name) is a true 'display name' field */
+ {{HKEY("title")}, FlatString, NULL, 0}, /* title */
+ {{HKEY("org")}, FlatString, NULL, 0}, /* organization */
+ {{HKEY("email")}, EmailAddr, NULL, 0},
+ {{HKEY("tel")}, PhoneNumber, NULL, 0},
+ {{HKEY("adr")}, StringCluster, VCStr_Addrs, 0},
+ {{HKEY("photo")}, Base64BinaryAttachment, NULL, 0},
+ {{HKEY("version")}, Number, NULL, 0},
+ {{HKEY("rev")}, Number, NULL, 0},
+ {{HKEY("label")}, FlatString, NULL, 0},
+ {{HKEY("uid")}, FlatString, NULL, 0},
+ {{HKEY("")}, TerminateList, NULL, 0}
+};