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