
| Current Path : /var/www/web-klick.de/dsh/90_akt/DivBasicF/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/90_akt/DivBasicF/COMPrg.pm |
package DivBasicF::COMPrg;
use strict;
use vars qw(@ISA);
use DivBasicF::COMsimple;
use Data::Dumper;
@ISA = qw(DivBasicF::COMsimple);
#*******************************************************
sub idx {
my $self = shift;
my $mode = shift;
$mode =~ s/^\_\_//;
if (defined($self->{$mode})) {
return([$self->{$mode}]);
}
return([$self->{$mode}]);
}
#**************************************************************
#**************************************************************
sub read_in { # Einlesen des prg_pars-Hash
my $self = shift;
$self->{'prg_pars'} = shift; # gedumpte Version des Parameter-Hashes
my $erg = eval("{".$self->{'prg_pars'}."}");
my $o;
if ($@) {
$self->{'error_prg_pars'} = $@;
}
elsif (ref($erg) ne "HASH") {
$self->{'error_prg_pars'} = 'is not HASH';
}
else {
delete ($self->{'error_prg_pars'});
delete ($self->{'prg_func'});
my $obj = {};
foreach $o (keys %$erg) {
next if ($erg->{$o} eq "?");
$self->{$o} = $erg->{$o};
if (ref($self->{$o}) eq "CODE") {
$obj->{$o} = 1;
}
}
if (%$obj) {
$o = $self->{'prg_pars'};
$self->actualize($obj);
$self->{'prg_func'} = $self->{'prg_pars'};
$self->{'prg_pars'} = $o;
}
}
}
#**************************************************************
sub actualize {
my $self = shift;
my $obj = shift;
my $text = eval("{".$self->{'prg_pars'}."}");
if (!$obj) { $obj = $self; }
my $o; my $o1; my $o2; my $o3; my $text1; my $pars; my $pars1;
foreach $o (keys %$text) {
next if (ref($text->{$o}) eq "CODE");
$o1 = Dumper($text->{$o}); # alter, gedumpter Wert
$o2 = Dumper($obj->{$o}); # neuer, gedumpter Wert
next if ($o1 eq $o2);
$o1 =~ s/^\s*(.*?)\s*/$1/; # wenn beides nicht gleich ist:
$o1 =~ s/^\$VAR1 +\= +//;
$o1 =~ s/\;$//;
$pars = $self->{'prg_pars'}; # Dump-Version des Prg Pars
$text1 = "";
while (0 == 0) {
eval($text1 . " \}");
last if (!$@);
last if ($pars !~ s/^(.*)(\'$o\')/$2/s);
$text1 = $text1 . $1;
} # in $text1 steht jetzt die alte Version von prg pars
# bis zum aktuellen Key (der Rest danach ist abgeschnitten)
next if ($@);
next if ($pars !~ s/^(\'$o\' +\=\> +)//s);
$o3 = $1;
$pars1 = "";
while (0 == 0) {
last if ($pars !~ s/^(.*?)\n(.*)/$2/s);
$pars1 = $pars1 . $1 . "\n";
next if ($pars1 !~ /\, *\n$/s);
eval("\{ \'xxx\' => " . $pars1 . "\}");
last if (!$@);
}
eval("\{ \'xxx\' => " . $pars1 . "\}");
print "$@\n" if ($@);
next if ($@);
$o2 =~ s/^\n*(.*?)\n*$/$1/s;
$o2 =~ s/^\$VAR1 +\= +//s;
$o2 =~ s/\;$//s;
if ($o2 eq "undef") {
$text1 =~ s/^(.*?) *$/$1/s;
$self->{'prg_pars'} = $text1 . $pars;
} else {
$self->{'prg_pars'} = $text1 . $o3 . $o2 . ",\n" . $pars;
}
}
return(1);
}
#**************************************************************
sub activate_functions {
my $self = shift;
my $func = eval($self->{'prg_func'});
return() if ($@ or ref($func) ne "HASH");
my $o;
foreach $o (keys %$func) {
$self->{$o} = $func->{$o};
}
}
#**************************************************************
sub process {
my $self = shift;
my $wait = shift;
my $interval = shift;
my $connection = shift;
my $pars = [@_];
$self->connection($connection) if ($connection);
$self->msg($pars) if (@$pars);
$pars = $self->get($wait,$interval);
$connection = $self->get_connection() if (ref($pars));
return($connection,$pars);
}
#**************************************************************
#**************************************************************
sub xxdumper {
my $self = shift;
my $obj = shift;
my $functions = {};
my $o; my $o1;
my $zaehler = 0;
if (ref($obj) eq "HASH1") {
foreach $o (keys %$obj) {
next if ($obj->{$o} =~ /^\s*sub\s*\{/s);
next if (ref(eval($obj->{$o})) ne "CODE");
$zaehler = $zaehler + 1;
$o1 = "___FUNC" . $zaehler . "___";
$functions->{$o1} = $obj->{$o};
$obj->{$o} = $o1;
}
}
my $text = Dumper($obj);
$text =~ s/^\s*\$VAR1\s*\=\s*//s;
$text =~ s/\}\s*\;\s*$/\}\n/s;
while ($text =~ s/(___FUNC\d+___)/___FUNC___/) {
$o = $functions->{$1};
$text =~ s/[\"\']___FUNC___[\"\']/$o/s;
}
return($text);
}
#**************************************************************
sub xxedit { # Ausfuehrung von ppl-Programmen
my $self = shift;
my $mode = shift;
$self->{'prg_pars'} = shift; # gedumpte Version des Parameter-Hashes
my $next_step = shift;
my @pars = shift;
my $erg; my $o; my @ee;
$erg = eval("{".$self->{'prg_pars'}."}");
if ($@ or ref($erg) ne "HASH") {
return(["___SLEEP___","error","edit","Error in parameters:\n\n".
$self->{'prg_pars'}."\n\n".$@]);
}
foreach $o (keys %$erg) {
$self->{$o} = $erg->{$o};
}
if (!($next_step)) { $next_step = $self->{'interpreter'}; }
return(["___NEXT___",$next_step,@pars]);
}
1;