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
27 #define LAST_FIELD NOTES
29 #define ITEM_FIELDS (LAST_FIELD+1)
31 typedef char * list_item[ITEM_FIELDS];
44 struct db_enumerator {
46 int mode; /* boolean */ /* warning: read only */
49 #define db_enumerate_items(e) \
50 while( -1 != (e.item = real_db_enumerate_items(e)))
52 int parse_database(FILE *in);
53 int write_database(FILE *out, struct db_enumerator e);
54 int load_database(char *filename);
56 void close_database();
57 int add_item2database(list_item item);
58 void free_list_item(list_item item);
59 void remove_selected_items();
62 char *get_surname(char *s);
63 int find_item(char *str, int start);
64 int is_selected(int item);
66 int real_db_enumerate_items(struct db_enumerator e);
67 struct db_enumerator init_db_enumerator(int mode);
69 #define LAST_ITEM (items - 1)
71 #define itemcpy(dest, src) memmove(dest, src, sizeof(list_item))
73 #define split_emailstr(item, emails) do {\
75 memset(&emails, 0, sizeof(emails) ); \
76 len = strlen(database[item][EMAIL]); \
77 for( _i=0,_j=0, _k=0; _i < len && _j < 4; _i++ ) { \
78 if( database[item][EMAIL][_i] ==',' ) { \
82 if( _k < MAX_EMAIL_LEN -1 ) \
83 emails[_j][_k++] = database[item][EMAIL][_i]; \
87 #define have_multiple_emails(item) \
88 strchr(database[item][EMAIL], ',')