#! /usr/bin/perl -w
#
# Generate AUTHORS
#
# Copyright 1998 Alexandre Julliard
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
use strict;

my @authors;
open(AUTHORS,"<AUTHORS") or die "Can't open AUTHORS";
open(NEWAUTHORS,">AUTHORS.new");
while(<AUTHORS>)
  {
    print NEWAUTHORS;
    last if /^$/;
  }
while(<AUTHORS>)
  {
    chop;
    push @authors, $_;
  }

# Sort them
sub cmpnames()
  {
    my @anames = split(" ",$a);
    my @bnames = split(" ",$b);
    my $ret;
    $ret = $anames[-1] cmp $bnames[-1];
    $ret = $anames[0] cmp $bnames[0] unless $ret;
    return $ret;
  }
@authors = sort cmpnames @authors;

# Print authors
print NEWAUTHORS (join "\n", @authors) . "\n";
print "Created AUTHORS.new\n";
