6 #define MAX_EMAIL_LEN 80
7 #define MAX_EMAILSTR_LEN (MAX_EMAILS*MAX_EMAIL_LEN + MAX_EMAILS + 1)
8 #define MAX_FIELD_LEN 81
31 ITEM_FIELDS /* this is the last */
34 #define LAST_FIELD (ITEM_FIELDS - 1)
36 #define CUSTOM_MIN CUSTOM1
37 #define CUSTOM_MAX CUSTOM5
39 typedef char *list_item[ITEM_FIELDS];
41 #define MAX_FIELDNAME_LEN 21
54 struct db_enumerator {
56 int mode; /* warning: read only */
59 int find_field(const char *field);
60 int parse_database(FILE *in);
61 int write_database(FILE *out, struct db_enumerator e);
62 int load_database(char *filename);
64 void close_database();
65 int add_item2database(list_item item);
66 void free_list_item(list_item item);
67 void remove_selected_items();
69 void sort_by_field(int field);
70 char *get_surname(char *s);
71 int find_item(char *str, int start, int search_fields[]);
72 int is_selected(int item);
73 int is_valid_item(int item);
75 int real_db_enumerate_items(struct db_enumerator e);
76 struct db_enumerator init_db_enumerator(int mode);
77 int change_custom_field_name(const char *name, int n);
79 #define LAST_ITEM (items - 1)
81 #define itemcpy(dest, src) memmove(dest, src, sizeof(list_item))
83 #define split_emailstr(item, emails) do {\
85 memset(&emails, 0, sizeof(emails) ); \
86 len = strlen(database[item][EMAIL]); \
87 for( _i=0,_j=0, _k=0; _i < len && _j < MAX_EMAILS; _i++ ) { \
88 if( database[item][EMAIL][_i] ==',' ) { \
92 if( _k < MAX_EMAIL_LEN -1 ) \
93 emails[_j][_k++] = database[item][EMAIL][_i]; \
97 #define have_multiple_emails(item) \
98 strchr(database[item][EMAIL], ',')
100 #define db_enumerate_items(e) \
101 while( -1 != (e.item = real_db_enumerate_items(e)))