#!/usr/bin/perl
#

use strict;
use Getopt::Std;
use IO::File;
use Time::HiRes qw( usleep );

our ($opt_p,$opt_c,$opt_i);
$opt_p = 'message number (\d+)';
getopts( "i:p:c" );
my ($line,$l,$pause,$i);
$i = new IO::File( $opt_i, O_RDWR|O_NONBLOCK );

do
{
    while( defined( $line = $i->getline ) )
    {
	$l = handle_line( $line, $opt_p, $l );
    }
    if ( $opt_c )
    {
	usleep( 100000 );
	if ( defined( $line = $i->getline ) )
	{
	    $l = handle_line( $line, $opt_p, $l );
	    #print "short: $l\n";
	}else
	{
	    # stalled
	    print "paused at $l\n"
		if $l;
	    $pause = $l;
	    do
	    {
		usleep( 100000 );
		if ( defined( $line = $i->getline ) )
		{
		    $l = handle_line( $line, $opt_p, $l );
		    print "resumed $l\n"
			if $pause;
		}
	    } while ($pause == $l);
	}
    }
} while( $opt_c );

sub
handle_line
{
    my $line = shift;
    my $pattern = shift;
    my $l = shift;
    if ( $line =~ m/$pattern/ )
    {
	if (! $l)
	{
	    $l = $1;
	    print "Starting sequence at $l\n";
	}
	else
	{
	    print "Discontinuity: $l -> $1\n"
		if $1 != ($l + 1);
	    $l = $1;
	}
    }
    return $l;
}
