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 */
26 ITEM_FIELDS
/* this is the last */
35 typedef struct abook_field_list_t
{
37 struct abook_field_list_t
*next
;
40 typedef char **list_item
;
54 struct db_enumerator
{
56 int mode
; /* warning: read only */
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
);
82 void remove_selected_items();
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
);
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)))
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)
132 list_item
db_item_get(int i
);
135 #endif /* _DATABASE_H */