mvaddch (win->yoffset, win->xoffset + i, ' ');
}
- if (*index < 0) {
- *index = 0;
+ int _index = (index) ? (*index) : 0;
+ if (_index < 0) {
+ _index = 0;
}
- if ((int)strlen (status) - *index < win->xsize) {
- *index = strlen (status) - win->xsize;
+ if ((int)strlen (status) - _index < win->xsize) {
+ _index = strlen (status) - win->xsize;
}
- if (*index < 0) {
- *index = 0;
+ if (_index < 0) {
+ _index = 0;
}
- for (i = 0; (i < win->xsize) && (status[*index + i] != 0); i++) {
- mvaddch (win->yoffset, win->xoffset + i, status[*index + i]);
+ for (i = 0; (i < win->xsize) && (status[_index + i] != 0); i++) {
+ mvaddch (win->yoffset, win->xoffset + i, status[_index + i]);
}
set_color (blue);
- if (*index > 0) {
+ if (_index > 0) {
mvaddch (win->yoffset, win->xoffset, ACS_LARROW);
}
- if ((int)strlen (status) - *index > win->xsize) {
+ if ((int)strlen (status) - _index > win->xsize) {
mvaddch (win->yoffset, win->xoffset + win->xsize - 1, ACS_RARROW);
}
set_color (white);
+
+ if (index) {
+ *index = _index;
+ }
}
char *getwindow (char *msg, window_t *win, int length, int size, char *init)
return stop;
}
-void viewwindow (char **lines, window_t *win, char *title)
+char *filewindow (char *name, window_t *win)
{
+ char *msg = NULL;
+
+ char *buffer = loadfile (name);
+ char **lines = splitlines (buffer, win->xsize);
+ free (buffer);
+
+ char *title = strdupcat ("File: ", name, NULL);
set_color (white);
_dobound (win->xsize, win->ysize, win->xoffset, win->yoffset);
_displaytitle (title, win->xoffset, win->yoffset, win->xsize);
- int i, j;
- for (i = 0; i < win->ysize; i++) {
- for (j = 0; j < win->xsize; j++) {
- mvaddch (win->yoffset + i, win->xoffset + j, ' ');
+ int skip = 0;
+ int stop = 0;
+ while (!stop) {
+ int i, j;
+ int eol = 0;
+ for (i = 0; i < win->ysize; i++) {
+ for (j = 0; j < win->xsize; j++) {
+ mvaddch (win->yoffset + i, win->xoffset + j, ' ');
+ }
+ if (!eol) {
+ if (lines[skip + i] != NULL) {
+ mvaddstr (win->yoffset + i, win->xoffset, lines[skip + i]);
+ } else {
+ eol = 1;
+ }
+ }
}
- }
- for (i = 0; (i < win->ysize) && (lines[i] != NULL); i++) {
- mvaddstr (win->yoffset + i, win->xoffset, lines[i]);
+ switch (getch ()) {
+ case KEY_ESC:
+ case 'q':
+ stop = 1;
+ break;
+ case 'i':
+ case KEY_UP:
+ if (skip > 0) {
+ skip--;
+ }
+ break;
+ case 'k':
+ case KEY_DOWN:
+ if (lines[skip + 1] != NULL) {
+ skip++;
+ }
+ break;
+ }
}
set_color (black);
- return j;
+ freelines (lines);
+ free (title);
+
+ return msg;
}
/* vim: set ts=4 sw=4 et: */
int askwindow (char *msg, window_t *win, char *ok, char *ko);
-void viewwindow (char **line, window_t *win, char *title);
+char *filewindow (char *name, window_t *win);
#define KEY_DELETE 0x014a
#define KEY_ESC 0x1b
/* depend: */
/* cflags: */
-/* linker: debug.o display.o function.o view.o -lcurses */
-/* doslnk: debug.o display.o function.o view.o -lpdc~1 -lreg~1 */
-/* winlnk: debug.o display.o function.o view.o -lpdcurses -lregex */
+/* linker: debug.o display.o function.o -lcurses */
+/* doslnk: debug.o display.o function.o -lpdc~1 -lreg~1 */
+/* winlnk: debug.o display.o function.o -lpdcurses -lregex */
#include <curses.h>
#include <stdio.h>
#include "debug.h"
#include "display.h"
#include "function.h"
-#include "view.h"
/* global constants */
break;
case ALT_V: /* view */
current = list[panel]->tab + windir[panel]->index;
+ for (i = 0; i < MAXPANELS; i++) {
+ elementwindow (winelem[i], "", NULL);
+ }
+ elementwindow (winelem[0], current->name, NULL);
filewindow (current->name, winscreen);
break;
case ALT_X: /* chmod */
return msg;
}
+static char *_readstream (FILE *sd)
+{
+ char *buffer = NULL;
+ size_t size = 0;
+ do {
+ size += BUFMAX + (size == 0);
+ buffer = (char *) realloc (buffer, size);
+ memset (buffer + size - BUFMAX - 1, 0, BUFMAX + 1);
+ } while (fread (buffer + size - BUFMAX - 1, 1, BUFMAX, sd) > 0);
+
+ /* check size */
+ if (buffer[0] == '\0') {
+ free (buffer);
+ buffer = NULL;
+ }
+
+ return buffer;
+}
+
+char *loadfile (char *name)
+{
+ int status = -1;
+ char *buffer = NULL;
+
+ VERBOSE (DEBUG, fprintf (stdout, "open file: %s\n", name));
+ FILE *fd = fopen (name, "r");
+ if (fd != NULL) {
+ buffer = _readstream (fd);
+ status = fclose (fd);
+ }
+
+ if (status == -1) {
+ free (buffer);
+ buffer = NULL;
+ }
+
+ return buffer;
+}
+
+char **splitlines (char *buffer, int max)
+{
+ int n = 0;
+
+ char **lines = NULL;
+ int i, j;
+ char *line = (char *) calloc (max + 1, sizeof (char));
+ for (i = j = 0; buffer[i] != '\0'; i++) {
+ if (buffer[i] >= ' ') {
+ line[j++] = buffer[i];
+ }
+ if ((j == max) || (buffer[i] == '\n')) {
+ lines = (char **) realloc (lines, (n + 2) * sizeof (char *));
+ lines[n] = line;
+ lines[n + 1] = NULL;
+ line = calloc (max + 1, sizeof (char));
+ n++;
+ j = 0;
+ }
+ }
+ if (line[0] != '\0') {
+ lines = (char **) realloc (lines, (n + 2) * sizeof (char *));
+ lines[n++] = line;
+ } else {
+ free (line);
+ }
+ VERBOSE (DEBUG, fprintf (stdout, "split lines: %d\n", n));
+
+ return lines;
+}
+
+void freelines (char **lines)
+{
+ if (lines) {
+ int i = 0;
+ while (lines[i]) {
+ free (lines[i++]);
+ }
+ free (lines);
+ }
+}
+
/* vim: set ts=4 sw=4 et: */
char *processchmod (char *name, int mode);
+char *loadfile (char *name);
+
+char **splitlines (char *buffer, int max);
+
+void freelines (char **lines);
+
#endif /* __FUNCTION_H__ */
/* vim: set ts=4 sw=4 et: */
+++ /dev/null
-#include <curses.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "debug.h"
-#include "display.h"
-#include "function.h"
-
-#include "view.h"
-
-#define BUFFERSIZE 4096
-
-static char *_read_stream (FILE *sd)
-{
- char *buffer = NULL;
- size_t size = 0;
- do {
- size += BUFFERSIZE + (size == 0);
- buffer = (char *) realloc (buffer, size);
- memset (buffer + size - BUFFERSIZE - 1, 0, BUFFERSIZE + 1);
- } while (fread (buffer + size - BUFFERSIZE - 1, 1, BUFFERSIZE, sd) > 0);
-
- /* check size */
- if (buffer[0] == '\0') {
- free (buffer);
- buffer = NULL;
- }
-
- return buffer;
-}
-
-char *load_file (char *name)
-{
- int status = -1;
- char *buffer = NULL;
-
- VERBOSE (DEBUG, fprintf (stdout, "open file: %s\n", name));
- FILE *fd = fopen (name, "r");
- if (fd != NULL) {
- buffer = _read_stream (fd);
- status = fclose (fd);
- }
-
- if (status == -1) {
- free (buffer);
- buffer = NULL;
- }
-
- return buffer;
-}
-
-char **split_lines (char *buffer, int max)
-{
- int n = 0;
-
- char **lines = NULL;
- int i, j;
- char *line = (char *) calloc (max + 1, sizeof (char));
- for (i = j = 0; buffer[i] != '\0'; i++) {
- if (buffer[i] >= ' ') {
- line[j++] = buffer[i];
- }
- if ((j == max) || (buffer[i] == '\n')) {
- lines = (char **) realloc (lines, (n + 2) * sizeof (char *));
- lines[n] = line;
- lines[n + 1] = NULL;
- line = calloc (max + 1, sizeof (char));
- n++;
- j = 0;
- }
- }
- if (line[0] != '\0') {
- lines = (char **) realloc (lines, (n + 2) * sizeof (char *));
- lines[n++] = line;
- } else {
- free (line);
- }
- VERBOSE (DEBUG, fprintf (stdout, "split lines: %d\n", n));
-
- return lines;
-}
-
-void free_lines (char **lines)
-{
- int i = 0;
-
- if (!lines) {
- return;
- }
-
- while (lines[i]) {
- free (lines[i++]);
- }
- free (lines);
-}
-
-char *filewindow (char *name, window_t *win)
-{
- char *msg = NULL;
-
- char *buffer = load_file (name);
- char **lines = split_lines (buffer, win->xsize);
- free (buffer);
-
- char *title = strdupcat ("File: ", name, NULL);
-
- int skip = 0;
- int stop = 0;
- while (!stop) {
- viewwindow (lines + skip, win, title);
-
- int key = getch ();
- switch (key) {
- case KEY_ESC:
- case 'q':
- stop = 1;
- break;
- case 'i':
- case KEY_UP:
- skip = (skip > 0) ? skip - 1 : skip;
- break;
- case 'k':
- case KEY_DOWN:
- skip = (lines[skip + 1] != NULL) ? skip + 1 : skip;
- break;
- }
- }
- free (title);
-
- return msg;
-}
-
-/* vim: set ts=4 sw=4 et: */
+++ /dev/null
-#ifndef __VIEW_H__
-#define __VIEW_H__
-
-#include "type.h"
-
-char *filewindow (char *name, window_t *win);
-
-#endif /* __VIEW_H__ */
-
-/* vim: set ts=4 sw=4 et: */