#!/usr/bin/perl
open(APIW,"./apiw.index");
while(<APIW>)
{
  ($func,$link)=split /:/;
  chop $link;
  $link=~m/(\d*)/;
  $apiw{$func}="http://www.willows.com/apiw/chapter$1/p$link.html";
}
close(APIW);

open(WINDOWS,"../include/windows.h");
while(<WINDOWS>) { add_func($_) if /AccessResource/../wvsprintf/; }
close(WINDOWS);
open(TOOLHELP,"../include/toolhelp.h");
while(<TOOLHELP>) { add_func($_) if /GlobalInfo/../MemoryWrite/; }
close(TOOLHELP);
open(COMMDLG,"../include/commdlg.h");
while(<COMMDLG>) { add_func($_) if /ChooseColor/../ReplaceText/; }
close(COMMDLG);

print "<html><body>\n";

print "<h2>Windows API Functions</h2>\n";
print "The following API functions were found by searching windows.h,\n";
print "toolhelp.h, and commdlg.h.  Where possible, help links pointing\n";
print "to www.willows.com are included.<p>\n";
print "<table>\n";
print "<th>Help-link</th><th></th><th></th><th align=left>Function</th>\n";
foreach $func (sort(keys %funcs))
{
  $funcs{$func}=~m/(.*) +(\w*)(\(.*)/;
  print "<tr>\n<td>";
  if($apiw{$2})
  {
    print "<center><a href=\"$apiw{$2}\">APIW</a></center>";
    $impl{$2}=1;
    $impl++;
  }
  $numfuncs++;
  print "</td>\n";
  print "<td></td>\n";
  print "<td>$1</td>\n";
  print "<td>$2$3</td>\n";
  print "</tr>\n";
}
print "</table><p>\n";
print "(Approximately ",sprintf("%3.1f",$impl/(1.0*$numfuncs)*100.0),
      "% of the functions above are in the APIW standard.)<p>\n";

print "<hr>\n";
print "<h2>Unimplemented APIW functions</h2><p>\n";
print "Here's a list of the API functions in the APIW standard which were <b>not</b> found\n";
print "in windows.h, commdlg.h, or toolhelp.h:<p>\n";
foreach $func (sort (keys %apiw))
{
  if(!$impl{$func})
  {
    print "<a href=\"$apiw{$func}\">$func</a>\n";
    $unimpl++;
  }
  $numapiw++;
}
print "<p>(This comprises approximately ",sprintf("%3.1f",$unimpl/(1.0*$numapiw)*100.0),
      "% of the APIW.)\n";

print "</body></html>\n";

sub add_func
{
  $line=shift;
  chop $line; 
  $line=~s/\s+/ /g;
  ($func)=$line=~m/ (\w*)\(/;
  if($func)
  {
    while($funcs{$func}) { $func.=" "; }
    $funcs{$func}=$line;
  }
}
