X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FCmdAlias.pm;h=8e26135cf27007c9efbc49c58c257f04d9842829;hb=f63d598af3f797b56b8d5e23ec4ff5254192eee9;hp=e5f6686ab05811e500603b470364806f923809b0;hpb=6a0068ec3df1dca0c6ae2714af3c0a4a62998dcf;p=spider.git diff --git a/perl/CmdAlias.pm b/perl/CmdAlias.pm index e5f6686a..8e26135c 100644 --- a/perl/CmdAlias.pm +++ b/perl/CmdAlias.pm @@ -1,74 +1,68 @@ # -# This package simply takes a string, looks it up in a -# hash and returns the value. +# This package impliments some of the ak1a aliases that can't +# be done with interpolation from the file names. # -# The hash is produced by reading the Alias file in both command directories -# which contain entries for the %cmd hash. This file is in different forms in -# the two directories:- +# Basically it takes the input and bashes down the list of aliases +# for that starting letter until it either matches (in which a substitution +# is done) or fails # -# in the main cmd directory it has entries like:- +# To roll your own Aliases, copy the /spider/cmd/Aliases file to +# /spider/local_cmd and alter it to your taste. # -# package CmdAlias; +# To make it active type 'load/aliases' # -# %alias = ( -# sp => 'send private', -# s/p => 'send private', -# sb => 'send bulletin', -# ); -# -# for the local cmd directory you should do it like this:- -# -# package CmdAlias; -# -# $alias{'s/p'} = 'send private'; -# $alias{'s/b'} = 'send bulletin'; -# -# This will allow you to override as well as add to the basic set of commands -# -# This system works in same way as the commands, if the modification times of -# the two files have changed then they are re-read. # # Copyright (c) 1998 Dirk Koopman G1TLH # -# $Id$ +# # package CmdAlias; use DXVars; use DXDebug; -use Carp; use strict; -use vars qw(%alias $cmd_mtime $localcmd_mtime $fn $localfn); +use vars qw(%alias %newalias $fn $localfn); %alias = (); - -$cmd_mtime = 1; -$localcmd_mtime = 1; +%newalias = (); $fn = "$main::cmd/Aliases"; $localfn = "$main::localcmd/Aliases"; -sub checkfiles +sub load { - my $m = -M $fn; -# print "m: $m oldmtime: $cmd_mtime\n"; - if ($m < $cmd_mtime) { - do $fn; + my $ref = shift; + + do $fn; + return ($@) if $@ && ref $ref; confess $@ if $@; - $cmd_mtime = $m; - $localcmd_mtime = 0; - } - if (-e $localfn) { - $m = -M $localfn; - if ($m < $localcmd_mtime) { - do $localfn; - confess $@ if $@; - $localcmd_mtime = $m; - } - } + if (-e $localfn) { + my %oldalias = %alias; + local %alias; # define a local one + + do $localfn; + return ($@) if $@ && ref $ref; + confess $@ if $@; + my $let; + foreach $let (keys %alias) { + # stick any local definitions at the front + my @a; + push @a, (@{$alias{$let}}); + push @a, (@{$oldalias{$let}}) if exists $oldalias{$let}; + $oldalias{$let} = \@a; + } + %newalias = %oldalias; + } + %alias = %newalias if -e $localfn; + return (); +} + +sub init +{ + load(); } # @@ -76,27 +70,25 @@ sub checkfiles # sub get_cmd { - my $s = shift; - my ($let) = unpack "A1", $s; - my ($i, $n, $ref); - - $let = lc $let; - - checkfiles(); - - $ref = $alias{$let}; - return undef if !$ref; - - $n = @{$ref}; - for ($i = 0; $i < $n; $i += 3) { - if ($s =~ /$ref->[$i]/i) { - my $ri = qq{\$ro = "$ref->[$i+1]"}; - my $ro; - eval $ri; - return $ro; + my $s = shift; + my ($let) = unpack "A1", $s; + my ($i, $n, $ref); + + $let = lc $let; + + $ref = $alias{$let}; + return undef if !$ref; + + $n = @{$ref}; + for ($i = 0; $i < $n; $i += 3) { + if ($s =~ /$ref->[$i]/i) { + my $ri = qq{\$ro = "$ref->[$i+1]"}; + my $ro; + eval $ri; + return $ro; + } } - } - return undef; + return undef; } # @@ -104,25 +96,27 @@ sub get_cmd # sub get_hlp { - my $s = shift; - my ($let) = unpack "A1", $s; - my ($i, $n, $ref); - - $let = lc $let; - - checkfiles(); - - $ref = $alias{$let}; - return undef if !$ref; - - $n = @{$ref}; - for ($i = 0; $i < $n; $i += 3) { - if ($s =~ /$ref->[$i]/i) { - my $ri = qq{$ref->[$i+2]}; - return $ri; + my $s = shift; + my ($let) = unpack "A1", $s; + my ($i, $n, $ref); + + $let = lc $let; + + $ref = $alias{$let}; + return undef if !$ref; + + $n = @{$ref}; + for ($i = 0; $i < $n; $i += 3) { + if ($s =~ /$ref->[$i]/i) { + my $ri = qq{\$ro = "$ref->[$i+2]"}; + my $ro; + eval $ri; + return $ro; + } } - } - return undef; + return undef; } +1; +