]> git.deb.at Git - pkg/abook.git/blobdiff - list.c
multibyte update
[pkg/abook.git] / list.c
diff --git a/list.c b/list.c
index d349209582f31f44df74ccae33045a623b8d8dfc..d3a53c36f423c50b49e757145e8014a7727cbf8b 100644 (file)
--- a/list.c
+++ b/list.c
@@ -40,8 +40,6 @@ init_extra_field(enum str_opts option)
        int i, ret = -1;
        char *option_str;
 
-       assert(option_name != NULL);
-       
        option_str = opt_get_str(option);
 
        if(option_str && *option_str) {
@@ -89,7 +87,7 @@ refresh_list()
 
        ui_print_number_of_items();
        
-       if( items < 1 ) {
+       if(items < 1) {
                refresh();
                wrefresh(list);
                return;
@@ -127,24 +125,26 @@ print_list_line(int i, int line, int highlight)
        if(highlight)
                highlight_line(list, line);
 
-       if( selected[i] )
+       if(selected[i])
                mvwaddch(list, line, 0, '*' );
        
-       mvwaddnstr(list, line, NAMEPOS, database[i][NAME], NAMELEN);
-       if( opt_get_bool(BOOL_SHOW_ALL_EMAILS) )
+       mvwaddnstr(list, line, NAMEPOS, database[i][NAME],
+               bytes2width(database[i][NAME], NAMELEN));
+       if(opt_get_bool(BOOL_SHOW_ALL_EMAILS))
                mvwaddnstr(list, line, EMAILPOS, database[i][EMAIL],
-                               real_emaillen);
+                               bytes2width(database[i][EMAIL], real_emaillen));
        else {
                get_first_email(tmp, i);
-               mvwaddnstr(list, line, EMAILPOS, tmp, real_emaillen);
+               mvwaddnstr(list, line, EMAILPOS, tmp,
+                       bytes2width(tmp, real_emaillen));
        }
 
        if(extra < 0 || !database[i][extra])
                extra = extra_alternative;
        if(extra >= 0)
                mvwaddnstr(list, line, EXTRAPOS,
-                               safe_str(database[i][extra]),
-                               EXTRALEN);
+                       safe_str(database[i][extra]),
+                       bytes2width(safe_str(database[i][extra]), EXTRALEN));
 
        scrollok(list, TRUE);
        if(highlight)
@@ -173,7 +173,7 @@ list_headerline()
 void
 scroll_up()
 {
-       if( curitem < 1 )
+       if(curitem < 1)
                return;
 
        curitem--;
@@ -184,7 +184,7 @@ scroll_up()
 void
 scroll_down()
 {
-       if( curitem > items - 2 )
+       if(curitem > items - 2)
                return;
 
        curitem++;
@@ -196,7 +196,7 @@ scroll_down()
 void
 page_up()
 {
-       if( curitem < 1 )
+       if(curitem < 1)
                return;
        
        curitem = curitem == first_list_item ?
@@ -208,7 +208,7 @@ page_up()
 void
 page_down()
 {
-       if( curitem > items - 2 )
+       if(curitem > items - 2)
                return;
 
        curitem = curitem == LAST_LIST_ITEM ?
@@ -218,17 +218,16 @@ page_down()
        refresh_list();
 }
 
-
 void
 select_none()
 {
-        memset( selected, 0, items );
+        memset(selected, 0, items);
 }
 
 void
 select_all()
 {
-        memset( selected, 1, items );
+        memset(selected, 1, items);
 }
 
 void
@@ -323,7 +322,7 @@ invert_selection()
 {
        int i;
 
-       if( items < 1 )
+       if(items < 1)
                return;
 
        for(i = 0; i < items; i++)
@@ -342,4 +341,25 @@ list_is_empty()
        return items < 1;
 }
 
-       
+int
+duplicate_item()
+{
+       int i;
+       list_item item;
+
+       if(curitem < 0)
+               return 1;
+
+       for(i = 0; i < ITEM_FIELDS; i++)
+               item[i] = database[curitem][i] ? strdup(database[curitem][i]) :
+                       NULL;
+
+       if(add_item2database(item))
+               return 1;
+
+       curitem = LAST_ITEM;
+       refresh_list();
+
+       return 0;
+}
+