From 69073c9d997ca48e1f994c3678b2eb6ca7dff5f5 Mon Sep 17 00:00:00 2001 From: Alex Blewitt Date: Sun, 7 Feb 2021 15:51:20 +0000 Subject: [PATCH] Add ASCII output for frequency table When showing results in the frequency distribution table, it's quite helpful to see the distribution of the ASCII letters, if any. Provide an option to show this to show the characters alongside the code. Fixes #1169. Signed-off-by: Alex Blewitt --- src/core/operations/FrequencyDistribution.mjs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/core/operations/FrequencyDistribution.mjs b/src/core/operations/FrequencyDistribution.mjs index 685694cc..0c4c1563 100644 --- a/src/core/operations/FrequencyDistribution.mjs +++ b/src/core/operations/FrequencyDistribution.mjs @@ -31,6 +31,11 @@ class FrequencyDistribution extends Operation { "name": "Show 0%s", "type": "boolean", "value": true + }, + { + "name": "Show ASCII", + "type": "boolean", + "value": true } ]; } @@ -77,6 +82,7 @@ class FrequencyDistribution extends Operation { */ present(freq, args) { const showZeroes = args[0]; + const showAscii = args[1]; // Print let output = `
Total data length: ${freq.dataLength} @@ -97,7 +103,17 @@ Byte Percentage for (let i = 0; i < 256; i++) { if (freq.distribution[i] || showZeroes) { - output += " " + Utils.hex(i, 2) + " (" + + let c = " "; + if (showAscii) { + if (i <= 32) { + c = String.fromCharCode(0x2400 + i); + } else if (i === 127) { + c = String.fromCharCode(0x2421); + } else { + c = String.fromCharCode(i); + } + } + output += " " + Utils.hex(i, 2) + " " + c + " (" + (freq.percentages[i].toFixed(2).replace(".00", "") + "%)").padEnd(8, " ") + Array(Math.ceil(freq.percentages[i])+1).join("|") + "\n"; }