]> git.deb.at Git - pkg/abook.git/blob - database.h
Mutt groups support
[pkg/abook.git] / database.h
1 #ifndef _DATABASE_H
2 #define _DATABASE_H
3
4 #define MAX_LIST_ITEMS          9
5 #define MAX_EMAIL_LEN           80
6 #define MAX_EMAILSTR_LEN        (MAX_LIST_ITEMS * (MAX_EMAIL_LEN + 1) + 1)
7 #define MAX_FIELD_LEN           81
8
9 enum {
10         NAME = 0, /* important */
11         EMAIL,
12         ADDRESS,
13         ADDRESS2,
14         CITY,
15         STATE,
16         ZIP,
17         COUNTRY,
18         PHONE,
19         WORKPHONE,
20         FAX,
21         MOBILEPHONE,
22         NICK,
23         URL,
24         NOTES,
25         ANNIVERSARY,
26         GROUPS,
27         ITEM_FIELDS /* this is the last */
28 };
29
30 typedef struct {
31         char *key;
32         char *name;
33         int type;
34 } abook_field;
35
36 typedef struct abook_field_list_t {
37         abook_field *field;
38         struct abook_field_list_t *next;
39 } abook_field_list;
40
41 typedef char **list_item;
42
43 enum {
44         FIELD_STRING = 1,
45         FIELD_EMAILS,
46         FIELD_LIST,
47         FIELD_DATE,
48 };
49
50 enum {
51         ENUM_ALL,
52         ENUM_SELECTED
53 };
54
55 struct db_enumerator {
56         int item;
57         int mode; /* warning: read only */
58 };
59
60
61 /*
62  * Field operations
63  */
64 inline int field_id(int i);
65 abook_field *find_standard_field(char *key, int do_declare);
66 abook_field *real_find_field(char *key, abook_field_list *list, int *nb);
67 #define find_field(key, list)           real_find_field(key, list, NULL)
68 #define find_field_number(key, pt_nb)   real_find_field(key, NULL, pt_nb)
69 #define find_declared_field(key)        find_field(key,NULL)
70 void get_field_info(int i, char **key, char **name, int *type);
71 void add_field(abook_field_list **list, abook_field *f);
72 char *declare_new_field(char *key, char *name, char *type, int accept_standard);
73 void init_standard_fields();
74
75 /*
76  * Various database operations
77  */
78 void prepare_database_internals();
79 int parse_database(FILE *in);
80 int load_database(char *filename);
81 int write_database(FILE *out, struct db_enumerator e);
82 int save_database();
83 void remove_selected_items();
84 void sort_surname();
85 void sort_by_field(char *field);
86 void close_database();
87 int add_item2database(list_item item);
88 char *get_surname(char *s);
89 int find_item(char *str, int start, int search_fields[]);
90 int is_selected(int item);
91 int is_valid_item(int item);
92 int last_item();
93 int db_n_items();
94
95 int real_db_enumerate_items(struct db_enumerator e);
96 struct db_enumerator init_db_enumerator(int mode);
97 #define db_enumerate_items(e) \
98         while( -1 != (e.item = real_db_enumerate_items(e)))
99
100 /*
101  * item manipulation
102  */
103 list_item item_create();
104 void item_empty(list_item item);
105 void item_free(list_item *item);
106 void item_copy(list_item dest, list_item src);
107 void item_duplicate(list_item dest, list_item src);
108
109 int item_fput(list_item item, int i, char *val);
110 char *item_fget(list_item item, int i);
111
112 /*
113  * database field read
114  */
115 char *real_db_field_get(int item, int i, int std);
116 #define db_fget(item, i)                real_db_field_get(item, i, 1)
117 #define db_fget_byid(item, i)           real_db_field_get(item, i, 0)
118 #define db_name_get(item)               db_fget(item, NAME)
119 char *db_email_get(int item); /* memory has to be freed by the caller */
120
121 /*
122  * database field write
123  */
124 int real_db_field_put(int item, int i, int std, char *val);
125 #define db_fput(item, i, val) \
126                         real_db_field_put(item, i, 1, val)
127 #define db_fput_byid(item, i, val) \
128                         real_db_field_put(item, i, 0, val)
129
130 /*
131  * database item read
132  */
133 list_item db_item_get(int i);
134
135
136 #endif /* _DATABASE_H */
137