home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / plum2_33_1.lzh / module / auto / alias.plm next >
Text File  |  1999-03-24  |  17KB  |  593 lines

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
  2. # $Id: alias.plm,v 2.32 1999/01/29 08:31:45 hasegawa Exp $
  3. # copyright (c)1998-1999 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. package auto_alias;
  6.  
  7. $_ = 'auto_alias';
  8.  
  9. sub ss_privmsg {
  10.   local($serverno, $prefix, $cmd, @params) = @_;
  11.   local($userno, $str, $action, $type, @arg);
  12.   $userno = $'userno[$serverno];
  13.   ($action, $type, @arg) = split(/\s+/, $params[1]);
  14.   if ($action) {
  15.     $type = '' unless $type;
  16.     foreach $str (&'property($userno, 'get')) {
  17.       next unless $str eq $action;
  18.       &get_alias($serverno, $prefix, $params[0], "\L$type\E", @arg);
  19.       return ($prefix, $cmd, @params);
  20.     }
  21.     foreach $str (&'property($userno, 'add')) {
  22.       next unless $str eq $action;
  23.       &add_alias($serverno, $prefix, $params[0], "\L$type\E", @arg);
  24.       return ($prefix, $cmd, @params);
  25.     }
  26.     foreach $str (&'property($userno, 'remove')) {
  27.       next unless $str eq $action;
  28.       &remove_alias($serverno, $prefix, $params[0], "\L$type\E", @arg);
  29.       return ($prefix, $cmd, @params);
  30.     }
  31.     foreach $str (&'property($userno, 'change')) {
  32.       next unless $str eq $action;
  33.       &change_alias($serverno, $prefix, $params[0], "\L$type\E", @arg);
  34.       return ($prefix, $cmd, @params);
  35.     }
  36.   }
  37.   return ($prefix, $cmd, @params);
  38. }
  39.  
  40. sub privmsg {
  41.   local($serverno, $to, $msg) = @_;
  42.   &'s_print($serverno, '', 'PRIVMSG', $to, $msg);
  43.   foreach $cno (&'array($'clientlist)) {
  44.     next unless $'avail[$cno];
  45.     next unless $'server[$cno] == $serverno;
  46.     &'c_print($cno, &'user($cno), 'PRIVMSG', $to, $msg);
  47.   }
  48. }
  49.  
  50. sub get_alias {
  51.   local($serverno, $prefix, $chan, $type, $text) = @_;
  52.   local($userno, @data, $no, $to, $hidden, %alias);
  53.   $userno = $'userno[$serverno];
  54.   @data = &read_alias($userno);
  55.   $hidden = &property($userno, 'invisible');
  56.   if ($text) {
  57.     $no = &get_alias_index($type, $text, @data);
  58.     $hidden .= &property($userno, 'private');
  59.   } else {
  60.     $no = &get_alias_user_index($prefix, @data);
  61.   }
  62.   return if $no == -1;
  63.   $to = &'prefix($prefix);
  64.   %alias = &parse_list(&'array($data[$no]));
  65.   foreach $key (keys(%alias)) {
  66.     next if &'exist($hidden, $key);
  67.     foreach $line (&format_list($key, $alias{$key})) {
  68.       &privmsg($serverno, $to, $line);
  69.     }
  70.   }
  71. }
  72.  
  73. sub add_alias {
  74.   local($serverno, $prefix, $chan, $type, @arg) = @_;
  75.   local($userno, $readonly, @data, $no, %alias, $scalar);
  76.   $userno = $'userno[$serverno];
  77.   $readonly = &property($userno, 'readonly');
  78.   return if &'exist($readonly, $type);
  79.   @data = &read_alias($userno);
  80.   $no = &get_alias_user_index($prefix, @data);
  81.   if ($no == -1) {
  82.     %alias = ('nick', &'list((&'prefix($prefix))[0]));
  83.     $no = @data;
  84.   } else {
  85.     %alias = &parse_list(&'array($data[$no]));
  86.   }
  87.   $scalar = &property($userno, 'scalar');
  88.   if (@arg) {
  89.     if (&'exist($scalar, $type)) {
  90.       $alias{$type} = &'list($arg[0]);
  91.     } else {
  92.       $alias{$type} = &'add($alias{$type}, @arg);
  93.     }
  94.   }
  95.   $data[$no] = &build_list(%alias);
  96.   &write_alias($userno, @data);
  97. }
  98.  
  99. sub remove_alias {
  100.   local($serverno, $prefix, $chan, $type, @arg) = @_;
  101.   local($userno, $readonly, @data, $no, %alias, $scalar);
  102.   return unless $type;
  103.   $userno = $'userno[$serverno];
  104.   $readonly = &property($userno, 'readonly');
  105.   return if &'exist($readonly, $type);
  106.   @data = &read_alias($userno);
  107.   $no = &get_alias_user_index($prefix, @data);
  108.   if ($no == -1) {
  109.     %alias = ('nick', &'list((&'prefix($prefix))[0]));
  110.     $no = @data;
  111.   } else {
  112.     %alias = &parse_list(&'array($data[$no]));
  113.   }
  114.   $scalar = &property($userno, 'scalar');
  115.   if (&'exist($scalar, $type)) {
  116.     $alias{$type} = '';
  117.   } elsif (@arg) {
  118.     $alias{$type} = &'remove($alias{$type}, @arg);
  119.   }
  120.   $data[$no] = &build_list(%alias);
  121.   &write_alias($userno, @data);
  122. }
  123.  
  124. sub change_alias {
  125.   local($serverno, $prefix, $chan, $type, @arg) = @_;
  126.   local($userno, $readonly, @data, $no, %alias, $scalar);
  127.   return unless @arg;
  128.   $userno = $'userno[$serverno];
  129.   $readonly = &property($userno, 'readonly');
  130.   return if &'exist($readonly, $type);
  131.   @data = &read_alias($userno);
  132.   $no = &get_alias_user_index($prefix, @data);
  133.   if ($no == -1) {
  134.     %alias = ('nick', &'list((&'prefix($prefix))[0]));
  135.     $no = @data;
  136.   } else {
  137.     %alias = &parse_list(&'array($data[$no]));
  138.   }
  139.   $scalar = &property($userno, 'scalar');
  140.   if (&'exist($scalar, $type)) {
  141.     $alias{$type} = &'list($arg[0]);
  142.   } else {
  143.     $alias{$type} = &'change($alias{$type}, @arg);
  144.   }
  145.   $data[$no] = &build_list(%alias);
  146.   &write_alias($userno, @data);
  147. }
  148.  
  149. sub property {
  150.   local($userno, $name) = @_;
  151.   local($list);
  152.   $list = '';
  153.   foreach $line (&'property($userno, $name)) {
  154.     $list = &'add($list, split(/\,/, $line));
  155.   }
  156.   return $list;
  157. }
  158.  
  159. sub format_list {
  160.   local($key, $value) = @_;
  161.   local(@list);
  162.   if ($key eq 'nick') {
  163.     return 'nick: ' . join(',', &'array($value));
  164.   } elsif ($key eq 'name') {
  165.     return 'name: ' . join(' ', &'array($value));
  166.   } else {
  167.     @list = ();
  168.     foreach $arg (&'array($value)) {
  169.       push(@list, $key . ': ' . $arg);
  170.     }
  171.     return @list;
  172.   }
  173. }
  174.  
  175. sub get_alias_index {
  176.   local($type, $value, @data) = @_;
  177.   local($i, @list);
  178.   if ($type eq 'user') {
  179.     return &get_alias_user_index($value, @data);
  180.   } elsif ($type eq 'name') {
  181.     return &get_alias_name_index($value, @data);
  182.   } else {
  183.     for ($i = 0; $i < @data; $i++) {
  184.       @list = &'array($data[$i]);
  185.       if (&match_alias($type, $value, @list)) {
  186.         return $i;
  187.       }
  188.     }
  189.     return -1;
  190.   }
  191. }
  192.  
  193. sub match_alias {
  194.   local($type, $value, @list) = @_;
  195.   local(%alias, $var, $arg);
  196.   %alias = &parse_list(@list);
  197.   foreach $key (keys(%alias)) {
  198.     next unless "\L$key\E" eq $type;
  199.     if (&'exist($alias{$key}, $value)) {
  200.       return 1;
  201.     }
  202.   }
  203.   return 0;
  204. }
  205.  
  206. sub get_alias_user_index {
  207.   local($from, @data) = @_;
  208.   local($i, @list);
  209.   for ($i = 0; $i < @data; $i++) {
  210.     @list = &'array($data[$i]);
  211.     if (&match_alias_user($from, @list)) {
  212.       return $i;
  213.     }
  214.   }
  215.   return -1;
  216. }
  217.  
  218. sub match_alias_user {
  219.   local($from, @list) = @_;
  220.   local($var, $arg, $regex);
  221.   foreach $line (@list) {
  222.     ($var, $arg) = split(/\s+/, $line, 2);
  223.     next unless "\L$var\E" eq 'user';
  224.     $regex = &'regex($arg);
  225.     next unless $from =~ /$regex/i;
  226.     return 1;
  227.   }
  228.   return 0;
  229. }
  230.  
  231. sub get_alias_name_index {
  232.   local($from, @data) = @_;
  233.   local($i, @list);
  234.   for ($i = 0; $i < @data; $i++) {
  235.     @list = &'array($data[$i]);
  236.     if (&match_alias_name($from, @list)) {
  237.       return $i;
  238.     }
  239.   }
  240.   return -1;
  241. }
  242.  
  243. sub match_alias_name {
  244.   local($from, @list) = @_;
  245.   local($var, $arg);
  246.   foreach $line (@list) {
  247.     ($var, $arg) = split(/\s+/, $line, 2);
  248.     if ("\L$var\E" eq 'name') {
  249.       foreach $name (split(/\s+/, $arg)) {
  250.         next unless $from eq $name;
  251.         return 1;
  252.       }
  253.     }
  254.   }
  255.   return 0;
  256. }
  257.  
  258. sub build_list {
  259.   local(%alias) = @_;
  260.   local($nick, $name, @user, @other);
  261.   $nick = '';
  262.   $name = '';
  263.   @user = ();
  264.   @other = ();
  265.   foreach $key (sort(keys(%alias))) {
  266.     if ($key eq 'nick') {
  267.       $nick = 'nick ' . join(',', &'array($alias{$key}));
  268.     } elsif ($key eq 'name') {
  269.       $name = 'name ' . join(' ', &'array($alias{$key}));
  270.     } elsif ($key eq 'user') {
  271.       foreach $arg (&'array($alias{$key})) {
  272.         push(@user, $key . ' ' . $arg);
  273.       }
  274.     } else {
  275.       foreach $arg (&'array($alias{$key})) {
  276.         push(@other, $key . ' ' . $arg);
  277.       }
  278.     }
  279.   }
  280.   if ($nick && $name) {
  281.     return &'list($nick, $name, @user, @other);
  282.   } elsif ($nick) {
  283.     return &'list($nick, @user, @other);
  284.   } else {
  285.     return '';
  286.   }
  287. }
  288.  
  289. sub parse_list {
  290.   local(@list) = @_;
  291.   local(%alias, $var, $arg, $key);
  292.   %alias = ();
  293.   foreach $line (@list) {
  294.     ($var, $arg) = split(/\s+/, $line, 2);
  295.     $var = "\L$var\E";
  296.     if ($var eq 'nick') {
  297.       $alias{$var} = &'add($alias{$var}, split(/\,/, $arg));
  298.     } elsif ($var eq 'name') {
  299.       $alias{$var} = &'add($alias{$var}, split(/\s+/, $arg));
  300.     } else {
  301.       $alias{$var} = &'add($alias{$var}, $arg);
  302.     }
  303.   }
  304.   return %alias;
  305. }
  306.  
  307. sub read_alias {
  308.   local($userno) = @_;
  309.   local($file);
  310.   $file = &'property($userno, 'file');
  311.   return &split_list('nick', &read_file($file));
  312. }
  313.  
  314. sub split_list {
  315.   local($field, @list) = @_;
  316.   local($var, $arg, @array, @entry);
  317.   $field = "\L$field\E";
  318.   @array = ();
  319.   @entry = ();
  320.   foreach $line (@list) {
  321.     ($var, $arg) = split(/\s*\:\s*/, $line, 2);
  322.     if ($field eq "\L$var\E") {
  323.       push(@array, &'list(@entry)) if @entry;
  324.       @entry = ();
  325.     }
  326.     push(@entry, $var . ' ' . $arg);
  327.   }
  328.   push(@array, &'list(@entry)) if @entry;
  329.   return @array;
  330. }
  331.  
  332. sub read_file {
  333.   local($file) = @_;
  334.   local($name, $code, $mtime, @data, $line);
  335.   ($name, $code) = &filename($file);
  336.   $mtime = (stat($name))[9];
  337.   if (defined($mtime)) {
  338.     $modify{$name} = -1 unless defined($modify{$name});
  339.     if ($modify{$name} != $mtime) {
  340.       if (open(TMP, $name)) {
  341.         @data = ();
  342.         while (defined($line = <TMP>)) {
  343.           $line =~ s/^\s+//;
  344.           next if $line =~ /^[\#\;]/;
  345.           $line =~ tr/\r\n//d;
  346.           next unless $line;
  347.           $line =~ s/\s+$//;
  348.           $line = &code_jis($line, $code) if $code;
  349.           push(@data, $line);
  350.         }
  351.         close(TMP);
  352.         $modify{$name} = $mtime;
  353.         $cache{$name} = &'list(@data);
  354.         return @data;
  355.       }
  356.     } else {
  357.       return &'array($cache{$name});
  358.     }
  359.   }
  360.   return ();
  361. }
  362.  
  363. sub write_alias {
  364.   local($userno, @data) = @_;
  365.   local($file);
  366.   $file = &'property($userno, 'file');
  367.   &write_file($file, &merge_list(@data));
  368. }
  369.  
  370. sub merge_list {
  371.   local(@list) = @_;
  372.   local(@data, @entry, $var, $arg);
  373.   @data = ();
  374.   foreach $list (@list) {
  375.     next unless $list;
  376.     @entry = &'array($list);
  377.     foreach $line (@entry) {
  378.       next unless $line;
  379.       ($var, $arg) = split(/\s+/, $line, 2);
  380.       next unless $arg;
  381.       push(@data, $var . ': ' . $arg);
  382.     }
  383.     push(@data, '');
  384.   }
  385.   return @data;
  386. }
  387.  
  388. sub write_file {
  389.   local($file, @data) = @_;
  390.   local($name, $code, @list);
  391.   ($name, $code) = &filename($file);
  392.   @list = ();
  393.   if (open(TMP, ">$name")) {
  394.     foreach $line (@data) {
  395.       push(@list, $line) if $line;
  396.       $line = &jis_code($line, $code) if $code;
  397.       print TMP $line, "\n";
  398.     }
  399.     close(TMP);
  400.     $modify{$name} = (stat($name))[9];
  401.     $cache{$name} = &'list(@list);
  402.   }
  403. }
  404.  
  405. sub filename {
  406.   local($file) = @_;
  407.   local($idx, $name, $code);
  408.   return ('', '') unless $file;
  409.   if (($idx = rindex($file, ';')) != -1) {
  410.     $name = substr($file, 0, $idx);
  411.     $code = substr($file, $idx + 1);
  412.   } else {
  413.     $name = $file;
  414.     $code = '';
  415.   }
  416.   return (&'expand($name), $code);
  417. }
  418.  
  419. sub code_jis {
  420.   local($line, $list) = @_;
  421.   foreach $code (split(/\,/, "\L$list\E")) {
  422.     if ($code eq 'euc') {
  423.       $line = &'euc_jis($line);
  424.     } elsif ($code eq 'jis') {
  425.       $line = &'jis_jis($line);
  426.     } elsif ($code eq 'sjis') {
  427.       $line = &'sjis_jis($line);
  428.     }
  429.   }
  430.   return $line;
  431. }
  432.  
  433. sub jis_code {
  434.   local($line, $list) = @_;
  435.   local($code);
  436.   $code = (split(/\,/, "\L$list\E"))[0];
  437.   if ($code eq 'euc') {
  438.     $line = &'jis_euc($line);
  439.   } elsif ($code eq 'jis') {
  440.     $line = &'jis_jis($line);
  441.   } elsif ($code eq 'sjis') {
  442.     $line = &'jis_sjis($line);
  443.   }
  444.   return $line;
  445. }
  446.  
  447. __END__
  448. --><HTML><HEAD>
  449. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
  450. <LINK REV="made" HREF="mailto:hasegawa@madoka.org">
  451. <TITLE>auto/alias.plm</TITLE></HEAD><BODY>
  452.  
  453. $B%*%s%i%$%s%I%-%e%a%s%H(B
  454.  
  455.  
  456. <HR><H3>$BL>A0(B</H3>
  457.  
  458. auto/alias.plm - $B%f!<%6%(%$%j%"%9>pJs$N4IM}(B
  459.  
  460.  
  461. <HR><H3>$B@bL@(B</H3>
  462.  
  463. $B%f!<%6L>$N%(%$%j%"%9$NDI2C!":o=|!"3NG'$r9T$$$^$9!#(B
  464. $B%(%$%j%"%9$NDI2C!":o=|$O<+J,$N>pJs$KBP$7$F$7$+9T$&$3$H$O$G$-$^$;$s!#(B
  465. $B%(%$%j%"%9$O4pK\E*$K(Bnick$B!"(Bname$B!"(Buser$B$N(B3$B$D$N%U%#!<%k%I$+$i$J$C$F$*$j!"(B
  466. $B$=$l$>$l%K%C%/%M!<%`!"L>A0!"%f!<%6%^%9%/$rI=$7$^$9!#(B
  467. $B<B:]$K%f!<%6$r<1JL$9$k$?$a$K$O(Buser$B$,;HMQ$5$l$^$9!#(B
  468.  
  469. <BR><BR>
  470.  
  471. $B$^$?!"%(%$%j%"%9%U%!%$%k$NCf$G$O!"%G!<%?$O%f!<%6$4$H$K(B
  472. nick$B!"(Bname$B!"(Buser$B$N=gHV$GJ]B8$5$l$F$$$^$9!#(B
  473. $B$=$l$>$l$N%G!<%?$OJ#?t;XDj$9$k$3$H$,$G$-!"(Bnick$B$O!V(B,$B!W$G!"(B
  474. name$B$O6uGr$G!"(Buser$B$O(B1$B9T$K(B1$B$D$:$D$=$l$>$l6h@Z$j$^$9!#(B
  475. $B<B:]$N%U%!%$%kCf$N%G!<%?$O0J2<$N$h$&$K$J$C$F$$$^$9!#(B
  476.  
  477. <PRE>
  478. nick: plum,plum_j,plum-j
  479. name: $B$W$i$`(B $B$W$i$`$A$c$s(B
  480. user: *!plum@*.plum.org
  481. user: plum*!*plum@*.plum.com
  482.  
  483. nick: plum_
  484. name: $B$W$i$`(B($B56(B)
  485. user: *!*plum@*.plum.org
  486. </PRE>
  487.  
  488.  
  489. <HR><H3>$B%W%m%Q%F%#(B</H3>
  490.  
  491. <DL>
  492. <DT>  auto.alias.file $B%U%!%$%kL>(B[;({jis|euc|sjis})]
  493. </DT>
  494. <DD>    $B%(%$%j%"%9$rJ]B8$9$k%U%!%$%kL>$r;XDj$7$^$9!#(B
  495.         $B%U%!%$%kL>$N8e$K4A;z%3!<%I$r;XDj$9$k$3$H$,$G$-$^$9!#(B
  496.         $B4A;z%3!<%I$rJ#?t;XDj$7$?>l9g$O:G=i$K;XDj$7$?4A;z%3!<%I$GJ]B8$5$l!"(B
  497.         $B>JN,$7$?>l9g$O!V(Bjis$B!W$r;XDj$7$?$3$H$HF1$8$K$J$j$^$9!#(B
  498.         $B$^$?!V(Beuc$B!W$H!V(Bsjis$B!W$rF1;~$K;XDj$9$k$3$H$O$G$-$^$;$s!#(B
  499. </DD>
  500. <DT>  auto.alias.readonly* ($B%?%$%W(B)
  501. </DT>
  502. <DD>    $BJQ99$9$k$3$H$N$G$-$J$$%?%$%W$r;XDj$7$^$9!#(B
  503. </DD>
  504. <DT>  auto.alias.invisible* ($B%?%$%W(B)
  505. </DT>
  506. <DD>    $B8+$k$3$H$N$G$-$J$$%?%$%W$r;XDj$7$^$9!#(B
  507. </DD>
  508. <DT>  auto.alias.private* ($B%?%$%W(B)
  509. </DT>
  510. <DD>    $BK\?M$K$7$+8+$k$3$H$N$G$-$J$$%?%$%W$r;XDj$7$^$9!#(B
  511. </DD>
  512. <DT>  auto.alias.scalar* ($B%?%$%W(B)
  513. </DT>
  514. <DD>    $BCM$r0l$D$7$+@_Dj$9$k$3$H$,$G$-$J$$%?%$%W$r;XDj$7$^$9!#(B
  515. </DD>
  516. <DT>  auto.alias.get* $BJ8;zNs(B
  517. </DT>
  518. <DD>    $B%(%$%j%"%9$r3NG'$9$k$?$a$N%a%C%;!<%8$G$9!#(B
  519.         $B$3$N%a%C%;!<%8$HF1$8J8;zNs$rH/8@$r$9$k$H!"(B
  520.         $B<+J,$K@_Dj$5$l$F$$$k%(%$%j%"%9$r3NG'$9$k$3$H$,$G$-$^$9!#(B
  521.         $B$^$?!"0z?t$H$7$F%(%$%j%"%9$N%?%$%W$H%G!<%?$r;XDj$9$k$H!"(B
  522.         $B$=$l$K%^%C%A$9$k?M$N%(%$%j%"%9$r3NG'$G$-$^$9!#(B
  523. </DD>
  524. <DT>  auto.alias.add* $BJ8;zNs(B
  525. </DT>
  526. <DD>    $B%(%$%j%"%9$rDI2C$9$k$?$a$N%a%C%;!<%8$G$9!#(B
  527.         $B$3$N%a%C%;!<%8$K0z?t$H$7$F%(%$%j%"%9$N%?%$%W$H%G!<%?$r;XDj$9$k$H!"(B
  528.         $B<+J,$N%(%$%j%"%9$K;XDj$7$?%G!<%?$rDI2C$7$^$9!#(B
  529. </DD>
  530. <DT>  auto.alias.remove* $BJ8;zNs(B
  531. </DT>
  532. <DD>    $B%(%$%j%"%9$r:o=|$9$k$?$a$N%a%C%;!<%8$G$9!#(B
  533.         $B$3$N%a%C%;!<%8$K0z?t$H$7$F%(%$%j%"%9$N%?%$%W$H%G!<%?$r;XDj$9$k$H!"(B
  534.         $B<+J,$N%(%$%j%"%9$N$&$A$G;XDj$7$?%G!<%?$r:o=|$7$^$9!#(B
  535.         nick$B$KBP$9$k%G!<%?$r:o=|$9$k$H!"%(%$%j%"%9$=$N$b$N$,:o=|$5$l$^$9!#(B
  536. </DD>
  537. <DT>  auto.alias.change* $BJ8;zNs(B
  538. </DT>
  539. <DD>    $B%(%$%j%"%9$rJQ99$9$k$?$a$N%a%C%;!<%8$G$9!#(B
  540.         $B$3$N%a%C%;!<%8$K0z?t$H$7$F%(%$%j%"%9$N%?%$%W!"8E$$%G!<%?!"(B
  541.         $B?7$7$$%G!<%?$r;XDj$9$k$H!"<+J,$N%(%$%j%"%9$N$&$A$G(B
  542.         $B;XDj$7$?%?%$%W$N8E$$%G!<%?$r?7$7$$%G!<%?$KJQ99$7$^$9!#(B
  543.         $B?7$7$$%G!<%?$,$9$G$KB8:_$9$k$+$I$&$+$O3NG'$7$F$$$J$$$N$G!"(B
  544.         $BF1$8%G!<%?$,(B2$B$D$G$-$J$$$h$&$K$7$F$/$@$5$$!#(B
  545. </DD>
  546. </DL>
  547.  
  548.  
  549. <HR><H3>$B@_DjNc(B</H3>
  550.  
  551. <PRE>
  552. + auto/alias.plm
  553. auto.alias.file: alias.txt;jis,euc
  554. auto.alias.get: $B%(%$%j%"%9(B
  555. auto.alias.add: $B%(%$%j%"%9DI2C(B
  556. auto.alias.remove: $B%(%$%j%"%9:o=|(B
  557. auto.alias.change: $B%(%$%j%"%9JQ99(B
  558. </PRE>
  559.  
  560. $B!V%(%$%j%"%9!W$H$$$&H/8@$,$"$k$H!"H/8@$7$??M$N%(%$%j%"%9$rH/8@$7$^$9!#(B
  561. $B%(%$%j%"%9$O!V(Balias.txt$B!W$H$$$&%U%!%$%k$+$iFI$_9~$_$^$9!#(B
  562. alias.txt$B$O4A;z%3!<%I$,!V(Bjis$B!W$+!V(Beuc$B!W$G=q$+$l$F$$$kI,MW$,$"$j$^$9$,!"(B
  563. IRC$B>e$+$i%(%$%j%"%9$NJQ99$r9T$C$?>l9g$O(Bjis$B$GJ]B8$5$l$^$9!#(B
  564. $B$^$?!"!V%(%$%j%"%9(B name $B$W$i$`!W$N$h$&$KH/8@$9$k$H!"(B
  565. $B%?%$%W$,!V(Bname$B!W$G!"%G!<%?$,!V$W$i$`!W$H$$$&?M$N%(%$%j%"%9$rJV$7$^$9!#(B
  566.  
  567. <BR><BR>
  568.  
  569. $B%(%$%j%"%9$rDI2C$9$k$?$a$K$O!"(B
  570. $B!V%(%$%j%"%9DI2C(B user *!*plum@*.plum.gr.jp$B!W$N$h$&$KH/8@$7$^$9!#(B
  571. $B$3$N>l9g$G$O%?%$%W$,!V(Buser$B!W$G!"%G!<%?$,!V(B*!*plum@*.plum.gr.jp$B!W(B
  572. $B$H$$$&%(%$%j%"%9$r!"H/8@$7$??M$N%(%$%j%"%9$KDI2C$7$^$9!#(B
  573.  
  574. <BR><BR>
  575.  
  576. $B%(%$%j%"%9$r:o=|$9$k$?$a$K$O!"(B
  577. $B!V%(%$%j%"%9:o=|(B name $B$W$i$`$A$c$s!W$N$h$&$KH/8@$7$^$9!#(B
  578. $B$3$N>l9g$G$O%?%$%W$,!V(Bname$B!W$G!"%G!<%?$,!V$W$i$`$A$c$s!W$H$$$&%(%$%j%"%9$,!"(B
  579. $BH/8@$7$??M$N%(%$%j%"%9$KB8:_$9$l$P!"$=$l$r:o=|$7$^$9!#(B
  580. $B;XDj$7$?%G!<%?$,H/8@$7$??M$N%(%$%j%"%9$KB8:_$7$J$$>l9g$OL5;k$5$l$^$9!#(B
  581. $B$^$?!"%?%$%W$,!V(Bnick$B!W$N%G!<%?$r$9$Y$F:o=|$7$?>l9g$O!"(B
  582. $B$=$N?M$N%(%$%j%"%9$OA4$F:o=|$5$l$^$9!#(B
  583.  
  584. <BR><BR>
  585.  
  586. $B%(%$%j%"%9$rJQ99$9$k$?$a$K$O!"(B
  587. $B!V%(%$%j%"%9JQ99(B name $B$W$i$`(B($B56(B) $B$W$i$`(B($B2>(B)$B!W$N$h$&$KH/8@$7$^$9!#(B
  588. $B$3$N>l9g$G$O%?%$%W$,!V(Bname$B!W$G!"%G!<%?$,!V$W$i$`(B($B56(B)$B!W$H$$$&%(%$%j%"%9$,!"(B
  589. $BH/8@$7$??M$N%(%$%j%"%9$KB8:_$9$l$P!"$=$l$r!V$W$i$`(B($B2>(B)$B!W$KJQ99$7$^$9!#(B
  590. $B;XDj$7$?%G!<%?$,H/8@$7$??M$N%(%$%j%"%9$KB8:_$7$J$$>l9g$OL5;k$5$l$^$9!#(B
  591.  
  592. </BODY></HTML>
  593.