wip view binary files
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 20 Jan 2025 18:28:46 +0000 (19:28 +0100)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 20 Jan 2025 18:28:46 +0000 (19:28 +0100)
display.c
function.c

index 693eb419713ff4677a0064e1cf71adcda11bdffc..5467efc07861a8a4ae5aadf66c166918fd6ee90b 100644 (file)
--- 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;
                 }
index c08c57cc92d401f9bd022672ac8a2859571cd179..456a1bbb0606cd891006692938153f9219bdbccd 100644 (file)
@@ -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;
         }
     }