static int html_export_database(FILE *out, struct db_enumerator e);
static int pine_export_database(FILE *out, struct db_enumerator e);
static int csv_export_database(FILE *out, struct db_enumerator e);
+static int palm_export_database(FILE *out, struct db_enumerator e);
static int gcrd_export_database(FILE *out, struct db_enumerator e);
static int mutt_alias_export(FILE *out, struct db_enumerator e);
static int elm_alias_export(FILE *out, struct db_enumerator e);
{ "pine", "pine addressbook", pine_export_database },
{ "gcrd", "GnomeCard (VCard) addressbook", gcrd_export_database },
{ "csv", "comma separated values", csv_export_database },
+ { "palmcsv", "Palm comma separated values", palm_export_database},
{ "elm", "elm alias", elm_alias_export },
{ "text", "plain text", text_export_database },
{ "spruce", "Spruce address book", spruce_export_database },
static void html_export_write_head(FILE *out, int extra_column);
static void html_export_write_tail(FILE *out);
+extern int extra_column;
+
static int
html_export_database(FILE *out, struct db_enumerator e)
{
char tmp[MAX_EMAILSTR_LEN];
- int extra_column = options_get_int("extra_column");
if( items < 1 )
return 2;
*/
/*
- * csv addressbook export filter
+ * csv addressbook export filters
*/
+#define CSV_LAST (-2)
+#define CSV_UNDEFINED (-3)
+#define CSV_SPECIAL(X) (-4 - (X))
+#define CSV_IS_SPECIAL(X) ((X) <= -4)
+#define CSV_GET_SPECIAL(X) (-4 + (X))
+
+static int
+csv_export_common(FILE *out, struct db_enumerator e,
+ int fields[], void (*special_func)(FILE *, int, int))
+{
+ int i;
+
+ db_enumerate_items(e) {
+ for(i = 0; fields[i] != CSV_LAST; i++) {
+ if(fields[i] == CSV_UNDEFINED)
+ fprintf(out, "\"\"");
+ else if(CSV_IS_SPECIAL(fields[i])) {
+ if(special_func)
+ (*special_func)(out, e.item, fields[i]);
+ } else
+ /*fprintf(out,(
+ strchr(safe_str(database[e.item][fields[i]]), ',') ||
+ strchr(safe_str(database[e.item][fields[i]]), '\"')) ?
+ "\"%s\"" : "%s",
+ safe_str(database[e.item][fields[i]])
+ );*/
+ fprintf(out, "\"%s\"",
+ safe_str(database[e.item][fields[i]]));
+
+ if(fields[i + 1] != CSV_LAST)
+ fputc(',', out);
+ }
+ fputc('\n', out);
+ }
+
+ return 0;
+}
+
static int
csv_export_database(FILE *out, struct db_enumerator e)
{
- int j;
int csv_export_fields[] = {
NAME,
EMAIL,
PHONE,
NOTES,
NICK,
- -1
+ CSV_LAST
};
- db_enumerate_items(e) {
- for(j = 0; csv_export_fields[j] >= 0; j++) {
- fprintf(out,(
- strchr(safe_str(database[e.item][csv_export_fields[j]]), ',') ||
- strchr(safe_str(database[e.item][csv_export_fields[j]]), '\"')
- ) ?
- "\"%s\"" : "%s",
- safe_str(database[e.item][csv_export_fields[j]])
- );
- if(csv_export_fields[j+1] >= 0)
- fputc(',', out);
- }
- fputc('\n', out);
+ csv_export_common(out, e, csv_export_fields, NULL);
+
+ return 0;
+}
+
+/*
+ * palm csv
+ */
+
+#define PALM_CSV_NAME CSV_SPECIAL(0)
+#define PALM_CSV_END CSV_SPECIAL(1)
+#define PALM_CSV_CAT CSV_SPECIAL(2)
+
+static void
+palm_split_and_write_name(FILE *out, char *name)
+{
+ char *p;
+
+ assert(name);
+
+ if ( (p = strchr(name, ' ')) ) {
+ /*
+ * last name first
+ */
+ fprintf(out, "\"%s\",\"" , p + 1);
+ fwrite((void *)name, p - name, sizeof(char), out);
+ fputc('\"', out);
+ } else {
+ fprintf(out, "\"%s\"", safe_str(name));
}
-
+}
+static void
+palm_csv_handle_specials(FILE *out, int item, int field)
+{
+ switch(field) {
+ case PALM_CSV_NAME:
+ palm_split_and_write_name(out, database[item][NAME]);
+ break;
+ case PALM_CSV_CAT:
+ fprintf(out, "\"abook\"");
+ break;
+ case PALM_CSV_END:
+ fprintf(out, "\"0\"");
+ break;
+ default:
+ assert(0);
+ }
+}
+
+static int
+palm_export_database(FILE *out, struct db_enumerator e)
+{
+ int palm_export_fields[] = {
+ PALM_CSV_NAME, /* LASTNAME, FIRSTNAME */
+ CSV_UNDEFINED, /* TITLE */
+ CSV_UNDEFINED, /* COMPANY */
+ WORKPHONE, /* WORK PHONE */
+ PHONE, /* HOME PHONE */
+ FAX, /* FAX */
+ MOBILEPHONE, /* OTHER */
+ EMAIL, /* EMAIL */
+ ADDRESS, /* ADDRESS */
+ CITY, /* CITY */
+ STATE, /* STATE */
+ ZIP, /* ZIP */
+ COUNTRY, /* COUNTRY */
+ NICK, /* DEFINED 1 */
+ URL, /* DEFINED 2 */
+ CSV_UNDEFINED, /* DEFINED 3 */
+ CSV_UNDEFINED, /* DEFINED 4 */
+ NOTES, /* NOTE */
+ PALM_CSV_END, /* "0" */
+ PALM_CSV_CAT, /* CATEGORY */
+ CSV_LAST
+ };
+
+ csv_export_common(out, e, palm_export_fields, palm_csv_handle_specials);
return 0;
}
/*
- * end of csv export filter
+ * end of csv export filters
*/
-
/*
* GnomeCard (VCard) addressbook export filter
*/
char emails[MAX_EMAILS][MAX_EMAIL_LEN];
int j;
char *realname = get_real_name();
- char *style = options_get_str("address_style");
+ char *style = opt_get_str(STR_ADDRESS_STYLE);
fprintf(out,
"-----------------------------------------\n%s's address book\n"