return j;
}
-int displaywindow (window_t *win, list_t *list, int page, int index_x, int index_y)
+void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y)
{
int i, j;
- int nbcols = win->xsize / (list->width + 1);
- VERBOSE (DEBUG, fprintf (stderr, "nbcols: %d\n", nbcols));
- int width = win->xsize / nbcols;
- VERBOSE (DEBUG, fprintf (stderr, "width: %d\n", width));
- int n = (list->nb + nbcols - 1) / nbcols;
- VERBOSE (DEBUG, fprintf (stderr, "n: %d\n", n));
- int rem = list->nb - nbcols * (list->nb / nbcols);
+ win->nbcols = win->xsize / (list->width + 1);
+ win->width = win->xsize / win->nbcols;
+ int n = (list->nb + win->nbcols - 1) / win->nbcols;
+ int rem = list->nb - win->nbcols * (list->nb / win->nbcols);
if (rem == 0) {
- rem = nbcols;
+ rem = win->nbcols;
}
VERBOSE (DEBUG, fprintf (stderr, "rem: %d\n", rem));
- int index = page + index_y + n * index_x;
+
+ if ((page + *index_y == n - 1) && (*index_x > rem - 1)) {
+ *index_x = rem - 1;
+ }
+ int index = page + *index_y + n * *index_x;
+ VERBOSE (DEBUG, fprintf (stderr, "index: %d\n", index));
for (i = j = 0; i < list->nb; i++, j++) {
if ((j + 1 ) % n == 0) {
set_color ((j == index) ? bred : red);
break;
}
- mvaddstr (win->yoffset + (j % n) - page, win->xoffset + (j / n) * width, elem->name);
+ mvaddstr (win->yoffset + (j % n) - page, win->xoffset + (j / n) * win->width, elem->name);
set_color (white);
}
}
mvaddch (win->ysize + win->yoffset, win->xsize + win->xoffset, ACS_DARROW);
}
set_color (white);
-
- return nbcols;
}
char *getwindow (int length, int xoffset, int yoffset)
int helpwindow (char *msg, int xoffset, int yoffset);
-int displaywindow (window_t *win, list_t *list, int page, int index_x, int index_y);
+void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y);
char *getwindow (int length, int xoffset, int yoffset);
}
clear ();
- int nbcols = displaywindow (windir, list, page, index_x, index_y);
+ displaywindow (windir, list, page, &index_x, &index_y);
int ch = getch ();
switch (ch) {
case KEY_NPAGE:
case KEY_SRIGHT:
case 'K':
- if (page + windir->ysize < (list->nb + nbcols - 1) / nbcols) {
+ if (page + windir->ysize < (list->nb + windir->nbcols - 1) / windir->nbcols) {
page++;
}
break;
break;
case KEY_DOWN:
case 'k':
- if (index_y < min (windir->ysize, (list->nb + nbcols - 1) / nbcols) - 1) {
+ if (index_y < min (windir->ysize, (list->nb + windir->nbcols - 1) / windir->nbcols) - 1) {
index_y++;
}
break;
case KEY_RIGHT:
case 'l':
- if (index_x < min (nbcols, list->nb) - 1) {
+ if (index_x < min (windir->nbcols, list->nb) - 1) {
index_x++;
}
break;