荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: jjk (pq), 信区: InstallBBS
标 题: [转载] Re: 请教定制讨论区的制作(转寄)
发信站: 荔园晨风BBS站 (Thu Nov 29 11:27:02 2001), 转信
【 以下文字转载自 jjk 的信箱 】
【 原文由 jjk.bbs@bbs.pku.edu.cn 所发表 】
发信人: georgehill (Richard Qiu), 信区: BBSDev
标 题: Re: 请教定制讨论区的制作
发信站: 北大未名站 (2001年11月28日22:32:47 星期三), 站内信件
发信人: deardragon (老农), 信区: BBSdev
标 题: Re: 老农能不能把个人收藏夹的功能的具体实现说说
发信站: 快意灌水站 (2000年11月13日20:22:11 星期一), 站内信件
在 boards.c 中,
加 #define GOOD_BRC_NUM 20 // 最多有 20 个个人定制版面
struct goodboard {
char ID[GOOD_BRC_NUM][BRC_STRLEN];
int num;
} GoodBrd;
添加函数
void GoodBrds() // 菜单的调用函数
{
if(!strcmp(currentuser.userid,"guest")) return;
GoodBrd.num = 9999;
boardprefix = NULL;
choose_board(1);
}
int inGoodBrds(char *bname) // 判断版面是否是订阅版面
{
int i;
for ( i = 0; i < GoodBrd.num && i< GOOD_BRC_NUM; i ++ )
if ( !strcmp(bname, GoodBrd.ID[i])) return i+1;
return 0;
}
void load_GoodBrd() //从文件中获取订阅版面,填充数据结构 GoodBrd
{
int i;
char fname[STRLEN];
FILE *fp;
GoodBrd.num = 0;
setuserfile(fname,".goodbrd");
if( ( fp = fopen(fname,"r")) ) {
for ( i = 0; i< GOOD_BRC_NUM ; i++)
if(fscanf(fp, "%s\n", GoodBrd.ID[i]) != EOF){
if( getbnum(GoodBrd.ID[i]) )GoodBrd.num ++;
} else break;
fclose(fp);
}
if (GoodBrd.num == 0) {
GoodBrd.num ++;
if(getbcache(DEFAULTBOARD))strcpy(GoodBrd.ID[0],DEFAULTBOARD);
else strcpy(GoodBrd.ID[0],currboard);
}
}
void save_GoodBrd() // 保存用户订阅的版面
{
int i;
FILE *fp;
char fname[STRLEN];
if( GoodBrd.num <= 0 ) {
GoodBrd.num = 1;
if(getbcache(DEFAULTBOARD))strcpy(GoodBrd.ID[0],DEFAULTBOARD);
else strcpy(GoodBrd.ID[0],currboard);
}
setuserfile(fname,".goodbrd");
if( (fp = fopen(fname,"wb+")) != NULL) {
for (i=0; i< GoodBrd.num; i++)
fprintf(fp, "%s\n", GoodBrd.ID[i]);
fclose(fp);
}
}
需要修改 load_boards() 函数
int
load_boards()
{
struct shortfile *bptr;
struct newpostdata *ptr;
int n, addto = 0, goodbrd = 0;
resolve_boards();
if (zapbuf == NULL) {
load_zapbuf();
}
brdnum = 0;
if( GoodBrd.num == 9999 ) { // 强制 load 订阅版面
load_GoodBrd();
goodbrd = 1; // 表示处于阅读定制版面状态
}
for (n = 0; n < numboards; n++) {
bptr = &bcache[n];
if(!(bptr->filename[0]))continue; /* 隐藏被删除的版面 */
if ( goodbrd == 0){ // 如果不是阅读定制版面,则 ...
if (!(bptr->level & PERM_POSTMASK) && !HAS_PERM(bptr->level)
&& !(bptr->level & PERM_NOZAP)) continue;
if (boardprefix != NULL &&
strchr(boardprefix, bptr->title[0])==NULL&&boardprefix[0] != '*')
continue;
if (boardprefix != NULL && boardprefix[0] == '*') {
if (!strstr(bptr->title, "●") && !strstr(bptr->title, "⊙")
&& bptr--title[0] != '*') continue;
}
if (boardprefix == NULL && bptr->title[0] == '*') continue;
addto = yank_flag || zapbuf[n] != 0 || (bptr->level & PERM_NOZAP);
} else addto = inGoodBrds(bptr->filename); //否则判断是否是订阅的版面
if ( addto ) { // addto 标志该版面应该可以阅读
ptr = &nbrd[brdnum++];
ptr->name = bptr->filename;
ptr->title = bptr->title;
ptr->BM = bptr->BM;
ptr->flag = bptr->flag | ((bptr->level & PERM_NOZAP) ? NOZAP_FLAG :
0);
ptr->pos = n;
ptr->total = -1;
ptr->zap = (zapbuf[n] == 0);
if (bptr->level & PERM_POSTMASK)
ptr->status = 'p';
else if (bptr->level & PERM_NOZAP)
ptr->status = 'z';
else if (ptr->flag & NOREPLY_FLAG)
ptr->status = 'x';
else if ((bptr->level & ~PERM_POSTMASK) != 0)
ptr->status = 'r';
else
ptr->status = ' ';
}
}
if (brdnum == 0 && !yank_flag && boardprefix == NULL) {
if(goodbrd) { // 如果处于定制版面中,但没有任何版面的话,则刷新
GoodBrd.num = 0;
save_GoodBrd();
GoodBrd.num = 9999;
}
brdnum = -1;
yank_flag = 1;
return -1;
}
return 0;
}
在 choose_board(newflag) 函数中添加 a 和 d 模块
case 'a':
if( GoodBrd.num >= GOOD_BRC_NUM) {
presskeyfor("个人热门版数已经达上限(20)",t_lines - 1);
} else if ( GoodBrd.num ) {
int pos;
char bname[STRLEN];
struct boardheader fh;
if(gettheboardname(1,"输入讨论区名 (按空白键自动搜寻): ",
&pos, &fh, bname)) {
if( !inGoodBrds(bname) ) {
strcpy(GoodBrd.ID[GoodBrd.num ++],bname);
save_GoodBrd();
GoodBrd.num = 9999;
brdnum = -1;
break;
}
}
page = -1;
}
break;
case 'd':
if ( GoodBrd.num ){
int i, pos;
char ans[5];
sprintf(genbuf,"要把 %s 从收藏夹中去掉?[Y/n]",nbrd[num].name);
getdata(t_lines-1,0,genbuf,ans, 2,DOECHO, YEA);
if(ans[0]=='n'||ans[0]=='N'){
page = -1;
break;
}
pos = inGoodBrds(nbrd[num].name);
for(i = pos-1; i< GoodBrd.num-1; i++)
strcpy(GoodBrd.ID[i],GoodBrd.ID[i+1]);
GoodBrd.num --;
save_GoodBrd();
GoodBrd.num = 9999;
brdnum = -1;
}
break;
相关变动:
在 EGroup(...) 等函数中加入 GoodBrd.num = 0; ,可以用 GoodBrd 作关键字
在 boards.c 文件中搜索。
--
※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.39.3.50]
--
※ 转寄:·北大未名站 bbs.pku.edu.cn·[FROM: 210.39.3.50]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店