Category: Miscellaneous
Author/Contact Info #include (
Description: A small script that makes Ed2K links for use with the eDonkey P2P network. Just pass the script a filename as an argument, and the Ed2K link is printed to STDOUT. Uses Digest::MD5.

MASSIVE UPDATE: I pretty much rewrote the script from scratch and added a bunch of stuff: the ability to be used as both a commandline tool AND a GUI tool, the ability to hash multiple files, and some minor bugfixes. If you want to use the GUI, you must have Tk installed.
# Revision: 0.4
# Author: #include
# License: GPL
# Creates a "hash" link for use with the
# eDonkey2000 network, and prints it to
# STDOUT.  Works as both a commandline tool
# and as a GUI tool.  If the script is passed
# a list of filenames as arguments, it will
# print a link for each file to STDOUT.
# If the script is run with NO arguments,
# it starts in GUI mode.  A Tk dialog will
# pop up and ask for a filename.  The file's
# Ed2K link is printed to STDOUT.
# Usage:
# $ perl > finishe
# $ perl
use Digest::MD5;
use strict;
my $text;

if ($#ARGV >= 0 )
  foreach my $fname (@ARGV)
    print make_ed2k_link($fname);
} else {
  # Start up the GUI
  use Tk;
  my $mw = MainWindow->new();
  $mw->Label(-text=>"Please enter a filename to hash:")->pack(-fill=>'
  $mw->Entry(-width => 25, -textvariable, \$text)->pack(-anchor => 'nw
  $mw->Button(-text => "OK",
    -command => \&do_hash )
    ->pack(-side => 'top',
    -anchor => 'nw',-fill=>'x');
  $mw->Button(-text => "Cancel",
    -command => sub { exit })
    ->pack(-side => 'top',
    -anchor => 'nw',-fill=>'x');


sub do_hash
    print make_ed2k_link($text);

sub make_ed2k_link
  my $ctx = Digest::MD5->new;
  open(TFILE,"<$fname") or die "Can't open target file ($fname).";
  close TFILE;
  my $fhash = $ctx->hexdigest;
  my $fsize = -s $fname;
  return "ed2k://|file|$fname|$fsize|$fhash|\n";