/*
- * database.c
+ * $Id$
+ *
* by JH <jheinonen@bigfoot.com>
*
* Copyright (C) Jaakko Heinonen
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
-#include "abook_curses.h"
#include "abook.h"
#include "database.h"
#include "list.h"
for( i = 0; i < items; i++ ) {
fprintf(out, "[%d]\n", i);
for(j=0; j<ITEM_FIELDS; j++) {
- if( database[i][j] != NULL )
- if( *database[i][j] )
- fprintf(out, "%s=%s\n",
- abook_fields[j].key, database[i][j]);
+ if( database[i][j] != NULL && *database[i][j] )
+ fprintf(out, "%s=%s\n",
+ abook_fields[j].key, database[i][j]);
}
fputc('\n', out);
}
if( (out = abook_fopen(datafile, "w")) == NULL )
return -1;
- if( items < 1 ) {
+ if( list_is_empty() ) {
fclose(out);
unlink(datafile);
return 1;
}
void
-remove_items()
+remove_selected_items()
{
int i, j;
- if( items < 1 || curitem < 0 )
+ if( list_is_empty() )
return;
- statusline_addstr("Remove selected item(s) (Y/n)");
- switch( getch() ) {
- case '\r':
- case 'y':
- case 'Y': break;
- default:
- clear_statusline();
- return;
- }
-
if( ! selected_items() )
selected[ curitem ] = 1;
adjust_list_capacity();
select_none();
- clear_statusline();
- refresh_list();
}
char *
refresh_screen();
}
-void
-clear_database()
-{
-
- statusline_addstr("Clear WHOLE database (y/N)");
- switch( getch() ) {
- case 'y':
- case 'Y': break;
- default:
- clear_statusline();
- return;
- }
-
- close_database();
-
- refresh_screen();
-}
-
-void
-find(int next)
+int
+find_item(char *str, int start)
{
int i;
- static char findstr[81];
- char tmp[81];
+ char *findstr = NULL;
+ char *tmp = NULL;
+ int ret = -1; /* not found */
-#ifdef DEBUG
- fprintf(stderr, "find(): findstr = |%s|\n", findstr);
-#endif
-
- if(next) {
- if( !*findstr )
- return;
- } else {
- clear_statusline();
- statusline_addstr("/");
- statusline_getnstr(findstr, 67, 0);
- strupper(findstr);
- clear_statusline();
- }
+ if(items < 1 || start < 0 || start >= 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);
}
-}
-
-void
-print_number_of_items()
-{
- char *str =
- mkstr(" |%3d/%3d", selected_items(), items);
-
- mvaddstr(0, COLS-strlen(str), str);
-
- free(str);
-}
-
-void
-read_database()
-{
- 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();
- }
-
- load_database(datafile);
- refresh_list();
+out:
+ free(findstr);
+ free(tmp);
+ return ret;
}
-void
-print_database()
+int
+is_selected(int item)
{
- FILE *handle;
- char *command = options_get_str("print_command");
-
- 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;
-
- fexport("text", handle);
-
- pclose(handle);
+ return selected[item];
}
-