Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. #!/usr/bin/env perl
  2. # Visual hex dump using CP437-like graphics.
  3. # Only few fonts can handle that, but it's better than |........|.
  4. # klg, Jul 2015; Jan 2018
  5. use strict;
  6. use utf8;
  7. use open ':std', (
  8. IN => ':bytes',
  9. OUT => ':locale'
  10. );
  11.  
  12. use constant CP437 => q<
  13. ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼
  14. !"#$%&'()*+,-./0123456789:;<=>?
  15. @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
  16. `abcdefghijklmnopqrstuvwxyz{|}~⌂
  17. ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒ
  18. áíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐
  19. └┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀
  20. αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ 
  21. > =~ s:[\r\n]::gr;
  22. die unless 256 == length CP437;
  23.  
  24. my @G = split '', CP437;
  25.  
  26. my $addr = 0;
  27. my $cnul = 0;
  28. my $prev = '';
  29.  
  30. local $/ = \16;
  31.  
  32. while (<<>>) {
  33. if ($_ eq $prev) {
  34. print "*\n" unless $cnul++;
  35. } else {
  36. $cnul = 0;
  37. my $H = join(' ',
  38. map { join' ', map {sprintf'%02x',ord} split'' } unpack '(a8)2');
  39. my $C = join '', map $G[$_], unpack 'C*';
  40. printf "%08x %-48s │%s│\n", $addr, $H, $C;
  41. }
  42. $prev = $_;
  43. $addr += length;
  44. }
  45. printf "%08x\n", $addr;
  46.  
  47. 1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement