Substantial rewrite of /SCAN (do_scan). Now provides total channel nick

count as well as filtered nick count to the header and footer formats -
default header formats updated to show it.


git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@48 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
Kevin Easton
2008-06-12 14:50:45 +00:00
parent bca8ce0a1c
commit b057339be6
6 changed files with 294 additions and 187 deletions

View File

@@ -36,3 +36,6 @@ look by setting these formats:
/FSET NAMES_NICK_ME %B$[10]0 /FSET NAMES_NICK_ME %B$[10]0
/FSET NAMES_USER_VOICE %K[%Mv%n$1-%K] /FSET NAMES_USER_VOICE %K[%Mv%n$1-%K]
Also, the NAMES header and NAMES_FOOTER formats are now called with $3 set
to the total number of nicks in the channel, and $4 to the mask given to
/SCAN (if any).

View File

@@ -143,11 +143,11 @@
/* Done NAMES */ /* Done NAMES */
#define DEFAULT_FORMAT_NAMES_BANNER_FSET "$G " #define DEFAULT_FORMAT_NAMES_BANNER_FSET "$G "
#define DEFAULT_FORMAT_NAMES_FSET "$G %K[%cUsers%K(%W$1%K:%W$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_FSET "$G %K[%cUsers%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NAMES_NONOP_FSET "$G %K[%cNonChanOps%K(%W$1%K:%W$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_NONOP_FSET "$G %K[%cNonChanOps%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NAMES_OP_FSET "$G %K[%cChanOps%K(%W$1%K:%W$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_OP_FSET "$G %K[%cChanOps%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NAMES_PROMPT_FSET "$G $0-" #define DEFAULT_FORMAT_NAMES_PROMPT_FSET "$G $0-"
#define DEFAULT_FORMAT_NAMES_VOICE_FSET "$G %K[%cVoiceUsers%K(%W$1%K:%W$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_VOICE_FSET "$G %K[%cVoiceUsers%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NAMES_NICK_FSET "%B$[10]0" #define DEFAULT_FORMAT_NAMES_NICK_FSET "%B$[10]0"
#define DEFAULT_FORMAT_NAMES_NICK_BOT_FSET "%G$[10]0" #define DEFAULT_FORMAT_NAMES_NICK_BOT_FSET "%G$[10]0"
#define DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET "%Y$[10]0" #define DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET "%Y$[10]0"
@@ -159,10 +159,10 @@
#define DEFAULT_FORMAT_NAMES_USER_IRCOP_FSET "%K[%R$0%n$1-%K]" #define DEFAULT_FORMAT_NAMES_USER_IRCOP_FSET "%K[%R$0%n$1-%K]"
#define DEFAULT_FORMAT_NAMES_USER_VOICE_FSET "%K[%M$0%n$1-%K]" #define DEFAULT_FORMAT_NAMES_USER_VOICE_FSET "%K[%M$0%n$1-%K]"
/* In bx but not hades*/ /* In bx but not hades*/
#define DEFAULT_FORMAT_NAMES_BOT_FSET "$G %K[%GBots%K(%g$1%K:%g$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_BOT_FSET "$G %K[%cBots%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NAMES_FRIEND_FSET "$G %K[%GFriends%K(%g$1%K:%g$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_FRIEND_FSET "$G %K[%cFriends%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NAMES_IRCOP_FSET "$G %K[%GIrcOps%K(%g$1%K:%g$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_IRCOP_FSET "$G %K[%cIrcOps%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NAMES_SHIT_FSET "$G %K[%MShitUsers%K(%m$1%K:%m$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_SHIT_FSET "$G %K[%cShitUsers%K(%W$1%K:%W$2%K/%W$3%K)]%c $4"
#define DEFAULT_FORMAT_NETADD_FSET "$G %nAdded: %W$1 $2" #define DEFAULT_FORMAT_NETADD_FSET "$G %nAdded: %W$1 $2"
#define DEFAULT_FORMAT_NETSPLIT_FSET "$G %nNetsplit detected%K: %W$1%n split from %W$2 %K[%c$0%K]" #define DEFAULT_FORMAT_NETSPLIT_FSET "$G %nNetsplit detected%K: %W$1%n split from %W$2 %K[%c$0%K]"
@@ -567,14 +567,14 @@
#define DEFAULT_FORMAT_MSG_GROUP_FSET "%K-%P$1%K:%p$2%K-%n $3-" #define DEFAULT_FORMAT_MSG_GROUP_FSET "%K-%P$1%K:%p$2%K-%n $3-"
#define DEFAULT_FORMAT_MSG_GROUP_AR_FSET "%K-%Y$1%K:%Y$2%K-%n $3-" #define DEFAULT_FORMAT_MSG_GROUP_AR_FSET "%K-%Y$1%K:%Y$2%K-%n $3-"
#define DEFAULT_FORMAT_NAMES_FSET ansi?"$G %K[%GUsers%K(%g$1%K:%g$2%K)]%c $3":"$G [Users($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_FSET ansi?"$G %K[%GUsers%K(%g$1%K:%g$2%K/%g$3%K)]%c $4":"$G [Users($1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_BOT_FSET ansi?"$G %K[%GBots%K(%g$1%K:%g$2%K)]%c $3":"$G [Bots($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_BOT_FSET ansi?"$G %K[%GBots%K(%g$1%K:%g$2%K/%g$3%K)]%c $4":"$G [Bots($1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_FRIEND_FSET ansi?"$G %K[%GFriends%K(%g$1%K:%g$2%K)]%c $3":"$G [Friends($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_FRIEND_FSET ansi?"$G %K[%GFriends%K(%g$1%K:%g$2%K/%g$3%K)]%c $4":"$G [Friends($1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_NONOP_FSET ansi?"$G %K[%GNonChanOps%K(%g$1%K:%g$2%K)]%c $3":"$G [NonChanOps($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_NONOP_FSET ansi?"$G %K[%GNonChanOps%K(%g$1%K:%g$2%K/%g$3%K)]%c $4":"$G [NonChanOps($1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_OP_FSET ansi?"$G %K[%GChanOps%K(%g$1%K:%g$2%K)]%c $3":"$G [ChanOps($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_OP_FSET ansi?"$G %K[%GChanOps%K(%g$1%K:%g$2%K/%g$3%K)]%c $4":"$G [ChanOps($1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_IRCOP_FSET ansi?"$G %K[%GIrcOps%K(%g$1%K:%g$2%K)]%c $3":"$G [IrcOps($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_IRCOP_FSET ansi?"$G %K[%GIrcOps%K(%g$1%K:%g$2%K/%g$3%K)]%c $4":"$G [IrcOps($1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_SHIT_FSET ansi?"$G %K[%MShitUsers%K(%m$1%K:%m$2%K)]%c $3":"$G [ShitUsers(_$1:$2_)] $3" #define DEFAULT_FORMAT_NAMES_SHIT_FSET ansi?"$G %K[%MShitUsers%K(%m$1%K:%m$2%K/%m$3%K)]%c $4":"$G [ShitUsers(_$1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_VOICE_FSET ansi?"$G %K[%MVoiceUsers%K(%m$1%K:%m$2%K)]%c $3":"$G [VoiceUsers($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_VOICE_FSET ansi?"$G %K[%MVoiceUsers%K(%m$1%K:%m$2%K/%m$3%K)]%c $4":"$G [VoiceUsers($1:$2/$3)] $4"
#define DEFAULT_FORMAT_NAMES_NICK_FSET ansi?"%B$[10]0":"$[10]0" #define DEFAULT_FORMAT_NAMES_NICK_FSET ansi?"%B$[10]0":"$[10]0"
#define DEFAULT_FORMAT_NAMES_NICK_BOT_FSET ansi?"%G$[10]0":"$[10]0" #define DEFAULT_FORMAT_NAMES_NICK_BOT_FSET ansi?"%G$[10]0":"$[10]0"
#define DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET ansi?"%Y$[10]0":"$[10]0" #define DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET ansi?"%Y$[10]0":"$[10]0"

