]> git.deb.at Git - pkg/abook.git/blob - database.h
Imported Upstream version 0.5.4
[pkg/abook.git] / database.h
1 #ifndef _DATABASE_H
2 #define _DATABASE_H
3
4
5 #define MAX_EMAILS              4
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
9
10 enum {
11         NAME,
12         EMAIL,
13         ADDRESS,
14         ADDRESS2,
15         CITY,
16         STATE,
17         ZIP,
18         COUNTRY,
19         PHONE,
20         WORKPHONE,
21         FAX,
22         MOBILEPHONE,
23         NICK,
24         URL,
25         NOTES,
26         CUSTOM1,
27         CUSTOM2,
28         CUSTOM3,
29         CUSTOM4,
30         CUSTOM5,
31         ITEM_FIELDS /* this is the last */
32 };
33
34 #define LAST_FIELD              (ITEM_FIELDS - 1)
35
36 #define CUSTOM_MIN              CUSTOM1
37 #define CUSTOM_MAX              CUSTOM5
38
39 typedef char *list_item[ITEM_FIELDS];
40
41 #define MAX_FIELDNAME_LEN       21
42
43 struct abook_field {
44         char *name;
45         char *key;
46         int tab;
47 };
48
49 enum {
50         ENUM_ALL,
51         ENUM_SELECTED
52 };
53
54 struct db_enumerator {
55         int item;
56         int mode; /* warning: read only */
57 };
58
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);
63 int             save_database();
64 void            close_database();
65 int             add_item2database(list_item item);
66 void            free_list_item(list_item item);
67 void            remove_selected_items();
68 void            sort_surname();
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);
74
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);
78
79 #define LAST_ITEM       (items - 1)
80
81 #define itemcpy(dest, src)      memmove(dest, src, sizeof(list_item))
82
83 #define split_emailstr(item, emails) do {\
84         int _i,_j,_k,len; \
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] ==',' ) { \
89                         _j++; \
90                         _k = 0; \
91                 } else \
92                         if( _k < MAX_EMAIL_LEN -1 ) \
93                                 emails[_j][_k++] = database[item][EMAIL][_i]; \
94         } \
95 } while(0)
96
97 #define have_multiple_emails(item) \
98         strchr(database[item][EMAIL], ',')
99
100 #define db_enumerate_items(e) \
101         while( -1 != (e.item = real_db_enumerate_items(e)))
102
103 #endif