From d9ca51ae058d2314b4420328a6d0725b87f34638 Mon Sep 17 00:00:00 2001 From: bothorel Date: Thu, 10 Mar 2011 12:53:44 +0000 Subject: evolution --- src/transduct | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 113 insertions(+), 11 deletions(-) diff --git a/src/transduct b/src/transduct index 38561ae..e620fe0 100755 --- a/src/transduct +++ b/src/transduct @@ -2,7 +2,7 @@ # # transduct, an Ivy transductor # -# Copyright (C) 2002 +# Copyright (C) 2002-2010 # Centre d'Études de la Navigation Aérienne # # Main @@ -25,10 +25,18 @@ my $help = undef; my $app_name = "TRANSDUCT"; my $num_message = 0; my @outputs; +my @scripts; my @outputtoggles; my $max_nb_parameters = 10; my %toggled_message; +my %stepped_message; +my %step_message; +my %global_var; +my %stepped_value; +my %mini_message; +my %maxi_message; my $output_type = undef; +my (%tinfo) = ('w' => 0); my %options = ('bus=s', \$bus, 'verbose', \$verbose, @@ -88,6 +96,13 @@ sub Usage { print " --help : help\n"; } +sub data { + Verbose (__LINE__, 0, "A new data"); + my ($parser, $elementname, %attrs) = @_; + $global_var{$attrs{name}} = $attrs{value}; + print "$attrs{name} ==>\n"; +} + sub message { $num_message++; Verbose (__LINE__, 0, "A new message"); @@ -98,24 +113,44 @@ sub input { my ($parser, $elementname, %attrs) = @_; (my $name) = $attrs{name}; Verbose (__LINE__, 0, "input <$name>"); + $output_type="normal"; $ivy->bindRegexp ("$name", [\&CB_Callback, $num_message]); if ($attrs{type}) { my $type = $attrs{type}; if ($type eq "toggle") { $toggled_message{$num_message} = 0; + } elsif ($type eq "step") { + $stepped_message{$num_message} = 0; + $step_message{$num_message} = $attrs{step}; + $mini_message{$num_message} = $attrs{mini}; + $maxi_message{$num_message} = $attrs{maxi}; + $output_type="step"; } } } +sub script { + Verbose (__LINE__, 0, "A new script"); + my ($parser, $elementname, %attrs) = @_; + (my $cmd) = $attrs{cmd}; + Verbose (__LINE__, 0, "output script <$cmd>"); + + if (! $scripts[$num_message]) { + $scripts[$num_message] = $cmd; + } else { + $scripts[$num_message] .= " , $cmd"; + } + +} + sub output { Verbose (__LINE__, 0, "A new output"); - $output_type="normal"; } sub outputtoggle { Verbose (__LINE__, 0, "A new outputtoggle"); $output_type="toggled"; -} +} sub item { Verbose (__LINE__, 0, "A new item"); @@ -123,13 +158,35 @@ sub item { (my $msg) = $attrs{msg}; Verbose (__LINE__, 0, "output item <$msg>"); - if($output_type eq "normal") { + if ($msg =~ m/OpenClearanceEditor/) { + for (my $i = 0; $i < 100000; $i++) { + # + } + } + + if ( ($output_type eq "normal") || ($output_type eq "toggled")) { + my @the_keys = keys (%global_var); + if (scalar (@the_keys) != 0) { + foreach my $key (@the_keys) { + $msg =~ s/\$$key/$global_var{$key}/; + print "==> $msg\n"; + } + } + } + + if ( ($output_type eq "normal")) { + if (! $outputs[$num_message]) { + $outputs[$num_message] = $msg; + } else { + $outputs[$num_message] .= " , $msg"; + } + } elsif ($output_type eq "step") { if (! $outputs[$num_message]) { $outputs[$num_message] = $msg; } else { $outputs[$num_message] .= " , $msg"; } - } else { + } elsif ($output_type eq "toggled") { if (! $outputtoggles[$num_message]) { $outputtoggles[$num_message] = $msg; } else { @@ -142,12 +199,6 @@ sub CB_Callback { my ($who, $num, @tab) = @_; my $toggled = undef; Verbose (__LINE__, 0, "Message num = $num"); -# for (my $i = 0; $i < $max_nb_parameters; $i++) { -# if ($tab[$i]) { -# print " <$tab[$i]>"; -# } -# } -# print "\n"; if (defined $toggled_message{$num}) { if ($toggled_message{$num} == 0) { @@ -172,6 +223,57 @@ sub CB_Callback { for (my $i = 0; $i < $max_nb_parameters; $i++) { $item =~ s/\$$i/$tab[$i-1]/; } + + my @the_keys = keys (%global_var); + + if ($step_message{$num}) { + foreach my $key (@the_keys) { + if ($key =~ m/step/) { + + $global_var{$key} += $step_message{$num}; + if ($global_var{$key} > $maxi_message{$num}) { + $global_var{$key} = $maxi_message{$num}; + } + if ($global_var{$key} < $mini_message{$num}) { + $global_var{$key} = $mini_message{$num}; + } + + $item =~ s/\$$key/$global_var{$key}/; + } + } + } + + if (scalar (@the_keys) != 0) { + foreach my $key (@the_keys) { + $item =~ s/\$$key/$global_var{$key}/; + } + } + + if ($item =~ m/OpenClearanceEditor/) { + for (my $i = 0; $i < 1000000; $i++) { + # + } + $ivy->sendMsgs ("bidon"); + } $ivy->sendMsgs ($item); } + + my @tab_scripts = split (/ , /, $scripts[$num]); + foreach my $item (@tab_scripts) { + + for (my $i = 0; $i < $max_nb_parameters; $i++) { + $item =~ s/\$$i/$tab[$i-1]/; + } + + my @the_keys = keys (%global_var); + foreach my $key (@the_keys) { + $item =~ s/\$$key/$global_var{$key}/; + } + + Verbose (__LINE__, 0, "lancement du script $item"); + + system ($item . "&"); + } + } + -- cgit v1.1