summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/include/uflags.h18
-rw-r--r--pttbbs/mbbsd/passwd.c94
-rw-r--r--pttbbs/mbbsd/user.c1
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");