The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

package App::Asciio ;

$|++ ;

use strict;
use warnings;

use Data::TreeDumper ;
use Getopt::Long ;

#-----------------------------------------------------------------------------

sub ParseSwitches
{
my ($self, $switches_to_parse, $ignore_error) = @_ ;

my $asciio_config = {} ;

Getopt::Long::Configure('no_auto_abbrev', 'no_ignore_case', 'require_order') ;

my @flags = Get_GetoptLong_Data($asciio_config) ;

@ARGV = @{$switches_to_parse} ;

# tweek option parsing so we can mix switches with targets
my $contains_switch ;
my @targets ;

do
	{
	while(@ARGV && $ARGV[0] !~ /^-/)
		{
		#~ print "target => $ARGV[0] \n" ;
		push @targets, shift @ARGV ;
		}
		
	$contains_switch = @ARGV ;
	
	local $SIG{__WARN__} = sub {print STDERR $_[0] unless $ignore_error ;} ;
			
	unless(GetOptions(@flags))
		{
		return(0, "Try perl asciio -h.", $asciio_config, @ARGV) unless $ignore_error;
		}
	}
while($contains_switch) ;

$asciio_config->{TARGETS} = \@targets ;

#~ use Data::TreeDumper ;
#~ print DumpTree $asciio_config ;

return(1, '', $asciio_config) ;
}

#-------------------------------------------------------------------------------

sub Get_GetoptLong_Data
{
my $asciio_config = shift || die 'Missing argument.' ;

my @flags_and_help = GetSwitches($asciio_config) ;

my $flag_element_counter = 0 ;
my @getoptlong_data ;

for (my $i = 0 ; $i < @flags_and_help; $i += 4)
	{
	my ($flag, $variable) = ($flags_and_help[$i], $flags_and_help[$i + 1]) ;
	push @getoptlong_data, ($flag, $variable)  ;
	}

return(@getoptlong_data) ;
}

#-------------------------------------------------------------------------------

sub GetSwitches
{
my $asciio_config = shift || {} ;

$asciio_config->{SETUP_PATH} = undef ;

my @flags_and_help =
	(
	'setup_path=s'                          => \$asciio_config->{SETUP_PATH},
		'Sets the root of the setup directory.',
		'',
		
	's|script=s'                          => \$asciio_config->{SCRIPT},
		'script to be run at AsciiO start.',
		'',
		
	'h|help'                          => \$asciio_config->{HELP},
		'Displays some help.',
		'',
	) ;
	
return(@flags_and_help) ;
}

#-----------------------------------------------------------------------------

1 ;