View File

@@ -41,6 +41,9 @@ void show_nicklist_hashtable(ChannelList *);
void show_whowas_hashtable(WhowasWrapList *cptr, char *); void show_whowas_hashtable(WhowasWrapList *cptr, char *);
int show_wholeft_hashtable(WhowasWrapList *cptr, time_t ltime, int *total, int *hook, char *); int show_wholeft_hashtable(WhowasWrapList *cptr, time_t ltime, int *total, int *hook, char *);
/* Determines if the Nick matches the nick!user@host mask given. */
int nick_match(NickList *nick, char *mask);
/* Added to sort a hash'd nicklist and them remove the sorted list */ /* Added to sort a hash'd nicklist and them remove the sorted list */
NickList *BX_sorted_nicklist(ChannelList *, int); NickList *BX_sorted_nicklist(ChannelList *, int);
void BX_clear_sorted_nicklist(NickList **); void BX_clear_sorted_nicklist(NickList **);

View File

@@ -1304,44 +1304,102 @@ int server = from_server;
my_send_to_server(server, "MODE %s +oooo %s %s %s %s", chan->channel, nick, nick, nick, nick); my_send_to_server(server, "MODE %s +oooo %s %s %s %s", chan->channel, nick, nick, nick, nick);
} }
enum SCAN_TYPE {
SCAN_ALL, SCAN_VOICES, SCAN_CHANOPS, SCAN_NONOPS, SCAN_IRCOPS,
SCAN_FRIENDS, SCAN_SHITLISTED
};
/* nick_in_scan
*
* Test if a nick should be shown in a /SCAN, according to the
* scan type and nick!user@host mask. A NULL mask matches all nicks.
*/
int nick_in_scan(NickList *nick, enum SCAN_TYPE scan_type, char *mask)
{
switch(scan_type)
{
case SCAN_VOICES:
if (!nick_isvoice(nick)) return 0;
break;
case SCAN_CHANOPS:
if (!nick_isop(nick) && !nick_ishalfop(nick)) return 0;
break;
case SCAN_NONOPS:
if (nick_isop(nick) || nick_ishalfop(nick)) return 0;
break;
case SCAN_IRCOPS:
if (!nick_isircop(nick)) return 0;
break;
case SCAN_FRIENDS:
if (!nick->userlist) return 0;
break;
case SCAN_SHITLISTED:
if (!nick->shitlist) return 0;
break;
case SCAN_ALL:
default:
break;
}
/* mask == NULL matches all nicks */
if (!mask)
return 1;
return nick_match(nick, mask);
}
BUILT_IN_COMMAND(do_scan) BUILT_IN_COMMAND(do_scan)
{ {
int voice = 0, ops = 0, nops = 0, ircops = 0, all = 0, friends = 0, shit = 0; enum SCAN_TYPE scan_type = SCAN_ALL;
char *channel = NULL; char *channel = NULL;
ChannelList *chan; ChannelList *chan;
NickList *nick, *snick = NULL; NickList *nick, *snick = NULL;
char *s; char *s;
char *buffer = NULL; char *buffer = NULL;
int count = 0; int n_inscan = 0, n_total = 0;
int server; int count = 0;
int sorted = NICKSORT_NORMAL; int server;
char *match_host = NULL; int sorted = NICKSORT_NORMAL;
int cols = get_int_var(NAMES_COLUMNS_VAR); char *match_host = NULL;
int cols = get_int_var(NAMES_COLUMNS_VAR);
if (!cols) if (!cols)
cols = 1; cols = 1;
if (command && !my_stricmp(command, "scanv")) if (command)
voice = 1; {
else if (command && !my_stricmp(command, "scano")) if (!my_stricmp(command, "scanv"))
ops = 1; scan_type = SCAN_VOICES;
else if (command && !my_stricmp(command, "scann")) else if (!my_stricmp(command, "scano"))
nops = 1; scan_type = SCAN_CHANOPS;
else if (command && !my_stricmp(command, "scanf")) else if (!my_stricmp(command, "scann"))
friends = 1; scan_type = SCAN_NONOPS;
else if (command && !my_stricmp(command, "scans")) else if (!my_stricmp(command, "scanf"))
shit = 1; scan_type = SCAN_FRIENDS;
else if (command && !my_stricmp(command, "scani")) else if (!my_stricmp(command, "scans"))
ircops = 1; scan_type = SCAN_SHITLISTED;
else else if (!my_stricmp(command, "scani"))
all = 1; scan_type = SCAN_IRCOPS;
}
while (args && *args) while (s = next_arg(args, &args))
{ {
s = next_arg(args, &args); if (is_channel(s)) {
if (is_channel(s)) if (!channel)
channel = s; {
else if (s && *s == '-') channel = s;
}
continue;
}
if (*s == '-')
{ {
if (!my_strnicmp(s, "-sort", 3)) if (!my_strnicmp(s, "-sort", 3))
sorted = NICKSORT_NONE; sorted = NICKSORT_NONE;
@@ -1349,163 +1407,194 @@ int cols = get_int_var(NAMES_COLUMNS_VAR);
sorted = NICKSORT_NICK; sorted = NICKSORT_NICK;
else if (!my_strnicmp(s, "-host", 3)) else if (!my_strnicmp(s, "-host", 3))
sorted = NICKSORT_HOST; sorted = NICKSORT_HOST;
continue;
} }
else if (s && all)
if ((strlen(s) == 1) && (scan_type == SCAN_ALL))
{ {
if (*s == 'v') switch(*s)
voice = 1, all = 0; {
else if (*s == 'o') case 'v':
ops = 1, all = 0; case 'V':
else if (*s == 'n') scan_type = SCAN_VOICES;
nops = 1, all = 0; break;
else if (*s == 'i')
ircops = 1, all = 0; case 'o':
else if (*s == 'f') case 'O':
friends = 1, all = 0; scan_type = SCAN_CHANOPS;
else if (*s == 's') break;
shit = 1, all = 0;
else case 'n':
malloc_strcpy(&match_host, s); case 'N':
scan_type = SCAN_NONOPS;
break;
case 'f':
case 'F':
scan_type = SCAN_FRIENDS;
break;
case 's':
case 'S':
scan_type = SCAN_SHITLISTED;
break;
case 'i':
case 'I':
scan_type = SCAN_IRCOPS;
break;
}
continue;
} }
else
malloc_strcpy(&match_host, s); if (!match_host)
{
match_host = s;
}
} }
if (!(chan = prepare_command(&server, channel, NO_OP))) if (!(chan = prepare_command(&server, channel, NO_OP)))
return; return;
reset_display_target(); reset_display_target();
for (nick = next_nicklist(chan, NULL); nick; nick = next_nicklist(chan, nick))
{
if (voice && nick_isvoice(nick))
count++;
else if (ops && (nick_isop(nick) || nick_ishalfop(nick)))
count++;
else if (nops && !nick_isop(nick) && !nick_ishalfop(nick))
count++;
else if (ircops && nick_isircop(nick))
count++;
else if (friends && nick->userlist)
count++;
else if (shit && nick->shitlist)
count++;
else if (all)
count++;
}
snick = sorted_nicklist(chan, sorted); snick = sorted_nicklist(chan, sorted);
if (voice)
s = fget_string_var(FORMAT_NAMES_VOICE_FSET);
else if (ops)
s = fget_string_var(FORMAT_NAMES_OP_FSET);
else if (ircops)
s = fget_string_var(FORMAT_NAMES_IRCOP_FSET);
else if (friends)
s = fget_string_var(FORMAT_NAMES_FRIEND_FSET);
else if (nops)
s = fget_string_var(FORMAT_NAMES_NONOP_FSET);
else if (shit)
s = fget_string_var(FORMAT_NAMES_SHIT_FSET);
else
s = fget_string_var(FORMAT_NAMES_FSET);
put_it("%s", convert_output_format(s, "%s %s %d %s", update_clock(GET_TIME), chan->channel, count, space)); /* Count nicks - total and shown */
if (count) for (nick = snick; nick; nick = nick->next)
{ {
count = 0; n_total++;
for (nick = snick; nick; nick = nick->next)
{
char *nick_format;
char *user_format;
char *nick_buffer = NULL;
char nick_sym;
if (match_host) if (nick_in_scan(nick, scan_type, match_host))
{ n_inscan++;
int len = strlen(nick->nick)+strlen(nick->host)+4; }
char *t = alloca(len);
*t = 0;
strmopencat(t, len, nick->nick, "!", nick->host, NULL);
if (!wild_match(match_host, t))
continue;
}
/* Determine if the nick should be shown. */ /* Output the header line */
if ( (voice && !nick_isvoice(nick)) switch(scan_type)
|| (ops && !nick_isop(nick) && !nick_ishalfop(nick)) {
|| (nops && (nick_isop(nick) || nick_ishalfop(nick))) case SCAN_VOICES:
|| (ircops && !nick_isircop(nick)) s = fget_string_var(FORMAT_NAMES_VOICE_FSET);
|| (friends && !nick->userlist) break;
|| (shit && !nick->shitlist))
continue; case SCAN_CHANOPS:
s = fget_string_var(FORMAT_NAMES_OP_FSET);
break;
case SCAN_IRCOPS:
s = fget_string_var(FORMAT_NAMES_IRCOP_FSET);
break;
case SCAN_FRIENDS:
s = fget_string_var(FORMAT_NAMES_FRIEND_FSET);
break;
case SCAN_NONOPS:
s = fget_string_var(FORMAT_NAMES_NONOP_FSET);
break;
case SCAN_SHITLISTED:
s = fget_string_var(FORMAT_NAMES_SHIT_FSET);
break;
case SCAN_ALL:
default:
s = fget_string_var(FORMAT_NAMES_FSET);
}
put_it("%s",
convert_output_format(s, "%s %s %d %d %s",
update_clock(GET_TIME), chan->channel, n_inscan, n_total,
match_host ? match_host : empty_string));
for (nick = snick; nick; nick = nick->next)
{
char *nick_format;
char *user_format;
char *nick_buffer = NULL;
char nick_sym;
if (!nick_in_scan(nick, scan_type, match_host))
continue;
/* Determine the nick format string to use */ /* Determine the nick format string to use */
if (my_stricmp(nick->nick, get_server_nickname(server)) == 0) if (!my_stricmp(nick->nick, get_server_nickname(server)))
nick_format = fget_string_var(FORMAT_NAMES_NICK_ME_FSET); nick_format = fget_string_var(FORMAT_NAMES_NICK_ME_FSET);
else if (nick->userlist && (nick->userlist->flags & ADD_BOT)) else if (nick->userlist && (nick->userlist->flags & ADD_BOT))
nick_format = fget_string_var(FORMAT_NAMES_NICK_BOT_FSET); nick_format = fget_string_var(FORMAT_NAMES_NICK_BOT_FSET);
else if (nick->userlist) else if (nick->userlist)
nick_format = fget_string_var(FORMAT_NAMES_NICK_FRIEND_FSET); nick_format = fget_string_var(FORMAT_NAMES_NICK_FRIEND_FSET);
else if (nick->shitlist) else if (nick->shitlist)
nick_format = fget_string_var(FORMAT_NAMES_NICK_SHIT_FSET); nick_format = fget_string_var(FORMAT_NAMES_NICK_SHIT_FSET);
else else
nick_format = fget_string_var(FORMAT_NAMES_NICK_FSET); nick_format = fget_string_var(FORMAT_NAMES_NICK_FSET);
/* Determine the user format and indicator symbol to use. */ /* Determine the user format and indicator symbol to use. */
if (nick_isop(nick)) if (nick_isop(nick))
{ {
user_format = fget_string_var(FORMAT_NAMES_USER_CHANOP_FSET); user_format = fget_string_var(FORMAT_NAMES_USER_CHANOP_FSET);
nick_sym = '@'; nick_sym = '@';
} }
else if (nick_ishalfop(nick)) else if (nick_ishalfop(nick))
{ {
user_format = fget_string_var(FORMAT_NAMES_USER_CHANOP_FSET); user_format = fget_string_var(FORMAT_NAMES_USER_CHANOP_FSET);
nick_sym = '%'; nick_sym = '%';
} }
else if (nick_isvoice(nick)) else if (nick_isvoice(nick))
{ {
user_format = fget_string_var(FORMAT_NAMES_USER_VOICE_FSET); user_format = fget_string_var(FORMAT_NAMES_USER_VOICE_FSET);
nick_sym = '+'; nick_sym = '+';
} }
else if (nick_isircop(nick)) else if (nick_isircop(nick))
{ {
user_format = fget_string_var(FORMAT_NAMES_USER_IRCOP_FSET); user_format = fget_string_var(FORMAT_NAMES_USER_IRCOP_FSET);
nick_sym = '*'; nick_sym = '*';
} }
else else
{ {
user_format = fget_string_var(FORMAT_NAMES_USER_FSET); user_format = fget_string_var(FORMAT_NAMES_USER_FSET);
nick_sym = '.'; nick_sym = '.';
} }
/* Construct the string */ /* Construct the string */
malloc_strcpy(&nick_buffer, convert_output_format(nick_format, malloc_strcpy(&nick_buffer, convert_output_format(nick_format,
"%s", nick->nick)); "%s", nick->nick));
malloc_strcat(&buffer, malloc_strcat(&buffer,
convert_output_format(user_format, "%c %s", nick_sym, convert_output_format(user_format, "%c %s", nick_sym,
nick_buffer)); nick_buffer));
malloc_strcat(&buffer, space); malloc_strcat(&buffer, space);
new_free(&nick_buffer); new_free(&nick_buffer);
/* If this completes a line, output it */
if (count++ >= (cols - 1))
{
if (fget_string_var(FORMAT_NAMES_BANNER_FSET))
put_it("%s%s", convert_output_format(fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), buffer);
else
put_it("%s", buffer);
new_free(&buffer);
count = 0;
}
}
/* If a partial line is left, output it */
if (count)
{
if (fget_string_var(FORMAT_NAMES_BANNER_FSET))
put_it("%s%s", convert_output_format(fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), buffer);
else
put_it("%s", buffer);
new_free(&buffer);
}
/* Write the footer */
if (fget_string_var(FORMAT_NAMES_FOOTER_FSET))
put_it("%s",
convert_output_format(fget_string_var(FORMAT_NAMES_FOOTER_FSET),
"%s %s %d %d %s", update_clock(GET_TIME), chan->channel,
n_inscan, n_total, match_host ? match_host : empty_string));
if (count++ >= (cols - 1))
{
if (fget_string_var(FORMAT_NAMES_BANNER_FSET))
put_it("%s%s", convert_output_format(fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), buffer);
else
put_it("%s", buffer);
new_free(&buffer);
count = 0;
}
}
if (count && buffer)
{
if (fget_string_var(FORMAT_NAMES_BANNER_FSET))
put_it("%s%s", convert_output_format(fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), buffer);
else
put_it("%s", buffer);
}
if (fget_string_var(FORMAT_NAMES_FOOTER_FSET))
put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FOOTER_FSET), NULL, NULL));
new_free(&buffer);
}
clear_sorted_nicklist(&snick); clear_sorted_nicklist(&snick);
} }

