diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-09-17 02:20:40 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-09-17 02:20:40 +0800 |
commit | 54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d (patch) | |
tree | 2a7e7c3daa22d72e6c0c787e5feaf907abd28fa0 | |
parent | 1aece1b763f93e284428beaef30f185f25065896 (diff) | |
download | pttbbs-54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d.tar pttbbs-54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d.tar.gz pttbbs-54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d.tar.bz2 pttbbs-54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d.tar.lz pttbbs-54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d.tar.xz pttbbs-54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d.tar.zst pttbbs-54300ebed078d2f4e5e4b32a3a9ba289ffd83a0d.zip |
* refine uflags
* remove and mark for more deprecated uflags
* finetune pwcu exit save for uflags
git-svn-id: http://opensvn.csie.org/pttbbs/trunk@4846 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | pttbbs/include/uflags.h | 18 | ||||
-rw-r--r-- | pttbbs/mbbsd/passwd.c | 94 | ||||
-rw-r--r-- | pttbbs/mbbsd/user.c | 1 |
3 files changed, 51 insertions, 62 deletions
diff --git a/pttbbs/include/uflags.h b/pttbbs/include/uflags.h index addfa7a4..e9037a68 100644 --- a/pttbbs/include/uflags.h +++ b/pttbbs/include/uflags.h @@ -17,8 +17,8 @@ /* TRADITIONAL BBS UFLAG */ //#define UNKNOWN_FLAG 0x00000001 // deprecated ? //#define UNKNOWN_FLAG2 0x00000002 // deprecated ? -#define PAGER_FLAG 0x00000004 /* true if pager was OFF last session */ -#define CLOAK_FLAG 0x00000008 /* true if cloak was ON last session */ +//#define PAGER_FLAG 0x00000004 /* deprecated by cuser.pager: true if pager was OFF last session */ +//#define CLOAK_FLAG 0x00000008 /* deprecated by cuser.invisible: true if cloak was ON last session */ #define FRIEND_FLAG 0x00000010 /* true if show friends only */ #define BRDSORT_FLAG 0x00000020 /* true if the boards sorted alphabetical */ #define MOVIE_FLAG 0x00000040 /* true if show movie */ @@ -48,6 +48,7 @@ /* -------------------- userec_t.uflag2 (unsigned int) */ +// XXX TODO move water to standalone variable just like invisible/pager. #define WATER_ORIG 0x00000000 #define WATER_NEW 0x00000001 #define WATER_OFO 0x00000002 @@ -69,17 +70,8 @@ #define REJECT_OUTTAMAIL (cuser.uflag2 & REJ_OUTTAMAIL) /* ANGEL [deprecated] */ -#define UF2_ANGEL_PAUSE 0x00000800 /* true if don't want to be angel for a while */ // deprecated -#define UF2_ANGEL_OLDMASK 0x00003800 // mask of all deprecated stuff -// #define ANGEL_R_MAEL 0x00001000 /* true if reject male */ // deprecated -// #define ANGEL_R_FEMAEL 0x00002000 /* true if reject female */ // deprecated -// #define ANGEL_MASK 0x00003000 -// #define REJECT_QUESTION (cuser.uflag2 & REJ_QUESTION) // deprecated -// #define ANGEL_STATUS() ((cuser.uflag2 & ANGEL_MASK) >> 12) -/* - #define ANGEL_SET(X) (cuser.uflag2 = (cuser.uflag2 & ~ANGEL_MASK) | \ - (((X) & 3) << 12)) - */ +// #define UF2_ANGEL_PAUSE 0x00000800 /* deprecated: true if don't want to be angel for a while */ +// #define UF2_ANGEL_OLDMASK 0x00003800 // mask of all deprecated stuff // #define ANGEL_??? 0x00004000 // #define ANGEL_??? 0x00008000 diff --git a/pttbbs/mbbsd/passwd.c b/pttbbs/mbbsd/passwd.c index 553194b1..6a6ed455 100644 --- a/pttbbs/mbbsd/passwd.c +++ b/pttbbs/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/pttbbs/mbbsd/user.c b/pttbbs/mbbsd/user.c index f294247b..67f5c163 100644 --- a/pttbbs/mbbsd/user.c +++ b/pttbbs/mbbsd/user.c @@ -542,7 +542,6 @@ void Customize(void) if(dirty) { - pwcuSaveUserFlags(); outs("設定已儲存。\n"); } else { outs("結束設定。\n"); |