回精華區
作者itoc, 信區: itoc
標題[功能] bmw.c 水球列表 tag 廣播
時間04/03/04
作者: itoc (核心動力) 看板: itoc
標題: Re: [問題]Tagger放到bmw
時間: 2004/03/04 Thu 12:49:59                           Updated: 2004/03/05

  送廣播給被 tag 的這些人

: bmw.c:bmw_broadcast() 新增此函式於 bmw_help() 前面

static int
bmw_broadcast(xo)
  XO *xo;
{
  int tag, locus, userno;
  char *dir;
  BMW *bmw, xbmw, benz;
  UTMP *up;

  tag = AskTag("特定對象廣播");

  if (tag < 0)
    return XO_FOOT;

  benz.caller = NULL;
  bmw_edit(NULL, "★廣播:", &benz);

  if (!benz.caller)      /* bmw_edit() 中回答 No 不送出廣播 */
    return XO_FOOT;

  /* itoc.000213: 加 "> " 為了與一般水球區分 */
  sprintf(benz.userid, "%s> ", cuser.userid);

  bmw = tag ? &xbmw : (BMW *) xo_pool + xo->pos - xo->top;
  dir = xo->dir;
  locus = 0;

  do
  {
    if (tag)
      EnumTag(bmw, dir, locus, sizeof(BMW));

    /* itoc.010304: 讓傳訊的 bmw 也可以回 */
    /* 我送水球給別人,回給收訊者;別人送水球給我,回給送訊者 */
    userno = (bmw->sender == cuser.userno) ? bmw->recver : bmw->sender;
    if (!userno)
      continue;

    if (up = utmp_find(userno))
    {
#ifdef HAVE_NOBROAD
      if (up->ufo & UFO_RCVER)
        continue;
#endif

      if (can_override(up))
      {
        benz.recver = userno;
        bmw_send(up, &benz);
      }
    }
  } while (++locus < tag);

  return XO_FOOT;
}

: bmw.c:bmw_cb[]

+ 'B', bmw_broadcast,

  'h', bmw_help

--
  Origin:  Maple-itoc˙動力核心  processor.tfcis.org 
  Modify: 2004/03/04 Thu 12:50:44
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