diff options
-rw-r--r-- | mbbsd/bbs.c | 47 | ||||
-rw-r--r-- | mbbsd/board.c | 179 | ||||
-rw-r--r-- | mbbsd/mail.c | 6 |
3 files changed, 89 insertions, 143 deletions
diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index 0744ad7c..e58e3909 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -3,24 +3,9 @@ #ifdef EDITPOST_SMARTMERGE -#ifdef SMARTMERGE_MD5 - -// To enable SmartMerge/MD5, -// please get MD5 from XySSL or other systems: -// http://xyssl.org/code/source/md5/ -#include "md5.h" -#include "md5.c" - -#define SMHASHLEN (16) - -#else // !SMARTMERGE_MD5, use FNV64 - #include "fnv_hash.h" - #define SMHASHLEN (64/8) -#endif // !SMARTMERGE_MD5 - #endif // EDITPOST_SMARTMERGE #define WHEREAMI_LEVEL 16 @@ -1308,18 +1293,9 @@ hash_partial_file( char *path, size_t sz, unsigned char output[SMHASHLEN] ) size_t n; unsigned char buf[1024]; -#ifdef SMARTMERGE_MD5 - - md5_context ctx; - md5_starts( &ctx ); - -#else // !SMARTMERGE_MD5, use FNV64 - Fnv64_t fnvseed = FNV1_64_INIT; assert(SMHASHLEN == sizeof(fnvseed)); -#endif // SMARTMERGE_MD5 - fd = open(path, O_RDONLY); if (fd < 0) return 1; @@ -1328,13 +1304,7 @@ hash_partial_file( char *path, size_t sz, unsigned char output[SMHASHLEN] ) (n = read(fd, buf, sizeof(buf))) > 0 ) { if (n > sz) n = sz; - -#ifdef SMARTMERGE_MD5 - md5_update( &ctx, buf, (int) n ); -#else // !SMARTMERGE_MD5, use FNV64 fnvseed = fnv_64_buf(buf, (int) n, fnvseed); -#endif //!SMARTMERGE_MD5 - sz -= n; } close(fd); @@ -1342,12 +1312,7 @@ hash_partial_file( char *path, size_t sz, unsigned char output[SMHASHLEN] ) if (sz > 0) // file is different return 2; -#ifdef SMARTMERGE_MD5 - md5_finish( &ctx, output ); -#else // !SMARTMERGE_MD5, use FNV64 memcpy(output, (void*) &fnvseed, sizeof(fnvseed)); -#endif //!SMARTMERGE_MD5 - return HASHPF_RET_OK; } #endif // EDITPOST_SMARTMERGE @@ -3263,16 +3228,6 @@ b_notes_edit(void) } static int -can_vote_edit(void) -{ - if (currmode & MODE_BOARD) { - friend_edit(FRIEND_CANVOTE); - return FULLUPDATE; - } - return 0; -} - -static int bh_title_edit(void) { boardheader_t *bp; @@ -3637,7 +3592,7 @@ const onekey_t read_comms[] = { { 0, NULL }, // 'l' { 1, mark_post }, // 'm' { 0, NULL }, // 'n' - { 0, can_vote_edit }, // 'o' + { 0, b_moved_to_config }, // 'o' { 0, NULL }, // 'p' { 0, NULL }, // 'q' { 1, read_post }, // 'r' diff --git a/mbbsd/board.c b/mbbsd/board.c index 09a4f2a5..74ba0e59 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -178,56 +178,38 @@ HasBoardPerm(boardheader_t *bptr) } // board configuration utilities -static int -b_visible_edit(void) -{ - if (currmode & MODE_BOARD) { - friend_edit(BOARD_VISABLE); - assert(0<=currbid-1 && currbid-1<MAX_BOARD); - hbflreload(currbid); - return FULLUPDATE; - } - return 0; -} - -static int -b_water_edit(void) -{ - if (currmode & MODE_BOARD) { - friend_edit(BOARD_WATER); - return FULLUPDATE; - } - return 0; -} static int b_post_note(void) { char buf[200], yn[3]; - if (currmode & MODE_BOARD) { - setbfile(buf, currboard, FN_POST_NOTE); - if (more(buf, NA) == -1) - more("etc/" FN_POST_NOTE, NA); - getdata(b_lines - 2, 0, "是否要用自訂發文注意事項? [y/N]", - yn, sizeof(yn), LCECHO); - if (yn[0] == 'y') - vedit(buf, NA, NULL); - else - unlink(buf); - - setbfile(buf, currboard, FN_POST_BID); - if (more(buf, NA) == -1) - more("etc/" FN_POST_BID, NA); - getdata(b_lines - 2, 0, "是否要用自訂競標文章注意事項? [y/N]", - yn, sizeof(yn), LCECHO); - if (yn[0] == 'y') - vedit(buf, NA, NULL); - else - unlink(buf); - return FULLUPDATE; - } - return 0; + // if(!(currmode & MODE_BOARD)) return DONOTHING; + stand_title("自訂注意事項"); + + setbfile(buf, currboard, FN_POST_NOTE); + move(b_lines-2, 0); clrtobot(); + + if (more(buf, NA) == -1) + more("etc/" FN_POST_NOTE, NA); + getdata(b_lines - 2, 0, "是否要用自訂發文注意事項? [y/N]", + yn, sizeof(yn), LCECHO); + if (yn[0] == 'y') + vedit(buf, NA, NULL); + else + unlink(buf); + + setbfile(buf, currboard, FN_POST_BID); + if (more(buf, NA) == -1) + more("etc/" FN_POST_BID, NA); + getdata(b_lines - 2, 0, "是否要用自訂競標文章注意事項? [y/N]", + yn, sizeof(yn), LCECHO); + if (yn[0] == 'y') + vedit(buf, NA, NULL); + else + unlink(buf); + + return FULLUPDATE; } static int @@ -237,30 +219,31 @@ b_posttype() int i, aborted; char filepath[PATHLEN], genbuf[60], title[5], posttype_f, posttype[33]=""; - if(!(currmode & MODE_BOARD)) return DONOTHING; + // if(!(currmode & MODE_BOARD)) return DONOTHING; assert(0<=currbid-1 && currbid-1<MAX_BOARD); bp = getbcache(currbid); + stand_title("設定文章類別"); move(2,0); clrtobot(); posttype_f = bp->posttype_f; for( i = 0 ; i < 8 ; ++i ){ - move(2,0); + move(2+i,0); outs("文章種類: "); strlcpy(genbuf, bp->posttype + i * 4, 5); sprintf(title, "%d.", i + 1); - if( !getdata_buf(2, 11, title, genbuf, 5, DOECHO) ) + if( !getdata_buf(2+i, 11, title, genbuf, 5, DOECHO) ) break; sprintf(posttype + i * 4, "%-4.4s", genbuf); if( posttype_f & (1<<i) ){ - if( getdata(2, 20, "設定範本格式?(Y/n)", genbuf, 3, LCECHO) && + if( getdata(2+i, 20, "設定範本格式?(Y/n)", genbuf, 3, LCECHO) && genbuf[0]=='n' ){ posttype_f &= ~(1<<i); continue; } } - else if ( !getdata(2, 20, "設定範本格式?(y/N)", genbuf, 3, LCECHO) || + else if ( !getdata(2+i, 20, "設定範本格式?(y/N)", genbuf, 3, LCECHO) || genbuf[0] != 'y' ) continue; @@ -291,20 +274,24 @@ b_config(void) int touched = 0, finished = 0; bp = getbcache(currbid); int i = 0, attr = 0, ipostres; + char isBM = (currmode & MODE_BOARD) || HasUserPerm(PERM_SYSOP); -#define LNBOARDINFO (18) -#define LNPOSTRES (10) +#define LNBOARDINFO (17) +#define LNPOSTRES (12) #define COLPOSTRES (50) - const int ytitle = b_lines - -#ifndef OLDRECOMMEND - (LNBOARDINFO+1); // new format -#else // OLDRECOMMEND - (LNBOARDINFO); // old (less) + int ytitle = b_lines - LNBOARDINFO; + +#ifdef OLDRECOMMEND + ytitle ++; #endif // OLDRECOMMEND grayout_lines(0, ytitle-1, 0); + // available hotkeys yet: + // a b d j k m p q z + // 2 3 4 5 6 7 9 0 + // better not: l while(!finished) { move(ytitle-1, 0); clrtobot(); @@ -322,7 +309,7 @@ b_config(void) prints(" 中文敘述: %s\n", bp->title); prints(" 板主名單: %s\n", (bp->BM[0] > ' ')? bp->BM : "(無)"); - outs("\n"); + outs(" \n"); // at least one character, for move_ansi. prints( " " ANSI_COLOR(1;36) "h" ANSI_RESET " - 公開狀態(是否隱形): %s " ANSI_RESET "\n", @@ -383,7 +370,7 @@ b_config(void) ); #endif - prints( " " ANSI_COLOR(1;36) "o" ANSI_RESET + prints( " " ANSI_COLOR(1;36) "L" ANSI_RESET " - 若有轉信則發文時預設 %s " ANSI_RESET "\n", (bp->brdattr & BRD_LOCALSAVE) ? "站內存檔(不轉出)" : ANSI_COLOR(1)"站際存檔(轉出)" ); @@ -405,16 +392,9 @@ b_config(void) (bp->brdattr & BRD_RESTRICTEDPOST) ? ANSI_COLOR(1)"只有板友才可發文" : "無特別設定" ); - prints("\n " ANSI_COLOR(1;32) "名單編輯與其它:" ANSI_RESET " " - ANSI_COLOR(1;36) "v" ANSI_RESET ")可見名單 " - ANSI_COLOR(1;36) "w" ANSI_RESET ")水桶名單 " - ANSI_COLOR(1;36) "n" ANSI_RESET ")發文注意事項 " - ANSI_COLOR(1;36) "c" ANSI_RESET ")文章類別 " - "\n"); - ipostres = b_lines - LNPOSTRES; move_ansi(ipostres++, COLPOSTRES-2); - prints("發文限制"); + outs(ANSI_COLOR(1;32) "發文限制" ANSI_RESET); #define POSTRESTRICTION(msg,utag) \ prints(msg, attr ? ANSI_COLOR(1) : "", i, attr ? ANSI_RESET : "") @@ -461,8 +441,24 @@ b_config(void) ); } + // if (isBM) + { + ipostres ++; + move_ansi(ipostres++, COLPOSTRES-2); + outs(ANSI_COLOR(1;32) "名單編輯與其它:" ANSI_RESET); + move_ansi(ipostres++, COLPOSTRES); + outs(ANSI_COLOR(1;36) "v" ANSI_RESET ")可見名單 " + ANSI_COLOR(1;36) "w" ANSI_RESET ")水桶名單 "); + move_ansi(ipostres++, COLPOSTRES); + outs(ANSI_COLOR(1;36) "o" ANSI_RESET ")投票名單 "); + //ANSI_COLOR(1;36) "w" ANSI_RESET ")水桶名單 "); + move_ansi(ipostres++, COLPOSTRES); + outs(ANSI_COLOR(1;36) "c" ANSI_RESET ")文章類別 " + ANSI_COLOR(1;36) "n" ANSI_RESET ")發文注意事項 "); + } + move(b_lines, 0); - if (!((currmode & MODE_BOARD) || HasUserPerm(PERM_SYSOP))) + if (!isBM) { vmsg("您對此板無管理權限"); return FULLUPDATE; @@ -476,7 +472,7 @@ b_config(void) touched = 1; break; #endif - case 'o': + case 'l': bp->brdattr ^= BRD_LOCALSAVE; touched = 1; break; @@ -580,43 +576,34 @@ b_config(void) break; case 'v': - if (currmode & MODE_BOARD) - { - b_visible_edit(); - clear(); - } else { - vmsg("此項設定需要板主權限"); - } + clear(); + friend_edit(BOARD_VISABLE); + assert(0<=currbid-1 && currbid-1<MAX_BOARD); + hbflreload(currbid); + clear(); break; + case 'o': + clear(); + friend_edit(FRIEND_CANVOTE); + clear(); + case 'w': - if (currmode & MODE_BOARD) - { - b_water_edit(); - clear(); - } else { - vmsg("此項設定需要板主權限"); - } + clear(); + friend_edit(BOARD_WATER); + clear(); break; case 'n': - if (currmode & MODE_BOARD) - { - b_post_note(); - clear(); - } else { - vmsg("此項設定需要板主權限"); - } + clear(); + b_post_note(); + clear(); break; case 'c': - if (currmode & MODE_BOARD) - { - b_posttype(); - clear(); - } else { - vmsg("此項設定需要板主權限"); - } + clear(); + b_posttype(); + clear(); break; case 'y': diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 6c5e5efc..a3f00b99 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -1283,6 +1283,10 @@ mail_cross_post(int ent, fileheader_t * fhdr, const char *direct) char genbuf[200]; char genbuf2[4]; +#if 0 + // 除非有人明白為何要先 ChekPostPerm 並修復, + // 否則先 disable 這段 code - 目前常造成 crash。 + // // XXX (will crash sometimes because currborad is not defined yet) // 麻煩 in2 來修復這裡: 確認轉錄為何要先 CheckPostPerm if (!currboard || currboard[0] == 0) @@ -1295,6 +1299,7 @@ mail_cross_post(int ent, fileheader_t * fhdr, const char *direct) vmsg("對不起,您目前無法轉錄文章!"); return FULLUPDATE; } +#endif move(2, 0); clrtoeol(); @@ -1325,7 +1330,6 @@ mail_cross_post(int ent, fileheader_t * fhdr, const char *direct) assert(0<=ent-1 && ent-1<MAX_BOARD); if (!CheckPostRestriction(ent)) { - move(5, 10); // why move (5, 10)? vmsg("你不夠資深喔! (可在看板內按大寫 I 查看限制)"); return FULLUPDATE; } |