回精華區
作者LHD.bbs@YoMin.twbbs.org (我累了) 看板: plan
標題[功能] 整行光棒-board.c (易於整合favor.c版)
時間遊民之家 (Mon, 14 Jul 2003 17:54:20 +0800 (CST)) Updated: 2005/10/07
: board.c:class_item_bar() 及 class_bar() 加在 class_item() 之後

#ifdef HAVE_LIGHTBAR
#ifdef MY_FAVORITE
void
#else
static void
#endif
class_item_bar(brd, bno, chn, brdpost)
  BRD *brd;
  int bno, chn, brdpost;
{
  int num, fd, fsize;
  char *str1, *str2, *str3, token, buf[16];
  char folder[64];
  struct stat st;

  /* itoc.020123: 不管有無 UFO_BRDPOST,一概更新,以免未讀燈不會亮 */
  brd_fpath(folder, brd->brdname, fn_dir);
  if ((fd = open(folder, O_RDONLY)) >= 0 && !fstat(fd, &st))
  {
    if (st.st_mtime > brd->btime)
    {
      brd->btime = time(0) + 0; /* 45 秒鐘內不重複檢查 */
      if ((fsize = st.st_size) >= sizeof(HDR))
      {
#ifdef ENHANCED_BSHM_UPDATE
        HDR hdr;

        brd->bpost = fsize / sizeof(HDR);
        /* itoc.020829: 找最後一篇未被刪除/加密的 HDR */
        for (fsize -= sizeof(HDR); fsize >= sizeof(HDR); fsize -= sizeof(HDR))
        {
          lseek(fd, fsize, SEEK_SET);
          read(fd, &hdr, sizeof(HDR));
          if (!(hdr.xmode & POST_RESTRICT))
            break;
        }
        brd->blast = hdr.chrono;
#else
        brd->bpost = fsize / sizeof(HDR);
        lseek(fd, fsize - sizeof(HDR), SEEK_SET);
        read(fd, &brd->blast, sizeof(time_t));
#endif
      }
      else
      {
        brd->blast = brd->bpost = 0;
      }
    }
    close(fd);
  }

  /* 處理 編號/篇數 */
  num = brdpost ? brd->bpost : bno;

  /* 處理 zap/friend/secret 板的符號 */
  if (brd_bits[chn] & BRD_Z_BIT)
    token = TOKEN_ZAP_BRD;
  else if (brd->readlevel == PERM_SYSOP)
    token = TOKEN_SECRET_BRD;
  else if (brd->readlevel == PERM_BOARD)
    token = TOKEN_FRIEND_BRD;
  else
    token = ' ';

  /* 處理 已讀/未讀 */
#ifdef ENHANCED_VISIT
  /* itoc.010407: 改用最後一篇已讀/未讀來判斷 */
  brh_get(brd->bstamp, chn);
  str1 = brh_unread(brd->blast) ? ICON_UNREAD_BRD : ICON_READ_BRD;
#else
  str1 = brd->blast > brd_visit[chn] ? ICON_UNREAD_BRD : ICON_READ_BRD;
#endif

  /* 處理 投票/轉信 */
  if (brd->bvote)
    str2 = (brd->bvote > 0) ? ICON_VOTED_BRD : ICON_GAMBLED_BRD;
  else
    str2 = (brd->battr & BRD_NOTRAN) ? ICON_NOTRAN_BRD : ICON_TRAN_BRD;

  /* 處理 人氣 */
  bno = bshm->mantime[bno];
  if (bno > 99)
    str3 = "\033[1;31m爆\033[m";
  else if (bno > 0)
    sprintf(str3 = buf, "%2d", bno);
  else
    str3 = "  ";

  prints("\033[1;42m%6d%c%s\033[1;42m%-13s\033[1;3%dm%-5s"
    "\033[37m%s %-*.*s %s %-*.*s\033[m",
    num, token, str1, brd->brdname,
    brd->class[3] & 7, brd->class, str2,
    (d_cols >> 1) + 31, (d_cols >> 1) + 30, brd->title, str3,
    d_cols - (d_cols >> 1) + 13, d_cols - (d_cols >> 1) + 13, brd->BM);
}


static int
class_bar(xo, mode)
  XO *xo;
  int mode;
{
  short *chp;
  BRD *brd;
  int chn, cnt, brdpost;

  cnt = xo->pos + 1;
  chp = (short *) xo->xyz + xo->pos;
  chn = *chp;
  brd = bshm->bcache + chn;
  brdpost = class_flag & UFO_BRDPOST;

  if (chn >= 0)         /* 一般看板 */
  {
    if (mode)
      class_item_bar(brd, cnt, chn, brdpost);
    else
      class_item(cnt, chn, brdpost);
  }
  else
  {
    short *chx;
    char *img, *str;

    img = class_img;
    chx = (short *) img + (CH_END - chn);
    str = img + *chx;
    prints("%s%6d%c  %-13.13s\033[33m%5.5s\033[37m%-51s%s",
      mode ? "\033[1;42m" : "",
      cnt, class_bits[-chn] & BRD_Z_BIT ? TOKEN_ZAP_BRD : ' ',
      str, str + BNLEN + 1, str + BNLEN + 1 + BCLEN + 1,
      mode ? "\033[m" : "");
  }

   return XO_NONE;
}
#endif

: board.c:class_cb[]

static KeyFunc class_cb[] =
{
#ifdef  HAVE_LIGHTBAR
  XO_ITEM, class_bar,
#endif
...

--
▃▄▅▆▇▅▄▃▂▁                ◣  ◢      █◣◢█ ●   bbs.cis95.net
▇▅▄▂▁ˍ▃▅▆   居無定所的雲   ◥█◤ ◤◥ █◥◤█ ▲ █▇◣ 遊民之家
飄自 cismpc19.cis.nctu.edu.tw         █   ◣◢ █    █ █ █  █‧twbbs‧org
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