static
GQueue *split_message(const struct session *sess, const gchar *text, const gchar *event) {
GQueue *list = g_queue_new();
gchar *nick = g_strdup(sess->server->nick);
gchar *target = g_strdup(sess->channel);
gchar *host, *temp;
gchar *tempstr = "\0";
gint len;
gchar *note_stop = g_strdup(prefs.text_overflow_stop);
gint stop_len = strlen(note_stop);
if (sess->me && sess->me->hostname) {
host = g_strdup(sess->me->hostname);
temp = g_strdup_printf(":%s!%s@%s %s %s :", nick, prefs.username, host, event, target);
len = strlen(temp) + 9;
} else {
temp = g_strdup_printf(":%s!%s@%s %s %s :", nick, prefs.username, "", event, target);
len = strlen(temp) + 9 + 64;
}
g_free(temp);
while ((strlen(text) + len + stop_len) > IRC_MAX_LENGTH-1) {
tempstr = g_strrstr_len(text, IRC_MAX_LENGTH - (len + stop_len), " ");
temp = g_strndup(text, tempstr-text);
g_queue_push_tail(list, g_strconcat(temp, " ", note_stop, NULL));
text = tempstr;
}
g_queue_push_tail(list, g_strdup(text));
return list;
}