#!/usr/bin/perl -w use strict; use DirHandle; use File::Basename; use File::stat; use Getopt::Long; use POSIX qw(strftime); use POSIX qw(locale_h); use locale; my $rcs = '$Id: listfiles.pl,v 1.15 2003/03/16 13:19:41 gilles Exp gilles $ '; my $myself = $0; my $debug = 0; my $dots = 19; my $date = scalar(localtime()); my $title; GetOptions( "debug" => \$debug, "dots:i" => \$dots, ) or exit 1; my @files; @files = @ARGV; $debug and print join("\n", "
FILES:",
		      @files,
		      "
"); my (%files, @list, %done); $debug and print "
\n";

$debug and print "---- first pass\n";
foreach my $file (@files) {
	$debug and print "-- $file\n";
	next unless (-f $file);
	
	my ($dir,$base,$lang,$type) = split_name($file);
	next unless defined($dir);
	$debug and print "($dir,$base,$lang,$type)\n";
	my $source = get_depend($file);
	$debug and print "source $source\n";
	my $inode;
	if (-f $source) {
		$inode = stat($source);
	}else{
		$inode = stat($file);
	}
	my $inode_file = stat($file);
	my $size     = int(($inode_file->size / 1024) + 0.5);
	my $size_str = sprintf("%3dk", $size);
	my $mtime    = $inode->mtime;
	setlocale(LC_ALL, $lang);
	my $mtime_str = strftime "%Y %b %e", localtime($mtime);
	$debug and print "LANG $lang $mtime_str\n";
	$debug and print "SIZE $size $size_str\n";
	$files{$file}{'dir'} = $dir;
	$files{$file}{'base'} = $base;
	$files{$file}{'lang'} = $lang;
	$files{$file}{'ext'}  = $type;
	$files{$file}{'size'} = $size_str; 
	$files{$file}{'mtime_str'} = $mtime_str;
	$files{$file}{'mtime'} = $mtime;

}
$debug and print "
\n"; foreach my $file (sort { $files{$a}{'base'} cmp $files{$b}{'base'} || $files{$a}{'lang'} cmp $files{$b}{'lang'} || $files{$a}{'ext'} cmp $files{$b}{'ext'} } keys %files) { my $dir = $files{$file}{'dir'} ; my $base = $files{$file}{'base'} ; my $lang = $files{$file}{'lang'} ; my $ext = $files{$file}{'ext'}; my $size = $files{$file}{'size'}; my $mtime_str = $files{$file}{'mtime_str'}; my $mtime = $files{$file}{'mtime'}; my $date; if ((time - $mtime) <= 60*60*24*30) { $date = "$mtime_str"; }else{ $date = $mtime_str; } push(@list, "\n$date " . $lang . ") $base " . space($dots,$base) ) unless exists($done{"$base\/$lang"}); push (@list, "$size $ext"); $done{"$base\/$lang"}++; $debug and print "$base\/$lang", " : ", $done{"$base\/$lang"}, "\n"; } print <@list EOF sub get_depend { my $file = shift; my $source; my ($dir,$base,$lang,$type) = split_name($file); return "" unless defined $dir; my $source_base = "$base.$lang"; my $source_m4 = "$dir/../sgml/$source_base.m4"; my $source_sgml = "$dir/../sgml/$source_base.sgml"; if (-f $source_m4) { $source = $source_m4; } elsif (-f $source_sgml) { $source = $source_sgml; } else { $source = ""; } return $source; } sub split_name { my $file = shift; my $dirname = dirname($file); my $basename = basename($file); unless ($basename =~ /(.*)\.(..)\.(.*)/) { return(()); } else{ $debug and print "split_name : ($1, $2, $3)\n"; my $dir = $dirname; my $base = $1; my $lang = $2; my $type = $3; return($dir,$base,$lang,$type); } } sub space { my $num = shift; my $string = shift; my $diff = $num - length($string); unless ($diff > 0) { return ""; }else{ return("." x $diff); } }