]> git.deb.at Git - pkg/abook.git/blob - database.h
Merge branch 'dh'
[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         ITEM_FIELDS /* this is the last */
27 };
28
29 typedef struct {
30         char *key;
31         char *name;
32         int type;
33 } abook_field;
34
35 typedef struct abook_field_list_t {
36         abook_field *field;
37         struct abook_field_list_t *next;
38 } abook_field_list;
39
40 typedef char **list_item;
41
42 enum {
43         FIELD_STRING = 1,
44         FIELD_EMAILS,
45         FIELD_LIST,
46         FIELD_DATE,
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
60 /*
61  * Field operations
62  */
63 inline int field_id(int i);
64 abook_field *find_standard_field(char *key, int do_declare);
65 abook_field *real_find_field(char *key, abook_field_list *list, int *nb);
66 #define find_field(key, list)           real_find_field(key, list, NULL)
67 #define find_field_number(key, pt_nb)   real_find_field(key, NULL, pt_nb)
68 #define find_declared_field(key)        find_field(key,NULL)
69 void get_field_info(int i, char **key, char **name, int *type);
70 void add_field(abook_field_list **list, abook_field *f);
71 char *declare_new_field(char *key, char *name, char *type, int accept_standard);
72 void init_standard_fields();
73
74 /*
75  * Various database operations
76  */
77 void prepare_database_internals();
78 int parse_database(FILE *in);
79 int load_database(char *filename);
80 int write_database(FILE *out, struct db_enumerator e);
81 int save_database();
82 void remove_selected_items();
83 void sort_surname();
84 void sort_by_field(char *field);
85 void close_database();
86 int add_item2database(list_item item);
87 char *get_surname(char *s);
88 int find_item(char *str, int start, int search_fields[]);
89 int is_selected(int item);
90 int is_valid_item(int item);
91 int last_item();
92 int db_n_items();
93
94 int real_db_enumerate_items(struct db_enumerator e);
95 struct db_enumerator init_db_enumerator(int mode);
96 #define db_enumerate_items(e) \
97         while( -1 != (e.item = real_db_enumerate_items(e)))
98
99 /*
100  * item manipulation
101  */
102 list_item item_create();
103 void item_empty(list_item item);
104 void item_free(list_item *item);
105 void item_copy(list_item dest, list_item src);
106 void item_duplicate(list_item dest, list_item src);
107
108 int item_fput(list_item item, int i, char *val);
109 char *item_fget(list_item item, int i);
110
111 /*
112  * database field read
113  */
114 char *real_db_field_get(int item, int i, int std);
115 #define db_fget(item, i)                real_db_field_get(item, i, 1)
116 #define db_fget_byid(item, i)           real_db_field_get(item, i, 0)
117 #define db_name_get(item)               db_fget(item, NAME)
118 char *db_email_get(int item); /* memory has to be freed by the caller */
119
120 /*
121  * database field write
122  */
123 int real_db_field_put(int item, int i, int std, char *val);
124 #define db_fput(item, i, val) \
125                         real_db_field_put(item, i, 1, val)
126 #define db_fput_byid(item, i, val) \
127                         real_db_field_put(item, i, 0, val)
128
129 /*
130  * database item read
131  */
132 list_item db_item_get(int i);
133
134
135 #endif /* _DATABASE_H */
136