############################################## # $Id: 98_cmdalias.pm 3738 2013-08-18 14:13:59Z rudolfkoenig $ # Avarage computing package main; use strict; use warnings; my %cmdalias; ########################## sub cmdalias_Initialize($) { my ($hash) = @_; $hash->{DefFn} = "cmdalias_Define"; $hash->{UndefFn} = "cmdalias_Undefine"; $hash->{AttrList} = "disable:0,1"; } ########################## sub cmdalias_Define($$$) { my ($hash, $def) = @_; if($def !~ m/^([^ ]*) cmdalias ([^ ]*)(.*) AS (.*)$/) { my $msg = "wrong syntax: define cmdalias [parameter] AS command..."; return $msg; } my ($name, $alias, $param, $newcmd) = ($1, $2, $3, $4); $param =~ s/^ *//; # Checking for misleading regexps eval { "Hallo" =~ m/^$param$/ }; return "$name: Bad regexp in $param: $@" if($@); $hash->{ALIAS} = lc($alias); $hash->{PARAM} = $param; $hash->{NEWCMD} = $newcmd; $hash->{STATE} = "defined"; $cmdalias{$alias}{Alias}{$name} = $hash; $cmdalias{$alias}{OrigFn} = $cmds{$alias}{Fn} if($cmds{$alias} && $cmds{$alias}{Fn} ne "CommandCmdAlias"); $cmds{$alias}{Fn} = "CommandCmdAlias"; return undef; } sub cmdalias_Undefine($$) { my ($hash, $arg) = @_; my $alias = $hash->{ALIAS}; delete $cmdalias{$alias}{Alias}{$hash->{NAME}}; if(! keys %{$cmdalias{$alias}{Alias}}) { if($cmdalias{$alias}{OrigFn}) { $cmds{$alias}{Fn} = $cmdalias{$alias}{OrigFn}; } else { delete($cmds{$alias}); } delete($cmdalias{$alias}); } return undef; } sub CommandCmdAlias($$$) { my ($cl, $param, $alias) = @_; my $a = $cmdalias{lc($alias)}; return "Unknown command $a, internal error" if(!$a); foreach my $n (sort keys %{$a->{Alias}}) { my $h = $a->{Alias}{$n}; next if($h->{InExec}); if($param =~ m/^$h->{PARAM}$/) { my %specials= ("%EVENT" => $param); my $exec = EvalSpecials($h->{NEWCMD}, %specials); $h->{InExec} = 1; my $r = AnalyzeCommandChain(undef, $exec); delete $h->{InExec}; return $r; } } no strict "refs"; return &{$a->{OrigFn} }($cl, $param, $alias); use strict "refs"; } 1; =pod =begin html

cmdalias

=end html =cut