#!/usr/bin/perl
#
# Simple twiddle/progress bar program.
#
# Not so simple setup to make things slow down enough to actually look
# like it's doing something useful.
#
#

# Need this for ceil() and floor() when calculating progress
use POSIX;

$|=1; # autoflush stdout

# Twiddle variables
my @twiddle = ("|","/","-","\\");
my $index = 0;


# Main operation loop.  Do stuff like copy file blocks or something
for ($i=0;$i<360;$i++) { 

	&dostuff();
	&progress($i,360);

}

print ("\nDone.\n");

# Print our progress bar
sub progress($) {

	my $cur = shift(@_);
	my $max = shift(@_);

	my $progress = ceil(($cur * 100) / $max);
	my $width = floor($progress*50/80);

	&twiddle();
	printf(" [ %3d%% ] ",$progress);

	for ($j=0;$j<$width;$j++) {
		print ("=");
	}
	print ("> ");
	print ("\r");
}

# Print our current twiddle character
sub twiddle {
	print("$twiddle[$index++]");

	if ($index > $#twiddle) {
		$index = 0;
	}
}

# Waste some time
sub dostuff {
	&fib(99);
}

# 1 1 2 3 5 etc
sub fib($) {
	
	$n = shift;

	if ($n <= 0 || $n == 1) {
		return $n;
	} else {
		return &fib($n-1)+&fib($n-2);
	}
}

	

