[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