App-Textcast
view release on metacpan or search on metacpan
lib/App/Textcast.pm view on Meta::CPAN
=back
=cut
my ($directory) = @_ ;
unless(defined $directory)
{
my $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
$now_string=~ s/[^[:digit:][:alpha:]]/_/sxmg ;
$directory = "textcast_recorded_on_$now_string" ;
}
if(-e $directory)
{
local $ERRNO = 1 ;
croak "Error: Textcast directory '$directory' already exists!\n" ;
}
else
{
#todo: get the max path on this platform
local $ERRNO = 2 ;
Readonly my $MAX_PATH_LENGTH => 256 ;
croak 'Error: Path too long' if length($directory) > $MAX_PATH_LENGTH ;
if($directory =~ /([[:alnum:]\/_-]+)/sxm)
{
$directory = $1 ;
}
else
{
Readonly my $ERRNO_INVALID_PATH => 3 ;
local $ERRNO = $ERRNO_INVALID_PATH ;
croak 'Error: Invalid path! Path can only contain alphanumerics and path separator.'
}
mkdir $directory or croak "Can't create directory '$directory'! $!\n" ;
}
return $directory ;
}
#---------------------------------------------------------------------------------------------------------
# Playing
#---------------------------------------------------------------------------------------------------------
sub play_textcast
{
=head2 play_textcast( %named_arguments)
Loads, checks, and initiates the textcast replay. Displays information after the textcast replay.
use App::Textcast 'play_textcast' ;
play_textcast
(
TEXTCAST_DIRECTORY => $input_directory,
OVERLAY_DIRECTORY => $overlay_directory,
DISPLAY_STATUS => $display_status,
START_PAUSED => $start_paused,
) ;
I<Arguments>
=over 2
=item * TEXTCAST_DIRECTORY - String - directory containing the textcast
=item * OVERLAY_DIRECTORY - not implemented
=item * DISPLAY_STATUS - Boolean -
=item * START_PAUSED - not implemented
=back
I<Returns> - Nothing
I<Exceptions>
=over 2
=item * Terminal too small
=item * interrupted by user
=item * load_index
=back
=cut
my (%arguments) = @_ ;
my $input_directory = $arguments{TEXTCAST_DIRECTORY} or croak 'Error: Expected textcast location!' ;
my $display_status = $arguments{DISPLAY_STATUS} || 0 ;
local $SIG{INT} = sub
{
print "\n" ;
local $ERRNO = 1 ;
croak "Caught interrupt signal!\n" ;
} ;
my $screenshot_information = load_index($input_directory) ;
my ($max_rows, $max_columns) = (-1, -1) ;
for my $screenshot_data (@{$screenshot_information})
{
#~ print "$screenshot_data->{terminal_rows}, $screenshot_data->{terminal_columns} \n" ;
$max_rows = $screenshot_data->{terminal_rows} if $screenshot_data->{terminal_rows} > $max_rows ;
$max_columns = $screenshot_data->{terminal_columns} if $screenshot_data->{terminal_columns} > $max_columns ;
}
my ($terminal_columns, $terminal_rows) = $get_terminal_size->() ;
( run in 1.091 second using v1.01-cache-2.11-cpan-df04353d9ac )