From ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69 Mon Sep 17 00:00:00 2001 From: piaip Date: Wed, 16 Sep 2009 18:20:40 +0000 Subject: * refine uflags * remove and mark for more deprecated uflags * finetune pwcu exit save for uflags git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4846 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/passwd.c | 94 ++++++++++++++++++++++++++++------------------------------ mbbsd/user.c | 1 - 2 files changed, 46 insertions(+), 49 deletions(-) (limited to 'mbbsd') diff --git a/mbbsd/passwd.c b/mbbsd/passwd.c index 553194b1..6a6ed455 100644 --- a/mbbsd/passwd.c +++ b/mbbsd/passwd.c @@ -376,63 +376,58 @@ pwcuSetChessEloRating(uint16_t elo_rating) } int -pwcuSaveUserFlags() +pwcuToggleUserFlag (unsigned int mask) { PWCU_START(); - u.uflag = cuser.uflag; - u.uflag2 = cuser.uflag2; + u.uflag ^= mask; + _SETBY_BIT(cuser.uflag, mask, + u.uflag & mask); PWCU_END(); } -// non-important variables (only save on exit) - -int -pwcuSetSignature(unsigned char newsig) -{ - // XXX you MUST save this variable in pwcuExitSave(); - cuser.signature = newsig; - return 0; -} - int -pwcuSetWaterballMode(unsigned int bm) +pwcuToggleUserFlag2 (unsigned int mask) { - // XXX you MUST save this variable in pwcuExitSave(); - bm &= WATER_MASK; - cuser.uflag2 &= ~WATER_MASK; - cuser.uflag2 |= bm; - return 0; + PWCU_START(); + u.uflag2 ^= mask; + _SETBY_BIT(cuser.uflag2, mask, + u.uflag2 & mask); + PWCU_END(); } int pwcuToggleSortBoard () { - // XXX you MUST save this variable in pwcuExitSave(); - cuser.uflag ^= BRDSORT_FLAG; - return 0; + // XXX if this is executed too often, + // put it into 'non-important variable list'. + return pwcuToggleUserFlag(BRDSORT_FLAG); } int pwcuToggleFriendList() { - // XXX you MUST save this variable in pwcuExitSave(); - cuser.uflag ^= FRIEND_FLAG; - return 0; + // XXX if this is executed too often, + // put it into 'non-important variable list'. + return pwcuToggleUserFlag(FRIEND_FLAG); } +// non-important variables (only save on exit) + int -pwcuToggleUserFlag (unsigned int mask) +pwcuSetWaterballMode(unsigned int bm) { // XXX you MUST save this variable in pwcuExitSave(); - cuser.uflag ^= mask; + bm &= WATER_MASK; + cuser.uflag2 &= ~WATER_MASK; + cuser.uflag2 |= bm; return 0; } -int -pwcuToggleUserFlag2 (unsigned int mask) +int +pwcuSetSignature(unsigned char newsig) { // XXX you MUST save this variable in pwcuExitSave(); - cuser.uflag2 ^= mask; + cuser.signature = newsig; return 0; } @@ -505,7 +500,7 @@ pwcuExitSave () { int dirty = 0; uint32_t uflag, uflag2, withme; - uint8_t invisible, pager; + uint8_t invisible, pager, signature; int32_t money; PWCU_START(); @@ -515,27 +510,28 @@ pwcuExitSave () // since every deumoney() should write difference. // save variables for dirty check - uflag = u.uflag; - uflag2= u.uflag2; - withme= u.withme; - pager = u.pager; - invisible = u.invisible; - money = u.money; + uflag = u.uflag; + uflag2 = u.uflag2; - // uflag and uflag2: always trust cuser except REJ_OUTTAMAIL - _SETBY_BIT(cuser.uflag2, REJ_OUTTAMAIL, (u.uflag2 & REJ_OUTTAMAIL)); - u.uflag = cuser.uflag; - u.uflag2= cuser.uflag2; + withme = u.withme; + pager = u.pager; + invisible = u.invisible; - _DISABLE_BIT(u.uflag, (PAGER_FLAG | CLOAK_FLAG)); - if (currutmp->pager != PAGER_ON) - _ENABLE_BIT(u.uflag, PAGER_FLAG); - if (currutmp->invisible) - _ENABLE_BIT(u.uflag, CLOAK_FLAG); + money = u.money; + signature = u.signature; + // water is already saved in uflag2 - u.invisible = currutmp->invisible; + // XXX TODO move water to cuser.watermode ? + // configure uflag2 by cuser + _DISABLE_BIT(u.uflag2, WATER_MASK); + _ENABLE_BIT (u.uflag2, (cuser.uflag2 & WATER_MASK)); + + // configure new utmp values u.withme = currutmp->withme; u.pager = currutmp->pager; + u.invisible = currutmp->invisible; + + u.signature = cuser.signature; u.money = moneyof(usernum); // XXX 當初設計的人把 mind 設計成非 NULL terminated 的... @@ -553,6 +549,7 @@ pwcuExitSave () withme != u.withme|| pager != u.pager || money != u.money || + signature != u.signature|| invisible != u.invisible)) { dirty = 1; @@ -616,8 +613,9 @@ int pwcuInitAdminPerm () void pwcuInitGuestPerm () { cuser.userlevel = 0; - cuser.uflag = PAGER_FLAG | BRDSORT_FLAG | MOVIE_FLAG; + cuser.uflag = BRDSORT_FLAG; cuser.uflag2= 0; // we don't need FAVNEW_FLAG or anything else. + cuser.pager = PAGER_OFF; # ifdef GUEST_DEFAULT_DBCS_NOINTRESC _ENABLE_BIT(cuser.uflag, DBCS_NOINTRESC); # endif diff --git a/mbbsd/user.c b/mbbsd/user.c index f294247b..67f5c163 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -542,7 +542,6 @@ void Customize(void) if(dirty) { - pwcuSaveUserFlags(); outs("設定已儲存。\n"); } else { outs("結束設定。\n"); -- cgit v1.2.3