From: Laurent MAZET Date: Mon, 20 Jan 2025 18:28:46 +0000 (+0100) Subject: wip view binary files X-Git-Tag: v1.0~18 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=3420ef00461f66d5d232674afbf6866aab6d9213;p=fm.git wip view binary files --- diff --git a/display.c b/display.c index 693eb41..5467efc 100644 --- a/display.c +++ b/display.c @@ -560,8 +560,17 @@ char *filewindow (char *name, window_t *win) mvaddch (win->yoffset + i, win->xoffset + j, ' '); } if (!eol) { - if (lines[skip + i] != NULL) { - mvaddstr (win->yoffset + i, win->xoffset, lines[skip + i]); + unsigned char *pt = (unsigned char *)(lines[skip + i]); + if (pt != NULL) { + for (j = 0; (j < win->xsize) && (pt[j] != '\0'); j++) { + if (pt[j] == 128) { + set_color (white); + mvaddch (win->yoffset + i, win->xoffset + j, '.'); + set_color (black); + } else { + mvaddch (win->yoffset + i, win->xoffset + j, (char)pt[j]); + } + } } else { eol = 1; } diff --git a/function.c b/function.c index c08c57c..456a1bb 100644 --- a/function.c +++ b/function.c @@ -620,17 +620,30 @@ static char *_readstream (FILE *sd) { char *buffer = NULL; size_t size = 0; + int blocklen = 0; + int length = 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); + blocklen = fread (buffer + size - BUFMAX - 1, 1, BUFMAX, sd); + length += blocklen; + } while (blocklen > 0); /* check size */ - if (buffer[0] == '\0') { + if (length == 0) { free (buffer); buffer = NULL; + } else { + int i; + for (i = 0; i < length; i++) { + unsigned char *pt = (unsigned char *)(buffer + i); + if ((*pt != '\n') && ((*pt < 32) || (*pt > 127))) { + *pt = 128; + } + } } + VERBOSE (DEBUG, fprintf (stderr, "length: %d\n", length)); return buffer; } @@ -641,13 +654,14 @@ char *loadfile (char *name) char *buffer = NULL; VERBOSE (DEBUG, fprintf (stdout, "open file: %s\n", name)); - FILE *fd = fopen (name, "r"); + FILE *fd = fopen (name, "rb"); if (fd != NULL) { buffer = _readstream (fd); status = fclose (fd); } if (status == -1) { + VERBOSE (WARNING, fprintf (stderr, "error on closing '%s'\n", name)); free (buffer); buffer = NULL; } @@ -672,6 +686,7 @@ char **splitlines (char *buffer, int max) lines[n + 1] = NULL; line = calloc (max + 1, sizeof (char)); n++; + VERBOSE (DEBUG, fprintf (stderr, "j: %d\n", j)); j = 0; } }