X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=database.c;h=e324810eab04c0394a3476da1c3b5ab5d4dedb75;hb=05b0f3753902043fa8476a59c9251ab176675945;hp=1b59311fe17c7a4472466beca077966263df940b;hpb=12a57d9405d7910566d5ff888d743d29b0716554;p=pkg%2Fabook.git diff --git a/database.c b/database.c index 1b59311..e324810 100644 --- a/database.c +++ b/database.c @@ -12,7 +12,6 @@ #include #include #include -#include "abook_curses.h" #include "abook.h" #include "database.h" #include "list.h" @@ -140,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"); @@ -150,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= LAST_ITEM) + return -2; /* error */ - if(items < 1) - return; + findstr = strdup(str); + findstr = strupper(findstr); - for( i = (curitem < LAST_ITEM) && next ? curitem+1 : curitem; - i < items; i++ ) { - strcpy(tmp, database[i][NAME]); + for( i = start; i < items; i++ ) { + tmp = strdup(database[i][NAME]); if( strstr(strupper(tmp), findstr) != NULL ) { - curitem = i; - refresh_list(); - break; + ret = i; + goto out; } + my_free(tmp); } + +out: + free(findstr); + free(tmp); + return ret; } -void -print_number_of_items() +int +is_selected(int item) { - char *str = mkstr(" " "|%3d/%3d", selected_items(), items); - - mvaddstr(0, COLS-strlen(str), str); - - free(str); + return selected[item]; } -void -read_database() +int +real_db_enumerate_items(struct db_enumerator e) { - if(items > 0) { - statusline_addstr("Your current data will be lost - Press 'y' to continue"); - switch( getch() ) { - case 'y': - case 'Y': break; - default: clear_statusline(); - return; - } - clear_statusline(); + 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 } - - load_database(datafile); - refresh_list(); +out: + return (item > LAST_ITEM || item < 0) ? -1 : item; } - -void -print_database() +struct db_enumerator +init_db_enumerator(int mode) { - FILE *handle; - char *command = options_get_str("print_command"); + struct db_enumerator new; - statusline_addstr("Print addressbook? (y/N)"); - switch( getch() ) { - case 'y': - case 'Y': - break; - default: clear_statusline(); return; - } - clear_statusline(); - - if( ! *command || (handle = popen(command, "w")) == NULL) - return; + new.item = -1; /* important - means "start from beginning" */ + new.mode = mode; - fexport("text", handle); - - pclose(handle); + return new; } -