]> git.deb.at Git - pkg/abook.git/blob - database.h
Upload 0.6.1-2 to unstable
[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 field_types {
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 merge_selected_items();
85 void remove_duplicates();
86 void sort_surname();
87 void sort_by_field(char *field);
88 void close_database();
89 int add_item2database(list_item item);
90 char *get_surname(char *s);
91 int find_item(char *str, int start, int search_fields[]);
92 int is_selected(int item);
93 int is_valid_item(int item);
94 int last_item();
95 int db_n_items();
96
97 int real_db_enumerate_items(struct db_enumerator e);
98 struct db_enumerator init_db_enumerator(int mode);
99 #define db_enumerate_items(e) \
100         while( -1 != (e.item = real_db_enumerate_items(e)))
101
102 /*
103  * item manipulation
104  */
105 list_item item_create();
106 void item_empty(list_item item);
107 void item_free(list_item *item);
108 void item_copy(list_item dest, list_item src);
109 void item_duplicate(list_item dest, list_item src);
110 void item_merge(list_item dest, list_item src);
111
112 int item_fput(list_item item, int i, char *val);
113 char *item_fget(list_item item, int i);
114
115 /*
116  * database field read
117  */
118 char *real_db_field_get(int item, int i, int std);
119 #define db_fget(item, i)                real_db_field_get(item, i, 1)
120 #define db_fget_byid(item, i)           real_db_field_get(item, i, 0)
121 #define db_name_get(item)               db_fget(item, NAME)
122 char *db_email_get(int item); /* memory has to be freed by the caller */
123
124 /*
125  * database field write
126  */
127 int real_db_field_put(int item, int i, int std, char *val);
128 #define db_fput(item, i, val) \
129                         real_db_field_put(item, i, 1, val)
130 #define db_fput_byid(item, i, val) \
131                         real_db_field_put(item, i, 0, val)
132
133 /*
134  * database item read
135  */
136 list_item db_item_get(int i);
137
138
139 #endif /* _DATABASE_H */
140