#! /usr/bin/perl
#   wd_update
#   inserts dictionary updates into the dictionary source text.
# --- NTNhan 5.31.2001

$LSPLIB=$ENV{'LSPLIB'};
$EMED=$ENV{'EMED'};
$emed = $EMED;
$emed =~ s/\.wdo$//;

open(UPD,"$ARGV[1].upd") || die "-- $ARGV[1].upd not found !\n";

print "... scanning $ARGV[1].upd...\n";
while (<UPD>) {
      chop;
      if (/^\*DELETE /) {
         s/[ ]*$//;
         ($cmd,$word) = split(/ /);
         $skey .= "\t".$word." \\(|\t".$word."\\$|\t".$word."|";
         }
      }

close(UPD);
$skey =~ s/\|$//;
exit if $skey eq "";

print "... scanning $ARGV[0].src...\n";
open(MSRC,"$ARGV[0].src") || open(MSRC,"$LSPLIB/$ARGV[0].src") || die "... $ARGV[0].src not found !\n";
open(USRC,"> $ARGV[1].src") || die "... $emed.src not found !\n";

$word="";
while (<MSRC>) {
      chop;
      if (eof(MSRC)) {
         if (! /\t/) {
            $ENTRY{$word} .= "\@".$_;
            $_ = "";
            }
         if ($ENTRY{$word} !~ /$skey/) {
            if ($ENTRY{$word} =~ /\@/) {
               @defs = split(/\@/,$ENTRY{$word});
               print USRC join("\n",@defs)."\n" if $ENTRY{$word} ne "";
               }
            else {
               print USRC $ENTRY{$word}."\n" if $ENTRY{$word} ne "";
               }
            }
         print USRC $_."\n" if $_ ne "" && $_ !~ /$skey/;
         }
      elsif (/\t/) {
         if ($ENTRY{$word} !~ /$skey/) {
            if ($ENTRY{$word} =~ /\@/) {
               @defs = split(/\@/,$ENTRY{$word});
               print USRC join("\n",@defs)."\n" if $ENTRY{$word} ne "";
               }
            else {
               print USRC $ENTRY{$word}."\n" if $ENTRY{$word} ne "";
               }
            }
            # -- at a new entry
         $ENTRY{$word} = $_;
         }
      else {
         $ENTRY{$word} .= "\@".$_;
         }
      }

open(UPD,"$ARGV[1].upd") || die "-- $ARGV[1].upd not found !\n";
print "... writing output to $ARGV[1].src...\n";

while (<UPD>) {
      chop;
      s/[ ]*$//;
      next if /^$/;
      if (! /^\*DELETE /) {
         print USRC $_."\n";
         }
      }

close(USRC);
close(UPD);
