sub Prolog{
my($str,$strA,@lines);
$str=shift(@_);
$strA=$str;
$strA=~s/\.bib$//;
$strA.='.coauthorurl'; # safer if name doesn't end in .bib
if( -f $strA ) {
  if(open(IN,$strA) ) {
    @lines=;
    close(IN);
    $strA=join(" ",@lines);
    eval($strA);
    }
  else {print"Failed to open coauthor file file \"",$str,"\".\n";}
  }
$str=~s/\.bib$//;$str.='.prolog'; # safer if name doesn't end in .bib
if(open(IN,$str) ) {
  print main::OUT ;
  close(IN);
  }
else {print"Failed to open Prolog file \"",$str,"\".\n";}
}

sub Epilog{
my($str);
$str=shift(@_);
$str=~s/\.bib$//;$str.='.epilog'; # safer if name doesn't end in .bib
if(open(IN,$str) ) {
  print main::OUT ;
  close(IN);
  }
else {print"Failed to open Epilog file \"",$str,"\".\n";}
}

sub BBL{
my($file);
$file=shift(@_);
$file=~s/\.bib$//;$file.='.pub.html'; # safer if name doesn't end in .bib
return($file);
}

sub compute_sort_hash{
&main::reverse_input_hash(@_);
}

######################################
##    format_??
##    author
##    editors
##    pages
##    format_name_string
######################################

sub format_author{ 
my($xyx);
$xyx=shift(@_);
&main::string_name_field(\${${$xyx}}{"author"},"Y");
}

sub format_editors{ # first_initial~last_name
my($xyx);
$xyx=shift(@_);
&main::string_name_field(\${${$xyx}}{"editor"},"Y");
}

sub format_pages{
my($xyx);
$xyx=shift(@_);
%item=%{${$xyx}};
${${$xyx}}{"pages"}=~s/--/-/;
}

sub format_name_string{
my(@names,$str,$ii,$url_hash);
$str=shift(@_);
@names=@{$str};
$str="";
for($ii=0;$ii<=$#names;$ii++){
  $url_hash=$names[$ii];
  $str.=$names[$ii++]." ";  ##  first
  $url_hash.=' '.$names[$ii];
  $str.=$names[$ii++]." ";  ##  von
  $url_hash.=' '.$names[$ii];
  $url_hash=~s/~/ /g;$url_hash=~s/ +/ /g;
  if( defined($author_url{$url_hash}) && $author_url{$url_hash} ne "" ) {
    $url_hash=$author_url{$url_hash};
    $url_hash=~s/~/\002/; # hide url ~'s
    $str.="‹a href=\"".$url_hash."\">".$names[$ii++]."‹\/a>, "; ## url'ed last
    }
  else {
    $str.=$names[$ii++].", "; ## last
    }
  $str.=$names[$ii]."¥";    ## Jr.
  }
$str=~s/  / /g;$str=~s/, +¥/¥/g;$str=~s/¥$//;
$ii=rindex($str,'¥');
if($ii>0) {substr($str,$ii,1)=" and ";}
$str=~s/¥/, /g;
$str=~s/ ,/,/;$str=~s/ +/ /;
return($str);
}

###################################

###################################
sub MR{
my($str);
$str=shift(@_);
if($str ne "" ) {
  print main::OUT "MR# ";
  if($str=~m/:/) {
    print main::OUT "‹a href=\"http:\/\/www\.ams\.org/mathscinet-getitem?mr=";
    print main::OUT $str,"\">",$str,"‹\/a>\n";
    }
  else {
    print main::OUT $str,"\n";
    }
  }
}

sub ZB{
my($str);
$str=shift(@_);
if($str ne "" ) {
  print main::OUT "  ZB# ";
  print main::OUT "‹a href=\"http:\/\/gonzo.springer-ny\.com\/cgi-bin\/zmen\/ZMATH\/en\/zmath\.html\?first=1&maxdocs=20&type=html&an=";
  print main::OUT $str, "&format=complete\">";
  print main::OUT $str,"‹\/a>";
  }
}

sub textat{
my($str,$tt,$xx);
$str=shift(@_);$tt="";
while ( ($xx=index($str,"URL(")) >=0  ) {
  $tt.=substr($str,0,$xx);
  $str=substr($str,$xx+4);
  $xx=index($str,")(");
  $tt.="‹A href=\"".substr($str,0,$xx)."\">";
  $str=substr($str,$xx+2);
  $xx=index($str,")");
  $tt.=substr($str,0,$xx)."‹/A>";
  $str=substr($str,$xx+1);
  }
$tt.=$str;
if($tt ne "" ) {
  print main::OUT $tt;
  }
}

