#include "display.h"
#include "function.h"
+/* global constants */
+
+#define MAXPANES 2
+
/* static variables */
char *progname = NULL;
char *version = "0.1";
-char *dirname = NULL;
-int xoffset = 2;
-int yoffset = 2;
+char *dirname[MAXPANES] = {0};
+int pane = 0;
int wide = 0;
+int xoffset = 1;
+int yoffset = 2;
char *help =
"<i> Move up\n"
{
FILE *fd = ret ? stderr : stdout;
fprintf (fd, "usage: %s [-d dir] [-h] [-w]\n", progname);
- fprintf (fd, " -d: dir name (%s)\n", (dirname) ? dirname : ".");
+ fprintf (fd, " -d: dir name (%s)\n", (dirname[0]) ? dirname[0] : ".");
fprintf (fd, " -h: help message\n");
fprintf (fd, " -w: wide board (%d)\n", wide);
fprintf (fd, "%s version %s\n", progname, version);
/* main function */
int main (int argc, char *argv[])
{
+ int i;
+
/* get basename */
char *pt = progname = argv[0];
while (*pt) {
VERBOSE (ERROR, fprintf (stderr, "%s: missing verbose level\n", progname));
return usage (1);
}
- if (dirname == NULL) {
- free (dirname);
+ if (dirname[pane] == NULL) {
+ free (dirname[pane]);
}
- dirname = strdup (arg);
+ dirname[pane] = strdup (arg);
+ pane = (pane + 1) % MAXPANES;
break;
case 'v':
arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
return usage (c != 'h');
}
}
- if (dirname == NULL) {
- dirname = strdup (".");
+ for (i = 0; i < MAXPANES; i++) {
+ if (dirname[i] == NULL) {
+ dirname[i] = strdup (".");
+ }
}
/* init curses */
start_color ();
/* init windows */
- window_t *windir = allocwindow ();
- windir->xoffset = xoffset;
- windir->yoffset = yoffset;
- windir->xsize = COLS - 2 * xoffset;
- VERBOSE (DEBUG, fprintf (stderr, "xsize: %d\n", windir->xsize));
- windir->ysize = LINES - 2 * yoffset;
- VERBOSE (DEBUG, fprintf (stderr, "ysize: %d\n", windir->ysize));
-
- list_t *list = NULL;
- int page = 0;
- int index_x = 0;
- int index_y = 0;
+ window_t *windir[MAXPANES] = {0};
+ for (i = 0; i < MAXPANES; i++) {
+ windir[i] = allocwindow ();
+ windir[i]->active = (pane == i);
+ windir[i]->xoffset = xoffset + COLS / 2 * i;
+ windir[i]->xsize = COLS / 2 - 2 * xoffset;
+ windir[i]->yoffset = yoffset;
+ windir[i]->ysize = LINES - 2 * yoffset;
+ }
+
+ list_t *list[MAXPANES] = {0};
+ int page[MAXPANES] = {0};
+ int index_x[MAXPANES] = {0};
+ int index_y[MAXPANES] = {0};
/* event loop */
int stop = 0;
while (!stop) {
- if (list == NULL) {
- list = exploredir (dirname);
- if (list == NULL) {
- endwin ();
- freewindow (windir);
- VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", dirname));
- return 1;
+ for (i = 0; i < MAXPANES; i++) {
+ if (list[i] == NULL) {
+ list[i] = exploredir (dirname[i]);
+ if (list[i] == NULL) {
+ endwin ();
+ int _i;
+ for (_i = 0; _i < MAXPANES; _i++) {
+ free (dirname[i]);
+ freelist (list[_i]);
+ freewindow (windir[_i]);
+ }
+ VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", dirname[i]));
+ return 1;
+ }
}
+ displaywindow (windir[i], list[i], page[i], &index_x[i], &index_y[i]);
}
- clear ();
- displaywindow (windir, list, page, &index_x, &index_y);
-
int ch = getch ();
switch (ch) {
case KEY_PPAGE:
case KEY_SLEFT:
case 'I':
- if (page > 0) {
- page--;
+ if (page[pane] > 0) {
+ page[pane]--;
}
break;
case KEY_NPAGE:
case KEY_SRIGHT:
case 'K':
- if (page + windir->ysize < (list->nb + windir->nbcols - 1) / windir->nbcols) {
- page++;
+ if (page[pane]+ windir[pane]->ysize < (list[pane]->nb + windir[pane]->nbcols - 1) / windir[pane]->nbcols) {
+ page[pane]++;
}
break;
case KEY_UP:
case 'i':
- if (index_y > 0) {
- index_y--;
- } else if (page > 0) {
- page--;
+ if (index_y[pane]> 0) {
+ index_y[pane]--;
+ } else if (page[pane]> 0) {
+ page[pane]--;
}
break;
case KEY_LEFT:
case 'j':
- if (index_x > 0) {
- index_x--;
+ if (index_x[pane]> 0) {
+ index_x[pane]--;
}
break;
case KEY_DOWN:
case 'k':
- if (index_y < min (windir->ysize, (list->nb + windir->nbcols - 1) / windir->nbcols) - 1) {
- index_y++;
- } else if (page + windir->ysize < (list->nb + windir->nbcols - 1) / windir->nbcols) {
- page++;
+ if (index_y[pane]< min (windir[pane]->ysize, (list[pane]->nb + windir[pane]->nbcols - 1) / windir[pane]->nbcols) - 1) {
+ index_y[pane]++;
+ } else if (page[pane]+ windir[pane]->ysize < (list[pane]->nb + windir[pane]->nbcols - 1) / windir[pane]->nbcols) {
+ page[pane]++;
}
break;
case KEY_RIGHT:
case 'l':
- if (index_x < min (windir->nbcols, list->nb) - 1) {
- index_x++;
+ if (index_x[pane]< min (windir[pane]->nbcols, list[pane]->nb) - 1) {
+ index_x[pane]++;
}
break;
+ case '\t':
+ windir[pane]->active = 0;
+ pane = (pane + 1) % MAXPANES;
+ windir[pane]->active = 1;
+ break;
case KEY_ESC:
case 'q':
- if (askwindow (" Restart (Y/N) ", max (windir->xoffset + (windir->xsize - 15) / 2, 1), windir->yoffset + (windir->ysize - 1) / 2, "Yy", "Nn") == 1) {
+ if (askwindow (" Restart (Y/N) ", max (windir[pane]->xoffset + (windir[pane]->xsize - 15) / 2, 1), windir[pane]->yoffset + (windir[pane]->ysize - 1) / 2, "Yy", "Nn") == 1) {
stop = 1;
}
break;
endwin ();
- freelist (list);
- freewindow (windir);
+ for (i = 0; i < MAXPANES; i++) {
+ free (dirname[i]);
+ freelist (list[pane]);
+ freewindow (windir[i]);
+ }
return 0;
}