#!/usr/bin/perl $DICT = $ENV{'DICT'} || 'dict'; $QUERY = $ENV{'QUERY_STRING'} || $ARGV[0]; $SCRIPT_NAME = $ENV{'SCRIPT_NAME'} || $0; $CGI = "file://$SCRIPT_NAME"; $CGI2 = "file:"; # $CGI2 = "file:///\$LIB/hlink.cgi?"; $SQUEEZE = 1; if ($QUERY =~ /\=/) { for (split('&', $QUERY)) { ($v, $q) = split('=', $_, 2); $query{$v} = &form_decode($q); } } else { $QUERY =~ s/^word=//; $query{"word"} = &form_decode($QUERY); } if ((! $query{"word"}) && (! $query{"server"}) && (! $query{"dict"})) { print < Dict

Search dictionnary entry :

Word :
Server :
Dictionnary :
EOF exit; } if ($query{"server"}) { $server = $query{"server"}; $servercmd = "-h $server"; } else { $server = ""; $servercmd = ""; } if ($query{"word"}) { $word = $query{"word"}; $wordcmd = "'$word'"; if ($query{"dict"}) { $database = $query{"dict"}; $databasecmd = "-d $database"; } else { $database = ""; $databasecmd = ""; } } else { $word = ""; $wordcmd = ""; if ($query{"dict"}) { $database = $query{"dict"}; $databasecmd = "-i $database"; } else { $database = ""; $databasecmd = "-DSI"; } } open(F, "$DICT $databasecmd $servercmd $wordcmd 2> /dev/null |"); $ok = 0; undef $header; $blank = -1; while() { if (! defined($header)) { /^\s*$/ && next; $header = $_; $space = $header; chop $space; $space =~ s/\S.*//; } elsif ($_ eq $header) { # delete header $blank = -1; next; } if ($SQUEEZE) { if (/^\s*$/) { $blank || $blank++; next; } elsif ($blank) { $blank > 0 && print "\n"; $blank = 0; } } if (! $ok) { /^No/ && last; print < Dictionnary entry : $word

Dictionnary entry : $word

EOF
    print;
    $ok = 1;
    next;
  }

  # XXX : replace $1 with the dictionnary's database name
  #s@\[{([^}]*)}\]@[$1]@g;
  s@{([^}]*)}@$1@g;
  s@(http|ftp)://[\w.\-/~]+[\w/]@$&@g;
  s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1$2$3@g;
  print;
}
close(F);
if (! $ok) {
  if ($query{'quit'}) {
    print STDERR "No dictionnary entry for word '$word' on server '$server' in dictionnary '$database'.\n";
    print <
Dictionnary entry : $word

$DICT $databasecmd $servercmd $wordcmd

Query was : $QUERY Word : "$word" ($wordcmd) Server : "$server" ($servercmd) Dictionnary : "$database" ($databasecmd)

No dictionnary entry for $word on server $server in dictionnary $database.

Command results : EOF open(F, "$DICT $databasecmd $servercmd $wordcmd 2>&1 |"); while() { print $_; } close(F); } print < EOF sub form_decode { local($_) = @_; s/\+/ /g; s/%([\da-f][\da-f])/pack('c', hex($1))/egi; return $_; }