作者dust.bbs@bbs.tcfsh.tc.edu.tw (灰塵 (......)) 看板: itoc
標題[修正] board.c xover.c 閱讀看板自動跳去非置底文
時間龍夢紀元 (2008/06/24 Tue 19:20:10)
讓游標自動跳去最後一篇非置底文,而不是最後一篇
缺點
1.增加I/O
2.說不定會有人沒看到新的置底文
: board.c
-#ifdef AUTO_JUMPPOST
xz[XZ_POST - XO_ZONE].xo = xo = xo_get_post(fpath, brd);
-#else
- xz[XZ_POST - XO_ZONE].xo = xo = xo_get(fpath);
-#endif
: xover.c 從 #ifdef AUTO_JUMPPOST 到 #endif 這段砍掉,加上這段
XO *
xo_get_post(path, brd) /* itoc.010910: 參考 xover.c xo_get(),為 XoPost
量
身
打造 */
char *path;
BRD *brd;
{
XO *xo;
#ifdef AUTO_JUMPPOST
time_t chrono;
int fd;
int pos, locus, mid; /* locus:左指標 mid:中指標 pos:右指標 */
for (xo = xo_root; xo; xo = xo->nxt)
{
if (!strcmp(xo->dir, path))
return xo;
}
xo = xo_new(path);
xo->nxt = xo_root;
xo_root = xo;
xo->xyz = NULL;
/* 尚未更新 brd->blast 或 最後一篇已讀 或 只有一篇,則游標直接放最後 */
if (brd->btime < 0 || !brh_unread(brd->blast) ||
(pos = rec_num(path, sizeof(HDR))) <= 1 || (fd = open(path, O_RDONLY)) <
0)
{
xo->pos = XO_TAIL; /* 游標放在最後面 */
return xo;
}
/* 找第一篇未讀 binary search */
pos--;
locus = 0;
while (1)
{
if (pos <= locus + 1)
break;
mid = locus + ((pos - locus) >> 1);
lseek(fd, (off_t) (sizeof(HDR) * mid), SEEK_SET);
if (read(fd, &chrono, sizeof(time_t)) == sizeof(time_t))
{
if (brh_unread(chrono))
pos = mid;
else
locus = mid;
}
else
{
break;
}
}
/* 特例: 如果右指標停留在 1,有二種可能,一是恰讀到第二篇,另一為連第一篇都
沒讀 */
if (pos == 1)
{
/* 檢查第一篇是否已讀 */
lseek(fd, (off_t) 0, SEEK_SET);
if (read(fd, &chrono, sizeof(time_t)) == sizeof(time_t))
{
if (brh_unread(chrono)) /* 若連第一篇也未讀,pos 調回去第一篇 */
pos = 0;
}
}
close(fd);
xo->pos = pos; /* 第一次進入時,將游標放在第一篇未讀 */
#else
int i, fd;
HDR hdr;
for (xo = xo_root; xo; xo = xo->nxt)
{
if (!strcmp(xo->dir, path))
return xo;
}
xo = xo_new(path);
xo->nxt = xo_root;
xo_root = xo;
xo->xyz = NULL;
xo->pos = XO_TAIL;
if((fd = open(path, O_RDONLY))>=0)
{
for(i=0;read(fd, &hdr, sizeof(HDR))>0;i++)
{
if(!(hdr.xmode & POST_BOTTOM))
{
xo->pos = i;
}
}
}
close(fd);
#endif
return xo;
}
--
◤ �c▄�c ��﹍�� ◥
/�哈� \﹨ ◢�� ��◣ 少女呼風中... ◣東方project系列
�y ● ● \| ▌● ●��▏  ̄ ̄ ̄ ̄ ̄ ̄ ̄
��●\�e�e�e/●�� �芍��e▄�e▍▂�c▃▃▃▃▃▃▃▃▃ 持續推廣ing
●◥<�i"�i) ◤● ★<�i▄�i ̄▇�h▃▁ █◤
◣ /_:★\ �炎���▅�� ▇▆▅▆▇ψ涼宮 域 gbwind ◢
--
◢◣◢◤ # Origin # 台中一中 龍夢紀元 bbs.tcfsh.tc.edu.tw
◥◣█◥◣ # Author # dust
◢◤◥◤ # From # proxy2.tcfsh.tc.edu.tw