#!/usr/bin/perl
use strict;

#
# lfrms - list frame ranges
# 1.00 01/12/98 erco@3dsite.com
#

$| = 1;

# MAIN
{
    my $dir;
    my @curdir = ( "." );
    my @dirs = ( $#ARGV == -1 ) ? @curdir : @ARGV;

    foreach $dir ( @dirs )
    {
        if ( $#dirs > 0 ) { print "$dir:\n"; }
        my @list = split(/\n/, `ls $dir`);
        my @last = "";
        my $start;
        my $pending = 0;

        foreach ( @list )
        {
            if ( /(.*)\.([0-9]*)\.(.*)/ )
            {
                # NO MATCH ON LAST NAME? SKIP
                if ( $1 ne $last[0] || $3 ne $last[2] || ($2-$last[1]) != 1 )
                {
                    # END LAST RANGE
                    if ( $last[0] ne "" && $last[2] ne "" )
                    {
                        if ( $start == $last[1] ) 
                            # JUST ONE FRAME? PRINT IT
                            { printf("%s.%s\n", $start, $last[2]); }
                        else
                            # RANGE? PRINT AS RANGE
                            { printf("[%s-%s].%s\n", $start, $last[1], $last[2]); }
                    }

                    # START NEW RANGE
                    printf("%s.", $1);
                    $start   = $2;
                    $pending = 1;
                }

                # SAVE FOR NEXT ITER
                $last[0] = $1; $last[1] = $2; $last[2] = $3;
            }
        }
        if ( $pending ) 
        {
            if ( $start == $last[1] ) 
                # JUST ONE FRAME? PRINT IT
                { printf("%s.%s\n", $start, $last[2]); }
            else
                # RANGE? PRINT AS RANGE
                { printf("[%s-%s].%s\n", $start, $last[1], $last[2]); }
        }
    }
}
