version 1.43, 2009/11/17 13:30:07 |
version 1.44, 2009/11/18 13:16:33 |
|
|
void printflike2 |
void printflike2 |
status_message_set(struct client *c, const char *fmt, ...) |
status_message_set(struct client *c, const char *fmt, ...) |
{ |
{ |
struct timeval tv; |
struct timeval tv; |
va_list ap; |
struct session *s = c->session; |
int delay; |
struct message_entry *msg; |
|
va_list ap; |
|
int delay; |
|
u_int i, limit; |
|
|
status_prompt_clear(c); |
status_prompt_clear(c); |
status_message_clear(c); |
status_message_clear(c); |
|
|
xvasprintf(&c->message_string, fmt, ap); |
xvasprintf(&c->message_string, fmt, ap); |
va_end(ap); |
va_end(ap); |
|
|
|
ARRAY_EXPAND(&c->message_log, 1); |
|
msg = &ARRAY_LAST(&c->message_log); |
|
msg->msg_time = time(NULL); |
|
msg->msg = xstrdup(c->message_string); |
|
|
|
if (s == NULL) |
|
limit = 0; |
|
else |
|
limit = options_get_number(&s->options, "message-limit"); |
|
for (i = ARRAY_LENGTH(&c->message_log); i > limit; i--) { |
|
msg = &ARRAY_ITEM(&c->message_log, i - 1); |
|
xfree(msg->msg); |
|
ARRAY_REMOVE(&c->message_log, i - 1); |
|
} |
|
|
delay = options_get_number(&c->session->options, "display-time"); |
delay = options_get_number(&c->session->options, "display-time"); |
tv.tv_sec = delay / 1000; |
tv.tv_sec = delay / 1000; |
tv.tv_usec = (delay % 1000) * 1000L; |
tv.tv_usec = (delay % 1000) * 1000L; |
|
|
evtimer_del(&c->message_timer); |
evtimer_del(&c->message_timer); |
evtimer_set(&c->message_timer, status_message_callback, c); |
evtimer_set(&c->message_timer, status_message_callback, c); |
evtimer_add(&c->message_timer, &tv); |
evtimer_add(&c->message_timer, &tv); |