SetupBBS 板


LINE

作者 Dopin (SOB/ATS gcc4ok ?) 看板 InstallBBS 标题 建议更新 板主审理外转文章 (maple 2.3X 家族) 时间 Mon Dec 7 21:54:40 2009 ─────────────────────────────────────── // 许多站有很多全国转信板 但不是板主阙如 或是连线砍信不同步 或根本不收砍信 // 讯息 几个大站也有些 被遗忘的看板 不时有怪信件转出 这个 patch 建议是给所 // 有架构系统於 maple 2.36 家族 含 Maple 2.36/Maple 2.39/SOB(2003年版以前) // /PTT(非 Current)/WD 等 没做过类似 patch 的站台使用的 // 原理很简单 就是发文不直接 call outgo_post 而是等板主去使用热键审核确定要 // 不要 转出去/不转出去 虽然 maple 2.3X 本身就有 (S)ave/(L)ocal 等两种存档 // 模式 但绝大多数人不会使用 L 甚至广告商他恨不得东西快快转出去 // 本文原文 2003/07/12 发布於 ATSVersion @ bbs.bsd.com.tw 经修改後适用於所 // 有 maple 2.3X 家族 不过仍可能有些小地方不适用 有劳自行比较变更 尤其是有 // 做过置底更动的版本 请注意 .DIR 的一致性处理 // 在此再次特别感谢 [email protected] / [email protected] // 两位提供宝贵的意见与实作上的手法 // 黄色 新增 / 红色 变更 / 绿色 删除 / 天蓝 请依实际状况修改 [基本设定与资料结构的变更] // src/maple/config.h (或是 src/include/config.h) 找任何你想定义的地方新增 #undef HAVE_SUICIDE /* 提供使用者自杀功能 */ #undef OUTGO_SET_DEFAULT /* 定义发文後预设做转出处理 反定义则需 */ /* 经板主审核後方转出 预设反定义 */ // src/maple/struct.h (或 src/include/strutc.h 或 pttstruct.h) struct fileheader { char filename[FNLEN-2]; /* M.9876543210.A */ // 挪壹字元放下面变数 char outgo; /* 外转设定 */ char goodpost; /* Dopin: 切格用於提报功能 */ char savemode; /* file save mode */ char owner[IDLEN + 2]; /* uid[.] */ char date[6]; /* [02/02] or space(5) */ char title[TTLEN + 1]; uschar filemode; /* must be last field @ boards.c */ }; typedef struct fileheader fileheader; struct boardheader { char brdname[IDLEN + 1]; /* bid */ char title[BTLEN + 1]; char BM[IDLEN * 3 + 3]; /* BMs' uid, token '/' */ char yankflags[11]; /* Dopin: for extra_mode */ time_t bupdate; /* note update time */ char pad2[2]; // 同理 挪壹字元给下面的 outgo_mode 使用 结构长度不变 char outgo_mode; /* tag_outgo */ uschar bvote; /* Vote flags */ time_t vtime; /* Vote close time */ usint level; }; typedef struct boardheader boardheader; // src/include/modes.h (或 src/include/modes.h) #define RS_CURRENT 0x10 /* match current read article */ #define RS_THREAD 0x20 /* search the first article */ #define RS_AUTHOR 0x40 /* search author's article */ #define RS_OUTGO 0x400 /* search select outgo article */ // 数值设大一点 以免跟上面或下面的一堆数值冲到 [新的外转文章处理] // src/maple/bbs.c #include "bbs.h" #include "put_good.h" extern int mail_reply(); extern int cmpfname(char *, fileheader *); extern char currdirect[MAXPATHLEN]; ... int local_article; void outgo_post(fileheader *, char *, int); #define UPDATE_USEREC (currmode |= MODE_DIRTY) static int g_board_names(fhdr) void set_board() { ... } /* 新增此函式 */ #ifndef OUTGO_SET_DEFAULT static int tag_outgo(int ent, fileheader *fptr, char *direct) { char ans[2]; fileheader fh; if(!(currmode & MODE_BOARD)) return DONOTHING; /* 未开启功能前的 / 已确定转出的 不可设定 */ if(fptr->outgo && fptr->outgo != 'Y') { char buf[96]; sprintf(buf, "将 <%-.40s> 设为 (Y)转出 (N)不转出 [Q] : ", fptr->title); getdata(b_lines, 0, buf, ans, 2, LCECHO, 0); if(*ans == 'y' || *ans == 'n') { int fno; if(currmode & MODE_SELECT) { setbfile(buf, currboard, ".DIR"); if((fno = search_record(buf, &fh, sizeof(fh), cmpfname, fptr->filename)) <= 0) { pressanykey("档案读取错误 变更中止"); goto TAG_OUTGO_END; } } else { strcpy(buf, direct); fno = ent; } fptr->outgo = toupper(*ans); if(get_record(buf, &fh, sizeof(fh), fno) != -1) { if(!strcmp(fh.filename, fptr->filename)) { substitute_record(buf, fptr, sizeof(*fptr), fno); if(*ans == 'y') outgo_post(&fh, currboard, 'Y'); } else pressanykey("档案资料验证有误 请重新操作"); } } } else pressanykey("此档案不允许\变更设定"); TAG_OUTGO_END: return NEWDIRECT; } #endif /* 到这里 */ static void readtitle() { ... } /* 以下函式请照着变更处修改 */ void outgo_post(fileheader *fh, char *board, int mode) { char userid[IDLEN+1], username[24]; FILE *fp; boardheader *bp = getbcache(board); if(!bp #ifndef OUTGO_SET_DEFAULT || bp->outgo_mode == 'N' #endif ) return; #ifndef OUTGO_SET_DEFAULT if(mode == 'S') { if(bp->outgo_mode == 'S') { fh->outgo = 'S'; return; } } #endif fh->outgo = 'Y'; #ifndef OUTGO_SET_DEFAULT if(getuser(fh->owner) > 0) { strcpy(userid, xuser.userid); strcpy(username, xuser.username); } else return; #else strcpy(userid, cuser.userid); strcpy(username, cuser.username); #endif if(fp = fopen("innd/out.bntp", "a+")) { fprintf(fp, "%s\t%s\t%s\t%s\t%s\n", board, fh->filename, userid, username, fh->title); fclose(fp); } } /* 到这里 */ int do_post() { ... setbdir(buf, currboard); if(aborted != 1) outgo_post(&postfile, currboard, 'S'); if(append_record(buf, &postfile, sizeof(postfile)) != -1) { if(currmode & MODE_SELECT) append_record(currdirect,&postfile,sizeof(postfile)); if(aborted != 1) outgo_post(&postfile, currboard); brc_addlist(postfile.filename); outs("顺利贴出布告,"); ... } static int cross_post(int ent, fileheader *fhdr, char *direct) { ... setbdir(fname, xboard); if(!xfile.filemode) outgo_post(&xfile, xboard, 'S'); append_record(fname, (char *) &xfile, sizeof(xfile)); if(!xfile.filemode) outgo_post(&xfile, xboard); cuser.numposts++; ... } // src/maple/mail.c extern void outgo_post(fileheader *, char *, int); extern int del_range(); extern int cmpfmode(); static int mail_cross_post(int ent, fileheader *fhdr, char *direct) { ... setbdir(fname, xboard); if(!xfile.filemode && !author) outgo_post(&xfile, xboard, 'S'); append_record(fname, (char *) &xfile, sizeof(xfile)); if(!xfile.filemode && !author) outgo_post(&xfile, xboard); if(getbh(&bh, currboard)) if(!(bh.yankflags[1])) cuser.numposts++; ... } // src/maple/bbs.c /* 如果有类似在板上秀档名的设定 也可照以下修改 (函式名各家不同) */ static int b_showfname(int ent, fileheader *fhdr, char *direct) { ... sprintf(buf, "boards/%s/%s", currboard, fhdr->filename); pressanykey("%s <%s outgo>", buf, fhdr->outgo == 'S' ? "Select" : fhdr->outgo == 'N' ? "Do not" : "Can/Already"); return FULLUPDATE; } /* 到这里 */ struct one_key read_comms[] = { ... #ifndef OUTGO_SET_DEFAULT '#', tag_outgo, // 使用那一个热键 请依实际需要修改 #endif '\0', NULL }; [选取所有需要审核的信件] // src/maple/read.c /* ----------------------------------------------------- */ /* cursor & reading record position control */ /* ----------------------------------------------------- */ int cmpfname(char *filename, fileheader *fhdr) { return (!strcmp(filename, fhdr->filename)); } static int select_read(keeploc *locmem, int sr_mode) { register char *tag, *query; fileheader fh; char fpath[80], genbuf[MAXPATHLEN], *outgo = "S"; ... else if (sr_mode == RS_CURRENT) query = "."; else if (sr_mode == RS_THREAD) query = "m"; #ifndef OUTGO_SET_DEFAULT else if(sr_mode == RS_OUTGO) query = outgo; #endif else { ... case RS_CURRENT: while(read(fd,&fh,size) == size){ tag = fh.owner; if(!strchr(tag, '.')) write(fr,&fh,size); } break; #ifndef OUTGO_SET_DEFAULT case RS_OUTGO: while(read(fd, &fh, size) == size) if(fh.outgo == 'S') write(fr, &fh, size); break; #endif case RS_THREAD: ... } static int i_read_key(rcmdlist, locmem, ch) ... case 'a': case 'A': if(select_read(locmem,RS_AUTHOR)) return NEWDIRECT; else return READ_REDRAW; #ifndef OUTGO_SET_DEFAULT case '^': // 请依实际状况修改适当热键 if(!(currmode & MODE_BOARD)) return DONOTHING; if(select_read(locmem, RS_OUTGO)) return NEWDIRECT; else { pressanykey("未找到任何需要审核是否 外转 之文章"); return READ_REDRAW; } #endif [显示看板外转方式与系统维护] // src/maple/board.c static void show_brdlist(head, clsflag, newflag, num) { ,,, else if(!newflag) { // 各版本显示格式不同 本段请依实际状况修改 boardheader *bp = getbcache(ptr->name); if(!bp) continue; if(ptr->total == -1) check_newpost(ptr); prints("%5d%c%s", head, #ifndef OUTGO_SET_DEFAULT bp->outgo_mode ? bp->outgo_mode : #endif ptr->zap ? '-' : ' ', ptr->unread ? "" : ""); } else if (ptr->zap) ... } // src/maple/admin.c /* 於新增看板的函式 的适当位置中 新增 */ int m_newbrd() { ... #ifdef OUTGO_SET_DEFAULT newboard.outgo_mode = 'A'; #else getdata(7, 0, "转信原则 (A)全部转出 (N)不转出 (S)板主审核 [S] ", ans, 2, LCECHO, 0); if(*ans == 'a' || *ans == 'n' || *ans == 's') newboard.outgo_mode = toupper(*ans); else newboard.outgo_mode = 'S'; // 都没设全部预设板主设定 以免转出 #endif newboard.level = 0; getdata(8, 0, "设定读写权限(Y/N)?[N] ", ans, 4, LCECHO, 0); if (*ans == 'y') ... } /* 於新增看板的函式 的适当位置中 新增 */ int m_board() { ... #ifdef OUTGO_SET_DEFAULT newbh.outgo_mode = 'A'; #else getdata(13, 0, "转信原则 (A)全部转出 (N)不转出 (S)板主审核 [Q] ", genbuf, 2, LCECHO, 0); if(*genbuf == 'a' || *genbuf == 'n' || *genbuf == 's') newbh.outgo_mode = toupper(*genbuf); if(bh.outgo_mode == 'A' || bh.outgo_mode == 'N' || bh.outgo_mode == 'S') ; else newbh.outgo_mode = 'S'; #endif getdata(14, 0, "是否更改存取权限(Y/N)?[N] ", genbuf, 2, LCECHO, 0); if(*genbuf == 'y') { ... } -- Origin: Atlantis DN: bbs.bsd.com.tw IP : 203.70.65.27 ST: atlantis --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.70.65.27







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP