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
10 NAME = 0, /* important */
27 ITEM_FIELDS /* this is the last */
36 typedef struct abook_field_list_t {
38 struct abook_field_list_t *next;
41 typedef char **list_item;
55 struct db_enumerator {
57 int mode; /* warning: read only */
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();
76 * Various database operations
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);
83 void remove_selected_items();
84 void merge_selected_items();
85 void remove_duplicates();
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);
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)))
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);
112 int item_fput(list_item item, int i, char *val);
113 char *item_fget(list_item item, int i);
116 * database field read
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 */
125 * database field write
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)
136 list_item db_item_get(int i);
139 #endif /* _DATABASE_H */