simple view for binary files
authorLaurent Mazet <mazet@softndesign.org>
Mon, 20 Jan 2025 23:30:54 +0000 (00:30 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Mon, 20 Jan 2025 23:30:54 +0000 (00:30 +0100)
display.c
function.c

index 5467efc07861a8a4ae5aadf66c166918fd6ee90b..3bd64d21e90bed460348981e2e05ca1e16a60c06 100644 (file)
--- a/display.c
+++ b/display.c
@@ -405,7 +405,7 @@ char *getwindow (char *msg, window_t *win, int length, int size, char *init)
             stop = 1;
             break;
         default:
-            if ((ch >= 32) && ( ch < 128)) {
+            if ((ch >= 32) && ( ch < 127)) {
                 name[l + i] = ch;
                 i++;
                 if (i == length) {
@@ -554,27 +554,22 @@ char *filewindow (char *name, window_t *win)
             mvaddch (win->ysize + win->yoffset, win->xsize + win->xoffset, ACS_DARROW);
         }
 
-        int eol = 0;
         for (i = 0; i < win->ysize; i++) {
+            unsigned char *pt = (unsigned char *)(lines[skip + i]);
             for (j = 0; j < win->xsize; j++) {
-                mvaddch (win->yoffset + i, win->xoffset + j, ' ');
-            }
-            if (!eol) {
-                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]);
-                        }
-                    }
+                if (pt[j] == '\0') {
+                    break;
+                } else if (pt[j] == 128) {
+                    set_color (imagenta);
+                    mvaddch (win->yoffset + i, win->xoffset + j, '.');
+                    set_color (black);
                 } else {
-                    eol = 1;
+                    mvaddch (win->yoffset + i, win->xoffset + j, (char)pt[j]);
                 }
             }
+            for (; j < win->xsize; j++) {
+                mvaddch (win->yoffset + i, win->xoffset + j, ' ');
+            }
         }
 
         switch (getch ()) {
index 456a1bbb0606cd891006692938153f9219bdbccd..e25228930e0808f8cdf19e21a6d822f5a81a4fb4 100644 (file)
@@ -631,19 +631,19 @@ static char *_readstream (FILE *sd)
     } while (blocklen > 0);
 
     /* check size */
+    VERBOSE (DEBUG, fprintf (stderr, "length: %d\n", length));
     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))) {
+        unsigned char *pt = (unsigned char *)buffer;
+        while (length-- > 0) {
+            if ((*pt != '\n') && ((*pt < 32) || (*pt >= 127))) {
                 *pt = 128;
             }
+            pt++;
         }
     }
-    VERBOSE (DEBUG, fprintf (stderr, "length: %d\n", length));
 
     return buffer;
 }
@@ -677,14 +677,14 @@ char **splitlines (char *buffer, int max)
     int i, j;
     char *line = (char *) calloc (max + 1, sizeof (char));
     for (i = j = 0; buffer[i] != '\0'; i++) {
-        if (buffer[i] >= ' ') {
+        if ((unsigned char)buffer[i] >= 32) {
             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));
+            line = (char *) calloc (max + 1, sizeof (char));
             n++;
             VERBOSE (DEBUG, fprintf (stderr, "j: %d\n", j));
             j = 0;
@@ -692,7 +692,9 @@ char **splitlines (char *buffer, int max)
     }
     if (line[0] != '\0') {
         lines = (char **) realloc (lines, (n + 2) * sizeof (char *));
-        lines[n++] = line;
+        lines[n] = line;
+        lines[n + 1] = NULL;
+        n++;
     } else {
         free (line);
     }