NAME,
EMAIL,
ADDRESS,
+ ADDRESS2,
CITY,
STATE,
ZIP,
MOBILEPHONE,
NICK,
URL,
- NOTES
+ NOTES,
+ CUSTOM1,
+ CUSTOM2,
+ CUSTOM3,
+ CUSTOM4,
+ CUSTOM5,
+ ITEM_FIELDS /* this is the last */
};
-#define LAST_FIELD NOTES
+#define LAST_FIELD (ITEM_FIELDS - 1)
-#define ITEM_FIELDS (LAST_FIELD+1)
+#define CUSTOM_MIN CUSTOM1
+#define CUSTOM_MAX CUSTOM5
typedef char * list_item[ITEM_FIELDS];
+#define MAX_FIELDNAME_LEN 21
+
struct abook_field {
char *name;
char *key;
int tab;
};
+enum {
+ ENUM_ALL,
+ ENUM_SELECTED
+};
+
+struct db_enumerator {
+ int item;
+ int mode; /* warning: read only */
+};
+
+int find_field(const char *field);
int parse_database(FILE *in);
-int write_database(FILE *out);
+int write_database(FILE *out, struct db_enumerator e);
int load_database(char *filename);
int save_database();
void close_database();
void free_list_item(list_item item);
void remove_selected_items();
void sort_surname();
-void sort_database();
+void sort_by_field(int field);
char *get_surname(char *s);
-int find_item(char *str, int start);
+int find_item(char *str, int start, int search_fields[]);
int is_selected(int item);
+int is_valid_item(int item);
+int real_db_enumerate_items(struct db_enumerator e);
+struct db_enumerator init_db_enumerator(int mode);
+int change_custom_field_name(const char *name, int n);
#define LAST_ITEM (items - 1)
int _i,_j,_k,len; \
memset(&emails, 0, sizeof(emails) ); \
len = strlen(database[item][EMAIL]); \
- for( _i=0,_j=0, _k=0; _i < len && _j < 4; _i++ ) { \
+ for( _i=0,_j=0, _k=0; _i < len && _j < MAX_EMAILS; _i++ ) { \
if( database[item][EMAIL][_i] ==',' ) { \
_j++; \
_k = 0; \
#define have_multiple_emails(item) \
strchr(database[item][EMAIL], ',')
+#define db_enumerate_items(e) \
+ while( -1 != (e.item = real_db_enumerate_items(e)))
+
#endif