File: database.h

package info (click to toggle)
abook 0.5.3-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,084 kB
  • ctags: 759
  • sloc: ansic: 6,613; sh: 3,272; cpp: 956; python: 256; perl: 91; makefile: 89
file content (103 lines) | stat: -rw-r--r-- 2,084 bytes parent folder | download
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
#ifndef _DATABASE_H
#define _DATABASE_H


#define MAX_EMAILS		4
#define MAX_EMAIL_LEN		80
#define MAX_EMAILSTR_LEN	(MAX_EMAILS*MAX_EMAIL_LEN + MAX_EMAILS + 1)
#define MAX_FIELD_LEN		81

enum {
	NAME,
	EMAIL,
	ADDRESS,
        ADDRESS2,
	CITY,
	STATE,
	ZIP,
	COUNTRY,
	PHONE,
	WORKPHONE,
	FAX,
	MOBILEPHONE,
	NICK,
	URL,
	NOTES,
	CUSTOM1,
	CUSTOM2,
	CUSTOM3,
	CUSTOM4,
	CUSTOM5,
	ITEM_FIELDS /* this is the last */
};

#define LAST_FIELD		(ITEM_FIELDS - 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, struct db_enumerator e);
int		load_database(char *filename);
int		save_database();
void		close_database();
int		add_item2database(list_item item);
void		free_list_item(list_item item);
void		remove_selected_items();
void		sort_surname();
void		sort_by_field(int field);
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		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)

#define itemcpy(dest, src)	memmove(dest, src, sizeof(list_item))

#define split_emailstr(item, emails) do {\
	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 < MAX_EMAILS; _i++ ) { \
		if( database[item][EMAIL][_i] ==',' ) { \
			_j++; \
			_k = 0; \
		} else \
			if( _k < MAX_EMAIL_LEN -1 ) \
				emails[_j][_k++] = database[item][EMAIL][_i]; \
	} \
} while(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