View File

@@ -316,7 +316,7 @@ int user_count = 0;
&& do_hook(NAMES_LIST, "%s %s", channel, line) && do_hook(NAMES_LIST, "%s %s", channel, line)
&& get_int_var(SHOW_CHANNEL_NAMES_VAR)) && get_int_var(SHOW_CHANNEL_NAMES_VAR))
{ {
put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d",update_clock(GET_TIME), channel, user_count)); put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d %d",update_clock(GET_TIME), channel, user_count, user_count));
print_funny_names(line); print_funny_names(line);
} }
if ((user_count == 1) && (*line == '@')) if ((user_count == 1) && (*line == '@'))
@@ -359,7 +359,7 @@ int user_count = 0;
set_display_target(channel, LOG_CRAP); set_display_target(channel, LOG_CRAP);
if (fget_string_var(FORMAT_NAMES_FSET)) if (fget_string_var(FORMAT_NAMES_FSET))
{ {
put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d", update_clock(GET_TIME), channel, user_count)); put_it("%s", convert_output_format(fget_string_var(FORMAT_NAMES_FSET), "%s %s %d %d", update_clock(GET_TIME), channel, user_count, user_count));
print_funny_names(line); print_funny_names(line);
} }
else else

View File

@@ -782,6 +782,18 @@ int a_isvoice, b_isvoice;
return 0; return 0;
} }
/* Determines if the Nick matches the nick!user@host mask given. */
int nick_match(NickList *nick, char *mask)
{
int match = 0;
char *nuh = m_3dup(nick->nick, "!", nick->host);
match = wild_match(mask, nuh);
new_free(&nuh);
return match;
}
NickList *BX_sorted_nicklist(ChannelList *chan, int sort) NickList *BX_sorted_nicklist(ChannelList *chan, int sort)
{ {
NickList *tmp, *l = NULL, *list = NULL, *last = NULL; NickList *tmp, *l = NULL, *list = NULL, *last = NULL;