poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/2] dump: Add cluster_by parameter


From: John Darrington
Subject: [PATCH 2/2] dump: Add cluster_by parameter
Date: Sun, 1 Dec 2019 12:30:28 +0100

---
 src/pk-dump.pk | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/src/pk-dump.pk b/src/pk-dump.pk
index 47b918e..b808310 100644
--- a/src/pk-dump.pk
+++ b/src/pk-dump.pk
@@ -26,6 +26,7 @@ pk_help_str = pk_help_str
 
 defvar pk_dump_size = 128#B;
 defvar pk_dump_group_by = 2#B;
+defvar pk_dump_cluster_by = 8;
 defvar pk_dump_ruler = 1;
 defvar pk_dump_ascii = 1;
 
@@ -40,6 +41,7 @@ defvar pk_dump_offset = 0#B;
 defun dump = (off64 from = pk_dump_offset,
               off64 size = pk_dump_size,
               off64 group_by = pk_dump_group_by,
+              int cluster_by = pk_dump_cluster_by,
               int ruler = pk_dump_ruler,
               int ascii = pk_dump_ascii) void:
 {
@@ -47,6 +49,12 @@ defun dump = (off64 from = pk_dump_offset,
   {
     defvar o = 0#B;
 
+    defun itoa = (uint<8> x) char:
+    {
+      if (x >= 0 && x <= 9) return x + '0';
+      if (x >= 10 && x <= 15) return x + 'A' - 10;
+    }
+
     printf "%<dump-ruler:76543210 %>";
     for (s in ["00", "11", "22", "33", "44", "55", "66",
               "77", "88", "99", "aa", "bb", "cc", "dd",
@@ -56,13 +64,27 @@ defun dump = (off64 from = pk_dump_offset,
          printf "%<dump-ruler: %>";
        printf "%<dump-ruler:%s%>", s;
        o = o + 1#B;
+       if (o < 16#B && (o % (cluster_by * group_by)) == 0#B)
+          printf (" ");
       }
     if (ascii)
-      printf "%<dump-ruler:  0123456789ABCDEF%>";
+      {
+       defvar x = 0 as uint<8>;
+       defvar s = "";
+       while (x < 16)
+         {
+           s = s + itoa(x) as string;
+           x = x + 1;
+           if ((x % ((cluster_by * group_by)/1#B)) == 0)
+             s = s + " ";
+         }
+       printf "%<dump-ruler:  %s%>", s;
+      }
     print "\n";
   }
 
-  defun print_ascii = (off64 offset, off64 top, off64 step) void:
+  defun print_ascii = (off64 offset, off64 top, off64 step,
+                      off64 group_by, int cluster_by) void:
   {
     print("  ");
     defvar o = 0#B;
@@ -74,6 +96,8 @@ defun dump = (off64 from = pk_dump_offset,
        else
          printf "%<dump-ascii:%c%>", v;
        o = o + 1#B;
+       if (o < 16#B && (o % (cluster_by * group_by)) == 0#B)
+          printf (" ");
       }
   }
 
@@ -84,7 +108,8 @@ defun dump = (off64 from = pk_dump_offset,
     printf ("%u8x", c);
   }
 
-  defun print_data = (off64 offset, off64 top, off64 step) void:
+  defun print_data = (off64 offset, off64 top, off64 step,
+                     off64 group_by , int cluster_by) void:
   {
     while (offset < top)
       {
@@ -97,6 +122,8 @@ defun dump = (off64 from = pk_dump_offset,
            {
              print_hex (byte @ (offset + o), o);
              o = o + 1#B;
+             if (o < 16#B && (o % (cluster_by * group_by)) == 0#B)
+               printf (" ");
            }
        }
        catch if E_eof {}
@@ -109,7 +136,7 @@ defun dump = (off64 from = pk_dump_offset,
                print ("  ");
                o = o + 1#B;
              }
-           print_ascii (offset, top, step);
+           print_ascii (offset, top, step, group_by, cluster_by);
          }
        print "\n";
 
@@ -126,7 +153,9 @@ defun dump = (off64 from = pk_dump_offset,
   if (ruler)
     print_ruler;
 
-  try print_data :offset offset :top top :step 16#B;
+  try print_data :offset offset :top top :step 16#B
+                 :group_by group_by :cluster_by cluster_by;
+
   catch if E_eof { print "\n"; }
 
   pk_dump_offset = from;
-- 
2.11.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]