]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - js/hexDump.js
hexdumping
[Rakka.git] / js / hexDump.js
diff --git a/js/hexDump.js b/js/hexDump.js
new file mode 100644 (file)
index 0000000..66c3e7f
--- /dev/null
@@ -0,0 +1,85 @@
+(function () {
+
+     var repeat = function (times, str) {
+         var ret = "";
+
+         for (var i = 0; i < times; i++) {
+             ret += str;
+         }
+
+         return ret;
+     };
+
+     var printHex = function (width, num) {
+         var ret = Number(num).toString(16);
+
+         if (ret.length < width) {
+             return repeat(width - ret.length, "0") + ret;
+         }
+         else {
+             return ret;
+         }
+     };
+
+     var isPrintableAscii = function (code) {
+         return (code >= 0x20 && code <= 0x7e);
+     };
+
+     Rakka.hexDump = function (data, limit) {
+         var offset = 0;
+         var size   = Math.min(data.length, limit);
+         var ret    = "";
+
+         for (; offset < size; offset += 16) {
+             ret += printHex(8, offset);
+             ret += "  ";
+
+             var begin = offset;
+             var end   = Math.min(offset + 16, size);
+
+             for (var i = begin; i < end; i++) {
+                 var c = data.charCodeAt(i);
+
+                 ret += printHex(2, c);
+                 ret += " ";
+
+                 if (end - i == 9) {
+                     ret += " ";
+                 }
+             }
+             for (var i = end; i < offset + 16; i++) {
+                 ret += "   ";
+                 if (end - i == 9) {
+                     ret += " ";
+                 }
+             }
+
+             ret += "  |";
+
+             for (var i = begin; i < end; i++) {
+                 var c = data.charCodeAt(i);
+
+                 if (isPrintableAscii(c)) {
+                     ret += data.charAt(i);
+                 }
+                 else {
+                     ret += ".";
+                 }
+             }
+             ret += "|";
+             for (var i = end; i < offset + 16; i++) {
+                 ret += " ";
+             }
+
+             ret += "\n";
+         }
+
+         if (data.length > limit) {
+             ret += printHex(8, offset);
+             ret += "  ...\n";
+         }
+
+         return ret;
+     };
+
+ })();
\ No newline at end of file