// 原本發在雄中 SYSOP 板的轉到這邊予大家參考
/* 紅色 變更 / 黃色 新增 / 綠色 刪除 / 天藍色 選擇 / 藍色 注意 */
// src/maple/board.c
int brc_size, brc_changed = 0;
int brc_list[BRC_MAXNUM], brc_num;
int favor = 0;
char brc_buf[BRC_MAXSIZE];
char brc_name[BRC_STRLEN];
/*
woju
Ref: bbs.c: brdperm(char* brdname, char* userid)
*/
/* 新增此函式 */
/* ATS 1.20 */
int is_favor(char *cboard) {
char fpath[80];
setuserfile(fpath, "favor_boards");
return belong(fpath, cboard);
}
/* 到這裡 */
/* 請照著下面修改 或依貴站狀況變更之 */
int Ben_Perm(boardheader *bptr) {
register int level, fg = 0;
register char *ptr;
char buf[64], manager[IDLEN + 1];
level = bptr->level;
if((level & PERM_POSTMASK) || HAS_PERM(level)) fg = 1;
else {
ptr = bptr->BM;
if(is_BM(ptr)) fg = 1;
else if((level & 0xffff) != PERM_SYSOP) fg = 0; /* 祕密看板:核對首席 */
/* 板主的好友名單 */
else {
strncpy(manager, ptr, IDLEN + 1);
if(ptr = strchr(manager, '/')) ptr[0] = '\0';
sethomefile(buf, manager, fn_overrides);
fg = belong(buf, cuser.userid);
}
}
if(!fg) return 0;
else if(!favor) return 1;
else return is_favor(bptr->brdname);
}
/* 到這裡 */
static void load_boards() {
...
}
char *choosebrdhelp[] = {
...
"(y) 列出/不列出所有看板", /* 中文敘述請依需求變更之 */
"(f) 將看板加入 我的最愛 (一般看板列表)",
"(u) 將看板移出 我的最愛 (我的最愛列表)",
"(v/V) 通通看完/全部未讀",
"(S) 按照字母/分類排序",
"(/) 搜尋看板",
NULL };
static void choose_board(int newflag) {
...
case 'h':
show_help(choosebrdhelp);
show_brdlist(head, 1, newflag);
break;
/* 新增本功能鍵 本段未做最佳化處理 可自行依需要更改其效能 */
/* Dopin : favor list maintain */
case 'u':
case 'f':
{
char ask[2];
FILE *fp;
if(!HAS_PERM(PERM_BASIC)) break;
ptr = &nbrd[num];
setuserfile(genbuf, "favor_boards");
*ask = 1;
if(ch == 'f') {
if(favor) break;
if(belong(genbuf, ptr->name)) outmsg("我的最愛列表中已存在此看板...");
else {
getdata(b_lines, 0, "確定將此看板加入 我的最愛 y/N ? ", ask, 2,
LCECHO, 0);
if(*ask == 'y') {
fp = fopen(genbuf, "a+");
fprintf(fp, "%s\n", ptr->name);
fclose(fp);
sprintf(genbuf, "已成功\加入 %s 看板", ptr->name);
outmsg(genbuf);
}
}
}
else {
if(!favor) break;
if(!belong(genbuf, ptr->name)) outmsg("我的最愛看板列表中無此看板");
else {
getdata(b_lines, 0, "確定從看板我的最愛中移除 y/N ? ", ask, 2,
LCECHO, 0);
if(*ask == 'y') {
if(remove_file_line(genbuf, ptr->name, 'B'))
outmsg("看板移除失敗 或不存在於檔案設定中");
else {
sprintf(genbuf, "看板 %s 移除成功\", ptr->name);
outmsg(genbuf);
*ask = 1;
}
}
}
}
if(*ask == 'y' || *ask == 1) {
outs(" 鍵入任意鍵繼續 ...");
igetch();
}
if(favor && *ask == 1) load_boards();
show_brdlist(head, 1, newflag, num);
break;
}
/* 到這裡 */
case Ctrl('A'):
Announce();
...
}
// src/maple/menu.c
int refscreen = NA;
extern char *boardprefix;
extern int favor;
extern void load_boards();
/* ----------------------------------------------------- */
/* main menu */
/* ----------------------------------------------------- */
/* 新增此函式 */
/* ATS 1.20 */
static int Favor() {
favor = 1;
load_boards();
Boards();
favor = 0;
load_boards();
return 0;
}
/* 到這裡 */
static int admin() {
...
}
struct commands cmdlist[] = {
...
Announce, 0, "AAnnounce 【 精華公佈欄 】",
Boards, 0, "BBoards 【 佈告討論區 】",
Class, 0, "CClass 【 分組討論區 】",
Favor, PERM_BASIC, "FFavor 【 我的最愛 】",
Mail, PERM_BASIC, "MMail 【 私人信件區 】",
Talk, 0, "TTalk 【 休閒聊天區 】",
...
}
// 如有需要 也可將 Favor() 加到 classlist[] 當做分類看板選擇的一部份 不過函
// 式的原型就要寫前面點較好 ... 用法就是在看板列表用 'f' 加入 我的最愛列表
// 中 用 'u' 移出 此功能 porting 自 ATSVersion (反正一家親 :p)
[示範站台]
telnet://ftp.ats.idv.tw/ (ID: test PASS: 12345)
[原始檔案 for FreeBSD (RFC 822/2045/2047 / ForceBoard / Favor Board OK)]
ftp://ftp.ats.idv.tw/pub/SOB/maple_favor_ok.tgz
<可抓來將原先的釋出覆蓋之 ftp://ftp.ats.idv.tw/pub/SOB/sob_rfc2047.tar.gz>
--
Origin: Atlantis DN: bbs.ats.idv.tw IP : 203.73.231.195 ST: atlantis
討論串 (同標題文章)