板友:故名思義,就是顯示站上和你看同一板的使用者。
此功能是從 ptt 那裏看來的,自己 implement。
做法:在下列內容裏,有 "*" 皆代表 Ctrl+U(除了註解以外)
1. 修改 struct.h
struct user_info
{
int uid; /* Used to find user name in passwd file */
pid_t pid; /* kill() to notify user of talk request */
int sockaddr; /* ... */
int destuid; /* talk uses this to identify who called */
struct user_info* destuip;
uschar active; /* When allocated this field is true */
uschar invisible; /* Used by cloaking function in Xyz menu */
uschar sockactive; /* Used to coordinate talk requests */
usint userlevel;
uschar mode; /* UL/DL, Talk Mode, Chat Mode, ... */
uschar pager; /* pager toggle, YEA, or NA */
uschar in_chat; /* for in_chat commands */
uschar sig; /* signal type */
char userid[IDLEN + 1];
char chatid[11]; /* chat id, if in chat mode */
char realname[20];
char username[24];
char from[27]; /* machine name the user called in from */
int from_alias;
char birth; /* 是否是生日 Ptt*/
char tty[11]; /* tty port */
ushort friend[MAX_FRIEND];
ushort reject[MAX_REJECT];
uschar msgcount;
msgque msgs[MAXMSGS];
time_t uptime;
time_t lastact; /* 上次使用者動的時間 */
usint brc_id;
uschar lockmode;
/* add by TJSheu */
char board[IDLEN + 2]; /* 是否為板友 */
char pad[12];
/* */
};
typedef struct user_info user_info;
2. 修改 talk.c
-------------------
typedef struct
{
user_info *ui;
linkuser_info *lui;
time_t idle;
usint friend;
/* add by TJSheu */
usint board_friend;
/* */
} pickup;
-------------------
int friends_number;
int override_number;
int rejected_number;
/* add by TJSheu */
int board_friend_number;
char *fcolor[8] = {"", "*[1;32m", "*[1;33m", "*[1;37m", "*[31m", "*[1;35m"
, "*[1;36m", "*[36m"};
/* */
-------------------
/* add by TJSheu */
int is_board_friend(ui)
user_info *ui;
{
if ( (strcmp(currboard, ui->board)==0) && (ui->uid != currutmp->uid)
&& (ui->mode == READING) )
{
board_friend_number++;
return 7;
}
else
return 0;
}
/* */
--------------------
switch (pickup_way)
{
case 0:
{
register int friend;
if (friend = j->friend - i->friend)
return friend;
}
/* add by TJSheu */
{
register int board_friend;
if (board_friend = j->board_friend - i->board_friend)
return board_friend;
}
/* */
case 1:
-------------------
if (pickup_way !=5 && utmpshm->uptime > freshtime)
{
time(&freshtime);
/* modify by TJSheu */
board_friend_number=friends_number = override_number = rejected_number
= actor = ch = 0;
/* */
while (ch < USHM_SIZE)
-------------------
#endif
pklist[actor].friend = head;
pklist[actor].ui = uentp;
/* add by TJSheu */
pklist[actor].board_friend = is_board_friend(uentp);
/* */
actor++;
}
-------------------
else if( pickup_way==5 ) /* Ptt */
{
time(&freshtime);
/* modify by TJSheu */
friends_number = override_number = rejected_number = actor = ch = 0;
/* */
for (ch = 0;ch < luser->number;ch++)
{
luentp = &(luser->uinfo[ch]);
-------------------
if (state >= US_ACTION)
{
showtitle((cuser.uflag & FRIEND_FLAG)? "好友列表": "休閒聊天", BoardName)
/*modify by TJSheu */
prints("排序方式:[%s]*[1;36m教室人數:%-4d*[1;32m我的朋友:%-3d*[33m
與我為友:%-3d*[31m壞人:%-3d*[m*[36m板友:%-3d*[m\n"
"*[1;33;44m %s P%c代號 %-17s%-17s%-13s%-10s*[0m\n",
msg_pickup_way[pickup_way], actor,
friends_number, override_number, badman,board_friend_number,
#ifdef SHOWUID
show_uid ? "UID" :
------------------
if (PERM_HIDE(uentp))
state = PERM_HIDE(currutmp) ? 5 : 0;
if (PERM_HIDE(currutmp) && state == 3)
state = 6;
/* add by TJSHeu */
if (state ==0)
state = pklist[ch].board_friend;
------------------
3. 修改 board.c
if (strcmp(currboard, boardname) == 0)
{
return brc_num;
}
brc_update();
strcpy(currboard, boardname);
/* add by TJSheu */
if (strcmp(currboard, boardname) == 0)
{
return brc_num;
}
brc_update();
strcpy(currboard, boardname);
/* add by TJSheu */
strcpy(currutmp->board,currboard);
/* */
currbrdattr = bcache[getbnum(currboard)-1].brdattr;
read_brc_buf();
ptr = brc_buf;