diff --git a/src/core/operations/FrequencyDistribution.mjs b/src/core/operations/FrequencyDistribution.mjs index 685694cc..a9c10390 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 } ]; } @@ -76,14 +81,14 @@ class FrequencyDistribution extends Operation { * @returns {html} */ present(freq, args) { - const showZeroes = args[0]; + const [showZeroes, showAscii] = args; + // Print let output = `
Total data length: ${freq.dataLength} Number of bytes represented: ${freq.bytesRepresented} Number of bytes not represented: ${256 - freq.bytesRepresented} -Byte Percentage `; + + + ${showAscii ? "" : ""}`; for (let i = 0; i < 256; i++) { if (freq.distribution[i] || showZeroes) { - output += " " + Utils.hex(i, 2) + " (" + - (freq.percentages[i].toFixed(2).replace(".00", "") + "%)").padEnd(8, " ") + - Array(Math.ceil(freq.percentages[i])+1).join("|") + "\n"; + 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); + } + } + const bite = ``, + ascii = showAscii ? `` : "", + percentage = ``, + bars = ``; + + output += `${bite}${ascii}${percentage}${bars}`; } } + output += "
ByteASCIIPercentage
${Utils.hex(i, 2)}${c}${(freq.percentages[i].toFixed(2).replace(".00", "") + "%").padEnd(8, " ")}${Array(Math.ceil(freq.percentages[i])+1).join("|")}
"; return output; }