Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

wanka

by turnstep (Parson)
on Aug 08, 2000 at 23:57 UTC ( #26874=sourcecode: print w/ replies, xml ) Need Help??

Category: Utility Scripts/Text Processing
Author/Contact Info turnstep
Description:

Just a simple hex editor-type program. I actually wrote this back in 1996, so go easy on it! :) I cleaned it up a little to make it strict-compliant, but other than that, it is pretty much the same. I used it a lot when I was learning about how gif files are contructed. Good for looking at files byte by byte.

I have no idea why it was named wanka but it has stuck. :)

#!/usr/bin/perl -- -*-fundamental-*-

## Note: written in 1996 so I am not sure why I use 
## "BRASS" and "gold". It may have been because I was 
## playing with POV-RAY...
## perl@turnstep.com

use strict;

my $gzcat = "/usr/local/bin/gzcat";
my $LINESPERPAGE = 20;
my $file;

unless ($file = shift) {
  print "What file? ";
  chop($file = <STDIN>);
}

my $cols = shift;
if ($cols<1 or $cols > 20) { $cols=12; }

my $oneline = shift;

if ($file =~ /\.gz$/) {
  open(GOLD, "$gzcat $file|") || die qq[Sorry, can't open "$file": $!\
+n];
}
else {
  open(GOLD, $file) || die qq[Sorry, can't open "$file": $!\n];
}

print "\n$file:\n";
my $x=0; my $line=0; my $chars=0; my $page=1; my $totalchars=0;
my $brass; my $newline; my $fin; my $all;
while (read(GOLD, $brass, 1)){
  $newline=0;
  if ($fin) { print "    "; $brass=''; }
  else { printf "%3d ", ord($brass); }

  if ($oneline and ord($brass)==10) { $fin=1; }
  $totalchars++; $chars++;
  $all .= $brass;
  if ($x++ > $cols) {
    $x=0;
    print "  ";
    if ($all =~ y/\n/$/) { $newline=1; }
    $all =~ y/\t/=/;
    $all =~ y/\0-\37\177-\377/?/;
    print "$all\n";
    $all = "";
    if ($line++ > $LINESPERPAGE) {
      print " ($totalchars characters) (Page: $page)";
      print "  <<HIT RETURN FOR MORE>> ";
      $line=0;
      $a = <STDIN>;
      if ($page++ > 1 and $a =~ /-/) {
        seek(GOLD, -$chars*2, 1); $totalchars-=$chars*2;
        $page-=2;
      }
      $chars=0;
      print "\n";
    }
  }
$newline and $oneline and exit;
}

## Clean up any extra:
$all =~ y/\0-\37\177-\377/./;
for ($x..$cols) { print "****"; }
print "***    $all\n\n";
print "($totalchars characters)\n";

print "\n\n";

Comment on wanka
Download Code

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://26874]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2014-09-02 01:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (18 votes), past polls