]> gitweb @ CieloNegro.org - Rakka.git/blob - js/hexDump.js
hexdumping
[Rakka.git] / js / hexDump.js
1 (function () {
2
3      var repeat = function (times, str) {
4          var ret = "";
5
6          for (var i = 0; i < times; i++) {
7              ret += str;
8          }
9
10          return ret;
11      };
12
13      var printHex = function (width, num) {
14          var ret = Number(num).toString(16);
15
16          if (ret.length < width) {
17              return repeat(width - ret.length, "0") + ret;
18          }
19          else {
20              return ret;
21          }
22      };
23
24      var isPrintableAscii = function (code) {
25          return (code >= 0x20 && code <= 0x7e);
26      };
27
28      Rakka.hexDump = function (data, limit) {
29          var offset = 0;
30          var size   = Math.min(data.length, limit);
31          var ret    = "";
32
33          for (; offset < size; offset += 16) {
34              ret += printHex(8, offset);
35              ret += "  ";
36
37              var begin = offset;
38              var end   = Math.min(offset + 16, size);
39
40              for (var i = begin; i < end; i++) {
41                  var c = data.charCodeAt(i);
42
43                  ret += printHex(2, c);
44                  ret += " ";
45
46                  if (end - i == 9) {
47                      ret += " ";
48                  }
49              }
50              for (var i = end; i < offset + 16; i++) {
51                  ret += "   ";
52                  if (end - i == 9) {
53                      ret += " ";
54                  }
55              }
56
57              ret += "  |";
58
59              for (var i = begin; i < end; i++) {
60                  var c = data.charCodeAt(i);
61
62                  if (isPrintableAscii(c)) {
63                      ret += data.charAt(i);
64                  }
65                  else {
66                      ret += ".";
67                  }
68              }
69              ret += "|";
70              for (var i = end; i < offset + 16; i++) {
71                  ret += " ";
72              }
73
74              ret += "\n";
75          }
76
77          if (data.length > limit) {
78              ret += printHex(8, offset);
79              ret += "  ...\n";
80          }
81
82          return ret;
83      };
84
85  })();