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 / sys / multicast.plm < prev    next >
Text File  |  1999-03-24  |  37KB  |  1,532 lines

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
  2. # $Id: multicast.plm,v 2.35 1999/01/30 13:59:13 hasegawa Exp $
  3. # copyright (c)1998-1999 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. package sys_multicast;
  6.  
  7. $_ = 'sys_multicast';
  8.  
  9. sub module_enable {
  10.   local($userno) = @_;
  11.   local($achan, $i);
  12.   foreach $cno (&'array($'clientlist)) {
  13.     next unless $'avail[$cno];
  14.     next unless $'userno[$cno] == $userno;
  15.     foreach $chan (&'array($'channellist[$cno])) {
  16.       &'c_print($cno, &'user($cno), 'PART', $chan);
  17.     }
  18.     if ($'server[$cno] && $'avail[$'server[$cno]]) {
  19.       foreach $chan (&'array($'channellist[$'server[$cno]])) {
  20.         $achan = &alias($chan, $userno);
  21.         &'c_print($cno, &'user($cno), 'JOIN', $achan);
  22.         &'c_print($cno, $'servername[$cno], '332', $'nick[$cno], $achan, $'topic{$'server[$cno], $chan}) if $'topic{$'server[$cno], $chan};
  23.         &'c_print($cno, $'servername[$cno], '353', $'nick[$cno], '=', $achan, join(' ', reverse(&'array($'nameslist{$'server[$cno], $chan}))));
  24.         &'c_print($cno, $'servername[$cno], '366', $'nick[$cno], $achan, 'End of /NAMES list.');
  25.       }
  26.     }
  27.     for ($i = 0; $i < @'username; $i++) {
  28.       &join_channel($cno, $i);
  29.     }
  30.   }
  31. }
  32.  
  33. sub module_disable {
  34.   local($userno) = @_;
  35.   foreach $cno (&'array($'clientlist)) {
  36.     next unless $'avail[$cno];
  37.     next unless $'userno[$cno] == $userno;
  38.     foreach $chan (&'array($'channellist[$cno])) {
  39.       &'c_print($cno, &'user($cno), 'PART', $chan);
  40.     }
  41.     next unless $'server[$cno];
  42.     next unless $'avail[$'server[$cno]];
  43.     foreach $chan (&'array($'channellist[$'server[$cno]])) {
  44.       &'c_print($cno, &'user($cno), 'JOIN', $chan);
  45.       &'c_print($cno, $'servername[$cno], '332', $'nick[$cno], $chan, $'topic{$'server[$cno], $chan}) if $'topic{$'server[$cno], $chan};
  46.       &'c_print($cno, $'servername[$cno], '353', $'nick[$cno], '=', $chan, join(' ', reverse(&'array($'nameslist{$'server[$cno], $chan}))));
  47.       &'c_print($cno, $'servername[$cno], '366', $'nick[$cno], $chan, 'End of /NAMES list.');
  48.     }
  49.   }
  50. }
  51.  
  52. sub client_open {
  53.   local($clientno) = @_;
  54.   local($name, $i);
  55.   for ($i = 0; $i < @'username; $i++) {
  56.     next unless $i != $'userno[$clientno];
  57.     &join_channel($clientno, $i);
  58.   }
  59. }
  60.  
  61. sub server_close {
  62.   local($serverno) = @_;
  63.   local($userno);
  64.   $userno = $'userno[$serverno];
  65.   foreach $cno (&each_client($serverno)) {
  66.     foreach $chan (&'array($'channellist[$serverno])) {
  67.       &'c_print($cno, &'user($cno), 'PART', &alias($chan, $userno));
  68.     }
  69.   }
  70. }
  71.  
  72. sub cs_away {
  73.   local($clientno, $prefix, $cmd, @params) = @_;
  74.   local($i);
  75.   for ($i = 0; $i < @'username; $i++) {
  76.     next unless $i != $'userno[$clientno];
  77.     foreach $sno (&each_server($i)) {
  78.       &'s_print($sno, $prefix, $cmd, @params);
  79.     }
  80.   }
  81.   return ($prefix, $cmd, @params);
  82. }
  83.  
  84. sub cp_invite {
  85.   local($clientno, $prefix, $cmd, @params) = @_;
  86.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  87.   return ($prefix, $cmd, @params);
  88. }
  89.  
  90. sub cs_invite {
  91.   local($clientno, @message) = @_;
  92.   return &send_server($clientno, 3, @message);
  93. }
  94.  
  95. sub ss_invite {
  96.   local($serverno, $prefix, $cmd, @params) = @_;
  97.   local($nick, $orig, $chan);
  98.   $nick = &'prefix($prefix);
  99.   $orig = $params[0];
  100.   $chan = $params[1];
  101.   $params[1] = &alias($chan, $'userno[$serverno]);
  102.   foreach $cno (&each_client($serverno)) {
  103.     $params[0] = $'nick[$cno] if $orig eq $'nick[$serverno];
  104.     if ($nick eq $'nick[$serverno]) {
  105.       &'c_print($cno, &'user($cno), $cmd, @params);
  106.     } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  107.       &'c_print($cno, &'user($cno), $cmd, @params);
  108.     } else {
  109.       &'c_print($cno, $prefix, $cmd, @params);
  110.     }
  111.   }
  112.   $params[0] = $orig;
  113.   $params[1] = $chan;
  114.   return ($prefix, $cmd, @params);
  115. }
  116.  
  117. sub cs_ison {
  118.   local($clientno, $prefix, $cmd, @params) = @_;
  119.   local($userno, @list);
  120.   @list = ();
  121.   if ($params[0]) {
  122.     foreach $nick (split(/\s+/, $params[0])) {
  123.       ($params[0], $userno) = &real($nick, $'userno[$clientno]);
  124.       if ($userno != $'userno[$clientno]) {
  125.         foreach $sno (&each_server($userno)) {
  126.           &'s_print($sno, $prefix, $cmd, @params);
  127.         }
  128.       } else {
  129.         push(@list, $params[0]);
  130.       }
  131.     }
  132.     return () unless @list;
  133.     $params[0] = join(' ', @list);
  134.   } 
  135.   return ($prefix, $cmd, @params);
  136. }
  137.  
  138. sub cp_join {
  139.   local($clientno, $prefix, $cmd, @params) = @_;
  140.   $params[0] = &alias(&real($params[0], $'userno[$clientno]));
  141.   return ($prefix, $cmd, @params);
  142. }
  143.  
  144. sub cs_join {
  145.   local($clientno, @message) = @_;
  146.   return &send_server($clientno, 2, @message);
  147. }
  148.  
  149. sub ss_join {
  150.   local($serverno, $prefix, $cmd, @params) = @_;
  151.   local($nick, $chan);
  152.   $nick = &'prefix($prefix);
  153.   $chan = $params[0];
  154.   $params[0] = &alias($chan, $'userno[$serverno]);
  155.   foreach $cno (&each_client($serverno)) {
  156.     if ($nick eq $'nick[$serverno]) {
  157.       &'c_print($cno, &'user($cno), $cmd, @params);
  158.     } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  159.       &'c_print($cno, &'user($serverno), $cmd, @params);
  160.     } else {
  161.       &'c_print($cno, $prefix, $cmd, @params);
  162.     }
  163.   }
  164.   $params[0] = $chan;
  165.   return ($prefix, $cmd, @params);
  166. }
  167.  
  168. sub cp_kick {
  169.   local($clientno, $prefix, $cmd, @params) = @_;
  170.   $params[0] = &alias(&real($params[0], $'userno[$clientno]));
  171.   return ($prefix, $cmd, @params);
  172. }
  173.  
  174. sub cs_kick {
  175.   local($clientno, @message) = @_;
  176.   return &send_server($clientno, 2, @message);
  177. }
  178.  
  179. sub ss_kick {
  180.   local($serverno, $prefix, $cmd, @params) = @_;
  181.   local($nick, $chan, $who);
  182.   $nick = &'prefix($prefix);
  183.   $chan = $params[0];
  184.   $who = $params[1];
  185.   $params[0] = &alias($chan, $'userno[$serverno]);
  186.   foreach $cno (&each_client($serverno)) {
  187.     $params[1] = $'nick[$cno] if $who eq $'nick[$serverno];
  188.     if ($nick eq $'nick[$serverno]) {
  189.       &'c_print($cno, &'user($cno), $cmd, @params);
  190.     } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  191.       &'c_print($cno, &'user($serverno), $cmd, @params);
  192.     } else {
  193.       &'c_print($cno, $prefix, $cmd, @params);
  194.     }
  195.   }
  196.   $params[0] = $chan;
  197.   $params[1] = $who;
  198.   return ($prefix, $cmd, @params);
  199. }
  200.  
  201. sub cs_list {
  202.   local($clientno, @message) = @_;
  203.   return &send_server($clientno, 2, @message);
  204. }
  205.  
  206. sub cp_mode {
  207.   local($clientno, $prefix, $cmd, @params) = @_;
  208.   if (&'channel($params[0])) {
  209.     $params[0] = &alias(&real($params[0], $'userno[$clientno]));
  210.   }
  211.   return ($prefix, $cmd, @params);
  212. }
  213.  
  214. sub cs_mode {
  215.   local($clientno, $prefix, $cmd, @params) = @_;
  216.   local($userno, @list, $i);
  217.   if (@params) {
  218.     @list = ();
  219.     foreach $chan (split(/\,/, $params[0])) {
  220.       ($params[0], $userno) = &real($chan, $'userno[$clientno]);
  221.       if ($userno != $'userno[$clientno]) {
  222.         foreach $sno (&each_server($userno)) {
  223.           &'s_print($sno, $prefix, $cmd, @params);
  224.         }
  225.       } else {
  226.         push(@list, $params[0]);
  227.       }
  228.     }
  229.     return () unless @list;
  230.     $params[0] = join(',', @list);
  231.   }
  232.   return ($prefix, $cmd, @params);
  233. }
  234.  
  235. sub ss_mode {
  236.   local($serverno, $prefix, $cmd, @params) = @_;
  237.   local($userno, $nick, $chan);
  238.   $userno = $'userno[$serverno];
  239.   $nick = &'prefix($prefix);
  240.   $chan = $params[0];
  241.   if (&'channel($chan)) {
  242.     $params[0] = &alias($chan, $userno);
  243.     foreach $cno (&each_client($serverno)) {
  244.       if ($nick eq $'nick[$serverno]) {
  245.         &'c_print($cno, &'user($cno), $cmd, @params);
  246.       } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  247.         &'c_print($cno, &'user($serverno), $cmd, @params);
  248.       } else {
  249.         &'c_print($cno, $prefix, $cmd, @params);
  250.       }
  251.     }
  252.   } else {
  253.     foreach $cno (&each_client($serverno)) {
  254.       $params[0] = $'nick[$cno];
  255.       if ($nick eq $'nick[$serverno]) {
  256.         &'c_print($cno, &'user($cno), $cmd, @params);
  257.       } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  258.         &'c_print($cno, &'user($serverno), $cmd, @params);
  259.       } else {
  260.         &'c_print($cno, $prefix, $cmd, @params);
  261.       }
  262.     }
  263.   }
  264.   $params[0] = $chan;
  265.   return ($prefix, $cmd, @params);
  266. }
  267.  
  268. sub cs_names {
  269.   local($clientno, @message) = @_;
  270.   return &send_server($clientno, 2, @message);
  271. }
  272.  
  273. sub cs_nick {
  274.   local($clientno, $prefix, $cmd, @params) = @_;
  275.   local($i, $nick, $userno, @list);
  276.   @list = ();
  277.   if ($params[0]) {
  278.     foreach $nick (split(/\,/, $params[0])) {
  279.       ($params[0], $userno) = &real($nick, -1);
  280.       if ($userno == -1) {
  281.         for ($i = 0; $i < @'username; $i++) {
  282.           next unless $i != $'userno[$clientno];
  283.           foreach $sno (&each_server($i)) {
  284.             &'s_print($sno, $prefix, $cmd, @params);
  285.           }
  286.         }
  287.         push(@list, $params[0]);
  288.       } elsif ($userno == $'userno[$clientno]) {
  289.         push(@list, $params[0]);
  290.       } else {
  291.         foreach $sno (&each_server($userno)) {
  292.           &'s_print($sno, $prefix, $cmd, @params);
  293.         }
  294.       }
  295.     }
  296.     return () unless @list;
  297.     $params[0] = join(',', @list);
  298.   }
  299.   return ($prefix, $cmd, @params);
  300. }
  301.  
  302. sub ss_nick {
  303.   local($serverno, $prefix, $cmd, @params) = @_;
  304.   local($userno, $nick);
  305.   $userno = $'userno[$serverno];
  306.   $nick = &'prefix($prefix);
  307.   if ($params[0] ne $'nick[$serverno]) {
  308.     foreach $cno (&each_client($serverno)) {
  309.       next unless &exist($cno, $nick);
  310.       if ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  311.         &'c_print($cno, &'user($serverno), $cmd, @params);
  312.       } elsif ("\L$params[0]\E" eq "\L$'nick[$cno]\E") {
  313.         &'c_print($cno, $prefix, $cmd, $'nick[$serverno]);
  314.       } else {
  315.         &'c_print($cno, $prefix, $cmd, @params);
  316.       }
  317.     }
  318.   }
  319.   return ($prefix, $cmd, @params);
  320. }
  321.  
  322. sub cp_notice {
  323.   local($clientno, $prefix, $cmd, @params) = @_;
  324.   if (&'channel($params[0])) {
  325.     $params[0] = &alias(&real($params[0], $'userno[$clientno]));
  326.   }
  327.   return ($prefix, $cmd, @params);
  328. }
  329.  
  330. sub cs_notice {
  331.   local($clientno, @message) = @_;
  332.   return &send_server($clientno, 2, @message);
  333. }
  334.  
  335. sub ss_notice {
  336.   local($serverno, $prefix, $cmd, @params) = @_;
  337.   local($userno, $nick, $chan);
  338.   $userno = $'userno[$serverno];
  339.   $nick = &'prefix($prefix);
  340.   $chan = $params[0];
  341.   if (&'channel($chan)) {
  342.     $params[0] = &alias($chan, $userno);
  343.     foreach $cno (&each_client($serverno)) {
  344.       if ($nick eq $'nick[$serverno]) {
  345.         &'c_print($cno, &'user($cno), $cmd, @params);
  346.       } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  347.         &'c_print($cno, &'user($serverno), $cmd, @params);
  348.       } else {
  349.         &'c_print($cno, $prefix, $cmd, @params);
  350.       }
  351.     }
  352.   } else {
  353.     foreach $cno (&each_client($serverno)) {
  354.       $params[0] = $'nick[$cno];
  355.       if ($nick eq $'nick[$serverno]) {
  356.         &'c_print($cno, &'user($cno), $cmd, @params);
  357.       } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  358.         &'c_print($cno, &'user($serverno), $cmd, @params);
  359.       } else {
  360.         &'c_print($cno, $prefix, $cmd, @params);
  361.       }
  362.     }
  363.   }
  364.   $params[0] = $chan;
  365.   return ($prefix, $cmd, @params);
  366. }
  367.  
  368. sub cs_oper {
  369.   local($clientno, @message) = @_;
  370.   return &send_server($clientno, 2, @message);
  371. }
  372.  
  373. sub cp_part {
  374.   local($clientno, $prefix, $cmd, @params) = @_;
  375.   $params[0] = &alias(&real($params[0], $'userno[$clientno]));
  376.   return ($prefix, $cmd, @params);
  377. }
  378.  
  379. sub cs_part {
  380.   local($clientno, @message) = @_;
  381.   return &send_server($clientno, 2, @message);
  382. }
  383.  
  384. sub ss_part {
  385.   local($serverno, $prefix, $cmd, @params) = @_;
  386.   local($userno, $nick, $chan);
  387.   $userno = $'userno[$serverno];
  388.   $nick = &'prefix($prefix);
  389.   $chan = $params[0];
  390.   $params[0] = &alias($chan, $userno);
  391.   foreach $cno (&each_client($serverno)) {
  392.     if ($nick eq $'nick[$serverno]) {
  393.       &'c_print($cno, &'user($cno), $cmd, @params);
  394.     } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  395.       &'c_print($cno, &'user($serverno), $cmd, @params);
  396.     } else {
  397.       &'c_print($cno, $prefix, $cmd, @params);
  398.     }
  399.   }
  400.   $params[0] = $chan;
  401.   return ($prefix, $cmd, @params);
  402. }
  403.  
  404. sub cp_privmsg {
  405.   local($clientno, $prefix, $cmd, @params) = @_;
  406.   if (&'channel($params[0])) {
  407.     $params[0] = &alias(&real($params[0], $'userno[$clientno]));
  408.   }
  409.   return ($prefix, $cmd, @params);
  410. }
  411.  
  412. sub cs_privmsg {
  413.   local($clientno, @message) = @_;
  414.   return &send_server($clientno, 2, @message);
  415. }
  416.  
  417. sub ss_privmsg {
  418.   local($serverno, $prefix, $cmd, @params) = @_;
  419.   local($userno, $chan, $nick);
  420.   $userno = $'userno[$serverno];
  421.   $nick = &'prefix($prefix);
  422.   $chan = $params[0];
  423.   if (&'channel($chan)) {
  424.     $params[0] = &alias($chan, $userno);
  425.     foreach $cno (&each_client($serverno)) {
  426.       if ($nick eq $'nick[$serverno]) {
  427.         &'c_print($cno, &'user($cno), $cmd, @params);
  428.       } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  429.         &'c_print($cno, &'user($serverno), $cmd, @params);
  430.       } else {
  431.         &'c_print($cno, $prefix, $cmd, @params);
  432.       }
  433.     }
  434.   } else {
  435.     foreach $cno (&each_client($serverno)) {
  436.       $params[0] = $'nick[$cno];
  437.       if ($nick eq $'nick[$serverno]) {
  438.         &'c_print($cno, &'user($cno), $cmd, @params);
  439.       } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  440.         &'c_print($cno, &'user($serverno), $cmd, @params);
  441.       } else {
  442.         &'c_print($cno, $prefix, $cmd, @params);
  443.       }
  444.     }
  445.   }
  446.   $params[0] = $chan;
  447.   return ($prefix, $cmd, @params);
  448. }
  449.  
  450. sub ss_quit {
  451.   local($serverno, $prefix, $cmd, @params) = @_;
  452.   local($nick);
  453.   $nick = &'prefix($prefix);
  454.   foreach $cno (&each_client($serverno)) {
  455.     if ($nick eq $'nick[$serverno]) {
  456.       &'c_print($cno, &'user($cno), $cmd, @params);
  457.     } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  458.       &'c_print($cno, &'user($serverno), $cmd, @params);
  459.     } else {
  460.       &'c_print($cno, $prefix, $cmd, @params);
  461.     }
  462.   }
  463.   return ($prefix, $cmd, @params);
  464. }
  465.  
  466. sub cp_topic {
  467.   local($clientno, $prefix, $cmd, @params) = @_;
  468.   $params[0] = &alias(&real($params[0], $'userno[$clientno]));
  469.   return ($prefix, $cmd, @params);
  470. }
  471.  
  472. sub cs_topic {
  473.   local($clientno, @message) = @_;
  474.   return &send_server($clientno, 2, @message);
  475. }
  476.  
  477. sub ss_topic {
  478.   local($serverno, $prefix, $cmd, @params) = @_;
  479.   local($nick, $chan);
  480.   $nick = &'prefix($prefix);
  481.   $chan = $params[0];
  482.   $params[0] = &alias($chan, $'userno[$serverno]);
  483.   foreach $cno (&each_client($serverno)) {
  484.     if ($nick eq $'nick[$serverno]) {
  485.       &'c_print($cno, &'user($cno), $cmd, @params);
  486.     } elsif ("\L$nick\E" eq "\L$'nick[$cno]\E") {
  487.       &'c_print($cno, &'user($serverno), $cmd, @params);
  488.     } else {
  489.       &'c_print($cno, $prefix, $cmd, @params);
  490.     }
  491.   }
  492.   $params[0] = $chan;
  493.   return ($prefix, $cmd, @params);
  494. }
  495.  
  496. sub cs_umode {
  497.   local($clientno, $prefix, $cmd, @params) = @_;
  498.   local($nick, $i);
  499.   if ($params[0]) {
  500.     $nick = $params[0];
  501.     for ($i = 0; $i < @'username; $i++) {
  502.       next unless $i != $'userno[$clientno];
  503.       foreach $sno (&each_server($i)) {
  504.         $params[0] = $'nick[$sno] if "\L$'nick[$clientno]\E" eq "\L$nick\E";
  505.         &'s_print($sno, $prefix, $cmd, @params);
  506.       }
  507.     }
  508.     $params[0] = $nick;
  509.   }
  510.   return ($prefix, $cmd, @params);
  511. }
  512.  
  513. sub cs_userhost {
  514.   local($clientno, $prefix, $cmd, @params) = @_;
  515.   local($userno, @list);
  516.   @list = ();
  517.   if ($params[0]) {
  518.     foreach $nick (split(/\s+/, $params[0])) {
  519.       ($params[0], $userno) = &real($nick, $'userno[$clientno]);
  520.       if ($userno != $'userno[$clientno]) {
  521.         foreach $sno (&each_server($userno)) {
  522.           &'s_print($sno, $prefix, $cmd, @params);
  523.         }
  524.       } else {
  525.         push(@list, $params[0]);
  526.       }
  527.     }
  528.     return () unless @list;
  529.     $params[0] = join(' ', @list);
  530.   } 
  531.   return ($prefix, $cmd, @params);
  532. }
  533.  
  534. sub cs_version {
  535.   local($clientno, @message) = @_;
  536.   return &send_server($clientno, 2, @message);
  537. }
  538.  
  539. sub cs_who {
  540.   local($clientno, @message) = @_;
  541.   return &send_server($clientno, 2, @message);
  542. }
  543.  
  544. sub cs_whois {
  545.   local($clientno, @message) = @_;
  546.   if (@message > 3) {
  547.     return &send_server($clientno, 3, @message);
  548.   } else {
  549.     return &send_server($clientno, 2, @message);
  550.   }
  551. }
  552.  
  553. sub cs_whowas {
  554.   local($clientno, @message) = @_;
  555.   return &send_server($clientno, 2, @message);
  556. }
  557.  
  558. sub ss_221 {
  559.   local($serverno, @message) = @_;
  560.   &send_numeric($serverno, 0, @message);
  561.   return @message;
  562. }
  563.  
  564. sub ss_300 {
  565.   local($serverno, @message) = @_;
  566.   &send_numeric($serverno, 0, @message);
  567.   return @message;
  568. }
  569.  
  570. sub ss_301 {
  571.   local($serverno, @message) = @_;
  572.   &send_numeric($serverno, 0, @message);
  573.   return @message;
  574. }
  575.  
  576. sub ss_302 {
  577.   local($serverno, @message) = @_;
  578.   &send_numeric($serverno, 0, @message);
  579.   return @message;
  580. }
  581.  
  582. sub ss_303 {
  583.   local($serverno, @message) = @_;
  584.   &send_numeric($serverno, 0, @message);
  585.   return @message;
  586. }
  587.  
  588. sub ss_304 {
  589.   local($serverno, @message) = @_;
  590.   &send_numeric($serverno, 0, @message);
  591.   return @message;
  592. }
  593.  
  594. sub ss_305 {
  595.   local($serverno, @message) = @_;
  596.   &send_numeric($serverno, 0, @message);
  597.   return @message;
  598. }
  599.  
  600. sub ss_306 {
  601.   local($serverno, @message) = @_;
  602.   &send_numeric($serverno, 0, @message);
  603.   return @message;
  604. }
  605.  
  606. sub ss_311 {
  607.   local($serverno, @message) = @_;
  608.   &send_numeric($serverno, 0, @message);
  609.   return @message;
  610. }
  611.  
  612. sub ss_312 {
  613.   local($serverno, @message) = @_;
  614.   &send_numeric($serverno, 0, @message);
  615.   return @message;
  616. }
  617.  
  618. sub ss_313 {
  619.   local($serverno, @message) = @_;
  620.   &send_numeric($serverno, 0, @message);
  621.   return @message;
  622. }
  623.  
  624. sub ss_314 {
  625.   local($serverno, @message) = @_;
  626.   &send_numeric($serverno, 0, @message);
  627.   return @message;
  628. }
  629.  
  630. sub ss_315 {
  631.   local($serverno, @message) = @_;
  632.   &send_numeric($serverno, 0, @message);
  633.   return @message;
  634. }
  635.  
  636. sub ss_316 {
  637.   local($serverno, @message) = @_;
  638.   &send_numeric($serverno, 0, @message);
  639.   return @message;
  640. }
  641.  
  642. sub ss_317 {
  643.   local($serverno, @message) = @_;
  644.   &send_numeric($serverno, 0, @message);
  645.   return @message;
  646. }
  647.  
  648. sub ss_318 {
  649.   local($serverno, @message) = @_;
  650.   &send_numeric($serverno, 0, @message);
  651.   return @message;
  652. }
  653.  
  654. sub ss_319 {
  655.   local($serverno, @message) = @_;
  656.   &send_numeric($serverno, 0, @message);
  657.   return @message;
  658. }
  659.  
  660. sub ss_321 {
  661.   local($serverno, @message) = @_;
  662.   &send_numeric($serverno, 0, @message);
  663.   return @message;
  664. }
  665.  
  666. sub cp_322 {
  667.   local($clientno, $prefix, $cmd, @params) = @_;
  668.   if (&'channel($params[1])) {
  669.     $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  670.   }
  671.   return ($prefix, $cmd, @params);
  672. }
  673.  
  674. sub ss_322 {
  675.   local($serverno, @message) = @_;
  676.   &send_numeric($serverno, 3, @message);
  677.   return @message;
  678. }
  679.  
  680. sub ss_323 {
  681.   local($serverno, @message) = @_;
  682.   &send_numeric($serverno, 0, @message);
  683.   return @message;
  684. }
  685.  
  686. sub cp_324 {
  687.   local($clientno, $prefix, $cmd, @params) = @_;
  688.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  689.   return ($prefix, $cmd, @params);
  690. }
  691.  
  692. sub ss_324 {
  693.   local($serverno, @message) = @_;
  694.   &send_numeric($serverno, 3, @message);
  695.   return @message;
  696. }
  697.  
  698. sub cp_331 {
  699.   local($clientno, $prefix, $cmd, @params) = @_;
  700.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  701.   return ($prefix, $cmd, @params);
  702. }
  703.  
  704. sub ss_331 {
  705.   local($serverno, @message) = @_;
  706.   &send_numeric($serverno, 3, @message);
  707.   return @message;
  708. }
  709.  
  710. sub cp_332 {
  711.   local($clientno, $prefix, $cmd, @params) = @_;
  712.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  713.   return ($prefix, $cmd, @params);
  714. }
  715.  
  716. sub ss_332 {
  717.   local($serverno, @message) = @_;
  718.   &send_numeric($serverno, 3, @message);
  719.   return @message;
  720. }
  721.  
  722. sub cp_341 {
  723.   local($clientno, $prefix, $cmd, @params) = @_;
  724.   $params[2] = &alias(&real($params[2], $'userno[$clientno]));
  725.   return ($prefix, $cmd, @params);
  726. }
  727.  
  728. sub ss_341 {
  729.   local($serverno, @message) = @_;
  730.   &send_numeric($serverno, 4, @message);
  731.   return @message;
  732. }
  733.  
  734. sub ss_342 {
  735.   local($serverno, @message) = @_;
  736.   &send_numeric($serverno, 0, @message);
  737.   return @message;
  738. }
  739.  
  740. sub ss_351 {
  741.   local($serverno, @message) = @_;
  742.   &send_numeric($serverno, 0, @message);
  743.   return @message;
  744. }
  745.  
  746. sub cp_352 {
  747.   local($clientno, $prefix, $cmd, @params) = @_;
  748.   if (&'channel($params[1])) {
  749.     $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  750.   }
  751.   return ($prefix, $cmd, @params);
  752. }
  753.  
  754. sub ss_352 {
  755.   local($serverno, @message) = @_;
  756.   &send_numeric($serverno, 3, @message);
  757.   return @message;
  758. }
  759.  
  760. sub ss_353 {
  761.   local($serverno, $prefix, $cmd, @params) = @_;
  762.   local($userno, $chan, $list, $names);
  763.   $userno = $'userno[$serverno];
  764.   $chan = $params[2];
  765.   if (&'channel($chan)) {
  766.     $params[2] = &alias($chan, $userno);
  767.   }
  768.   $list = &'list(reverse(split(/\s+/, $params[3])));
  769.   foreach $cno (&each_client($serverno)) {
  770.     $params[0] = $'nick[$cno];
  771.     $names = $list;
  772.     if (&'exist($names, $'nick[$serverno], "+$'nick[$serverno]", "\@$'nick[$serverno]") && !&'exist($names, $'nick[$cno], "+$'nick[$cno]", "\@$'nick[$cno]")) {
  773.       $names = &'change($names, $'nick[$serverno], $'nick[$cno], "+$'nick[$serverno]", "+$'nick[$cno]", "\@$'nick[$serverno]", "\@$'nick[$cno]");
  774.     } elsif (&'exist($names, $'nick[$cno], "+$'nick[$cno]", "\@$'nick[$cno]") && !&'exist($names, $'nick[$serverno], "+$'nick[$serverno]", "\@$'nick[$serverno]")) {
  775.       $names = &'change($names, $'nick[$cno], $'nick[$serverno], "+$'nick[$cno]", "+$'nick[$serverno]", "\@$'nick[$cno]", "\@$'nick[$serverno]");
  776.     }
  777.     $params[3] = join(' ', reverse(&'array($names)));
  778.     &'c_print($cno, $prefix, $cmd, @params);
  779.   }
  780.   $params[0] = $'nick[$serverno];
  781.   $params[2] = $chan;
  782.   $params[3] = join(' ', reverse(&'array($list)));
  783.   return ($prefix, $cmd, @params);
  784. }
  785.  
  786. sub cp_353 {
  787.   local($clientno, $prefix, $cmd, @params) = @_;
  788.   if (&'channel($params[2])) {
  789.     $params[2] = &alias(&real($params[2], $'userno[$clientno]));
  790.   }
  791.   return ($prefix, $cmd, @params);
  792. }
  793.  
  794. sub ss_361 {
  795.   local($serverno, @message) = @_;
  796.   &send_numeric($serverno, 0, @message);
  797.   return @message;
  798. }
  799.  
  800. sub ss_362 {
  801.   local($serverno, @message) = @_;
  802.   &send_numeric($serverno, 0, @message);
  803.   return @message;
  804. }
  805.  
  806. sub ss_363 {
  807.   local($serverno, @message) = @_;
  808.   &send_numeric($serverno, 0, @message);
  809.   return @message;
  810. }
  811.  
  812. sub ss_364 {
  813.   local($serverno, @message) = @_;
  814.   &send_numeric($serverno, 0, @message);
  815.   return @message;
  816. }
  817.  
  818. sub ss_365 {
  819.   local($serverno, @message) = @_;
  820.   &send_numeric($serverno, 0, @message);
  821.   return @message;
  822. }
  823.  
  824. sub cp_366 {
  825.   local($clientno, $prefix, $cmd, @params) = @_;
  826.   if (&'channel($params[1])) {
  827.     $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  828.   }
  829.   return ($prefix, $cmd, @params);
  830. }
  831.  
  832. sub ss_366 {
  833.   local($serverno, @message) = @_;
  834.   &send_numeric($serverno, 3, @message);
  835.   return @message;
  836. }
  837.  
  838. sub cp_367 {
  839.   local($clientno, $prefix, $cmd, @params) = @_;
  840.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  841.   return ($prefix, $cmd, @params);
  842. }
  843.  
  844. sub ss_367 {
  845.   local($serverno, @message) = @_;
  846.   &send_numeric($serverno, 3, @message);
  847.   return @message;
  848. }
  849.  
  850. sub cp_368 {
  851.   local($clientno, $prefix, $cmd, @params) = @_;
  852.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  853.   return ($prefix, $cmd, @params);
  854. }
  855.  
  856. sub ss_368 {
  857.   local($serverno, @message) = @_;
  858.   &send_numeric($serverno, 3, @message);
  859.   return @message;
  860. }
  861.  
  862. sub ss_369 {
  863.   local($serverno, @message) = @_;
  864.   &send_numeric($serverno, 0, @message);
  865.   return @message;
  866. }
  867.  
  868. sub ss_372 {
  869.   local($serverno, @message) = @_;
  870.   &send_numeric($serverno, 0, @message);
  871.   return @message;
  872. }
  873.  
  874. sub ss_373 {
  875.   local($serverno, @message) = @_;
  876.   &send_numeric($serverno, 0, @message);
  877.   return @message;
  878. }
  879.  
  880. sub ss_374 {
  881.   local($serverno, @message) = @_;
  882.   &send_numeric($serverno, 0, @message);
  883.   return @message;
  884. }
  885.  
  886. sub ss_375 {
  887.   local($serverno, @message) = @_;
  888.   &send_numeric($serverno, 0, @message);
  889.   return @message;
  890. }
  891.  
  892. sub ss_376 {
  893.   local($serverno, @message) = @_;
  894.   &send_numeric($serverno, 0, @message);
  895.   return @message;
  896. }
  897.  
  898. sub ss_381 {
  899.   local($serverno, @message) = @_;
  900.   &send_numeric($serverno, 0, @message);
  901.   return @message;
  902. }
  903.  
  904. sub ss_382 {
  905.   local($serverno, @message) = @_;
  906.   &send_numeric($serverno, 0, @message);
  907.   return @message;
  908. }
  909.  
  910. sub ss_383 {
  911.   local($serverno, @message) = @_;
  912.   &send_numeric($serverno, 0, @message);
  913.   return @message;
  914. }
  915.  
  916. sub ss_384 {
  917.   local($serverno, @message) = @_;
  918.   &send_numeric($serverno, 0, @message);
  919.   return @message;
  920. }
  921.  
  922. sub ss_385 {
  923.   local($serverno, @message) = @_;
  924.   &send_numeric($serverno, 0, @message);
  925.   return @message;
  926. }
  927.  
  928. sub ss_391 {
  929.   local($serverno, @message) = @_;
  930.   &send_numeric($serverno, 0, @message);
  931.   return @message;
  932. }
  933.  
  934. sub ss_392 {
  935.   local($serverno, @message) = @_;
  936.   &send_numeric($serverno, 0, @message);
  937.   return @message;
  938. }
  939.  
  940. sub ss_393 {
  941.   local($serverno, @message) = @_;
  942.   &send_numeric($serverno, 0, @message);
  943.   return @message;
  944. }
  945.  
  946. sub ss_394 {
  947.   local($serverno, @message) = @_;
  948.   &send_numeric($serverno, 0, @message);
  949.   return @message;
  950. }
  951.  
  952. sub ss_395 {
  953.   local($serverno, @message) = @_;
  954.   &send_numeric($serverno, 0, @message);
  955.   return @message;
  956. }
  957.  
  958. sub cp_401 {
  959.   local($clientno, $prefix, $cmd, @params) = @_;
  960.   if (&'channel($params[1])) {
  961.     $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  962.   }
  963.   return ($prefix, $cmd, @params);
  964. }
  965.  
  966. sub ss_401 {
  967.   local($serverno, @message) = @_;
  968.   &send_numeric($serverno, 3, @message);
  969.   return @message;
  970. }
  971.  
  972. sub ss_402 {
  973.   local($serverno, @message) = @_;
  974.   &send_numeric($serverno, 0, @message);
  975.   return @message;
  976. }
  977.  
  978. sub cp_403 {
  979.   local($clientno, $prefix, $cmd, @params) = @_;
  980.   if (&'channel($params[1])) {
  981.     $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  982.   }
  983.   return ($prefix, $cmd, @params);
  984. }
  985.  
  986. sub ss_403 {
  987.   local($serverno, @message) = @_;
  988.   &send_numeric($serverno, 3, @message);
  989.   return @message;
  990. }
  991.  
  992. sub cp_404 {
  993.   local($clientno, $prefix, $cmd, @params) = @_;
  994.   if (&'channel($params[1])) {
  995.     $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  996.   }
  997.   return ($prefix, $cmd, @params);
  998. }
  999.  
  1000. sub ss_404 {
  1001.   local($serverno, @message) = @_;
  1002.   &send_numeric($serverno, 3, @message);
  1003.   return @message;
  1004. }
  1005.  
  1006. sub cp_405 {
  1007.   local($clientno, $prefix, $cmd, @params) = @_;
  1008.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1009.   return ($prefix, $cmd, @params);
  1010. }
  1011.  
  1012. sub ss_405 {
  1013.   local($serverno, @message) = @_;
  1014.   &send_numeric($serverno, 3, @message);
  1015.   return @message;
  1016. }
  1017.  
  1018. sub ss_406 {
  1019.   local($serverno, @message) = @_;
  1020.   &send_numeric($serverno, 0, @message);
  1021.   return @message;
  1022. }
  1023.  
  1024. sub ss_407 {
  1025.   local($serverno, @message) = @_;
  1026.   &send_numeric($serverno, 0, @message);
  1027.   return @message;
  1028. }
  1029.  
  1030. sub ss_408 {
  1031.   local($serverno, @message) = @_;
  1032.   &send_numeric($serverno, 0, @message);
  1033.   return @message;
  1034. }
  1035.  
  1036. sub ss_409 {
  1037.   local($serverno, @message) = @_;
  1038.   &send_numeric($serverno, 0, @message);
  1039.   return @message;
  1040. }
  1041.  
  1042. sub ss_411 {
  1043.   local($serverno, @message) = @_;
  1044.   &send_numeric($serverno, 0, @message);
  1045.   return @message;
  1046. }
  1047.  
  1048. sub ss_412 {
  1049.   local($serverno, @message) = @_;
  1050.   &send_numeric($serverno, 0, @message);
  1051.   return @message;
  1052. }
  1053.  
  1054. sub ss_413 {
  1055.   local($serverno, @message) = @_;
  1056.   &send_numeric($serverno, 0, @message);
  1057.   return @message;
  1058. }
  1059.  
  1060. sub ss_414 {
  1061.   local($serverno, @message) = @_;
  1062.   &send_numeric($serverno, 0, @message);
  1063.   return @message;
  1064. }
  1065.  
  1066. sub ss_415 {
  1067.   local($serverno, @message) = @_;
  1068.   &send_numeric($serverno, 0, @message);
  1069.   return @message;
  1070. }
  1071.  
  1072. sub ss_416 {
  1073.   local($serverno, @message) = @_;
  1074.   &send_numeric($serverno, 0, @message);
  1075.   return @message;
  1076. }
  1077.  
  1078. sub ss_421 {
  1079.   local($serverno, @message) = @_;
  1080.   &send_numeric($serverno, 0, @message);
  1081.   return @message;
  1082. }
  1083.  
  1084. sub ss_422 {
  1085.   local($serverno, @message) = @_;
  1086.   &send_numeric($serverno, 0, @message);
  1087.   return @message;
  1088. }
  1089.  
  1090. sub ss_423 {
  1091.   local($serverno, @message) = @_;
  1092.   &send_numeric($serverno, 0, @message);
  1093.   return @message;
  1094. }
  1095.  
  1096. sub ss_424 {
  1097.   local($serverno, @message) = @_;
  1098.   &send_numeric($serverno, 0, @message);
  1099.   return @message;
  1100. }
  1101.  
  1102. sub ss_431 {
  1103.   local($serverno, @message) = @_;
  1104.   &send_numeric($serverno, 0, @message);
  1105.   return @message;
  1106. }
  1107.  
  1108. sub ss_432 {
  1109.   local($serverno, @message) = @_;
  1110.   &send_numeric($serverno, 0, @message);
  1111.   return @message;
  1112. }
  1113.  
  1114. sub ss_433 {
  1115.   local($serverno, @message) = @_;
  1116.   &send_numeric($serverno, 0, @message);
  1117.   return @message;
  1118. }
  1119.  
  1120. sub ss_434 {
  1121.   local($serverno, @message) = @_;
  1122.   &send_numeric($serverno, 0, @message);
  1123.   return @message;
  1124. }
  1125.  
  1126. sub ss_435 {
  1127.   local($serverno, @message) = @_;
  1128.   &send_numeric($serverno, 0, @message);
  1129.   return @message;
  1130. }
  1131.  
  1132. sub ss_436 {
  1133.   local($serverno, @message) = @_;
  1134.   &send_numeric($serverno, 0, @message);
  1135.   return @message;
  1136. }
  1137.  
  1138. sub ss_437 {
  1139.   local($serverno, @message) = @_;
  1140.   &send_numeric($serverno, 0, @message);
  1141.   return @message;
  1142. }
  1143.  
  1144. sub cp_441 {
  1145.   local($clientno, $prefix, $cmd, @params) = @_;
  1146.   $params[2] = &alias(&real($params[2], $'userno[$clientno]));
  1147.   return ($prefix, $cmd, @params);
  1148. }
  1149.  
  1150. sub ss_441 {
  1151.   local($serverno, @message) = @_;
  1152.   &send_numeric($serverno, 4, @message);
  1153.   return @message;
  1154. }
  1155.  
  1156. sub cp_442 {
  1157.   local($clientno, $prefix, $cmd, @params) = @_;
  1158.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1159.   return ($prefix, $cmd, @params);
  1160. }
  1161.  
  1162. sub ss_442 {
  1163.   local($serverno, @message) = @_;
  1164.   &send_numeric($serverno, 3, @message);
  1165.   return @message;
  1166. }
  1167.  
  1168. sub cp_443 {
  1169.   local($clientno, $prefix, $cmd, @params) = @_;
  1170.   $params[2] = &alias(&real($params[2], $'userno[$clientno]));
  1171.   return ($prefix, $cmd, @params);
  1172. }
  1173.  
  1174. sub ss_443 {
  1175.   local($serverno, @message) = @_;
  1176.   &send_numeric($serverno, 4, @message);
  1177.   return @message;
  1178. }
  1179.  
  1180. sub ss_444 {
  1181.   local($serverno, @message) = @_;
  1182.   &send_numeric($serverno, 0, @message);
  1183.   return @message;
  1184. }
  1185.  
  1186. sub ss_445 {
  1187.   local($serverno, @message) = @_;
  1188.   &send_numeric($serverno, 0, @message);
  1189.   return @message;
  1190. }
  1191.  
  1192. sub ss_446 {
  1193.   local($serverno, @message) = @_;
  1194.   &send_numeric($serverno, 0, @message);
  1195.   return @message;
  1196. }
  1197.  
  1198. sub ss_451 {
  1199.   local($serverno, @message) = @_;
  1200.   &send_numeric($serverno, 0, @message);
  1201.   return @message;
  1202. }
  1203.  
  1204. sub ss_461 {
  1205.   local($serverno, @message) = @_;
  1206.   &send_numeric($serverno, 0, @message);
  1207.   return @message;
  1208. }
  1209.  
  1210. sub ss_462 {
  1211.   local($serverno, @message) = @_;
  1212.   &send_numeric($serverno, 0, @message);
  1213.   return @message;
  1214. }
  1215.  
  1216. sub ss_463 {
  1217.   local($serverno, @message) = @_;
  1218.   &send_numeric($serverno, 0, @message);
  1219.   return @message;
  1220. }
  1221.  
  1222. sub ss_464 {
  1223.   local($serverno, @message) = @_;
  1224.   &send_numeric($serverno, 0, @message);
  1225.   return @message;
  1226. }
  1227.  
  1228. sub ss_465 {
  1229.   local($serverno, @message) = @_;
  1230.   &send_numeric($serverno, 0, @message);
  1231.   return @message;
  1232. }
  1233.  
  1234. sub ss_466 {
  1235.   local($serverno, @message) = @_;
  1236.   &send_numeric($serverno, 0, @message);
  1237.   return @message;
  1238. }
  1239.  
  1240. sub cp_467 {
  1241.   local($clientno, $prefix, $cmd, @params) = @_;
  1242.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1243.   return ($prefix, $cmd, @params);
  1244. }
  1245.  
  1246. sub ss_467 {
  1247.   local($serverno, @message) = @_;
  1248.   &send_numeric($serverno, 3, @message);
  1249.   return @message;
  1250. }
  1251.  
  1252. sub cp_471 {
  1253.   local($clientno, $prefix, $cmd, @params) = @_;
  1254.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1255.   return ($prefix, $cmd, @params);
  1256. }
  1257.  
  1258. sub ss_471 {
  1259.   local($serverno, @message) = @_;
  1260.   &send_numeric($serverno, 3, @message);
  1261.   return @message;
  1262. }
  1263.  
  1264. sub ss_472 {
  1265.   local($serverno, @message) = @_;
  1266.   &send_numeric($serverno, 0, @message);
  1267.   return @message;
  1268. }
  1269.  
  1270. sub cp_473 {
  1271.   local($clientno, $prefix, $cmd, @params) = @_;
  1272.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1273.   return ($prefix, $cmd, @params);
  1274. }
  1275.  
  1276. sub ss_473 {
  1277.   local($serverno, @message) = @_;
  1278.   &send_numeric($serverno, 3, @message);
  1279.   return @message;
  1280. }
  1281.  
  1282. sub cp_474 {
  1283.   local($clientno, $prefix, $cmd, @params) = @_;
  1284.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1285.   return ($prefix, $cmd, @params);
  1286. }
  1287.  
  1288. sub ss_474 {
  1289.   local($serverno, @message) = @_;
  1290.   &send_numeric($serverno, 3, @message);
  1291.   return @message;
  1292. }
  1293.  
  1294. sub cp_475 {
  1295.   local($clientno, $prefix, $cmd, @params) = @_;
  1296.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1297.   return ($prefix, $cmd, @params);
  1298. }
  1299.  
  1300. sub ss_475 {
  1301.   local($serverno, @message) = @_;
  1302.   &send_numeric($serverno, 3, @message);
  1303.   return @message;
  1304. }
  1305.  
  1306. sub ss_476 {
  1307.   local($serverno, @message) = @_;
  1308.   &send_numeric($serverno, 0, @message);
  1309.   return @message;
  1310. }
  1311.  
  1312. sub ss_477 {
  1313.   local($serverno, @message) = @_;
  1314.   &send_numeric($serverno, 0, @message);
  1315.   return @message;
  1316. }
  1317.  
  1318. sub ss_481 {
  1319.   local($serverno, @message) = @_;
  1320.   &send_numeric($serverno, 0, @message);
  1321.   return @message;
  1322. }
  1323.  
  1324. sub cp_482 {
  1325.   local($clientno, $prefix, $cmd, @params) = @_;
  1326.   $params[1] = &alias(&real($params[1], $'userno[$clientno]));
  1327.   return ($prefix, $cmd, @params);
  1328. }
  1329.  
  1330. sub ss_482 {
  1331.   local($serverno, @message) = @_;
  1332.   &send_numeric($serverno, 3, @message);
  1333.   return @message;
  1334. }
  1335.  
  1336. sub ss_483 {
  1337.   local($serverno, @message) = @_;
  1338.   &send_numeric($serverno, 0, @message);
  1339.   return @message;
  1340. }
  1341.  
  1342. sub ss_484 {
  1343.   local($serverno, @message) = @_;
  1344.   &send_numeric($serverno, 0, @message);
  1345.   return @message;
  1346. }
  1347.  
  1348. sub ss_491 {
  1349.   local($serverno, @message) = @_;
  1350.   &send_numeric($serverno, 0, @message);
  1351.   return @message;
  1352. }
  1353.  
  1354. sub ss_492 {
  1355.   local($serverno, @message) = @_;
  1356.   &send_numeric($serverno, 0, @message);
  1357.   return @message;
  1358. }
  1359.  
  1360. sub ss_501 {
  1361.   local($serverno, @message) = @_;
  1362.   &send_numeric($serverno, 0, @message);
  1363.   return @message;
  1364. }
  1365.  
  1366. sub ss_502 {
  1367.   local($serverno, @message) = @_;
  1368.   &send_numeric($serverno, 0, @message);
  1369.   return @message;
  1370. }
  1371.  
  1372. sub join_channel {
  1373.   local($cno, $userno) = @_;
  1374.   local($nick, $name, $list);
  1375.   $nick = $'nick[$cno];
  1376.   foreach $sno (&each_server($userno)) {
  1377.     foreach $chan (&'array($'channellist[$sno])) {
  1378.       $name = &alias($chan, $'userno[$sno]);
  1379.       &'c_print($cno, &'user($cno), 'JOIN', $name);
  1380.       &'c_print($cno, $'servername[$cno], '332', $nick, $name, $'topic{$sno, $chan}) if $'topic{$sno, $chan};
  1381.       $list = $'nameslist{$sno, $chan};
  1382.       if (&'exist($list, $'nick[$sno], "+$'nick[$sno]", "\@$'nick[$sno]") && !&'exist($list, $'nick[$cno], "+$'nick[$cno]", "\@$'nick[$cno]")) {
  1383.         $list = &'change($list, $'nick[$sno], $'nick[$cno], "+$'nick[$sno]", "+$'nick[$cno]", "\@$'nick[$sno]", "\@$'nick[$cno]");
  1384.       } elsif (&'exist($list, $'nick[$cno], "+$'nick[$cno]", "\@$'nick[$cno]") && !&'exist($list, $'nick[$sno], "+$'nick[$sno]", "\@$'nick[$sno]")) {
  1385.         $list = &'change($list, $'nick[$cno], $'nick[$sno], "+$'nick[$cno]", "+$'nick[$sno]", "\@$'nick[$cno]", "\@$'nick[$sno]");
  1386.       }
  1387.       &'c_print($cno, $'servername[$cno], '353', $nick, '=', $name, join(' ', reverse(&'array($list))));
  1388.       &'c_print($cno, $'servername[$cno], '366', $nick, $name, 'End of /NAMES list.');
  1389.     }
  1390.   }
  1391. }
  1392.  
  1393. sub send_server {
  1394.   local($cno, $idx, @message) = @_;
  1395.   local($userno, @list);
  1396.   if (@message > $idx) {
  1397.     @list = ();
  1398.     foreach $chan (split(/\,/, $message[$idx])) {
  1399.       ($message[$idx], $userno) = &real($chan, $'userno[$cno]);
  1400.       if ($message[$idx]) {
  1401.         if ($userno != $'userno[$cno]) {
  1402.           foreach $sno (&each_server($userno)) {
  1403.             &'s_print($sno, @message);
  1404.           }
  1405.         } else {
  1406.           push(@list, $message[$idx]);
  1407.         }
  1408.       } else {
  1409.         splice(@message, $idx, 1);
  1410.         foreach $sno (&each_server($userno)) {
  1411.           &'s_print($sno, @message);
  1412.         }
  1413.         splice(@message, $idx, 0, '');
  1414.       }
  1415.     }
  1416.     return () unless @list;
  1417.     $message[$idx] = join(',', @list);
  1418.   }
  1419.   return @message;
  1420. }
  1421.  
  1422. sub send_numeric {
  1423.   local($serverno, $idx, @message) = @_;
  1424.   local($userno);
  1425.   $userno = $'userno[$serverno];
  1426.   if ($idx && &'channel($message[$idx])) {
  1427.     $message[$idx] = &alias($message[$idx], $userno);
  1428.   }
  1429.   foreach $cno (&each_client($serverno)) {
  1430.     $message[2] = $'nick[$cno];
  1431.     &'c_print($cno, @message);
  1432.   }
  1433. }
  1434.  
  1435. sub alias {
  1436.   local($chan, $userno) = @_;
  1437.   local($name, $mode);
  1438.   ($name, $mode) = split(/\cG/, $chan || '');
  1439.   $name = &'alias($name);
  1440.   $name .= "\@$'username[$userno]";
  1441.   $name = &'real($name);
  1442.   $name .= "\cG$mode" if $mode;
  1443.   return $name;
  1444. }
  1445.  
  1446. sub real {
  1447.   local($chan, $userno) = @_;
  1448.   local($name, $mode, $user, $idx, $i);
  1449.   ($name, $mode) = split(/\cG/, $chan || '');
  1450.   $name = &'jis_euc(&'alias($name || ''));
  1451.   if (($idx = rindex($name, '@')) != -1) {
  1452.     $user = substr($name, $idx + 1);
  1453.     for ($i = 0; $i < @'username; $i++) {
  1454.       next unless "\L$'username[$i]\E" eq "\L$user\E";
  1455.       $name = &'real(&'euc_jis(substr($name, 0, $idx)));
  1456.       $name .= "\cG$mode" if $mode;
  1457.       return ($name, $i);
  1458.     }
  1459.   }
  1460.   return ($chan, $userno);
  1461. }
  1462.  
  1463. sub each_server {
  1464.   local($userno) = @_;
  1465.   local(@list);
  1466.   @list = ();
  1467.   if (&'exist($'modulelist[$userno], 'sys_multicast')) {
  1468.     foreach $sno (&'array($'serverlist)) {
  1469.       next unless $userno == $'userno[$sno];
  1470.       next unless $'avail[$sno];
  1471.       push(@list, $sno);
  1472.     }
  1473.   }
  1474.   return @list;
  1475. }
  1476.  
  1477. sub each_client {
  1478.   local($sno) = @_;
  1479.   local(@list);
  1480.   @list = ();
  1481.   foreach $cno (&'array($'clientlist)) {
  1482.     next unless $'avail[$cno];
  1483.     next unless $'server[$cno] != $sno;
  1484.     next unless &'exist($'modulelist[$'userno[$cno]], 'sys_multicast');
  1485.     push(@list, $cno);
  1486.   }
  1487.   return @list;
  1488. }
  1489.  
  1490. sub exist {
  1491.   local($no, $nick) = @_;
  1492.   foreach $chan (&'array($'channellist[$no])) {
  1493.     if (&'exist($'nameslist{$no, $chan}, $nick, "+$nick", "\@$nick")) {
  1494.       return 1;
  1495.     }
  1496.   }
  1497.   return 0;
  1498. }
  1499.  
  1500. __END__
  1501. --><HTML><HEAD>
  1502. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
  1503. <LINK REV="made" HREF="mailto:hasegawa@madoka.org">
  1504. <TITLE>sys/multicast.plm</TITLE></HEAD><BODY>
  1505.  
  1506. $B%*%s%i%$%s%I%-%e%a%s%H(B
  1507.  
  1508.  
  1509. <HR><H3>$BL>A0(B</H3>
  1510.  
  1511. sys/multicast.plm - $BJ#?t$N%5!<%P$rC10l$N%5!<%P$N$h$&$K%(%_%e%l!<%H$9$k(B
  1512.  
  1513.  
  1514. <HR><H3>$B@bL@(B</H3>
  1515.  
  1516. $BJ#?t$N@_Dj%U%!%$%k$r;H$C$F%5!<%P$K@\B3$7!"$=$l$>$l$N@_Dj$N%5!<%P$r(B
  1517. $BJL$N@_Dj$N%/%i%$%"%s%H$+$i%"%/%;%9$G$-$k$h$&$K$7$^$9!#(B
  1518. $B$3$N%b%8%e!<%k$rF~$l$k$H!"$9$Y$F$N%A%c%s%M%kL>$O!V%A%c%s%M%kL>(B@$B@_DjL>!W(B
  1519. $B$H$$$&L>A0$KJQ49$5$l$^$9!#(B
  1520.  
  1521.  
  1522. <HR><H3>$B%W%m%Q%F%#(B</H3>
  1523.  
  1524.  
  1525. <HR><H3>$B@_DjNc(B</H3>
  1526.  
  1527. <PRE>
  1528. + sys/multicast.plm
  1529. </PRE>
  1530.  
  1531. </BODY></HTML>
  1532.