From 333ccae794114252eeba90e2288ffd7b6fd0c9db Mon Sep 17 00:00:00 2001 From: in2 Date: Sat, 9 Mar 2002 10:34:58 +0000 Subject: ofo's water show 'x' for dead users my_write() input uin if already got it git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@11 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/friend.c | 4 ++-- mbbsd/io.c | 4 ++-- mbbsd/mbbsd.c | 67 +++++++++++++++++++++++++++++++++------------------------- mbbsd/talk.c | 28 ++++++++++++++++-------- 4 files changed, 61 insertions(+), 42 deletions(-) (limited to 'mbbsd') diff --git a/mbbsd/friend.c b/mbbsd/friend.c index 3d2167ae..a51d3000 100644 --- a/mbbsd/friend.c +++ b/mbbsd/friend.c @@ -1,4 +1,4 @@ -/* $Id: friend.c,v 1.1 2002/03/07 15:13:48 in2 Exp $ */ +/* $Id: friend.c,v 1.2 2002/03/09 10:34:58 in2 Exp $ */ #include #include #include @@ -330,7 +330,7 @@ static void friend_water(char *message, int type) { /* if((tuid = searchuser(userid)) && tuid != usernum && (uentp = (userinfo_t *) search_ulist(tuid)) && isvisible_uid(tuid)) - my_write(uentp->pid, message, uentp->userid, 1); + my_write(uentp->pid, message, uentp->userid, 1, NULL); } fclose(fp); } diff --git a/mbbsd/io.c b/mbbsd/io.c index e3d03b9b..1f13ffeb 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -1,4 +1,4 @@ -/* $Id: io.c,v 1.1 2002/03/07 15:13:48 in2 Exp $ */ +/* $Id: io.c,v 1.2 2002/03/09 10:34:58 in2 Exp $ */ #include #include #include @@ -259,7 +259,7 @@ int igetch() { show_last_call_in(0); watermode = 0; my_write(currutmp->msgs[0].pid, "水球丟過去 : ", - currutmp->msgs[0].userid, 0); + currutmp->msgs[0].userid, 0, NULL); i_newfd = my_newfd; /* 還原螢幕 */ diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index c4849da5..85f29642 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -1,4 +1,4 @@ -/* $Id: mbbsd.c,v 1.1 2002/03/07 15:13:48 in2 Exp $ */ +/* $Id: mbbsd.c,v 1.2 2002/03/09 10:34:58 in2 Exp $ */ #include #include #include @@ -349,9 +349,15 @@ extern unsigned int currstat; water_t water[6], *swater[6], *water_which=&water[0]; char water_usies=0; extern int watermode; -static int add_history_water(water_t *w, msgque_t *msg) +static int add_history_water(water_t *w, msgque_t *msg, char mode) { - memcpy(&w->msg[w->top], msg, sizeof(msgque_t)); + // mode: 1: all data(including userid, pid); + // 0: only last_call_in + if( mode ) + memcpy(&w->msg[w->top], msg, sizeof(msgque_t)); + else + memcpy(&w->msg[w->top].last_call_in, msg->last_call_in, + sizeof(msg->last_call_in)); w->top++; w->top %= WATERMODE(WATER_OFO) ? 5 : MAX_REVIEW; @@ -364,34 +370,37 @@ static int add_history_water(water_t *w, msgque_t *msg) static int add_history(msgque_t *msg) { - int i,j; + int i = 0, j; water_t *tmp; - add_history_water(&water[0], msg); - for(i = 0 ; i < 5 && swater[i] ; i++ ) - if( swater[i]->pid == msg->pid ) - break; - if( i != 5 ){ - if( !swater[i] ){ - water_usies = i + 1; - swater[i] = &water[i + 1]; - strcpy(swater[i]->userid, msg->userid); - swater[i]->pid = msg->pid; + if( WATERMODE(WATER_ORIG) || WATERMODE(WATER_NEW) ) + add_history_water(&water[0], msg, 1); + if( WATERMODE(WATER_NEW) || WATERMODE(WATER_OFO) ){ + for(i = 0 ; i < 5 && swater[i] ; i++ ) + if( swater[i]->pid == msg->pid ) + break; + if( i != 5 ){ + if( !swater[i] ){ + water_usies = i + 1; + swater[i] = &water[i + 1]; + strcpy(swater[i]->userid, msg->userid); + swater[i]->pid = msg->pid; + } + tmp = swater[i]; } - tmp = swater[i]; - } - else{ - tmp = swater[4]; - memset(swater[4], 0, sizeof (water_t)); - strcpy(swater[4]->userid, msg->userid); - swater[4]->pid = msg->pid; - i = 4; + else{ + tmp = swater[4]; + memset(swater[4], 0, sizeof (water_t)); + strcpy(swater[4]->userid, msg->userid); + swater[4]->pid = msg->pid; + i = 4; + } + + for( j = i ; j > 0 ; j-- ) + swater[j] = swater[j - 1]; + swater[0] = tmp; + add_history_water(swater[0], msg, 0); } - - for( j = i ; j > 0 ; j-- ) - swater[j] = swater[j - 1]; - swater[0] = tmp; - add_history_water(swater[0], msg); - + if(WATERMODE(WATER_ORIG) || WATERMODE(WATER_NEW) ){ if( watermode > 0 && (water_which == swater[0] || water_which == &water[0]) ){ @@ -1015,7 +1024,7 @@ do_aloha (char *hello) if ((tuid = searchuser (userid)) && tuid != usernum && (uentp = (userinfo_t *) search_ulist (tuid)) && isvisible(uentp, currutmp)){ - my_write (uentp->pid, genbuf, uentp->userid, 2); + my_write (uentp->pid, genbuf, uentp->userid, 2, NULL); } } fclose (fp); diff --git a/mbbsd/talk.c b/mbbsd/talk.c index 3012b2d2..b5c99aad 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -1,4 +1,4 @@ -/* $Id: talk.c,v 1.1 2002/03/07 15:13:48 in2 Exp $ */ +/* $Id: talk.c,v 1.2 2002/03/09 10:34:58 in2 Exp $ */ #include #include #include @@ -466,7 +466,9 @@ void water_scr(water_t **currwater, int which, char type) int colors[] = {33, 37, 33, 37, 33}; move(8 + which, 28);prints(" "); move(8 + which, 28); - prints("\033[1;37;45m %-14s \033[0m", currwater[which]->userid); + prints("\033[1;37;45m %c %-14s \033[0m", + currwater[which]->alive ? ' ' : 'x', + currwater[which]->userid); for( i = 0 ; i < 5 ; ++i ){ move(16 + i, 4); prints(" "); @@ -489,7 +491,9 @@ void water_scr(water_t **currwater, int which, char type) prints("123456789012345678901234567890"); // refresh(); move(8 + which, 28); - prints("\033[1;37;44m %-13s \033[0m", currwater[which]->userid); + prints("\033[1;37;44m %c %-13s \033[0m", + currwater[which]->alive ? ' ' : 'x', + currwater[which]->userid); // refresh(); } } @@ -517,8 +521,14 @@ void my_write2(void) for( i = 0 ; i < 5 ; ++i ) if( currwater[i] == NULL || currwater[i]->pid == 0 ) break; - else + else{ + if( currwater[i]->uin == NULL ) + currwater[i]->uin = + (userinfo_t *)search_ulist_pid(currwater[i]->pid); + currwater[i]->alive = (strcmp(currwater[i]->userid, + currwater[i]->uin->userid) == 0); water_scr(currwater, i, 0); + } move(15, 4); prints("\033[0m \033[1;35m◇\033[1;36m────────────────" "─────────────────\033[1;35m◇\033[0m "); @@ -575,7 +585,7 @@ void my_write2(void) 80-strlen(tw->userid)-6, DOECHO) ) break; - my_write(tw->pid, msg, tw->userid, 4); + my_write(tw->pid, msg, tw->userid, 4, tw->uin); break; } } while( !done ); @@ -595,7 +605,7 @@ void my_write2(void) 5. 丟水球 flag = 0 6. my_write2 flag = 4 (pre-edit) but confirm */ -int my_write(pid_t pid, char *prompt, char *id, int flag) { +int my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t *puin) { int len, currstat0 = currstat, fri_stat; char msg[80], destid[IDLEN + 1]; char genbuf[200], buf[200], c0 = currutmp->chatid[0]; @@ -603,7 +613,7 @@ int my_write(pid_t pid, char *prompt, char *id, int flag) { time_t now; struct tm *ptime; userinfo_t *uin; - uin = (userinfo_t *)search_ulist_pid(pid); + uin = (puin != NULL) ? puin : (userinfo_t *)search_ulist_pid(pid); strcpy(destid, id); if(!uin && !(flag == 0 && water_which->count> 0)) { @@ -2107,7 +2117,7 @@ static void pickup_user() { (HAS_PERM(PERM_SYSOP) || (uentp->pager != 3 && (uentp->pager != 4 || fri_stat & HFM)))) - my_write(uentp->pid, genbuf, uentp->userid, HAS_PERM(PERM_SYSOP) ? 3 : 1); + my_write(uentp->pid, genbuf, uentp->userid, HAS_PERM(PERM_SYSOP) ? 3 : 1, NULL); } } break; @@ -2206,7 +2216,7 @@ static void pickup_user() { { cursor_show(num + 3 - head, 0); sprintf(genbuf, "Call-In %s :", uentp->userid); - my_write(uentp->pid, genbuf, uentp->userid, 0); + my_write(uentp->pid, genbuf, uentp->userid, 0, NULL); } } else if (ch == 'l') -- cgit v1.2.3