X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=database.c;h=ddc96ab21aaa047ee6235a102a4d31f61320b14e;hb=426fbb37136be4df71813e5e8f861be4f0a3cf67;hp=2bcda3de5583af412c73dd145df5c9b473e805d4;hpb=5f686aabd6d8d5183bb391cf6103a334aef29268;p=pkg%2Fabook.git diff --git a/database.c b/database.c index 2bcda3d..ddc96ab 100644 --- a/database.c +++ b/database.c @@ -139,9 +139,10 @@ load_database(char *filename) } int -write_database(FILE *out) +write_database(FILE *out, struct db_enumerator e) { - int i,j; + int j; + int i = 0; fprintf(out, "# abook addressbook file\n\n"); fprintf(out, "[format]\n"); @@ -149,14 +150,18 @@ write_database(FILE *out) fprintf(out, "version=" VERSION "\n"); fprintf(out, "\n\n"); - for( i = 0; i < items; i++ ) { + db_enumerate_items(e) { fprintf(out, "[%d]\n", i); for(j=0; j= 0; +} + +int +real_db_enumerate_items(struct db_enumerator e) +{ + int item = max(0, e.item + 1); + int i; + + switch(e.mode) { +#ifdef DEBUG + case ENUM_ALL: + break; +#endif + case ENUM_SELECTED: + for(i = item; i < items; i++) { + if(is_selected(i)) { + item = i; + goto out; + } + } + return -1; +#ifdef DEBUG + default: + fprintf(stderr, "real_db_enumerate_items() " + "BUG: unknown db_enumerator mode: %d\n", + e.mode); + break; +#endif + } +out: + return (item > LAST_ITEM || item < 0) ? -1 : item; +} + +struct db_enumerator +init_db_enumerator(int mode) +{ + struct db_enumerator new; + + new.item = -1; /* important - means "start from beginning" */ + new.mode = mode; + + return new; +}