summaryrefslogtreecommitdiffstats
path: root/mbbsd
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-09-17 02:20:40 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-09-17 02:20:40 +0800
commitae598bc932f6a2cc3227b5a65c8ab0c88dedcf69 (patch)
treefd81664aa7ea7459588863d2014c3f13dc48e014 /mbbsd
parent5afe5e2870f4bc8c4fcf98d23234c90faa25ff50 (diff)
downloadpttbbs-ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69.tar
pttbbs-ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69.tar.gz
pttbbs-ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69.tar.bz2
pttbbs-ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69.tar.lz
pttbbs-ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69.tar.xz
pttbbs-ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69.tar.zst
pttbbs-ae598bc932f6a2cc3227b5a65c8ab0c88dedcf69.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/pttbbs@4846 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd')
-rw-r--r--mbbsd/passwd.c94
-rw-r--r--mbbsd/user.c1
2 files changed, 46 insertions, 49 deletions
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");