summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbothorel2011-03-10 12:53:44 +0000
committerbothorel2011-03-10 12:53:44 +0000
commitd9ca51ae058d2314b4420328a6d0725b87f34638 (patch)
tree34c33a812e66a184ecdfc96dfbcfb60bd030d0be
parent4efabaf70e7a66c2c4df8668c623569b7ef41687 (diff)
downloadtransduct-d9ca51ae058d2314b4420328a6d0725b87f34638.zip
transduct-d9ca51ae058d2314b4420328a6d0725b87f34638.tar.gz
transduct-d9ca51ae058d2314b4420328a6d0725b87f34638.tar.bz2
transduct-d9ca51ae058d2314b4420328a6d0725b87f34638.tar.xz
evolution
-rwxr-xr-xsrc/transduct124
1 files 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 . "&");
+ }
+
}
+