1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
#ifndef _DATABASE_H
#define _DATABASE_H
#define MAX_EMAILS 4
#define MAX_EMAIL_LEN 80
#define MAX_EMAILSTR_LEN (MAX_EMAILS*MAX_EMAIL_LEN + MAX_EMAILS + 1)
#define MAX_FIELD_LEN 81
enum {
NAME,
EMAIL,
ADDRESS,
ADDRESS2,
CITY,
STATE,
ZIP,
COUNTRY,
PHONE,
WORKPHONE,
FAX,
MOBILEPHONE,
NICK,
URL,
NOTES,
CUSTOM1,
CUSTOM2,
CUSTOM3,
CUSTOM4,
CUSTOM5,
ITEM_FIELDS /* this is the last */
};
#define LAST_FIELD (ITEM_FIELDS - 1)
#define CUSTOM_MIN CUSTOM1
#define CUSTOM_MAX CUSTOM5
typedef char * list_item[ITEM_FIELDS];
#define MAX_FIELDNAME_LEN 21
struct abook_field {
char *name;
char *key;
int tab;
};
enum {
ENUM_ALL,
ENUM_SELECTED
};
struct db_enumerator {
int item;
int mode; /* warning: read only */
};
int find_field(const char *field);
int parse_database(FILE *in);
int write_database(FILE *out, struct db_enumerator e);
int load_database(char *filename);
int save_database();
void close_database();
int add_item2database(list_item item);
void free_list_item(list_item item);
void remove_selected_items();
void sort_surname();
void sort_by_field(int field);
char *get_surname(char *s);
int find_item(char *str, int start, int search_fields[]);
int is_selected(int item);
int is_valid_item(int item);
int real_db_enumerate_items(struct db_enumerator e);
struct db_enumerator init_db_enumerator(int mode);
int change_custom_field_name(const char *name, int n);
#define LAST_ITEM (items - 1)
#define itemcpy(dest, src) memmove(dest, src, sizeof(list_item))
#define split_emailstr(item, emails) do {\
int _i,_j,_k,len; \
memset(&emails, 0, sizeof(emails) ); \
len = strlen(database[item][EMAIL]); \
for( _i=0,_j=0, _k=0; _i < len && _j < MAX_EMAILS; _i++ ) { \
if( database[item][EMAIL][_i] ==',' ) { \
_j++; \
_k = 0; \
} else \
if( _k < MAX_EMAIL_LEN -1 ) \
emails[_j][_k++] = database[item][EMAIL][_i]; \
} \
} while(0)
#define have_multiple_emails(item) \
strchr(database[item][EMAIL], ',')
#define db_enumerate_items(e) \
while( -1 != (e.item = real_db_enumerate_items(e)))
#endif
|