home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 2.x / plum2_28_2.lzh / module / sys / multicast.plm < prev    next >
Text File  |  1998-10-15  |  36KB  |  1,483 lines

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