| 'use strict'; | |
| 
 | |
| var zero = function (n, max) { | |
|   n = n.toString(16).toUpperCase(); | |
|   while (n.length < max) { | |
|     n = '0' + n; | |
|   } | |
|   return n; | |
| }; | |
| 
 | |
| module.exports = function (buffer) { | |
|   var rows = Math.ceil(buffer.length / 16); | |
|   var last = buffer.length % 16 || 16; | |
|   var offsetLength = buffer.length.toString(16).length; | |
|   if (offsetLength < 6) offsetLength = 6; | |
| 
 | |
|   var i; | |
|   var str = ''; | |
| 
 | |
|   var b = 0; | |
|   var lastBytes; | |
|   var lastSpaces; | |
|   var v; | |
| 
 | |
|   for (i = 0; i < rows; i++) { | |
|     str += '\u001b[36m' + zero(b, offsetLength) + '\u001b[0m  '; | |
|     lastBytes = i === rows - 1 ? last : 16; | |
|     lastSpaces = 16 - lastBytes; | |
| 
 | |
|     var j; | |
|     for (j = 0; j < lastBytes; j++) { | |
|       str += ' ' + zero(buffer[b], 2); | |
|       b++; | |
|     } | |
| 
 | |
|     for (j = 0; j < lastSpaces; j++) { | |
|       str += '   '; | |
|     } | |
| 
 | |
|     b -= lastBytes; | |
|     str += '   '; | |
| 
 | |
|     for (j = 0; j < lastBytes; j++) { | |
|       v = buffer[b]; | |
|       str += (v > 31 && v < 127) || v > 159 ? String.fromCharCode(v) : '.'; | |
|       b++; | |
|     } | |
| 
 | |
|     str += '\n'; | |
|   } | |
| 
 | |
|   return str; | |
| };
 |