作者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