Commit 30b43550 authored by Konstantin Khomoutov's avatar Konstantin Khomoutov

Imported Upstream version 1.1

parent a4c8fa6a
This diff is collapsed.
# $Id: Makefile 1513 2008-10-15 17:39:41Z sergei $
# $Id: Makefile 2133 2014-02-07 07:11:37Z sergei $
PREFIX = /usr/local
TKABBERPLUGINSDIR = $(PREFIX)/share/tkabber-plugins
DOCDIR = $(PREFIX)/share/doc/tkabber-plugins
SUBDIRS = aniemoticons \
attline \
bc \
browser \
checkers \
chess \
ctcomp \
custom-urls \
cyrillize \
debug \
ejabberd \
floatinglog \
georoster \
gmail \
iconsets \
jidlink \
latex \
mute \
openurl \
osd \
presencecmd \
quiz \
quotelastmsg \
receipts \
renju \
reversi \
singularity \
socials \
spy \
stripes \
tclchat \
tkabber-khim \
traffic \
unixkeys \
SUBDIRS = aniemoticons \
attline \
battleship \
bc \
browser \
checkers \
chess \
ctcomp \
custom-urls \
cyrillize \
debug \
ejabberd \
floatingcontact \
floatinglog \
georoster \
gmail \
iconsets \
jidlink \
latex \
mute \
openurl \
osd \
otr \
poker \
presencecmd \
quiz \
quotelastmsg \
receipts \
renju \
reversi \
singularity \
socials \
spy \
stripes \
tclchat \
tkabber-khim \
traffic \
unixkeys \
whiteboard
install: install-bin install-doc
install-bin:
mkdir -p $(DESTDIR)/$(TKABBERPLUGINSDIR)
cp -r $(SUBDIRS) $(DESTDIR)/$(TKABBERPLUGINSDIR)
echo ""
echo ""
echo ""
echo "To enable desired plugins copy or link their directories to ~/.tkabber/plugins/"
echo ""
echo ""
echo ""
install -d $(DESTDIR)/$(TKABBERPLUGINSDIR)
cp -dr --no-preserve=ownership $(SUBDIRS) $(DESTDIR)/$(TKABBERPLUGINSDIR)
@echo ""
@echo ""
@echo ""
@echo "To enable desired plugins copy or link their directories to ~/.tkabber/plugins/"
@echo ""
@echo ""
@echo ""
install-doc:
mkdir -p $(DESTDIR)/$(DOCDIR)
cp COPYING ChangeLog README $(DESTDIR)/$(DOCDIR)
install -d $(DESTDIR)/$(DOCDIR)
install -m 644 COPYING ChangeLog README $(DESTDIR)/$(DOCDIR)
.PHONY: install install-bin install-doc
......@@ -6,7 +6,7 @@ or to $HOME/Library/Application Support/Tkabber (on MacOS X) directory.
Tkabber will automatically load the plugins when it's started.
The plugins that you will surely want to try are: Chess, GeoRoster
The plugins that you will surely want to try are: Chess, OTR,
and Whiteboard.
Short Description of the Included Plugins
......@@ -19,6 +19,13 @@ attline
message in a chat window where the window has lost keyboard focus. All
messages after the line are unread messages.
battleship
A paper & pencil board game of battleship where players try to sink
the opponent's ships. When installed, you can send an invitation
to your contact (contextual menu on the roster). If the other player
has also Tkabber and the plugin installed, he will recieve the
invitation. If he accepts, a window will open on both.
bc
A word game. Inludes a russian file.
......@@ -60,6 +67,9 @@ debug
ejabberd
Utility to check your Ejabberd Jabber server remotely.
floatingcontact
Allows roster items to float in separate small windows.
floatinglog
Plugin reports incoming messages, presence changes, status changes in a
separate floating window.
......@@ -96,6 +106,16 @@ osd
Displays certain events (presence and chat messages) notification
using osd_cat utility.
otr
Off-the-Record cryptographic protocol that provides strong encryption
for instant messaging conversations (https://otr.cypherpunks.ca/).
poker
Heads up Texas holdem. When installed, you can send an invitation to
your contact (from the popup menu in the roster). If the other player
has also Tkabber and the plugin installed, he will recieve the invitation.
If he accepts, a window will open on both and game will start.
presencecmd
Plugin which adds several commands in a chat window. They change user's
presence information (global or directed).
......@@ -112,14 +132,13 @@ receipts
messages and reply to such requests coming from remote party.
renju
Gomoku and Renju (in fact, renju is not implemented yet) game for two
players. When installed, you can send an invitation to your contact
(contextual menu on the roster). If the other player has also Tkabber
and the plugin installed, he will recieve the invitation. If he accepts,
a window will open on both.
Gomoku and Renju game for two players. When installed, you can send an
invitation to your contact (from a popup menu in the roster). If the
other player has also Tkabber and the plugin installed, he will recieve
the invitation. If he accepts, a window will open on both.
reversi
Reversi (othello) game for two players. When installed, you can send
Reversi (Othello) game for two players. When installed, you can send
an invitation to your contact (contextual menu on the roster). If the
other player has also Tkabber and the plugin installed, he will
recieve the invitation. If he accepts, a window will open on both.
......
# $Id: aniemoticons.tcl 1001 2007-03-04 10:32:59Z sergei $
# $Id: aniemoticons.tcl 1699 2009-03-02 06:02:13Z sergei $
package require msgcat
namespace eval aniemoticons {
::msgcat::mcload [file join [file dirname [info script]] msgs]
if {![::plugins::is_registered aniemoticons]} {
::plugins::register aniemoticons \
-namespace [namespace current] \
-source [info script] \
-description [::msgcat::mc "Whether the animated GIFs support plugin is loaded."] \
-loadcommand [namespace code load] \
-unloadcommand [namespace code unload]
return
}
}
namespace eval :: {
source [file join [file dirname [info script]] anigif.tcl]
}
namespace eval emoticons {
proc create_image {name file} {
proc aniemoticons::load {} {
rename ::plugins::emoticons::create_image ::plugins::emoticons::create_image:anigif
rename ::plugins::emoticons::delete_image ::plugins::emoticons::delete_image:anigif
proc ::plugins::emoticons::create_image {name file} {
if {[catch {::anigif::anigif $name $file} res]} {
image create photo $name -file $file
return $name
......@@ -14,8 +33,29 @@ namespace eval emoticons {
}
}
proc delete_image {name} {
proc ::plugins::emoticons::delete_image {name} {
::anigif::destroy $name
}
::plugins::emoticons::on_theme_changed
return
}
proc aniemoticons::unload {} {
if {[llength [info procs ::plugins::emoticons::create_image:anigif]] == 0 || \
[llength [info procs ::plugins::emoticons::delete_image:anigif]] == 0} {
return
}
rename ::plugins::emoticons::create_image ""
rename ::plugins::emoticons::delete_image ""
rename ::plugins::emoticons::create_image:anigif ::plugins::emoticons::create_image
rename ::plugins::emoticons::delete_image:anigif ::plugins::emoticons::delete_image
foreach name [image names] {
::anigif::stop $name
}
namespace delete ::anigif
}
# German messages file
# Roger Sondermann 15.03.2009
::msgcat::mcset de "Whether the animated GIFs support plugin is loaded." "Animierte-GIFs-Plugin laden."
::msgcat::mcset ru "Whether the animated GIFs support plugin is loaded." \
"Загружено ли расширение обеспечивающее поддержку анимационных GIFов."
# vim:ft=tcl:ts=8:sw=4:sts=4:noet
# $Id: attline.tcl 1349 2008-01-20 19:49:12Z sergei $
# $Id: attline.tcl 1838 2009-09-13 06:39:52Z sergei $
# "Attention line" -- chat plugin for Tkabber.
# Draws horizontal line in chat windows separating read and unread messages.
# Written by Konstantin Khomoutov <flatworm@users.sourceforge.net>
......@@ -6,12 +6,30 @@
package require msgcat
option add *Chat.attentionLineHeight 1 widgetDefault
option add *Chat.attentionLineColor black widgetDefault
option add *Chat.attentionLinePadX 5 widgetDefault
option add *Chat.attentionLinePadY 0 widgetDefault
namespace eval attline {
::msgcat::mcload [file join [file dirname [info script]] msgs]
if {![::plugins::is_registered attline]} {
::plugins::register attline \
-namespace [namespace current] \
-source [info script] \
-description [::msgcat::mc "Whether the Attention Line plugin is loaded."] \
-loadcommand [namespace code load] \
-unloadcommand [namespace code unload]
return
}
frame .fakeframe -class Chat
text .fakeframe.faketext
option add *Chat.attentionLineHeight 1 widgetDefault
option add *Chat.attentionLineColor [get_conf .fakeframe.faketext -foreground] \
widgetDefault
option add *Chat.attentionLinePadX 5 widgetDefault
option add *Chat.attentionLinePadY 0 widgetDefault
destroy .fakeframe
variable state
variable options
......@@ -19,11 +37,9 @@ namespace eval attline {
return [uplevel 1 namespace current]::$what
}
proc mycmd args {
lset args 0 [uplevel 1 namespace current]::[lindex $args 0]
lreplace $args 0 0 [uplevel 1 namespace current]::[lindex $args 0]
}
::msgcat::mcload [file join [file dirname [info script]] msgs]
custom::defgroup Plugins [::msgcat::mc "Plugins options."] -group Tkabber
custom::defgroup {Attention Line} \
......@@ -45,18 +61,52 @@ namespace eval attline {
from its chat window."] \
-group {Attention Line} \
-type boolean
}
proc attline::load {} {
hook::add open_chat_post_hook [mycmd setup_chat_win]
# must perform after the hook from 'log on open' plugin:
hook::add open_chat_post_hook [mycmd draw_chat_history_separator] 101
hook::add close_chat_post_hook [mycmd cleanup]
# must perform earlier than drawing of timestamp:
hook::add draw_message_hook [mycmd on_draw_message] 5.5
hook::add got_focus_hook [mycmd on_focused]
hook::add lost_focus_hook [mycmd on_lost_focus]
foreach chatid [chat::opened] {
setup_chat_win $chatid ""
}
}
proc attline::unload {} {
variable state
hook::remove open_chat_post_hook [mycmd setup_chat_win]
hook::remove open_chat_post_hook [mycmd draw_chat_history_separator] 101
hook::remove close_chat_post_hook [mycmd cleanup]
hook::remove draw_message_hook [mycmd on_draw_message] 5.5
hook::remove got_focus_hook [mycmd on_focused]
hook::remove lost_focus_hook [mycmd on_lost_focus]
foreach chatid [chat::opened] {
set cw [chat::chat_win $chatid]
set iw [chat::input_win $chatid]
bind $iw <<ChatSeeAttentionLine>> {}
set al [attline $cw]
set script [split [bind $cw <Configure>] \n]
set idx [lsearch -exact $script [mycmd reconfigure_attention_line $cw $al]]
if {$idx >= 0} {
bind $cw <Configure> [join [lreplace $script $idx $idx] \n]
}
if {[drawn $cw]} {
delete_attention_line $cw
}
cleanup $chatid
}
catch {unset state}
}
proc attline::attline {cw} {
......@@ -96,7 +146,7 @@ proc attline::setup_chat_win {chatid type} {
unread $cw false
atbottom $cw false
bind $iw <<ChatSeeAttentionLine>> +[mycmd see_attention_line $cw]
bind $iw <<ChatSeeAttentionLine>> [mycmd see_attention_line $cw]
return
}
......@@ -120,7 +170,7 @@ proc attline::getopt {cw opt} {
}
proc attline::on_draw_message {chatid from type body x} {
if {[is_delayed $x]} return
if {[::xmpp::delay::exists $x]} return
set cw [chat::chat_win $chatid]
......@@ -137,19 +187,6 @@ proc attline::on_draw_message {chatid from type body x} {
return
}
proc attline::is_delayed {xml} {
foreach xelem $xml {
::jlib::wrapper:splitxml $xelem tag vars isempty chdata children
switch -- [::jlib::wrapper:getattr $vars xmlns] {
urn:xmpp:delay -
jabber:x:delay {
return 1
}
}
}
return 0
}
proc attline::drawn {cw} {
winfo exists [attline $cw]
}
......@@ -317,7 +354,7 @@ proc attline::expire_attention_line {cw} {
if {[info exists state($cw,expiring)]} {
unread $cw false
unset state($cw,expiring)
if {$options(remove_expired)} {
if {$options(remove_expired) && [drawn $cw]} {
delete_attention_line $cw
}
debugmsg attline "expired"
......
# German messages file
# Roger Sondermann 09.03.2008
# Roger Sondermann 18.02.2009
::msgcat::mcset de "Attention Line chat plugin options. This plugin draws horizontal line separating read and unread messages in chat windows." "Optionen fr das Augenmerk-Linie-Plugin.\nDieses zeichnet in Chat-Fenstern eine horizontale Linie zur Trennung gelesener und ungelesener Nachrichten."
::msgcat::mcset de "Plugins options." "Optionen fr Plugins."
::msgcat::mcset de "Remove the attention line after it was expired from its chat window." "Augenmerk-Linie entfernen, nachdem sie verfallen ist."
::msgcat::mcset de "Time (in milliseconds) after which unread messages in the currently active chat window are considered read and the attention line is considered expired." "Zeitraum nach dem ungelesene Nachrichten im aktiven Chat-Fenster als gelesen und die Augenmerk-Linie als verfallen betrachtet wird (in Millisekunden)."
::msgcat::mcset de "Attention Line chat plugin options. This plugin draws horizontal line separating read and unread messages in chat windows." "Optionen fr das Aufmerksamkeits-Linien-Plugin.\nDieses zeichnet in Chat-Fenstern eine horizontale Linie zur Trennung gelesener und ungelesener Nachrichten."
::msgcat::mcset de "Plugins options." "Optionen fr Plugins."
::msgcat::mcset de "Remove the attention line after it was expired from its chat window." "Aufmerksamkeits-Linie entfernen, nachdem sie verfallen ist."
::msgcat::mcset de "Time (in milliseconds) after which unread messages in the currently active chat window are considered read and the attention line is considered expired." "Zeitraum nach dem ungelesene Nachrichten im aktiven Chat-Fenster als gelesen und die Aufmerksamkeits-Linie als verfallen betrachtet wird (in Millisekunden)."
::msgcat::mcset de "Whether the Attention Line plugin is loaded." "Aufmerksamkeits-Linien-Plugin laden."
......@@ -2,3 +2,4 @@
::msgcat::mcset es "Plugins options." "Opciones de plugins."
::msgcat::mcset es "Remove the attention line after it was expired from its chat window." "Borra la línea de atención de la ventana de charla cuando expire."
::msgcat::mcset es "Time (in milliseconds) after which unread messages in the currently active chat window are considered read and the attention line is considered expired." "Tiempo (en milisegundos) desde que un mensaje no leído en la ventana de charla activa se considera leído y se borra la línea de atención se considera expirada."
::msgcat::mcset es "Whether the Attention Line plugin is loaded." "Cargar el plugin Attention Line."
......@@ -7,4 +7,4 @@
::msgcat::mcset pl "Plugins options." "Ustawienia wtyczek."
::msgcat::mcset pl "Remove the attention line after it was expired from its chat window." "Usuń separator nieaktywności po tym jak stracił ważność w oknie rozmowy."
::msgcat::mcset pl "Time (in milliseconds) after which unread messages in the currently active chat window are considered read and the attention line is considered expired." "Czas (w milisekundach), po którym nieprzeczytane wiadomości w aktywnym oknie rozmowy zostaną uznane za przeczytane i separator starci ważność."
::msgcat::mcset pl "Whether the Attention Line plugin is loaded." "Załaduj wtyczkę separatora nieaktywności."
......@@ -11,3 +11,7 @@
active chat window are considered read and the attention line is considered expired." \
"Время (в миллисекундах) по истечении которого сообщения в активном окне разговора\
считаются прочитанными, и разделительная линия считается недействующей."
::msgcat::mcset ru "Whether the Attention Line plugin is loaded." \
"Загружено ли расширение Attention Line."
# vim:ft=tcl:ts=8:sw=4:sts=4:noet
::msgcat::mcset uk \
"Attention Line chat plugin options. This plugin draws horizontal\
line separating read and unread messages in chat windows." \
"Налаштування плагіну Attention Line. Цей плагін відділяє непрочитані\
повідомлення в вікнах розмов від прочитаних горизонтальною лінією."
::msgcat::mcset uk "Plugins options." "Параметри плагінів."
::msgcat::mcset uk "Remove the attention line after it was expired from its chat window." \
"Видалити лінію, що відділяє повідомлення після закінчення часу її дії."
::msgcat::mcset uk \
"Time (in milliseconds) after which unread messages in the currently\
active chat window are considered read and the attention line is considered expired." \
"Час (в мілісекундах), після закінчення якого повідомлення в активному вікні розмови\
вважаються прочитаними, і роздільна лінія вважається недіючою."
::msgcat::mcset uk "Whether the Attention Line plugin is loaded." \
"Чи завантажений плагін Attention Line."
This diff is collapsed.
# $Id: ru.msg 2133 2014-02-07 07:11:37Z sergei $
::msgcat::mcset ru "Plugins options." "Параметры расширений."
::msgcat::mcset ru "Show last move by default." "По умолчанию показывать последний ход."
::msgcat::mcset ru "You" "Вы"
::msgcat::mcset ru "Opponent" "Оппонент"
::msgcat::mcset ru "Battleship plugin options." "Параметры расширения Морской бой."
::msgcat::mcset ru "Battleship pixmaps theme." "Тема фигурок кораблей."
::msgcat::mcset ru "Show tooltips with short instructions." "Показывать всплывающие подсказки к элементам интерфейса."
::msgcat::mcset ru "Battleship Invitation" "Приглашение сыграть в морской бой"
::msgcat::mcset ru "Sending Battleship game invitation to %s (%s)" "Посылаем приглашение сыграть в морской бой с %s (%s)"
::msgcat::mcset ru "I want to move first" "Хочу ходить первым"
::msgcat::mcset ru "I want to move second" "Хочу ходить вторым"
::msgcat::mcset ru "Cancel invitation" "Отменить приглашение"
::msgcat::mcset ru "%s (%s) has refused Battleship invitation: %s" "%s (%s) отказался играть в морской бой: %s"
::msgcat::mcset ru "Battleship Invitation from %s" "Приглашение сыграть в морской бой с %s"
::msgcat::mcset ru "Battleship game invitation from %s (%s) is received." "Получено приглашение сыграть в морской бой с %s (%s)"
::msgcat::mcset ru "%s wants to move first." "%s хочет ходить первым."
::msgcat::mcset ru "%s wants to move second." "%s хочет ходить вторым."
::msgcat::mcset ru "Agree to play" "Согласиться играть"
::msgcat::mcset ru "Refuse to play" "Отказаться играть"
::msgcat::mcset ru "Battleship with %s" "Морской бой с %s"
::msgcat::mcset ru "Show last move" "Показывать последний ход"
::msgcat::mcset ru "Move: " "Ход: "
::msgcat::mcset ru "Propose a draw" "Предложить ничью"
::msgcat::mcset ru "Accept the draw proposal" "Принять предложенную ничью"
::msgcat::mcset ru "Resign the game" "Сдать партию"
::msgcat::mcset ru "History" "Запись партии"
::msgcat::mcset ru "Battleship..." "Морской бой..."
::msgcat::mcset ru "Opponent wins" "Оппонент выиграл"
::msgcat::mcset ru "You win" "Вы выиграли"
::msgcat::mcset ru "Opponent wins (You resigned)" "Оппонент выиграл (Вы сдались)"
::msgcat::mcset ru "You win (Opponent resigned)" "Вы выиграли (Оппонент сдался)"
::msgcat::mcset ru "Impossible draw" "Невозможная ничья"
::msgcat::mcset ru "Draw (You accepted)" "Ничья (Вы приняли)"
::msgcat::mcset ru "Draw (Opponent accepted)" "Ничья (Оппонент принял)"
::msgcat::mcset ru "Press button and make move if you want to propose draw" "Нажмите кнопку и сделайте ход, если хотите предложить ничью"
::msgcat::mcset ru "Press button if you want to accept the draw proposal" "Нажмите кнопку, если хотите принять предложенную ничью"
::msgcat::mcset ru "Press button if you want to resign" "Нажмите кнопку, если хотите сдаться"
::msgcat::mcset ru "\n\n Opponent proposes a draw\n\n" "\n\n Оппонент предлагает ничью\n\n"
::msgcat::mcset ru "\n\n Opponent rejected move:\n %s\n\n" "\n\n Оппонент отверг ход:\n %s\n\n"
::msgcat::mcset ru "Games" "Игры"
::msgcat::mcset ru "Freeze ships position" "Зафиксировать положение кораблей"
::msgcat::mcset ru "My ships" "Мои корабли"
::msgcat::mcset ru "Opponent (after all parties freeze boards)" "Оппонент (после того, как все зафиксируют свои доски)"
::msgcat::mcset ru "Opponent ships" "Корабли оппонента"
::msgcat::mcset ru "Whether the Battleship plugin is loaded." "Загружено ли расширение Морской бой."
::msgcat::mcset ru "You (after all parties freeze boards)" "Вы (после того, как все зафиксируют свои доски)"
::msgcat::mcset ru "\n\n Opponent rejected board:\n %s\n\n" "\n\n Оппонент не принял доску:\n %s\n\n"
::msgcat::mcset ru "\n\n Opponent returned inconrrect hit answer" "\n\n Оппонент вернул неправильный ответ 'попал'"
::msgcat::mcset ru "\n\n Opponent returned incorrect answer" "\n\n Оппонент вернул неправильный ответ"
::msgcat::mcset ru "\n\n Opponent returned incorrect cell seed" "\n\n Оппонент вернул неправильный сид ячейки"
::msgcat::mcset ru "\n\n Opponent returned incorrect destroy answer" "\n\n Оппонент вернул неправильный ответ 'убил'"
::msgcat::mcset ru "\n\n Opponent sent incorrect cell column" "\n\n Оппонент прислал неправильную колонку"
::msgcat::mcset ru "\n\n Opponent sent incorrect cell row" "\n\n Оппонент вернул неправильную строку"
::msgcat::mcset ru "\n\n Opponent sent incorrect cell seed" "\n\n Оппонент вернул неправильный сид ячейки"
::msgcat::mcset ru "\n\n Opponent sent incorrect number of cells" "\n\n Оппонент вернул неправильное число ячеек"
::msgcat::mcset ru "\n\n Opponent rejected accepted draw:\n %s\n\n" "\n\n Оппонент отверг принятие ничьей:\n %s\n\n"
::msgcat::mcset ru "\n\n Opponent sent illegal board" "\n\n Оппонент прислал доску, не удовлетворяющую правилам"
::msgcat::mcset ru "\n Drag and drop ships to desired locations, then click the 'Freeze ships\
position' button. \n Right mouse button switches\
horizontal and vertical ship orientation." "\n Передвиньте корабли, куда хотите, потом нажмите\
кнопку 'Зафиксировать положение кораблей'.\n Правая кнопка мыши переключает вертикальное и\
горизонтальное положение корабля."
<?xml version='1.0' encoding='UTF-8'?>
<!-- $Id: icondef.xml 2133 2014-02-07 07:11:37Z sergei $ -->
<icondef>
<meta>
<name>Copybook</name>
<version>1.0</version>
<description>Battleship Copybook Theme</description>
<creation>2006-02-02</creation>
</meta>
<icon>
<image xmlns='tkimage'>battleship/field</image>
<object mime="image/gif">field.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/field/shaded</image>
<object mime="image/gif">field-shaded.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/hit</image>
<object mime="image/gif">hit.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/miss</image>
<object mime="image/gif">miss.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/submarine/horizontal</image>
<object mime="image/gif">submarine-h.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/submarine/vertical</image>
<object mime="image/gif">submarine-v.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/cruiser/horizontal</image>
<object mime="image/gif">cruiser-h.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/cruiser/vertical</image>
<object mime="image/gif">cruiser-v.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/destroyer/horizontal</image>
<object mime="image/gif">destroyer-h.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/destroyer/vertical</image>
<object mime="image/gif">destroyer-v.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/battleship/horizontal</image>
<object mime="image/gif">battleship-h.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/battleship/vertical</image>
<object mime="image/gif">battleship-v.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/carrier/horizontal</image>
<object mime="image/gif">carrier-h.gif</object>
</icon>
<icon>
<image xmlns='tkimage'>battleship/carrier/vertical</image>
<object mime="image/gif">carrier-v.gif</object>
</icon>
</icondef>
# $Id: proto 2133 2014-02-07 07:11:37Z sergei $
Request:
<iq type='set' to='a@b.c' id='id1'>