sub Author{
my($str,$names);
$names=shift(@_);
$str=&format_name_string($names);
$str=~s/~/ /g;$str=deTeX($str);
$str=~s/\002/~/g; # dont' confuse url ~'s with TeX ~'s
print main::OUT $str,".\n";
}

sub deTeX{
my($str);
$str=shift(@_);
$str=~s/}//g;$str=~s/{//g;$str=~s/--/-/g;
$str=~s/\\-//g;
$str=~s/\\\"a/ä/g;
$str=~s/\\\"u/ü/g;
$str=~s/\\\"o/ö/g;
$str=~s/\\\'e/é/g;
return($str);
}

###################################

sub tag_it{
my($str);
$str=shift(@_);$str=~m/ /;
print main::OUT "‹b>[",$'-$`+1,"]‹\/b> ";
}


sub output_ARTICLE{
my(%item,@names,$ii,$str);
%item=%{shift(@_)};
tag_it($item{"read_in"});
@names=@{$item{"author"}};
Author(\@names);
###
if($item{"url"} ne "") {
  print main::OUT "‹a href=\"",$item{"url"},"\">";
  print main::OUT deTeX($item{"title"}),". ";
  print main::OUT "‹\/a>. ";
  }
else {
  print main::OUT deTeX($item{"title"}),". ";
  }
print main::OUT "‹em>",$item{"journal"},",‹\/em>";
if( $item{"volume"} ne "" ) {print main::OUT "‹b>",$item{"volume"},"‹\/b> ";}
if($item{"pages"} ne "" ){print main::OUT ", ",$item{"pages"};}
print main::OUT ", ",$item{"year"},". \n";
MR($item{"mr"});
ZB($item{"zb"});
textat($item{"textat"});
print main::OUT "‹br>‹br>\n\n";
}


sub output_BOOK{
my(%item,@names,$ii,$str);
%item=%{shift(@_)};
tag_it($item{"read_in"});
@names=@{$item{"author"}};
Author(\@names);
###
print main::OUT deTeX($item{"title"}),". ";
if( $item{"series"} ne "" ) {print main::OUT ", ",deTeX($item{"series"});
  if( $item{"volume"} ne "" ) {print main::OUT " ‹b>",$item{"volume"},"‹\/b>";}
  }
if( $item{"publisher"} ne "" ) {print main::OUT ", ",deTeX($item{"publisher"});
  if( $item{"address"} ne "" ) {print main::OUT ", ",deTeX($item{"address"});}
  }
print main::OUT " (",$item{"year"},")";
if($item{"pages"} ne "" ){print main::OUT " pp.",$item{"pages"},". \n";}
MR($item{"mr"});
ZB($item{"zb"});
print main::OUT "‹br>‹br>\n\n";
}

sub output_INCOLLECTION{
output_INPROCEEDINGS(@_);
}

sub output_INPROCEEDINGS{
my(%item,@names,$ii,$str);
%item=%{shift(@_)};
tag_it($item{"read_in"});
@names=@{$item{"author"}};
Author(\@names);
###
if($item{"url"} ne "") {
  print main::OUT "‹a href=\"",$item{"url"},"\">";
  print main::OUT deTeX($item{"title"}),". ";
  print main::OUT "‹\/a>. ";
  }
else {
  print main::OUT deTeX($item{"title"}),". ";
  }
###
##print main::OUT deTeX($item{"title"}),". ";
###
print main::OUT "\"",deTeX($item{"booktitle"}),"\", ";
if( $item{"editors"} ne "") {print main::OUT " (Ed. by: ",deTeX($item{"editors"}),")";}
if( $item{"series"} ne "" ) {print main::OUT " ",deTeX($item{"series"});
  if( $item{"volume"} ne "" ) {print main::OUT " ‹b>",$item{"volume"},"‹\/b>";}
  }
if( $item{"publisher"} ne "" ) {print main::OUT ", ",deTeX($item{"publisher"});
  if( $item{"address"} ne "" ) {print main::OUT ", ",deTeX($item{"address"});}
  }
print main::OUT " (",$item{"year"},")";
if($item{"pages"} ne "" ){print main::OUT " pp.",$item{"pages"},". \n";}
MR($item{"mr"});
ZB($item{"zb"});
print main::OUT "‹br>‹br>\n\n";
}