pgplus/bin/
pgplus/help_files/
pgplus/port_redirector/
pgplus/src/configure/makefiles/
/*
 * Silvercode - channel2.c
 * Additional channel code for IChan.
 * ---------------------------------------------------------------------------
 *
 * IChan (intercom channel) is copyright (c) Richard Lawrence and Mike
 * Bourdaa. The intercom code is copyright (c) Michael Simms.
 *
 * This code may not be redistributed in whole or part IN ANY FORM without
 * the prior permission of the author who can be contacted at
 * <silver@ewtoo.org>.
 *
 *     [ This file should be included from channel.c ]
 */

/* sends a message to all people seeing the intercom channel */

void ichan_wall(char *str)
{
  player *scan;

  if (intercom_fd < 1) /* intercom is down */
    return;

  for (scan = flatlist_start; scan; scan = scan->flat_next)
  {
    if (scan->residency && scan->location && !(scan->misc_flags & NO_INTERCOM_CHANNEL))
    {
      if (scan->misc_flags & CHAN_HI)
        command_type |= HIGHLIGHT;

      sys_color_atm = SYSc; /* if you have a colour available, put it here */
      tell_player(scan, str);
      sys_color_atm = SYSc;

      if (scan->misc_flags & CHAN_HI)
        command_type &= ~HIGHLIGHT;
    }
  }
}

/* intercom channel text processing */

void i_chan(char *format,...)
{
  va_list x;
  va_start(x, format);
  any_chan(get_config_msg("intercom_chan"), ichan_wall, format, x);
  va_end(x);
}

/* intercom channel "say" command */

void iu(player * p, char *str)
{
  if (check_intercom_banished_name(p->lower_name))
  {
    tell_player(p, " You have been prevented from using the intercom.\n");
    return;
  }

  if (got_msg(p, str, "iu") && is_on_channel(p, NO_INTERCOM_CHANNEL))
  {
    if (intercom_fd < 1)
    {
      tell_player(p, " The intercom is currently down.\n");
      return;
    }
    intercom_channel_say(p, str);
    channel_say(p, str, i_chan);
  }
}

/* intercom channel "emote" command */

void ie(player * p, char *str)
{
  if (check_intercom_banished_name(p->lower_name))
  {
    tell_player(p, " You have been prevented from using the intercom.\n");
    return;
  }

  if (got_msg(p, str, "ie") && is_on_channel(p, NO_INTERCOM_CHANNEL))
  {
    if (intercom_fd < 1)
    {
      tell_player(p, " The intercom is currently down.\n");
      return;
    }
    intercom_channel_emote(p, str);
    channel_emote(p, str, i_chan);
  }
}

/* intercom channel "sing" command. Text is pre-processed and then
   sent to 'ie' */

void is(player *p, char *str)
{
  char *oldstack = stack;

  if (got_msg(p, str, "is") && is_on_channel(p, NO_INTERCOM_CHANNEL))
  {
    sprintf(stack, "sings o/~ %s^N o/~", str);
    stack = end_string(stack);
    ie(p, oldstack);
    stack = oldstack;
  }
}

/* intercom channel "think" command. Text is pre-processed and then
   sent to 'ie' */

void it(player *p, char *str)
{
  char *oldstack = stack;

  if (got_msg(p, str, "it") && is_on_channel(p, NO_INTERCOM_CHANNEL))
  {
    sprintf(stack, "thinks . o O ( %s^N )", str);
    stack = end_string(stack);
    ie(p, oldstack);
    stack = oldstack;
  }
}

/* the "iw" command */

void i_who(player * p, char *str)
{
  player *scan;   
  char *oldstack = stack;
  int flag = 0, length = 26;

  if (intercom_fd < 1)
  {
    tell_player(p, " The intercom is currently down.\n");
    return;
  }
 
  sprintf(stack, " People listening to the intercom channel (ichan):\n");
  stack = strchr(stack, 0);

  for (scan = flatlist_start; scan; scan = scan->flat_next)
#ifdef ROBOTS
    if (scan->residency && scan->location && !(scan->misc_flags & NO_INTERCOM_CHANNEL) && !(scan->residency & ROBOT_PRIV))
#else
    if (scan->residency && scan->location && !(scan->misc_flags & NO_INTERCOM_CHANNEL))
#endif
    {
      if (!flag)
      {
        sprintf(stack, "   %-30.30s : ", get_config_msg("talker_name"));
        stack = strchr(stack, 0);
      }
      if ((length + strlen(scan->name)) > 70)
      {
        sprintf(stack, "\n                                    ");
        stack = strchr(stack, 0);
        length = 36;
      }
      sprintf(stack, "%s, ", scan->name);
      stack = strchr(stack, 0);
      flag = 1;
      length += (strlen(scan->name)+2);
    }
                 
  if (flag)
  {
    stack -= 2;
    *stack++ = '.';
    *stack++ = '\n';
  }

  stack = end_string(stack);   
  tell_player(p, oldstack);
  stack = oldstack;
                 
  /* get the other talkers */
   
  intercom_ichan_who(p);
}