use automake 1.11, autoconf 2.65
[abook.git] / database.h
bloba81bd6e4e751de9780aa3addd2b971342d1dd071
1 #ifndef _DATABASE_H
2 #define _DATABASE_H
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
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 */
29 typedef struct {
30 char *key;
31 char *name;
32 int type;
33 } abook_field;
35 typedef struct abook_field_list_t {
36 abook_field *field;
37 struct abook_field_list_t *next;
38 } abook_field_list;
40 typedef char **list_item;
42 enum {
43 FIELD_STRING = 1,
44 FIELD_EMAILS,
45 FIELD_LIST,
46 FIELD_DATE,
49 enum {
50 ENUM_ALL,
51 ENUM_SELECTED
54 struct db_enumerator {
55 int item;
56 int mode; /* warning: read only */
61 * Field operations
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();
75 * Various database operations
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();
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)))
100 * item manipulation
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);
108 int item_fput(list_item item, int i, char *val);
109 char *item_fget(list_item item, int i);
112 * database field read
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 */
121 * database field write
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)
130 * database item read
132 list_item db_item_get(int i);
135 #endif /* _DATABASE_H */