1631 } |
1631 } |
1632 |
1632 |
1633 static void do_say_to(char *arg) |
1633 static void do_say_to(char *arg) |
1634 { |
1634 { |
1635 char **paramlst; |
1635 char **paramlst; |
1636 char *fjid, *msg; |
1636 char *fjid, *msg_utf8; |
|
1637 char *msg; |
|
1638 char *unescaped_msg = NULL; |
1637 char *uncompletedfjid = NULL; |
1639 char *uncompletedfjid = NULL; |
1638 char *file = NULL; |
1640 char *file = NULL; |
1639 LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET; |
1641 LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET; |
1640 bool quiet = FALSE; |
1642 bool quiet = FALSE; |
|
1643 bool eval = FALSE; |
1641 |
1644 |
1642 if (!xmpp_is_online()) { |
1645 if (!xmpp_is_online()) { |
1643 scr_LogPrint(LPRINT_NORMAL, "You are not connected."); |
1646 scr_LogPrint(LPRINT_NORMAL, "You are not connected."); |
1644 return; |
1647 return; |
1645 } |
1648 } |
1658 if (!strcmp(*paramlst, "-q")) { |
1661 if (!strcmp(*paramlst, "-q")) { |
1659 char **oldparamlst = paramlst; |
1662 char **oldparamlst = paramlst; |
1660 paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message |
1663 paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message |
1661 free_arg_lst(oldparamlst); |
1664 free_arg_lst(oldparamlst); |
1662 quiet = TRUE; |
1665 quiet = TRUE; |
|
1666 } else if (!strcmp(*paramlst, "-e")) { |
|
1667 char **oldparamlst = paramlst; |
|
1668 paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message |
|
1669 free_arg_lst(oldparamlst); |
|
1670 eval = TRUE; |
1663 } else if (!strcmp(*paramlst, "-f")) { |
1671 } else if (!strcmp(*paramlst, "-f")) { |
1664 char **oldparamlst = paramlst; |
1672 char **oldparamlst = paramlst; |
1665 paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid |
1673 paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid |
1666 free_arg_lst(oldparamlst); |
1674 free_arg_lst(oldparamlst); |
1667 if (!*paramlst) { |
1675 if (!*paramlst) { |
1721 g_free(fjid); |
1729 g_free(fjid); |
1722 return; |
1730 return; |
1723 } |
1731 } |
1724 |
1732 |
1725 if (!file) { |
1733 if (!file) { |
1726 msg = to_utf8(msg); |
1734 msg_utf8 = to_utf8(msg); |
|
1735 if (eval) { |
|
1736 unescaped_msg = ut_unescape_tabs_cr(msg_utf8); |
|
1737 // We must not free() if the original string was returned |
|
1738 if (unescaped_msg == msg_utf8) |
|
1739 unescaped_msg = NULL; |
|
1740 } |
|
1741 msg = (unescaped_msg ? unescaped_msg : msg_utf8); |
1727 } else { |
1742 } else { |
1728 char *filename_xp; |
1743 char *filename_xp; |
1729 if (msg) |
1744 if (msg) |
1730 scr_LogPrint(LPRINT_NORMAL, "say_to: extra parameter ignored."); |
1745 scr_LogPrint(LPRINT_NORMAL, "say_to: extra parameter ignored."); |
1731 filename_xp = expand_filename(file); |
1746 filename_xp = expand_filename(file); |
1732 msg = load_message_from_file(filename_xp); |
1747 msg = msg_utf8 = load_message_from_file(filename_xp); |
1733 g_free(filename_xp); |
1748 g_free(filename_xp); |
1734 g_free(file); |
1749 g_free(file); |
1735 } |
1750 } |
1736 |
1751 |
1737 send_message_to(fjid, msg, NULL, msg_type, quiet); |
1752 send_message_to(fjid, msg, NULL, msg_type, quiet); |
1738 |
1753 |
1739 g_free(uncompletedfjid); |
1754 g_free(uncompletedfjid); |
1740 g_free(fjid); |
1755 g_free(fjid); |
1741 g_free(msg); |
1756 g_free(msg_utf8); |
|
1757 g_free(unescaped_msg); |
1742 free_arg_lst(paramlst); |
1758 free_arg_lst(paramlst); |
1743 } |
1759 } |
1744 |
1760 |
1745 // buffer_updown(updown, nblines) |
1761 // buffer_updown(updown, nblines) |
1746 // updown: -1=up, +1=down |
1762 // updown: -1=up, +1=down |