#! /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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#
use strict;

my @authors;
open(AUTHORS,"<AUTHORS") or die "Can't open AUTHORS";
open(NEWAUTHORS,">AUTHORS.new") or die "Can't open 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";
