#endif
}
message_source = src;
- if (!(msg_type & 4) && !(format = handle_find_message(handle, format)))
+ if (!(msg_type & MSG_TYPE_NOXLATE)
+ && !(format = handle_find_message(handle, format)))
return 0;
/* fill in a buffer with the string */
input.used = 0;
size = sizeof(line);
use_color = 1;
}
- if (!size)
+ if (!size || !(msg_type & MSG_TYPE_MULTILINE))
size = DEFAULT_LINE_SIZE;
switch (msg_type & 3) {
case 0:
case 'H':
value = handle ? handle->handle : "Account";
break;
-#define SEND_LINE() do { line[pos] = 0; if (pos > 0) irc_send(src, dest, line); chars_sent += pos; pos = 0; newline_ipos = ipos; } while (0)
+#define SEND_LINE(TRUNCED) do { \
+ line[pos] = 0; \
+ if (pos > 0) { \
+ if (!(msg_type & MSG_TYPE_MULTILINE) && (pos > 1) && TRUNCED) \
+ line[pos-2] = line[pos-1] = '.'; \
+ irc_send(src, dest, line); \
+ } \
+ chars_sent += pos; \
+ pos = 0; \
+ newline_ipos = ipos; \
+ if (!(msg_type & MSG_TYPE_MULTILINE)) return chars_sent; \
+} while (0)
/* Custom expansion handled by helpfile-specific function. */
case '{':
case '(': {
break;
case HF_TABLE:
/* Must send current line, then emit table. */
- SEND_LINE();
+ SEND_LINE(0);
table_send(src, (message_dest ? message_dest->nick : dest), 0, irc_send, exp.value.table);
value = "";
break;
/* word to send is too big to send now.. what to do? */
if (pos > 0) {
/* try to put it on a separate line */
- SEND_LINE();
+ SEND_LINE(1);
} else {
/* already at start of line; only send part of it */
strncpy(line, value, avail);
}
/* if we're looking at a newline, send the accumulated text */
if (*value == '\n') {
- SEND_LINE();
+ SEND_LINE(0);
value++;
}
}
send_line:
expand_pos = pos;
expand_ipos = ipos;
- SEND_LINE();
+ SEND_LINE(0);
#undef SEND_LINE
}
return chars_sent;
va_list ap;
va_start(ap, format);
- res = vsend_message(dest->nick, src, dest->handle_info, 4, expand, format, ap);
+ res = vsend_message(dest->nick, src, dest->handle_info, 12, expand, format, ap);
va_end(ap);
return res;
}