summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosep Torra <n770galaxy@gmail.com>2013-01-04 09:30:48 +0100
committerJosep Torra <n770galaxy@gmail.com>2013-01-04 09:30:48 +0100
commit1f80a252d48b3f6eed4469d60c7d109de46eb362 (patch)
treebac9e7d498164f96bf4fea368c3776d58004f287
Initial commit
-rw-r--r--Makefile99
-rw-r--r--README26
-rw-r--r--data/ClassicBW.pngbin0 -> 20018 bytes
-rw-r--r--data/ClassicColor.pngbin0 -> 47757 bytes
-rw-r--r--data/ClassicWB.pngbin0 -> 21598 bytes
-rw-r--r--data/com.nokia.nethack.service3
-rw-r--r--data/gtk2hackrc29
-rw-r--r--data/mapbg.xpm186
-rw-r--r--data/nethack.conf8
-rw-r--r--data/nethack.desktop-maemo112
-rw-r--r--data/nethack.desktop-maemo212
-rw-r--r--data/nethack.desktop-maemo415
-rw-r--r--data/pkg_nethack.16.pngbin0 -> 199 bytes
-rw-r--r--data/pkg_nethack.26.pngbin0 -> 293 bytes
-rw-r--r--data/pkg_nethack.40.pngbin0 -> 363 bytes
-rw-r--r--data/pkg_nethack.64.pngbin0 -> 245 bytes
-rw-r--r--data/tiles32.pngbin0 -> 150234 bytes
-rw-r--r--debian-maemo1/changelog19
-rw-r--r--debian-maemo1/compat1
-rw-r--r--debian-maemo1/control11
-rw-r--r--debian-maemo1/copyright134
-rw-r--r--debian-maemo1/nethack.links1
-rwxr-xr-xdebian-maemo1/rules98
-rw-r--r--debian-maemo2/changelog19
-rw-r--r--debian-maemo2/compat1
-rw-r--r--debian-maemo2/control20
-rw-r--r--debian-maemo2/copyright134
-rw-r--r--debian-maemo2/files1
-rw-r--r--debian-maemo2/nethack.links1
-rwxr-xr-xdebian-maemo2/postinst13
-rwxr-xr-xdebian-maemo2/rules99
-rw-r--r--debian-maemo4/changelog19
-rw-r--r--debian-maemo4/compat1
-rw-r--r--debian-maemo4/control13
-rw-r--r--debian-maemo4/copyright134
-rw-r--r--debian-maemo4/files1
-rw-r--r--debian-maemo4/nethack.links1
-rwxr-xr-xdebian-maemo4/postinst13
-rwxr-xr-xdebian-maemo4/rules99
-rwxr-xr-xdist.sh42
-rw-r--r--patches/3.4.3-GNOME-support.patch28
-rw-r--r--patches/3.4.3-X-support.patch26
-rw-r--r--patches/3.4.3-bison.patch18
-rw-r--r--patches/3.4.3-default-options.patch23
-rw-r--r--patches/3.4.3-gtk2.patch149
-rw-r--r--patches/3.4.3-maemo1.patch11
-rw-r--r--patches/3.4.3-maemo2.patch7
-rw-r--r--patches/3.4.3-maemo4.patch28
-rw-r--r--patches/cflags.patch11
-rw-r--r--patches/dot.nethackrc20
-rw-r--r--patches/gtk2-alt.patch101
-rw-r--r--patches/gtk2/ChangeLog26
-rw-r--r--patches/gtk2/README34
-rwxr-xr-xpatches/gtk2/copy_trans.sh13
-rw-r--r--patches/gtk2/equip.pngbin0 -> 2478 bytes
-rwxr-xr-xpatches/gtk2/extract-pot.sh1
-rw-r--r--patches/gtk2/g2bind.c1138
-rw-r--r--patches/gtk2/g2bind.h66
-rw-r--r--patches/gtk2/g2equip.c235
-rw-r--r--patches/gtk2/g2equip.h37
-rw-r--r--patches/gtk2/g2i18n.h32
-rw-r--r--patches/gtk2/g2invent.c216
-rw-r--r--patches/gtk2/g2invent.h43
-rw-r--r--patches/gtk2/g2main.c1092
-rw-r--r--patches/gtk2/g2main.h79
-rw-r--r--patches/gtk2/g2map.c676
-rw-r--r--patches/gtk2/g2map.h70
-rw-r--r--patches/gtk2/g2marsh.c224
-rw-r--r--patches/gtk2/g2marsh.h43
-rw-r--r--patches/gtk2/g2menu.c719
-rw-r--r--patches/gtk2/g2menu.h51
-rw-r--r--patches/gtk2/g2mesg.c189
-rw-r--r--patches/gtk2/g2mesg.h39
-rw-r--r--patches/gtk2/g2minipad.c515
-rw-r--r--patches/gtk2/g2minipad.h45
-rw-r--r--patches/gtk2/g2player.c643
-rw-r--r--patches/gtk2/g2player.h15
-rw-r--r--patches/gtk2/g2status.c1092
-rw-r--r--patches/gtk2/g2status.h86
-rw-r--r--patches/gtk2/g2text.c152
-rw-r--r--patches/gtk2/g2text.h42
-rw-r--r--patches/gtk2/g2xpms.h1471
-rw-r--r--patches/gtk2/gen_marsh_input5
-rw-r--r--patches/gtk2/gkt2hackrc27
-rw-r--r--patches/gtk2/gold24.pngbin0 -> 1407 bytes
-rw-r--r--patches/gtk2/gtk2hack.pngbin0 -> 693 bytes
-rw-r--r--patches/gtk2/icons/Makefile55
-rw-r--r--patches/gtk2/icons/hack-stock-pixbufs.h2664
-rw-r--r--patches/gtk2/icons/stock-icons.list58
-rw-r--r--patches/gtk2/icons/stock-kick-16.pngbin0 -> 879 bytes
-rw-r--r--patches/gtk2/icons/stock-kick-24.pngbin0 -> 1083 bytes
-rw-r--r--patches/gtk2/icons/stock-open-16.pngbin0 -> 735 bytes
-rw-r--r--patches/gtk2/icons/stock-open-24.pngbin0 -> 1135 bytes
-rw-r--r--patches/gtk2/icons/stock-zap-16.pngbin0 -> 324 bytes
-rw-r--r--patches/gtk2/icons/stock-zap-24.pngbin0 -> 775 bytes
-rw-r--r--patches/gtk2/icons/stock_down_arrow_24.pngbin0 -> 559 bytes
-rw-r--r--patches/gtk2/icons/stock_down_left_arrow_24.pngbin0 -> 676 bytes
-rw-r--r--patches/gtk2/icons/stock_down_right_arrow_24.pngbin0 -> 700 bytes
-rw-r--r--patches/gtk2/icons/stock_eat_16.pngbin0 -> 556 bytes
-rw-r--r--patches/gtk2/icons/stock_eat_24.pngbin0 -> 948 bytes
-rw-r--r--patches/gtk2/icons/stock_inv_16.pngbin0 -> 416 bytes
-rw-r--r--patches/gtk2/icons/stock_inv_24.pngbin0 -> 489 bytes
-rw-r--r--patches/gtk2/icons/stock_left_arrow_24.pngbin0 -> 567 bytes
-rw-r--r--patches/gtk2/icons/stock_right_arrow_24.pngbin0 -> 584 bytes
-rw-r--r--patches/gtk2/icons/stock_search_16.pngbin0 -> 929 bytes
-rw-r--r--patches/gtk2/icons/stock_search_24.pngbin0 -> 1712 bytes
-rw-r--r--patches/gtk2/icons/stock_self_24.pngbin0 -> 656 bytes
-rw-r--r--patches/gtk2/icons/stock_spellbook_16.pngbin0 -> 979 bytes
-rw-r--r--patches/gtk2/icons/stock_spellbook_24.pngbin0 -> 1110 bytes
-rw-r--r--patches/gtk2/icons/stock_throw_16.pngbin0 -> 525 bytes
-rw-r--r--patches/gtk2/icons/stock_throw_24.pngbin0 -> 256 bytes
-rw-r--r--patches/gtk2/icons/stock_up_arrow_24.pngbin0 -> 554 bytes
-rw-r--r--patches/gtk2/icons/stock_up_left_arrow_24.pngbin0 -> 721 bytes
-rw-r--r--patches/gtk2/icons/stock_up_right_arrow_24.pngbin0 -> 691 bytes
-rw-r--r--patches/gtk2/icons/stock_whatshere_16.pngbin0 -> 240 bytes
-rw-r--r--patches/gtk2/icons/stock_whatshere_24.pngbin0 -> 518 bytes
-rw-r--r--patches/gtk2/icons/stock_whatsthere_16.pngbin0 -> 864 bytes
-rw-r--r--patches/gtk2/icons/stock_whatsthere_24.pngbin0 -> 1413 bytes
-rw-r--r--patches/gtk2/pad_clicked.pngbin0 -> 24890 bytes
-rw-r--r--patches/gtk2/pad_unclicked.pngbin0 -> 26301 bytes
-rw-r--r--patches/gtk2/po/POTFILES.in0
-rw-r--r--patches/gtk2/po/de_DE.po710
-rw-r--r--patches/gtk2/po/de_DE/LC_MESSAGES/gtk2hack.mobin0 -> 8437 bytes
-rw-r--r--patches/gtk2/po/gtk2hack.pot702
-rw-r--r--patches/gtk2/po/it_IT.po710
-rw-r--r--patches/gtk2/po/it_IT/LC_MESSAGES/gtk2hack.mobin0 -> 8305 bytes
-rw-r--r--patches/gtk2/po/pt_BR.po710
-rw-r--r--patches/gtk2/po/pt_BR/LC_MESSAGES/gtk2hack.mobin0 -> 7890 bytes
-rw-r--r--patches/gtk2/popup.c84
-rwxr-xr-xpatches/gtk2/rebuild_trans.sh20
-rwxr-xr-xpatches/nethack.sh-maemo1165
-rwxr-xr-xpatches/nethack.sh-maemo2190
-rwxr-xr-xpatches/nethack.sh-maemo4190
-rw-r--r--patches/winGtk2.h12
-rwxr-xr-xrun.sh8
-rwxr-xr-xrun_gdb.sh8
136 files changed, 17089 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..dcbbe6c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,99 @@
+# Nethack osso build dir
+# ======================
+# Ralf Engels <ralf-engels@gmx.de>
+# Josep Torra <jtorra@uoc.edu>
+# Copyright: GPL
+
+
+NETHACK_VERSION_SHORT = 343
+NETHACK_VERSION = 3.4.3
+
+DBUS_VERSION_MAJOR = $(shell pkg-config dbus-1 --modversion | awk '{split($$1,t,/\./) ; print t[1]}')
+DBUS_VERSION_MINOR = $(shell pkg-config dbus-1 --modversion | awk '{split($$1,t,/\./) ; print t[2]}')
+
+HILDON_VERSION_MAJOR=$(shell pkg-config hildon-1 --modversion | awk '{split($$1,t,/\./) ; print t[1]}')
+HILDON_VERSION_MINOR=$(shell pkg-config hildon-1 --modversion | awk '{split($$1,t,/\./) ; print t[2]}')
+
+MAEMO_VERSION = 1
+ifneq ($(DBUS_VERSION_MINOR), 23)
+ MAEMO_VERSION = 2
+endif
+
+MAEMO_FLAGS = -DHILDON -DMAEMO${MAEMO_VERSION}
+
+ifeq ($(HILDON_VERSION_MAJOR), 1)
+ MAEMO_FLAGS += -DHILDON1
+ MAEMO_VERSION = 4
+endif
+
+all: nethack-${NETHACK_VERSION}/src/nethack
+
+# -- unpack the directory
+nethack-${NETHACK_VERSION}: nethack-${NETHACK_VERSION_SHORT}-src.tgz
+ tar -xzf $<
+ touch $@
+
+# -- copy the makefile
+nethack-${NETHACK_VERSION}/Makefile: nethack-${NETHACK_VERSION}
+ cd $</sys/unix; \
+ source setup.sh
+
+# -- copy the gtk2 files
+nethack-${NETHACK_VERSION}/win/gtk2: patches/gtk2
+ cp -r $< $@
+
+nethack-${NETHACK_VERSION}/src/winGtk2.h: patches/winGtk2.h
+ cp $< $@
+
+# -- apply patches
+nethack-${NETHACK_VERSION}/patched: nethack-${NETHACK_VERSION}/Makefile \
+ patches/3.4.3-default-options.patch \
+ patches/3.4.3-bison.patch \
+ patches/3.4.3-X-support.patch \
+ patches/3.4.3-gtk2.patch \
+ patches/3.4.3-maemo${MAEMO_VERSION}.patch \
+ patches/cflags.patch
+ patch -p0 -d ${dir $<} <${word 2,$^}
+ patch -p0 <${word 3,$^}
+ patch -p0 -d ${dir $<} <${word 4,$^}
+ patch -p0 -d ${dir $<} <${word 5,$^}
+ patch -p0 -d ${dir $<} <${word 6,$^}
+ patch -p0 -d ${dir $<} <${word 7,$^}
+ touch $@
+
+# -- build the executable
+nethack-${NETHACK_VERSION}/src/nethack: nethack-${NETHACK_VERSION}/patched nethack-${NETHACK_VERSION}/win/gtk2 nethack-${NETHACK_VERSION}/src/winGtk2.h
+ cd nethack-${NETHACK_VERSION}; \
+ make MAEMO_FLAGS="${MAEMO_FLAGS}" CFLAGS_DEB="$(CFLAGS_DEB)"
+
+# -- install
+install: nethack-${NETHACK_VERSION}/src/nethack
+ cd nethack-${NETHACK_VERSION}; \
+ make install
+ mkdir -p $(PREFIX)/share/applications/hildon
+ mkdir -p $(PREFIX)/share/icons/hicolor/26x26/hildon
+ mkdir -p $(PREFIX)/share/icons/hicolor/40x40/hildon
+ mkdir -p $(PREFIX)/share/icons/hicolor/scalable/hildon
+ cp data/nethack.desktop-maemo$(MAEMO_VERSION) $(PREFIX)/share/applications/hildon/nethack.desktop
+ cp data/pkg_nethack.26.png $(PREFIX)/share/icons/hicolor/26x26/hildon/pkg_nethack.png
+ cp data/pkg_nethack.40.png $(PREFIX)/share/icons/hicolor/40x40/hildon/pkg_nethack.png
+ cp data/pkg_nethack.64.png $(PREFIX)/share/icons/hicolor/scalable/hildon/pkg_nethack.png
+ mkdir -p $(PREFIX)/bin
+ cp patches/nethack.sh-maemo$(MAEMO_VERSION) $(PREFIX)/bin/nethack.sh
+ cp patches/dot.nethackrc $(PREFIX)/games/lib/nethackdir/.
+ cp data/mapbg.xpm $(PREFIX)/games/lib/nethackdir/.
+ cp data/gtk2hackrc $(PREFIX)/games/lib/nethackdir/.
+ cp data/tiles32.png $(PREFIX)/games/lib/nethackdir/.
+ cp data/ClassicBW.png $(PREFIX)/games/lib/nethackdir/.
+ cp data/ClassicWB.png $(PREFIX)/games/lib/nethackdir/.
+ cp data/ClassicColor.png $(PREFIX)/games/lib/nethackdir/.
+ if [ "$(MAEMO_VERSION)" = "1" ]; then \
+ cp data/nethack.service $(PREFIX)/share/applications/hildon/. ; \
+ mkdir -p $(PREFIX)/etc/osso-backup/applications ; \
+ cp data/nethack.conf $(PREFIX)/etc/osso-backup/applications/. ; \
+ fi
+
+clean:
+ rm -rf nethack-${NETHACK_VERSION}
+
+.phony: nethack nethack-patches clean
diff --git a/README b/README
new file mode 100644
index 0000000..02c95b9
--- /dev/null
+++ b/README
@@ -0,0 +1,26 @@
+Nethack osso build dir
+======================
+
+Josep Torra <jtorra@uoc.edu>
+Ralf Engels <ralf-engels@gmx.de>
+Copyright: GPL
+
+
+How to build
+----------
+
+1. get the nethack sources. They are not supplied with this package.
+Copy the nethack .tgz to this directory.
+Currently nethack 3.4.3 is supported.
+
+2. use dist.sh script to generate the binaries
+3. use run.sh to test in sbox
+
+
+Known bugs
+----------
+
+- Some menus still have shortcuts
+- Translation of UI not complete
+- Saved games are not stored (is this bad?)
+- Power management messages are not handled
diff --git a/data/ClassicBW.png b/data/ClassicBW.png
new file mode 100644
index 0000000..6796d86
--- /dev/null
+++ b/data/ClassicBW.png
Binary files differ
diff --git a/data/ClassicColor.png b/data/ClassicColor.png
new file mode 100644
index 0000000..5ba68cf
--- /dev/null
+++ b/data/ClassicColor.png
Binary files differ
diff --git a/data/ClassicWB.png b/data/ClassicWB.png
new file mode 100644
index 0000000..4761777
--- /dev/null
+++ b/data/ClassicWB.png
Binary files differ
diff --git a/data/com.nokia.nethack.service b/data/com.nokia.nethack.service
new file mode 100644
index 0000000..931bab8
--- /dev/null
+++ b/data/com.nokia.nethack.service
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=com.nokia.nethack
+Exec=/usr/bin/nethack.sh
diff --git a/data/gtk2hackrc b/data/gtk2hackrc
new file mode 100644
index 0000000..17902d9
--- /dev/null
+++ b/data/gtk2hackrc
@@ -0,0 +1,29 @@
+# pixmap_path "<dir 1>:<dir 2>:<dir 3>:..."
+#
+pixmap_path "/usr/local/games/lib/nethackdir:/var/install/usr/local/games/lib/nethackdir"
+
+style "map"
+{
+ bg_pixmap[NORMAL] = "mapbg.xpm"
+ fg[NORMAL] = { 1.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.3, 0.3, 0.3 }
+ bg[SELECTED] = { 0.5, 0.5, 0.5 }
+ bg[SELECTED] = { 0.5, 0.5, 0.5 }
+}
+
+style "text"
+{
+ font_name = "Courier 10"
+}
+
+style "status"
+{
+ font_name = "Sans 8"
+}
+
+
+widget "*status window.*" style "status"
+widget "*message window.*" style "text"
+widget "*text window.*" style "text"
+#widget "*menu dialog.*" style "text"
+widget "*map window.*" style "map" \ No newline at end of file
diff --git a/data/mapbg.xpm b/data/mapbg.xpm
new file mode 100644
index 0000000..d8eb4e0
--- /dev/null
+++ b/data/mapbg.xpm
@@ -0,0 +1,186 @@
+/* XPM */
+static char * mapbg_xpm[] = {
+"96 96 87 1",
+" g None",
+". g #737373",
+"+ g #818181",
+"@ g #858585",
+"# g #898989",
+"$ g #7C7C7C",
+"% g #7A7A7A",
+"& g #727272",
+"* g #707070",
+"= g #575757",
+"- g #5F5F5F",
+"; g #7B7B7B",
+"> g #7F7F7F",
+", g #838383",
+"' g #878787",
+") g #9B9B9B",
+"! g #909090",
+"~ g #8E8E8E",
+"{ g #848484",
+"] g #808080",
+"^ g #696969",
+"/ g #717171",
+"( g #787878",
+"_ g #797979",
+": g #868686",
+"< g #828282",
+"[ g #8C8C8C",
+"} g #979797",
+"| g #A6A6A6",
+"1 g #A9A9A9",
+"2 g #A3A3A3",
+"3 g #8F8F8F",
+"4 g #7D7D7D",
+"5 g #757575",
+"6 g #6B6B6B",
+"7 g #6D6D6D",
+"8 g #888888",
+"9 g #7E7E7E",
+"0 g #777777",
+"a g #656565",
+"b g #676767",
+"c g #666666",
+"d g #6E6E6E",
+"e g #8B8B8B",
+"f g #8A8A8A",
+"g g #6A6A6A",
+"h g #747474",
+"i g #919191",
+"j g #5E5E5E",
+"k g #474747",
+"l g #535353",
+"m g #999999",
+"n g #8D8D8D",
+"o g #686868",
+"p g #6F6F6F",
+"q g #767676",
+"r g #939393",
+"s g #545454",
+"t g #626262",
+"u g #4D4D4D",
+"v g #5D5D5D",
+"w g #6C6C6C",
+"x g #5C5C5C",
+"y g #646464",
+"z g #5A5A5A",
+"A g #5B5B5B",
+"B g #636363",
+"C g #989898",
+"D g #9A9A9A",
+"E g #616161",
+"F g #505050",
+"G g #949494",
+"H g #9D9D9D",
+"I g #606060",
+"J g #585858",
+"K g #929292",
+"L g #555555",
+"M g #595959",
+"N g #959595",
+"O g #969696",
+"P g #9E9E9E",
+"Q g #9C9C9C",
+"R g #9F9F9F",
+"S g #515151",
+"T g #565656",
+"U g #525252",
+"V g #A5A5A5",
+"..+@#$%.&*==-;>,')!~{@]^/(,;(,__(,:::<[}|1234%_&;56.7<8#9>_0a&bacd//%ef!8'4%%>_$]_(g4h44<(%'i{9/",
+"/4>,];45gjklj_;@#mn[,{4o7p(*.0/.q4{{{4'!rr3,**&&4&p/p,88<:9;.@p-sb.h;::#4+%5hh448;<%{$;{_&*@ri,%",
+"aq9':>$hotuvc($+ei@<04(oowhqw&w05>+@9]{n:'>>.*.5]h.5&$]9<_(q]!%oxgq_$<@@4_.p50;p]%#<3i+>cdpe[8/p",
+"b7/4:+9&ayzph4;;8[{{0]qgb*0qbp*;50%'{:>:<<;_&c7p_p(>$0;_3'e+:!46Ac_$;q%%q(ptyp;.<'~:f)ir0>;[:,*5",
+"&559{{8%ga6>>];%4,q/^q.Bo&%&od&%5_0{{+0$<{_wbjd/%ph;.*p.f''$>{;h&;+40/5pddw-xp;h$<#$+CmD#f'@90d%",
+"$(&0;$<_76q:99.q6$.0w0/^/(;bbwd/&.0'3f_5$<>*6cq_%/p0.&d.@e:4h9q$98@4.6wtEEbvFy&_q+3:8GH2m[@__5(,",
+"@>;;(05*w*h{;]09^(&+q0wo*..cg6d*d.0{3[9q0<,%dg0+]pyg7qwp54(qp%;#~n45*wp-Ix^yzg0_04r##{f}mi@q55]n",
+"844:4/w6w*04(90>^%qi@+hppg6g*./*/59{e[++q<<:56d4{(6w.$&dwdw/w$_'>4/w&7&vJJtwtyp5<]!:e;>'ii[,_5+3",
+"+q4:$h76/59>$>(%Bhde@@0.gobh>9%.0(>9@8#f4+4{56c0f'(wh9h7cccwp%;+5&^65h;^BEy7^g*/>_<;+5(,KGif$p0>",
+"0&(,9_5&50>4]>$_b&w>]88{&bc(:,%0$4]q048e44q<&&tp>',h5;_dbyggg6g*bgcp$+{qg^yw/.%7(d$08494f[{>%5&&",
+"77588]5d*q>;9q;0g7^qq<'e&aB_@+_(0%%5%@[85_*>p.^q+_$7*hq*^b.wcEjav-Id;4>0.*w75]'//^;5@,#{+(gdq9(&",
+"d&_f8@;5p&(;>.$/&^a7.]~3%yt_+4_5_4,;9@n@p5w>gq.;.b.7dg/&go/wvLLA=Mx6_4%55qpb7%{/7o4;f{e0dBzJa],(",
+";5>fn#];q(;9]q9p/6g^^/${%gg({]+(4]']<'',70w$p%<i+^yy*/((wg&5waIItj-B5*&d9$.ay.$5*o.0'e3$wMzsB9!8",
+"@;],n[8,,@''<49gga^d*5%9%/7&9+@%+:~,@@f,(;5>5,]!5dIg&qq566p5/6o^pggw05q&>;.EIwgw6ww5+,9db-^jB;!~",
+"n:+]~[n@f8#8'897bgdq5$4+$5*&;]]>{ne@{ef8,8]{%f]3hw-o.%9_.d*.(0h/57w6q5%q+40^a^y6*wb/,:+05d%d*>NO",
+"{e#[~i!,e8~['<96BB*;%<490hp54@4%$8f{''[f!O!n,N[ih.7/p5;%;.&gg/..pw*dh.%($%q6bbxy65&h$5q7(q{;_4,@",
+"_n'3#Gi@@+~n!f,qggd_;<4<$$q44<q(h99>,]@<n}m}iPG~/7d&/&(_]05gd%;q6gw^d705%%h*aa-tb&%49h;h>*$(>%.&",
+"d:<[+fff:+'fn3@46oc*($5_%9h_9+__0$>9](<+3iPQHRmi%hwpo6gd(/.bg000^^^b^aww../wbbt-B*9_q6.d0wdp_$o^",
+"xh(+h',8%.9'ii88&7I7_]49$450($04_<]@@]f]':rr~G!n$%p7ycIo.w/o.((qggo66aaa^opdw6gEB^>5&bh*wA^bh.^j",
+"Lwh+5@8n4_4~Gmf#h5b*.($4(hw/_;9++8,n[n~e[fnn:#f!:,_&bcBo^g*7&._4q7Ba^oyEctgBw7*Bab0c7g$0^tbEg&.t",
+"=o*>+![:5(_:fi#89<q__$:]9_(;;_%4$,4@,'en3i[n<#,'%9>0gab6^^dph*q$$.a^oobBaxaIgp&bBbht-t5hgbh^^g*b",
+"Bpd+'!:]0]({f~>.&;4+9%+9;__,]9>]$_p$;'#OOOiC3e>>qq/7^d&.6^g^gg._(*y6^wdwpBby6d6yad.jJt&57&&^c&q(",
+"o&o]{!]575h%<907_+,<<]<>44+@@,++%_7h.<#GNNrO}i{$h5bba&5q/&6Eyy*6gww&oy7&06*7pwwgcow-Jvcbopqpa^6_",
+"y*74;+%5*5%(<qpBh>'8{#@f44%<,:'8];7q%e[mKK#~r~8,+>dp/;$(q_7EIb.d/hh*wo0(;/5.*bb^^oovxjE--.0pBo6&",
+"6(._0_95q6;(e406>e3:,ne3]99{@,{@>$&_%e[)![<'ie{>+<q5&0q7opyx-*](%%%&*^dw/d05&y7pptjzx-zAA*_.dp75",
+"p_45(d0_$g.([<_6&_{+8G}K+9+',]{[#>0]9[{N:+]!Gn9+]+9_$$$pggzMvh90(.0h5d/&5&;<>dd*0pgjMj-oo(%w7*ww",
+"w*%h%dh;%p&+ri#5/p%5>8i@_54<,]>>9__:{n@~9h$3mr>%(_/.;8>pow-yBq_.*^p/.dp505%,>wh(<0*wBbBdd_.7ghp6",
+"jy./_gw%]_q${9](.wq&%9n+(d0_$;;,''<',,]:>;fPPO%qh9.$<K<_._g*a*/5q6p&(/(>>5h;%h;+@_p*a^b&h$&6adyA",
+"tcp/(^w0>_&d.5+9;5$q5/,>;6.%+;h(,8:@9;9e#{:O}r4;$<h>,N<9&;5$7/.>+5qh]_9$%*ba7&+@@$hq6ddqq0/*w/by",
+"-^bw.^g&%*gbd7594>+$0/<@@.09,%(]!3n,;_:!K8eiin%]8~9],~]$5;_9/.h],$<,e+@>+*bb4e['>$;0gdq>%h5h&^zj",
+"Eb-cbc7h56^wpp&4(hh(5w<[i+]8#4(0<'rO##fi3>4]3r'[~e+,f!95/0%4_94]%;,@n:3{,.*/@f'$9$>_h___*6q(qoAy",
+"yavytao/pog7dab.5&h..g,e}3~[:$(.>'3K#r333>'')m!e3n<<:f>5q_$$0$9'99>@8,e@@_q$@#<%4&q&q_h*ob&;(7Iy",
+"dpd7By^h&g^goaydd6gBob9:!~!~3<4%@i~i@i8f@]:[ON3~f'@::@95.h_9q_]~8+9<#8e<4055_09;{&p6(0*ayyp_(.cb",
+"66*wbcwq.ocg^b6p7acEg^h(<#e#8@>#im''<n+,'f33G3f',]]8:%q5++,9hd93i@>,'@]4;_%*hp>9f$q7&hhw6b*;$q^E",
+"EB&76gh]%**q0..*yvIb7w6p5%$4>+:NO}:];4;9+<>8:8><;(<~e;;+']$0.*,[!,<'{',<+(;7(p4]f8_&wh(/&&_9$_bM",
+"M=by^6d(*pp_$p.doM-*;qgog_]9;+[)ri>$($__,<+;@,,>_q>~~$$4@];.&hfe~+{8+999+.>h>0],8e4p^d&h(%(0%(6J",
+"Ixwawp75hq.%]&hw^-^_<$w^7]#{],!mGr9p^d0&_(<@:;9$_(,~e<[f:;_5h%!!!'f[{+]<#4@9@<]'{@56pd./($*p&hpS",
+"ot*a*hdwg67/$7h7/y65]%g/(~n[@#nree_&7705<>:'n+<'8@'e';]_%(9%;$Kn3@Kr38@],$~e[{$:>,;.(d&h9<wg7**S",
+"*^_g7.*dww*7%/$5(^.q4hc*5@>+@n~f,@<;.6h5<<er!{9!3[<8+9,+4;+_%+N[@,r)Gf{::,'e[{_+%4;44.5(>9d7p&hL",
+"q*(77*d6o^pghp$94.gp/(bdd(0%@'~{9(4>5*$@e,'e'8;i,'_+9]]4q%(._8m#4_[COn]+;$]33:($%9]@4.h]'<0&*7*B",
+"&d.**h..7w*/h5<f]5BE-/7wac&.8#K8%q5,_$>@+$<@@{>'($q;9,n8@%/cd:G3+,~G~'%$%9+nn84]4(;95g6+8{qp7bw^",
+".p/($;_$0//hp6hf](AEM77&&d_p@9[+.*6<;+]>qh%<+,{@$;>4>@K~80dy/<3[#'nKG}[@4;@i!#4,<$$0h/0:{45__*6d",
+";509;$({0dcp*^70(/IxJIp/_p%d%.4%dwg+:[+(70;{<:''f[f$_<[fn;_y^g(#!~'#!Kiee,f~3e:,40%./5>[@]&qh&/0",
+"<$4@;9.<0po*0BIa/.cbEy/9!@@q$*&77d.:eG'qo_,{9f#~fO3:+'f':+<paj.8Gf:3D}NK}i~~@@>9..(0q${'>0h(q&.;",
+"$_q4.hd9&6g04bjMa/.hg6(<e0>4@%gww.(+!Cn_d9###r8#+rn##nef~8>BTuy]O~f~K:9+KQOn<8>;pq;49;<]{90qdw70",
+".qq4_$5<.h_{9w-tt5._c6_!C+>{[@*.g/0+~![(p0':Nm}n,[~~O!e{<%oTULw4Oi!3e4*h[OOn{80(*q4+84{+'<4(66pd",
+"*($<4%%<5q;@/gtbc&q%70<rK$(<ff*.g/(_3{@h(;{:Ke8(0*]>n,+49%ElMa*53OG[]%7p{3G~eG9$h>,,e'3erG#>7*&p",
+"h%0+4ee3>@,{6do^bdp6g_<NGi,<]:$<9(q7>(+>@9<'m3i_;/<<3,4*ddJLj(>,!QG3:](w;<38:n94h;+{f,[KV1R:*&%.",
+";56.7<8#9>_0a&bacd//%ef!8'4%%>_$]_(g4h44<(%'i{9/..+@#$%.&*==-;>,')!~{@]^/(,;(,__(,:::<[}|1234%_&",
+"4&p/p,88<:9;.@p-sb.h;::#4+%5hh448;<%{$;{_&*@ri,%/4>,];45gjklj_;@#mn[,{4o7p(*.0/.q4{{{4'!rr3,**&&",
+"]h.5&$]9<_(q]!%oxgq_$<@@4_.p50;p]%#<3i+>cdpe[8/paq9':>$hotuvc($+ei@<04(oowhqw&w05>+@9]{n:'>>.*.5",
+"_p(>$0;_3'e+:!46Ac_$;q%%q(ptyp;.<'~:f)ir0>;[:,*5b7/4:+9&ayzph4;;8[{{0]qgb*0qbp*;50%'{:>:<<;_&c7p",
+"%ph;.*p.f''$>{;h&;+40/5pddw-xp;h$<#$+CmD#f'@90d%&559{{8%ga6>>];%4,q/^q.Bo&%&od&%5_0{{+0$<{_wbjd/",
+"%/p0.&d.@e:4h9q$98@4.6wtEEbvFy&_q+3:8GH2m[@__5(,$(&0;${;w^q:99.q6$.0w0/^/(;bbwd/&.0'3f_5$<>*6cq_",
+"]pyg7qwp54(qp%;#~n45*wp-Ix^yzg0_04r##{f}mi@q55]n@>;;(%>%oo.@;]09^(&+q0wo*..cg6d*d.0{3[9q0<,%dg0+",
+"{(6w.$&dwdw/w$_'>4/w&7&vJJtwtyp5<]!:e;>'ii[,_5+3844:<9h6tc/;(90>^%qi@+hppg6g*./*/59{e[++q<<:56d4",
+"f'(wh9h7cccwp%;+5&^65h;^BEy7^g*/>_<;+5(,KGif$p0>+q4'](7ca60;4](%Bhde@@0.gobh>9%.0(>9@8#f4+4{56c0",
+">',h5;_dbyggg6g*bgcp$+{qg^yw/.%7(d$08494f[{>%5&&0&(,>>_/d/9]:,$_b&w>]88{&bc(:,%0$4]q048e44q<&&tp",
+"+_$7*hq*^b.wcEjav-Id;4>0.*w75]'//^;5@,#{+(gdq9(&775<',9h&h4>+;;0g7^qq<'e&aB_@+_(0%%5%@[85_*>p.^q",
+".b.7dg/&go/wvLLA=Mx6_4%55qpb7%{/7o4;f{e0dBzJa],(d&_:eif9dgp(+($/&^a7.]~3%yt_+4_5_4,;9@n@p5w>gq.;",
+"+^yy*/((wg&5waIItj-B5*&d9$.ay.$5*o.0'e3$wMzsB9!8;5>:~3:;d7/%<99p/6g^^/${%gg({]+(4]']<'',70w$p%<i",
+"5dIg&qq566p5/6o^pggw05q&>;.EIwgw6ww5+,9db-^jB;!~@;]]#i[@;$>{:,9gga^d*5%9%/7&9+@%+:~,@@f,(;5>5,]!",
+"hw-o.%9_.d*.(0h/57w6q5%q+40^a^y6*wb/,:+05d%d*>NOn:+9{~K8:<e3!f97bgdq5$4+$5*&;]]>{ne@{ef8,8]{%f]3",
+"h.7/p5;%;.&gg/..pw*dh.%($%q6bbxy65&h$5q7(q{;_4,@{e#[n}De8,~~8<96BB*;%<490hp54@4%$8f{''[f!O!n,N[i",
+"/7d&/&(_]05gd%;q6gw^d705%%h*aa-tb&%49h;h>*$(>%.&_n'3#NN#{4~n!f,qggd_;<4<$$q44<q(h99>,]@<n}m}iPG~",
+"%hwpo6gd(/.bg000^^^b^aww../wbbt-B*9_q6.d0wdp_$o^d:<[+fff:+'fn3@46oc*($5_%9h_9+__0$>9](<+3iPQHRmi",
+"$%p7ycIo.w/o.((qggo66aaa^opdw6gEB^>5&bh*wA^bh.^jxh(+h',8%.9'ii88&7I7_]49$450($04_<]@@]f]':rr~G!n",
+":,_&bcBo^g*7&._4q7Ba^oyEctgBw7*Bab0c7g$0^tbEg&.tLwh+5@8n4_4~Gmf#h5b*.($4(hw/_;9++8,n[n~e[fnn:#f!",
+"%9>0gab6^^dph*q$$.a^oobBaxaIgp&bBbht-t5hgbh^^g*b=o*>+![:5(_:fi#89<q__$:]9_(;;_%4$,4@,'en3i[n<#,'",
+"qq/7^d&.6^g^gg._(*y6^wdwpBby6d6yad.jJt&57&&^c&q(Bpd+'!:]0]({f~>.&;4+9%+9;__,]9>]$_p$;'#OOOiC3e>>",
+"h5bba&5q/&6Eyy*6gww&oy7&06*7pwwgcow-Jvcbopqpa^6_o&o]{!]575h%<907_+,<<]<>44+@@,++%_7h.<#GNNrO}i{$",
+"+>dp/;$(q_7EIb.d/hh*wo0(;/5.*bb^^oovxjE--.0pBo6&y*74;+%5*5%(<qpBh4{{{#@f44%<,:'8];7q%e[mKK#~r~8,",
+"+<q5&0q7opyx-*](%%%&*^dw/d05&y7pptjzx-zAA*_.dp756(._0_95q6;(e4074;]9],'n,>9{@,{@>$&_%e[)![<'ie{>",
+"]+9_$$$pggzMvh90(.0h5d/&5&;<>dd*0pgjMj-oo(%w7*wwp_45(d0_$g.([<;._(;q$4:8,>+',]{[#>0]9[{N:+]!Gn9+",
+"(_/.;8>pow-yBq_.*^p/.dp505%,>wh(<0*wBbBdd_.7ghp6w*%h%dh;%p&+r!e<9q0/0q>99(4<,]>>9__:{n@~9h$3mr>%",
+"h9.$<K<_._g*a*/5q6p&(/(>>5h;%h;+@_p*a^b&h$&6adyAjy./_gw%]_q${9+(_5_h_q4(;/(_$;;,''<',,]:>;fPPO%q",
+"$<h>,N<9&;5$7/.>+5qh]_9$%*ba7&+@@$hq6ddqq0/*w/bytcp/(^w0>_&d..%500__;(;0$&q%+;h(,8:@9;9e#{:O}r4;",
+"8~9],~]$5;_9/.h],$<,e+@>+*bb4e['>$;0gdq>%h5h&^zj-^bw.^g&%*gbd6/.h_(%(5(q>0;9,%(]!3n,;_:!K8eiin%]",
+"~e+,f!95/0_;_$;4%;<@n:3{,.*/@f'$9$>_h___*6q(qoAyEb-cbc7h56^wpd*&p//.h&q5{9<8#4(0<'rO##fi3>4]3r'[",
+"3n<<:f>5q(__(%_9;]9{8,e@@_q$@#<%4&q&q_h*ob&;(7Iyyavytao/pog7dc^gg77dd^/*,:n[:$(.>'3K#r333>'')m!e",
+"f'@::@95hh5q5_(>>,+{#8e<4055_09;{&p6(0*ayyp_(.cbdpd7By^h&g^goaa^og6oot7*+8!~3<4%@i~i@i8f@]:[ON3~",
+",]]8:%q54;]49%%_>,@:'@]4;_%*hp>9f$q7&hhw6b*;$q^E66*wbcwq.ocg^b6w66gyBBw&98e#8@>#im''<n+,'f33G3f'",
+";(<~e;;]+]]4;0((+<8':',<+(;7(p4]f8_&wh(/&&_9$_bMEB&76gh]%**q0..*ctttb^6p5%$4>+:NO}:];4;9+<>8:8><",
+"_q>~~$$4]9>;%q__{<#:{999+.>h>0],8e4p^d&h(%(0%(6JM=by^6d(*pp_$p.doM-*;qgog_]9;+[)ri>$($__,<+;@,,>",
+"_(,~e<[##<,4%0;98'~e8+]<#4@9@<]'{@56pd./($*p&hpSIxwawp75hq.%]&hw^-^_<$w^7]#{],!mGr9p^d0&_(<@:;9$",
+"8@'e';]_;(;(;(]9f:!n38@],$~e[{$:>,;.(d&h9<wg7**Sot*a*hdwg67/$7h7/y65]%g/(~n[@#nree_&7705<>:'n+<'",
+"3[<8+9,+99>;4%+]#:~!rf{::,'e[{_+%4;44.5(>9d7p&hL*^_g7.*dww*7%/$5(^.q4hc*5@>+@n~f,@<;.6h5<<er!{9!",
+",'_+9]]4q;q0q_><8<eKOn]+;$]33:($%9]@4.h]'<0&*7*Bq*(77*d6o^pghp$94.gp/(bdd(0%@'~{9(4>5*$@e,'e'8;i",
+"($q;9,n8@;5d/h%+<@nG~'%$%9+nn84]4(;95g6+8{qp7bw^&d.**h..7w*/h5<f]5BE-/7wac&.8#K8%q5,_$>@+$<@@{>'",
+"$;>4>@K~80pa/9#88'nKG}[@4;@i!#4,<$$0h/0:{45__*6d.p/($;_$0//hp6hf](AEM77&&d_p@9[+.*6<;+]>qh%<+,{@",
+"f[f$_<[fn;_y^g(#!~'#!Kiee,f~3e:,40%./5>[@]&qh&/0;509;$({0dcp*^70(/IxJIp/_p%d%.4%dwg+:[+(70;{<:''",
+"fO3:+'f':+<paj.8Gf:3D}NK}i~~@@>9..(0q${'>0h(q&.;<$4@;9.<0po*0BIa/.cbEy/9!@@q$*&77d.:eG'qo_,{9f#~",
+"+rn##nef~8>BTuy]O~f~K:9+KQOn<8>;pq;49;<]{90qdw70$_q4.hd9&6g04bjMa/.hg6(<e0>4@%gww.(+!Cn_d9###r8#",
+",[~~O!e{<%oTULw4Oi!3e4*h[OOn{80(*q4+84{+'<4(66pd.qq4_$5<.h_{9w-tt5._c6_!C+>{[@*.g/0+~![(p0':Nm}n",
+"0*]>n,+49%ElMa*53OG[]%7p{3G~eG9$h>,,e'3erG#>7*&p*($<4%%<5q;@/gtbc&q%70<rK$(<ff*.g/(_3{@h(;{:Ke8(",
+";/<<3,4*ddJLj(>,!QG3:](w;<38:n94h;+{f,[KV1R:*&%.h%0+4ee3>@,{6do^bdp6g_<NGi,<]:$<9(q7>(+>@9<'m3i_"};
diff --git a/data/nethack.conf b/data/nethack.conf
new file mode 100644
index 0000000..22950a2
--- /dev/null
+++ b/data/nethack.conf
@@ -0,0 +1,8 @@
+<backup-configuration>
+ <locations>
+ <location type="file"
+ category="settings" auto="true">/home/user/nethackrc</location>
+ <location type="dir"
+ category="documents">/home/user/nethackdir</location>
+ </locations>
+</backup-configuration>
diff --git a/data/nethack.desktop-maemo1 b/data/nethack.desktop-maemo1
new file mode 100644
index 0000000..cdd3d8f
--- /dev/null
+++ b/data/nethack.desktop-maemo1
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+Type=Application
+Exec=/var/lib/install/usr/bin/nethack.sh
+StartupWMClass=nethack
+Icon=pkg_nethack
+X-Window-Icon=tn-bookmarks-link
+X-HildonDesk-ShowInToolbar=true
+X-Osso-Type=application/x-executable
+Terminal=false
+Name=Nethack
diff --git a/data/nethack.desktop-maemo2 b/data/nethack.desktop-maemo2
new file mode 100644
index 0000000..3a6d14e
--- /dev/null
+++ b/data/nethack.desktop-maemo2
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+Type=Application
+Exec=/usr/bin/nethack.sh
+StartupWMClass=nethack
+Icon=pkg_nethack
+X-Window-Icon=tn-bookmarks-link
+X-HildonDesk-ShowInToolbar=true
+X-Osso-Type=application/x-executable
+Terminal=false
+Name=Nethack
diff --git a/data/nethack.desktop-maemo4 b/data/nethack.desktop-maemo4
new file mode 100644
index 0000000..efc836f
--- /dev/null
+++ b/data/nethack.desktop-maemo4
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Name=Nethack
+Exec=/usr/bin/nethack.sh
+Icon=pkg_nethack
+X-Window-Icon=pkg_nethack
+X-Window-Icon-Dimmed=pkg_nethack
+#X-Osso-Service=nethack
+X-Osso-Type=application/x-executable
+X-HildonDesk-ShowInToolbar=true
+StartupWMClass=nethack
+Terminal=false
+
diff --git a/data/pkg_nethack.16.png b/data/pkg_nethack.16.png
new file mode 100644
index 0000000..93b719f
--- /dev/null
+++ b/data/pkg_nethack.16.png
Binary files differ
diff --git a/data/pkg_nethack.26.png b/data/pkg_nethack.26.png
new file mode 100644
index 0000000..1254a5e
--- /dev/null
+++ b/data/pkg_nethack.26.png
Binary files differ
diff --git a/data/pkg_nethack.40.png b/data/pkg_nethack.40.png
new file mode 100644
index 0000000..c9b5d75
--- /dev/null
+++ b/data/pkg_nethack.40.png
Binary files differ
diff --git a/data/pkg_nethack.64.png b/data/pkg_nethack.64.png
new file mode 100644
index 0000000..ece44b6
--- /dev/null
+++ b/data/pkg_nethack.64.png
Binary files differ
diff --git a/data/tiles32.png b/data/tiles32.png
new file mode 100644
index 0000000..d573c97
--- /dev/null
+++ b/data/tiles32.png
Binary files differ
diff --git a/debian-maemo1/changelog b/debian-maemo1/changelog
new file mode 100644
index 0000000..a863b7d
--- /dev/null
+++ b/debian-maemo1/changelog
@@ -0,0 +1,19 @@
+nethack (3.4.3) stable; urgency=low
+
+ * NetHack 3.4.3 is a bugfix release for NetHack 3.4.2.
+ * Several dozen general bug fixes including at least one fatal bug
+ * Correct several inconsistencies
+ * Handle level completely filled with monsters better
+ * win32tty performance enhancements when playing on Windows 98 and Windows Me
+ * win32gui player selection fixes
+ * X11 player selection fixes, one of which could be fatal
+ * Eliminated a gold-in-shop-container cheat
+ * Include bones file version compatibility info in options file
+ * With control panel applet and status bar plugin now.
+
+ * A fuller list of changes for this release can be found in the file
+ * doc/fixes34.3 in the source distribution. The text in there was written
+ * for the development team's own use and is provided "as is", so please do
+ * not ask us to further explain the entries in that file.
+
+ -- Josep Torra <jtorra@uoc.edu> Sun, 12 Feb 2006 16:44:35 +0100
diff --git a/debian-maemo1/compat b/debian-maemo1/compat
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/debian-maemo1/compat
@@ -0,0 +1 @@
+4
diff --git a/debian-maemo1/control b/debian-maemo1/control
new file mode 100644
index 0000000..723d503
--- /dev/null
+++ b/debian-maemo1/control
@@ -0,0 +1,11 @@
+Source: nethack
+Section: games
+Priority: optional
+Maintainer: Josep Torra <jtorra@uoc.edu>
+Build-Depends: debhelper (>= 4.0.0)
+Standards-Version: 3.6.0
+
+Package: nethack
+Architecture: any
+Depends: maemo
+Description: NetHack 3.4 is an enhancement to the dungeon exploration game NetHack. It is a distant descendent of Rogue and Hack, and a direct descendent of NetHack 3.3.
diff --git a/debian-maemo1/copyright b/debian-maemo1/copyright
new file mode 100644
index 0000000..c1e54c1
--- /dev/null
+++ b/debian-maemo1/copyright
@@ -0,0 +1,134 @@
+This package was debianized by Josep Torra <jtorra@uoc.edu> on
+Sun, 12 Feb 2006 00:02:12 +0100.
+
+Nethack's home site is: http://www.nethack.org/
+
+This archive was downloaded from:
+http://us.dl.sourceforge.net/sourceforge/nethack/nethack-343-src.tgz
+
+The LISP windowing patch is available from:
+
+http://savannah.nongnu.org/download/nethack-el/
+
+Copyright:
+
+ NETHACK GENERAL PUBLIC LICENSE
+ (Copyright 1989 M. Stephenson)
+.
+ (Based on the BISON general public license,
+ copyright 1988 Richard M. Stallman)
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license, but changing it is not allowed. You can also use this wording to
+ make the terms for other programs.
+
+ The license agreements of most software companies keep you at the mercy of
+those companies. By contrast, our general public license is intended to give
+everyone the right to share NetHack. To make sure that you get the rights we
+want you to have, we need to make restrictions that forbid anyone to deny you
+these rights or to ask you to surrender the rights. Hence this license
+agreement.
+
+ Specifically, we want to make sure that you have the right to give away
+copies of NetHack, that you receive source code or else can get it if you
+want it, that you can change NetHack or use pieces of it in new free
+programs, and that you know you can do these things.
+
+ To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute copies
+of NetHack, you must give the recipients all the rights that you have. You
+must make sure that they, too, receive or can get the source code. And you
+must tell them their rights.
+
+ Also, for our own protection, we must make certain that everyone finds out
+that there is no warranty for NetHack. If NetHack is modified by someone
+else and passed on, we want its recipients to know that what they have is
+not what we distributed.
+
+ Therefore we (Mike Stephenson and other holders of NetHack copyrights) make
+the following terms which say what you must do to be allowed to distribute or
+change NetHack.
+
+
+ COPYING POLICIES
+
+ 1. You may copy and distribute verbatim copies of NetHack source code as
+you receive it, in any medium, provided that you keep intact the notices on
+all files that refer to copyrights, to this License Agreement, and to the
+absence of any warranty; and give any other recipients of the NetHack
+program a copy of this License Agreement along with the program.
+
+ 2. You may modify your copy or copies of NetHack or any portion of it, and
+copy and distribute such modifications under the terms of Paragraph 1 above
+(including distributing this License Agreement), provided that you also do the
+following:
+
+ a) cause the modified files to carry prominent notices stating that you
+ changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that in
+ whole or in part contains or is a derivative of NetHack or any part
+ thereof, to be licensed at no charge to all third parties on terms
+ identical to those contained in this License Agreement (except that you
+ may choose to grant more extensive warranty protection to some or all
+ third parties, at your option)
+
+ c) You may charge a distribution fee for the physical act of
+ transferring a copy, and you may at your option offer warranty protection
+ in exchange for a fee.
+
+ 3. You may copy and distribute NetHack (or a portion or derivative of it,
+under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete machine-readable source code, which
+ must be distributed under the terms of Paragraphs 1 and 2 above; or,
+
+ b) accompany it with full information as to how to obtain the complete
+ machine-readable source code from an appropriate archive site. (This
+ alternative is allowed only for noncommercial distribution.)
+
+For these purposes, complete source code means either the full source
+distribution as originally released over Usenet or updated copies of the
+files in this distribution used to create the object code or executable.
+
+ 4. You may not copy, sublicense, distribute or transfer NetHack except as
+expressly provided under this License Agreement. Any attempt otherwise to
+copy, sublicense, distribute or transfer NetHack is void and your rights to
+use the program under this License agreement shall be automatically
+terminated. However, parties who have received computer software programs
+from you with this License Agreement will not have their licenses terminated
+so long as such parties remain in full compliance.
+
+
+Stated plainly: You are permitted to modify NetHack, or otherwise use parts
+of NetHack, provided that you comply with the conditions specified above;
+in particular, your modified NetHack or program containing parts of NetHack
+must remain freely available as provided in this License Agreement. In
+other words, go ahead and share NetHack, but don't try to stop anyone else
+from sharing it farther.
+
+The lisp-window patch used to build this package comes
+with the following license:
+
+Copyright (c) Shawn Betts, Ryan Yeske, 2001
+
+Redistribution and use in source and binary forms, with or without modification, are permitted
+provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
+ and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of
+ conditions and the following disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ 3. The name of the author may not be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/debian-maemo1/nethack.links b/debian-maemo1/nethack.links
new file mode 100644
index 0000000..0fb3bf3
--- /dev/null
+++ b/debian-maemo1/nethack.links
@@ -0,0 +1 @@
+/var/lib/install/usr/share/applications/hildon/nethack.desktop /etc/others-menu/extra_applications/0112_nethack.desktop
diff --git a/debian-maemo1/rules b/debian-maemo1/rules
new file mode 100755
index 0000000..4277ac3
--- /dev/null
+++ b/debian-maemo1/rules
@@ -0,0 +1,98 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+export DH_VERBOSE=1
+
+
+
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+ # - nethack does not have a configure script yet
+ touch configure-stamp
+
+
+build: build-stamp
+
+build-stamp: configure-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ $(MAKE) PREFIX=/var/lib/install/usr
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ -$(MAKE) clean
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ dh_link
+
+ # Add here commands to install the package
+ $(MAKE) install PREFIX=$(CURDIR)/debian/nethack/usr
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+# dh_installchangelogs
+# dh_installdocs
+# dh_installexamples
+# dh_install
+# dh_installmenu
+# dh_installdebconf
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_installinit
+# dh_installcron
+# dh_installinfo
+# dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+# dh_perl
+# dh_python
+# dh_makeshlibs
+ dh_installdeb
+# dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/debian-maemo2/changelog b/debian-maemo2/changelog
new file mode 100644
index 0000000..a863b7d
--- /dev/null
+++ b/debian-maemo2/changelog
@@ -0,0 +1,19 @@
+nethack (3.4.3) stable; urgency=low
+
+ * NetHack 3.4.3 is a bugfix release for NetHack 3.4.2.
+ * Several dozen general bug fixes including at least one fatal bug
+ * Correct several inconsistencies
+ * Handle level completely filled with monsters better
+ * win32tty performance enhancements when playing on Windows 98 and Windows Me
+ * win32gui player selection fixes
+ * X11 player selection fixes, one of which could be fatal
+ * Eliminated a gold-in-shop-container cheat
+ * Include bones file version compatibility info in options file
+ * With control panel applet and status bar plugin now.
+
+ * A fuller list of changes for this release can be found in the file
+ * doc/fixes34.3 in the source distribution. The text in there was written
+ * for the development team's own use and is provided "as is", so please do
+ * not ask us to further explain the entries in that file.
+
+ -- Josep Torra <jtorra@uoc.edu> Sun, 12 Feb 2006 16:44:35 +0100
diff --git a/debian-maemo2/compat b/debian-maemo2/compat
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/debian-maemo2/compat
@@ -0,0 +1 @@
+4
diff --git a/debian-maemo2/control b/debian-maemo2/control
new file mode 100644
index 0000000..e2aca7d
--- /dev/null
+++ b/debian-maemo2/control
@@ -0,0 +1,20 @@
+Source: nethack
+Section: user/games
+Priority: optional
+Maintainer: Josep Torra <jtorra@uoc.edu>
+Build-Depends: debhelper (>= 4.0.0), libgtk2.0-dev, libosso-dev (>= 1)
+Standards-Version: 3.6.0
+
+Package: nethack
+Architecture: any
+#Pre-Depends: maemo-select-menu-location
+Depends: ${shlibs:Depends}
+Description: NetHack 3.4.3 is an enhancement to the dungeon exploration game NetHack. It is a distant descendent of Rogue and Hack, and a direct descendent of NetHack 3.3.
+XB-Maemo-Icon-26:
+ iVBORw0KGgoAAAANSUhEUgAAABoAAAAaBAMAAABbZFH9AAAAG1BMVEUgAAAW
+ QT8AgYBpb22Bwr+5vLna3dr6/foIDgvpvr7uAAAAAXRSTlMAQObYZgAAALhJ
+ REFUGNN90LEOgyAUhWGWFlc1aVilHdyNCbPpA5g0tOwG4uhQuasNacpjF26p
+ 7aTbl/ODCYRsfnQCmKXc9RETBQB7lbrfo6y1YZOo+dZxzlnh1EEkVXlejqvq
+ gvHxGZS9vuXik7Bcsvg/LD0fF5IUN7WKM+5+CuUplWcsjwJFAMuLX1UXj+Ff
+ edroZEMp3ecWgKaryqYdRJwA3L1umTEKJ/BUC2+MFlHSE6uCJAulFT4e32u1
+ +ZhvXFA9/MXWT4gAAAAASUVORK5CYII=
diff --git a/debian-maemo2/copyright b/debian-maemo2/copyright
new file mode 100644
index 0000000..c1e54c1
--- /dev/null
+++ b/debian-maemo2/copyright
@@ -0,0 +1,134 @@
+This package was debianized by Josep Torra <jtorra@uoc.edu> on
+Sun, 12 Feb 2006 00:02:12 +0100.
+
+Nethack's home site is: http://www.nethack.org/
+
+This archive was downloaded from:
+http://us.dl.sourceforge.net/sourceforge/nethack/nethack-343-src.tgz
+
+The LISP windowing patch is available from:
+
+http://savannah.nongnu.org/download/nethack-el/
+
+Copyright:
+
+ NETHACK GENERAL PUBLIC LICENSE
+ (Copyright 1989 M. Stephenson)
+.
+ (Based on the BISON general public license,
+ copyright 1988 Richard M. Stallman)
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license, but changing it is not allowed. You can also use this wording to
+ make the terms for other programs.
+
+ The license agreements of most software companies keep you at the mercy of
+those companies. By contrast, our general public license is intended to give
+everyone the right to share NetHack. To make sure that you get the rights we
+want you to have, we need to make restrictions that forbid anyone to deny you
+these rights or to ask you to surrender the rights. Hence this license
+agreement.
+
+ Specifically, we want to make sure that you have the right to give away
+copies of NetHack, that you receive source code or else can get it if you
+want it, that you can change NetHack or use pieces of it in new free
+programs, and that you know you can do these things.
+
+ To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute copies
+of NetHack, you must give the recipients all the rights that you have. You
+must make sure that they, too, receive or can get the source code. And you
+must tell them their rights.
+
+ Also, for our own protection, we must make certain that everyone finds out
+that there is no warranty for NetHack. If NetHack is modified by someone
+else and passed on, we want its recipients to know that what they have is
+not what we distributed.
+
+ Therefore we (Mike Stephenson and other holders of NetHack copyrights) make
+the following terms which say what you must do to be allowed to distribute or
+change NetHack.
+
+
+ COPYING POLICIES
+
+ 1. You may copy and distribute verbatim copies of NetHack source code as
+you receive it, in any medium, provided that you keep intact the notices on
+all files that refer to copyrights, to this License Agreement, and to the
+absence of any warranty; and give any other recipients of the NetHack
+program a copy of this License Agreement along with the program.
+
+ 2. You may modify your copy or copies of NetHack or any portion of it, and
+copy and distribute such modifications under the terms of Paragraph 1 above
+(including distributing this License Agreement), provided that you also do the
+following:
+
+ a) cause the modified files to carry prominent notices stating that you
+ changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that in
+ whole or in part contains or is a derivative of NetHack or any part
+ thereof, to be licensed at no charge to all third parties on terms
+ identical to those contained in this License Agreement (except that you
+ may choose to grant more extensive warranty protection to some or all
+ third parties, at your option)
+
+ c) You may charge a distribution fee for the physical act of
+ transferring a copy, and you may at your option offer warranty protection
+ in exchange for a fee.
+
+ 3. You may copy and distribute NetHack (or a portion or derivative of it,
+under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete machine-readable source code, which
+ must be distributed under the terms of Paragraphs 1 and 2 above; or,
+
+ b) accompany it with full information as to how to obtain the complete
+ machine-readable source code from an appropriate archive site. (This
+ alternative is allowed only for noncommercial distribution.)
+
+For these purposes, complete source code means either the full source
+distribution as originally released over Usenet or updated copies of the
+files in this distribution used to create the object code or executable.
+
+ 4. You may not copy, sublicense, distribute or transfer NetHack except as
+expressly provided under this License Agreement. Any attempt otherwise to
+copy, sublicense, distribute or transfer NetHack is void and your rights to
+use the program under this License agreement shall be automatically
+terminated. However, parties who have received computer software programs
+from you with this License Agreement will not have their licenses terminated
+so long as such parties remain in full compliance.
+
+
+Stated plainly: You are permitted to modify NetHack, or otherwise use parts
+of NetHack, provided that you comply with the conditions specified above;
+in particular, your modified NetHack or program containing parts of NetHack
+must remain freely available as provided in this License Agreement. In
+other words, go ahead and share NetHack, but don't try to stop anyone else
+from sharing it farther.
+
+The lisp-window patch used to build this package comes
+with the following license:
+
+Copyright (c) Shawn Betts, Ryan Yeske, 2001
+
+Redistribution and use in source and binary forms, with or without modification, are permitted
+provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
+ and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of
+ conditions and the following disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ 3. The name of the author may not be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/debian-maemo2/files b/debian-maemo2/files
new file mode 100644
index 0000000..1db1af4
--- /dev/null
+++ b/debian-maemo2/files
@@ -0,0 +1 @@
+nethack_3.4.3_armel.deb user/games optional
diff --git a/debian-maemo2/nethack.links b/debian-maemo2/nethack.links
new file mode 100644
index 0000000..d93a920
--- /dev/null
+++ b/debian-maemo2/nethack.links
@@ -0,0 +1 @@
+/usr/share/applications/hildon/nethack.desktop etc/others-menu/extra_applications/0112_nethack.desktop
diff --git a/debian-maemo2/postinst b/debian-maemo2/postinst
new file mode 100755
index 0000000..96d224c
--- /dev/null
+++ b/debian-maemo2/postinst
@@ -0,0 +1,13 @@
+#! /bin/sh
+gtk-update-icon-cache -f /usr/share/icons/hicolor
+# Now we are ready to let the user move the entry around, but only if
+# this is a new install
+if [ `which maemo-select-menu-location` ]; then
+ oldversion="$2"
+ if [ -z "$oldversion" ]; then
+ maemo-select-menu-location nethack.desktop
+ fi
+fi
+#DEBHELPER#
+
+exit 0
diff --git a/debian-maemo2/rules b/debian-maemo2/rules
new file mode 100755
index 0000000..c14b00e
--- /dev/null
+++ b/debian-maemo2/rules
@@ -0,0 +1,99 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+export DH_VERBOSE=1
+
+
+
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+ # - nethack does not have a configure script yet
+ touch configure-stamp
+
+
+build: build-stamp
+
+build-stamp: configure-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ $(MAKE) PREFIX=/var/lib/install/usr CFLAGS_DEB="$(CFLAGS)"
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ $(MAKE) clean
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ dh_link
+
+ # Add here commands to install the package
+ $(MAKE) install PREFIX=$(CURDIR)/debian/nethack/usr
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+# dh_installchangelogs
+# dh_installdocs
+# dh_installexamples
+# dh_install
+# dh_installmenu
+# dh_installdebconf
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_installinit
+# dh_installcron
+# dh_installinfo
+# dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+# dh_perl
+# dh_python
+# dh_makeshlibs
+ dh_installdeb
+# dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/debian-maemo4/changelog b/debian-maemo4/changelog
new file mode 100644
index 0000000..a863b7d
--- /dev/null
+++ b/debian-maemo4/changelog
@@ -0,0 +1,19 @@
+nethack (3.4.3) stable; urgency=low
+
+ * NetHack 3.4.3 is a bugfix release for NetHack 3.4.2.
+ * Several dozen general bug fixes including at least one fatal bug
+ * Correct several inconsistencies
+ * Handle level completely filled with monsters better
+ * win32tty performance enhancements when playing on Windows 98 and Windows Me
+ * win32gui player selection fixes
+ * X11 player selection fixes, one of which could be fatal
+ * Eliminated a gold-in-shop-container cheat
+ * Include bones file version compatibility info in options file
+ * With control panel applet and status bar plugin now.
+
+ * A fuller list of changes for this release can be found in the file
+ * doc/fixes34.3 in the source distribution. The text in there was written
+ * for the development team's own use and is provided "as is", so please do
+ * not ask us to further explain the entries in that file.
+
+ -- Josep Torra <jtorra@uoc.edu> Sun, 12 Feb 2006 16:44:35 +0100
diff --git a/debian-maemo4/compat b/debian-maemo4/compat
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/debian-maemo4/compat
@@ -0,0 +1 @@
+4
diff --git a/debian-maemo4/control b/debian-maemo4/control
new file mode 100644
index 0000000..07e26f5
--- /dev/null
+++ b/debian-maemo4/control
@@ -0,0 +1,13 @@
+Source: nethack
+Section: user/games
+Priority: optional
+Maintainer: Josep Torra <jtorra@uoc.edu>
+Build-Depends: debhelper (>= 4.0.0), libgtk2.0-dev, libosso-dev (>= 1)
+Standards-Version: 3.6.0
+
+Package: nethack
+Architecture: any
+#Pre-Depends: maemo-select-menu-location
+Depends: ${shlibs:Depends}
+Description: NetHack 3.4.3 is an enhancement to the dungeon exploration game NetHack. It is a distant descendent of Rogue and Hack, and a direct descendent of NetHack 3.3.
+
diff --git a/debian-maemo4/copyright b/debian-maemo4/copyright
new file mode 100644
index 0000000..c1e54c1
--- /dev/null
+++ b/debian-maemo4/copyright
@@ -0,0 +1,134 @@
+This package was debianized by Josep Torra <jtorra@uoc.edu> on
+Sun, 12 Feb 2006 00:02:12 +0100.
+
+Nethack's home site is: http://www.nethack.org/
+
+This archive was downloaded from:
+http://us.dl.sourceforge.net/sourceforge/nethack/nethack-343-src.tgz
+
+The LISP windowing patch is available from:
+
+http://savannah.nongnu.org/download/nethack-el/
+
+Copyright:
+
+ NETHACK GENERAL PUBLIC LICENSE
+ (Copyright 1989 M. Stephenson)
+.
+ (Based on the BISON general public license,
+ copyright 1988 Richard M. Stallman)
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license, but changing it is not allowed. You can also use this wording to
+ make the terms for other programs.
+
+ The license agreements of most software companies keep you at the mercy of
+those companies. By contrast, our general public license is intended to give
+everyone the right to share NetHack. To make sure that you get the rights we
+want you to have, we need to make restrictions that forbid anyone to deny you
+these rights or to ask you to surrender the rights. Hence this license
+agreement.
+
+ Specifically, we want to make sure that you have the right to give away
+copies of NetHack, that you receive source code or else can get it if you
+want it, that you can change NetHack or use pieces of it in new free
+programs, and that you know you can do these things.
+
+ To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute copies
+of NetHack, you must give the recipients all the rights that you have. You
+must make sure that they, too, receive or can get the source code. And you
+must tell them their rights.
+
+ Also, for our own protection, we must make certain that everyone finds out
+that there is no warranty for NetHack. If NetHack is modified by someone
+else and passed on, we want its recipients to know that what they have is
+not what we distributed.
+
+ Therefore we (Mike Stephenson and other holders of NetHack copyrights) make
+the following terms which say what you must do to be allowed to distribute or
+change NetHack.
+
+
+ COPYING POLICIES
+
+ 1. You may copy and distribute verbatim copies of NetHack source code as
+you receive it, in any medium, provided that you keep intact the notices on
+all files that refer to copyrights, to this License Agreement, and to the
+absence of any warranty; and give any other recipients of the NetHack
+program a copy of this License Agreement along with the program.
+
+ 2. You may modify your copy or copies of NetHack or any portion of it, and
+copy and distribute such modifications under the terms of Paragraph 1 above
+(including distributing this License Agreement), provided that you also do the
+following:
+
+ a) cause the modified files to carry prominent notices stating that you
+ changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that in
+ whole or in part contains or is a derivative of NetHack or any part
+ thereof, to be licensed at no charge to all third parties on terms
+ identical to those contained in this License Agreement (except that you
+ may choose to grant more extensive warranty protection to some or all
+ third parties, at your option)
+
+ c) You may charge a distribution fee for the physical act of
+ transferring a copy, and you may at your option offer warranty protection
+ in exchange for a fee.
+
+ 3. You may copy and distribute NetHack (or a portion or derivative of it,
+under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete machine-readable source code, which
+ must be distributed under the terms of Paragraphs 1 and 2 above; or,
+
+ b) accompany it with full information as to how to obtain the complete
+ machine-readable source code from an appropriate archive site. (This
+ alternative is allowed only for noncommercial distribution.)
+
+For these purposes, complete source code means either the full source
+distribution as originally released over Usenet or updated copies of the
+files in this distribution used to create the object code or executable.
+
+ 4. You may not copy, sublicense, distribute or transfer NetHack except as
+expressly provided under this License Agreement. Any attempt otherwise to
+copy, sublicense, distribute or transfer NetHack is void and your rights to
+use the program under this License agreement shall be automatically
+terminated. However, parties who have received computer software programs
+from you with this License Agreement will not have their licenses terminated
+so long as such parties remain in full compliance.
+
+
+Stated plainly: You are permitted to modify NetHack, or otherwise use parts
+of NetHack, provided that you comply with the conditions specified above;
+in particular, your modified NetHack or program containing parts of NetHack
+must remain freely available as provided in this License Agreement. In
+other words, go ahead and share NetHack, but don't try to stop anyone else
+from sharing it farther.
+
+The lisp-window patch used to build this package comes
+with the following license:
+
+Copyright (c) Shawn Betts, Ryan Yeske, 2001
+
+Redistribution and use in source and binary forms, with or without modification, are permitted
+provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
+ and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of
+ conditions and the following disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ 3. The name of the author may not be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/debian-maemo4/files b/debian-maemo4/files
new file mode 100644
index 0000000..1db1af4
--- /dev/null
+++ b/debian-maemo4/files
@@ -0,0 +1 @@
+nethack_3.4.3_armel.deb user/games optional
diff --git a/debian-maemo4/nethack.links b/debian-maemo4/nethack.links
new file mode 100644
index 0000000..d93a920
--- /dev/null
+++ b/debian-maemo4/nethack.links
@@ -0,0 +1 @@
+/usr/share/applications/hildon/nethack.desktop etc/others-menu/extra_applications/0112_nethack.desktop
diff --git a/debian-maemo4/postinst b/debian-maemo4/postinst
new file mode 100755
index 0000000..96d224c
--- /dev/null
+++ b/debian-maemo4/postinst
@@ -0,0 +1,13 @@
+#! /bin/sh
+gtk-update-icon-cache -f /usr/share/icons/hicolor
+# Now we are ready to let the user move the entry around, but only if
+# this is a new install
+if [ `which maemo-select-menu-location` ]; then
+ oldversion="$2"
+ if [ -z "$oldversion" ]; then
+ maemo-select-menu-location nethack.desktop
+ fi
+fi
+#DEBHELPER#
+
+exit 0
diff --git a/debian-maemo4/rules b/debian-maemo4/rules
new file mode 100755
index 0000000..c14b00e
--- /dev/null
+++ b/debian-maemo4/rules
@@ -0,0 +1,99 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+export DH_VERBOSE=1
+
+
+
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+ # - nethack does not have a configure script yet
+ touch configure-stamp
+
+
+build: build-stamp
+
+build-stamp: configure-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ $(MAKE) PREFIX=/var/lib/install/usr CFLAGS_DEB="$(CFLAGS)"
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ $(MAKE) clean
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ dh_link
+
+ # Add here commands to install the package
+ $(MAKE) install PREFIX=$(CURDIR)/debian/nethack/usr
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+# dh_installchangelogs
+# dh_installdocs
+# dh_installexamples
+# dh_install
+# dh_installmenu
+# dh_installdebconf
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_installinit
+# dh_installcron
+# dh_installinfo
+# dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+# dh_perl
+# dh_python
+# dh_makeshlibs
+ dh_installdeb
+# dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/dist.sh b/dist.sh
new file mode 100755
index 0000000..4121b0a
--- /dev/null
+++ b/dist.sh
@@ -0,0 +1,42 @@
+#!/scratchbox/tools/bin/bash
+
+DBUS_VERSION_MAJOR=$(pkg-config dbus-1 --modversion | awk '{split($$1,t,/\./) ; print t[1]}')
+DBUS_VERSION_MINOR=$(pkg-config dbus-1 --modversion | awk '{split($$1,t,/\./) ; print t[2]}')
+
+HILDON_VERSION_MAJOR=$(pkg-config hildon-1 --modversion | awk '{split($$1,t,/\./) ; print t[1]}')
+HILDON_VERSION_MINOR=$(pkg-config hildon-1 --modversion | awk '{split($$1,t,/\./) ; print t[2]}')
+
+MAEMO_VERSION="1"
+if [ $DBUS_VERSION_MINOR -gt 23 ]; then
+ MAEMO_VERSION="2"
+fi
+
+if [ $HILDON_VERSION_MAJOR -eq 1 ]; then
+MAEMO_VERSION="4"
+fi
+
+echo "Maemo version: $MAEMO_VERSION Hildon version: $HILDON_VERSION_MAJOR.$HILDON_VERSION_MINOR"
+
+rm -rf *~
+
+# Build binary package
+make clean
+rm -rf debian/nethack
+rm -f debian
+ln -s debian-maemo${MAEMO_VERSION} debian
+dpkg-buildpackage -rfakeroot -b
+
+# Build source package
+make clean
+rm -rf debian/nethack
+rm -f debian
+rm -rf nethack-3.4.3
+rm -rf nethack_maemo
+mkdir nethack_maemo
+cp -r * nethack_maemo
+rm -rf nethack_maemo/nethack-343-src.tgz
+rm -rf nethack_maemo/nethack_maemo
+rm -rf nethack_maemo/debian/nethack
+tar czvf nethack_maemo.tar.gz nethack_maemo
+mv -f nethack_maemo.tar.gz ..
+rm -rf nethack_maemo
diff --git a/patches/3.4.3-GNOME-support.patch b/patches/3.4.3-GNOME-support.patch
new file mode 100644
index 0000000..3a18fae
--- /dev/null
+++ b/patches/3.4.3-GNOME-support.patch
@@ -0,0 +1,28 @@
+--- include/config.h.orig 2003-06-21 21:06:38.000000000 -0400
++++ include/config.h 2003-06-21 21:12:00.000000000 -0400
+@@ -48 +48 @@
+-/* #define GNOME_GRAPHICS */ /* Gnome interface */
++#define GNOME_GRAPHICS
+@@ -96 +95,0 @@
+-# define USE_XPM /* Use XPM format for images (required) */
+--- Makefile.orig 2003-06-21 21:06:38.000000000 -0400
++++ Makefile 2003-06-21 21:13:02.000000000 -0400
+@@ -43 +43 @@
+-VARDATND = x11tiles pet_mark.xbm rip.xpm
++VARDATND = x11tiles pet_mark.xbm rip.xpm mapbg.xpm
+--- src/Makefile.orig 2003-06-21 21:06:38.000000000 -0400
++++ src/Makefile 2003-06-21 21:17:33.000000000 -0400
+@@ -142 +142 @@
+-GNOMEINC=-I/usr/lib/glib/include -I/usr/lib/gnome-libs/include -I../win/gnome
++GNOMEINC=-I/usr/lib/glib/include -I/usr/lib/gnome-libs/include -I../win/gnome -I/usr/include/gnome-1.0 -DNEED_GNOMESUPPORT_H -I/usr/lib/gnome-libs/include -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include
+@@ -191 +191 @@
+- gnyesno.o gnworn.o tile.o
++ gnyesno.o gnworn.o
+@@ -207,2 +207,2 @@
+-WINSRC = $(WINTTYSRC) $(WINX11SRC)
+-WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
++WINSRC = $(WINTTYSRC) $(WINX11SRC) $(WINGNOMESRC)
++WINOBJ = $(WINTTYOBJ) $(WINX11OBJ) $(WINGNOMEOBJ)
+@@ -248 +248 @@
+-WINLIB = $(WINTTYLIB) $(WINX11LIB)
++WINLIB = $(WINTTYLIB) $(WINX11LIB) $(WINGNOMELIB)
diff --git a/patches/3.4.3-X-support.patch b/patches/3.4.3-X-support.patch
new file mode 100644
index 0000000..e6dea53
--- /dev/null
+++ b/patches/3.4.3-X-support.patch
@@ -0,0 +1,26 @@
+--- include/config.h.orig 2003-06-21 20:58:57.000000000 -0400
++++ include/config.h 2003-06-21 20:59:44.000000000 -0400
+@@ -46 +46 @@
+-/* #define X11_GRAPHICS */ /* X11 interface */
++#define X11_GRAPHICS 1
+@@ -129 +129 @@
+-/* # define USE_XPM */ /* Disable if you do not have the XPM library */
++# define USE_XPM 1
+--- Makefile.orig 2003-06-21 21:01:03.000000000 -0400
++++ Makefile 2003-06-21 21:01:16.000000000 -0400
+@@ -43 +43 @@
+-VARDATND =
++VARDATND = x11tiles pet_mark.xbm rip.xpm
+--- src/Makefile.orig 2003-06-21 21:02:01.000000000 -0400
++++ src/Makefile 2003-06-21 21:02:11.000000000 -0400
+@@ -217,2 +217,2 @@
+-WINSRC = $(WINTTYSRC)
+-WINOBJ = $(WINTTYOBJ)
++WINSRC = $(WINTTYSRC) $(WINX11SRC)
++WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
+@@ -238 +238 @@
+-WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11
++WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 -lXpm
+@@ -258 +258 @@
+-WINLIB = $(WINTTYLIB)
++WINLIB = $(WINTTYLIB) $(WINX11LIB)
diff --git a/patches/3.4.3-bison.patch b/patches/3.4.3-bison.patch
new file mode 100644
index 0000000..0bec63a
--- /dev/null
+++ b/patches/3.4.3-bison.patch
@@ -0,0 +1,18 @@
+--- nethack-3.4.3/util/Makefile 2004-08-21 01:09:06.724326360 +0200
++++ nethack-3.4.3.new//util/Makefile 2004-08-21 01:08:03.852884272 +0200
+@@ -101,11 +101,11 @@
+
+ # yacc/lex programs to use to generate *_comp.h, *_lex.c, and *_yacc.c.
+ # if, instead of yacc/lex you have bison/flex, comment/uncomment the following.
+-YACC = yacc
+-LEX = lex
+-# YACC = bison -y
++#YACC = yacc
++#LEX = lex
++ YACC = bison -y
+ # YACC = byacc
+-# LEX = flex
++ LEX = flex
+
+ # these are the names of the output files from YACC/LEX. Under MS-DOS
+ # and similar systems, they may differ
diff --git a/patches/3.4.3-default-options.patch b/patches/3.4.3-default-options.patch
new file mode 100644
index 0000000..7e3de4c
--- /dev/null
+++ b/patches/3.4.3-default-options.patch
@@ -0,0 +1,23 @@
+--- include/config.h.orig 2003-06-21 20:44:00.000000000 -0400
++++ include/config.h 2003-06-21 20:46:42.000000000 -0400
+@@ -172,2 +172,2 @@
+-#define COMPRESS "/usr/bin/compress" /* Lempel-Ziv compression */
+-#define COMPRESS_EXTENSION ".Z" /* compress's extension */
++#define COMPRESS "/bin/gzip" /* Lempel-Ziv compression */
++#define COMPRESS_EXTENSION ".gz" /* compress's extension */
+@@ -188 +188 @@
+-/* #define DLB */ /* not supported on all platforms */
++#define DLB 1 /* not supported on all platforms */
+--- include/unixconf.h.orig 2003-06-21 20:47:54.000000000 -0400
++++ include/unixconf.h 2003-06-21 20:48:39.000000000 -0400
+@@ -40 +40 @@
+-/* #define LINUX */ /* Another Unix clone */
++#define LINUX 1 /* Another Unix clone */
+@@ -135 +135 @@
+-/* #define TIMED_DELAY */ /* usleep() */
++#define TIMED_DELAY 1
+--- src/Makefile.orig 2003-06-21 20:55:36.000000000 -0400
++++ src/Makefile 2003-06-21 20:55:49.000000000 -0400
+@@ -234 +234 @@
+-WINTTYLIB = -ltermlib
++WINTTYLIB = -lncurses
diff --git a/patches/3.4.3-gtk2.patch b/patches/3.4.3-gtk2.patch
new file mode 100644
index 0000000..f10a1d3
--- /dev/null
+++ b/patches/3.4.3-gtk2.patch
@@ -0,0 +1,149 @@
+--- include/config.h.orig 2005-11-01 01:07:26.000000000 +0100
++++ include/config.h 2005-11-01 01:10:17.000000000 +0100
+@@ -49,0 +50 @@
++#define GTK2_GRAPHICS /* Gtk2 interface */
+@@ -55 +56 @@
+- * tty, X11, mac, amii, BeOS, Qt, Gem, Gnome
++ * tty, X11, mac, amii, BeOS, Qt, Gem, Gnome, Gtk2
+@@ -105,0 +107,9 @@
++#ifdef GTK2_GRAPHICS
++ #define USE_XPM /* Use XPM format for images (required) */
++ #define GRAPHIC_TOMBSTONE /* Use graphical tombstone (rip.ppm) */
++ #ifndef DEFAULT_WINDOW_SYS
++ #define DEFAULT_WINDOW_SYS "Gtk2"
++ #endif
++ #define ENABLE_NLS /* Use translated gui strings */
++#endif
++
+@@ -341 +351 @@
+-/* #define SCORE_ON_BOTL */ /* added by Gary Erickson (erickson@ucivax) */
++#define SCORE_ON_BOTL /* added by Gary Erickson (erickson@ucivax) */
+@@ -352 +362 @@
+-/*#define AUTOPICKUP_EXCEPTIONS */ /* exceptions to autopickup */
++#define AUTOPICKUP_EXCEPTIONS /* exceptions to autopickup */
+--- src/Makefile.orig 2005-11-01 01:07:35.000000000 +0100
++++ src/Makefile 2005-11-01 01:14:40.000000000 +0100
+@@ -150,0 +151,3 @@
++# Only used for the Gtk2 interface.
++GTK2INC=`pkg-config gtk+-2.0 --cflags` `pkg-config hildon-libs --cflags` `pkg-config libosso --cflags` `pkg-config dbus-1 --cflags`
++
+@@ -202,0 +206,9 @@
++# Files for a Gtk2 port
++#
++WINGTK2SRC = ../win/gtk2/g2bind.c ../win/gtk2/g2main.c ../win/gtk2/g2mesg.c\
++ ../win/gtk2/g2player.c ../win/gtk2/g2map.c ../win/gtk2/g2marsh.c\
++ ../win/gtk2/g2status.c ../win/gtk2/g2menu.c ../win/gtk2/g2text.c\
++ ../win/gtk2/g2equip.c ../win/gtk2/g2minipad.c
++WINGTK2OBJ = g2bind.o g2main.o g2mesg.o g2player.o g2map.o g2marsh.o g2status.o\
++ g2menu.o g2text.o g2equip.o g2minipad.o tile.o
++
+@@ -217,2 +229,2 @@
+-WINSRC = $(WINTTYSRC) $(WINX11SRC)
+-WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
++WINSRC = $(WINTTYSRC) $(WINGTK2SRC)
++WINOBJ = $(WINTTYOBJ) $(WINGTK2OBJ)
+@@ -251,0 +264,3 @@
++# libraries for Gtk2
++WINGTK2LIB =`pkg-config gtk+-2.0 --libs` `pkg-config hildon-libs --libs` `pkg-config libosso --libs` `pkg-config dbus-1 --libs`
++#
+@@ -258 +273 @@
+-WINLIB = $(WINTTYLIB) $(WINX11LIB)
++WINLIB = $(WINTTYLIB) $(WINGTK2LIB)
+@@ -341 +356,2 @@
+-WINCSRC = $(WINTTYSRC) $(WINX11SRC) $(WINGNOMESRC) $(WINGEMSRC)
++WINCSRC = $(WINTTYSRC) $(WINX11SRC) $(WINGNOMESRC) $(WINGTK2SRC)$(WINGEMSRC)
++
+@@ -675,0 +692,24 @@
++# Gtk2 stuff
++g2bind.o: ../win/gtk2/g2bind.c ../win/gtk2/g2bind.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2bind.c
++g2main.o: ../win/gtk2/g2main.c ../win/gtk2/g2main.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2main.c
++g2mesg.o: ../win/gtk2/g2mesg.c ../win/gtk2/g2mesg.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2mesg.c
++g2player.o: ../win/gtk2/g2player.c ../win/gtk2/g2player.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2player.c
++g2map.o: ../win/gtk2/g2map.c ../win/gtk2/g2map.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2map.c
++g2marsh.o: ../win/gtk2/g2marsh.c ../win/gtk2/g2marsh.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2marsh.c
++g2status.o: ../win/gtk2/g2status.c ../win/gtk2/g2status.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2status.c
++g2menu.o: ../win/gtk2/g2menu.c ../win/gtk2/g2menu.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2menu.c
++g2text.o: ../win/gtk2/g2text.c ../win/gtk2/g2text.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2text.c
++g2equip.o: ../win/gtk2/g2equip.c ../win/gtk2/g2equip.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2equip.c
++g2minipad.o: ../win/gtk2/g2minipad.c ../win/gtk2/g2minipad.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2minipad.c
++# GEM stuff
+@@ -811,0 +850 @@
++
+--- Makefile.orig 2005-11-01 01:07:46.000000000 +0100
++++ Makefile 2005-11-01 01:16:46.000000000 +0100
+@@ -43 +43 @@
+-VARDATND = x11tiles pet_mark.xbm rip.xpm
++# VARDATND = x11tiles pet_mark.xbm rip.xpm
+@@ -51,0 +52 @@
++VARDATND = x11tiles equip.png rip.xpm mapbg.xpm gtk2hack.png gold24.png pad_unclicked.png pad_clicked.png
+@@ -165,0 +167,12 @@
++# for gtk2
++equip.png:
++ (cd dat ; $(MAKE) equip.png )
++gtk2hack.png:
++ (cd dat ; $(MAKE) gtk2hack.png )
++gold24.png:
++ (cd dat ; $(MAKE) gold24.png )
++pad_unclicked.png:
++ (cd dat ; $(MAKE) pad_unclicked.png )
++pad_clicked.png:
++ (cd dat ; $(MAKE) pad_clicked.png )
++
+@@ -244,0 +254,3 @@
++# copy translations for gtk2hack
++ (cd dat ; $(MAKE) locale )
++ cp -r dat/locale $(GAMEDIR)
+--- src/windows.c.orig 2005-11-01 01:47:51.000000000 +0100
++++ src/windows.c 2005-11-01 01:48:48.000000000 +0100
+@@ -39,0 +40,4 @@
++#ifdef GTK2_GRAPHICS
++#include "winGtk2.h"
++extern struct window_procs Gtk2_procs;
++#endif
+@@ -80,0 +85,3 @@
++#ifdef GTK2_GRAPHICS
++ { &Gtk2_procs, 0 },
++#endif
+
+--- dat/Makefile.orig 2005-11-01 18:52:11.000000000 +0100
++++ dat/Makefile 2005-04-27 15:01:53.000000000 +0200
+@@ -44,3 +43,0 @@
+-NetHack.ad: ../win/X11/NetHack.ad
+- cp ../win/X11/NetHack.ad NetHack.ad
+-
+@@ -55,0 +53,21 @@
++#for gtk2
++equip.png: ../win/gtk2/equip.png
++ cp ../win/gtk2/equip.png equip.png
++
++gtk2hack.png: ../win/gtk2/gtk2hack.png
++ cp ../win/gtk2/gtk2hack.png gtk2hack.png
++
++gold24.png: ../win/gtk2/gold24.png
++ cp ../win/gtk2/gold24.png gold24.png
++
++pad_unclicked.png: ../win/gtk2/pad_unclicked.png
++ cp ../win/gtk2/pad_unclicked.png pad_unclicked.png
++
++pad_clicked.png: ../win/gtk2/pad_clicked.png
++ cp ../win/gtk2/pad_clicked.png pad_clicked.png
++
++locale: ../win/gtk2/po/*
++ if [ -e locale ] ; then rm -r locale; fi
++ mkdir locale;
++ cd ../win/gtk2/ && ./copy_trans.sh
++
+@@ -144 +156 @@
+- -rm -f rip.img GEM_RSC.RSC title.img nh16.img NetHack.ad
++ -rm -f rip.img GEM_RSC.RSC title.img nh16.img
diff --git a/patches/3.4.3-maemo1.patch b/patches/3.4.3-maemo1.patch
new file mode 100644
index 0000000..3b4108f
--- /dev/null
+++ b/patches/3.4.3-maemo1.patch
@@ -0,0 +1,11 @@
+--- include/config.h.orig 2005-10-31 20:33:32.000000000 +0100
++++ include/config.h 2005-10-31 20:34:18.000000000 +0100
+@@ -45,2 +45,2 @@
+-#define TTY_GRAPHICS /* good old tty based graphics */
+-#define X11_GRAPHICS 1
++/*#define TTY_GRAPHICS */ /* good old tty based graphics but not needed in MAEMO*/
++/*#define X11_GRAPHICS 1 */ /* does not compile in MAEMO */
+@@ -217 +217,1 @@
+-# define HACKDIR "/usr/games/lib/nethackdir"
++# define HACKDIR "/var/lib/install/usr/games/lib/nethackdir"
+
diff --git a/patches/3.4.3-maemo2.patch b/patches/3.4.3-maemo2.patch
new file mode 100644
index 0000000..fe5113c
--- /dev/null
+++ b/patches/3.4.3-maemo2.patch
@@ -0,0 +1,7 @@
+--- include/config.h.orig 2005-10-31 20:33:32.000000000 +0100
++++ include/config.h 2005-10-31 20:34:18.000000000 +0100
+@@ -45,2 +45,2 @@
+-#define TTY_GRAPHICS /* good old tty based graphics */
+-#define X11_GRAPHICS 1
++/*#define TTY_GRAPHICS */ /* good old tty based graphics but not needed in MAEMO*/
++/*#define X11_GRAPHICS 1 */ /* does not compile in MAEMO */
diff --git a/patches/3.4.3-maemo4.patch b/patches/3.4.3-maemo4.patch
new file mode 100644
index 0000000..650bb31
--- /dev/null
+++ b/patches/3.4.3-maemo4.patch
@@ -0,0 +1,28 @@
+--- include/config.h.orig 2005-10-31 20:33:32.000000000 +0100
++++ include/config.h 2005-10-31 20:34:18.000000000 +0100
+@@ -45,2 +45,2 @@
+-#define TTY_GRAPHICS /* good old tty based graphics */
+-#define X11_GRAPHICS 1
++/*#define TTY_GRAPHICS */ /* good old tty based graphics but not needed in MAEMO*/
++/*#define X11_GRAPHICS 1 */ /* does not compile in MAEMO */
+--- src/Makefile.orig 2007-11-01 12:02:12.000000000 +0100
++++ src/Makefile 2007-11-01 12:03:31.000000000 +0100
+@@ -149,7 +149,7 @@
+ GNOMEINC=-I/usr/lib/glib/include -I/usr/lib/gnome-libs/include -I../win/gnome
+
+ # Only used for the Gtk2 interface.
+-GTK2INC=`pkg-config gtk+-2.0 --cflags` `pkg-config hildon-libs --cflags` `pkg-config libosso --cflags` `pkg-config dbus-1 --cflags`
++GTK2INC=`pkg-config gtk+-2.0 --cflags` `pkg-config hildon-1 --cflags` `pkg-config libosso --cflags` `pkg-config dbus-1 --cflags`
+
+ # flags for debugging:
+ # CFLAGS = -g -I../include
+@@ -262,7 +262,7 @@
+ WINGNOMELIB = -lgnomeui -lgnome -lart_lgpl -lgtk -lgdk -lpopt
+ #
+ # libraries for Gtk2
+-WINGTK2LIB =`pkg-config gtk+-2.0 --libs` `pkg-config hildon-libs --libs` `pkg-config libosso --libs` `pkg-config dbus-1 --libs`
++WINGTK2LIB =`pkg-config gtk+-2.0 --libs` `pkg-config hildon-1 --libs` `pkg-config libosso --libs` `pkg-config dbus-1 --libs`
+ #
+ # libraries for Gem port
+ WINGEMLIB = -le_gem -lgem
+
diff --git a/patches/cflags.patch b/patches/cflags.patch
new file mode 100644
index 0000000..d9ee4ac
--- /dev/null
+++ b/patches/cflags.patch
@@ -0,0 +1,11 @@
+--- src/Makefile.orig 2007-11-01 13:31:47.000000000 +0100
++++ src/Makefile 2007-11-01 13:32:55.000000000 +0100
+@@ -154,7 +154,7 @@
+ # flags for debugging:
+ # CFLAGS = -g -I../include
+
+-CFLAGS = -O -I../include
++CFLAGS = $(CFLAGS_DEB) -fomit-frame-pointer -I../include
+ LFLAGS =
+
+ # The Qt and Be window systems are written in C++, while the rest of
diff --git a/patches/dot.nethackrc b/patches/dot.nethackrc
new file mode 100644
index 0000000..6749cac
--- /dev/null
+++ b/patches/dot.nethackrc
@@ -0,0 +1,20 @@
+#
+# Nethack configuration file.
+#
+# Please read the Guidebook in /usr/share/doc/nethack or at www.nethack.org.
+#
+# Naming this file $(HOME)/.nethackrc or setting the environment
+# variable NETHACKOPTIONS to point to its full path name elsewhere tells
+# NetHack to use X11 windowing (provided the executable was compiled with
+# that ability).
+#
+
+# options for maemo:
+OPTIONS=number_pad,hilite_pet,toptenwin,confirm,rest_on_space,noautopickup,safe_pet,showexp
+# And force question about the player name
+OPTIONS=name:player
+OPTIONS=tile_file:tiles32.png,tile_width=32,tile_height=32
+#OPTIONS=tile_file:ClassicBW.png,tile_width=16,tile_height=24
+#OPTIONS=tile_file:ClassicBW.png,tile_width=16,tile_height=24
+#OPTIONS=tile_file:ClassicColor.png,tile_width=16,tile_height=24
+
diff --git a/patches/gtk2-alt.patch b/patches/gtk2-alt.patch
new file mode 100644
index 0000000..82f42b5
--- /dev/null
+++ b/patches/gtk2-alt.patch
@@ -0,0 +1,101 @@
+--- include/config.h.orig 2005-04-27 15:01:54.000000000 +0200
++++ include/config.h 2003-12-08 00:39:13.000000000 +0100
+@@ -48,0 +48,1 @@
++#define GTK2_GRAPHICS /* Gtk2 interface */
+@@ -55 +56 @@
+- * tty, X11, mac, amii, BeOS, Qt, Gem, Gnome
++ * tty, X11, mac, amii, BeOS, Qt, Gem, Gnome, Gtk2
+@@ -107,1 +105,8 @@
++#ifdef GTK2_GRAPHICS
++ #define USE_XPM /* Use XPM format for images (required) */
++ #define GRAPHIC_TOMBSTONE /* Use graphical tombstone (rip.ppm) */
++ #ifndef DEFAULT_WINDOW_SYS
++ #define DEFAULT_WINDOW_SYS "Gtk2"
++ #endif
++ #define ENABLE_NLS /* Use translated gui strings */
++#endif
+-
+@@ -351 +341 @@
+-/* #define SCORE_ON_BOTL */ /* added by Gary Erickson (erickson@ucivax) */
++#define SCORE_ON_BOTL /* added by Gary Erickson (erickson@ucivax) */
+@@ -362 +352 @@
+-/*#define AUTOPICKUP_EXCEPTIONS */ /* exceptions to autopickup */
++#define AUTOPICKUP_EXCEPTIONS /* exceptions to autopickup */
+--- src/Makefile.orig 2005-10-31 20:44:09.000000000 +0100
++++ src/Makefile 2005-04-27 15:01:54.000000000 +0200
+@@ -150,0 +150 @@
++GTK2INC=`pkg-config gtk+-2.0 --cflags`
+@@ -202,0 +202,9 @@
++#
++# Files for a Gtk2 port
++#
++WINGTK2SRC = ../win/gtk2/g2bind.c ../win/gtk2/g2main.c ../win/gtk2/g2mesg.c\
++ ../win/gtk2/g2player.c ../win/gtk2/g2map.c ../win/gtk2/g2marsh.c\
++ ../win/gtk2/g2status.c ../win/gtk2/g2menu.c ../win/gtk2/g2text.c\
++ ../win/gtk2/g2equip.c
++WINGTK2OBJ = g2bind.o g2main.o g2mesg.o g2player.o g2map.o g2marsh.o g2status.o\
++ g2menu.o g2text.o g2equip.o tile.o
+@@ -217,2 +218,2 @@
+-WINSRC = $(WINGNOMESRC)
+-WINOBJ = $(WINGNOMEOBJ)
++WINSRC = $(WINTTYSRC) $(WINGTK2SRC)
++WINOBJ = $(WINTTYOBJ) $(WINGTK2OBJ)
+@@ -250 +251,6 @@
+-WINGNOMELIB = -lgnomeui -lgnome -lart_lgpl -lgtk -lgdk -lpopt
++WINGNOMELIB = -L/opt/gnome/lib -lgnomeui -lgnome -lart_lgpl -lgtk -lgdk -lpopt
++
++#
++# libraries for Gtk2
++WINGTK2LIB =`pkg-config gtk+-2.0 --libs`
++
+@@ -258 +264 @@
+-WINLIB = $(WINGNOMELIB)
++WINLIB = $(WINTTYLIB) $(WINGTK2LIB)
+@@ -341 +347 @@
+-WINCSRC = $(WINTTYSRC) $(WINX11SRC) $(WINGNOMESRC) $(WINGEMSRC)
++WINCSRC = $(WINTTYSRC) $(WINX11SRC) $(WINGNOMESRC) $(WINGTK2SRC)$(WINGEMSRC)
+@@ -729,1 +735,24 @@
++
++# Gtk2 stuff
++g2bind.o: ../win/gtk2/g2bind.c ../win/gtk2/g2bind.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2bind.c
++g2main.o: ../win/gtk2/g2main.c ../win/gtk2/g2main.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2main.c
++g2mesg.o: ../win/gtk2/g2mesg.c ../win/gtk2/g2mesg.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2mesg.c
++g2player.o: ../win/gtk2/g2player.c ../win/gtk2/g2player.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2player.c
++g2map.o: ../win/gtk2/g2map.c ../win/gtk2/g2map.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2map.c
++g2marsh.o: ../win/gtk2/g2marsh.c ../win/gtk2/g2marsh.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2marsh.c
++g2status.o: ../win/gtk2/g2status.c ../win/gtk2/g2status.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2status.c
++g2menu.o: ../win/gtk2/g2menu.c ../win/gtk2/g2menu.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2menu.c
++g2text.o: ../win/gtk2/g2text.c ../win/gtk2/g2text.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2text.c
++g2equip.o: ../win/gtk2/g2equip.c ../win/gtk2/g2equip.h ../win/gtk2/g2i18n.h $(HACK_H)
++ $(CC) $(MAEMO_FLAGS) $(CFLAGS) $(GTK2INC) -c ../win/gtk2/g2equip.c
++
+--- Makefile.orig 2005-10-31 20:44:09.000000000 +0100
++++ Makefile 2005-04-27 15:01:54.000000000 +0200
+@@ -43 +43 @@
+-VARDATND =
++# VARDATND =
+@@ -51,0 +52,2 @@
++# for Gtk2
++ VARDATND = x11tiles equip.png rip.xpm mapbg.xpm gtk2hack.png gold24.png
+@@ -149,0 +152,8 @@
++# for gtk2
++equip.png:
++ (cd dat ; $(MAKE) equip.png )
++gtk2hack.png:
++ (cd dat ; $(MAKE) gtk2hack.png )
++gold24.png:
++ (cd dat ; $(MAKE) gold24.png )
++
+@@ -244,0 +255,3 @@
++# copy translations for gtk2hack
++ (cd dat ; $(MAKE) locale )
++ cp -r dat/locale $(GAMEDIR)
diff --git a/patches/gtk2/ChangeLog b/patches/gtk2/ChangeLog
new file mode 100644
index 0000000..3c0ec51
--- /dev/null
+++ b/patches/gtk2/ChangeLog
@@ -0,0 +1,26 @@
+2007-04-14 Tilman Vogel <tilman.vogel@web.de>
+
+ * makes available the ordinary 'm' (move) command.
+ You can use it to move explicitly without attacking.
+
+2007-03-11 Tilman Vogel <tilman.vogel@web.de>
+
+ * add new icons for new commands
+ stock_whatshere_*
+ (xeyes.png from kdeartwork3-3.5.6)
+ stock_whatsthere_*
+ (qgn_addr_icon_search_in_group.png from maemo rootstrap)
+ stock_search_*
+ (i_edit_find.png from kdepim3-3.5.6)
+
+ * g2main.c: add new commands "What's here?" (:) and "What's
+ there?" (;)
+
+ (add_menu_and_toolbar): added tweak for HILDON which
+ reduces minimum button width used in toolbars in order to fit more
+ icons on the toolbar; set "expand" property on toolbar buttons
+
+ * g2minipad.c (gtk_minipad_button_timer): fixed endless loop
+ asking for "more details?" when using the central minipad button
+ with the "identify a map symbol" command
+
diff --git a/patches/gtk2/README b/patches/gtk2/README
new file mode 100644
index 0000000..73d211b
--- /dev/null
+++ b/patches/gtk2/README
@@ -0,0 +1,34 @@
+This document describes my reasons for developing Gtk2Hack and its goal.
+It will serve as a reminder and reference so that I do not lose my focus.
+Later the document might help contributers to understand (all?) design
+decisions made in the process.
+
+1. What is Gtk2Hack?
+Gtk2Hack is a window port for nethack 3.4.x. This means it adds a GUI-frontend
+to the popular ASCII-game.
+
+2. Why did I start developing Gtk2Hack?
+-the Gnome 1 window port got unmaintained and had some missing features (e.g.
+ no permanent inventory, ugly preferences menu and player selection, too big
+ icons in the status window...)
+-with Gnome2/Gtk+2.0 there was a greatly improved new developer platform
+-I wanted to increase my experiences with the C programming language
+-I wanted to get to know the Gnome2/Gtk+2.0 platform
+-fun!
+
+3. What are the goals of Gtk2Hack?
+-to provide a nice and clean frontend for nethack
+-to support most (all?) features and configuration options nethack provides
+-to never get in the way of the player and be completely keyboard controllable
+ like the tty-version
+-to improve the gaming experience by adding some eye-candy (different tilesets),
+ making use of bigger screens and multiple windows to help the player and to
+ more or less integrate in a modern destop environment
+-to help new players play nethack by providing menus and/or buttons for most
+ commands
+
+4. What else could be done?
+-internationalization of nethack?
+-highscore window on demand
+-autotools build system
+-better mouse support (even drag and drop of equipment?) \ No newline at end of file
diff --git a/patches/gtk2/copy_trans.sh b/patches/gtk2/copy_trans.sh
new file mode 100755
index 0000000..001a069
--- /dev/null
+++ b/patches/gtk2/copy_trans.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+cd po
+for i in *
+do
+ if [ -d $i ]
+ then
+ cp -r $i ../../../dat/locale
+ fi
+done
+
+
+
diff --git a/patches/gtk2/equip.png b/patches/gtk2/equip.png
new file mode 100644
index 0000000..e7500d3
--- /dev/null
+++ b/patches/gtk2/equip.png
Binary files differ
diff --git a/patches/gtk2/extract-pot.sh b/patches/gtk2/extract-pot.sh
new file mode 100755
index 0000000..f2c3b8e
--- /dev/null
+++ b/patches/gtk2/extract-pot.sh
@@ -0,0 +1 @@
+xgettext --keyword=_ --keyword=N_ -d gtk2hack -s -o po/gtk2hack.pot *.c *.h \ No newline at end of file
diff --git a/patches/gtk2/g2bind.c b/patches/gtk2/g2bind.c
new file mode 100644
index 0000000..fb5fb3e
--- /dev/null
+++ b/patches/gtk2/g2bind.c
@@ -0,0 +1,1138 @@
+/* Binding the nethack engine to the gtk2 port
+ *
+ * $Id: g2bind.c,v 1.2 2004/06/27 00:17:32 miq Exp $
+ *
+ */
+
+
+/** define this if you want to see more dialogs to choose from, so more mouse instead of keys */
+#define MORE_DIALOGS
+
+
+// #include <gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "g2map.h" /* for get_tile */
+
+#include "g2bind.h"
+#include "g2main.h"
+#include "g2player.h"
+#include "g2text.h"
+#include "g2i18n.h"
+
+#include "func_tab.h"
+#include "decl.h" /* for inventory and such */
+#include "obj.h" /* for obj_to_glyph */
+#include "objclass.h" /* for gold */
+
+struct window_procs Gtk2_procs = {
+ "Gtk2",
+ WC_COLOR | WC_HILITE_PET | WC_INVERSE,
+ 0L,
+ gtk2_init_nhwindows,
+ gtk2_player_selection,
+ gtk2_askname,
+ gtk2_get_nh_event,
+ gtk2_exit_nhwindows,
+ gtk2_suspend_nhwindows,
+ gtk2_resume_nhwindows,
+ gtk2_create_nhwindow,
+ gtk2_clear_nhwindow,
+ gtk2_display_nhwindow,
+ gtk2_destroy_nhwindow,
+ gtk2_curs,
+ gtk2_putstr,
+ gtk2_display_file,
+ gtk2_start_menu,
+ gtk2_add_menu,
+ gtk2_end_menu,
+ gtk2_select_menu,
+ genl_message_menu, /* no need for X-specific handling */
+ gtk2_update_inventory,
+ gtk2_mark_synch,
+ gtk2_wait_synch,
+#ifdef CLIPPING
+ gtk2_cliparound,
+#endif
+#ifdef POSITIONBAR
+ donull,
+#endif
+ gtk2_print_glyph,
+ gtk2_raw_print,
+ gtk2_raw_print_bold,
+ gtk2_nhgetch,
+ gtk2_nh_poskey,
+ gtk2_nhbell,
+ gtk2_doprev_message,
+ gtk2_yn_function,
+ gtk2_getlin,
+ gtk2_get_ext_cmd,
+ gtk2_number_pad,
+ gtk2_delay_output,
+#ifdef CHANGE_COLOR /* only a Mac option currently */
+ donull,
+ donull,
+#endif
+ /* other defs that really should go away (they're tty specific) */
+ gtk2_start_screen,
+ gtk2_end_screen,
+ gtk2_outrip,
+ genl_preference_update,
+};
+
+#define G2_OUTPUT_DELAY 40 /* milliseconds to wait between delayed outputs */
+#ifndef HILDON
+static gboolean inventoryReady = FALSE;
+#endif
+static gboolean delayDone = FALSE;
+
+void
+gtk2_init_nhwindows (int *argcp, char **argv)
+{
+ g2_init_main_window (argcp, argv);
+ iflags.window_inited = TRUE;
+}
+
+void
+gtk2_player_selection (void)
+{
+ g2_do_player_selection (g2_get_main_window ());
+}
+
+void
+gtk2_askname (void)
+{
+ GtkWidget *inputDialog;
+ GtkWidget *spacerVbox;
+ GtkWidget *questionLabel;
+ GtkWidget *inputEntry;
+ gint response;
+
+ inputDialog = gtk_dialog_new_with_buttons (_("Choose your name?"),
+ GTK_WINDOW (g2_get_main_window
+ ()),
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+ spacerVbox = gtk_vbox_new (FALSE, 6);
+
+ gtk_container_set_border_width (GTK_CONTAINER (spacerVbox), 5);
+ questionLabel = gtk_label_new (_("What's your name?"));
+ gtk_misc_set_alignment (GTK_MISC (questionLabel), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (spacerVbox), questionLabel, TRUE, FALSE, 5);
+
+ inputEntry = gtk_entry_new ();
+ gtk_entry_set_max_length (GTK_ENTRY (inputEntry), PL_NSIZ - 1);
+ gtk_entry_set_text (GTK_ENTRY (inputEntry), plname);
+ gtk_entry_set_activates_default (GTK_ENTRY (inputEntry), TRUE);
+ gtk_box_pack_start (GTK_BOX (spacerVbox), inputEntry, TRUE, FALSE, 5);
+
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inputDialog)->vbox), spacerVbox,
+ TRUE, TRUE, 0);
+ gtk_dialog_set_default_response (GTK_DIALOG (inputDialog), GTK_RESPONSE_OK);
+ gtk_widget_show_all (inputDialog);
+
+ response = gtk_dialog_run (GTK_DIALOG (inputDialog));
+ if (response == GTK_RESPONSE_OK) {
+ g_strlcpy (plname, gtk_entry_get_text (GTK_ENTRY (inputEntry)), PL_NSIZ);
+ } else {
+ // do nothing
+ }
+ gtk_widget_destroy (inputDialog);
+
+}
+
+void
+gtk2_get_nh_event (void)
+{
+ /* XXX: We do our own eventhandling ?! */
+}
+
+void
+gtk2_exit_nhwindows (const char *string)
+{
+ g2_exit_windows (string);
+}
+
+void
+gtk2_suspend_nhwindows (const char *string)
+{
+ g_print ("gtk2_suspend_nhwindows: currently unimplemented\n");
+}
+
+void
+gtk2_resume_nhwindows (void)
+{
+ g_print ("resume_nhwindows: currently unimplemented\n");
+}
+
+winid
+gtk2_create_nhwindow (int type)
+{
+ return g2_create_window (type);
+}
+
+void
+gtk2_clear_nhwindow (winid wid)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "clear", NULL);
+}
+
+void
+gtk2_display_nhwindow (winid wid, BOOLEAN_P block)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "display", block, NULL);
+ /* show the map and wait until user presses a key. This causes the output to
+ * block when detecting monsters, gold, food or finding a trap hidden under
+ * some item.
+ */
+ if (block && wid == WIN_MAP) {
+ gtk2_nhgetch ();
+ }
+}
+
+void
+gtk2_destroy_nhwindow (winid wid)
+{
+ /* XXX prevent our main windows from being destroyed! */
+ if (wid != WIN_MAP && wid != WIN_STATUS && wid != WIN_MESSAGE) {
+ gtk_widget_destroy (GTK_WIDGET (wid));
+ }
+}
+
+void
+gtk2_curs (winid wid, int x, int y)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "curs", x, y, NULL);
+}
+
+void
+gtk2_putstr (winid wid, int attr, const char *text)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "putstr", attr, text, NULL);
+}
+
+void
+gtk2_display_file (const char *filename, BOOLEAN_P must_exist)
+{
+ dlb *file;
+
+ file = dlb_fopen (filename, "r");
+ if (file) {
+ GtkWidget *textWindow;
+ gchar line[128];
+
+ /* read the contents and display it */
+ textWindow = g2_text_new ();
+ while (dlb_fgets (line, 128, file)) {
+ /* XXX strip newline from buffer, think of changing putstr to not add \n */
+ line[strlen (line) - 1] = '\0';
+ g_signal_emit_by_name (G_OBJECT (textWindow), "putstr", 0, line, NULL);
+ }
+ dlb_fclose (file);
+ g_signal_emit_by_name (G_OBJECT (textWindow), "display", TRUE, NULL);
+ gtk_widget_destroy (textWindow);
+ } else if (!file && must_exist) {
+ /* show error */
+ GtkWidget *errorDialog;
+ gchar message[128];
+
+ g_snprintf (message, 128, "Error! Could not find file: %s\n", filename);
+ errorDialog =
+ gtk_message_dialog_new (GTK_WINDOW (g2_get_main_window ()),
+ GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, message);
+ gtk_dialog_run (GTK_DIALOG (errorDialog));
+ gtk_widget_destroy (errorDialog);
+ }
+}
+
+void
+gtk2_start_menu (winid wid)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "start_menu", NULL);
+}
+
+void
+gtk2_add_menu (winid wid, int glyph, const ANY_P * identifier,
+ CHAR_P accelerator, CHAR_P group_accel, int attr,
+ const char *str, BOOLEAN_P presel)
+{
+ g_signal_emit_by_name (G_OBJECT (wid),
+ "add_menu", glyph, identifier, accelerator,
+ group_accel, attr, str, presel, NULL);
+}
+
+void
+gtk2_end_menu (winid wid, const char *prompt)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "end_menu", prompt, NULL);
+}
+
+int
+gtk2_select_menu (winid wid, int how, MENU_ITEM_P ** selected)
+{
+ gint returnValue;
+
+ g_signal_emit_by_name (G_OBJECT (wid),
+ "select_menu", how, selected, &returnValue);
+
+ return returnValue;
+}
+
+void
+gtk2_update_inventory (void)
+{
+ /* XXX we need to investigate segfault when restoring game and not delaying inventory update */
+#ifndef HILDON
+ if (flags.perm_invent && inventoryReady) {
+ display_inventory (NULL, 0);
+ }
+#endif
+}
+
+void
+gtk2_mark_synch (void)
+{
+ /* XXX: do we have to do to something? */
+ g_print ("mark_synch, unimplemented\n");
+}
+
+void
+gtk2_wait_synch (void)
+{
+ /* XXX: do we have to do to something? */
+ g_print ("wait_synch, unimplemented\n");
+}
+
+void
+gtk2_cliparound (int x, int y)
+{
+ /* XXX: Currently we assume that only the map can be clipped */
+ g_signal_emit_by_name (G_OBJECT (WIN_MAP), "cliparound", x, y, NULL);
+}
+
+void
+gtk2_print_glyph (winid wid, XCHAR_P x, XCHAR_P y, int glyph)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "print_glyph", x, y, glyph, NULL);
+}
+
+void
+gtk2_raw_print (const char *str)
+{
+ /* g_print("%s\n", str); */
+}
+
+void
+gtk2_raw_print_bold (const char *str)
+{
+ /* g_print("%s\n", str); */
+ /* tty_raw_print_bold(str); */
+}
+
+/* XXX: This is our event-loop thingy, that checks the keybuffer */
+int
+gtk2_nhgetch (void)
+{
+ int key;
+
+ do {
+ while (keyBuffer == NULL) {
+ gtk_main_iteration ();
+ }
+ key = GPOINTER_TO_INT (keyBuffer->data);
+ keyBuffer = g_slist_delete_link (keyBuffer, keyBuffer);
+ }
+ while (key == 0); /* key == 0 would be a pos event */
+
+ return key;
+}
+
+
+/** Nethack callback function.
+ * Nethack is waiting for a key input or a position.
+ * we call gtk_main_iteration until we have something.
+ */
+int
+gtk2_nh_poskey (int *x, int *y, int *mod)
+{
+ gint key;
+
+ /* XXX hack: we call set a flag for perm_invent and call display_inventory the first time */
+#ifndef HILDON
+ // if (!inventoryReady && flags.perm_invent) {
+ // inventoryReady = TRUE;
+ // display_inventory(NULL, 0);
+ // }
+ g_signal_emit_by_name(G_OBJECT(g2_get_equipment_window()), "update" , NULL);
+#endif
+ while (keyBuffer == NULL) {
+ gtk_main_iteration ();
+ }
+ g_signal_emit_by_name (G_OBJECT (WIN_STATUS), "player_acted", NULL);
+ key = GPOINTER_TO_INT (keyBuffer->data);
+ keyBuffer = g_slist_delete_link (keyBuffer, keyBuffer);
+
+ /* key == 0 means that we return a position event */
+ if (key == 0) {
+ *x = clickX;
+ *y = clickY;
+ *mod = clickMod;
+ }
+ return key;
+}
+
+void
+gtk2_nhbell (void)
+{
+ gdk_beep ();
+}
+
+int
+gtk2_doprev_message (void)
+{
+ /* do nothing, we have a nice textarea with a scrollbar */
+ return 0;
+}
+
+
+/** An event handler for key events.
+ * Closes the dialog and returns the pressed key as result.
+ * The user doesn't have to press the buttons to make actions.
+ */
+static gboolean
+g2_dialog_key_press_event (GtkWidget * widget, GdkEventKey * event,
+ gpointer data)
+{
+ gint key = event->keyval;
+
+ /* convert movement keys */
+ if (iflags.num_pad && g2_move_keys_with_numpad (event->keyval, &key)) {
+ gtk_dialog_response (GTK_DIALOG (widget), key);
+
+ } else if (g2_key_is_valid_input (key)) {
+ if (event->state & GDK_MOD1_MASK) {
+ /*g_print("modifier <ALT> pressed\n"); */
+ key = key | META_BIT;
+ } else if (event->state & GDK_CONTROL_MASK) {
+ /*g_print("modifier <CONTROL> pressed\n"); */
+ /* do not handle some menu accelerators which are not needed by nethack */
+ switch (key) {
+ case GDK_q:
+ return FALSE;
+ default:
+ break;
+ }
+ key = CTRL_BITS & key;
+ }
+
+ gtk_dialog_response (GTK_DIALOG (widget), key);
+ }
+
+
+ return TRUE;
+}
+
+
+/** Displays a yes/no/cancel dialog and returns the result */
+gchar
+gtk2_yn_dialog (const gchar * question, const gchar * choices, CHAR_P def)
+{
+ gchar res;
+ gint dialogResult;
+ GtkWidget *dialog =
+ gtk_message_dialog_new (GTK_WINDOW (g2_get_main_window ()),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ question);
+
+ /* -- add buttons */
+ if (g_strrstr (choices, "q") != NULL || g_strrstr (choices, "n") == NULL) { /* cancel should be always allowed */
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ }
+ if (g_strrstr (choices, "n") != NULL) {
+ gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_NO, GTK_RESPONSE_NO);
+ }
+
+ if (g_strrstr (choices, "y") != NULL) {
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
+ GTK_STOCK_YES, GTK_RESPONSE_YES);
+ }
+
+ if (g_strrstr (choices, "a") != NULL) {
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("All"), 'a');
+ }
+
+ if (g_strrstr (choices, "l") != NULL) {
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("Left"), 'l');
+ }
+
+ if (g_strrstr (choices, "r") != NULL) {
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("Right"), 'r');
+ }
+
+ /* -- set default action */
+ switch (def) {
+ case 'y':
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+ break;
+ case 'n':
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_NO);
+ break;
+ case 'a':
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), 'a');
+ break;
+ case 'l':
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), 'l');
+ break;
+ case 'r':
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), 'r');
+ break;
+ case 'q':
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog),
+ GTK_RESPONSE_CANCEL);
+ break;
+ }
+
+ g_signal_connect (G_OBJECT (dialog), "key_press_event",
+ G_CALLBACK (g2_dialog_key_press_event), dialog);
+
+ res = 0;
+ do {
+ dialogResult = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ switch (dialogResult) {
+ case GTK_RESPONSE_YES:
+ res = 'y';
+ break;
+ case GTK_RESPONSE_NO:
+ res = 'n';
+ break;
+ default:
+ if (dialogResult > ' ')
+ res = dialogResult;
+
+ else if (choices != NULL && g_strrstr (choices, "q") != NULL) {
+ res = 'q';
+ }
+ break;
+ }
+
+ }
+ while (res == 0);
+
+ gtk_widget_destroy (dialog);
+
+ return res;
+}
+
+
+/** a convinience function for adding something to a table */
+void
+table_attach_simple (GtkTable * table, GtkWidget * widget, gint x, gint y)
+{
+ gtk_table_attach (table, widget,
+ x, x + 1, y, y + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
+}
+
+
+
+typedef struct
+{
+ const gchar *name;
+ const gchar key;
+ const gchar num_key;
+ const gint xpos;
+ const gint ypos;
+} DirectionButton;
+
+static DirectionButton direction_buttons[] = {
+ {HACK_STOCK_DIR_NW, 'y', '7', 0, 0},
+ {HACK_STOCK_DIR_N, 'k', '8', 1, 0},
+ {HACK_STOCK_DIR_NE, 'u', '9', 2, 0},
+ {HACK_STOCK_DIR_W, 'h', '4', 0, 1},
+ {HACK_STOCK_DIR_SELF, '.', '.', 1, 1},
+ {HACK_STOCK_DIR_E, 'l', '6', 2, 1},
+ {HACK_STOCK_DIR_SW, 'b', '1', 0, 2},
+ {HACK_STOCK_DIR_S, 'j', '2', 1, 2},
+ {HACK_STOCK_DIR_SE, 'n', '3', 2, 2},
+ {GTK_STOCK_GO_UP, '<', '<', 3, 1},
+ {GTK_STOCK_GO_DOWN, '>', '>', 3, 2},
+};
+
+/* Callback activated by direction button press.
+ * just closes the dialog with the correct response */
+static void
+gtk2_direction_button_callback (GtkWidget * widget, gpointer data)
+{
+ GtkWidget *dialog = gtk_widget_get_ancestor (widget, GTK_TYPE_DIALOG);
+
+ if (dialog) {
+ if (iflags.num_pad)
+ gtk_dialog_response (GTK_DIALOG (dialog),
+ ((DirectionButton *) data)->num_key);
+ else
+ gtk_dialog_response (GTK_DIALOG (dialog),
+ ((DirectionButton *) data)->key);
+ }
+}
+
+
+gchar
+gtk2_yn_direction_dialog ()
+{
+
+ int i;
+ GtkWidget *directionDialog;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *button;
+ gint response;
+ gchar res;
+
+// gint window_width;
+// gint window_height;
+
+ directionDialog = gtk_dialog_new_with_buttons ("In what direction?",
+ GTK_WINDOW
+ (g2_get_main_window ()),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+ gtk_dialog_set_has_separator (GTK_DIALOG (directionDialog), FALSE);
+
+ /* -- create the table and the direction buttons */
+ table = gtk_table_new (4, 3, FALSE);
+ for (i = 0; i < G_N_ELEMENTS (direction_buttons); i++) {
+ button = gtk_button_new_from_stock (direction_buttons[i].name);
+ table_attach_simple (GTK_TABLE (table), button,
+ direction_buttons[i].xpos, direction_buttons[i].ypos);
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (gtk2_direction_button_callback), &(direction_buttons[i]));
+ }
+
+ /* -- and now pack everything together */
+ vbox = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
+
+ gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
+
+
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (directionDialog)->vbox), vbox,
+ FALSE, FALSE, 0);
+ gtk_dialog_set_default_response (GTK_DIALOG (directionDialog),
+ GTK_RESPONSE_OK);
+
+ g_signal_connect (G_OBJECT (directionDialog), "key_press_event",
+ G_CALLBACK (g2_dialog_key_press_event), directionDialog);
+
+ gtk_widget_show_all (directionDialog);
+ gtk_window_move (GTK_WINDOW (directionDialog), 10, 300);
+ response = gtk_dialog_run (GTK_DIALOG (directionDialog));
+
+ if (response > 0) {
+ res = response;
+ } else {
+ res = 0;
+ }
+ gtk_widget_destroy (directionDialog);
+
+ return res;
+}
+
+/** my own isAlpha function.
+ * @returns TRUE if the character is a alpha character
+ */
+gchar
+isAlpha (gchar c)
+{
+ return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) ? TRUE : FALSE;
+}
+
+
+/* Callback activated by item button press.
+ * just closes the dialog with the correct response */
+static void
+gtk2_item_button_callback (GtkWidget * widget, gpointer data)
+{
+ GtkWidget *dialog = gtk_widget_get_ancestor (widget, GTK_TYPE_DIALOG);
+
+ if (dialog) {
+ gtk_dialog_response (GTK_DIALOG (dialog), GPOINTER_TO_INT (data));
+ }
+}
+
+
+
+/** Produces a new item button for the gtk2_yn_item_dialog() */
+GtkWidget *
+newItemButton (gchar id, int glyph)
+{
+ gchar text[2];
+ GtkWidget *button;
+
+ text[0] = id;
+ text[1] = '\0';
+
+ button = gtk_button_new_from_stock (text);
+ // gtk_container_set_border_width(GTK_CONTAINER(button), 0);
+
+ if (glyph != NO_GLYPH) {
+ GdkPixbuf *tile = g2_get_tile_scaled (glyph, 16);
+ GtkWidget *image = gtk_image_new_from_pixbuf (tile);
+ GValue value = { 0, };
+ g_value_init (&value, G_TYPE_OBJECT);
+ g_value_set_object (&value, G_OBJECT (image));
+ g_object_set_property (G_OBJECT (button), "image", &value);
+ g_value_unset (&value);
+ }
+
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (gtk2_item_button_callback), GINT_TO_POINTER ((int) id));
+
+ return button;
+}
+
+
+/** Returns the object for the given inventory character */
+struct obj *
+getObject (gchar c)
+{
+ struct obj *otmp;
+
+ for (otmp = invent; otmp; otmp = otmp->nobj)
+ if (otmp->invlet == c)
+ return otmp;
+
+ return NULL;
+}
+
+
+/** This dialog let's you choose some objects. (maybe to drop, e.g)*/
+gchar
+gtk2_yn_item_dialog (const gchar * question, const gchar * choice)
+{
+ gchar lastChar=0;
+ const gchar *pos;
+ int itemCount;
+ int itemWidth;
+ int itemNum;
+ GtkWidget *itemDialog;
+ GtkWidget *vbox;
+ GtkWidget *questionLabel;
+ GtkWidget *table;
+ gint response;
+ gchar res;
+
+ itemDialog = gtk_dialog_new_with_buttons (_("What item?"),
+ GTK_WINDOW (g2_get_main_window
+ ()),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+ gtk_dialog_set_has_separator (GTK_DIALOG (itemDialog), FALSE);
+
+ gtk_dialog_add_button (GTK_DIALOG (itemDialog), _("Details"), '?');
+ gtk_dialog_add_button (GTK_DIALOG (itemDialog), _("All Items"), '*');
+
+ /* -- add a label */
+ questionLabel = gtk_label_new (question);
+ gtk_label_set_line_wrap (GTK_LABEL (questionLabel), TRUE);
+ gtk_label_set_selectable (GTK_LABEL (questionLabel), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (questionLabel), 0.0, 0.0);
+
+
+ /* - start parsing the choice string */
+
+ /* - first count the item */
+ itemCount = 0;
+ for (pos = choice; *pos; pos++) {
+ if (*pos == '-' && itemCount == 0) { /* hands */
+ itemCount++;
+
+ } else if (*pos == '-' && isAlpha (lastChar) && isAlpha (*(pos + 1))) {
+ gchar c;
+
+ for (c = lastChar + 1; c < *(pos + 1); c++) {
+ itemCount++;
+ }
+ lastChar = c;
+
+ } else if (isAlpha (*pos)) {
+ itemCount++;
+ lastChar = *pos;
+
+ } else if (*pos == '$') {
+ itemCount++;
+ lastChar = *pos;
+
+ } else if (strstr (pos, " or ?*") == pos || *pos == ']') {
+ break;
+
+ } else {
+ lastChar = *pos;
+ }
+ }
+
+ if (itemCount <= 0)
+ itemCount = 1; /* prevent division by zero with parsing errors */
+
+ /* - figure out a width for our table */
+ if (itemCount < 5) {
+ itemWidth = itemCount;
+ } else if (itemCount < 20) {
+ itemWidth = 5;
+ } else {
+ itemWidth = 8;
+ }
+ table = gtk_table_new (itemWidth, itemCount / itemWidth, FALSE);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 5);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 5);
+
+ /* - now add them to our table */
+ itemNum = 0;
+ for (pos = choice; *pos; pos++) {
+ if (*pos == '-' && itemNum == 0) { /* hands */
+ table_attach_simple (GTK_TABLE (table),
+ newItemButton ('-',
+ LEATHER_GLOVES + GLYPH_OBJ_OFF),
+ itemNum % itemWidth, itemNum / itemWidth);
+ itemNum++;
+
+ } else if (*pos == '-' && isAlpha (lastChar) && isAlpha (*(pos + 1))) {
+ gchar c;
+
+ for (c = lastChar + 1; c < *(pos + 1); c++) {
+ table_attach_simple (GTK_TABLE (table),
+ newItemButton (c,
+ obj_to_glyph (getObject
+ (c))), itemNum % itemWidth, itemNum / itemWidth);
+ itemNum++;
+ }
+ lastChar = c;
+
+ } else if (isAlpha (*pos)) {
+
+ table_attach_simple (GTK_TABLE (table),
+ newItemButton (*pos,
+ obj_to_glyph (getObject
+ (*pos))), itemNum % itemWidth, itemNum / itemWidth);
+ itemNum++;
+ lastChar = *pos;
+
+ } else if (*pos == '$') {
+ table_attach_simple (GTK_TABLE (table),
+ newItemButton ('$',
+ GOLD_PIECE + GLYPH_OBJ_OFF),
+ itemNum % itemWidth, itemNum / itemWidth);
+ itemNum++;
+ lastChar = *pos;
+
+ } else if (strstr (pos, " or ?*") == pos || *pos == ']') {
+ break;
+
+ } else {
+ lastChar = *pos;
+ }
+ }
+
+
+
+ /* -- and now pack everything together */
+ vbox = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
+
+ gtk_box_pack_start (GTK_BOX (vbox), questionLabel, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
+
+
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (itemDialog)->vbox), vbox, FALSE,
+ FALSE, 0);
+
+ g_signal_connect (G_OBJECT (itemDialog), "key_press_event",
+ G_CALLBACK (g2_dialog_key_press_event), itemDialog);
+
+ gtk_widget_show_all (itemDialog);
+ response = gtk_dialog_run (GTK_DIALOG (itemDialog));
+
+ if (response > 0) {
+ res = response;
+
+ } else {
+ res = 0;
+ }
+ gtk_widget_destroy (itemDialog);
+
+ return res;
+}
+
+
+gchar
+gtk2_yn_edit_dialog (const gchar * question, const gchar * choices, CHAR_P def)
+{
+ GtkWidget *inputDialog;
+ GtkWidget *spacerVbox;
+ GtkWidget *label;
+ GtkWidget *inputEntry;
+ gint response;
+ gchar res;
+
+ inputDialog = gtk_dialog_new_with_buttons ("Gtk2Hack - Question",
+ GTK_WINDOW (g2_get_main_window
+ ()),
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+ spacerVbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (spacerVbox), 5);
+
+ label = gtk_label_new (question);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (spacerVbox), label, TRUE, FALSE, 5);
+
+ if (choices) {
+ label = gtk_label_new (choices);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (spacerVbox), label, TRUE, FALSE, 5);
+ }
+
+ inputEntry = gtk_entry_new ();
+ gtk_entry_set_max_length (GTK_ENTRY (inputEntry), 1);
+ if (def >= 'a') {
+ char scratch[3];
+
+ scratch[0] = def;
+ scratch[1] = '\0';
+ gtk_entry_set_text (GTK_ENTRY (inputEntry), scratch);
+ }
+ gtk_entry_set_activates_default (GTK_ENTRY (inputEntry), TRUE);
+ gtk_box_pack_start (GTK_BOX (spacerVbox), inputEntry, TRUE, FALSE, 5);
+
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inputDialog)->vbox), spacerVbox,
+ TRUE, TRUE, 0);
+ gtk_dialog_set_default_response (GTK_DIALOG (inputDialog), GTK_RESPONSE_OK);
+
+ /* We have a text entry, so the key press event should be left for the entry
+ g_signal_connect(G_OBJECT(inputDialog), "key_press_event",
+ G_CALLBACK(g2_dialog_key_press_event), inputDialog);
+ */
+
+ gtk_widget_show_all (inputDialog);
+ response = gtk_dialog_run (GTK_DIALOG (inputDialog));
+
+ if (response == GTK_RESPONSE_OK) {
+ res = gtk_entry_get_text (GTK_ENTRY (inputEntry))[0];
+
+ } else if (response > 0) {
+ res = response;
+
+ } else if (choices != NULL && g_strrstr (choices, "q") != NULL) {
+ res = 'q';
+
+ } else {
+ res = 0;
+ }
+ gtk_widget_destroy (inputDialog);
+
+ return res;
+}
+
+
+gchar
+gtk2_yn_function (const gchar * question, const gchar * choices, CHAR_P def)
+{
+
+ if (skip_question) {
+ int key;
+
+ skip_question = FALSE;
+ key = GPOINTER_TO_INT (keyBuffer->data);
+ keyBuffer = g_slist_delete_link (keyBuffer, keyBuffer);
+ return key;
+ }
+
+ /* a direction question? */
+ if (choices == NULL && strstr (question, "direction")) {
+#ifdef MINIPAD
+ int x, y, mod;
+ g_signal_emit_by_name (G_OBJECT (WIN_MESSAGE), "putstr", 0, question, NULL);
+ return gtk2_nh_poskey (&x, &y, &mod);
+#else
+ return gtk2_yn_direction_dialog ();
+#endif
+ /* a item question? */
+ } else if (choices == NULL && strstr (question, "or ?*]")) {
+ return gtk2_yn_item_dialog (question, strstr (question, "["));
+ /* Or a simple choice? */
+ } else if (choices != NULL &&
+ (strcmp (choices, "yn") == 0 ||
+ strcmp (choices, "ynq") == 0 ||
+ strcmp (choices, "ynaq") == 0 || strcmp (choices, "rl") == 0)) {
+ return gtk2_yn_dialog (question, choices, def);
+
+ } else {
+ return gtk2_yn_edit_dialog (question, choices, def);
+ }
+}
+
+void
+gtk2_getlin (const char *question, char *input)
+{
+ GtkWidget *inputDialog;
+ GtkWidget *spacerVbox;
+ GtkWidget *questionLabel;
+ GtkWidget *inputEntry;
+ gint response;
+
+ inputDialog = gtk_dialog_new_with_buttons (_("Gtk2Hack - Question"),
+ GTK_WINDOW (g2_get_main_window
+ ()),
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+ spacerVbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (spacerVbox), 5);
+ questionLabel = gtk_label_new (question);
+ gtk_misc_set_alignment (GTK_MISC (questionLabel), 0.0, 0.5);
+ inputEntry = gtk_entry_new ();
+ gtk_entry_set_max_length (GTK_ENTRY (inputEntry), BUFSIZ);
+ gtk_entry_set_activates_default (GTK_ENTRY (inputEntry), TRUE);
+ gtk_box_pack_start (GTK_BOX (spacerVbox), questionLabel, TRUE, FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (spacerVbox), inputEntry, TRUE, FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inputDialog)->vbox), spacerVbox,
+ TRUE, TRUE, 0);
+ gtk_dialog_set_default_response (GTK_DIALOG (inputDialog), GTK_RESPONSE_OK);
+ gtk_widget_show_all (inputDialog);
+ response = gtk_dialog_run (GTK_DIALOG (inputDialog));
+ if (response == GTK_RESPONSE_OK) {
+ g_strlcpy (input, gtk_entry_get_text (GTK_ENTRY (inputEntry)), BUFSIZ);
+ } else {
+ g_strlcpy (input, "\033\000", 2);
+ }
+ gtk_widget_destroy (inputDialog);
+}
+
+static gint
+g2_get_command_index (gchar * cmd)
+{
+ gint possibleCommands = 0;
+ gint commandIndex = -1;
+ gint i = 0;
+
+ for (i = 0; extcmdlist[i].ef_txt; i++) {
+ if (g_str_has_prefix (extcmdlist[i].ef_txt, cmd)) {
+ commandIndex = i;
+ possibleCommands++;
+ }
+ }
+ if (possibleCommands == 1) {
+ return commandIndex;
+ } else {
+ return -1;
+ }
+}
+
+static gint
+g2_complete_ext_cmd (gchar * commandBuffer)
+{
+ gint commandIndex;
+
+ g_print ("complete_ext_cmd\n");
+
+ commandIndex = g2_get_command_index (commandBuffer);
+ if (commandIndex == -1) {
+ g_signal_emit_by_name (G_OBJECT (WIN_MESSAGE), "show_ext_command",
+ commandBuffer, NULL);
+ } else {
+ g_signal_emit_by_name (G_OBJECT (WIN_MESSAGE), "show_ext_command",
+ extcmdlist[commandIndex].ef_txt, NULL);
+ }
+ return commandIndex;
+}
+
+int
+gtk2_get_ext_cmd (void)
+{
+ gint key;
+ gchar commandBuffer[10];
+ gint bufferIndex = 0;
+ gint commandIndex = -1;
+
+ g_print ("get_ext_cmd\n");
+ g_signal_emit_by_name (G_OBJECT (WIN_MESSAGE), "show_ext_command", "", NULL);
+ do {
+ while (keyBuffer == NULL) {
+ gtk_main_iteration ();
+ }
+ key = GPOINTER_TO_INT (keyBuffer->data);
+ keyBuffer = g_slist_delete_link (keyBuffer, keyBuffer);
+ if (key == GDK_Escape) {
+ commandIndex = -1;
+ } else if (bufferIndex > 0 && key == GDK_BackSpace) {
+ bufferIndex--;
+ commandBuffer[bufferIndex] = '\0';
+ commandIndex = g2_complete_ext_cmd (commandBuffer);
+ } else if (bufferIndex < 9 && g_ascii_isalnum ((guchar) key)) {
+ commandBuffer[bufferIndex] = (gchar) key;
+ commandBuffer[bufferIndex + 1] = '\0';
+ bufferIndex++;
+ commandIndex = g2_complete_ext_cmd (commandBuffer);
+ }
+ } while (key != GDK_Return && key != GDK_KP_Enter && key != GDK_Escape);
+ g_signal_emit_by_name (G_OBJECT (WIN_MESSAGE), "putstr", 0, "", NULL);
+
+ return commandIndex;
+}
+
+void
+gtk2_number_pad (int state)
+{
+ /* XXX: do we have to do to something? */
+ g_print ("gtk2_number_pad: currently unimplemented\n");
+}
+
+static gint
+timeout (gpointer data)
+{
+ delayDone = TRUE;
+ return FALSE;
+}
+
+void
+gtk2_delay_output (void)
+{
+ delayDone = FALSE;
+ g_timeout_add (G2_OUTPUT_DELAY, timeout, NULL);
+ while (delayDone == FALSE) {
+ gtk_main_iteration ();
+ }
+}
+
+void
+gtk2_start_screen (void)
+{
+ /* XXX: do we have to do to something? */
+}
+
+void
+gtk2_end_screen (void)
+{
+ /* XXX: do we have to do to something? */
+}
+
+void
+gtk2_outrip (winid wid, int how)
+{
+ g_signal_emit_by_name (G_OBJECT (wid), "outrip", how, NULL);
+ g_print ("gtk2_outrip: weakly implemented\n");
+}
+
+void
+gtk2_delete_nhwindow_by_reference (GtkWidget * menuWin)
+{
+ g_print ("gtk2_delete_nhwindow_by_reference: currently unimplemented\n");
+}
diff --git a/patches/gtk2/g2bind.h b/patches/gtk2/g2bind.h
new file mode 100644
index 0000000..cdb6736
--- /dev/null
+++ b/patches/gtk2/g2bind.h
@@ -0,0 +1,66 @@
+/*
+ * This header files defines the interface between the window port specific
+ * code in the Gnome port and the rest of the nethack game engine.
+ *
+ * $Id: g2bind.h,v 1.1.1.1 2004/06/23 02:01:43 miq Exp $
+ *
+ */
+
+#ifndef G2_BIND_H
+#define G2_BIND_H
+
+/* this *must* go before hack.h, else there is strange parse error in pango-headers */
+#include <gtk/gtk.h>
+
+#include "hack.h"
+#include "decl.h" /* for inventory and such */
+#include "dlb.h"
+#include "patchlevel.h"
+
+
+/* Some prototypes */
+void gtk2_init_nhwindows (int *argcp, char **argv);
+void gtk2_player_selection (void);
+void gtk2_askname (void);
+void gtk2_get_nh_event (void);
+void gtk2_exit_nhwindows (const char *string);
+void gtk2_suspend_nhwindows (const char *string);
+void gtk2_resume_nhwindows (void);
+winid gtk2_create_nhwindow (int type);
+void gtk2_create_nhwindow_by_id (int type, winid i);
+void gtk2_clear_nhwindow (winid wid);
+void gtk2_display_nhwindow (winid wid, BOOLEAN_P block);
+void gtk2_destroy_nhwindow (winid wid);
+void gtk2_curs (winid wid, int x, int y);
+void gtk2_putstr (winid wid, int attr, const char *text);
+void gtk2_display_file (const char *filename, BOOLEAN_P must_exist);
+void gtk2_start_menu (winid wid);
+void gtk2_add_menu (winid wid, int glyph, const ANY_P * identifier,
+ CHAR_P accelerator, CHAR_P group_accel, int attr,
+ const char *str, BOOLEAN_P presel);
+void gtk2_end_menu (winid wid, const char *prompt);
+int gtk2_select_menu (winid wid, int how, MENU_ITEM_P ** selected);
+
+/* No need for message_menu -- we'll use genl_message_menu instead */
+void gtk2_update_inventory (void);
+void gtk2_mark_synch (void);
+void gtk2_wait_synch (void);
+void gtk2_cliparound (int x, int y);
+void gtk2_print_glyph (winid wid, XCHAR_P x, XCHAR_P y, int glyph);
+void gtk2_raw_print (const char *str);
+void gtk2_raw_print_bold (const char *str);
+int gtk2_nhgetch (void);
+int gtk2_nh_poskey (int *x, int *y, int *mod);
+void gtk2_nhbell (void);
+int gtk2_doprev_message (void);
+char gtk2_yn_function (const char *question, const char *choices, CHAR_P def);
+void gtk2_getlin (const char *question, char *input);
+int gtk2_get_ext_cmd (void);
+void gtk2_number_pad (int state);
+void gtk2_delay_output (void);
+void gtk2_start_screen (void);
+void gtk2_end_screen (void);
+void gtk2_outrip (winid wid, int how);
+void gtk2_delete_nhwindow_by_reference (GtkWidget * menuWin);
+
+#endif /* G2_BIND_H */
diff --git a/patches/gtk2/g2equip.c b/patches/gtk2/g2equip.c
new file mode 100644
index 0000000..14a69e3
--- /dev/null
+++ b/patches/gtk2/g2equip.c
@@ -0,0 +1,235 @@
+/* the equipment window
+ *
+ * $Id: g2equip.c,v 1.4 2004/07/20 00:08:56 miq Exp $
+ *
+ */
+
+#include "config.h"
+
+#include "g2equip.h"
+#include "g2marsh.h"
+#include "g2map.h"
+#include "config.h"
+#include "g2i18n.h"
+#include "hack.h"
+
+static GtkVBoxClass *parent_class;
+static gint g2_equipment_signals[5];
+
+static void g2_equipment_class_init (G2EquipmentClass * class);
+static void g2_equipment_init (G2Equipment * equip);
+
+enum
+{
+ EQUIP_QUIVER,
+ EQUIP_HELMET,
+ EQUIP_ALT_WEAPON,
+ EQUIP_FACE,
+ EQUIP_AMULET,
+ EQUIP_ARMOR,
+ EQUIP_CAPE,
+ EQUIP_R_RING,
+ EQUIP_L_RING,
+ EQUIP_GLOVES,
+ EQUIP_WEAPON,
+ EQUIP_SHIELD,
+ EQUIP_TWO_WEAPON,
+#ifdef TOURIST
+ EQUIP_SHIRT,
+#endif
+ EQUIP_SKIN,
+ EQUIP_FEET,
+ EQUIP_COUNT
+};
+
+typedef struct
+{
+ gint x;
+ gint y;
+} Pos;
+
+struct obj *currWorn[EQUIP_COUNT];
+struct obj *lastWorn[EQUIP_COUNT];
+
+static Pos positions[] = {
+ {2, 33}, /* Quiver */
+ {50, 2}, /* Helmet */
+ {98, 9}, /*alternative weapon */
+ {76, 9}, /* Face */
+ {50, 33}, /* Amulet */
+ {50, 52}, /* Body armor */
+ {98, 33}, /* Cape? */
+ {2, 75}, /* right ring */
+ {98, 75}, /* left ring */
+ {2, 95}, /* gloves */
+ {2, 55}, /* weapon */
+ {98, 55}, /* shield? */
+ {98, 55}, /* second weapon, same position as shield! */
+#ifdef TOURIST
+ {50, 71}, /* Underwear?, should be ifdef's TOURIST */
+#endif
+ {50, 89}, /* dragon skin? */
+ {50, 141}, /* feet */
+};
+
+
+static const GTypeInfo g2_equipment_info = {
+ sizeof (G2EquipmentClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) g2_equipment_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (G2Equipment),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) g2_equipment_init
+};
+
+guint
+g2_equipment_get_type ()
+{
+ static GType g2_equipment_type = 0;
+
+ if (g2_equipment_type == 0) {
+ g2_equipment_type = g_type_register_static (GTK_TYPE_VBOX,
+ "G2Equipment", &g2_equipment_info, 0);
+ }
+ return g2_equipment_type;
+}
+
+static void
+g2_equipment_class_init (G2EquipmentClass * class)
+{
+ parent_class = gtk_type_class (gtk_vbox_get_type ());
+
+ g2_equipment_signals[0] =
+ g_signal_new ("update",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2EquipmentClass, g2_equipment_update),
+ NULL, NULL, gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
+}
+
+static void
+g2_equipment_refresh_outline (GtkWidget * win, GdkEventExpose * event,
+ gpointer data)
+{
+ G2Equipment *equip = G2_EQUIPMENT (data);
+
+ gdk_draw_drawable (win->window, win->style->white_gc,
+ equip->backBuffer, event->area.x, event->area.y,
+ event->area.x, event->area.y, event->area.width, event->area.height);
+}
+
+static void
+g2_equipment_set_worn ()
+{
+ currWorn[EQUIP_QUIVER] = uquiver; /* Quiver */
+ currWorn[EQUIP_HELMET] = uarmh; /* Helmet */
+ currWorn[EQUIP_ALT_WEAPON] = u.twoweap ? NULL : uswapwep;
+ currWorn[EQUIP_FACE] = ublindf; /* Face */
+ currWorn[EQUIP_AMULET] = uamul; /* Amulet */
+ currWorn[EQUIP_ARMOR] = uarm; /* Body armor */
+ currWorn[EQUIP_CAPE] = uarmc; /* Cape? */
+ currWorn[EQUIP_R_RING] = uright; /* right ring */
+ currWorn[EQUIP_L_RING] = uleft; /* left ring */
+ currWorn[EQUIP_GLOVES] = uarmg; /* gloves */
+ currWorn[EQUIP_WEAPON] = uwep; /* weapon */
+ currWorn[EQUIP_SHIELD] = uarms; /* shield? */
+ currWorn[EQUIP_TWO_WEAPON] = u.twoweap ? uswapwep : NULL;
+#ifdef TOURIST
+ currWorn[EQUIP_SHIRT] = uarmu; /* Underwear */
+#endif
+ currWorn[EQUIP_SKIN] = uskin; /* dragon-skin?! */
+ currWorn[EQUIP_FEET] = uarmf; /* feet */
+}
+
+
+static void
+g2_equipment_update (GtkWidget * win, gpointer gp)
+{
+ G2Equipment *equip = G2_EQUIPMENT (win);
+
+ gint i;
+ gint tileWidth = g2_get_tile_width ();
+ gint tileHeight = g2_get_tile_height ();
+
+ g2_equipment_set_worn ();
+ for (i = 0; i < EQUIP_COUNT; i++) {
+ if (currWorn[i] != lastWorn[i]) {
+ if (currWorn[i]) {
+ GdkPixbuf *tile = g2_get_tile (obj_to_glyph (currWorn[i]));
+
+ gdk_draw_pixbuf (equip->backBuffer,
+ equip->equipWin->style->white_gc, tile, 0, 0,
+ positions[i].x, positions[i].y, tileWidth,
+ tileHeight, GDK_RGB_DITHER_NONE, 0, 0);
+ gtk_widget_queue_draw_area (equip->equipWin, positions[i].x,
+ positions[i].y, tileWidth, tileHeight);
+ } else {
+ gdk_draw_pixbuf (equip->backBuffer,
+ equip->equipWin->style->white_gc,
+ equip->equipOutline, positions[i].x,
+ positions[i].y, positions[i].x, positions[i].y,
+ tileWidth, tileHeight, GDK_RGB_DITHER_NONE, 0, 0);
+ gtk_widget_queue_draw_area (equip->equipWin, positions[i].x,
+ positions[i].y, tileWidth, tileHeight);
+ }
+ lastWorn[i] = currWorn[i];
+ }
+ }
+}
+
+static void
+g2_equipment_init (G2Equipment * equip)
+{
+ GError *err = NULL;
+ PangoAttrList *boldAttrList;
+ PangoAttribute *attr;
+ GdkVisual *visual;
+
+ g2_equipment_set_worn ();
+ boldAttrList = pango_attr_list_new ();
+ attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (boldAttrList, attr);
+
+ gtk_widget_set_name (GTK_WIDGET (equip), "equipment window");
+
+ equip->equipWin = gtk_drawing_area_new ();
+ equip->equipOutline = gdk_pixbuf_new_from_file ("equip.png", &err);
+ /* XXX: determine depth somehow differently */
+ visual = gdk_visual_get_system ();
+ equip->backBuffer = gdk_pixmap_new (NULL,
+ gdk_pixbuf_get_width (equip->
+ equipOutline),
+ gdk_pixbuf_get_height (equip->equipOutline), visual->depth);
+ gdk_draw_pixbuf (equip->backBuffer, equip->equipWin->style->white_gc,
+ equip->equipOutline, 0, 0, 0, 0, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
+
+ gtk_drawing_area_size (GTK_DRAWING_AREA (equip->equipWin),
+ gdk_pixbuf_get_width (equip->equipOutline),
+ gdk_pixbuf_get_height (equip->equipOutline));
+ g_signal_connect (G_OBJECT (equip->equipWin), "expose_event",
+ G_CALLBACK (g2_equipment_refresh_outline), (gpointer) equip);
+ gtk_box_pack_start (GTK_BOX (equip), equip->equipWin, TRUE, FALSE, 0);
+
+ gtk_widget_set_size_request (GTK_WIDGET (equip),
+ gdk_pixbuf_get_width (equip->equipOutline),
+ gdk_pixbuf_get_height (equip->equipOutline));
+ gtk_widget_show_all (GTK_WIDGET (equip));
+}
+
+
+GtkWidget *
+g2_equipment_new ()
+{
+ G2Equipment *g2Equip;
+
+ g2Equip = G2_EQUIPMENT (g_object_new (TYPE_G2_EQUIPMENT, NULL));
+ g_signal_connect (G_OBJECT (g2Equip), "update",
+ G_CALLBACK (g2_equipment_update), NULL);
+
+ return GTK_WIDGET (g2Equip);
+}
diff --git a/patches/gtk2/g2equip.h b/patches/gtk2/g2equip.h
new file mode 100644
index 0000000..5ca98f1
--- /dev/null
+++ b/patches/gtk2/g2equip.h
@@ -0,0 +1,37 @@
+/* the equipment window
+ *
+ * $Id: g2equip.h,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+#ifndef G2_EQUIPMENT_WINDOW_H
+#define G2_EQUIPMENT_WINDOW_H
+
+#include <gtk/gtk.h>
+
+#define TYPE_G2_EQUIPMENT (g2_equipment_get_type())
+#define G2_EQUIPMENT(obj) GTK_CHECK_CAST(obj, g2_equipment_get_type(), G2Equipment)
+#define G2_EQUIPMENT_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, g2_equipment_get_type(), G2EquipmentClass)
+#define IS_G2_EQUIPMENT(obj) GTK_CHECK_TYPE(obj, g2_equipment_get_type())
+
+typedef struct
+{
+ GtkVBox equipContainer;
+
+ GtkWidget *equipWin;
+ GdkPixmap *backBuffer;
+ GdkPixbuf *equipOutline;
+} G2Equipment;
+
+typedef struct
+{
+ GtkVBoxClass parent_class;
+
+ void (*g2_equipment_update) (G2Equipment * g2Equipment);
+ void (*g2_equipment_display) (G2Equipment * g2Equipment);
+ void (*g2equipment) (G2Equipment * g2Equipment);
+} G2EquipmentClass;
+
+GtkWidget *g2_equipment_new ();
+
+#endif /* G2_EQUIPMENT_WINDOW_H */
diff --git a/patches/gtk2/g2i18n.h b/patches/gtk2/g2i18n.h
new file mode 100644
index 0000000..860d783
--- /dev/null
+++ b/patches/gtk2/g2i18n.h
@@ -0,0 +1,32 @@
+/* stuff for NLS/i18n
+ *
+ * $Id: g2i18n.h,v 1.2 2004/07/20 00:08:56 miq Exp $
+ *
+ */
+
+#ifndef G2_INTL_H
+#define G2_INTL_H
+
+#include "config.h"
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#include <locale.h>
+#define _(String) gettext(String)
+#ifdef gettext_noop
+#define N_(String) gettext_noop(String)
+#else
+#define N_(String) (String)
+#endif
+#else /* NLS is disabled */
+#define _(String) (String)
+#define N_(String) (String)
+#define textdomain(String) (String)
+#define gettext(String) (String)
+#define dgettext(Domain,String) (String)
+#define dcgettext(Domain,String,Type) (String)
+#define bindtextdomain(Domain,Directory) (Domain)
+#define bind_textdomain_codeset(Domain,Codeset) (Codeset)
+#endif /* ENABLE_NLS */
+
+#endif /* G2_INTL_H */
diff --git a/patches/gtk2/g2invent.c b/patches/gtk2/g2invent.c
new file mode 100644
index 0000000..116c742
--- /dev/null
+++ b/patches/gtk2/g2invent.c
@@ -0,0 +1,216 @@
+/* the inventory window
+ *
+ * $Id: g2invent.c,v 1.3 2004/07/20 00:08:56 miq Exp $
+ *
+ */
+
+#include "config.h"
+
+#include "g2invent.h"
+#include "g2marsh.h"
+#include "g2map.h"
+#include "g2i18n.h"
+#include "hack.h"
+
+G2Inventory *g2Inventory;
+static GtkWindowClass *parent_class;
+GtkWidget *scrolledWin;
+static gint g2_inventory_signals[5];
+static GtkTreeIter parent_iter;
+static GtkTreeIter child_iter;
+
+static void g2_inventory_class_init (G2InventoryClass * class);
+static void g2_inventory_init (G2Inventory * inventory);
+static void g2_inventory_start_menu (GtkWidget * win, gpointer gp);
+static void g2_inventory_add_menu (GtkWidget * win, int glyph,
+ gpointer * identifier, gchar accelerator,
+ gchar group_accel, int attr, gchar * str, gboolean presel, gpointer gp);
+
+enum
+{
+ G2_INVENTORY_HEADER,
+ G2_INVENTORY_ACCEL,
+ G2_INVENTORY_GLYPH,
+ G2_INVENTORY_STRING,
+ G2_INVENTORY_IDENTIFIER,
+ G2_INVENTORY_IS_HEADER,
+ G2_INVENTORY_PRESEL,
+ G2_INVENTORY_COL_NUM
+};
+
+
+
+static const GTypeInfo g2_inventory_info = {
+ sizeof (G2InventoryClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) g2_inventory_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (G2Inventory),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) g2_inventory_init
+};
+
+guint
+g2_inventory_get_type ()
+{
+ g_print ("inv_get_type\n");
+ static GType g2_inventory_type = 0;
+
+ if (g2_inventory_type == 0) {
+ g2_inventory_type = g_type_register_static (GTK_TYPE_WINDOW,
+ "G2Inventory", &g2_inventory_info, 0);
+ }
+ return g2_inventory_type;
+}
+
+static void
+g2_inventory_class_init (G2InventoryClass * class)
+{
+ g_print ("inv_class_init\n");
+ parent_class = gtk_type_class (gtk_window_get_type ());
+
+ g2_inventory_signals[0] =
+ g_signal_new ("start_menu",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2InventoryClass, g2_inventory_start_menu),
+ NULL, NULL, gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ g2_inventory_signals[1] =
+ g_signal_new ("add_menu",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2InventoryClass, g2_inventory_add_menu),
+ NULL, NULL,
+ g2_marshal_VOID__INT_POINTER_CHAR_CHAR_INT_STRING_BOOLEAN,
+ G_TYPE_NONE, 7, G_TYPE_INT, G_TYPE_POINTER, G_TYPE_CHAR,
+ G_TYPE_CHAR, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN);
+ g2_inventory_signals[0] =
+ g_signal_new ("end_menu",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2InventoryClass, g2_inventory_end_menu),
+ NULL, NULL, gtk_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+}
+
+static void
+g2_inventory_init (G2Inventory * inventory)
+{
+ g_print ("inv_init\n");
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ gtk_window_set_title (GTK_WINDOW (inventory), _("Inventory"));
+ scrolledWin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_size_request (scrolledWin, 600, 600);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ inventory->invView = gtk_tree_view_new ();
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (inventory->invView), FALSE);
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (inventory->invView), TRUE);
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "text", G2_INVENTORY_ACCEL, "underline", G2_INVENTORY_IS_HEADER, NULL);
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "pixbuf", G2_INVENTORY_GLYPH, NULL);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "text", G2_INVENTORY_STRING, "underline", G2_INVENTORY_IS_HEADER, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (inventory->invView), column);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledWin),
+ inventory->invView);
+ gtk_container_add (GTK_CONTAINER (inventory), scrolledWin);
+ gtk_widget_show (scrolledWin);
+}
+
+static void
+g2_inventory_start_menu (GtkWidget * win, gpointer gp)
+{
+ g_print ("inv_start_menu\n");
+ g2Inventory->invTree = gtk_tree_store_new (G2_INVENTORY_COL_NUM,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN);
+}
+
+/* XXX: preselection, attr and group_accel currently ignored */
+static void
+g2_inventory_add_menu (GtkWidget * win, gint glyph,
+ gpointer * identifier, gchar accelerator,
+ gchar group_accel, gint attr, gchar * str, gboolean presel, gpointer gp)
+{
+ g_print ("inv_add_menu\n");
+ gchar accelString[2];
+ GdkPixbuf *tile;
+
+ g_printf
+ ("Invetory-win ADD_MENU: glyph=%d, identifier=%d, accel=%c, group_accel=%c,"
+ " attr=%d, string=%s, presel=%d\n", glyph, *identifier, accelerator,
+ group_accel, attr, str, presel);
+
+ if (glyph == NO_GLYPH) {
+ tile = NULL;
+ } else {
+ tile = g2_get_tile_scaled (glyph, 20);
+// tile = g2_get_tile(glyph);
+ }
+ if (((int) *identifier) == 0) {
+ gtk_tree_store_append (g2Inventory->invTree, &parent_iter, NULL);
+ gtk_tree_store_set (g2Inventory->invTree, &parent_iter,
+ G2_INVENTORY_GLYPH, tile,
+ G2_INVENTORY_STRING, str,
+ G2_INVENTORY_IS_HEADER, PANGO_UNDERLINE_SINGLE,
+ G2_INVENTORY_IDENTIFIER, *identifier, -1);
+ } else {
+ accelString[0] = accelerator;
+ accelString[1] = '\0';
+ gtk_tree_store_append (g2Inventory->invTree, &child_iter, &parent_iter);
+ gtk_tree_store_set (g2Inventory->invTree, &child_iter,
+ G2_INVENTORY_ACCEL, &accelString,
+ G2_INVENTORY_GLYPH, tile,
+ G2_INVENTORY_STRING, str,
+ G2_INVENTORY_IS_HEADER, PANGO_UNDERLINE_NONE,
+ G2_INVENTORY_IDENTIFIER, *identifier, G2_INVENTORY_PRESEL, presel, -1);
+ }
+}
+
+static void
+g2_inventory_end_menu (GtkWidget * win, const gchar * prompt, gpointer gp)
+{
+
+ g_print ("Inventory: end menu callback=%s\n", prompt);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (g2Inventory->invView),
+ GTK_TREE_MODEL (g2Inventory->invTree));
+ gtk_tree_view_expand_all (GTK_TREE_VIEW (g2Inventory->invView));
+ gtk_widget_show (g2Inventory->invView);
+}
+
+GtkWidget *
+g2_inventory_new ()
+{
+ g_print ("inv_new\n");
+ /* XXX singleton */
+ if (!g2Inventory) {
+ g2Inventory = G2_INVENTORY (g_object_new (TYPE_G2_INVENTORY, NULL));
+ g_signal_connect (G_OBJECT (g2Inventory), "start_menu",
+ G_CALLBACK (g2_inventory_start_menu), NULL);
+ g_signal_connect (G_OBJECT (g2Inventory), "add_menu",
+ G_CALLBACK (g2_inventory_add_menu), NULL);
+ g_signal_connect (G_OBJECT (g2Inventory), "end_menu",
+ G_CALLBACK (g2_inventory_end_menu), NULL);
+ }
+ return GTK_WIDGET (g2Inventory);
+}
+
+void
+g2_display_inventory_window (int block)
+{
+ g_print ("disp_inv\n");
+ gtk_widget_show (GTK_WIDGET (g2Inventory));
+}
diff --git a/patches/gtk2/g2invent.h b/patches/gtk2/g2invent.h
new file mode 100644
index 0000000..85ea021
--- /dev/null
+++ b/patches/gtk2/g2invent.h
@@ -0,0 +1,43 @@
+/* the inventory window as a GObject
+ *
+ * we derive from <gtk_dialog> to build our own widget with our own signals
+ * which g2bind will emit on calls from the nethack engine
+ *
+ * $Id: g2invent.h,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+#ifndef G2_INVENTORY_WINDOW_H
+#define G2_INVENTORY_WINDOW_H
+
+#include <gtk/gtk.h>
+
+#define TYPE_G2_INVENTORY (g2_inventory_get_type())
+#define G2_INVENTORY(obj) GTK_CHECK_CAST(obj, g2_inventory_get_type(), G2Inventory)
+#define G2_INVENTORY_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, g2_inventory_get_type(), G2InventoryClass)
+#define IS_G2_INVENTORY(obj) GTK_CHECK_TYPE(obj, g2_inventory_get_type())
+
+typedef struct
+{
+ GtkWindow inventoryWindow;
+
+ GtkTreeStore *invTree;
+ GtkWidget *invView;
+} G2Inventory;
+
+typedef struct
+{
+ GtkWindowClass parent_class;
+
+ void (*g2_inventory_start_menu) (G2Inventory * g2Inventory);
+ void (*g2_inventory_add_menu) (G2Inventory * g2Inventory);
+ void (*g2_inventory_end_menu) (G2Inventory * g2Inventory);
+ void (*g2inventory) (G2Inventory * g2Inventory);
+} G2InventoryClass;
+
+guint g2_inventory_get_type (void);
+GtkWidget *g2_inventory_new (void);
+
+void g2_display_inventory_window (int block);
+
+#endif /* G2_INVENTORY_WINDOW_H */
diff --git a/patches/gtk2/g2main.c b/patches/gtk2/g2main.c
new file mode 100644
index 0000000..5ae4163
--- /dev/null
+++ b/patches/gtk2/g2main.c
@@ -0,0 +1,1092 @@
+/* the main window
+ *
+ * $Id: g2main.c,v 1.12 2005/04/26 23:26:41 miq Exp $
+ *
+ */
+
+
+
+
+#ifdef HILDON
+#if defined(MAEMO1)
+#include <hildon-widgets/hildon-app.h>
+#include <hildon-widgets/hildon-appview.h>
+#elif defined(MAEMO2)
+#include <hildon-widgets/hildon-program.h>
+#elif defined(HILDON1)
+#include <hildon/hildon-program.h>
+#endif
+
+#include <libosso.h>
+
+#define MAEMO_PACKAGE "nethack"
+#define MAEMO_VERSION "1.0"
+#endif
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "g2main.h"
+#include "g2mesg.h"
+#include "g2status.h"
+#include "g2map.h"
+#include "g2menu.h"
+#include "g2text.h"
+#include "g2equip.h"
+#include "g2i18n.h"
+#include "g2minipad.h"
+#include "hack.h"
+
+#include "config.h"
+
+#define VERSION "0.5.7"
+#define RC_FILE "gtk2hackrc"
+
+static void g2_zoom_in (GtkWidget * app, gpointer data);
+static void g2_zoom_out (GtkWidget * app, gpointer data);
+static void g2_exit (GtkWidget * app, gpointer data);
+static void g2_show_about (GtkWidget * app, gpointer data);
+
+
+GtkWidget *mainWin;
+GtkWidget *mapWin;
+GtkWidget *messageWin;
+GtkWidget *equipWin;
+GtkWidget *statusWin;
+
+#ifdef MINIPAD
+GtkWidget *padWin;
+#endif
+
+static char *translators[] = {
+ "Mihael Vrbanec <miq@users.sourceforge.net>",
+ "Paolo M. <qualsiasi@qualsiasi.net>",
+ "Paulo Henrique Cabral <paulo@mudvayne.com.br>",
+};
+
+static char *linguas[] = {
+ N_("german"),
+ N_("italian"),
+ N_("brazilian portuguese"),
+};
+
+#if GTK_CHECK_VERSION(2,4,0)
+
+
+/** Need to create some icons on my own */
+/** The following is copied from gimp gimpstock.c */
+
+#include <gtk/gtkiconfactory.h>
+#include "icons/hack-stock-pixbufs.h"
+
+
+static GtkIconFactory *hack_stock_factory = NULL;
+
+
+static void
+icon_set_from_inline (GtkIconSet * set,
+ const guchar * inline_data, GtkIconSize size, gboolean fallback)
+{
+ GtkIconSource *source;
+ GdkPixbuf *pixbuf;
+
+ source = gtk_icon_source_new ();
+ gtk_icon_source_set_size (source, size);
+ gtk_icon_source_set_size_wildcarded (source, FALSE);
+
+ pixbuf = gdk_pixbuf_new_from_inline (-1, inline_data, FALSE, NULL);
+
+ g_assert (pixbuf);
+
+ gtk_icon_source_set_pixbuf (source, pixbuf);
+
+ g_object_unref (pixbuf);
+
+ gtk_icon_set_add_source (set, source);
+
+ if (fallback) {
+ gtk_icon_source_set_size_wildcarded (source, TRUE);
+ gtk_icon_set_add_source (set, source);
+ }
+
+ gtk_icon_source_free (source);
+}
+
+
+/** Adds an icon to the icon factory.
+ * Adds an icon to the icon factory and setting an already existing icon as fallback.
+ */
+static void
+add_sized_with_same_fallback (GtkIconFactory * factory,
+ const guchar * inline_data, GtkIconSize size, const gchar * stock_id)
+{
+ GtkIconSet *set;
+ gboolean fallback = FALSE;
+
+ set = gtk_icon_factory_lookup (factory, stock_id);
+
+ if (!set) {
+ set = gtk_icon_set_new ();
+ gtk_icon_factory_add (factory, stock_id, set);
+ gtk_icon_set_unref (set);
+
+ fallback = TRUE;
+ }
+
+ icon_set_from_inline (set, inline_data, size, fallback);
+}
+
+static GtkStockItem hack_stock_items[] = {
+ {HACK_STOCK_DIR_NW, N_(""), 0, '7', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_N, N_(""), 0, '8', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_NE, N_(""), 0, '6', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_W, N_(""), 0, '4', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_E, N_(""), 0, '6', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_SW, N_(""), 0, '1', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_S, N_(""), 0, '2', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_SE, N_(""), 0, '3', GTK_HACK_DOMAIN},
+ {HACK_STOCK_DIR_SELF, N_(""), 0, '.', GTK_HACK_DOMAIN},
+};
+
+static struct
+{
+ const gchar *stock_id;
+ gconstpointer inline_data;
+} hack_stock_button_pixbufs[] = {
+ {
+ HACK_STOCK_EAT, stock_eat_24}, {
+ HACK_STOCK_INV, stock_inv_24}, {
+ HACK_STOCK_KICK, stock_kick_24}, {
+ HACK_STOCK_OPEN, stock_open_24}, {
+ HACK_STOCK_THROW, stock_throw_24}, {
+ HACK_STOCK_ZAP, stock_zap_24}, {
+ HACK_STOCK_SPELLBOOK, stock_spellbook_24}, {
+ HACK_STOCK_DIR_NW, stock_up_left_arrow_24}, {
+ HACK_STOCK_DIR_N, stock_up_arrow_24}, {
+ HACK_STOCK_DIR_NE, stock_up_right_arrow_24}, {
+ HACK_STOCK_DIR_W, stock_left_arrow_24}, {
+ HACK_STOCK_DIR_E, stock_right_arrow_24}, {
+ HACK_STOCK_DIR_SW, stock_down_left_arrow_24}, {
+ HACK_STOCK_DIR_S, stock_down_arrow_24}, {
+ HACK_STOCK_DIR_SE, stock_down_right_arrow_24}, {
+ HACK_STOCK_DIR_SELF, stock_self_24}, {
+ HACK_STOCK_WHATSHERE, stock_whatshere_24}, {
+ HACK_STOCK_WHATSTHERE, stock_whatsthere_24}, {
+HACK_STOCK_SEARCH, stock_search_24},};
+
+static struct
+{
+ const gchar *stock_id;
+ gconstpointer inline_data;
+} hack_stock_menu_pixbufs[] = {
+ {
+ HACK_STOCK_EAT, stock_eat_16}, {
+ HACK_STOCK_INV, stock_inv_16}, {
+ HACK_STOCK_KICK, stock_kick_16}, {
+ HACK_STOCK_OPEN, stock_open_16}, {
+ HACK_STOCK_THROW, stock_throw_16}, {
+ HACK_STOCK_ZAP, stock_zap_16}, {
+ HACK_STOCK_SPELLBOOK, stock_spellbook_16}, {
+ HACK_STOCK_WHATSHERE, stock_whatshere_16}, {
+ HACK_STOCK_WHATSTHERE, stock_whatsthere_16}, {
+HACK_STOCK_SEARCH, stock_search_16},};
+
+/**
+ * hack_stock_init:
+ *
+ * Initializes the HACK stock icon factory.
+ *
+ * You don't need to call this function as hack_ui_init() already does
+ * this for you.
+ */
+void
+hack_stock_init (void)
+{
+ static gboolean initialized = FALSE;
+
+ gint i;
+
+ if (initialized)
+ return;
+
+ hack_stock_factory = gtk_icon_factory_new ();
+
+ for (i = 0; i < G_N_ELEMENTS (hack_stock_button_pixbufs); i++) {
+ add_sized_with_same_fallback (hack_stock_factory,
+ hack_stock_button_pixbufs[i].inline_data,
+ GTK_ICON_SIZE_BUTTON, hack_stock_button_pixbufs[i].stock_id);
+ }
+
+ for (i = 0; i < G_N_ELEMENTS (hack_stock_menu_pixbufs); i++) {
+ add_sized_with_same_fallback (hack_stock_factory,
+ hack_stock_menu_pixbufs[i].inline_data,
+ GTK_ICON_SIZE_MENU, hack_stock_menu_pixbufs[i].stock_id);
+ }
+
+ gtk_icon_factory_add_default (hack_stock_factory);
+
+ gtk_stock_add_static (hack_stock_items, G_N_ELEMENTS (hack_stock_items));
+
+ initialized = TRUE;
+}
+
+
+
+typedef struct
+{
+ gchar *name;
+ gchar *label;
+ gchar *tooltip;
+ gchar *accel;
+ gchar command;
+ gchar *stock_id;
+} G2ActionEntry;
+
+/* Normal items */
+static GtkActionEntry entries[] = {
+ {"FileMenu", NULL, N_("_File")},
+ {"EditMenu", NULL, N_("_Edit")},
+ {"ApparelMenu", NULL, N_("Appa_rel")},
+ {"ActionMenu", NULL, N_("_Action")},
+ {"SpecialMenu", NULL, N_("_Special")},
+ {"MoveMenu", NULL, N_("Move")},
+ {"HelpMenu", NULL, N_("_Help")},
+ {"TilesetMenu", NULL, N_("_TileSet")},
+ {"Quit", GTK_STOCK_QUIT, N_("_Quit"), NULL, N_("Quit Gtk2Hack"),
+ G_CALLBACK (g2_exit)},
+ {"Ride", NULL, N_("Ride"), NULL, NULL, G_CALLBACK (doride)},
+ {"About", NULL, N_("_About"), NULL, N_("About Gtk2Hack"),
+ G_CALLBACK (g2_show_about)},
+ {"ZoomIn", GTK_STOCK_ZOOM_IN, N_("_Zoom In"), "F7", N_("Zoom in"),
+ G_CALLBACK (g2_zoom_in)},
+ {"ZoomOut", GTK_STOCK_ZOOM_OUT, N_("_Zoom Out"), "F8", N_("Zoom out"),
+ G_CALLBACK (g2_zoom_out)},
+};
+
+/* XXX perhaps add more commands, tooltips and memnonics; check for sanity with other options */
+static G2ActionEntry commands[] = {
+ {"Version", N_("_Version"), N_("Show Nethack version"), "v", 'v', NULL},
+ {"Slash", N_("Identify a map symbol"), NULL, NULL, '/', NULL},
+ {"WhatsHere", N_("What's here?"), NULL, ":", ':', HACK_STOCK_WHATSHERE},
+ {"WhatsThere", N_("What's there?"), NULL, ";", ';', HACK_STOCK_WHATSTHERE},
+ {"Backslash", N_("Discoveries"), NULL, NULL, GDK_backslash, NULL},
+ {"History", N_("_History"), NULL, "<shift>v", 'V', NULL},
+ {"Ampersand", N_("Explain command"), NULL, NULL, '&', NULL},
+ {"Smaller", N_("Go up"), NULL, NULL, '<', GTK_STOCK_GO_UP},
+ {"Greater", N_("Go down"), NULL, NULL, '>', GTK_STOCK_GO_DOWN},
+ {"Fight", N_("Attack <direction>"), NULL, "F", 'F', NULL},
+ {"Underscore", N_("Travel"), NULL, NULL, '_', NULL},
+ {"Rest", N_("Rest"), NULL, NULL, '.', NULL},
+ {"Apply", N_("Apply"), NULL, "a", 'a', GTK_STOCK_EXECUTE},
+ {"Close", N_("Close"), NULL, "c", 'c', NULL},
+ {"Name", N_("Name monster"), NULL, "<shift>c", 'C', NULL},
+ {"Drop", N_("Drop"), NULL, "d", 'd', GTK_STOCK_GOTO_BOTTOM},
+ {"DropMany", N_("Drop many"), NULL, "<shift>d", 'D', NULL},
+ {"Kick", N_("Kick"), NULL, "<control>d", CTRL_BITS & GDK_d,
+ HACK_STOCK_KICK},
+ {"Eat", N_("Eat"), NULL, "e", 'e', HACK_STOCK_EAT},
+ {"Engrave", N_("Engrave"), NULL, "<shift>e", 'E', NULL},
+ {"Fire", N_("Fire"), NULL, "f", 'f', NULL},
+ {"Inventory", N_("Inventory"), NULL, "i", 'i', HACK_STOCK_INV},
+ {"Move", N_("Move"), NULL, "m", 'm', NULL},
+ {"Open", N_("Open"), NULL, "o", 'o', HACK_STOCK_OPEN},
+ {"Pay", N_("Pay"), NULL, "p", 'p', NULL},
+ {"PutOn", N_("Put on accessory"), NULL, "<shift>p", 'P', NULL},
+ {"Quaff", N_("Quaff"), NULL, "q", 'q', NULL},
+ {"Quiver", N_("Put in quiver"), NULL, "<shift>q", 'Q', NULL},
+ {"Read", N_("Read"), NULL, "r", 'r', GTK_STOCK_JUSTIFY_LEFT},
+ {"Remove", N_("Remove accessory"), NULL, "<shift>r", 'R', NULL},
+ {"Search", N_("Search"), NULL, "s", 's', HACK_STOCK_SEARCH},
+ {"Throw", N_("Throw/Shoot"), NULL, "t", 't', HACK_STOCK_THROW},
+ {"TakeOff", N_("Take off armor"), NULL, "<shift>t", 'T', NULL},
+ {"Teleport", N_("Teleport"), NULL, "<control>t", CTRL_BITS & GDK_t,
+ GTK_STOCK_JUMP_TO},
+ {"Wield", N_("Wield weapon"), NULL, "w", 'w', GTK_STOCK_CUT},
+ {"Wear", N_("Wear armor"), NULL, "<shift>w", 'W', NULL},
+ {"Exchange", N_("Exchange weapons"), NULL, "x", 'x', NULL},
+ {"Explore", N_("Explore mode"), NULL, "<shift>x", 'X', NULL},
+ {"Zap", N_("Zap a wand"), NULL, "z", 'z', HACK_STOCK_ZAP},
+ {"Cast", N_("Cast a spell"), NULL, "<shift>z", 'Z', HACK_STOCK_SPELLBOOK},
+ {"PickUp", N_("Pick up"), NULL, NULL, ',', GTK_STOCK_GOTO_TOP},
+ {"Twoweapons", N_("Twoweapons"), NULL, "<alt>2", META_BIT | GDK_2, NULL},
+ {"Adjust", N_("Adjust letters"), NULL, "<alt>a", META_BIT | GDK_a, NULL},
+ {"Chat", N_("Chat"), NULL, "<alt>c", META_BIT | GDK_c, NULL},
+ {"Dip", N_("Dip"), NULL, "<alt>d", META_BIT | GDK_d, NULL},
+ {"Enhance", N_("Enhance skills"), NULL, "<alt>e", META_BIT | GDK_e, NULL},
+ {"Force", N_("Force"), NULL, "<alt>f", META_BIT | GDK_f, NULL},
+ {"Invoke", N_("Invoke"), NULL, "<alt>i", META_BIT | GDK_i, NULL},
+ {"Jump", N_("Jump"), NULL, "<alt>j", META_BIT | GDK_j, NULL},
+ {"Loot", N_("Loot"), NULL, "<alt>l", META_BIT | GDK_l, NULL},
+ {"Monster", N_("Monster action"), NULL, "<alt>m", META_BIT | GDK_m, NULL},
+ {"NameIndividual", N_("Name object"), NULL, "<alt>n", META_BIT | GDK_n,
+ NULL},
+ {"Offer", N_("Offer"), NULL, "<alt>o", META_BIT | GDK_o, NULL},
+ {"Pray", N_("Pray"), NULL, "<alt>p", META_BIT | GDK_p, NULL},
+ {"Rub", N_("Rub"), NULL, "<alt>r", META_BIT | GDK_r, NULL},
+ {"Sit", N_("Sit"), NULL, "<alt>s", META_BIT | GDK_s, NULL},
+ {"Turn", N_("Turn undead"), NULL, "<alt>t", META_BIT | GDK_t, NULL},
+ {"Untrap", N_("Untrap"), NULL, "<alt>u", META_BIT | GDK_u, NULL},
+ {"Wipe", N_("Wipe"), NULL, "<alt>w", META_BIT | GDK_w, NULL},
+ {"Edition", N_("Show build options"), NULL, "<alt>v", META_BIT | GDK_v,
+ NULL},
+ {"CharacterInfo", N_("Show character info"), NULL, "<control>x",
+ CTRL_BITS & GDK_x, NULL},
+
+ {"Redo", N_("Redo"), NULL, "<control>A", CTRL_BITS & GDK_A, GTK_STOCK_REDO},
+ {"Save", N_("Save game"), NULL, "<shift>s", GDK_S, GTK_STOCK_SAVE},
+ {"Options", N_("Options"), NULL, "<shift>o", GDK_O, GTK_STOCK_PREFERENCES},
+ {"Help", N_("Show Help Menu"), NULL, NULL, GDK_question, GTK_STOCK_HELP},
+};
+
+
+static GtkRadioActionEntry tileset_entries[] = {
+ {"Default", NULL, N_("_Default"), NULL, "Default", TILESET_DEFAULT},
+ {"Graphical32", NULL, N_("_Graphical32"), NULL, "Graphical 32x32",
+ TILESET_GRAPHICAL32},
+ {"Graphical16", NULL, N_("_Graphical16"), NULL, "Graphical 16x16",
+ TILESET_GRAPHICAL16},
+ {"ASCIIColor", NULL, N_("_ASCIIColor"), NULL, "ASCII Color",
+ TILESET_ASCII_COLOR},
+ {"ASCIIBW", NULL, N_("_ASCIIBW"), NULL, "ASCII Black&White",
+ TILESET_ASCII_BW},
+ {"ASCIIWB", NULL, N_("_ASCIIWB"), NULL, "ASCII White&Black", TILESET_ASCII_WB}
+};
+
+static guint n_tileset_entries = G_N_ELEMENTS (tileset_entries);
+
+static const char *uiDescription =
+ "<ui>"
+ " <menubar name='MainMenu'>"
+ " <menu action='FileMenu'>"
+ " <menuitem action='Save'/>"
+ " <separator/>"
+/* " <menuitem action='Redo'/>" */
+ " <menuitem action='ZoomIn'/>"
+ " <menuitem action='ZoomOut'/>"
+ " <separator/>"
+ " <menuitem action='Quit'/>"
+ " </menu>"
+ " <menu action='EditMenu'>"
+ " <menuitem action='Adjust'/>"
+/* " <menuitem action='Inventory'/>" */
+ " <separator/>"
+ " <menuitem action='CharacterInfo'/>"
+ " <menuitem action='Enhance'/>"
+ " <menuitem action='Name'/>"
+ " <menuitem action='NameIndividual'/>"
+ " <menuitem action='Backslash'/>"
+ " <separator/>"
+ " <menuitem action='Options'/>"
+ " <menuitem action='Explore'/>"
+ " </menu>"
+ " <menu action='ApparelMenu'>"
+/* " <menuitem action='Wield'/>" */
+ " <menuitem action='Exchange'/>"
+ " <menuitem action='Quiver'/>"
+ " <separator/>"
+ " <menuitem action='Wear'/>"
+ " <menuitem action='TakeOff'/>"
+ " <menuitem action='PutOn'/>"
+ " <menuitem action='Remove'/>"
+ " </menu>"
+ " <menu action='ActionMenu'>"
+ " <menuitem action='Fight'/>"
+/* " <menuitem action='Throw'/>" */
+ " <menuitem action='Fire'/>"
+ " <separator/>"
+ " <menuitem action='Force'/>"
+ " <menuitem action='Untrap'/>"
+/* " <menuitem action='Kick'/>"
+ " <menuitem action='Apply'/>" */
+ " <menuitem action='Engrave'/>"
+/* " <menuitem action='Search'/>"
+ " <menuitem action='Eat'/>"
+ " <menuitem action='Open'/>" */
+ " <menuitem action='Close'/>"
+ " <separator/>"
+ " <menuitem action='Loot'/>"
+/* " <menuitem action='PickUp'/>"
+ " <menuitem action='Drop'/>" */
+ " <menuitem action='DropMany'/>"
+ " </menu>"
+ " <menu action='SpecialMenu'>"
+ " <menuitem action='Quaff'/>"
+/* " <menuitem action='Zap'/>"
+ " <menuitem action='Read'/>" */
+ " <menuitem action='Rub'/>"
+ " <menuitem action='Dip'/>"
+ " <separator/>"
+/* " <menuitem action='Cast'/>" */
+ " <menuitem action='Invoke'/>"
+ " <menuitem action='Teleport'/>"
+ " <separator/>"
+ " <menuitem action='Pay'/>"
+ " <menuitem action='Offer'/>"
+ " <menuitem action='Pray'/>"
+ " <menuitem action='Chat'/>"
+ " <separator/>"
+ " <menuitem action='Wipe'/>"
+ " <menuitem action='Turn'/>"
+ " <menuitem action='Monster'/>"
+ " </menu>"
+ " <menu action='MoveMenu'>"
+ " <menuitem action='Move'/>"
+ " <menuitem action='Jump'/>"
+ " <menuitem action='Ride'/>"
+ " <menuitem action='Sit'/>"
+ " <menuitem action='Smaller'/>"
+ " <menuitem action='Greater'/>"
+ " <menuitem action='Underscore'/>"
+/* " <menuitem action='Rest'/>" */
+ " </menu>"
+ " <menu action='HelpMenu'>"
+ " <menuitem action='About'/>"
+/* " <separator/>"
+ " <menuitem action='WhatsHere'/>"
+ " <menuitem action='WhatsThere'/>" */
+ " <separator/>"
+ " <menu action='TilesetMenu'>"
+ " <menuitem action='Default'/>"
+ " <menuitem action='Graphical32'/>"
+ " <menuitem action='Graphical16'/>"
+ " <menuitem action='ASCIIColor'/>"
+ " <menuitem action='ASCIIBW'/>"
+ " <menuitem action='ASCIIWB'/>"
+ " </menu>"
+ " <separator/>"
+ " <menuitem action='Version'/>"
+ " <menuitem action='Edition'/>"
+ " <menuitem action='History'/>"
+ " <menuitem action='Help'/>"
+ " <separator/>"
+ " <menuitem action='Slash'/>"
+ " <menuitem action='Ampersand'/>"
+ " </menu>"
+ " </menubar>"
+ " <toolbar name='ToolBar'>"
+ " <toolitem action='WhatsHere'/>"
+ " <toolitem action='WhatsThere'/>"
+ " <toolitem action='Inventory'/>"
+ " <toolitem action='Redo'/>"
+ " <separator action='Sep1'/>"
+ " <toolitem action='PickUp'/>"
+ " <toolitem action='Drop'/>"
+ " <toolitem action='Search'/>"
+ " <toolitem action='Open'/>"
+ " <toolitem action='Kick'/>"
+ " <toolitem action='Throw'/>"
+ " <separator action='Sep2'/>"
+ " <toolitem action='Wield'/>"
+ " <toolitem action='Apply'/>"
+ " <toolitem action='Eat'/>"
+ " <toolitem action='Cast'/>"
+ " <toolitem action='Zap'/>"
+ " <toolitem action='Read'/>"
+ " </toolbar>"
+ "</ui>";
+
+
+static void
+command_activated (GtkWidget * action, gpointer command)
+{
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (command));
+}
+
+static void
+add_new_action_to_group (GtkActionGroup * group, const gchar * name,
+ const gchar * label, const gchar * tooltip,
+ const gchar * accel, const gchar command, const gchar * stock_id)
+{
+ GtkAction *action;
+
+ action = gtk_action_new (name, label, tooltip, stock_id);
+ g_signal_connect (G_OBJECT (action), "activate",
+ G_CALLBACK (command_activated), GINT_TO_POINTER ((gint) command));
+ gtk_action_group_add_action_with_accel (group, action, accel);
+}
+#endif
+
+static void
+activate_radio_action (GtkAction * action, GtkRadioAction * current)
+{
+ gboolean active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current));
+ gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current));
+
+ if (active) {
+ g_signal_emit_by_name (G_OBJECT (mapWin), "reload_tiles", value, NULL);
+ }
+}
+
+static void
+g2_zoom_in (GtkWidget * app, gpointer data)
+{
+ gdouble res;
+
+ g_signal_emit_by_name (G_OBJECT (mapWin), "rescale", +0.25, &res, NULL);
+}
+
+static void
+g2_zoom_out (GtkWidget * app, gpointer data)
+{
+ gdouble res;
+
+ g_signal_emit_by_name (G_OBJECT (mapWin), "rescale", -0.25, &res, NULL);
+}
+
+void
+g2_exit_windows (const gchar * string)
+{
+ g_print ("%s\n", string);
+ gtk_widget_destroy (g2_get_main_window ());
+ exit (0);
+}
+
+static void
+g2_exit (GtkWidget * app, gpointer data)
+{
+ gint response;
+ GtkWidget *saveDialog;
+
+ saveDialog = gtk_message_dialog_new (GTK_WINDOW (mainWin), GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ _("Do you want to save the "
+ "current game?\nIf not your current game will be lost!"));
+ gtk_dialog_set_default_response (GTK_DIALOG (saveDialog), GTK_RESPONSE_YES);
+ response = gtk_dialog_run (GTK_DIALOG (saveDialog));
+ if (response == GTK_RESPONSE_YES) {
+ dosave0 ();
+ }
+ g2_exit_windows (_("Exiting...\n"));
+}
+
+
+static void
+g2_show_about (GtkWidget * app, gpointer data)
+{
+ gint response;
+ gint i;
+ gchar *trans;
+ GtkWidget *aboutDialog;
+ GtkWidget *vbox;
+ GtkWidget *tabContent;
+ GtkWidget *notebook;
+ GtkWidget *label;
+
+ aboutDialog = gtk_dialog_new_with_buttons (_("About Gtk2Hack"),
+ GTK_WINDOW (mainWin),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+ vbox = gtk_vbox_new (FALSE, 5);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+ notebook = gtk_notebook_new ();
+ label = gtk_label_new (NULL);
+ gtk_label_set_markup (GTK_LABEL (label),
+ "<b><big>Gtk2Hack " VERSION "</big></b>");
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);
+ label = gtk_label_new (_("Gtk2Hack was developed by Mihael Vrbanec.\n"
+ "Window icon and gold icon by David Theis.\n"
+ "Other artwork is borrowed from the Qt, X11 and Gnome window ports.\n\n"
+ "Thanks for trying Gtk2Hack."));
+ tabContent = gtk_vbox_new (FALSE, 5);
+ gtk_container_set_border_width (GTK_CONTAINER (tabContent), 5);
+ gtk_box_pack_start (GTK_BOX (tabContent), label, FALSE, FALSE, 0);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tabContent,
+ gtk_label_new (_("Credits")));
+ tabContent = gtk_vbox_new (FALSE, 5);
+ gtk_container_set_border_width (GTK_CONTAINER (tabContent), 5);
+
+ trans = g_strdup ("");
+ for (i = 0; linguas[i] != NULL; i++) {
+ gchar *temp =
+ g_strconcat (trans, translators[i], " (", _(linguas[i]), ")\n", NULL);
+ g_free (trans);
+ trans = temp;
+ }
+
+ label = gtk_label_new (trans);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f);
+ gtk_box_pack_start (GTK_BOX (tabContent), label, FALSE, FALSE, 0);
+ g_free (trans);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tabContent,
+ gtk_label_new (_("Translations")));
+
+ gtk_box_pack_start (GTK_BOX (vbox), notebook, FALSE, FALSE, 10);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (aboutDialog)->vbox), vbox);
+ gtk_widget_show_all (aboutDialog);
+ response = gtk_dialog_run (GTK_DIALOG (aboutDialog));
+ gtk_widget_destroy (aboutDialog);
+}
+
+gboolean
+g2_move_keys_with_numpad (guint keyval, gint * key)
+{
+ switch (keyval) {
+ case GDK_Right:
+ case GDK_rightarrow:
+ case GDK_KP_Right:
+ case GDK_KP_6:
+ if (iflags.num_pad)
+ *key = '6';
+ else
+ *key = 'l';
+ break;
+ case GDK_Left:
+ case GDK_leftarrow:
+ case GDK_KP_Left:
+ case GDK_KP_4:
+ if (iflags.num_pad)
+ *key = '4';
+ else
+ *key = 'h';
+ break;
+ case GDK_Up:
+ case GDK_uparrow:
+ case GDK_KP_Up:
+ case GDK_KP_8:
+ if (iflags.num_pad)
+ *key = '8';
+ else
+ *key = 'k';
+ break;
+ case GDK_Down:
+ case GDK_downarrow:
+ case GDK_KP_Down:
+ case GDK_KP_2:
+ if (iflags.num_pad)
+ *key = '2';
+ else
+ *key = 'j';
+ break;
+ case GDK_Home:
+ case GDK_KP_Home:
+ case GDK_KP_7:
+ if (iflags.num_pad)
+ *key = '7';
+ else
+ *key = 'y';
+ break;
+ case GDK_End:
+ case GDK_KP_End:
+ case GDK_KP_1:
+ if (iflags.num_pad)
+ *key = '1';
+ else
+ *key = 'b';
+ break;
+ case GDK_Page_Down:
+ case GDK_KP_Page_Down:
+ case GDK_KP_3:
+ if (iflags.num_pad)
+ *key = '3';
+ else
+ *key = 'n';
+ break;
+ case GDK_Page_Up:
+ case GDK_KP_Page_Up:
+ case GDK_KP_9:
+ if (iflags.num_pad)
+ *key = '9';
+ else
+ *key = 'u';
+ break;
+ default:
+ return FALSE;
+ break;
+ }
+ return TRUE;
+}
+
+
+/** Returns true if this key is a valid input character.
+ * Valid are all ascii characters plus some.
+ */
+gboolean
+g2_key_is_valid_input (guint keyval)
+{
+ if (g_ascii_isprint (keyval))
+ return TRUE;
+
+ switch (keyval) {
+ case GDK_Return: /* since when is this valid? (Ralf) */
+ case GDK_KP_Enter:
+ case GDK_Escape:
+ case GDK_BackSpace:
+ return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
+}
+
+static gboolean
+g2_main_key_press_event (GtkWidget * widget, GdkEventKey * event, gpointer data)
+{
+#if defined(HILDON) && (defined(MAEMO2) || defined(MAEMO4))
+ /* Fullscreen mode is on (TRUE) or off (FALSE) */
+ static gboolean fullscreen = FALSE;
+#endif
+
+ gint key;
+ gdouble res;
+
+ key = event->keyval;
+ /* convert movement keys */
+ if (key == GDK_F4)
+ g_print ("1 \t");
+
+ if (key == GDK_F7) {
+ g2_zoom_in (widget, data);
+ } else if (key == GDK_F8) {
+ g2_zoom_out (widget, data);
+ } else if (key == GDK_F6) {
+#if defined(HILDON) && (defined(MAEMO2) || defined(MAEMO4))
+ /* toggle fullscreen on<->off */
+ fullscreen = !fullscreen;
+ if (fullscreen) {
+ gtk_window_fullscreen (GTK_WINDOW (mainWin));
+ } else {
+ gtk_window_unfullscreen (GTK_WINDOW (mainWin));
+ }
+ g_signal_emit_by_name (G_OBJECT (mapWin), "rescale", 0.0, &res, NULL);
+#endif
+ } else if (key == GDK_Return) {
+ /* Return in Maemo is binded to pickup */
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (','));
+ } else if (g2_move_keys_with_numpad (event->keyval, &key)) {
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (key));
+ } else if (g2_key_is_valid_input (key)) {
+ if (event->state & GDK_MOD1_MASK) {
+ /*g_print("modifier <ALT> pressed\n"); */
+ key = key | META_BIT;
+ } else if (event->state & GDK_CONTROL_MASK) {
+ /*g_print("modifier <CONTROL> pressed\n"); */
+ /* do not handle some menu accelerators which are not needed by nethack */
+ switch (key) {
+ case GDK_q:
+ return FALSE;
+ default:
+ break;
+ }
+ key = CTRL_BITS & key;
+ }
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (key));
+ }
+ if (key == GDK_F4)
+ g_print ("2 \t");
+ return TRUE;
+}
+
+static void
+set_expand (GtkWidget * child, GtkWidget * parent)
+{
+ gtk_container_child_set (GTK_CONTAINER (parent), child, "expand", TRUE, NULL);
+}
+
+
+
+#if GTK_CHECK_VERSION(2,4,0)
+#if defined(HILDON) && (defined(MAEMO2) || defined(MAEMO4))
+static void
+add_menu_and_toolbar (HildonWindow * view)
+#else
+static void
+add_menu_and_toolbar (GtkWidget * box)
+#endif
+{
+//g_print("0.add_menu_and_toolbar\n");
+#if defined(HILDON) && (defined(MAEMO2) || defined(MAEMO4))
+ GtkMenu *menubar;
+#else
+ GtkAccelGroup *accelGroup;
+ GtkWidget *menubar;
+#endif
+ GtkWidget *toolbar;
+ GtkActionGroup *actionGroup;
+ GtkUIManager *uiManager;
+ GError *error;
+ gint i;
+
+ hack_stock_init ();
+
+ actionGroup = gtk_action_group_new ("MenuActions");
+ gtk_action_group_set_translation_domain (actionGroup, "gtk2hack");
+ gtk_action_group_add_actions (actionGroup, entries, G_N_ELEMENTS (entries),
+ mainWin);
+ for (i = 0; i < G_N_ELEMENTS (commands); i++) {
+ add_new_action_to_group (actionGroup,
+ commands[i].name, _(commands[i].label), _(commands[i].tooltip),
+#ifdef HILDON
+ NULL,
+#else
+ commands[i].accel,
+#endif
+ commands[i].command, commands[i].stock_id);
+ }
+
+ gtk_action_group_add_radio_actions (actionGroup,
+ tileset_entries, n_tileset_entries,
+ TILESET_DEFAULT, G_CALLBACK (activate_radio_action), NULL);
+
+ uiManager = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (uiManager, actionGroup, 0);
+
+#ifndef HILDON
+ accelGroup = gtk_ui_manager_get_accel_group (uiManager);
+ gtk_window_add_accel_group (GTK_WINDOW (mainWin), accelGroup);
+#endif
+
+ error = NULL;
+ if (!gtk_ui_manager_add_ui_from_string (uiManager, uiDescription, -1, &error)) {
+ g_message ("building menus failed: %s", error->message);
+ g_error_free (error);
+ exit (EXIT_FAILURE);
+ }
+#ifdef HILDON
+#if defined(MAEMO1)
+ menubar = GTK_WIDGET (hildon_appview_get_menu (HILDON_APPVIEW (box)));
+#elif (defined(MAEMO2) || defined(MAEMO4))
+ menubar = GTK_MENU (gtk_menu_new ());
+#endif
+
+ gtk_widget_reparent (gtk_ui_manager_get_widget
+ (uiManager, "/MainMenu/FileMenu"), GTK_WIDGET (menubar));
+ gtk_widget_reparent (gtk_ui_manager_get_widget
+ (uiManager, "/MainMenu/EditMenu"), GTK_WIDGET (menubar));
+ gtk_widget_reparent (gtk_ui_manager_get_widget
+ (uiManager, "/MainMenu/ApparelMenu"), GTK_WIDGET (menubar));
+ gtk_widget_reparent (gtk_ui_manager_get_widget
+ (uiManager, "/MainMenu/ActionMenu"), GTK_WIDGET (menubar));
+ gtk_widget_reparent (gtk_ui_manager_get_widget
+ (uiManager, "/MainMenu/SpecialMenu"), GTK_WIDGET (menubar));
+ gtk_widget_reparent (gtk_ui_manager_get_widget
+ (uiManager, "/MainMenu/MoveMenu"), GTK_WIDGET (menubar));
+ gtk_widget_reparent (gtk_ui_manager_get_widget
+ (uiManager, "/MainMenu/HelpMenu"), GTK_WIDGET (menubar));
+
+ toolbar = gtk_ui_manager_get_widget (uiManager, "/ToolBar");
+ gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
+#ifdef HILDON
+ gtk_rc_parse_string ("style \"nethack-toolbutton\" {\n"
+ " GtkButton::minimum_width = 40\n"
+ "}\n"
+ "widget_class \"*.GtkToolButton.GtkButton\" style \"nethack-toolbutton\"\n");
+ gtk_container_foreach (GTK_CONTAINER (toolbar), (GtkCallback) set_expand,
+ (gpointer) toolbar);
+#endif
+#if defined(MAEMO1)
+ hildon_appview_set_toolbar (HILDON_APPVIEW (box), GTK_TOOLBAR (toolbar));
+#elif (defined(MAEMO2) || defined(MAEMO4))
+ hildon_window_add_toolbar (HILDON_WINDOW (view), GTK_TOOLBAR (toolbar));
+ hildon_window_set_menu (HILDON_WINDOW (view), GTK_MENU (menubar));
+#endif
+#else
+ menubar = gtk_ui_manager_get_widget (uiManager, "/MainMenu");
+ gtk_box_pack_start (GTK_BOX (box), menubar, FALSE, FALSE, 0);
+
+ toolbar = gtk_ui_manager_get_widget (uiManager, "/ToolBar");
+ gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
+ gtk_box_pack_start (GTK_BOX (box), toolbar, FALSE, FALSE, 0);
+#endif
+
+}
+#endif
+
+
+
+void
+g2_init_main_window (int *argcp, char **argv)
+{
+#ifdef HILDON
+#if defined(MAEMO1)
+ HildonApp *app = NULL;
+ HildonAppView *view = NULL;
+#elif (defined(MAEMO2) || defined(MAEMO4))
+ HildonProgram *app = NULL;
+ HildonWindow *view = NULL;
+#endif
+ osso_context_t *osso_context = NULL; /* handle to osso */
+#endif
+
+ GtkWidget *mainBox = NULL;
+ GtkWidget *topBox = NULL;
+ GtkWidget *bottomBox = NULL;
+ GtkWidget *pane1 = NULL;
+ GtkWidget *pane2 = NULL;
+#ifndef HILDON
+ GtkWidget *expander = NULL;
+ GdkPixbuf *icon = NULL;
+ GError *error = NULL;
+#endif
+ int i = 0;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (MAEMO_PACKAGE, HACKDIR "/locale");
+ bind_textdomain_codeset (MAEMO_PACKAGE, "UTF-8");
+ textdomain ("gtk2hack");
+
+ g_print ("Gtk2Hack %s\n", VERSION);
+ for (i = 0; i < *argcp; i++) {
+ g_print ("Arg[%d]:%s\n", i, argv[i]);
+ }
+
+ gtk_rc_parse (RC_FILE);
+
+ /* Initialize maemo application */
+ osso_context = osso_initialize (MAEMO_PACKAGE, MAEMO_VERSION, TRUE, NULL);
+
+ /* Check that initialization was ok */
+ if (osso_context == NULL) {
+ fprintf (stderr, "osso_initialize failed.\n");
+ exit (1);
+ }
+ /* Init the gtk - must be called before any hildon stuff */
+ gtk_init (argcp, &argv);
+
+#ifdef HILDON
+#if defined(MAEMO1)
+ /* Create the hildon application and setup the title */
+ app = HILDON_APP (hildon_app_new ());
+ hildon_app_set_title (app, _("Nethack"));
+ hildon_app_set_two_part_title (app, TRUE);
+#elif (defined(MAEMO2) || defined(MAEMO4))
+ app = HILDON_PROGRAM (hildon_program_get_instance ());
+ g_set_application_name (_("Nethack"));
+#endif
+
+ mainBox = gtk_vbox_new (FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (mainBox), 0);
+#if defined(MAEMO1)
+ view = HILDON_APPVIEW (hildon_appview_new (_("Nethack")));
+ hildon_appview_set_fullscreen_key_allowed (view, TRUE);
+ add_menu_and_toolbar (GTK_WIDGET (view));
+ mainWin = GTK_WIDGET (app);
+#elif (defined(MAEMO2) || defined(MAEMO4))
+ view = HILDON_WINDOW (hildon_window_new ());
+ add_menu_and_toolbar (view);
+ mainWin = GTK_WIDGET (view);
+#endif
+#else
+ mainWin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (mainWin), "Gtk2Hack " VERSION);
+ icon = gdk_pixbuf_new_from_file ("gtk2hack.png", &error);
+ if (icon != NULL) {
+ g_print ("Setting icon\n");
+ gtk_window_set_icon (GTK_WINDOW (mainWin), icon);
+ }
+ mainBox = gtk_vbox_new (FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (mainBox), 0);
+#if GTK_CHECK_VERSION(2,4,0)
+ g_print ("Creating gtk2.4-style menubar!\n");
+ add_menu_and_toolbar (GTK_WIDGET (mainBox));
+#else
+ g_print ("No pre-gtk2.4 menubar implemented (yet)!\n");
+#endif
+#endif
+ g_signal_connect (G_OBJECT (mainWin), "delete_event",
+ G_CALLBACK (g2_exit), NULL);
+
+ messageWin = g2_message_new ();
+ statusWin = g2_status_new ();
+ mapWin = g2_map_new ();
+#ifndef HILDON /* save space for HILDON by removing the Equipment window */
+ equipWin = g2_equipment_new ();
+ expander = gtk_expander_new (_("Equipment"));
+ gtk_container_add (GTK_CONTAINER (expander), equipWin);
+ gtk_box_pack_start (GTK_BOX (topBox), expander, FALSE, FALSE, 2);
+#endif
+
+#ifdef MINIPAD
+ padWin = gtk_minipad_new ();
+#endif
+
+ pane1 = gtk_hpaned_new ();
+
+ gtk_paned_pack1 (GTK_PANED (pane1), statusWin, FALSE, FALSE);
+
+ topBox = gtk_hbox_new (FALSE, 1);
+
+ gtk_box_pack_start (GTK_BOX (topBox), mapWin, TRUE, TRUE, 0);
+
+ gtk_paned_pack2 (GTK_PANED (pane1), topBox, TRUE, FALSE);
+
+ pane2 = gtk_vpaned_new ();
+
+ gtk_paned_pack1 (GTK_PANED (pane2), pane1, TRUE, FALSE);
+
+ bottomBox = gtk_hbox_new (FALSE, 1);
+ gtk_box_pack_start (GTK_BOX (bottomBox), messageWin, TRUE, TRUE, 0);
+
+#ifdef MINIPAD
+ gtk_box_pack_end (GTK_BOX (bottomBox), padWin, FALSE, FALSE, 0);
+#endif
+
+ gtk_paned_pack2 (GTK_PANED (pane2), bottomBox, FALSE, FALSE);
+ gtk_box_pack_start (GTK_BOX (mainBox), pane2, TRUE, TRUE, 0);
+
+// gtk_paned_set_position( GTK_PANED(pane1), 600 );
+// gtk_paned_set_position( GTK_PANED(pane2), 50 );
+#if defined(HILDON) && (defined(MAEMO2) || defined(MAEMO4))
+ g_signal_connect (G_OBJECT (mapWin), "key_press_event",
+ G_CALLBACK (g2_main_key_press_event), NULL);
+#else
+ g_signal_connect (G_OBJECT (mainWin), "key_press_event",
+ G_CALLBACK (g2_main_key_press_event), NULL);
+#endif
+
+#ifdef HILDON
+ gtk_container_add (GTK_CONTAINER (view), mainBox);
+#if defined(MAEMO1)
+ hildon_app_set_appview (app, view);
+ gtk_widget_show_all (GTK_WIDGET (app));
+#elif (defined(MAEMO2) || defined(MAEMO4))
+ hildon_program_add_window (app, view);
+ gtk_widget_show_all (GTK_WIDGET (view));
+#endif
+#else
+ gtk_container_add (GTK_CONTAINER (mainWin), mainBox);
+ gtk_window_set_default_size (GTK_WINDOW (mainWin), 600, 500);
+ gtk_widget_show_all (GTK_WIDGET (mainWin));
+#endif
+}
+
+GtkWidget *
+g2_get_main_window ()
+{
+ return mainWin;
+}
+
+GtkWidget *
+g2_get_equipment_window ()
+{
+ return equipWin;
+}
+
+gint
+g2_create_window (gint type)
+{
+ GtkWidget *win = NULL;
+
+ switch (type) {
+ case NHW_MAP:
+ win = mapWin;
+ break;
+ case NHW_MESSAGE:
+ win = messageWin;
+ break;
+ case NHW_STATUS:
+ win = statusWin;
+ break;
+ case NHW_MENU:
+ win = g2_menu_new ();
+ break;
+ case NHW_TEXT:
+ win = g2_text_new ();
+ break;
+ default:
+ g_print ("create unknown window=%d\n", type);
+ }
+
+ return (int) win;
+}
diff --git a/patches/gtk2/g2main.h b/patches/gtk2/g2main.h
new file mode 100644
index 0000000..0d0637e
--- /dev/null
+++ b/patches/gtk2/g2main.h
@@ -0,0 +1,79 @@
+/* the main window
+ *
+ * $Id: g2main.h,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+#ifndef G2_MAIN_WINDOW_H
+#define G2_MAIN_WINDOW_H
+
+#include <gtk/gtk.h>
+
+#define MINIPAD
+
+#define GTK_HACK_DOMAIN "gtk-hack"
+#define HACK_TOILET_PAPER "hack-toilet-paper"
+
+
+#define HACK_STOCK_DIR_NW "hack-dir-nw"
+#define HACK_STOCK_DIR_N "hack-dir-n"
+#define HACK_STOCK_DIR_NE "hack-dir-ne"
+#define HACK_STOCK_DIR_W "hack-dir-w"
+#define HACK_STOCK_DIR_E "hack-dir-e"
+#define HACK_STOCK_DIR_SW "hack-dir-sw"
+#define HACK_STOCK_DIR_S "hack-dir-s"
+#define HACK_STOCK_DIR_SE "hack-dir-se"
+#define HACK_STOCK_DIR_SELF "hack-dir-self"
+
+#define HACK_STOCK_EAT "hack-eat"
+#define HACK_STOCK_INV "hack-inv"
+#define HACK_STOCK_KICK "hack-kick"
+#define HACK_STOCK_OPEN "hack-open"
+#define HACK_STOCK_THROW "hack-throw"
+#define HACK_STOCK_ZAP "hack-zap"
+#define HACK_STOCK_SPELLBOOK "hack-spellbook"
+#define HACK_STOCK_WHATSHERE "hack-whatshere"
+#define HACK_STOCK_WHATSTHERE "hack-whatsthere"
+#define HACK_STOCK_SEARCH "hack-search"
+
+/* used for the keyboard functions */
+enum
+{
+ META_BIT = 1 << 7,
+ CTRL_BITS = 0x1f
+};
+
+enum
+{
+ TILESET_DEFAULT,
+ TILESET_GRAPHICAL32,
+ TILESET_GRAPHICAL16,
+ TILESET_ASCII_COLOR,
+ TILESET_ASCII_BW,
+ TILESET_ASCII_WB
+};
+
+typedef struct
+{
+ gint id;
+ GtkWidget *win;
+} g2Win;
+
+GSList *keyBuffer;
+gint clickX;
+gint clickY;
+gint clickMod;
+
+gboolean skip_question;
+
+void g2_init_main_window (int *argcp, char **argv);
+GtkWidget *g2_get_main_window ();
+GtkWidget *g2_get_equipment_window ();
+gint g2_create_window (gint type);
+void g2_exit_windows (const gchar * string);
+
+/* utility functions */
+gboolean g2_move_keys_with_numpad (guint keyval, gint * key);
+gboolean g2_key_is_valid_input (guint keyval);
+
+#endif /* G2_MAIN_WINDOW_H */
diff --git a/patches/gtk2/g2map.c b/patches/gtk2/g2map.c
new file mode 100644
index 0000000..089514e
--- /dev/null
+++ b/patches/gtk2/g2map.c
@@ -0,0 +1,676 @@
+/* the map window
+ *
+ * $Id: g2map.c,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+/* see gtk tutorial on www.gtk.org for creating a composite widget */
+
+#include <stdio.h>
+// #include <math.h>
+
+#include "g2map.h"
+#include "g2main.h"
+#include "g2marsh.h"
+#include "tile2x11.h"
+#include "hack.h"
+
+#define TILES_FILE "x11tiles"
+
+/* XPM */
+const char *pet_mark_xpm[] = {
+ /* width height ncolors chars_per_pixel */
+ "8 7 2 1",
+ /* colors */
+ ". c None",
+ " c #FF0000",
+ /* pixels */
+ "........",
+ ".. . .",
+ ". ",
+ ". ",
+ ".. .",
+ "... ..",
+ ".... ..."
+};
+
+static GdkColor cursColor = {
+ 200 * 255,
+ 200 * 255,
+ 200 * 255,
+};
+
+
+static gint tileWidth;
+static gint tileHeight;
+static gint tileCount;
+static gint tilesPerRow;
+
+//static gint tileSize;
+
+
+static GdkPixbuf *tileSet = NULL;
+static GdkPixbuf **tiles = NULL;
+static GdkPixbuf *petMark = NULL;
+
+/* A cache of the last scaled tile */
+static GdkPixbuf *scaledTile = NULL;
+static gint scaledTileGlyph = -1;
+static gint scaledTileSize = -1;
+
+
+static gint g2_map_signals[7];
+
+extern short glyph2tile[]; /* from tile.c */
+
+
+/*
+static void g2_map_size_request(GtkWidget *widget,
+ GtkRequisition *requisition);
+*/
+
+static void g2_map_class_init (G2MapClass * class);
+static void g2_map_init (G2Map * map);
+static gboolean expose_event (GtkWidget * widget, GdkEventExpose * event,
+ gpointer data);
+
+static void
+load_tiles (gchar * tile_file, gint width, gint height)
+{
+ gint i;
+ gint srcX;
+ gint srcY;
+ GError *err = NULL;
+ GdkColor white;
+
+ white.red = 65535;
+ white.green = 65535;
+ white.blue = 65535;
+
+ tileWidth = width;
+ tileHeight = height;
+ tileSet = gdk_pixbuf_new_from_file (tile_file, &err);
+
+ if (!tileSet) {
+ fprintf (stderr, "Error loading tile set:%s\n", err->message);
+ }
+ tilesPerRow = gdk_pixbuf_get_width (tileSet) / tileWidth;
+ tileCount = tilesPerRow * (gdk_pixbuf_get_height (tileSet) / tileHeight);
+
+ g_print ("Tiles per row %d\n", tilesPerRow);
+// tileSize = gdk_pixbuf_get_width(tileSet) / TILES_PER_ROW;
+ g_print ("TileWidth: %d\n", tileWidth);
+ g_print ("TileHeight: %d\n", tileHeight);
+ g_print ("Tilecount: %d\n", tileCount);
+
+ tiles = g_new0 (GdkPixbuf *, tileCount);
+ for (i = 0; i < tileCount; i++) {
+ srcX = (i % tilesPerRow) * tileWidth;
+ srcY = (i / tilesPerRow) * tileHeight;
+ tiles[i] =
+ gdk_pixbuf_new_subpixbuf (tileSet, srcX, srcY, tileWidth, tileHeight);
+ }
+}
+
+static void
+init_tiles ()
+{
+ if (iflags.wc_tile_file == NULL)
+ load_tiles (TILES_FILE, 16, 16);
+ else {
+ g_print ("Option tile_file:%s\n", iflags.wc_tile_file);
+ load_tiles (iflags.wc_tile_file, iflags.wc_tile_width,
+ iflags.wc_tile_height);
+ }
+}
+
+static void
+finalize_tiles ()
+{
+ g_free (tiles);
+ gdk_pixbuf_unref (tileSet);
+
+ if (scaledTile)
+ gdk_pixbuf_unref (scaledTile);
+}
+
+/** Returns the default size of the tiles.
+ */
+// gint g2_get_tile_size()
+// { return tileSize; }
+
+/** Returns the default size of the tiles.
+ */
+gint
+g2_get_tile_width ()
+{
+ return tileWidth;
+}
+
+/** Returns the default size of the tiles.
+ */
+gint
+g2_get_tile_height ()
+{
+ return tileHeight;
+}
+
+
+/** Returns the number of tiles.
+ */
+gint
+g2_get_tile_count ()
+{
+ return tileCount;
+}
+
+/** Returns a pixbuf with the requested tile. */
+GdkPixbuf *
+g2_get_tile (gint glyph)
+{
+ g_assert (tiles != NULL);
+ return tiles[glyph2tile[glyph]];
+}
+
+/** Returns a pixbuf with the requested tile scaled to the size
+ * Do not free this tile.
+ * Note: we don't do much optimization here. Please refrain from the urges to do something here until
+ * you notice that it's really needed.
+ */
+GdkPixbuf *
+g2_get_tile_scaled (gint glyph, gint size)
+{
+//g_print("0.g2_get_tile_scaled\n");
+//g_print("size: %d width: %d\n",size,tileWidth);
+ /* nothing to scale here */
+ if (size == tileWidth) {
+// g_print("1.g2_get_tile_scaled\n");
+ return g2_get_tile (glyph);
+ }
+
+ /* we cache only one (the last requested) tile */
+ if (scaledTileGlyph == glyph && scaledTileSize == size) {
+// g_print("2.g2_get_tile_scaled\n");
+ return scaledTile;
+ }
+ if (scaledTile)
+ gdk_pixbuf_unref (scaledTile);
+ scaledTile = gdk_pixbuf_scale_simple (g2_get_tile (glyph), size, tileHeight * size / tileWidth, GDK_INTERP_NEAREST); //GDK_INTERP_NEAREST
+ scaledTileGlyph = glyph;
+ scaledTileSize = size;
+//g_print("3.g2_get_tile_scaled\n");
+ return scaledTile;
+}
+
+
+static gboolean
+expose_event (GtkWidget * canvas, GdkEventExpose * event, gpointer data)
+{
+ int startX, startY, endX, endY;
+ int x, y;
+ G2Map *map = G2_MAP (data);
+
+ g_assert (canvas != NULL);
+ g_assert (map != NULL);
+ g_assert (map->canvas);
+
+ startX = (int) ((event->area.x) / (gdouble) map->tileWidth);
+ startY = (int) ((event->area.y) / (gdouble) map->tileHeight);
+ endX = (int) ((event->area.x + event->area.width) / (gdouble) map->tileWidth);
+ endY =
+ (int) ((event->area.y + event->area.height) / (gdouble) map->tileHeight);
+
+// g_print("--->expose_event sX:%d eX:%d sY:%d eY:%d\n", startX, endX, startY, endY);
+
+ if (!map->gc) {
+ map->gc = gdk_gc_new (map->canvas->window);
+ gdk_gc_set_rgb_fg_color (map->gc, &cursColor);
+ }
+
+ /* -- iterate over all dirty tiles and draw them */
+ for (x = startX; x <= endX; x++) {
+ for (y = startY; y <= endY; y++) {
+
+ /* -- draw a border with the "selected" style */
+ if (x < 0 || x >= COLNO || y < 0 || y >= ROWNO) {
+
+ gtk_paint_flat_box (GTK_WIDGET (canvas)->style, canvas->window,
+ GTK_STATE_SELECTED, GTK_SHADOW_NONE,
+ &(event->area), canvas, "base",
+ x * map->tileWidth, y * map->tileHeight,
+ map->tileWidth, map->tileHeight);
+
+ /* draw not yet discovered tiles with the "normal" style */
+ } else if (map->theMap[x][y] < 0) {
+
+ gtk_paint_flat_box (GTK_WIDGET (canvas)->style, canvas->window,
+ GTK_STATE_NORMAL, GTK_SHADOW_NONE,
+ &(event->area), canvas, "base",
+ x * map->tileWidth, y * map->tileHeight,
+ map->tileWidth, map->tileHeight);
+
+
+ /* draw the tile for discovered. */
+ } else {
+//g_print("gdk_pixbuf_render_to_drawable\n");
+ gdk_pixbuf_render_to_drawable (g2_get_tile_scaled
+ (map->theMap[x][y],
+ map->tileWidth), canvas->window,
+ canvas->style->white_gc, 0, 0,
+ x * map->tileWidth,
+ y * map->tileHeight,
+ map->tileWidth, map->tileHeight,
+ GDK_RGB_DITHER_NONE, x * map->tileWidth, y * map->tileHeight);
+
+ if (glyph_is_pet (map->theMap[x][y]) && iflags.hilite_pet) {
+ gint width = gdk_pixbuf_get_width (petMark);
+ gint height = gdk_pixbuf_get_height (petMark);
+
+ gdk_draw_pixbuf (canvas->window,
+ map->canvas->style->white_gc, petMark, 0,
+ 0, x * map->tileWidth, y * map->tileHeight,
+ width, height, GDK_RGB_DITHER_NONE, 0, 0);
+ }
+
+ }
+
+ /* draw the cursor */
+ if (x == map->cursorX && y == map->cursorY)
+ gdk_draw_rectangle (canvas->window, canvas->style->white_gc,
+ FALSE, x * map->tileWidth,
+ y * map->tileHeight, map->tileWidth - 1, map->tileHeight - 1);
+
+ }
+ }
+
+ return TRUE;
+}
+
+/* clear the map and re-paint the window */
+static void
+g2_map_clear (GtkWidget * win, gpointer gp)
+{
+ int x, y;
+ G2Map *map = G2_MAP (win);
+
+ g_assert (map != NULL);
+
+ for (x = 0; x < COLNO; x++)
+ for (y = 0; y < ROWNO; y++)
+ map->theMap[x][y] = -1;
+
+ gtk_widget_queue_draw (map->canvas);
+}
+
+static void
+g2_map_print_glyph (GtkWidget * win, int x, int y, int glyph, gpointer gp)
+{
+ G2Map *map = G2_MAP (win);
+
+//g_print("g2_map_print_glyph\n");
+ g_assert (map != NULL);
+ g_assert (map->canvas != NULL);
+
+ map->theMap[x][y] = glyph;
+ gtk_widget_queue_draw_area (map->canvas,
+ x * map->tileWidth, y * map->tileHeight, map->tileWidth, map->tileHeight);
+
+}
+
+static void
+g2_map_cliparound (GtkWidget * win, int x, int y, gpointer gp)
+{
+ g_assert (win != NULL);
+//g_print("g2_map_cliparound\n");
+ G2Map *map = G2_MAP (win);
+ GtkAdjustment *vAdj =
+ gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (map));
+ GtkAdjustment *hAdj =
+ gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (map));
+
+ g_assert (vAdj != NULL);
+ g_assert (hAdj != NULL);
+
+ if (vAdj->upper != map->mapHeight)
+ vAdj->upper = map->mapHeight;
+ if (hAdj->upper != map->mapWidth)
+ hAdj->upper = map->mapWidth;
+
+ gint height = win->allocation.height;
+ gint width = win->allocation.width;
+
+ gint requestedCenterX = x * map->tileWidth + map->tileWidth / 2;
+ gint requestedCenterY = y * map->tileHeight + map->tileHeight / 2;
+
+/*
+g_print("height:%d width:%d x:%d y:%d tileWidth:%d tileHeight:%d CenterX:%d CenterY:%d mapWidth:%d mapHeight:%d\n",
+ height, width, x, y,map->tileWidth, map->tileHeight, requestedCenterX, requestedCenterY, map->mapWidth, map->mapHeight);
+g_print("hAdj.upper:%f .pagesize:%f vAdj.upper:%f .pagesize:%f \n", hAdj->upper, hAdj->page_size, vAdj->upper, vAdj->page_size);
+*/
+
+ if (requestedCenterX <= width / 2) {
+ gtk_adjustment_set_value (GTK_ADJUSTMENT (hAdj), 0.0f);
+ } else if (requestedCenterX >= map->mapWidth - width / 2) {
+ gtk_adjustment_set_value (GTK_ADJUSTMENT (hAdj),
+ hAdj->upper - hAdj->page_size);
+ } else {
+ gtk_adjustment_set_value (GTK_ADJUSTMENT (hAdj),
+ requestedCenterX - width / 2);
+ }
+ if (requestedCenterY <= height / 2) {
+ gtk_adjustment_set_value (GTK_ADJUSTMENT (vAdj), 0.0f);
+ } else if (requestedCenterY >= map->mapHeight - height / 2) {
+ gtk_adjustment_set_value (GTK_ADJUSTMENT (vAdj),
+ vAdj->upper - vAdj->page_size);
+ } else {
+ gtk_adjustment_set_value (GTK_ADJUSTMENT (vAdj),
+ requestedCenterY - height / 2);
+ }
+}
+
+static void
+g2_map_curs (GtkWidget * win, int x, int y, gpointer gp)
+{
+ G2Map *map = G2_MAP (win);
+
+// g_print("Map-curs: x=%d, y=%d\n", x, y);
+ /* refresh last cursor position from backbuffer */
+ gtk_widget_queue_draw_area (map->canvas,
+ map->cursorX * map->tileWidth,
+ map->cursorY * map->tileHeight, map->tileWidth, map->tileHeight);
+ map->cursorX = x;
+ map->cursorY = y;
+ /* schedule new position for refresh */
+ gtk_widget_queue_draw_area (map->canvas,
+ map->cursorX * map->tileWidth,
+ map->cursorY * map->tileHeight, map->tileWidth, map->tileHeight);
+}
+
+static void
+g2_map_display (GtkWidget * win, gboolean block, gpointer gp)
+{
+ g_assert (win != NULL);
+
+ gtk_widget_show_all (win);
+ gtk_widget_grab_focus (win);
+}
+
+
+/** Set's a new scale for the map and returns the new scale.
+ * @param scale The scale with which the old scale is multiplied. 1.0 if it should remain unchanged.
+ * The scale must not be zero.
+ * @returns The new scale factor.
+ */
+static gdouble
+g2_map_rescale (GtkWidget * win, gdouble scale, gpointer gp)
+{
+ G2Map *map = G2_MAP (win);
+
+//g_print( "\nSet scale %lf\n", scale );
+
+ g_assert (map != NULL);
+
+ if (g2_get_tile_width () * (map->factor + scale) >= 8) {
+ map->factor += scale;
+ }
+
+ map->tileWidth = g2_get_tile_width () * map->factor;
+ map->tileHeight = g2_get_tile_height () * map->factor;
+ map->mapWidth = COLNO * map->tileWidth;
+ map->mapHeight = ROWNO * map->tileHeight;
+
+ gtk_widget_set_size_request (map->canvas, map->mapWidth, map->mapHeight);
+
+ /* setting the middle again seems not to work right now.
+ Maybe the size_request was not handled yet? */
+ g2_map_cliparound (win, map->cursorX, map->cursorY, NULL); /* center around cursor */
+// gtk_widget_queue_draw(map->canvas);
+// g_print( "End.Set scale\n");
+ return map->factor;
+}
+
+static void
+reload_tiles (GtkWidget * win, gchar * tile_file, gint width, gint height,
+ gdouble factor)
+{
+ G2Map *map = G2_MAP (win);
+
+ g_assert (map != NULL);
+
+ finalize_tiles ();
+ load_tiles (tile_file, width, height);
+ map->factor = factor;
+ map->tileWidth = g2_get_tile_width () * map->factor;
+ map->tileHeight = g2_get_tile_height () * map->factor;
+ map->mapWidth = COLNO * map->tileWidth;
+ map->mapHeight = ROWNO * map->tileHeight;
+
+ gtk_widget_set_size_request (map->canvas, map->mapWidth, map->mapHeight);
+ g2_map_cliparound (win, map->cursorX, map->cursorY, NULL); /* center around cursor */
+}
+
+static void
+g2_map_reload_tiles (GtkWidget * win, gint tileset, gpointer gp)
+{
+ switch (tileset) {
+ case TILESET_DEFAULT:
+ reload_tiles (win, iflags.wc_tile_file, iflags.wc_tile_width,
+ iflags.wc_tile_height, 1.0);
+ break;
+ case TILESET_GRAPHICAL32:
+ reload_tiles (win, "tiles32.png", 32, 32, 1.0);
+ break;
+ case TILESET_GRAPHICAL16:
+ reload_tiles (win, TILES_FILE, 16, 16, 2.0);
+ break;
+ case TILESET_ASCII_COLOR:
+ reload_tiles (win, "ClassicColor.png", 16, 24, 1.0);
+ break;
+ case TILESET_ASCII_BW:
+ reload_tiles (win, "ClassicBW.png", 16, 24, 1.0);
+ break;
+ case TILESET_ASCII_WB:
+ reload_tiles (win, "ClassicWB.png", 16, 24, 1.0);
+ break;
+ }
+}
+
+static gboolean
+g2_map_button_press_event (GtkWidget * widget, GdkEventButton * event,
+ gpointer data)
+{
+ G2Map *map = G2_MAP (widget);
+
+ int tilePosX;
+ int tilePosY;
+
+ GtkAdjustment *vAdj =
+ gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (map));
+ GtkAdjustment *hAdj =
+ gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (map));
+
+ gdouble xOffset = gtk_adjustment_get_value (hAdj);
+ gdouble yOffset = gtk_adjustment_get_value (vAdj);
+
+ tilePosX = (int) ((event->x + xOffset) / (gdouble) map->tileWidth);
+ tilePosY = (int) ((event->y + yOffset) / (gdouble) map->tileHeight);
+
+ /* The values can be out of range if the map window has been resized */
+ /* to be larger than the max size. */
+ if (tilePosX >= COLNO)
+ tilePosX = COLNO - 1;
+ if (tilePosY >= ROWNO)
+ tilePosY = ROWNO - 1;
+
+// g_print("Button pressed: x=%d, y=%d\n", tilePosX, tilePosY);
+
+ /* signal a new pos-event */
+ clickX = tilePosX;
+ clickY = tilePosY;
+ /* Map all buttons but the first to the second click */
+ clickMod = (event->button == 1) ? CLICK_1 : CLICK_2;
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (0));
+
+ return TRUE;
+}
+
+
+/** return the prefered size for the map widget */
+/*
+static void
+g2_map_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ G2Map *map = G2_MAP (widget);
+
+ requisition->height = map->mapWidth;
+ requisition->width = map->mapHeight;
+} */
+
+
+static void
+g2_map_init (G2Map * map)
+{
+ map->factor = (g2_get_tile_width () > 16 ? 1.0 : 2.0);
+ map->tileWidth = g2_get_tile_width () * map->factor;
+ map->tileHeight = g2_get_tile_height () * map->factor;
+ map->canvas = gtk_drawing_area_new ();
+
+ g2_map_clear (GTK_WIDGET (map), NULL);
+
+ map->gc = NULL;
+ map->mapWidth = COLNO * map->tileWidth;
+ map->mapHeight = ROWNO * map->tileHeight;
+ map->cursorX = 0;
+ map->cursorY = 0;
+
+ gtk_widget_set_name (GTK_WIDGET (map), "map window");
+ gtk_widget_set_double_buffered (map->canvas, FALSE);
+ gtk_widget_set_size_request (map->canvas, map->mapWidth, map->mapHeight);
+
+ /* minimum size */
+ gtk_widget_set_size_request (GTK_WIDGET (map), map->tileWidth * 5,
+ map->tileHeight * 6);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (map),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (map),
+ map->canvas);
+ g_signal_connect (G_OBJECT (map->canvas), "expose_event",
+ G_CALLBACK (expose_event), (gpointer) map);
+}
+
+GtkWidget *
+g2_map_new ()
+{
+ G2Map *g2Map;
+
+ g2Map = G2_MAP (g_object_new (G2_MAP_TYPE, NULL));
+
+ g_signal_connect (G_OBJECT (g2Map), "print_glyph",
+ G_CALLBACK (g2_map_print_glyph), NULL);
+ g_signal_connect (G_OBJECT (g2Map), "clear", G_CALLBACK (g2_map_clear), NULL);
+ g_signal_connect (G_OBJECT (g2Map), "cliparound",
+ G_CALLBACK (g2_map_cliparound), NULL);
+ g_signal_connect (G_OBJECT (g2Map), "curs", G_CALLBACK (g2_map_curs), NULL);
+ g_signal_connect (G_OBJECT (g2Map), "display", G_CALLBACK (g2_map_display),
+ NULL);
+ g_signal_connect (G_OBJECT (g2Map), "button_press_event",
+ G_CALLBACK (g2_map_button_press_event), NULL);
+ g_signal_connect (G_OBJECT (g2Map), "rescale", G_CALLBACK (g2_map_rescale),
+ NULL);
+ g_signal_connect (G_OBJECT (g2Map), "reload_tiles",
+ G_CALLBACK (g2_map_reload_tiles), NULL);
+ gtk_widget_set_events (GTK_WIDGET (g2Map),
+ gtk_widget_get_events (GTK_WIDGET (g2Map)) | GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK);
+ return GTK_WIDGET (g2Map);
+}
+
+
+static void
+g2_map_class_init (G2MapClass * class)
+{
+ init_tiles ();
+ petMark = gdk_pixbuf_new_from_xpm_data (pet_mark_xpm);
+
+ /* activating this removes the scroll-bars! */
+ /* GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+ widget_class->size_request = g2_map_size_request; */
+ g2_map_signals[0] =
+ g_signal_new ("print_glyph",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (G2MapClass, g2_map_print_glyph),
+ NULL, NULL,
+ g2_marshal_VOID__INT_INT_INT, G_TYPE_NONE, 3, G_TYPE_INT,
+ G_TYPE_INT, G_TYPE_INT);
+ g2_map_signals[1] =
+ g_signal_new ("clear",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (G2MapClass, g2_map_clear),
+ NULL, NULL, gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ g2_map_signals[2] =
+ g_signal_new ("cliparound",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (G2MapClass, g2_map_cliparound),
+ NULL, NULL, gtk_marshal_VOID__INT_INT, G_TYPE_NONE, 2,
+ G_TYPE_INT, G_TYPE_INT);
+ g2_map_signals[3] =
+ g_signal_new ("curs",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (G2MapClass, g2_map_curs),
+ NULL, NULL, gtk_marshal_VOID__INT_INT, G_TYPE_NONE, 2,
+ G_TYPE_INT, G_TYPE_INT);
+ g2_map_signals[4] =
+ g_signal_new ("display",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (G2MapClass, g2_map_display),
+ NULL, NULL, gtk_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+ g2_map_signals[5] =
+ g_signal_new ("rescale",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (G2MapClass, g2_map_rescale),
+ NULL, NULL, g2_marshal_DOUBLE__DOUBLE, G_TYPE_DOUBLE, 1, G_TYPE_DOUBLE);
+ g2_map_signals[6] =
+ g_signal_new ("reload_tiles",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (G2MapClass, g2_map_reload_tiles),
+ NULL, NULL, gtk_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+}
+
+/** Note: I don't know how to put this into the "static" g2Map type */
+static void
+g2_map_class_finalize (G2MapClass * class)
+{
+ finalize_tiles ();
+}
+
+guint
+g2_map_get_type ()
+{
+ static GType g2_map_type = 0;
+
+ if (!g2_map_type) {
+ static const GTypeInfo g2_map_info = {
+ sizeof (G2MapClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) g2_map_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (G2Map),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) g2_map_init
+ };
+
+ g2_map_type = g_type_register_static (GTK_TYPE_SCROLLED_WINDOW,
+ "G2Map", &g2_map_info, 0);
+ }
+ return g2_map_type;
+}
diff --git a/patches/gtk2/g2map.h b/patches/gtk2/g2map.h
new file mode 100644
index 0000000..89f815f
--- /dev/null
+++ b/patches/gtk2/g2map.h
@@ -0,0 +1,70 @@
+/* the map window as a GObject
+ *
+ * we derive from <vbox> to build our own map widget with our own signals which
+ * g2bind will emit on calls from the nethack engine
+ *
+ * $Id: g2map.h,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+#ifndef G2_MAP_WINDOW_H
+#define G2_MAP_WINDOW_H
+
+#include <glib.h>
+#include <gtk/gtkscrolledwindow.h>
+
+G_BEGIN_DECLS
+#ifndef ROWNO
+#define ROWNO 21
+#endif
+#ifndef COLNO
+#define COLNO 80
+#endif
+#define G2_MAP_TYPE (g2_map_get_type())
+#define G2_MAP(obj) GTK_CHECK_CAST(obj, G2_MAP_TYPE, G2Map)
+#define G2_MAP_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, G2_MAP_TYPE, G2MapClass)
+#define IS_G2_MAP(obj) GTK_CHECK_TYPE(obj, G2_MAP_TYPE)
+#define IS_G2_MAP_CLASS(obj) GTK_CHECK_CLASS_TYPE(obj, G2_MAP_TYPE)
+ typedef struct
+{
+ GtkScrolledWindow scrolled_window; /* a scrolled_window the parent */
+ GtkWidget *canvas; /* a drawing_area */
+
+ int theMap[COLNO][ROWNO];
+
+ gdouble factor;
+ gint tileWidth;
+ gint tileHeight;
+ GdkGC *gc;
+ gint mapWidth;
+ gint mapHeight;
+ gint cursorX;
+ gint cursorY;
+} G2Map;
+
+typedef struct
+{
+ GtkScrolledWindowClass parent_class;
+
+ void (*g2_map_print_glyph) (G2Map * g2Map);
+ void (*g2_map_clear) (G2Map * g2Map);
+ void (*g2_map_cliparound) (G2Map * g2Map);
+ void (*g2_map_curs) (G2Map * g2Map);
+ void (*g2_map_display) (G2Map * g2Map);
+ void (*g2_map_rescale) (G2Map * g2Map);
+ void (*g2_map_reload_tiles) (G2Map * g2Map);
+ void (*g2map) (G2Map * g2Map);
+} G2MapClass;
+
+guint g2_map_get_type (void);
+
+//gint g2_get_tile_size();
+gint g2_get_tile_width ();
+gint g2_get_tile_height ();
+gint g2_get_tile_count ();
+GtkWidget *g2_map_new (void);
+GdkPixbuf *g2_get_tile (gint glyph);
+GdkPixbuf *g2_get_tile_scaled (gint glyph, gint size);
+
+G_END_DECLS
+#endif /* G2_MAP_WINDOW_H */
diff --git a/patches/gtk2/g2marsh.c b/patches/gtk2/g2marsh.c
new file mode 100644
index 0000000..b4f4fef
--- /dev/null
+++ b/patches/gtk2/g2marsh.c
@@ -0,0 +1,224 @@
+
+#include <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* VOID:INT,INT,INT (gen_marsh_input:1) */
+void
+g2_marshal_VOID__INT_INT_INT (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__INT_INT_INT) (gpointer data1,
+ gint arg_1, gint arg_2, gint arg_3, gpointer data2);
+ register GMarshalFunc_VOID__INT_INT_INT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 4);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__INT_INT_INT) (marshal_data ? marshal_data : cc->
+ callback);
+
+ callback (data1,
+ g_marshal_value_peek_int (param_values + 1),
+ g_marshal_value_peek_int (param_values + 2),
+ g_marshal_value_peek_int (param_values + 3), data2);
+}
+
+/* VOID:INT,STRING (gen_marsh_input:2) */
+void
+g2_marshal_VOID__INT_STRING (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__INT_STRING) (gpointer data1,
+ gint arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_VOID__INT_STRING callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__INT_STRING) (marshal_data ? marshal_data : cc->
+ callback);
+
+ callback (data1,
+ g_marshal_value_peek_int (param_values + 1),
+ g_marshal_value_peek_string (param_values + 2), data2);
+}
+
+/* VOID:INT,POINTER,CHAR,CHAR,INT,STRING,BOOLEAN (gen_marsh_input:3) */
+void
+g2_marshal_VOID__INT_POINTER_CHAR_CHAR_INT_STRING_BOOLEAN (GClosure * closure,
+ GValue *
+ return_value,
+ guint
+ n_param_values,
+ const GValue *
+ param_values, gpointer invocation_hint, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__INT_POINTER_CHAR_CHAR_INT_STRING_BOOLEAN)
+
+ (gpointer data1, gint arg_1, gpointer arg_2, gchar arg_3, gchar arg_4,
+ gint arg_5, gpointer arg_6, gboolean arg_7, gpointer data2);
+ register GMarshalFunc_VOID__INT_POINTER_CHAR_CHAR_INT_STRING_BOOLEAN callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 8);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__INT_POINTER_CHAR_CHAR_INT_STRING_BOOLEAN)
+ (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_int (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2),
+ g_marshal_value_peek_char (param_values + 3),
+ g_marshal_value_peek_char (param_values + 4),
+ g_marshal_value_peek_int (param_values + 5),
+ g_marshal_value_peek_string (param_values + 6),
+ g_marshal_value_peek_boolean (param_values + 7), data2);
+}
+
+/* INT:INT,POINTER (gen_marsh_input:4) */
+void
+g2_marshal_INT__INT_POINTER (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data)
+{
+ typedef gint (*GMarshalFunc_INT__INT_POINTER) (gpointer data1,
+ gint arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_INT__INT_POINTER callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ gint v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_INT__INT_POINTER) (marshal_data ? marshal_data : cc->
+ callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_int (param_values + 1),
+ g_marshal_value_peek_pointer (param_values + 2), data2);
+
+ g_value_set_int (return_value, v_return);
+}
+
+/* DOUBLE:DOUBLE (gen_marsh_input:5) */
+void
+g2_marshal_DOUBLE__DOUBLE (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data)
+{
+ typedef gdouble (*GMarshalFunc_DOUBLE__DOUBLE) (gpointer data1,
+ gdouble arg_1, gpointer data2);
+ register GMarshalFunc_DOUBLE__DOUBLE callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ gdouble v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 2);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_DOUBLE__DOUBLE) (marshal_data ? marshal_data : cc->
+ callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_double (param_values + 1), data2);
+
+ g_value_set_double (return_value, v_return);
+}
diff --git a/patches/gtk2/g2marsh.h b/patches/gtk2/g2marsh.h
new file mode 100644
index 0000000..c1ae7ec
--- /dev/null
+++ b/patches/gtk2/g2marsh.h
@@ -0,0 +1,43 @@
+
+#ifndef __g2_marshal_MARSHAL_H__
+#define __g2_marshal_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/* VOID:INT,INT,INT (gen_marsh_input:1) */
+extern void g2_marshal_VOID__INT_INT_INT (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data);
+
+/* VOID:INT,STRING (gen_marsh_input:2) */
+extern void g2_marshal_VOID__INT_STRING (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data);
+
+/* VOID:INT,POINTER,CHAR,CHAR,INT,STRING,BOOLEAN (gen_marsh_input:3) */
+extern void g2_marshal_VOID__INT_POINTER_CHAR_CHAR_INT_STRING_BOOLEAN (GClosure
+ * closure, GValue * return_value, guint n_param_values,
+ const GValue * param_values, gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* INT:INT,POINTER (gen_marsh_input:4) */
+extern void g2_marshal_INT__INT_POINTER (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data);
+
+/* DOUBLE:DOUBLE (gen_marsh_input:5) */
+extern void g2_marshal_DOUBLE__DOUBLE (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data);
+
+G_END_DECLS
+#endif /* __g2_marshal_MARSHAL_H__ */
diff --git a/patches/gtk2/g2menu.c b/patches/gtk2/g2menu.c
new file mode 100644
index 0000000..8475d82
--- /dev/null
+++ b/patches/gtk2/g2menu.c
@@ -0,0 +1,719 @@
+/* the menu window
+ *
+ * $Id: g2menu.c,v 1.3 2004/07/20 00:08:56 miq Exp $
+ *
+ */
+
+#include <string.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "config.h"
+
+#include "g2main.h"
+#include "g2menu.h"
+#include "g2marsh.h"
+#include "g2map.h" /* for g2_get_tile() */
+#include "g2i18n.h"
+#include "hack.h"
+
+#define G2_MENU_MSG_WIDTH 640
+#define G2_MENU_MSG_HEIGHT 300
+#define G2_MENU_MENU_WIDTH 640
+#define G2_MENU_MENU_HEIGTH 400
+
+static GtkDialogClass *parent_class;
+static gint g2_menu_signals[10];
+static GtkTreeIter iter;
+
+static void g2_menu_class_init (G2MenuClass * class);
+static void g2_menu_init (G2Menu * menu);
+static void g2_menu_putstr (G2Menu * win, int attr, const char *text,
+ gpointer gp);
+
+enum
+{
+ G2_MENU_HEADER,
+ G2_MENU_ACCEL,
+ G2_MENU_GLYPH,
+ G2_MENU_STRING,
+ G2_MENU_IDENTIFIER,
+ G2_MENU_ATTRIBUTES,
+ G2_MENU_PRESEL,
+ G2_MENU_CATEGORY,
+ G2_MENU_COL_NUM
+};
+
+enum
+{
+ INV_NOTHING = 0,
+ INV_WEAPON = 1,
+ INV_ARMOR = 2,
+ INV_COMESTIBLE = 4,
+ INV_SCROLL = 8,
+ INV_SPELLBOOK = 16,
+ INV_POTION = 32,
+ INV_RING = 64,
+ INV_WAND = 128,
+ INV_TOOL = 256,
+ INV_GEM = 512,
+ INV_ALL = 1023
+};
+
+typedef struct
+{
+ gchar *name;
+ guint category;
+} ItemCategory;
+
+static ItemCategory inventory_categories[] = {
+ {"Weapons", INV_WEAPON},
+ {"Armor", INV_ARMOR},
+ {"Comestibles", INV_COMESTIBLE},
+ {"Scrolls", INV_SCROLL},
+ {"Spellbooks", INV_SPELLBOOK},
+ {"Potions", INV_POTION},
+ {"Rings", INV_RING},
+ {"Wands", INV_WAND},
+ {"Tools", INV_TOOL},
+ {"Gems", INV_GEM},
+};
+
+typedef struct
+{
+ gchar *name;
+ guint category;
+ gint command;
+ gint item;
+ gpointer dialog;
+} ActionCategory;
+
+static ActionCategory popup_actions[] = {
+ {"Drop", INV_ALL, 'd', ' ', NULL},
+ {"Eat", INV_COMESTIBLE, 'e', ' ', NULL},
+ {"PutOn", INV_RING | INV_TOOL, 'P', ' ', NULL},
+ {"Quaff", INV_POTION, 'q', ' ', NULL},
+ {"Quiver", INV_ALL, 'Q', ' ', NULL},
+ {"Read", INV_SCROLL | INV_SPELLBOOK, 'r', ' ', NULL},
+ {"Remove", INV_RING | INV_TOOL, 'R', ' ', NULL},
+ {"Throw", INV_ALL, 't', ' ', NULL},
+ {"TakeOff", INV_ARMOR, 'T', ' ', NULL},
+ {"Wield", INV_WEAPON, 'w', ' ', NULL},
+ {"Wear", INV_ARMOR, 'W', ' ', NULL},
+ {"Zap", INV_WAND, 'z', ' ', NULL},
+ {"Dip", INV_ALL, META_BIT | GDK_d, ' ', NULL},
+ {"Offer", INV_COMESTIBLE, META_BIT | GDK_o, ' ', NULL},
+ {"Rub", INV_TOOL, META_BIT | GDK_r, ' ', NULL},
+};
+
+
+static const GTypeInfo g2_menu_info = {
+ sizeof (G2MenuClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) g2_menu_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (G2Menu),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) g2_menu_init
+};
+
+guint
+g2_menu_get_type ()
+{
+ static GType g2_menu_type = 0;
+
+ if (g2_menu_type == 0) {
+ g2_menu_type = g_type_register_static (GTK_TYPE_DIALOG,
+ "G2Menu", &g2_menu_info, 0);
+ }
+ return g2_menu_type;
+}
+
+static void
+g2_menu_class_init (G2MenuClass * class)
+{
+//g_print("g2_menu_class_init\n");
+ parent_class = gtk_type_class (gtk_dialog_get_type ());
+
+ g2_menu_signals[0] =
+ g_signal_new ("start_menu",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MenuClass, g2_menu_start_menu),
+ NULL, NULL, gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ g2_menu_signals[1] =
+ g_signal_new ("add_menu",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MenuClass, g2_menu_add_menu),
+ NULL, NULL,
+ g2_marshal_VOID__INT_POINTER_CHAR_CHAR_INT_STRING_BOOLEAN,
+ G_TYPE_NONE, 7, G_TYPE_INT, G_TYPE_POINTER, G_TYPE_CHAR,
+ G_TYPE_CHAR, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN);
+ g2_menu_signals[2] =
+ g_signal_new ("end_menu",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MenuClass, g2_menu_end_menu),
+ NULL, NULL, gtk_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+ g2_menu_signals[3] =
+ g_signal_new ("select_menu",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (G2MenuClass, g2_menu_select_menu),
+ NULL, NULL,
+ g2_marshal_INT__INT_POINTER, G_TYPE_INT, 2, G_TYPE_INT, G_TYPE_POINTER);
+ g2_menu_signals[4] =
+ g_signal_new ("putstr",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MenuClass, g2_menu_putstr),
+ NULL, NULL,
+ g2_marshal_VOID__INT_STRING, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
+ g2_menu_signals[5] =
+ g_signal_new ("display",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MenuClass, g2_menu_display),
+ NULL, NULL, gtk_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+}
+
+static void
+g2_menu_init (G2Menu * menu)
+{
+}
+
+static gboolean
+can_select_row (GtkTreeSelection * selection, GtkTreeModel * model,
+ GtkTreePath * path, gboolean path_currently_selected, gpointer data)
+{
+ gint identifier;
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
+ G2_MENU_IDENTIFIER, &identifier, -1);
+ if (identifier == 0) {
+ return FALSE;
+ } else {
+ return TRUE;
+ }
+}
+
+static void
+g2_menu_setup_text_message (G2Menu * win)
+{
+ GtkWidget *okButton;
+
+// PangoFontDescription *fontDescription;
+
+ win->messageBuffer = gtk_text_buffer_new (NULL);
+ gtk_window_set_title (GTK_WINDOW (win), _("Gtk2Hack - Message"));
+ gtk_window_set_default_size (GTK_WINDOW (win), G2_MENU_MSG_WIDTH,
+ G2_MENU_MSG_HEIGHT);
+ win->menuWin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_set_border_width (GTK_CONTAINER (win->menuWin), 5);
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (win->menuWin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ win->view = gtk_text_view_new ();
+
+// fontDescription = pango_font_description_from_string("Sans");
+// gtk_widget_modify_font(win->view, fontDescription);
+// pango_font_description_free (fontDescription);
+
+ gtk_text_view_set_buffer (GTK_TEXT_VIEW (win->view), win->messageBuffer);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (win->view), FALSE);
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (win->view), FALSE);
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (win->view), GTK_WRAP_WORD);
+ gtk_container_add (GTK_CONTAINER (win->menuWin), win->view);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (win)->vbox), win->menuWin, TRUE,
+ TRUE, 0);
+ gtk_widget_show_all (GTK_WIDGET (GTK_DIALOG (win)->vbox));
+ okButton = gtk_dialog_add_button (GTK_DIALOG (win), GTK_STOCK_OK,
+ GTK_RESPONSE_OK);
+ gtk_window_set_default (GTK_WINDOW (win), okButton);
+}
+
+
+
+static void
+view_popup_menu_onDoAction (GtkWidget * menuitem, gpointer userdata)
+{
+ ActionCategory *ac = (ActionCategory *) userdata;
+ G2Menu *win = G2_MENU (ac->dialog);
+
+ skip_question = TRUE;
+
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (ac->command));
+ if (ac->command == 'T') {
+ if (win->wearing > 1)
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (ac->item));
+ } else {
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (ac->item));
+ }
+
+ gtk_widget_hide (GTK_WIDGET (win));
+}
+
+static void
+setup_popup_menu (GtkWidget * treeview, gpointer userdata)
+{
+ GtkWidget *menuitem;
+ gint i;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ guint category = INV_NOTHING;
+ gchar *itemAccel;
+
+ g_print ("create_popup_menu\n");
+
+ G2Menu *win = G2_MENU (userdata);
+ GtkWidget *context_menu = win->context_menu;
+
+ /* Destroy previous options */
+ gtk_container_foreach (GTK_CONTAINER (context_menu),
+ (GtkCallback) gtk_widget_destroy, NULL);
+
+ /* Crate a new set of options */
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ gtk_tree_model_get (model, &iter, G2_MENU_CATEGORY, &category,
+ G2_MENU_ACCEL, &itemAccel, -1);
+ }
+// g_print ("category=%x itemAccel=%c\n", category, itemAccel);
+ if (!category)
+ return;
+
+ for (i = 0; i < G_N_ELEMENTS (popup_actions); i++) {
+ if (popup_actions[i].category & category) {
+// g_print("popup_actions[i].name=%s popup_actions[i].command=%c win->wearing= %d\n",popup_actions[i].name, popup_actions[i].command, win->wearing);
+ if ((popup_actions[i].command == 'T') && (win->wearing == 0))
+ continue;
+
+ popup_actions[i].item = itemAccel[0];
+ popup_actions[i].dialog = userdata;
+ menuitem = gtk_menu_item_new_with_label (popup_actions[i].name);
+ g_signal_connect (menuitem, "activate",
+ (GCallback) view_popup_menu_onDoAction,
+ (gpointer) & popup_actions[i]);
+ gtk_menu_shell_append (GTK_MENU_SHELL (context_menu), menuitem);
+ }
+ }
+
+ gtk_widget_show_all (context_menu);
+}
+
+static gboolean
+g2_menu_view_key_press (GtkWidget * view, GdkEventKey * event, gpointer dialog)
+{
+ GtkTreeIter iter;
+ gboolean valid;
+ gboolean isValidAccel;
+ gchar *itemAccel;
+ GtkTreeSelection *selection;
+
+ // GtkTreePath *path;
+ G2Menu *menuDialog = G2_MENU (dialog);
+
+// g_print("g2_menu_view_key_press\n");
+ g_assert (menuDialog != NULL);
+
+ if (((int) dialog == WIN_INVEN) && (event->keyval == GDK_F4)) {
+
+// g_print ("Menu key pressed.\n");
+
+ /* Note: event can be NULL here when called from view_onPopupMenu;
+ * gdk_event_get_time() accepts a NULL argument */
+ setup_popup_menu (view, dialog);
+ gtk_menu_popup (GTK_MENU (menuDialog->context_menu), NULL, NULL, NULL, NULL,
+ 0, gdk_event_get_time ((GdkEvent *) event));
+
+ return TRUE; /* we handled this */
+ }
+
+ if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) {
+ gtk_window_activate_default (GTK_WINDOW (dialog));
+ return TRUE;
+ }
+ isValidAccel = (event->keyval >= 'A' && event->keyval <= 'Z') ||
+ (event->keyval >= 'a' && event->keyval <= 'z');
+ if (isValidAccel && !(event->state & GDK_CONTROL_MASK)) {
+ gchar *accelString = gdk_keyval_name (event->keyval);
+
+ valid =
+ gtk_tree_model_get_iter_first (GTK_TREE_MODEL (menuDialog->menuTree),
+ &iter);
+ while (valid) {
+ gtk_tree_model_get (GTK_TREE_MODEL (menuDialog->menuTree), &iter,
+ G2_MENU_ACCEL, &itemAccel, -1);
+ if (!strncmp (accelString, itemAccel, 1)) {
+ selection =
+ gtk_tree_view_get_selection (GTK_TREE_VIEW (menuDialog->view));
+ if (gtk_tree_selection_iter_is_selected (selection, &iter)) {
+ gtk_tree_selection_unselect_iter (selection, &iter);
+ } else {
+ gtk_tree_selection_select_iter (selection, &iter);
+ }
+ return TRUE;
+ }
+ valid =
+ gtk_tree_model_iter_next (GTK_TREE_MODEL (menuDialog->menuTree),
+ &iter);
+ }
+ }
+ return FALSE;
+}
+
+static gboolean
+view_onButtonPressed (GtkWidget * treeview, GdkEventButton * event,
+ gpointer userdata)
+{
+ G2Menu *win = G2_MENU (userdata);
+
+// g_print ("view_onButtonPressed\n");
+
+ /* optional: select row if no row is selected or only
+ * one other row is selected (will only do something
+ * if you set a tree selection mode as described later
+ * in the tutorial) */
+ if (1) {
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+
+ /* Note: gtk_tree_selection_count_selected_rows() does not
+ * exist in gtk+-2.0, only in gtk+ >= v2.2 ! */
+ if (gtk_tree_selection_count_selected_rows (selection) <= 1) {
+ GtkTreePath *path;
+
+ /* Get tree path for row that was clicked */
+ if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview),
+ (gint) event->x, (gint) event->y, &path, NULL, NULL, NULL)) {
+ gtk_tree_selection_unselect_all (selection);
+ gtk_tree_selection_select_path (selection, path);
+ gtk_tree_path_free (path);
+ }
+ }
+ }
+ /* end of optional bit */
+ setup_popup_menu (treeview, userdata);
+
+ /* single click with the right mouse button? */
+ if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
+// g_print ("Single right click on the tree view.\n");
+
+ /* Note: event can be NULL here when called from view_onPopupMenu;
+ * gdk_event_get_time() accepts a NULL argument */
+ gtk_menu_popup (GTK_MENU (win->context_menu), NULL, NULL, NULL, NULL,
+ (event != NULL) ? event->button : 0,
+ gdk_event_get_time ((GdkEvent *) event));
+
+ return TRUE; /* we handled this */
+ }
+
+ return FALSE; /* we did not handle this */
+}
+
+static void
+g2_menu_setup_menu (G2Menu * win)
+{
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+ gtk_window_set_default_size (GTK_WINDOW (win), G2_MENU_MENU_WIDTH,
+ G2_MENU_MENU_HEIGTH);
+ win->menuTree =
+ gtk_list_store_new (G2_MENU_COL_NUM, G_TYPE_STRING, G_TYPE_STRING,
+ GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT,
+ G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_UINT);
+ win->menuWin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_set_border_width (GTK_CONTAINER (win->menuWin), 5);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (win->menuWin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ win->view = gtk_tree_view_new ();
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (win->view), FALSE);
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (win->view), TRUE);
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "text", G2_MENU_ACCEL, "underline", G2_MENU_ATTRIBUTES, NULL);
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "pixbuf", G2_MENU_GLYPH, NULL);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "text", G2_MENU_STRING, "underline", G2_MENU_ATTRIBUTES, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (win->view), column);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (win->view));
+ gtk_tree_selection_set_select_function (selection, &can_select_row, NULL,
+ NULL);
+ g_signal_connect (G_OBJECT (win->view), "key-press-event",
+ G_CALLBACK (g2_menu_view_key_press), win);
+
+
+ if ((int) win == WIN_INVEN) {
+ g_signal_connect (G_OBJECT (win->view), "button_press_event",
+ G_CALLBACK (view_onButtonPressed), win);
+ }
+ // JEP
+ win->context_menu = gtk_menu_new ();
+ gtk_widget_tap_and_hold_setup (win->view, win->context_menu, NULL, 0);
+
+ gtk_widget_set_name (GTK_WIDGET (win), "menu dialog");
+ gtk_container_add (GTK_CONTAINER (win->menuWin), win->view);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (win)->vbox),
+ win->menuWin, TRUE, TRUE, 0);
+ gtk_dialog_add_buttons (GTK_DIALOG (win),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (win), GTK_RESPONSE_OK);
+ g_signal_connect (G_OBJECT (win), "delete-event", G_CALLBACK (gtk_true),
+ NULL);
+
+}
+
+static void
+g2_menu_start_menu (G2Menu * win, gpointer gp)
+{
+ if (!win->isSetUp) {
+ g2_menu_setup_menu (win);
+ win->isSetUp = TRUE;
+ }
+ gtk_list_store_clear (win->menuTree);
+ win->nextAccelerator = 'a';
+ win->currentCategory = INV_NOTHING;
+ win->wearing = 0;
+}
+
+static guint
+categoryParser (gchar * string)
+{
+ guint retval = INV_NOTHING;
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (inventory_categories); i++) {
+ if (strcmp (string, inventory_categories[i].name) == 0) {
+ retval = inventory_categories[i].category;
+ break;
+ }
+ }
+// g_printf("categoryParser: str=%s\n retval=%d", string, retval);
+ return retval;
+}
+
+/* XXX: preselection, attr and group_accel currently ignored */
+static void
+g2_menu_add_menu (G2Menu * win, gint glyph,
+ gpointer * identifier, gchar accelerator,
+ gchar group_accel, gint attr, gchar * str, gboolean presel, gpointer gp)
+{
+ gchar accelString[2];
+ GdkPixbuf *tile = NULL;
+ PangoUnderline underline = PANGO_UNDERLINE_NONE;
+
+ g_assert (IS_G2_MENU (win));
+
+// g_printf("g2_menu_add_menu: glyph=%d, identifier=%d, accel=%c, group_accel=%c,"
+// " attr=%d, string=%s, presel=%d\n", glyph, *identifier, accelerator,
+// group_accel, attr, str, presel);
+
+ if (glyph != NO_GLYPH) {
+ tile = g2_get_tile_scaled (glyph, 20);
+// tile = g2_get_tile(glyph);
+ }
+ if (attr != ATR_NONE) {
+ underline = PANGO_UNDERLINE_SINGLE;
+ }
+ gtk_list_store_append (win->menuTree, &iter);
+
+ if (((int) *identifier) == 0) {
+ accelString[0] = '\0';
+ presel = FALSE;
+ if ((int) win == WIN_INVEN)
+ win->currentCategory = categoryParser (str);
+ } else if (accelerator != '\0') {
+ accelString[0] = accelerator;
+ accelString[1] = '\0';
+ if (strstr (str, "being worn") != NULL)
+ win->wearing++;
+ } else {
+
+#ifdef HILDON
+ accelString[0] = '\0'; /* inventing accelerators is irrelevant for hildon */
+#else
+ accelString[0] = win->nextAccelerator;
+ accelString[1] = '\0';
+ /* XXX: what should we do if we have more than 52 items? */
+ if (win->nextAccelerator >= 'a' && win->nextAccelerator < 'z') {
+ win->nextAccelerator++;
+ } else if (win->nextAccelerator == 'z') {
+ win->nextAccelerator = 'A';
+ } else if (win->nextAccelerator < 'Z') {
+ win->nextAccelerator++;
+ } else {
+ win->nextAccelerator = ' ';
+ }
+#endif
+
+ }
+ gtk_list_store_set (win->menuTree, &iter,
+ G2_MENU_ACCEL, &accelString,
+ G2_MENU_GLYPH, tile,
+ G2_MENU_STRING, str,
+ G2_MENU_ATTRIBUTES, underline,
+ G2_MENU_IDENTIFIER, *identifier,
+ G2_MENU_PRESEL, presel, G2_MENU_CATEGORY, win->currentCategory, -1);
+}
+
+static void
+g2_menu_end_menu (G2Menu * win, const gchar * prompt, gpointer gp)
+{
+ g_assert (IS_G2_MENU (win));
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (win->view),
+ GTK_TREE_MODEL (win->menuTree));
+ gtk_container_check_resize (GTK_CONTAINER (win));
+}
+
+static gint
+g2_menu_select_menu (G2Menu * win, gint how, gpointer selected, gpointer gp)
+{
+ gint response;
+ GList *selectedRows;
+ GtkTreeIter iter;
+ gint selectedCount;
+ gint identifier;
+ MENU_ITEM_P *items;
+ gint currentItem = 0;
+ GtkTreeSelection *selection;
+
+ g_assert (IS_G2_MENU (win));
+ g_print ("g2_menu_select_menu\n");
+ if ((int) win == WIN_INVEN) {
+ gtk_window_set_title (GTK_WINDOW (win), _("Inventory"));
+ }
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (win->view));
+ gtk_widget_show_all (GTK_WIDGET (win));
+ if (how == PICK_NONE) {
+// g_print("Pick none\n");
+ if ((int) win == WIN_INVEN)
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ else
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+
+ /* if (flags.perm_invent && win == WIN_INVEN) {
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(win), GTK_RESPONSE_OK, FALSE);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(win), GTK_RESPONSE_CANCEL, FALSE);
+ } else { */
+ gtk_dialog_run (GTK_DIALOG (win));
+ gtk_widget_hide (GTK_WIDGET (win));
+ /* } */
+ return 0;
+
+ } else {
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (win), GTK_RESPONSE_OK, TRUE);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (win),
+ GTK_RESPONSE_CANCEL, TRUE);
+ if (how == PICK_ONE) {
+// g_print ("Pick one\n");
+ gtk_window_set_title (GTK_WINDOW (win), _("Pick one"));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ } else {
+// g_print ("Pick any\n");
+ gtk_window_set_title (GTK_WINDOW (win), _("Pick any"));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+ }
+ response = gtk_dialog_run (GTK_DIALOG (win));
+ /* XXX perhaps refactor into handleDialogResponse function */
+/* if (flags.perm_invent && win == WIN_INVEN) {
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(win), GTK_RESPONSE_OK, FALSE);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(win), GTK_RESPONSE_CANCEL, FALSE);
+ } else { */
+ gtk_widget_hide (GTK_WIDGET (win));
+/* } */
+ if (response == GTK_RESPONSE_CANCEL
+ || response == GTK_RESPONSE_DELETE_EVENT) {
+ return -1;
+ } else if (response == GTK_RESPONSE_OK) {
+ /*g_print("Response accept\n"); */
+ selectedRows =
+ gtk_tree_selection_get_selected_rows (GTK_TREE_SELECTION
+ (selection), NULL);
+ selectedCount = gtk_tree_selection_count_selected_rows (selection);
+ if (selectedCount == 0) {
+ return 0;
+ }
+ items = (MENU_ITEM_P *) malloc (selectedCount * sizeof (MENU_ITEM_P));
+ while (selectedRows) {
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (win->menuTree), &iter,
+ (GtkTreePath *) selectedRows->data);
+ gtk_tree_model_get (GTK_TREE_MODEL (win->menuTree), &iter,
+ G2_MENU_IDENTIFIER, &identifier, -1);
+ items[currentItem].item = (anything) identifier;
+ items[currentItem].count = -1;
+ currentItem++;
+ selectedRows = selectedRows->next;
+ }
+ *(MENU_ITEM_P **) selected = items;
+
+ return currentItem;
+ }
+ }
+
+ /* should not be reached */
+ return 0;
+}
+
+
+static void
+g2_menu_putstr (G2Menu * win, int attr, const char *text, gpointer gp)
+{
+ if (!win->isSetUp) {
+ g2_menu_setup_text_message (win);
+ win->isSetUp = TRUE;
+ }
+ gtk_text_buffer_insert_at_cursor (GTK_TEXT_BUFFER (win->messageBuffer),
+ text, strlen (text));
+ gtk_text_buffer_insert_at_cursor (GTK_TEXT_BUFFER (win->messageBuffer),
+ "\n", 1);
+}
+
+static void
+g2_menu_display (GtkWidget * win, gboolean block, gpointer gp)
+{
+ gint result;
+
+ /* XXX perhaps we need to be always modal because else the window will
+ * get destroyed to soon by nh
+ */
+ gtk_window_set_modal (GTK_WINDOW (G2_MENU (win)), TRUE);
+ result = gtk_dialog_run (GTK_DIALOG (G2_MENU (win)));
+}
+
+GtkWidget *
+g2_menu_new ()
+{
+ G2Menu *g2Menu;
+
+ g2Menu = G2_MENU (g_object_new (TYPE_G2_MENU, NULL));
+ g_signal_connect (G_OBJECT (g2Menu), "start_menu",
+ G_CALLBACK (g2_menu_start_menu), NULL);
+ g_signal_connect (G_OBJECT (g2Menu), "add_menu",
+ G_CALLBACK (g2_menu_add_menu), NULL);
+ g_signal_connect (G_OBJECT (g2Menu), "end_menu",
+ G_CALLBACK (g2_menu_end_menu), NULL);
+ g_signal_connect (G_OBJECT (g2Menu), "select_menu",
+ G_CALLBACK (g2_menu_select_menu), NULL);
+ g_signal_connect (G_OBJECT (g2Menu), "putstr",
+ G_CALLBACK (g2_menu_putstr), NULL);
+ g_signal_connect (G_OBJECT (g2Menu), "display",
+ G_CALLBACK (g2_menu_display), NULL);
+ return GTK_WIDGET (g2Menu);
+}
diff --git a/patches/gtk2/g2menu.h b/patches/gtk2/g2menu.h
new file mode 100644
index 0000000..4cc1350
--- /dev/null
+++ b/patches/gtk2/g2menu.h
@@ -0,0 +1,51 @@
+/* the menu window as a GObject
+ *
+ * we derive from <gtk_dialog> to build our own menu window widget with our own signals which
+ * g2bind will emit on calls from the nethack engine
+ *
+ * $Id: g2menu.h,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+#ifndef G2_MENU_DIALOG_H
+#define G2_MENU_DIALOG_H
+
+#include <gtk/gtk.h>
+
+#define TYPE_G2_MENU (g2_menu_get_type())
+#define G2_MENU(obj) GTK_CHECK_CAST(obj, g2_menu_get_type(), G2Menu)
+#define G2_MENU_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, g2_menu_get_type(), G2MenuClass)
+#define IS_G2_MENU(obj) GTK_CHECK_TYPE(obj, g2_menu_get_type())
+
+typedef struct
+{
+ GtkDialog menuDialog;
+
+ GtkWidget *menuWin;
+ GtkWidget *view;
+ GtkTextBuffer *messageBuffer;
+ GtkListStore *menuTree;
+ gboolean isSetUp;
+ gchar nextAccelerator;
+ guint currentCategory;
+ guint wearing;
+ GtkWidget *context_menu;
+} G2Menu;
+
+typedef struct
+{
+ GtkDialogClass parent_class;
+
+ void (*g2_menu_start_menu) (G2Menu * g2Menu);
+ void (*g2_menu_add_menu) (G2Menu * g2Menu);
+ void (*g2_menu_end_menu) (G2Menu * g2Menu);
+ gint (*g2_menu_select_menu) (G2Menu * g2Menu);
+ void (*g2_menu_putstr) (G2Menu * g2Menu);
+ void (*g2_menu_display) (G2Menu * g2Menu);
+ void (*g2menu) (G2Menu * g2Menu);
+} G2MenuClass;
+
+guint g2_menu_get_type (void);
+GtkWidget *g2_menu_new (void);
+
+#endif /* G2_MENU_DIALOG_H */
diff --git a/patches/gtk2/g2mesg.c b/patches/gtk2/g2mesg.c
new file mode 100644
index 0000000..9433eba
--- /dev/null
+++ b/patches/gtk2/g2mesg.c
@@ -0,0 +1,189 @@
+/* the message window
+ *
+ * $Id: g2mesg.c,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+#include <string.h>
+
+#include "config.h"
+
+#include "g2mesg.h"
+#include "g2marsh.h"
+
+#define SCROLL_BACK_LINES 200
+#define G2_MESSAGE_WIDTH 70
+#define G2_MESSAGE_HEIGTH 60
+
+static GtkVBoxClass *parent_class;
+static gint g2_message_signals[4];
+
+static void g2_message_class_init (G2MessageClass * class);
+static void g2_message_init (G2Message * message);
+
+
+static const GTypeInfo g2_message_info = {
+ sizeof (G2MessageClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) g2_message_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (G2Message),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) g2_message_init
+};
+
+guint
+g2_message_get_type ()
+{
+ static GType g2_message_type = 0;
+
+ if (g2_message_type == 0) {
+ g2_message_type = g_type_register_static (GTK_TYPE_VBOX,
+ "G2Message", &g2_message_info, 0);
+ }
+ return g2_message_type;
+}
+
+static void
+g2_message_class_init (G2MessageClass * class)
+{
+ parent_class = gtk_type_class (gtk_vbox_get_type ());
+
+/* g2_message_signals[0] =
+ g_signal_new("curs",
+ G_OBJECT_CLASS_TYPE(class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET(G2StatusClass, g2_status_curs),
+ NULL, NULL,
+ gtk_marshal_VOID__INT_INT, G_TYPE_NONE, 2, G_TYPE_INT,
+ G_TYPE_INT);*/
+ g2_message_signals[0] =
+ g_signal_new ("putstr",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MessageClass, g2_message_putstr),
+ NULL, NULL,
+ g2_marshal_VOID__INT_STRING, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
+ g2_message_signals[1] =
+ g_signal_new ("clear",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MessageClass, g2_message_clear),
+ NULL, NULL, gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ g2_message_signals[2] =
+ g_signal_new ("display",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MessageClass, g2_message_display),
+ NULL, NULL, gtk_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+ g2_message_signals[3] =
+ g_signal_new ("show_ext_command",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2MessageClass,
+ g2_message_show_ext_command), NULL, NULL,
+ gtk_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+
+}
+
+/* XXX: attr currently ignored */
+static void
+g2_message_putstr (GtkWidget * win, int attr, gchar * text, gpointer gp)
+{
+ int lineCount;
+ GtkTextIter start;
+ GtkTextIter deletionEnd;
+ GtkTextIter end;
+ G2Message *g2Message = G2_MESSAGE (win);
+
+ gtk_text_buffer_get_end_iter (g2Message->messageBuffer, &end);
+ gtk_text_buffer_place_cursor (g2Message->messageBuffer, &end);
+ gtk_text_buffer_insert_at_cursor (g2Message->messageBuffer, text,
+ strlen (text));
+ gtk_text_buffer_insert_at_cursor (g2Message->messageBuffer, "\n", 1);
+ lineCount = gtk_text_buffer_get_line_count (g2Message->messageBuffer);
+ if (lineCount > SCROLL_BACK_LINES) {
+ gtk_text_buffer_get_start_iter (g2Message->messageBuffer, &start);
+ gtk_text_buffer_get_iter_at_line (g2Message->messageBuffer,
+ &deletionEnd, lineCount - SCROLL_BACK_LINES);
+ gtk_text_buffer_delete (g2Message->messageBuffer, &start, &deletionEnd);
+ }
+ gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (g2Message->messageView),
+ gtk_text_buffer_get_insert (g2Message->messageBuffer));
+}
+
+static void
+g2_message_clear (GtkWidget * win, gpointer gp)
+{
+ /* we do nothing since we have a nice buffer */
+}
+
+static void
+g2_message_display (GtkWidget * win, gboolean block, gpointer gp)
+{
+ /*g_print("Message display handler, block=%d\n", block); */
+ gtk_widget_show_all (win);
+}
+
+static void
+g2_message_show_ext_command (GtkWidget * win, gchar * command, gpointer gp)
+{
+ GtkTextIter start;
+ GtkTextIter end;
+ gchar commandString[12];
+
+ g_strlcpy (commandString, "# ", 12);
+ g_strlcat (commandString, command, 12);
+ gtk_text_buffer_get_end_iter (G2_MESSAGE (win)->messageBuffer, &end);
+ start = end;
+ gtk_text_iter_set_line_offset (&start, 0);
+ gtk_text_buffer_delete (G2_MESSAGE (win)->messageBuffer, &start, &end);
+ gtk_text_buffer_insert_at_cursor (G2_MESSAGE (win)->messageBuffer,
+ commandString, strlen (commandString));
+}
+
+static void
+g2_message_init (G2Message * message)
+{
+ gtk_widget_set_name (GTK_WIDGET (message), "message window");
+
+ message->messageWin = gtk_scrolled_window_new (NULL, NULL);
+ message->messageView = gtk_text_view_new ();
+ message->messageBuffer =
+ gtk_text_view_get_buffer (GTK_TEXT_VIEW (message->messageView));
+ /* XXX: cursor is visible for debugging purposes only */
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (message->messageView), TRUE);
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (message->messageView), FALSE);
+ gtk_text_view_set_left_margin (GTK_TEXT_VIEW (message->messageView), 5);
+ g_object_set (G_OBJECT (message->messageView), "can-focus", FALSE, NULL);
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (message->messageView),
+ GTK_WRAP_WORD);
+ gtk_widget_set_size_request (message->messageWin, G2_MESSAGE_WIDTH,
+ G2_MESSAGE_HEIGTH);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (message->messageWin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_container_add (GTK_CONTAINER (message->messageWin), message->messageView);
+ gtk_box_pack_start (GTK_BOX (message), message->messageWin, TRUE, TRUE, 0);
+ gtk_widget_show (GTK_WIDGET (message));
+}
+
+
+GtkWidget *
+g2_message_new ()
+{
+ G2Message *g2Message;
+
+ g2Message = G2_MESSAGE (g_object_new (TYPE_G2_MESSAGE, NULL));
+ g_signal_connect (G_OBJECT (g2Message), "putstr",
+ G_CALLBACK (g2_message_putstr), NULL);
+ g_signal_connect (G_OBJECT (g2Message), "clear",
+ G_CALLBACK (g2_message_clear), NULL);
+ g_signal_connect (G_OBJECT (g2Message), "display",
+ G_CALLBACK (g2_message_display), NULL);
+ g_signal_connect (G_OBJECT (g2Message), "show_ext_command",
+ G_CALLBACK (g2_message_show_ext_command), NULL);
+
+ return GTK_WIDGET (g2Message);
+}
diff --git a/patches/gtk2/g2mesg.h b/patches/gtk2/g2mesg.h
new file mode 100644
index 0000000..7d5bad8
--- /dev/null
+++ b/patches/gtk2/g2mesg.h
@@ -0,0 +1,39 @@
+/* the message window
+ *
+ * $Id: g2mesg.h,v 1.1.1.1 2004/06/23 02:01:44 miq Exp $
+ *
+ */
+
+#ifndef G2_MESSAGE_WINDOW_H
+#define G2_MESSAGE_WINDOW_H
+
+#include <gtk/gtk.h>
+
+#define TYPE_G2_MESSAGE (g2_message_get_type())
+#define G2_MESSAGE(obj) GTK_CHECK_CAST(obj, g2_message_get_type(), G2Message)
+#define G2_MESSAGE_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, g2_message_get_type(), G2MessageClass)
+#define IS_G2_MESSAGE(obj) GTK_CHECK_TYPE(obj, g2_message_get_type())
+
+typedef struct
+{
+ GtkVBox messageContainer;
+
+ GtkWidget *messageWin;
+ GtkWidget *messageView;
+ GtkTextBuffer *messageBuffer;
+} G2Message;
+
+typedef struct
+{
+ GtkVBoxClass parent_class;
+
+ void (*g2_message_putstr) (G2Message * g2Message);
+ void (*g2_message_clear) (G2Message * g2Message);
+ void (*g2_message_display) (G2Message * g2Message);
+ void (*g2_message_show_ext_command) (G2Message * g2Message);
+ void (*g2message) (G2Message * g2Message);
+} G2MessageClass;
+
+GtkWidget *g2_message_new ();
+
+#endif /* G2_MESSAGE_WINDOW_H */
diff --git a/patches/gtk2/g2minipad.c b/patches/gtk2/g2minipad.c
new file mode 100644
index 0000000..1b1167a
--- /dev/null
+++ b/patches/gtk2/g2minipad.c
@@ -0,0 +1,515 @@
+/* minipad widget
+ *
+ * g2minipad.c
+ *
+ * The mini game pad control.
+ */
+
+#include <math.h>
+#include <stdio.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtksignal.h>
+
+#include "g2minipad.h"
+#include "g2main.h"
+#include "hack.h"
+
+#define MINIPAD_DEFAULT_WIDTH 100
+#define MINIPAD_DEFAULT_HEIGHT 60
+#define BUTTON_TIMER_DELAY 200
+
+typedef struct
+{
+ const gchar key;
+ const gchar num_key;
+} DirectionButton;
+
+static DirectionButton direction_buttons[] = {
+ {'.', '.'},
+ {'k', '8'},
+ {'u', '9'},
+ {'l', '6'},
+ {'n', '3'},
+ {'j', '2'},
+ {'b', '1'},
+ {'h', '4'},
+ {'y', '7'},
+ {'<', '<'},
+ {'>', '>'},
+};
+
+/* Forward declarations */
+
+static void gtk_minipad_class_init (GtkMinipadClass * klass);
+static void gtk_minipad_init (GtkMinipad * minipad);
+static void gtk_minipad_destroy (GtkObject * object);
+static void gtk_minipad_realize (GtkWidget * widget);
+static void gtk_minipad_size_request (GtkWidget * widget,
+ GtkRequisition * requisition);
+static void gtk_minipad_size_allocate (GtkWidget * widget,
+ GtkAllocation * allocation);
+static gboolean gtk_minipad_expose (GtkWidget * widget, GdkEventExpose * event);
+static gboolean gtk_minipad_button_press (GtkWidget * widget,
+ GdkEventButton * event);
+static gboolean gtk_minipad_button_release (GtkWidget * widget,
+ GdkEventButton * event);
+static gboolean gtk_minipad_motion_notify (GtkWidget * widget,
+ GdkEventMotion * event);
+
+static void gtk_minipad_draw_blue_hotzone (GtkWidget * widget, gint hp_index);
+
+/* Local data */
+
+static GtkWidgetClass *parent_class = NULL;
+
+static GdkPixbuf *pad_image_unclicked = NULL;
+static GdkPixbuf *pad_image_clicked = NULL;
+static gint width_pad_image;
+static gint height_pad_image;
+
+GType
+gtk_minipad_get_type ()
+{
+ static GType minipad_type = 0;
+
+ if (!minipad_type) {
+ static const GTypeInfo minipad_info = {
+ sizeof (GtkMinipadClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) gtk_minipad_class_init,
+ NULL,
+ NULL,
+ sizeof (GtkMinipad),
+ 0,
+ (GInstanceInitFunc) gtk_minipad_init,
+ };
+
+ minipad_type =
+ g_type_register_static (GTK_TYPE_WIDGET, "GtkMinipad", &minipad_info,
+ 0);
+ }
+
+ return minipad_type;
+}
+
+static void
+gtk_minipad_class_init (GtkMinipadClass * class)
+{
+ GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+
+ object_class = (GtkObjectClass *) class;
+ widget_class = (GtkWidgetClass *) class;
+
+ parent_class = gtk_type_class (gtk_widget_get_type ());
+
+ object_class->destroy = gtk_minipad_destroy;
+
+ widget_class->realize = gtk_minipad_realize;
+ widget_class->expose_event = gtk_minipad_expose;
+ widget_class->size_request = gtk_minipad_size_request;
+ widget_class->size_allocate = gtk_minipad_size_allocate;
+ widget_class->button_press_event = gtk_minipad_button_press;
+ widget_class->button_release_event = gtk_minipad_button_release;
+ widget_class->motion_notify_event = gtk_minipad_motion_notify;
+}
+
+static void
+load_pad_image ()
+{
+ GError *err = NULL;
+
+ if (pad_image_unclicked == NULL) {
+ pad_image_unclicked = gdk_pixbuf_new_from_file ("pad_unclicked.png", &err);
+ }
+ if (!pad_image_unclicked) {
+ fprintf (stderr, "Error loading pad_image_unclicked:%s\n", err->message);
+ }
+
+ if (pad_image_clicked == NULL) {
+ pad_image_clicked = gdk_pixbuf_new_from_file ("pad_clicked.png", &err);
+ }
+ if (!pad_image_clicked) {
+ fprintf (stderr, "Error loading pad_image_clicked:%s\n", err->message);
+ }
+
+ width_pad_image = gdk_pixbuf_get_width (pad_image_unclicked);
+ height_pad_image = gdk_pixbuf_get_height (pad_image_unclicked);
+}
+
+static void
+gtk_minipad_init (GtkMinipad * minipad)
+{
+ minipad->button = 0;
+ minipad->timer = 0;
+ minipad->current_dir = -1;
+ load_pad_image ();
+}
+
+GtkWidget *
+gtk_minipad_new (void)
+{
+ GtkMinipad *minipad;
+
+ minipad = g_object_new (gtk_minipad_get_type (), NULL);
+
+ return GTK_WIDGET (minipad);
+}
+
+static void
+gtk_minipad_destroy (GtkObject * object)
+{
+ GtkMinipad *minipad;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GTK_IS_MINIPAD (object));
+
+ minipad = GTK_MINIPAD (object);
+// gdk_pixbuf_unref(pad_image_unclicked);
+// gdk_pixbuf_unref(pad_image_clicked);
+ if (GTK_OBJECT_CLASS (parent_class)->destroy)
+ (*GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+}
+
+static void
+gtk_minipad_realize (GtkWidget * widget)
+{
+ GtkMinipad *minipad;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_MINIPAD (widget));
+
+ GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ minipad = GTK_MINIPAD (widget);
+
+ attributes.x = widget->allocation.x;
+ attributes.y = widget->allocation.y;
+ attributes.width = widget->allocation.width;
+ attributes.height = widget->allocation.height;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.event_mask = gtk_widget_get_events (widget) |
+ GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK;
+ attributes.visual = gtk_widget_get_visual (widget);
+ attributes.colormap = gtk_widget_get_colormap (widget);
+
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+ widget->window =
+ gdk_window_new (widget->parent->window, &attributes, attributes_mask);
+
+ widget->style = gtk_style_attach (widget->style, widget->window);
+
+ gdk_window_set_user_data (widget->window, widget);
+
+ gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+}
+
+static void
+gtk_minipad_size_request (GtkWidget * widget, GtkRequisition * requisition)
+{
+ requisition->width = width_pad_image; // MINIPAD_DEFAULT_WIDTH;
+ requisition->height = height_pad_image; // MINIPAD_DEFAULT_HEIGHT;
+}
+
+static void
+gtk_minipad_size_allocate (GtkWidget * widget, GtkAllocation * allocation)
+{
+ GtkMinipad *minipad;
+ gint radius;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_MINIPAD (widget));
+ g_return_if_fail (allocation != NULL);
+
+ widget->allocation = *allocation;
+ minipad = GTK_MINIPAD (widget);
+
+ if (GTK_WIDGET_REALIZED (widget)) {
+ gdk_window_move_resize (widget->window,
+ allocation->x, allocation->y, allocation->width, allocation->height);
+ }
+
+ radius = MIN (allocation->width, allocation->height) * 0.3;
+
+ /* Self direction */
+ minipad->hotzone[0].x = 98;
+ minipad->hotzone[0].y = 41;
+ minipad->hotzone[0].width = 32;
+ minipad->hotzone[0].height = 32;
+ /* North direction */
+ minipad->hotzone[1].x = 101;
+ minipad->hotzone[1].y = 14;
+ minipad->hotzone[1].width = 26;
+ minipad->hotzone[1].height = 24;
+ /* North-east direction */
+ minipad->hotzone[2].x = 127;
+ minipad->hotzone[2].y = 20;
+ minipad->hotzone[2].width = 25;
+ minipad->hotzone[2].height = 25;
+ /* East direction */
+ minipad->hotzone[3].x = 136;
+ minipad->hotzone[3].y = 45;
+ minipad->hotzone[3].width = 25;
+ minipad->hotzone[3].height = 25;
+ /* South-east direction */
+ minipad->hotzone[4].x = 126;
+ minipad->hotzone[4].y = 69;
+ minipad->hotzone[4].width = 24;
+ minipad->hotzone[4].height = 24;
+ /* South direction */
+ minipad->hotzone[5].x = 102;
+ minipad->hotzone[5].y = 80;
+ minipad->hotzone[5].width = 25;
+ minipad->hotzone[5].height = 24;
+ /* South-west direction */
+ minipad->hotzone[6].x = 77;
+ minipad->hotzone[6].y = 70;
+ minipad->hotzone[6].width = 25;
+ minipad->hotzone[6].height = 24;
+ /* West direction */
+ minipad->hotzone[7].x = 69;
+ minipad->hotzone[7].y = 45;
+ minipad->hotzone[7].width = 25;
+ minipad->hotzone[7].height = 25;
+ /* North-west direction */
+ minipad->hotzone[8].x = 77;
+ minipad->hotzone[8].y = 20;
+ minipad->hotzone[8].width = 25;
+ minipad->hotzone[8].height = 24;
+ /* Up direction */
+ minipad->hotzone[9].x = 18;
+ minipad->hotzone[9].y = 20;
+ minipad->hotzone[9].width = 22;
+ minipad->hotzone[9].height = 32;
+ /* Down direction */
+ minipad->hotzone[10].x = 18;
+ minipad->hotzone[10].y = 60;
+ minipad->hotzone[10].width = 22;
+ minipad->hotzone[10].height = 32;
+}
+
+static gboolean
+gtk_minipad_expose (GtkWidget * widget, GdkEventExpose * event)
+{
+ GtkMinipad *minipad;
+ GdkGC *gc;
+ GdkColor black, white;
+
+ black.red = 0;
+ black.green = 0;
+ black.blue = 0; // black
+ white.red = 65535;
+ white.green = 65535;
+ white.blue = 65535; // white
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_MINIPAD (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ if (event->count > 0)
+ return FALSE;
+
+ minipad = GTK_MINIPAD (widget);
+
+ gc = gdk_gc_new (widget->window);
+
+ gdk_draw_pixbuf (widget->window, gc, pad_image_unclicked, 0, 0,
+ 0, 0, width_pad_image, height_pad_image, GDK_RGB_DITHER_NONE, 0, 0);
+
+ g_object_unref (gc);
+ return FALSE;
+}
+
+static void
+gtk_minipad_draw_blue_hotzone (GtkWidget * widget, gint hz_index)
+{
+ GtkMinipad *minipad;
+ GdkGC *gc;
+ GdkColor blue;
+
+ blue.red = 0;
+ blue.green = 0;
+ blue.blue = 65535; // blue
+
+ minipad = GTK_MINIPAD (widget);
+
+ gc = gdk_gc_new (widget->window);
+
+ gdk_draw_pixbuf (widget->window, gc, pad_image_clicked,
+ minipad->hotzone[hz_index].x, minipad->hotzone[hz_index].y,
+ minipad->hotzone[hz_index].x, minipad->hotzone[hz_index].y,
+ minipad->hotzone[hz_index].width,
+ minipad->hotzone[hz_index].height, GDK_RGB_DITHER_NONE, 0, 0);
+#if 0
+ gdk_gc_set_rgb_fg_color (gc, &blue);
+ gdk_gc_set_rgb_bg_color (gc, &blue);
+
+ gdk_draw_rectangle (widget->window, gc, TRUE,
+ minipad->hotzone[hz_index].x,
+ minipad->hotzone[hz_index].y,
+ minipad->hotzone[hz_index].width, minipad->hotzone[hz_index].height);
+#endif
+
+ g_object_unref (gc);
+}
+
+static gboolean
+hotzone_touched (GdkPoint pointer, GdkRectangle hotzone)
+{
+ gint dist_x = pointer.x - hotzone.x;
+ gint dist_y = pointer.y - hotzone.y;
+
+ if (dist_x < 0)
+ return FALSE;
+ if (dist_y < 0)
+ return FALSE;
+ if (dist_x > hotzone.width)
+ return FALSE;
+ if (dist_y > hotzone.height)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+sendNHkey (gint db)
+{
+ gint key;
+
+ if (iflags.num_pad)
+ key = direction_buttons[db].num_key;
+ else
+ key = direction_buttons[db].key;
+
+ keyBuffer = g_slist_append (keyBuffer, GINT_TO_POINTER (key));
+}
+
+static gint
+gtk_minipad_button_timer (GtkMinipad * minipad)
+{
+ gboolean retval = FALSE;
+
+ GDK_THREADS_ENTER ();
+
+ if (minipad->timer) {
+ //if (minipad->current_dir != -1) {
+ if (gtk_grab_get_current () == GTK_WIDGET (minipad)) {
+ sendNHkey (minipad->current_dir);
+ minipad->timer = gtk_timeout_add
+ (BUTTON_TIMER_DELAY,
+ (GtkFunction) gtk_minipad_button_timer, (gpointer) minipad);
+ } else {
+ // grab was released in between or stolen (e.g. by modal dialog)
+ // if stolen, we probably missed the button release: do it now
+ if (minipad->current_dir != -1) {
+ gtk_grab_remove (GTK_WIDGET (minipad));
+ minipad->button = 0;
+ minipad->current_dir = -1;
+ gtk_widget_queue_draw (GTK_WIDGET (minipad));
+ }
+ }
+ }
+ GDK_THREADS_LEAVE ();
+
+ return retval;
+}
+
+static gboolean
+gtk_minipad_button_press (GtkWidget * widget, GdkEventButton * event)
+{
+ GtkMinipad *minipad;
+ GdkPoint pointer;
+ gint i;
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_MINIPAD (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ minipad = GTK_MINIPAD (widget);
+
+ pointer.x = event->x;
+ pointer.y = event->y;
+
+ for (i = 0; i < 11; i++) {
+ if (hotzone_touched (pointer, minipad->hotzone[i])) {
+ if (!minipad->button) {
+ gtk_grab_add (widget);
+ minipad->button = event->button;
+ gtk_minipad_draw_blue_hotzone (widget, i);
+ }
+ minipad->current_dir = i;
+ sendNHkey (minipad->current_dir);
+ minipad->timer = gtk_timeout_add
+ (BUTTON_TIMER_DELAY,
+ (GtkFunction) gtk_minipad_button_timer, (gpointer) minipad);
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean
+gtk_minipad_button_release (GtkWidget * widget, GdkEventButton * event)
+{
+ GtkMinipad *minipad;
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_MINIPAD (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ minipad = GTK_MINIPAD (widget);
+
+ if (minipad->button == event->button) {
+ gtk_grab_remove (widget);
+ minipad->button = 0;
+ minipad->current_dir = -1;
+ gtk_widget_queue_draw (GTK_WIDGET (minipad));
+ }
+
+ return FALSE;
+}
+
+static gboolean
+gtk_minipad_motion_notify (GtkWidget * widget, GdkEventMotion * event)
+{
+ GtkMinipad *minipad;
+ GdkModifierType mods;
+ gint x, y, mask;
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_MINIPAD (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ minipad = GTK_MINIPAD (widget);
+
+ if (minipad->button != 0) {
+ x = event->x;
+ y = event->y;
+
+ if (event->is_hint || (event->window != widget->window))
+ gdk_window_get_pointer (widget->window, &x, &y, &mods);
+
+ switch (minipad->button) {
+ case 1:
+ mask = GDK_BUTTON1_MASK;
+ break;
+ case 2:
+ mask = GDK_BUTTON2_MASK;
+ break;
+ case 3:
+ mask = GDK_BUTTON3_MASK;
+ break;
+ default:
+ mask = 0;
+ break;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/patches/gtk2/g2minipad.h b/patches/gtk2/g2minipad.h
new file mode 100644
index 0000000..367ec52
--- /dev/null
+++ b/patches/gtk2/g2minipad.h
@@ -0,0 +1,45 @@
+/* minipad widget
+ *
+ * g2minipad.h
+ *
+ * The mini game pad control.
+ */
+
+#ifndef __GTK_MINIPAD_H__
+#define __GTK_MINIPAD_H__
+
+#include <gdk/gdk.h>
+#include <gtk/gtkwidget.h>
+
+#define GTK_MINIPAD(obj) GTK_CHECK_CAST (obj, gtk_minipad_get_type (), GtkMinipad)
+#define GTK_MINIPAD_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_minipad_get_type (), GtkMinipadClass)
+#define GTK_IS_MINIPAD(obj) GTK_CHECK_TYPE (obj, gtk_minipad_get_type ())
+
+
+ typedef struct _GtkMinipad GtkMinipad;
+ typedef struct _GtkMinipadClass GtkMinipadClass;
+
+ struct _GtkMinipad
+ {
+ GtkWidget widget;
+
+ /* Button currently pressed or 0 if none */
+ guint8 button;
+
+ /* Hotpoints */
+ GdkRectangle hotzone[11];
+ gint current_dir;
+
+ guint32 timer;
+
+ };
+
+ struct _GtkMinipadClass
+ {
+ GtkWidgetClass parent_class;
+ };
+
+ GtkWidget *gtk_minipad_new (void);
+ GtkType gtk_minipad_get_type (void);
+
+#endif /* __GTK_MINIPAD_H__ */
diff --git a/patches/gtk2/g2player.c b/patches/gtk2/g2player.c
new file mode 100644
index 0000000..c3f48a8
--- /dev/null
+++ b/patches/gtk2/g2player.c
@@ -0,0 +1,643 @@
+/* the player selection dialog
+ *
+ * $Id: g2player.c,v 1.4 2005/04/26 23:30:07 miq Exp $
+ *
+ */
+
+#include <gdk/gdkkeysyms.h>
+
+#include "config.h"
+
+#include "g2player.h"
+#include "g2main.h"
+#include "g2map.h"
+#include "g2i18n.h"
+
+enum
+{
+ G2_ID_COL,
+ G2_PIXBUF_COL,
+ G2_DESCRIPTION_COL,
+ G2_VALID_COL,
+ G2_TEXT_FOREGROUND,
+ G2_COL_COUNT
+};
+
+enum
+{
+ G2_MALE,
+ G2_FEMALE,
+ G2_SEX_NONE = -1
+};
+
+enum
+{
+ G2_LAWFUL,
+ G2_NEUTRAL,
+ G2_CHAOTIC,
+ G2_ALIGN_NONE = -1
+};
+
+static gint roleTilesMale[] = {
+ 328, /* Archeologist */
+ 329, /* Barbarian */
+ 330, /* Caveman */
+ 332, /* Healer */
+ 333, /* Knight */
+ 334, /* Monk */
+ 335, /* Priest */
+ 338, /* Ranger */
+ 337, /* Rogue */
+ 339, /* Samurai */
+ 340, /* Tourist */
+ 341, /* Valkyrie */
+ 342, /* Wizard */
+};
+
+static gint roleTilesFemale[] = {
+ 328, /* Archeologist */
+ 329, /* Barbarian */
+ 331, /* Cavewoman */
+ 332, /* Healer */
+ 333, /* Knight */
+ 334, /* Monk */
+ 336, /* Priestess */
+ 338, /* Ranger */
+ 337, /* Rogue */
+ 339, /* Samurai */
+ 340, /* Tourist */
+ 341, /* Valkyrie */
+ 342, /* Wizard */
+};
+
+static gint raceTiles[] = {
+ 256, /* human */
+ 260, /* elf */
+ 43, /* dwarf */
+ 162, /* gnome */
+ 71, /* orc */
+};
+
+static GtkWidget *dialog;
+static GtkWidget *roleView;
+static GtkListStore *roleStore;
+static GtkWidget *raceView;
+static GtkListStore *raceStore;
+static GtkWidget *noSexRadio;
+static GtkWidget *maleRadio;
+static GtkWidget *femaleRadio;
+static GtkWidget *noAlignRadio;
+static GtkWidget *lawfulRadio;
+static GtkWidget *neutralRadio;
+static GtkWidget *chaoticRadio;
+
+static GdkColor *fgInsensitive;
+static GdkColor *fgNormal;
+
+static gboolean
+can_select_row (GtkTreeSelection * selection, GtkTreeModel * model,
+ GtkTreePath * path, gboolean path_currently_selected, gpointer data)
+{
+ GtkTreeIter iter;
+ gboolean valid;
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, G2_VALID_COL, &valid, -1);
+ return valid;
+}
+
+static gboolean
+g2_player_key_pess (GtkWidget * widget, GdkEventKey * event, gpointer dialog)
+{
+ if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) {
+ gtk_window_activate_default (GTK_WINDOW (dialog));
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+static gboolean
+is_selection_complete ()
+{
+ return flags.initrole > -1 && flags.initrace > -1
+ && ok_role (flags.initrole, flags.initrace, flags.initgend,
+ flags.initalign)
+ && ok_race (flags.initrole, flags.initrace, flags.initgend,
+ flags.initalign);
+
+// && flags.initgend > -1
+// && flags.initalign > -1
+
+
+// && ok_align(flags.initrole, flags.initrace, flags.initgend, flags.initalign)
+// && ok_gend(flags.initrole, flags.initrace, flags.initgend, flags.initalign);
+}
+
+static void
+check_selection_complete ()
+{
+//g_print("0.check_selection_complete\n");
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
+ GTK_RESPONSE_ACCEPT, is_selection_complete ());
+}
+
+static void
+compute_valid_roles ()
+{
+//g_print("0.compute_valid_roles\n");
+ GtkTreeIter iter;
+ gint i;
+ gboolean valid;
+
+ valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (roleStore), &iter);
+ while (valid) {
+ gtk_tree_model_get (GTK_TREE_MODEL (roleStore), &iter, G2_ID_COL, &i, -1);
+ if (ok_role (i, flags.initrace, flags.initgend, flags.initalign)) {
+ /* XXX: we *know* that currently flags.initgend == 1 means female */
+ if (flags.initgend == 1 && roles[i].name.f != NULL) {
+ gtk_list_store_set (roleStore, &iter,
+ G2_DESCRIPTION_COL, roles[i].name.f,
+ G2_VALID_COL, TRUE, G2_TEXT_FOREGROUND, fgNormal, -1);
+ } else {
+ gtk_list_store_set (roleStore, &iter,
+ G2_DESCRIPTION_COL, roles[i].name.m,
+ G2_VALID_COL, TRUE, G2_TEXT_FOREGROUND, fgNormal, -1);
+ }
+ } else {
+ if (flags.initgend == 1 && roles[i].name.f != NULL) {
+ gtk_list_store_set (roleStore, &iter,
+ G2_DESCRIPTION_COL, roles[i].name.f,
+ G2_VALID_COL, FALSE, G2_TEXT_FOREGROUND, fgInsensitive, -1);
+ } else {
+ gtk_list_store_set (roleStore, &iter,
+ G2_DESCRIPTION_COL, roles[i].name.m,
+ G2_VALID_COL, FALSE, G2_TEXT_FOREGROUND, fgInsensitive, -1);
+ }
+ }
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (roleStore), &iter);
+ }
+}
+
+
+static void
+compute_valid_races ()
+{
+//g_print("0.compute_valid_races\n");
+ GtkTreeIter iter;
+ gint i;
+ gboolean valid;
+
+ valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (raceStore), &iter);
+ while (valid) {
+ gtk_tree_model_get (GTK_TREE_MODEL (raceStore), &iter, G2_ID_COL, &i, -1);
+ if (ok_race (flags.initrole, i, flags.initgend, flags.initalign)) {
+ gtk_list_store_set (raceStore, &iter, G2_VALID_COL, TRUE,
+ G2_TEXT_FOREGROUND, fgNormal, -1);
+ } else {
+ gtk_list_store_set (raceStore, &iter, G2_VALID_COL, FALSE,
+ G2_TEXT_FOREGROUND, fgInsensitive, -1);
+ }
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (raceStore), &iter);
+ }
+}
+
+static void
+compute_valid_genders ()
+{
+//g_print("0.compute_valid_genders\n");
+ gtk_widget_set_sensitive (maleRadio,
+ ok_gend (flags.initrole, flags.initrace, G2_MALE, flags.initalign));
+ gtk_widget_set_sensitive (femaleRadio,
+ ok_gend (flags.initrole, flags.initrace, G2_FEMALE, flags.initalign));
+}
+
+static void
+compute_valid_alignments ()
+{
+//g_print("0.compute_valid_align\n");
+ gtk_widget_set_sensitive (lawfulRadio,
+ ok_align (flags.initrole, flags.initrace, flags.initgend, G2_LAWFUL));
+ gtk_widget_set_sensitive (neutralRadio,
+ ok_align (flags.initrole, flags.initrace, flags.initgend, G2_NEUTRAL));
+ gtk_widget_set_sensitive (chaoticRadio,
+ ok_align (flags.initrole, flags.initrace, flags.initgend, G2_CHAOTIC));
+}
+
+static void
+role_changed (GtkTreeSelection * selection, gpointer data)
+{
+//g_print("0.role_changed\n");
+ GtkTreeIter iter;
+
+ if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+ gtk_tree_model_get (GTK_TREE_MODEL (roleStore), &iter, G2_ID_COL,
+ &flags.initrole, -1);
+ } else {
+ flags.initrole = -1;
+ }
+ compute_valid_races ();
+ compute_valid_genders ();
+ compute_valid_alignments ();
+ check_selection_complete ();
+}
+
+static void
+race_changed (GtkTreeSelection * selection, gpointer data)
+{
+//g_print("0.race_changed\n");
+ GtkTreeIter iter;
+
+ if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+ gtk_tree_model_get (GTK_TREE_MODEL (raceStore), &iter, G2_ID_COL,
+ &flags.initrace, -1);
+ } else {
+ flags.initrace = -1;
+ }
+ compute_valid_roles ();
+ compute_valid_genders ();
+ compute_valid_alignments ();
+ check_selection_complete ();
+}
+
+static void
+gender_changed (GtkWidget * dialog, gpointer data)
+{
+//g_print("0.gender_changed\n");
+ GtkTreeIter iter;
+ gint i = 0;
+ gboolean valid;
+
+ flags.initgend = GPOINTER_TO_INT (data);
+ valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (roleStore), &iter);
+ while (valid) {
+ if (GPOINTER_TO_INT (data) == G2_FEMALE) {
+ gtk_list_store_set (roleStore, &iter,
+ G2_PIXBUF_COL, g2_get_tile (roleTilesFemale[i]), -1);
+ } else {
+ gtk_list_store_set (roleStore, &iter,
+ G2_PIXBUF_COL, g2_get_tile (roleTilesMale[i]), -1);
+ }
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (roleStore), &iter);
+ i++;
+ }
+ compute_valid_roles ();
+ compute_valid_races ();
+ check_selection_complete ();
+}
+
+static void
+alignment_changed (GtkWidget * dialog, gpointer data)
+{
+//g_print("0.aling_changed\n");
+ flags.initalign = GPOINTER_TO_INT (data);
+ compute_valid_roles ();
+ compute_valid_races ();
+ check_selection_complete ();
+}
+
+
+static void
+init_choices ()
+{
+//g_print("0.init_choices\n");
+ GtkTreeIter iter;
+ gint i;
+ gint id;
+ gboolean valid;
+
+ for (i = 0; roles[i].name.m; i++) {
+ gtk_list_store_append (roleStore, &iter);
+ gtk_list_store_set (roleStore, &iter, G2_ID_COL, i,
+ G2_PIXBUF_COL, g2_get_tile (roleTilesMale[i]),
+ G2_DESCRIPTION_COL, roles[i].name.m, G2_VALID_COL, TRUE, -1);
+ }
+
+ for (i = 0; races[i].noun; i++) {
+ gtk_list_store_append (raceStore, &iter);
+ gtk_list_store_set (raceStore, &iter, G2_ID_COL, i,
+ G2_PIXBUF_COL, g2_get_tile (raceTiles[i]),
+ G2_DESCRIPTION_COL, races[i].noun, G2_VALID_COL, TRUE, -1);
+ }
+
+ if (flags.initrole > -1) {
+ valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (roleStore), &iter);
+ while (valid) {
+ gtk_tree_model_get (GTK_TREE_MODEL (roleStore), &iter, G2_ID_COL,
+ &id, -1);
+ if (flags.initrole == id) {
+ gtk_tree_selection_select_iter (gtk_tree_view_get_selection
+ (GTK_TREE_VIEW (roleView)), &iter);
+ }
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (roleStore), &iter);
+ }
+ } else {
+ flags.initrole = -1;
+ }
+
+ if (flags.initrace > -1 &&
+ ok_race (flags.initrole, flags.initrace, G2_SEX_NONE, G2_ALIGN_NONE)) {
+ valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (raceStore), &iter);
+ while (valid) {
+ gtk_tree_model_get (GTK_TREE_MODEL (raceStore), &iter, G2_ID_COL,
+ &id, -1);
+ if (flags.initrace == id) {
+ gtk_tree_selection_select_iter (gtk_tree_view_get_selection
+ (GTK_TREE_VIEW (raceView)), &iter);
+ }
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (raceStore), &iter);
+ }
+ } else {
+ flags.initrace = -1;
+ }
+
+ if (flags.initgend > -1 &&
+ ok_gend (flags.initrole, flags.initrace, flags.initgend, G2_ALIGN_NONE)) {
+ switch (flags.initgend) {
+ case G2_MALE:
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (maleRadio), TRUE);
+ break;
+ case G2_FEMALE:
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (femaleRadio), TRUE);
+ break;
+ }
+ } else {
+ flags.initgend = G2_SEX_NONE;
+ }
+ if (flags.initalign > -1 &&
+ ok_align (flags.initrole, flags.initrace, flags.initgend,
+ flags.initalign)) {
+ switch (flags.initalign) {
+ case G2_LAWFUL:
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lawfulRadio), TRUE);
+ break;
+ case G2_NEUTRAL:
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (neutralRadio), TRUE);
+ break;
+ case G2_CHAOTIC:
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chaoticRadio), TRUE);
+ break;
+ }
+ } else {
+ flags.initalign = G2_ALIGN_NONE;
+ }
+ check_selection_complete ();
+}
+
+
+#ifndef HILDON
+static void
+name_changed_event (GtkWidget * entry, gpointer datas)
+{
+ g_strlcpy (plname, gtk_entry_get_text (GTK_ENTRY (entry)), PL_NSIZ);
+}
+
+static GtkWidget *
+create_name_entry ()
+{
+ GtkWidget *label;
+ GtkWidget *entry;
+ GtkWidget *hbox;
+
+//g_print("0.create_name_entry\n");
+ hbox = gtk_hbox_new (TRUE, 0);
+ gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
+
+ label = gtk_label_new (_("Name:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ entry = gtk_entry_new ();
+ gtk_entry_set_max_length (GTK_ENTRY (entry), PL_NSIZ - 1);
+ gtk_entry_set_text (GTK_ENTRY (entry), plname);
+ gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
+ g_signal_connect (G_OBJECT (entry), "state_changed",
+ G_CALLBACK (name_changed_event), entry);
+
+
+ return hbox;
+}
+#endif
+
+static GtkWidget *
+create_list_view (const gchar * title, GtkWidget ** view,
+ GtkListStore ** model, GCallback cb)
+{
+ GtkWidget *vbox;
+ GtkWidget *sw;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+#ifndef HILDON
+ GtkWidget *frame = gtk_frame_new (title);
+#endif
+
+ vbox = gtk_vbox_new (FALSE, 0);
+
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+
+ *model = gtk_list_store_new (G2_COL_COUNT, G_TYPE_INT, GDK_TYPE_PIXBUF,
+ G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_COLOR);
+ *view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (*model));
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (*view), TRUE);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (*view));
+ gtk_tree_selection_set_select_function (selection, &can_select_row, NULL,
+ NULL);
+ g_signal_connect (G_OBJECT (selection), "changed", cb, NULL);
+ column = gtk_tree_view_column_new ();
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "pixbuf", G2_PIXBUF_COL, NULL);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (*view), FALSE);
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "text", G2_DESCRIPTION_COL, "foreground-gdk", G2_TEXT_FOREGROUND, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (*view), column);
+ g_signal_connect (G_OBJECT (*view), "key-press-event",
+ G_CALLBACK (g2_player_key_pess), dialog);
+
+ gtk_container_add (GTK_CONTAINER (sw), *view);
+
+#ifndef HILDON
+ gtk_container_add (GTK_CONTAINER (frame), sw);
+ return frame;
+#else
+ return sw;
+#endif
+}
+
+static GtkWidget *
+create_radio_row (gchar * label, GtkWidget ** radio, GSList * group,
+ GCallback cb, gint value)
+{
+ GtkWidget *spacer;
+ GtkWidget *row;
+
+ row = gtk_hbox_new (FALSE, 0);
+ spacer = gtk_label_new (" ");
+ *radio = gtk_radio_button_new_with_label (group, label);
+ g_signal_connect (G_OBJECT (*radio), "toggled", cb, GINT_TO_POINTER (value));
+ g_signal_connect (G_OBJECT (*radio), "key-press-event",
+ G_CALLBACK (g2_player_key_pess), dialog);
+ gtk_box_pack_start (GTK_BOX (row), spacer, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (row), *radio, FALSE, FALSE, 0);
+
+ return row;
+}
+
+static GtkWidget *
+create_sex_radios ()
+{
+ GtkWidget *vbox;
+ GtkWidget *row;
+ GSList *group;
+
+#ifndef HILDON
+ GtkWidget *frame = gtk_frame_new (_("Choose sex:"));
+#endif
+ vbox = gtk_vbox_new (TRUE, 0);
+
+ row = create_radio_row (_("Random"), &noSexRadio, NULL,
+ G_CALLBACK (gender_changed), G2_SEX_NONE);
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (noSexRadio));
+ gtk_box_pack_start (GTK_BOX (vbox), row, FALSE, FALSE, 0);
+ row = create_radio_row (_("Male"), &maleRadio, group,
+ G_CALLBACK (gender_changed), G2_MALE);
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (noSexRadio));
+ gtk_box_pack_start (GTK_BOX (vbox), row, FALSE, FALSE, 0);
+ row = create_radio_row (_("Female"), &femaleRadio, group,
+ G_CALLBACK (gender_changed), G2_FEMALE);
+ gtk_box_pack_start (GTK_BOX (vbox), row, FALSE, FALSE, 0);
+
+#ifndef HILDON
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ return frame;
+#else
+ return vbox;
+#endif
+}
+
+static GtkWidget *
+create_align_radios ()
+{
+ GtkWidget *vbox;
+ GtkWidget *row;
+ GSList *group;
+
+#ifndef HILDON
+ GtkWidget *frame = gtk_frame_new (_("Choose alignment:"));
+#endif
+ vbox = gtk_vbox_new (TRUE, 0);
+
+ row = create_radio_row (_("Random"), &noAlignRadio, NULL,
+ G_CALLBACK (alignment_changed), G2_ALIGN_NONE);
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (noAlignRadio));
+ gtk_box_pack_start (GTK_BOX (vbox), row, FALSE, FALSE, 0);
+ row = create_radio_row (_("Lawful"), &lawfulRadio, group,
+ G_CALLBACK (alignment_changed), G2_LAWFUL);
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (noAlignRadio));
+ gtk_box_pack_start (GTK_BOX (vbox), row, FALSE, FALSE, 0);
+ row = create_radio_row (_("Neutral"), &neutralRadio, group,
+ G_CALLBACK (alignment_changed), G2_NEUTRAL);
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (noAlignRadio));
+ gtk_box_pack_start (GTK_BOX (vbox), row, FALSE, FALSE, 0);
+ row = create_radio_row (_("Chaotic"), &chaoticRadio, group,
+ G_CALLBACK (alignment_changed), G2_CHAOTIC);
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (noAlignRadio));
+ gtk_box_pack_start (GTK_BOX (vbox), row, FALSE, FALSE, 0);
+
+
+#ifndef HILDON
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ return frame;
+#else
+ return vbox;
+#endif
+
+}
+
+void
+g2_do_player_selection (GtkWidget * parent)
+{
+ GtkWidget *hbox;
+ GtkWidget *mainVbox;
+ GtkWidget *vbox;
+ GtkWidget *list;
+ GtkWidget *radios;
+ gint response;
+
+// g_print("Player selection\n");
+ rigid_role_checks ();
+
+ if (is_selection_complete () || flags.randomall) {
+ return;
+ }
+ dialog = gtk_dialog_new_with_buttons (_("Character creation"),
+ GTK_WINDOW (g2_get_main_window ()),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_NO_SEPARATOR, _("Random"),
+ GTK_RESPONSE_CLOSE, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+ gtk_widget_set_name (dialog, "player dialog");
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 7);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT,
+ FALSE);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+ mainVbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (mainVbox), 5);
+
+
+#ifndef HILDON
+ /* text entry in HILDON uses a insane amount of space */
+ hbox = create_name_entry ();
+ gtk_box_pack_start (GTK_BOX (mainVbox), hbox, TRUE, TRUE, 0);
+#endif
+
+ hbox = gtk_hbox_new (TRUE, 12);
+ list =
+ create_list_view (_("Choose role:"), &roleView, &roleStore,
+ G_CALLBACK (role_changed));
+ gtk_box_pack_start (GTK_BOX (hbox), list, TRUE, TRUE, 0);
+
+ list =
+ create_list_view (_("Choose race:"), &raceView, &raceStore,
+ G_CALLBACK (race_changed));
+ gtk_box_pack_start (GTK_BOX (hbox), list, TRUE, TRUE, 0);
+
+ vbox = gtk_vbox_new (FALSE, 12);
+ radios = create_sex_radios ();
+ gtk_box_pack_start (GTK_BOX (vbox), radios, FALSE, FALSE, 0);
+ radios = create_align_radios ();
+ gtk_box_pack_start (GTK_BOX (vbox), radios, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
+
+ fgInsensitive = &roleView->style->text[GTK_STATE_INSENSITIVE];
+ fgNormal = &roleView->style->text[GTK_STATE_NORMAL];
+ init_choices ();
+
+ gtk_box_pack_start (GTK_BOX (mainVbox), hbox, TRUE, TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), mainVbox, TRUE,
+ TRUE, 0);
+ /* XXX: we do this to prevent the roleView getting focus and thus triggering a selection */
+ gtk_widget_set_sensitive (roleView, FALSE);
+ gtk_widget_show_all (dialog);
+ gtk_widget_set_sensitive (roleView, TRUE);
+
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ if (response != GTK_RESPONSE_ACCEPT) {
+ flags.initrole = -1;
+ flags.initrace = -1;
+ flags.initgend = -1;
+ flags.initalign = -1;
+ }
+//g_print("role %i\n",flags.initrole);
+//g_print("race %i\n",flags.initrace);
+//g_print("gend %i\n",flags.initgend);
+//g_print("align %i\n",flags.initalign);
+ gtk_widget_destroy (dialog);
+}
diff --git a/patches/gtk2/g2player.h b/patches/gtk2/g2player.h
new file mode 100644
index 0000000..bec9f60
--- /dev/null
+++ b/patches/gtk2/g2player.h
@@ -0,0 +1,15 @@
+/* the player selection dialog
+ *
+ * $Id: g2player.h,v 1.1.1.1 2004/06/23 02:01:45 miq Exp $
+ *
+ */
+
+#ifndef G2_PLAYER_SELECTION_DIALOG_H
+#define G2_PLAYER_SELECTION_DIALOG_H
+
+#include <gtk/gtk.h>
+#include "hack.h"
+
+void g2_do_player_selection (GtkWidget * parent);
+
+#endif /* G2_PLAYER_SELECTION_DIALOG_H */
diff --git a/patches/gtk2/g2status.c b/patches/gtk2/g2status.c
new file mode 100644
index 0000000..4fad024
--- /dev/null
+++ b/patches/gtk2/g2status.c
@@ -0,0 +1,1092 @@
+/* the status window
+ *
+ * $Id: g2status.c,v 1.7 2004/11/07 12:05:27 miq Exp $
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+
+#include "g2status.h"
+#include "g2marsh.h"
+#include "g2xpms.h"
+#include "g2i18n.h"
+#include "hack.h"
+
+#define G2_ICON_SIZE 22 /* 22 */
+#define G2_COND_ICON_SIZE 26 /* 26 */
+#define G2_MIN_HP_LABEL_WIDTH 25 /* we need this to avoid resizing of status-window */
+#define G2_HL_TIME 3
+
+#define AL_LAW _("Lawful")
+#define AL_NEU _("Neutral")
+#define AL_CHA _("Chaotic")
+
+#define G2_HALLU _("Hallucinating")
+#define G2_FP _("Food Poisoned")
+#define G2_ILL _("Ill")
+#define G2_BLINDED _("Blind")
+#define G2_STUNNED _("Stunned")
+#define G2_CONFUSED _("Confused")
+
+ /*extern const gchar *hu_stat[]; *//* defined in eat.c */
+/* copy of the array in eat.c for i18n! */
+static const gchar *hu_stat[] = {
+ N_("Satiated"),
+ "",
+ N_("Hungry"),
+ N_("Weak"),
+ N_("Fainting"),
+ N_("Fainted"),
+ N_("Starved")
+};
+
+static const gchar *enc_stat[] = { /* defined in botl.c */
+ "",
+ N_("Burdened"),
+ N_("Stressed"),
+ N_("Strained"),
+ N_("Overtaxed"),
+ N_("Overloaded")
+};
+
+enum
+{
+ SATIATED,
+ NOT_HUNGRY,
+ HUNGRY,
+ WEAK,
+ FAINTING,
+ FAINTED,
+ STARVED
+};
+
+enum
+{
+ G2_NOT_ENC = 0,
+ G2_SLT_ENC,
+ G2_MOD_ENC,
+ G2_HVY_ENC,
+ G2_EXT_ENC,
+ G2_OVR_ENC,
+ G2_ENC_COUNT
+};
+
+typedef struct
+{
+ gchar *name;
+ gint alignment;
+ gint currHp;
+ gint maxHp;
+ gint currPower;
+ gint maxPower;
+ glong hlOld[HL_COUNT];
+ guint conds;
+} PlayerStatus;
+
+static PlayerStatus player;
+static GtkVBoxClass *parent_class;
+static gint g2_status_signals[5];
+static PangoAttrList *increaseAttrs;
+static PangoAttrList *decreaseAttrs;
+static PangoAttrList *normalAttrs;
+static PangoAttrList *boldAttrList;
+static PangoAttrList *smallAttrs;
+static GdkColor hpColor = { 0, 40 * 255, 133 * 255, 49 * 255 };
+static GdkColor pwColor = { 0, 40 * 255, 51 * 255, 133 * 255 };
+
+static GdkPixbuf *lawfulPic;
+static GdkPixbuf *neutralPic;
+static GdkPixbuf *chaoticPic;
+static GdkPixbuf *satiatedPic;
+static GdkPixbuf *halluPic;
+static GdkPixbuf *foodPoisonedPic;
+static GdkPixbuf *illPic;
+static GdkPixbuf *blindedPic;
+static GdkPixbuf *stunnedPic;
+static GdkPixbuf *confusedPic;
+static GdkPixbuf *encPics[G2_ENC_COUNT];
+static GdkPixbuf *hungryPic;
+static GdkPixbuf *nothingPic;
+
+
+static void g2_status_class_init (G2StatusClass * class);
+static void g2_status_init (G2Status * status);
+
+
+static void
+change_label_highlight (G2Status * status, HighlightLabel label, gint newValue)
+{
+ if (newValue > player.hlOld[label]) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[label]), increaseAttrs);
+ status->hlFadeList[label] = G2_HL_TIME;
+ } else if (newValue < player.hlOld[label]) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[label]), decreaseAttrs);
+ status->hlFadeList[label] = G2_HL_TIME;
+ }
+ player.hlOld[label] = newValue;
+}
+
+#ifndef HILDON
+static GtkWidget *
+get_image_from_xpm (const gchar ** xpm)
+{
+ GdkPixbuf *icon;
+ GtkWidget *image;
+
+ icon = gdk_pixbuf_new_from_xpm_data (xpm);
+ image =
+ gtk_image_new_from_pixbuf (gdk_pixbuf_scale_simple
+ (icon, G2_ICON_SIZE, G2_ICON_SIZE, GDK_INTERP_BILINEAR));
+
+ return image;
+}
+#endif
+
+static void
+set_initial_player_values ()
+{
+ player.currHp = 1;
+ player.maxHp = 1;
+ player.currPower = 1;
+ player.maxPower = 1;
+ player.hlOld[HL_DGN] = 1;
+ player.hlOld[HL_AC] = 10;
+ player.hlOld[HL_STR] = 10;
+ player.hlOld[HL_DEX] = 10;
+ player.hlOld[HL_CON] = 10;
+ player.hlOld[HL_INT] = 10;
+ player.hlOld[HL_WIS] = 10;
+ player.hlOld[HL_CHA] = 10;
+}
+
+static void
+create_pixbufs ()
+{
+ /* XXX refactor */
+ lawfulPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (lawful_xpm),
+ G2_COND_ICON_SIZE, G2_ICON_SIZE, GDK_INTERP_BILINEAR);
+ neutralPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (neutral_xpm),
+ G2_COND_ICON_SIZE, G2_ICON_SIZE, GDK_INTERP_BILINEAR);
+ chaoticPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (chaotic_xpm),
+ G2_COND_ICON_SIZE, G2_ICON_SIZE, GDK_INTERP_BILINEAR);
+ nothingPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (nothing_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ satiatedPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (satiated_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ halluPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (hallu_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ foodPoisonedPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (sick_fp_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ illPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (sick_il_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ blindedPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (blind_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ stunnedPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (stunned_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ confusedPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (confused_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ encPics[G2_NOT_ENC] = nothingPic;
+ encPics[G2_SLT_ENC] =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (slt_enc_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ encPics[G2_MOD_ENC] =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (mod_enc_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ encPics[G2_HVY_ENC] =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (hvy_enc_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ encPics[G2_EXT_ENC] =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (ext_enc_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ encPics[G2_OVR_ENC] =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (ovr_enc_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+ hungryPic =
+ gdk_pixbuf_scale_simple (gdk_pixbuf_new_from_xpm_data (hungry_xpm),
+ G2_COND_ICON_SIZE, G2_COND_ICON_SIZE, GDK_INTERP_BILINEAR);
+}
+
+static GtkWidget *
+create_condition (G2Status * status, Condition cond, GdkPixbuf * pic,
+ const gchar * tooltip)
+{
+ GtkWidget *eventBox;
+ GtkWidget *image;
+
+ image = gtk_image_new_from_pixbuf (pic);
+ eventBox = gtk_event_box_new ();
+ gtk_container_add (GTK_CONTAINER (eventBox), image);
+ status->condTips[cond] = gtk_tooltips_new ();
+ gtk_tooltips_set_tip (status->condTips[cond], eventBox, tooltip, NULL);
+ return eventBox;
+}
+
+static GtkWidget *
+create_image_hl_label (G2Status * status, HighlightLabel label,
+ const gchar ** xpm, const gchar * text, const gchar * tip)
+{
+ GtkWidget *imageLabel;
+
+#ifndef HILDON /* for Hildon we don't want the icons (waste space) and no tooltips */
+ GtkWidget *image;
+ GtkWidget *eventBox;
+#endif
+
+ imageLabel = gtk_hbox_new (FALSE, 0);
+#ifndef HILDON
+ eventBox = gtk_event_box_new ();
+ image = get_image_from_xpm (xpm);
+#endif
+ status->hl[label] = gtk_label_new (text);
+ gtk_misc_set_alignment (GTK_MISC (status->hl[label]), 0.0f, 0.5f);
+#ifndef HILDON
+ gtk_box_pack_start (GTK_BOX (imageLabel), image, FALSE, FALSE, 0);
+#endif
+ gtk_box_pack_start (GTK_BOX (imageLabel), status->hl[label], TRUE, TRUE, 0);
+#ifndef HILDON
+ gtk_container_add (GTK_CONTAINER (eventBox), imageLabel);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, tip, NULL);
+
+ return eventBox;
+#else
+ return imageLabel;
+#endif
+}
+
+gboolean
+draw_value_bar (GtkWidget * widget, GdkEventExpose * event, gpointer data)
+{
+ static GdkGC *gc = NULL;
+ G2Status *status = G2_STATUS (data);
+ gint left = 0;
+ gint top = 4;
+ gint totalWidth;
+ gint totalHeight;
+ gint barWidth;
+ gint barHeight;
+ gfloat percent = 0.0;
+
+//g_print("0.draw_value_bar\n");
+ if (!gc) {
+ gc = gdk_gc_new (widget->window);
+ }
+ gdk_gc_set_rgb_fg_color (gc, &widget->style->bg[0]);
+ gdk_draw_rectangle (widget->window, gc, TRUE, 0, 0,
+ widget->allocation.width, widget->allocation.height);
+ if (widget == status->hpBar) {
+ percent = player.currHp / (gfloat) player.maxHp;
+ gdk_gc_set_rgb_fg_color (gc, &hpColor);
+ } else if (widget == status->pwBar) {
+ gint max;
+
+ /* XXX we can have the rare case of maxPower == 0 */
+ if (player.maxPower == 0) {
+ max = 1;
+ } else {
+ max = player.maxPower;
+ }
+ percent = player.currPower / (gfloat) max;
+ gdk_gc_set_rgb_fg_color (gc, &pwColor);
+ }
+ /* when you die */
+ if (percent < 0) {
+ percent = 0;
+ }
+ totalWidth = widget->allocation.width - left - 5;
+ totalHeight = widget->allocation.height - (2 * top);
+ barHeight = totalHeight - 3;
+ barWidth = (totalWidth - 3) * percent;
+ /* clear the bar */
+ gdk_draw_rectangle (widget->window, gc, FALSE, left, top, totalWidth,
+ totalHeight);
+ gdk_draw_rectangle (widget->window, gc, TRUE, left + 2, top + 2, barWidth,
+ barHeight);
+//g_print("1.draw_value_bar\n");
+ return TRUE;
+}
+
+static void
+update_player_name (G2Status * status)
+{
+ gchar *name;
+
+//g_print("0.update_player_name\n");
+ if (u.mtimedone) {
+ name = g_strconcat (plname, " a ", mons[u.umonnum].mname, NULL);
+ } else {
+ name =
+ g_strconcat (plname, " the ",
+ rank_of (u.ulevel, pl_character[0], flags.female), NULL);
+ }
+ name[0] = g_ascii_toupper (name[0]);
+ gtk_label_set_text (GTK_LABEL (status->charName), name);
+ g_free (name);
+//g_print("1.update_player_name\n");
+}
+
+static void
+update_dungeon_name (G2Status * status)
+{
+ gchar *name;
+ gchar level[3];
+
+//g_print("0.update_dungeon_name\n");
+ g_snprintf (level, 3, "%d", depth (&u.uz));
+ /* TODO: reformat and mark for proper i18n */
+ name = g_strconcat ("Level ", level, NULL);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_DGNLV]), name);
+ g_free (name);
+
+ name = g_strconcat (dungeons[u.uz.dnum].dname, NULL);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_DGN]), name);
+ g_free (name);
+
+//g_print("1.update_dungeon_name\n");
+}
+
+static void
+update_alignment (G2Status * status)
+{
+ if (u.ualign.type == A_LAWFUL) {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (status->alignIcon), lawfulPic);
+ gtk_label_set_text (GTK_LABEL (status->alignment), AL_LAW);
+ } else if (u.ualign.type == A_NEUTRAL) {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (status->alignIcon), neutralPic);
+ gtk_label_set_text (GTK_LABEL (status->alignment), AL_NEU);
+ } else {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (status->alignIcon), chaoticPic);
+ gtk_label_set_text (GTK_LABEL (status->alignment), AL_CHA);
+ }
+ player.alignment = u.ualign.type;
+}
+
+static void
+update_gold (G2Status * status)
+{
+ glong newGold;
+ gchar goldString[20];
+
+#ifndef GOLDOBJ
+ newGold = u.ugold;
+#else
+ newGold = money_cnt (invent);
+#endif
+ g_snprintf (goldString, 20, _(" %ld"), newGold);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_GOLD]), goldString);
+ change_label_highlight (status, HL_GOLD, newGold);
+}
+
+static void
+update_hp_and_pw (G2Status * status)
+{
+ GdkRectangle invalidRectangle;
+ gchar buf[14];
+ gint newHp;
+ gint newHpMax;
+
+//g_print("0.update_hp_and_pw\n");
+ invalidRectangle.x = 0;
+ invalidRectangle.y = 0;
+ invalidRectangle.width = status->hpBar->allocation.width;
+ invalidRectangle.height = status->hpBar->allocation.height;
+ if (u.mtimedone > 0) {
+ newHp = u.mh;
+ newHpMax = u.mhmax;
+ } else {
+ newHp = u.uhp;
+ newHpMax = u.uhpmax;
+ }
+ /* think of refactoring */
+ g_snprintf (buf, 14, _("Hp: %d/%d"), newHp, newHpMax);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_HP]), buf);
+ if (player.currHp < newHp || player.maxHp < newHpMax) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[HL_HP]), increaseAttrs);
+ status->hlFadeList[HL_HP] = G2_HL_TIME;
+ } else if (player.currHp > newHp || player.maxHp > newHpMax) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[HL_HP]), decreaseAttrs);
+ status->hlFadeList[HL_HP] = G2_HL_TIME;
+ }
+ player.currHp = newHp;
+ player.maxHp = newHpMax;
+ gdk_window_invalidate_rect (status->hpBar->window, &invalidRectangle, FALSE);
+
+ g_snprintf (buf, 14, _("Pw: %d/%d"), u.uen, u.uenmax);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_PW]), buf);
+ if (player.currPower < u.uen || player.maxPower < u.uenmax) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[HL_PW]), increaseAttrs);
+ status->hlFadeList[HL_PW] = G2_HL_TIME;
+ } else if (player.currPower > u.uen || player.maxPower > u.uenmax) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[HL_PW]), decreaseAttrs);
+ status->hlFadeList[HL_PW] = G2_HL_TIME;
+ }
+ player.currPower = u.uen;
+ player.maxPower = u.uenmax;
+ gdk_window_invalidate_rect (status->pwBar->window, &invalidRectangle, FALSE);
+//g_print("1.update_hp_and_pw\n");
+}
+
+static void
+update_attributes (G2Status * status)
+{
+ gchar attrString[11];
+
+ if (ACURR (A_STR) > 118) {
+ g_snprintf (attrString, 11, _("Str: %d"), ACURR (A_STR) - 100);
+ } else if (ACURR (A_STR) == 118) {
+ g_snprintf (attrString, 11, _("Str: 18/**"));
+ } else if (ACURR (A_STR) > 18) {
+ g_snprintf (attrString, 11, _("Str: 18/%02d"), ACURR (A_STR) - 18);
+ } else {
+ g_snprintf (attrString, 11, _("Str: %d"), ACURR (A_STR));
+ }
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_STR]), attrString);
+ change_label_highlight (status, HL_STR, ACURR (A_STR));
+
+ g_snprintf (attrString, 11, _("Dex: %d"), ACURR (A_DEX));
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_DEX]), attrString);
+ change_label_highlight (status, HL_DEX, ACURR (A_DEX));
+ g_snprintf (attrString, 11, _("Con: %d"), ACURR (A_CON));
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_CON]), attrString);
+ change_label_highlight (status, HL_CON, ACURR (A_CON));
+ g_snprintf (attrString, 11, _("Int: %d"), ACURR (A_INT));
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_INT]), attrString);
+ change_label_highlight (status, HL_INT, ACURR (A_INT));
+ g_snprintf (attrString, 11, _("Wis: %d"), ACURR (A_WIS));
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_WIS]), attrString);
+ change_label_highlight (status, HL_WIS, ACURR (A_WIS));
+ g_snprintf (attrString, 11, _("Cha: %d"), ACURR (A_CHA));
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_CHA]), attrString);
+ change_label_highlight (status, HL_CHA, ACURR (A_CHA));
+}
+
+static void
+update_misc_labels (G2Status * status)
+{
+ gchar newString[20];
+
+//g_print("0.update_misc_labels\n");
+ g_snprintf (newString, 10, _("AC: %d"), u.uac);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_AC]), newString);
+ /* special case: lower AC is better than higher -> invert highlight */
+ if (player.hlOld[HL_AC] > u.uac) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[HL_AC]), increaseAttrs);
+ status->hlFadeList[HL_AC] = G2_HL_TIME;
+ } else if (player.hlOld[HL_AC] < u.uac) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[HL_AC]), decreaseAttrs);
+ status->hlFadeList[HL_AC] = G2_HL_TIME;
+ }
+ player.hlOld[HL_AC] = u.uac;
+
+ g_snprintf (newString, 10, _("Lv: %d"), u.ulevel);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_LVL]), newString);
+ change_label_highlight (status, HL_LVL, u.ulevel);
+//g_print("0.EXP\n");
+#ifdef EXP_ON_BOTL
+// if (flags.showexp) {
+ g_snprintf (newString, 12, _("Exp: %-7ld"), u.uexp);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_EXP]), newString);
+ change_label_highlight (status, HL_EXP, u.uexp);
+ gtk_widget_show (status->hl[HL_EXP]);
+// } else {
+// gtk_widget_hide(status->hl[HL_EXP]);
+// }
+#endif
+//g_print("1.EXP\n");
+//g_print("0.TIME\n");
+// if (flags.time) {
+ g_snprintf (newString, 20, _("Time: %ld"), moves);
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_TIME]), newString);
+ gtk_widget_show (status->hl[HL_TIME]);
+// } else {
+// gtk_widget_hide(status->hl[HL_TIME]);
+// }
+//g_print("1.TIME\n");
+//g_print("0.SCORE\n");
+#ifdef SCORE_ON_BOTL
+// if (flags.showscore) {
+ g_snprintf (newString, 20, _("Score: %ld"), botl_score ());
+ gtk_label_set_text (GTK_LABEL (status->hl[HL_SCORE]), newString);
+ change_label_highlight (status, HL_SCORE, botl_score ());
+ gtk_widget_show (status->hl[HL_SCORE]);
+// } else {
+// gtk_widget_hide(status->hl[HL_SCORE]);
+// }
+#endif
+//g_print("1.SCORE\n");
+/* if (!flags.time && !flags.showscore) {
+ gtk_widget_hide(status->optSep);
+ } else {
+ gtk_widget_show(status->optSep);
+ }
+
+ if (!flags.time) {
+ gtk_widget_hide(status->optSep);
+ } else {
+ gtk_widget_show(status->optSep);
+ }
+*/
+//g_print("1.update_misc_labels\n");
+}
+
+static void
+update_hunger_condition (G2Status * status)
+{
+ GtkWidget *image;
+
+ image = gtk_bin_get_child (GTK_BIN (status->conds[COND_HUNGER]));
+ if (u.uhs == SATIATED) {
+ gtk_tooltips_enable (status->condTips[COND_HUNGER]);
+ gtk_tooltips_set_tip (status->condTips[COND_HUNGER],
+ status->conds[COND_HUNGER], _(hu_stat[u.uhs]), NULL);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), satiatedPic);
+ } else if (u.uhs == NOT_HUNGRY) {
+ gtk_tooltips_disable (status->condTips[COND_HUNGER]);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), nothingPic);
+ } else {
+ gtk_tooltips_enable (status->condTips[COND_HUNGER]);
+ gtk_tooltips_set_tip (status->condTips[COND_HUNGER],
+ status->conds[COND_HUNGER], _(hu_stat[u.uhs]), NULL);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), hungryPic);
+ }
+}
+
+static void
+update_condition (G2Status * status, Condition cond, gint state,
+ GdkPixbuf * pic, gchar * tooltip)
+{
+ GtkWidget *image;
+
+ image = gtk_bin_get_child (GTK_BIN (status->conds[cond]));
+ if (state) {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), pic);
+ gtk_tooltips_enable (status->condTips[cond]);
+ gtk_tooltips_set_tip (status->condTips[cond], status->conds[cond],
+ tooltip, NULL);
+ } else {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), nothingPic);
+ gtk_tooltips_disable (status->condTips[cond]);
+ }
+}
+
+static void
+update_boolean_conditions (G2Status * status)
+{
+ update_condition (status, COND_CONFUSED, Confusion, confusedPic, G2_CONFUSED);
+ update_condition (status, COND_STUNNED, Stunned, stunnedPic, G2_STUNNED);
+ update_condition (status, COND_HALLU, Hallucination, halluPic, G2_HALLU);
+ update_condition (status, COND_BLINDED, Blinded, blindedPic, G2_BLINDED);
+ if (Sick) {
+ if (u.usick_type & SICK_NONVOMITABLE) {
+ update_condition (status, COND_SICK, TRUE, illPic, G2_ILL);
+ } else {
+ update_condition (status, COND_SICK, TRUE, foodPoisonedPic, G2_FP);
+ }
+ } else {
+ update_condition (status, COND_SICK, FALSE, foodPoisonedPic, G2_FP);
+ }
+}
+
+static void
+update_encumbrance_condition (G2Status * status)
+{
+ GtkWidget *image;
+ gint enc;
+
+ image = gtk_bin_get_child (GTK_BIN (status->conds[COND_ENC]));
+ enc = near_capacity ();
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), encPics[enc]);
+ if (!enc) {
+ gtk_tooltips_disable (status->condTips[COND_ENC]);
+ } else {
+ gtk_tooltips_set_tip (status->condTips[COND_ENC],
+ status->conds[COND_ENC], _(enc_stat[enc]), NULL);
+ gtk_tooltips_enable (status->condTips[COND_ENC]);
+ }
+}
+
+static void
+update_status (G2Status * status)
+{
+//g_print("0.update_status\n");
+ update_player_name (status);
+ update_dungeon_name (status);
+ if (player.alignment != u.ualign.type) {
+ update_alignment (status);
+ }
+ update_gold (status);
+ update_hp_and_pw (status);
+ update_attributes (status);
+ update_misc_labels (status);
+ update_hunger_condition (status);
+ update_boolean_conditions (status);
+ update_encumbrance_condition (status);
+//g_print("1.update_status\n");
+}
+
+
+static void
+add_alignment_and_gold (G2Status * status)
+{
+ GtkWidget *row;
+ GtkWidget *iconLabel;
+ GtkWidget *icon;
+ GtkWidget *eventBox;
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ row = gtk_hbox_new (TRUE, 5);
+ iconLabel = gtk_hbox_new (FALSE, 0);
+ eventBox = gtk_event_box_new ();
+ status->alignIcon = gtk_image_new_from_pixbuf (neutralPic);
+ status->alignment = gtk_label_new (AL_NEU);
+ gtk_misc_set_alignment (GTK_MISC (status->alignment), 0.5f, 0.5f);
+ gtk_box_pack_start (GTK_BOX (iconLabel), status->alignIcon, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (iconLabel), status->alignment, TRUE, TRUE, 0);
+ gtk_container_add (GTK_CONTAINER (eventBox), iconLabel);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Alignment"), NULL);
+ gtk_box_pack_start (GTK_BOX (row), eventBox, FALSE, FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+
+ row = gtk_hbox_new (TRUE, 5);
+ iconLabel = gtk_hbox_new (FALSE, 0);
+ pixbuf = gdk_pixbuf_new_from_file ("gold24.png", &error);
+ icon = gtk_image_new_from_pixbuf (pixbuf);
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_GOLD] = gtk_label_new (": 0");
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_GOLD]), 0.5f, 0.5f);
+ gtk_box_pack_start (GTK_BOX (iconLabel), icon, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (iconLabel), status->hl[HL_GOLD], TRUE, TRUE, 0);
+ gtk_container_add (GTK_CONTAINER (eventBox), iconLabel);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Gold pieces"), NULL);
+ gtk_box_pack_start (GTK_BOX (row), eventBox, FALSE, FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+}
+
+static void
+add_hp_and_pw (G2Status * status)
+{
+ GtkWidget *table;
+ GtkWidget *eventBox;
+
+ gtk_widget_set_name (GTK_WIDGET (status), "status window");
+
+ table = gtk_table_new (2, 2, FALSE);
+
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_HP] = gtk_label_new (_("Hp: "));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_HP]), 0.0f, 0.5f);
+ gtk_misc_set_padding (GTK_MISC (status->hl[HL_HP]), 5, 0);
+ gtk_widget_set_size_request (status->hl[HL_HP], G2_MIN_HP_LABEL_WIDTH, -1);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_HP]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox,
+ _("Current and maximum hit points"), NULL);
+ gtk_table_attach_defaults (GTK_TABLE (table), eventBox, 0, 1, 0, 1);
+
+ eventBox = gtk_event_box_new ();
+ status->hpBar = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (status->hpBar, -1, 10);
+ g_signal_connect (G_OBJECT (status->hpBar), "expose_event",
+ G_CALLBACK (draw_value_bar), status);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hpBar);
+ gtk_tooltips_set_tip (status->tooltips, eventBox,
+ _("Graphical hit point display"), NULL);
+ gtk_table_attach_defaults (GTK_TABLE (table), eventBox, 1, 2, 0, 1);
+
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_PW] = gtk_label_new (_("Pw: "));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_PW]), 0.0f, 0.5f);
+ gtk_misc_set_padding (GTK_MISC (status->hl[HL_PW]), 5, 0);
+ gtk_widget_set_size_request (status->hl[HL_PW], G2_MIN_HP_LABEL_WIDTH, -1);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_PW]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox,
+ _("Current and maximum magic energy"), NULL);
+ gtk_table_attach_defaults (GTK_TABLE (table), eventBox, 0, 1, 1, 2);
+
+ eventBox = gtk_event_box_new ();
+ status->pwBar = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (status->pwBar, -1, 10);
+ g_signal_connect (G_OBJECT (status->pwBar), "expose_event",
+ G_CALLBACK (draw_value_bar), status);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->pwBar);
+ gtk_tooltips_set_tip (status->tooltips, eventBox,
+ _("Graphical magic energy display"), NULL);
+ gtk_table_attach_defaults (GTK_TABLE (table), eventBox, 1, 2, 1, 2);
+
+ gtk_box_pack_start (GTK_BOX (&status->vBox), table, TRUE, TRUE, 5); //F,T
+}
+
+static void
+add_ac_level_and_exp (G2Status * status)
+{
+ GtkWidget *row;
+ GtkWidget *eventBox;
+
+ row = gtk_hbox_new (FALSE, 0);
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_AC] = gtk_label_new (_("AC: "));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_AC]), 0.0f, 0.5f);
+ gtk_misc_set_padding (GTK_MISC (status->hl[HL_AC]), 5, 0);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_AC]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Armor Class"), NULL);
+ gtk_box_pack_start (GTK_BOX (row), eventBox, TRUE, TRUE, 0);
+
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_LVL] = gtk_label_new (_("Level: "));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_LVL]), 0.0f, 0.5f);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_LVL]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Experience Level"),
+ NULL);
+ gtk_box_pack_start (GTK_BOX (row), eventBox, TRUE, TRUE, 0);
+#ifdef EXP_ON_BOTL
+// if (flags.showexp) { /* if we don't create the hl EXP label here, we can't hide it afterwards. */
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_EXP] = gtk_label_new (_("Exp: "));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_EXP]), 0.0f, 0.5f);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_EXP]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Experience Points"),
+ NULL);
+ gtk_box_pack_start (GTK_BOX (row), eventBox, TRUE, TRUE, 0);
+// }
+#endif
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+}
+
+static void
+add_attributes (G2Status * status)
+{
+ GtkWidget *row;
+ GtkWidget *imageLabel;
+
+ row = gtk_hbox_new (TRUE, 0);
+ imageLabel =
+ create_image_hl_label (status, HL_STR, str_xpm, _("Str: 9999"),
+ _("Strength"));
+ gtk_box_pack_start (GTK_BOX (row), imageLabel, TRUE, TRUE, 5);
+ imageLabel =
+ create_image_hl_label (status, HL_INT, int_xpm, _("Int: 9999"),
+ _("Intelligence"));
+ gtk_box_pack_start (GTK_BOX (row), imageLabel, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+
+ row = gtk_hbox_new (TRUE, 0);
+ imageLabel =
+ create_image_hl_label (status, HL_DEX, dex_xpm, _("Dex: 9999"),
+ _("Dexterity"));
+ gtk_box_pack_start (GTK_BOX (row), imageLabel, TRUE, TRUE, 5);
+ imageLabel =
+ create_image_hl_label (status, HL_WIS, wis_xpm, _("Wis: 9999"),
+ _("Wisdom"));
+ gtk_box_pack_start (GTK_BOX (row), imageLabel, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+
+ row = gtk_hbox_new (TRUE, 0);
+ imageLabel =
+ create_image_hl_label (status, HL_CON, con_xpm, _("Con: 9999"),
+ _("Constitution"));
+ gtk_box_pack_start (GTK_BOX (row), imageLabel, TRUE, TRUE, 5);
+ imageLabel =
+ create_image_hl_label (status, HL_CHA, cha_xpm, _("Cha: 9999"),
+ _("Charisma"));
+ gtk_box_pack_start (GTK_BOX (row), imageLabel, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+}
+
+static void
+add_optionals (G2Status * status)
+{
+ GtkWidget *row;
+ GtkWidget *eventBox;
+
+ row = gtk_hbox_new (TRUE, 0);
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_TIME] = gtk_label_new (_("Time: "));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_TIME]), 0.0f, 0.5f);
+ gtk_misc_set_padding (GTK_MISC (status->hl[HL_TIME]), 5, 0);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_TIME]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Elapsed game moves"),
+ NULL);
+ gtk_box_pack_start (GTK_BOX (row), eventBox, TRUE, TRUE, 0);
+#ifdef SCORE_ON_BOTL
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_SCORE] = gtk_label_new (_("Score: "));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_SCORE]), 0.0f, 0.5f);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_SCORE]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Approximate score"),
+ NULL);
+ gtk_box_pack_start (GTK_BOX (row), eventBox, TRUE, TRUE, 0);
+#endif
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, FALSE, FALSE, 0);
+ status->optSep = gtk_hseparator_new ();
+ gtk_box_pack_start (GTK_BOX (&status->vBox), status->optSep, FALSE, FALSE, 0);
+}
+
+static void
+add_condition_row (G2Status * status)
+{
+ GtkWidget *row;
+
+ row = gtk_hbox_new (FALSE, 1);
+ status->conds[COND_HUNGER] =
+ create_condition (status, COND_HUNGER, hungryPic, hu_stat[HUNGRY]);
+ gtk_box_pack_start (GTK_BOX (row), status->conds[COND_HUNGER], FALSE, FALSE,
+ 1);
+ status->conds[COND_SICK] =
+ create_condition (status, COND_SICK, illPic, G2_ILL);
+ gtk_box_pack_start (GTK_BOX (row), status->conds[COND_SICK], FALSE, FALSE, 1);
+ status->conds[COND_BLINDED] =
+ create_condition (status, COND_BLINDED, blindedPic, G2_BLINDED);
+ gtk_box_pack_start (GTK_BOX (row), status->conds[COND_BLINDED], FALSE,
+ FALSE, 1);
+ status->conds[COND_STUNNED] =
+ create_condition (status, COND_STUNNED, stunnedPic, G2_STUNNED);
+ gtk_box_pack_start (GTK_BOX (row), status->conds[COND_STUNNED], FALSE,
+ FALSE, 1);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+
+ row = gtk_hbox_new (FALSE, 1);
+ status->conds[COND_HALLU] =
+ create_condition (status, COND_HALLU, halluPic, G2_HALLU);
+ gtk_box_pack_start (GTK_BOX (row), status->conds[COND_HALLU], FALSE, FALSE,
+ 1);
+ status->conds[COND_CONFUSED] =
+ create_condition (status, COND_CONFUSED, confusedPic, G2_CONFUSED);
+ gtk_box_pack_start (GTK_BOX (row), status->conds[COND_CONFUSED], FALSE,
+ FALSE, 1);
+ status->conds[COND_ENC] =
+ create_condition (status, COND_ENC, encPics[G2_OVR_ENC],
+ enc_stat[G2_OVR_ENC]);
+ gtk_box_pack_start (GTK_BOX (row), status->conds[COND_ENC], FALSE, FALSE, 1);
+
+ gtk_box_pack_start (GTK_BOX (&status->vBox), row, TRUE, FALSE, 0);
+}
+
+static const GTypeInfo g2_status_info = {
+ sizeof (G2StatusClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) g2_status_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (G2Status),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) g2_status_init
+};
+
+guint
+g2_status_get_type ()
+{
+ static GType g2_status_type = 0;
+
+ if (g2_status_type == 0) {
+ g2_status_type = g_type_register_static (GTK_TYPE_VBOX,
+ "G2Status", &g2_status_info, 0);
+ }
+ return g2_status_type;
+}
+
+static void
+g2_status_class_init (G2StatusClass * class)
+{
+ parent_class = gtk_type_class (gtk_vbox_get_type ());
+
+ g2_status_signals[0] =
+ g_signal_new ("curs",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2StatusClass, g2_status_curs),
+ NULL, NULL,
+ gtk_marshal_VOID__INT_INT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+ g2_status_signals[1] =
+ g_signal_new ("putstr",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2StatusClass, g2_status_putstr),
+ NULL, NULL,
+ g2_marshal_VOID__INT_STRING, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
+ g2_status_signals[2] =
+ g_signal_new ("player_acted",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2StatusClass, g2_status_player_acted),
+ NULL, NULL, gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ g2_status_signals[3] =
+ g_signal_new ("display",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2StatusClass, g2_status_display),
+ NULL, NULL, gtk_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+}
+
+static void
+g2_status_curs (GtkWidget * win, int x, int y, gpointer gp)
+{
+ /* XXX we do not need to do anything since we get our data directly out of the player structs */
+}
+
+static void
+g2_status_putstr (GtkWidget * win, int attr, const char *text, gpointer gp)
+{
+ update_status (G2_STATUS (win));
+}
+
+static void
+g2_status_display (GtkWidget * win, gboolean block, gpointer gp)
+{
+ gtk_widget_show_all (win);
+}
+
+static void
+g2_status_player_acted (GtkWidget * win, gpointer gp)
+{
+ gint i;
+ G2Status *status = G2_STATUS (win);
+
+ for (i = 0; i < HL_COUNT; i++) {
+ if (status->hlFadeList[i] > 1) {
+ status->hlFadeList[i]--;
+ } else if (status->hlFadeList[i] == 1) {
+ gtk_label_set_attributes (GTK_LABEL (status->hl[i]), normalAttrs);
+ status->hlFadeList[i]--;
+ }
+ }
+}
+
+
+static void
+g2_status_init (G2Status * status)
+{
+ GtkWidget *sep;
+ GtkWidget *eventBox;
+ PangoAttribute *attr;
+ gint i;
+
+ /* first clear the fields */
+ for (i = 0; i < HL_COUNT; i++) {
+ status->hl[i] = NULL;
+ status->hlFadeList[i] = 0;
+ }
+ for (i = 0; i < COND_COUNT; i++) {
+ status->conds[i] = NULL;
+ status->condTips[i] = NULL;
+ }
+ status->tooltips = gtk_tooltips_new ();
+ /* XXX think about using markup instead of attr-lists */
+ /* TODO extract into function */
+ /* create the attribute lists for label attributes (e.g. bold, color change etc.) */
+ increaseAttrs = pango_attr_list_new ();
+ attr = pango_attr_foreground_new (0, 30000, 0);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (increaseAttrs, attr);
+
+ decreaseAttrs = pango_attr_list_new ();
+ attr = pango_attr_foreground_new (50000, 0, 0);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (decreaseAttrs, attr);
+
+ normalAttrs = pango_attr_list_new ();
+ attr = pango_attr_foreground_new (0, 0, 0);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (normalAttrs, attr);
+
+ boldAttrList = pango_attr_list_new ();
+ attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (boldAttrList, attr);
+
+ smallAttrs = pango_attr_list_new ();
+ attr = pango_attr_foreground_new (0, 0, 0);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (smallAttrs, attr);
+ attr = pango_attr_size_new (8000);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (smallAttrs, attr);
+
+ set_initial_player_values ();
+ create_pixbufs ();
+
+ /* first two rows */
+ eventBox = gtk_event_box_new ();
+ status->charName = gtk_label_new (_("Adventurer's Name"));
+ gtk_misc_set_alignment (GTK_MISC (status->charName), 0.0f, 0.5f);
+ gtk_misc_set_padding (GTK_MISC (status->charName), 5, 0);
+ gtk_label_set_attributes (GTK_LABEL (status->charName), boldAttrList);
+ gtk_label_set_line_wrap (GTK_LABEL (status->charName), TRUE);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->charName);
+ gtk_tooltips_set_tip (status->tooltips, eventBox,
+ _("Character rame and rank"), NULL);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), eventBox, FALSE, FALSE, 0);
+
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_DGN] = gtk_label_new (_("Dungeon name"));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_DGN]), 0.0f, 0.5f);
+ gtk_misc_set_padding (GTK_MISC (status->hl[HL_DGN]), 5, 0);
+ gtk_label_set_line_wrap (GTK_LABEL (status->hl[HL_DGN]), TRUE);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_DGN]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Dungeon name"), NULL);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), eventBox, FALSE, FALSE, 0); //T,F,0
+
+ eventBox = gtk_event_box_new ();
+ status->hl[HL_DGNLV] = gtk_label_new (_("Depth"));
+ gtk_misc_set_alignment (GTK_MISC (status->hl[HL_DGNLV]), 0.0f, 0.5f);
+ gtk_misc_set_padding (GTK_MISC (status->hl[HL_DGNLV]), 5, 0);
+ gtk_label_set_line_wrap (GTK_LABEL (status->hl[HL_DGNLV]), TRUE);
+ gtk_container_add (GTK_CONTAINER (eventBox), status->hl[HL_DGNLV]);
+ gtk_tooltips_set_tip (status->tooltips, eventBox, _("Depth"), NULL);
+ gtk_box_pack_start (GTK_BOX (&status->vBox), eventBox, FALSE, FALSE, 0); //T,F,0
+
+ /* third row with aligment and gold */
+ add_alignment_and_gold (status);
+
+ sep = gtk_hseparator_new ();
+ gtk_box_pack_start (GTK_BOX (&status->vBox), sep, FALSE, FALSE, 0);
+ add_hp_and_pw (status);
+ add_ac_level_and_exp (status);
+ sep = gtk_hseparator_new ();
+ gtk_box_pack_start (GTK_BOX (&status->vBox), sep, FALSE, FALSE, 0);
+ add_attributes (status);
+ sep = gtk_hseparator_new ();
+ gtk_box_pack_start (GTK_BOX (&status->vBox), sep, FALSE, FALSE, 0);
+
+ /* misc stuff section */
+ add_optionals (status);
+ add_condition_row (status);
+
+ gtk_widget_show (GTK_WIDGET (status));
+}
+
+
+GtkWidget *
+g2_status_new ()
+{
+ G2Status *g2Status = G2_STATUS (g_object_new (TYPE_G2_STATUS, NULL));
+
+ g_signal_connect (G_OBJECT (g2Status), "curs", G_CALLBACK (g2_status_curs),
+ NULL);
+ g_signal_connect (G_OBJECT (g2Status), "putstr",
+ G_CALLBACK (g2_status_putstr), NULL);
+ g_signal_connect (G_OBJECT (g2Status), "display",
+ G_CALLBACK (g2_status_display), NULL);
+ g_signal_connect (G_OBJECT (g2Status), "player_acted",
+ G_CALLBACK (g2_status_player_acted), NULL);
+
+ return GTK_WIDGET (g2Status);
+}
diff --git a/patches/gtk2/g2status.h b/patches/gtk2/g2status.h
new file mode 100644
index 0000000..17f5f88
--- /dev/null
+++ b/patches/gtk2/g2status.h
@@ -0,0 +1,86 @@
+/* the status window
+ *
+ * $Id: g2status.h,v 1.1.1.1 2004/06/23 02:01:45 miq Exp $
+ *
+ */
+
+#ifndef G2_STATUS_WINDOW_H
+#define G2_STATUS_WINDOW_H
+
+#include <gtk/gtk.h>
+#include "config.h"
+
+#define TYPE_G2_STATUS (g2_status_get_type())
+#define G2_STATUS(obj) GTK_CHECK_CAST(obj, g2_status_get_type(), G2Status)
+#define G2_STATUS_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, g2_status_get_type(), G2StatusClass)
+#define IS_G2_STATUS(obj) GTK_CHECK_TYPE(obj, g2_status_get_type())
+
+typedef enum
+{
+ HL_DGN,
+ HL_DGNLV,
+ HL_GOLD,
+ HL_HP,
+ HL_PW,
+ HL_AC,
+ HL_LVL,
+#ifdef EXP_ON_BOTL
+ HL_EXP,
+#endif
+ HL_STR,
+ HL_DEX,
+ HL_CON,
+ HL_INT,
+ HL_WIS,
+ HL_CHA,
+ HL_TIME,
+#ifdef SCORE_ON_BOTL
+ HL_SCORE,
+#endif
+ HL_COUNT
+} HighlightLabel;
+
+typedef enum
+{
+ COND_HUNGER,
+ COND_SICK,
+ COND_BLINDED,
+ COND_STUNNED,
+ COND_HALLU,
+ COND_CONFUSED,
+ COND_ENC,
+ COND_COUNT
+} Condition;
+
+typedef struct
+{
+ GtkVBox vBox;
+
+ GtkWidget *charName;
+ GtkWidget *alignment;
+ GtkWidget *alignIcon;
+ GtkWidget *hpBar;
+ GtkWidget *pwBar;
+ GtkWidget *hl[HL_COUNT];
+ GtkWidget *optSep;
+ gint hlFadeList[HL_COUNT];
+ GtkWidget *conds[COND_COUNT];
+ GtkTooltips *condTips[COND_COUNT];
+ GtkTooltips *tooltips;
+} G2Status;
+
+typedef struct
+{
+ GtkVBoxClass parent_class;
+
+ void (*g2_status_curs) (G2Status * g2Status);
+ void (*g2_status_putstr) (G2Status * g2Status);
+ void (*g2_status_player_acted) (G2Status * g2Status);
+ void (*g2_status_display) (G2Status * g2Status);
+ void (*g2status) (G2Status * g2Status);
+} G2StatusClass;
+
+guint g2_status_get_type (void);
+GtkWidget *g2_status_new (void);
+
+#endif /* G2_STATUS_WINDOW_H */
diff --git a/patches/gtk2/g2text.c b/patches/gtk2/g2text.c
new file mode 100644
index 0000000..bc64f31
--- /dev/null
+++ b/patches/gtk2/g2text.c
@@ -0,0 +1,152 @@
+/* the text window for larger amounts of text. It is used for displaying files e.g.
+ * the game instructions, command explanation and the rip window
+ *
+ * $Id: g2text.c,v 1.1.1.1 2004/06/23 02:01:46 miq Exp $
+ *
+ */
+
+#include <string.h>
+
+#include "g2text.h"
+#include "g2marsh.h"
+
+#define G2_TEXT_WIDTH 600
+#define G2_TEXT_HEIGHT 400
+
+G2Text *g2Text;
+static GtkWindowClass *parent_class;
+static gint g2_text_signals[5];
+
+static void g2_text_class_init (G2TextClass * class);
+static void g2_text_init (G2Text * win);
+static void g2_text_putstr (G2Text * win, int attr, const char *text,
+ gpointer gp);
+
+
+static const GTypeInfo g2_text_info = {
+ sizeof (G2TextClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) g2_text_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (G2Text),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) g2_text_init
+};
+
+guint
+g2_text_get_type ()
+{
+ static GType g2_text_type = 0;
+
+ if (g2_text_type == 0) {
+ g2_text_type = g_type_register_static (GTK_TYPE_DIALOG,
+ "G2Text", &g2_text_info, 0);
+ }
+ return g2_text_type;
+}
+
+static void
+g2_text_class_init (G2TextClass * class)
+{
+ parent_class = gtk_type_class (gtk_window_get_type ());
+
+ g2_text_signals[0] =
+ g_signal_new ("putstr",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2TextClass, g2_text_putstr),
+ NULL, NULL,
+ g2_marshal_VOID__INT_STRING, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
+ g2_text_signals[1] =
+ g_signal_new ("display",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2TextClass, g2_text_display),
+ NULL, NULL, gtk_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+ g2_text_signals[2] =
+ g_signal_new ("outrip",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (G2TextClass, g2_text_outrip),
+ NULL, NULL, gtk_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+}
+
+static void
+g2_text_init (G2Text * win)
+{
+ GtkWidget *okButton;
+ PangoFontDescription *fontDescription;
+
+ win->messageBuffer = gtk_text_buffer_new (NULL);
+ gtk_window_set_title (GTK_WINDOW (win), "G2Hack - Text window");
+ win->messageWin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_name (win->messageWin, "text window");
+
+ gtk_container_set_border_width (GTK_CONTAINER (win->messageWin), 5);
+ gtk_widget_set_size_request (win->messageWin, G2_TEXT_WIDTH, G2_TEXT_HEIGHT);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (win->messageWin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ win->messageView = gtk_text_view_new ();
+ fontDescription = pango_font_description_from_string ("monospace");
+ gtk_widget_modify_font (win->messageView, fontDescription);
+ pango_font_description_free (fontDescription);
+ gtk_text_view_set_buffer (GTK_TEXT_VIEW (win->messageView),
+ win->messageBuffer);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (win->messageView), FALSE);
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (win->messageView), FALSE);
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (win->messageView), GTK_WRAP_NONE);
+ gtk_container_add (GTK_CONTAINER (win->messageWin), win->messageView);
+ gtk_box_pack_end (GTK_BOX (GTK_DIALOG (win)->vbox), win->messageWin, TRUE,
+ TRUE, 0);
+ okButton =
+ gtk_dialog_add_button (GTK_DIALOG (win), GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT);
+ gtk_window_set_default (GTK_WINDOW (win), okButton);
+}
+
+static void
+g2_text_putstr (G2Text * win, int attr, const char *text, gpointer gp)
+{
+ gtk_text_buffer_insert_at_cursor (GTK_TEXT_BUFFER (win->messageBuffer),
+ text, strlen (text));
+ gtk_text_buffer_insert_at_cursor (GTK_TEXT_BUFFER (win->messageBuffer),
+ "\n", 1);
+}
+
+static void
+g2_text_display (GtkWidget * win, gboolean block, gpointer gp)
+{
+ gint result;
+
+ gtk_widget_show_all (GTK_WIDGET (win));
+ gtk_window_set_modal (GTK_WINDOW (win), TRUE);
+ result = gtk_dialog_run (GTK_DIALOG (win));
+}
+
+static void
+g2_text_outrip (GtkWidget * win, int how, gpointer gp)
+{
+ GtkWidget *tombstone;
+
+ tombstone = gtk_image_new_from_file ("rip.xpm");
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (win)->vbox), tombstone, FALSE,
+ FALSE, 0);
+ gtk_widget_set_size_request (G2_TEXT (win)->messageWin, G2_TEXT_WIDTH,
+ G2_TEXT_HEIGHT / 2);
+}
+
+GtkWidget *
+g2_text_new ()
+{
+ g2Text = G2_TEXT (g_object_new (TYPE_G2_TEXT, NULL));
+ g_signal_connect (G_OBJECT (g2Text), "putstr",
+ G_CALLBACK (g2_text_putstr), NULL);
+ g_signal_connect (G_OBJECT (g2Text), "display",
+ G_CALLBACK (g2_text_display), NULL);
+ g_signal_connect (G_OBJECT (g2Text), "outrip",
+ G_CALLBACK (g2_text_outrip), NULL);
+ return GTK_WIDGET (g2Text);
+}
diff --git a/patches/gtk2/g2text.h b/patches/gtk2/g2text.h
new file mode 100644
index 0000000..c7075f6
--- /dev/null
+++ b/patches/gtk2/g2text.h
@@ -0,0 +1,42 @@
+/* the text window as a GObject
+ *
+ * we derive from <gtk_dialog> to build our own text window widget with our own signals which
+ * g2bind will emit on calls from the nethack engine
+ *
+ * $Id: g2text.h,v 1.1.1.1 2004/06/23 02:01:46 miq Exp $
+ *
+ */
+
+#ifndef G2_TEXT_DIALOG_H
+#define G2_TEXT_DIALOG_H
+
+#include <gtk/gtk.h>
+
+#define TYPE_G2_TEXT (g2_text_get_type())
+#define G2_TEXT(obj) GTK_CHECK_CAST(obj, g2_text_get_type(), G2Text)
+#define G2_TEXT_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, g2_text_get_type(), G2TextClass)
+#define IS_G2_TEXT(obj) GTK_CHECK_TYPE(obj, g2_text_get_type())
+
+typedef struct
+{
+ GtkDialog textDialog;
+
+ GtkWidget *messageWin;
+ GtkWidget *messageView;
+ GtkTextBuffer *messageBuffer;
+} G2Text;
+
+typedef struct
+{
+ GtkDialogClass parent_class;
+
+ void (*g2_text_putstr) (G2Text * g2Text);
+ void (*g2_text_display) (G2Text * g2Text);
+ void (*g2_text_outrip) (G2Text * g2Text);
+ void (*g2text) (G2Text * g2Text);
+} G2TextClass;
+
+guint g2_text_get_type (void);
+GtkWidget *g2_text_new (void);
+
+#endif /* G2_TEXT_DIALOG_H */
diff --git a/patches/gtk2/g2xpms.h b/patches/gtk2/g2xpms.h
new file mode 100644
index 0000000..68d7095
--- /dev/null
+++ b/patches/gtk2/g2xpms.h
@@ -0,0 +1,1471 @@
+/* SCCS Id: @(#)gnxpms.h 3.4 2000/07/16 */
+/* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
+/* NetHack may be freely redistributed. See license for details. */
+/* These XPMs are the artwork of Warwick Allison
+ * <warwick@troll.no>. They have been borrowed from
+ * the most excellent NetHackQt, until such time as
+ * we can come up with something better.
+ *
+ * More information about NetHackQt can be had from:
+ * http://www.troll.no/~warwick/nethack/
+ */
+
+/* XPM */
+static const char *blind_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 5 1",
+/* colors */
+ " c #000000",
+ ". c None",
+ "X c #909090",
+ "o c #606060",
+ "O c #303030",
+/* pixels */
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "....ooooooooooooooooooooooooooooooooX...",
+ ".... o...",
+ ".... o...",
+ ".... o...",
+ ".... o...",
+ "......o ..o ......",
+ "......X O..X O......",
+ "....... o... o......",
+ ".......o ....o .......",
+ "........O X.....O X.......",
+ ".........O X.......O X........",
+ "..........o OX.........o OX.........",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................",
+ "........................................"
+};
+
+/* XPM */
+static const char *cha_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 14 1",
+/* colors */
+ " c #F85848",
+ ". c #949E9E",
+ "X c #F8B090",
+ "o c #E00028",
+ "O c #D4D4D4",
+ "+ c None",
+ "@ c #B0B0B0",
+ "# c #F82C24",
+ "$ c #F89E6C",
+ "% c #FF0000",
+ "& c #909090",
+ "* c #FFFFFF",
+ "= c #CEAA90",
+ "- c #DADAB6",
+/* pixels */
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "+++++++++++++++=#%#=+=#%% ++++++++++++++",
+ "++++++++++++++ %O%%%#%$$%o%=++++++++++++",
+ "+++++++++++++# +#%%o%%o%%%%% +++++++++++",
+ "+++++++++++ %%%%%%%%%%%%%%%%o#=+++++++++",
+ "+++++++++ o%%%%%%%%%%%%%%%%%%%%# +++++++",
+ "++++++ #%%%%%%o%%%o%%o%%o%o%%%%%o%o +++",
+ "++=#%%o%%%#= =*+**O*+**O*+- = =%%%%#@+++",
+ "++++ %=++*+*+**O****O****O*O*O*OO%=+++++",
+ "+++++.%=OO+*O*OO****+****+*O*+O&%=@+++++",
+ "++++++=%=*OO+**O**O*O**O*O*OO+$%=+++++++",
+ "+++++++#% +*OOOO****+****@O+*#%=++++++++",
+ "++++++++#%#*+**+O+OO+O+OOO*O#o#+++++++++",
+ "+++++++++o% O**+****O****O*#%%=+++++++++",
+ "+++++++++ %%#O*O****+****+ %o#++++++++++",
+ "++++++++++o%% XO*O**O*O**#%%%+++++++++++",
+ "++++++++++ %%%o%$-**+**$%%%%=+++++++++++",
+ "+++++++++++o%%$X$%%%%%%#= o#++++++++++++",
+ "++++++++++@ %%%o#O$$+$$$%%%=++++++++++++",
+ "++++++++++++#o%%%%%%%%o%%%=@++++++++++++",
+ "+++++++++++++ %%%%%%%%%%o=++++++++++++++",
+ "+++++++++++++++= & & @++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++"
+};
+
+/* XPM */
+static const char *chaotic_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 9 1",
+/* colors */
+ " c #000000",
+ ". c #5C7A7A",
+ "X c None",
+ "o c #B0B0B0",
+ "O c #909090",
+ "+ c #788C8C",
+ "@ c #606060",
+ "# c #FFFFFF",
+ "$ c #303030",
+/* pixels */
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXX@$ @XXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXX$$+#X$ $XXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXX@$#o @XXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXX$XX OXXXXXXXX",
+ "XXXXXXXXXXXXXXXXX@ # $@$ $XXXXXXXX",
+ "XXXXXXXXXXXXXXXXX@.+ $XXXO @XXXXXXX",
+ "XXXXXXXXXXXXXXXXX O@ XXXXX@ @XXXXXXX",
+ "XXXXXXXXXXXXXXXXX @O $XXXXX@$ @XXXXXXX",
+ "XXXXXXXXXXXXXXXXX O+ @XXXXO++ @XXXXXXX",
+ "XXXXXXXXXXXXXXXXX @+ $@OXO$#$ XXXXXXXX",
+ "XXXXXXXXXXXXXXXXX O@ $ @$Xo $XXXXXXXX",
+ "XXXXXXXXXXXXXXXXX +O $X##+ $XXXXXXXXX",
+ "XXXXXXXXXXXXXXXXX +@ $XXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXX oO $XXXXXXXXXXX",
+ "XXXXXXXXO@@@@@ +# $XXXXXXXXXXXX",
+ "XXXXXXO +o########$ $@XXXXXXXXX",
+ "XXXXXX +#+.$XXXXXXXX",
+ "XXXXXX @O @XXXXXXX",
+ "XXXXXX$ $@ $@@$ @XXXXXXX",
+ "XXXXXXX@@@@XXXXXX + @XXXX@$ OXXXXXXX",
+ "XXXXXXXXXXXXXXXX@ # @XXXXXXX@@OXXXXXXXX",
+ "XXXXXXXXXXXXXXXX@.+ @XXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX$O@ XXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX @O XXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX #$ @XXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX # @XXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX # @XXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX@ # @XXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX@ # OXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX@.X XXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX @+ XXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX O@ @XXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX +O @XXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX @XXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXX$ OXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX@@OXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+
+/* XPM */
+static const char *con_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 19 1",
+/* colors */
+ " c #000000",
+ ". c #F85848",
+ "X c #949E9E",
+ "o c #F8B090",
+ "O c #E00028",
+ "+ c #7C3400",
+ "@ c None",
+ "# c #B0B0B0",
+ "$ c #F82C24",
+ "% c #F89E6C",
+ "& c #FF0000",
+ "* c #B64700",
+ "= c #909090",
+ "- c #788C8C",
+ "; c #606060",
+ ": c #C80050",
+ "> c #CEAA90",
+ ", c #303030",
+ "< c #FFB691",
+/* pixels */
+ "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@.oo.o$ ;@@@@@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@>.o.%%O,@@@@@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@$oo.o. ,@@@@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@.oo$oo+ =@@@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@..o&oo$ ,@@@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@#.o.oo. =@.$%@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@.o..oo& O.%ooo@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@.o.&%o.$oo%O++;@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@.o.+$%$o<O+ ,@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@.oo+ $o%O ;@>.@@@@@@@@@@@",
+ "@@@@@@@@@@@@@.oo++o%$$ ,@@$.oo@@@@@@@@@@",
+ "@@@@@@@@@@@@>.oo+Oo$o%.@@$oo..-@@@@@@@@@",
+ "@@@@@@@@@@@@..o%;.o&%.$..o%O ++>@@@@@@@@",
+ "@@@@@@@@@@@@>.$O:%o.O::::O* $oooo@@@@@@@",
+ "@@@@@@@@@@@@::::::$$:OO&OO::oo%.;=@@@@@@",
+ "@@@@@@@@@@@.::::::::O&&&&&O::++ ,@@@@@@",
+ "@@@@@@@@@@>:::O&&OO&&&&&&&&:: ;@@@@@",
+ "@@@@@@@@@@=::O&&&&&O:O&&&&&O: ,=@@@@@@@",
+ "@@@@@@@@@@:::&&&&&&&&:&&&&&O: ;@@@@@@@@",
+ "@@@@@@@@@@::O&&&&&&&&:&O&&&O:, ;@@@@@@@@",
+ "@@@@@@@@@@::O&&&&O&O&OO&O&&O:+ ;@@@@@@@@",
+ "@@@@@@@@@@::&&&O&&&&&O:&&&&O:, @@@@@@@@",
+ "@@@@@@@@@@::O&&&&&O&&&:O&O&::+ @@@@@@@@",
+ "@@@@@@@@@@::O&&O&&&&O&OO&&&:: @@@@@@@@",
+ "@@@@@@@@@@=::O&&&&O&&&O:&&&:: @@@@@@@@",
+ "@@@@@@@@@@.:::O&&O&&&&&:&OO:: @@@@@@@@",
+ "@@@@@@@@@@@:::::&&&&O&O:&&O:, @@@@@@@@",
+ "@@@@@@@@@@.>:::::O&&&&&:&&::+ ;@@@@@@@@",
+ "@@@@@@@@@@>.<::::O&&O&O:&&:: @@@@@@@@@",
+ "@@@@@@@@@@@.o%,:::O&&&O:&O:, @@@@@@@@@",
+ "@@@@@@@@@@@$o. :::OO&OO&::, ;@@@@@@@@@",
+ "@@@@@@@@@@@&o%+ ,::O&OO&O:: =@@@@@@@@@",
+ "@@@@@@@@@@@.oo+ :::OO::: ,@@@@@@@@@@",
+ "@@@@@@@@@@@..oO +::::: =@@@@@@@@@@",
+ "@@@@@@@@@@@@.<.+ ,+, ,@@@@@@@@@@@",
+ "@@@@@@@@@@@@Oo<+ @X, ,@@@@@@@@@@@@",
+ "@@@@@@@@@@@@.%o$ @@@@@;, ;@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@.o., =@@@@@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
+};
+
+/* XPM */
+static const char *confused_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #303030",
+ "= c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOO.=.+OO=.+O.OO+O+OO.+OOOOOO",
+ "OOOOOOOOOOO++=====O=====+=O+==++=O+OOOOO",
+ "OOOOOOOOOOO+=.=====.=++++===OO==+O=+OOOO",
+ "OOOOOOOOOOO=+===.+=o==o===+&OoO======OOO",
+ "OOOOOOOO+O+====OO+=o&&&&Oo==o&oO+==+=.O.",
+ "OOOO+.+=+O==+&&o=oooOo&o&ooo=&oooO==O=+=",
+ "OOOOOOOO++O===oo=oo&=&o&&oo=o==&o+==++==",
+ "OOOOOOOO=o.=O====o&OO&o&oo&o&&oo=======O",
+ "OOOOOOOo===+=O=O=ooO=ooooOOo=o&O=====OOO",
+ "OOOOOOOOO+==+=======O=oo====O=o=O===+OOO",
+ "OOOOOOOOO.=#=X=+====O========O======OOOO",
+ "OOOOOOO.#Xo++.=#%====O==========OO==+OOO",
+ "OOOOOO+Xo#+#+.#=.==X====+====O=+=+==+OOO",
+ "OOOOO.+.+O===##.#=X.====oX##===o+OO.OOOO",
+ "OOOOO#+####O#O##o.#+==#X#O#+...=OOo=+OOO",
+ "OOOO++#o+#+X++++#.#O.#+#X.#+X+==+OO=oOOO",
+ "OOOO#+.+..X+.##X++#++#..+XX#+##+..OOOOOO",
+ "OOOO##....O+#++#+.++#+X+#+#X..+#+#OOOOOO",
+ "OOOO++#+.+.#+#O+X#X#XX#.++##.#++.X$OOOOO",
+ "OOOOO#+#+.+++#++.+++##+X###+X+X##+**OOOO",
+ "OOOOO#..#OO#+.##o###.+..++.+#X+#+#* @OOO",
+ "OOOOO+#.#O+#+#O.+++.###+##++###+.#* $OOO",
+ "OOOOOOXX+#+#+#o..X##++#+..##.#+### *OOO",
+ "OOOOOOOX#.#X+#+#+#+.#+..+####%XX%% OOO",
+ "OOOOOOOO.%%X.#+#+#.++#+#+#+.X++=.% *OOO",
+ "OOOOOOOOO.* *##+#+.O####.+XX%%%%#% $OOO",
+ "OOOOOOOOOOO. %X.+.#+++XXX=.+++#X $OOO",
+ "OOOOOOOOOOOO.* %%X..#X%=.####%X* $OOO",
+ "OOOOOOOOOOOOOO.$ *XX%%%=.#X%###=* OOOO",
+ "OOOOOOOOOOOOOOOOOO+%%%=%%#.+.#=* @OOOO",
+ "OOOOOOOOOOOOOOOOOOo=%%%==X##X%* OOOOO",
+ "OOOOOOOOOOOOOOOOOOO+X%%%%X=%* @OOOOO",
+ "OOOOOOOOOOOOOOOOOOOOX%%%%X *@OOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO=%%%X* *$$OOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO+X%%= .OOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOX%%% OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOO=%%* $OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOO=%%% $OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOO+%%% $OOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *dex_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 19 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #F8B090",
+ "o c #5C7A7A",
+ "O c #D4D4D4",
+ "+ c #F87A24",
+ "@ c #7C3400",
+ "# c None",
+ "$ c #B0B0B0",
+ "% c #F89E6C",
+ "& c #B64700",
+ "* c #909090",
+ "= c #606060",
+ "- c #CEAA90",
+ "; c #DADAB6",
+ ": c #303030",
+ "> c #F86800",
+ ", c #FFB691",
+ "< c #F88C48",
+/* pixels */
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "###############-%-######################",
+ "##############-%X<-#####################",
+ "#########-<<-#-%XX+==###################",
+ "#########%,X< :<,X%@ :##################",
+ "#########-XX%: @;X%+ *#################",
+ "##########<,X& :<<%+: :#################",
+ "######->+#-%%%: <,XX@ #################",
+ "######%X%@ <,,& @XXX+ :++-#############",
+ "######-<X+ &,X%:@+<+>: <X&o############",
+ "######$<X<@:<<%& <,XX@ @X,@ =###########",
+ "#######-+%< &,,%:&,XX+ @,X+ :###########",
+ "####<<-o&,X@:X,,&@,XX< @,X%& :##########",
+ "####<X%::%%< &,,X:<%X%@:%XX%@ =#########",
+ "####%%X& <X,&@%<%<%<<%& >+XX+ #########",
+ "#####+%%@@,X%<,XXXXXXX<:@XXX<: =########",
+ "####$%XX< <,<XXXXXXXXXX&@,XXX@ :########",
+ "######+X<&@%%XXX%XXXX%<<><,XX& ########",
+ "#####$%<%X@%XXXX<X%XXXX<><%XX< =#######",
+ "#######<;X%XXXXX<<<XXX<XX<,XX%@ =#######",
+ "#######-%+XXXXX%+XXXXXXXX%<,XX@ =#######",
+ "########<XXXXXX+XX%XXXXXXXX%XX@ =#######",
+ "########-%XXX%+%XX<XXXXXXXX%XX@ #######",
+ "#########+,XX+XXXX<,XXXXXXXXXX@ #######",
+ "#########-<X+%XXXX%,XXXXXXXXXX@ #######",
+ "##########>,XXXXXX%,XXXXXXXXX%@ #######",
+ "##########-<XXXXXX<,XXXXXXXXX< #######",
+ "###########%%XXXXXX%,,XXXXXXX+ #######",
+ "############+,XXXXXX<;,,XXXXX@ #######",
+ "############-+,XXXXXX%%%,XXX%@ #######",
+ "#############%%XXXXXXXX%<XXXX+ =#######",
+ "#############$%<XXXXXXXXXXXXX<: =#######",
+ "##############$-<<XXXXXXXXXXXX& #######",
+ "################.&,XXXXXXXXXXX<: =######",
+ "#################O######################"
+};
+
+/* XPM */
+static const char *ext_enc_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #303030",
+ "= c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOoO+OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOoOXX==OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoO=OO+==OOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoXOO.*$=$OOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO=+# *.X *OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO==.OO=+@ $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOXO==.OO $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOO+=@$@* @OOOOOOOOOOOOOO",
+ "OOOOOOOOOOO&&&&&&&&&&&&&&&.OOOOOOOOOOOOO",
+ "OOOOOOOOOOOo==============X*OOOOOOOOOOOO",
+ "OOOOOOOOOOoO===X====X=====X**OOOOOOOOOOO",
+ "OOOOOOOOOO&============X===% $OOOOOOOOOO",
+ "OOOOOOOOOoo======X=========%* OOOOOOOOOO",
+ "OOOOOOOOOoO===X============X* @OOOOOOOOO",
+ "OOOOOOOOO&=========X===%%===% $OOOOOOOOO",
+ "OOOOOOOOoo=== ===% *==X OOOOOOOOO",
+ "OOOOOOOOoO==* %*%*=== *%* *=X* @OOOOOOOO",
+ "OOOOOOOO&=== %======% ===% ==% $OOOOOOOO",
+ "OOOOOOOoo==* ======= *===% X=%* OOOOOOOO",
+ "OOOOOOOoO==% *%== *==== %=X* @OOOOOOO",
+ "OOOOOOO&===%%*%* == %==== *==% $OOOOOOO",
+ "OOOOOOoo========% %=* ===X X==X OOOOOOO",
+ "OOOOOOoO===*====* *=% ===* ===X* @OOOOOO",
+ "OOOOOO&===* %*% X== **% %====% $OOOOOO",
+ "OOOOOoo===%% *X===% *=====%* OOOOOO",
+ "OOOOOo+========================X* @OOOOO",
+ "OOOOOo=========================%* $OOOOO",
+ "OOOOOO=XXX%X%XXXXX%X%XXXX%X%X%X%* OOOOO",
+ "OOOOOO.=************************ OOOOO",
+ "OOOOOOOO OOOOO",
+ "OOOOOOOO. @OOOOO",
+ "OOOOOOOOOOoOOoOOoOOoOoOoOOoOoOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *hallu_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 30 1",
+/* colors */
+ " c #F85848",
+ ". c #5C7A7A",
+ "X c #009100",
+ "o c #6CFF00",
+ "O c #E00028",
+ "+ c #D4D4D4",
+ "@ c #FF6C00",
+ "# c #F87A24",
+ "$ c None",
+ "% c #B0B0B0",
+ "& c #F82C24",
+ "* c #F89E6C",
+ "= c #FF00FF",
+ "- c #FF0000",
+ "; c #B64700",
+ ": c #909090",
+ "> c #788C8C",
+ ", c #606060",
+ "< c #406868",
+ "1 c #C80050",
+ "2 c #FFFFFF",
+ "3 c #FFFF00",
+ "4 c #00B6FF",
+ "5 c #CEAA90",
+ "6 c #DADAB6",
+ "7 c #F86800",
+ "8 c #FFB691",
+ "9 c #6C91B6",
+ "0 c #F88C48",
+ "q c #0000FF",
+/* pixels */
+ "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+ "$$$$$$$$$$$$$$$353333335*$$$$$$$$$$$$$$$",
+ "$$$$$$$$$$$$*33333333#7@3335$$$$$$$$$$$$",
+ "$$$$$$$$$65333333333@7777#333*$$$$$$$$$$",
+ "$$$$$$$$$3333333333377777733333===%$$$$$",
+ "$$$$$$$533333333333#7777777333%=====$$$$",
+ "$$$$$$ #3333333333o>7777773330======%$$$",
+ "$$$$5---O#33333o3944077777333*=======$$$",
+ "$$$$-----O333333>4444.77333330======%$$$",
+ "$$$ ---O--;3333344444443333333:====5$$$$",
+ "$$$ O-----733333444444433333333 ==035$$$",
+ "$$$3--O--O333333>44444>33333333333333$$$",
+ "$$533---O33333333944493333#333333333356$",
+ "$$33867733333o33333:o333333o3333333333$$",
+ "$532+2233333#333333333333oooo3#3333333%$",
+ "6522222+33333333333333333oooooo33o3333*$",
+ "$+22+22263333333o3333333ooooooo333333356",
+ "662222+2533333333333333#ooooooo33333333$",
+ "$32+22223333o3#33333o333ooooooo3#333333%",
+ "$33222233333333333#333333ooooo333333333$",
+ "$33368333333333333330626*oooo#333333o33%",
+ "%333335== 33oo333333222223#333333333333$",
+ "$3333=====:ooooo333+22+2263333333.>o333%",
+ "$5333=====oooooo33322222223333339444935$",
+ "$*33 ====>ooooooo3362+222633333.44444>3$",
+ "$%330====:ooooooo333222+23333334444444$$",
+ "$$333177 =oooXoo#333*626333333;4444444$$",
+ "$$53##777&3oooo3333333333333#--,444449$$",
+ "$$$3;77777#3o333333333333333O---94449$$$",
+ "$$%*@77777#33333333333333337O----O:o3$$$",
+ "$$$5777777333 333333333333;---O-O73$$$$",
+ "$$$$#7777730====#:.,33333333------3$$$$$",
+ "$$$$$577333=====qqqq<0333333#O---35$$$$$",
+ "$$$$$%53335====qqqqqq.33o333337735$$$$$$",
+ "$$$$$$$533 ====qqqqqqq3333333333%$$$$$$$",
+ "$$$$$$$$%33====qqqqqqq333333333%$$$$$$$$",
+ "$$$$$$$$$$50===qqqqqq,3333333:$$$$$$$$$$",
+ "$$$$$$$$$%6%5503,qqq<333#335%$$$$$$$$$$$",
+ "$$$$$$$$$$$$$%$*53,03335o$%%$$$$$$$$$$$$",
+ "$$$$$$$$$$$$$$$$$$$$$%$$+$$$$$$$$$$$$$$$"
+};
+
+/* XPM */
+static const char *hungry_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 15 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #CEAA90",
+ "= c #DADAB6",
+ "- c #303030",
+ "; c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO========OOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOO=============OOOOOOOOOOOOO",
+ "OO;XX;@OOOOO================OOOOOOOO;XOO",
+ "OO;%-;$OOOO==================OOOOOOO;XOO",
+ "OO;-%;$OOO========@$#@========OOOOO+;;$O",
+ "OO;%-;$OO=======- -*======*OOOO.;;$O",
+ "OO;-%;$O======* @====.$$&=====@OOO.;;$O",
+ "OO;X%;$O====== -========*@=====*.OO+;;$O",
+ "OO;;;X$o====* -==========@======$OO;;;$O",
+ "OO+;;-+o====- =============o====#@O+;;$O",
+ "OOO;%$O===== @=============&====*$O;;;$O",
+ "OOO+%OO====@ ==============&=====-OO;;$O",
+ "OOo;-Oo====$ ==============o&==== OO;;$O",
+ "OOO+%OO====@ ==============&===== O+;;#O",
+ "OOO;-Oo====$-==============&&==== O+;;-O",
+ "OOO;;+O=====$*============&&====* OO;;%+",
+ "OOO;;$o=====$.============&&====X-OO;;$O",
+ "OOO;;$O======*.===&======&&=====-$=O;;$O",
+ "OOO;;$Oo=====.==========&&=====* @O+;;$O",
+ "OOO;;$OO=======oo=====&&&======$-OOO;;$O",
+ "OOO;;$OOo=======&o&&&&&&======$ @OOO;;$O",
+ "OOO;;$OOOO========&=&========* $OOOO;;$O",
+ "OO+;;$OOOOo=================* -OOOOO#;$O",
+ "OOO;;$OOOOO=*==============@ -=OOOOO;;$O",
+ "OOO;;$OOOOOOO+*==========*- $OOOOOOO;;$O",
+ "OOOX-$OOOOOOOO@X@*====*#- -.OOOOOOOOX-$O",
+ "OOOOOOOOOOOOOO=*@$- -$.=OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOO=O==O=O=OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *hvy_enc_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #303030",
+ "= c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOoO+OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOoOXX==OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoO=OO+==OOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoXOO.*$=$OOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO=+# *.X *OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO==.OO=+@ $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOXO==.OO $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOO+=@$@* @OOOOOOOOOOOOOO",
+ "OOOOOOOOOOO&&&&&&&&&&&&&&&.OOOOOOOOOOOOO",
+ "OOOOOOOOOOOo==============X*OOOOOOOOOOOO",
+ "OOOOOOOOOOoO===X====X=====X**OOOOOOOOOOO",
+ "OOOOOOOOOO&============X===% $OOOOOOOOOO",
+ "OOOOOOOOOoo===*%====***%===%* OOOOOOOOOO",
+ "OOOOOOOOOoO==% %===* %==X* @OOOOOOOOO",
+ "OOOOOOOOO&===% *==% X==**===% $OOOOOOOOO",
+ "OOOOOOOOoo===% %==% ===% ===X OOOOOOOOO",
+ "OOOOOOOOoO==== *== *==== *==X* @OOOOOOOO",
+ "OOOOOOOO&===== %== %==== %===% $OOOOOOOO",
+ "OOOOOOOoo===== *== *==== *===%* OOOOOOOO",
+ "OOOOOOOoO===== %==% ===* ====X* @OOOOOOO",
+ "OOOOOOO&===X== *==% X==**=====% $OOOOOOO",
+ "OOOOOOoo===== *==* %=====X OOOOOOO",
+ "OOOOOOoO=====*%%X===*%*X======%* @OOOOOO",
+ "OOOOOOo====================X===* $OOOOOO",
+ "OOOOOOO=%X%XXXX%XXXXXXXXX%X=%X% OOOOOO",
+ "OOOOOOO.=********************** OOOOOO",
+ "OOOOOOOOO OOOOOO",
+ "OOOOOOOOO. @OOOOOO",
+ "OOOOOOOOOOOoOOoOoOoOoOoOoOOoOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *int_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 12 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #303030",
+ "* c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOO+#.X.##@#OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOO+##@X#O++.#+#.##OOOOOOOOOOOOOOOO",
+ "OOOOOO+#Xo++#X#%#+##o#O#.#+OOOOOOOOOOOOO",
+ "OOOOO.Xo#+#++##+.XX#..+.+..XOOOOOOOOOOOO",
+ "OOOO++.+O.+O##+#.X###..OX#.+X+OOOOOOOOOO",
+ "OOOO#+####O#O##o##+###X#+#+.#..OOOOOOOOO",
+ "OOO.+#o+#+X++++#.#O+#+#X.#+X++X+OOOOOOOO",
+ "OOO.+.+..X+.##X++#++#..+XX#+#X+..OOOOOOO",
+ "OOO##....O+#++#+.++#+X+#+#X..+#+#OOOOOOO",
+ "OOO++#+.+.#+#O+X#X#XX#.++##.#++.X$OOOOOO",
+ "OOOO#+#+.+++#++.+++##+X###+X+X##+&&OOOOO",
+ "OOOO#..#OO#+.##o###.+..++.+#X+#+#& @OOOO",
+ "OOOO.#.#O+#+#O.+++.###+##++###+.# $OOOO",
+ "OOOOOXX+#+#+#o..X##++#+..##.#+### &OOOO",
+ "OOOOOOX#.#X+#+#+#+.#+..+####XX%X% OOOO",
+ "OOOOOOO.%%X.#+#+#.++#+#+#+.%++*+% &OOOO",
+ "OOOOOOOO@& &##+#+.O####.+XXX%%%#% $OOOO",
+ "OOOOOOOOOO. %X.+.#+++XXX*.+++#% $OOOO",
+ "OOOOOOOOOOO@& %%X..#XXX.####%%& $OOOO",
+ "OOOOOOOOOOOOO@$ &XX%%%*.#X%###*& OOOOO",
+ "OOOOOOOOOOOOOOOOO+%%%*%%#.+.#*& @OOOOO",
+ "OOOOOOOOOOOOOOOOOO*%%%*.X##XX& OOOOOO",
+ "OOOOOOOOOOOOOOOOOOOX%%%%X*%& @OOOOOO",
+ "OOOOOOOOOOOOOOOOOOOX%%%%% &@OOOOOOO",
+ "OOOOOOOOOOOOOOOOOOO*%%%X& &$$OOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOO+%%%* .OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOO+*%%% OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO*%%& $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO*%%% $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO+%%& $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOoOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *lawful_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 10 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #606060",
+ "$ c #FFFFFF",
+ "% c #303030",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOo$$$$$$oOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOO$$o$$o$$$$$OOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOo$$$$$$$o$$ooOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOO$o$$$o$$$$$$$oOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOo$$$$+ .o$$$$$oOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOo$$$+%OOOO$o$$$oOOOOOOO",
+ "OOOOOOOOOOOOOOOOO$$o$X@OOOOo$$$ooOOOOOOO",
+ "OOOOOOOOOOOOOOOOO$$$$%OOOOOo$$$..OOOOOOO",
+ "OOOOOOOOOOOOOOOOO$$$$@OOOOo$$oo##OOOOOOO",
+ "OOOOOOOOOOOOOOOO+$$o$$ooOoo$$$o OOOOOOOO",
+ "OOOOOOOOOOOOOOOOO$$$$$$$o$$$$o#%OOOOOOOO",
+ "OOOOOOOOOOOOOOOO+$$o$$o$$$$$o@%OOOOOOOOO",
+ "OOOOOOOOOOOOOOOOO$$$$$$$$o$o.%OOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOo$$$o$$oo@#%OOOOOOOOOOO",
+ "OOOOOOOOoooooo$$$$$$$$$$$% %OOOOOOOOOOOO",
+ "OOOOOOO$$$$$$$$$$$$o$$o$$$$$$$oOOOOOOOOO",
+ "OOOOOO$$$$$$$$$o$$$$$$$$$$$$o$$oOOOOOOOO",
+ "OOOOOO$$o$ooooo##+o$$+##@oo$$$$$oOOOOOOO",
+ "OOOOOOo$$#% %#$$$+%##%%#ooo$O#OOOOOOO",
+ "OOOOOOOo@##OOOOO+$$$##OOOO#%%##%@OOOOOOO",
+ "OOOOOOOOOOOOOOOOo$$$##OOOOOOO##@OOOOOOOO",
+ "OOOOOOOOOOOOOOOOo$$o##OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO$$oo OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO+$$$o OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO$$$##OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO$o$##OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO$$$##OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo$$$##OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo$$o%@OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo$$o OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO$$oo OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO$$$o OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO$$$##OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo$$##OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO$$o##OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo$# @OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO.#@OOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *mod_enc_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #303030",
+ "= c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOoO+OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOoOXX==OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoO=OO+==OOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoXOO.*$=$OOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO=+# *.X *OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO==.OO=+@ $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOXO==.OO $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOO+=@$@* @OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOo&&&&&&&&&oXOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOO+&=========X%@OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOO&=====X====% @OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOoO==X=======X* OOOOOOOOOOOOO",
+ "OOOOOOOOOOOO&====*%*%*===* $OOOOOOOOOOOO",
+ "OOOOOOOOOOO+&===X ===% *OOOOOOOOOOOO",
+ "OOOOOOOOOOOoO===**=======X* OOOOOOOOOOOO",
+ "OOOOOOOOOOO&===% %=======X% $OOOOOOOOOOO",
+ "OOOOOOOOOOO&===% %*%%=====% *OOOOOOOOOOO",
+ "OOOOOOOOOOoO===* ====X* OOOOOOOOOOO",
+ "OOOOOOOOOO&=========* X===X% $OOOOOOOOOO",
+ "OOOOOOOOO+&=========% *====% *OOOOOOOOOO",
+ "OOOOOOOOOoO===% %=== %====%* OOOOOOOOOO",
+ "OOOOOOOOO&====* *==X===% $OOOOOOOOO",
+ "OOOOOOOOO&======*%*%X=======% *OOOOOOOOO",
+ "OOOOOOOOOo==X===============% OOOOOOOOO",
+ "OOOOOOOOO=XXXXXXXXXX%X%X%X%%% $OOOOOOOO",
+ "OOOOOOOOOO=%**************** $OOOOOOOO",
+ "OOOOOOOOOOO$ $OOOOOOOO",
+ "OOOOOOOOOOOO* *OOOOOOOOO",
+ "OOOOOOOOOOOOOoOOoOoOoOoOoOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *neutral_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 14 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #00B6FF",
+ "= c #303030",
+ "- c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO.------.OOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOO-+O&o.-----OOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOO+-&o--------.OOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOO-oo----------+OOOOOOOO",
+ "OOOOOOOOOOOOOOOOO+-&--% #-------OOOOOOOO",
+ "OOOOOOOOOOOOOOOOO-OO-X=OOO.-----+OOOOOOO",
+ "OOOOOOOOOOOOOOOOO-oO-%#OOOO.-----OOOOOOO",
+ "OOOOOOOOOOOOOOOOO--O-=OOOOO+---X#OOOOOOO",
+ "OOOOOOOOOOOOOOOOO-oO-XOOOO+OO--=$OOOOOOO",
+ "OOOOOOOOOOOOOOOOO-OO--++OO-&--- OOOOOOOO",
+ "OOOOOOOOOOOOOOOOO-OO-----+oo--%=OOOOOOOO",
+ "OOOOOOOOOOOOOOOOO--O--+o&&o--%=OOOOOOOOO",
+ "OOOOOOOOOOOOOOOOO-oo*-------%=OOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOO-oO------%%=OOOOOOOOOOO",
+ "OOOOOOOO+.+-+.---O&------= =OOOOOOOOOOOO",
+ "OOOOOO+-oo&&&&&&&&------------.OOOOOOOOO",
+ "OOOOOO---------------X-----O&Oo-OOOOOOOO",
+ "OOOOOO---------%=%---%%=%----OO-.OOOOOOO",
+ "OOOOOO---== =%---%=%%===----%XOOOOOOO",
+ "OOOOOOO-#$%OOOOOO-+-%$OOOO%===%=@OOOOOOO",
+ "OOOOOOOOOOOOOOOO.-&-=%OOOOOOO%%#OOOOOOOO",
+ "OOOOOOOOOOOOOOOo-O+-%$OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO-oO- OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO-OO- OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO-&-%%OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO-&-%$OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO-&-=$OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO--o-%$OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO+-&- .OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO-Oo- OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO-OO- OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO-oO- OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO-OO%%OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO-o-%$OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO---%$OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO--% #OOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOX$@OOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *ovr_enc_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #303030",
+ "= c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOoO+=+OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOo=#===+OOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo=.OO@X=OOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo#OO* #X @OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO+=.XX+=#* @OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO+=O=.=OO $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOO#.=+OO@ $OOOOOOOOOOOOOO",
+ "OOOOOOOOOooooooooo&O.#+#XooooOOOOOOOOOOO",
+ "OOOOOOOOO&OOoOoOoOOOOOOOOOoO%@OOOOOOOOOO",
+ "OOOOOOOOoO==================X*@OOOOOOOOO",
+ "OOOOOOOO&===================X% @OOOOOOOO",
+ "OOOOOOOO&==%*%*%*%*%*%*%*%*==% *OOOOOOOO",
+ "OOOOOOOoO==%*%%*%%*%%*%*%*%==X* OOOOOOOO",
+ "OOOOOOO&======================* $OOOOOOO",
+ "OOOOOO+&=== ===% *OOOOOOO",
+ "OOOOOOoO======================X* OOOOOOO",
+ "OOOOOO&=======================X% $OOOOOO",
+ "OOOOOOo========================% *OOOOOO",
+ "OOOOOoO===*%X=====%%======%%===X* OOOOOO",
+ "OOOOO&==% %==% *==== %==* $OOOOO",
+ "OOOOO&== *==**== **% *=X% %%* ==% *OOOOO",
+ "OOOOoO==%%==* =* ===% == %=== %=X* OOOOO",
+ "OOOO&=======% =**===% %X %X==* =X% $OOOO",
+ "OOOO&======% %= %==== %% ====* ==% *OOOO",
+ "OOOoO=====% *== *==== %* ====% ==X* OOOO",
+ "OOO&====XX *===**===% X% X=== *===* $OOO",
+ "OO+&====X *====* ===% == *=== %===% *OOO",
+ "OOoO===% %*%*== *** %==% %** ====X* OOO",
+ "OO&====% ==X *====* %====X% $OO",
+ "OO&================================% *OO",
+ "OOo===X============================% OO",
+ "OO=XXXXXXXXXXXX%XXXX%X%X%XXXXX%X%X%% $O",
+ "OOO=%****************************** $O",
+ "OOOO$ $O",
+ "OOOOO* *OO",
+ "OOOOOOOOOOoOOoOOoOOoOOoOOoOOoOOoOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *satiated_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 23 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #F8B090",
+ "o c #5C7A7A",
+ "O c #D4D4D4",
+ "+ c #F87A24",
+ "@ c #7C3400",
+ "# c None",
+ "$ c #B0B0B0",
+ "% c #F89E6C",
+ "& c #914700",
+ "* c #B64700",
+ "= c #909090",
+ "- c #788C8C",
+ "; c #606060",
+ ": c #406868",
+ "> c #FFFFFF",
+ ", c #CEAA90",
+ "< c #DADAB6",
+ "1 c #303030",
+ "2 c #FFB691",
+ "3 c #6C91B6",
+ "4 c #F88C48",
+/* pixels */
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "################<<<<<<<<################",
+ "##############<<<<<<<<<<$#$$$###########",
+ "############<<<<<<<<<<$:31:3:###########",
+ "###########<<<<<<%42<<#:3:133-##########",
+ "##########<<<<<%<<;;=o$131:33;##########",
+ "#########<<<<<<,1 ::31:33;,#########",
+ "########<<<<<<, =<<<<.13:133;<=########",
+ "########<<<%2, 1<<<<<<#333:33;<,=#######",
+ "#######<<<<X$ 1<<422<<<33313--<<;#######",
+ "#######<<<<<1 <<<<<%<<<#31333;<<-=######",
+ "#######<<<<< -<<+%,%<<%<31.3-;<<,;######",
+ "#######<<<2- <<<+&<%<2+<3o<33o<<<1######",
+ "######O<<<%; <<<&,4=4%<<-o<3-=<<< ######",
+ "#######<<<%; <2+4,&*,,,<3o<33o<<< ######",
+ "######<<<<<-1<<<<,4<4<<<.;<3-1<<< ######",
+ "#######<<<<<;,<<4,,4X<<#3-<33o<<, ######",
+ "######O<<<<<;.<<<,&%<2<$3:>3-=<<o1######",
+ "#######<<<<<<=,<<<<<<4<#31>33;<<@o######",
+ "#######O<<<<<,#<<<<<<<<.3:<3-;<, =######",
+ "########<<<<2<<<<<<<<<>#31<33o<11#######",
+ "########O<<<<44<>O>>>>>#3:<3.;- =#######",
+ "##########<<<4<<<<><><<$3:<331 ;<#######",
+ "##########<<<<<<<%2<<<<$3:<33 1#########",
+ "###########O,<<<<<<<<<<#31<331##########",
+ "#############.<<<<<<<<<$3:133;##########",
+ "##############=;=,<<<<,o 1;;=##########",
+ "###############<=;1 1;=##############",
+ "#################<#<O#<#################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################",
+ "########################################"
+};
+
+/* XPM */
+static const char *sick_fp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 30 1",
+/* colors */
+ " c #F85848",
+ ". c #949E9E",
+ "X c #F8B090",
+ "o c #5C7A7A",
+ "O c #009100",
+ "+ c #6CFF00",
+ "@ c #E00028",
+ "# c #D4D4D4",
+ "$ c #FF6C00",
+ "% c #F87A24",
+ "& c #7C3400",
+ "* c None",
+ "= c #B0B0B0",
+ "- c #F89E6C",
+ "; c #FF0000",
+ ": c #914700",
+ "> c #B64700",
+ ", c #909090",
+ "< c #788C8C",
+ "1 c #606060",
+ "2 c #406868",
+ "3 c #FFFFFF",
+ "4 c #CEAA90",
+ "5 c #DADAB6",
+ "6 c #303030",
+ "7 c #F86800",
+ "8 c #FFB691",
+ "9 c #6C91B6",
+ "0 c #F88C48",
+ "q c #0000FF",
+/* pixels */
+ "****************************************",
+ "*************#333333333#****************",
+ "***********##33333#333333#**************",
+ "**********#33333#33333#33*==************",
+ "*********#33##33-;-3#3333399************",
+ "********#33#33#3-@ 33333#33=.***********",
+ "********#3*#33-;;;;;-33333#99***********",
+ "*******#3*3333-;;;;@ 33#333#9=**********",
+ "*******#333#33#3-;-33#*##33399**********",
+ "******#3#3333333-@-#333#9933*9=*********",
+ "******#333#33#3333333#333*9999=*********",
+ "******#333333333#3#33333333*999*********",
+ "******#3#33#33333333#33#3333#9=*********",
+ "******#333334>&&:&&>::44,3#33#9*********",
+ "******#33*::&41OOO6:4O 0::4433=*********",
+ "******#3:>,0:O0O1O+O:O<O4-:-:1#*********",
+ "******#0&>XO,O+2+OOo4<+1104:>:#*********",
+ "******.&:1OOO,14X2O48:O80,440:,*********",
+ "******4::>OOO%8-X4O4%O,84+O0X&>=********",
+ "******.::>,O 99*X+<$,+.o*1O4&0:*********",
+ "******>:0&4O5qq9#10OO3qq9,+X:1:*********",
+ "****=>,,::,O4qq9X+O>O-qq9O2X0,>*********",
+ "******4:>OOOO48882OOOO+4OOO07*4*********",
+ "******4*,4OO+OXX3O<OOOOOOOO:-***********",
+ "********0><OO1+O,+1+2OOOOOO%4=**********",
+ "********47+OO1O12O:<14OO1OO7=***********",
+ "*********-11OO+,+<1004OOOO:-************",
+ "**********:OOOOOO-+,4O+OOO%4************",
+ "**********04O4O,-OOOOO<OOO>5************",
+ "*********=0%,OO,>:>>O +1OO4*************",
+ "**********=%+OO:::1:::6+:7**************",
+ "***********7&OO:O+O,O1OO+1**************",
+ "***********40OO,O4:OOO11O<5*************",
+ "**********=4 +O1O2+O2+O0O***************",
+ "************72O+1+21-OOO%5**************",
+ "************0%1OOOO+O+174***************",
+ "*************%%O,OO1407-=***************",
+ "**************-$>%0%:74*****************",
+ "****************54044*=*****************",
+ "*****************=*=********************"
+};
+
+/* XPM */
+static const char *sick_il_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 23 1",
+/* colors */
+ " c #F85848",
+ ". c #949E9E",
+ "X c #F8B090",
+ "o c #E00028",
+ "O c #D4D4D4",
+ "+ c #F87A24",
+ "@ c #7C3400",
+ "# c None",
+ "$ c #B0B0B0",
+ "% c #F89E6C",
+ "& c #FF0000",
+ "* c #914700",
+ "= c #B64700",
+ "- c #909090",
+ "; c #606060",
+ ": c #FFFFFF",
+ "> c #CEAA90",
+ ", c #DADAB6",
+ "< c #F86800",
+ "1 c #FFB691",
+ "2 c #6C91B6",
+ "3 c #F88C48",
+ "4 c #0000FF",
+/* pixels */
+ "########################################",
+ "#############O:::::::::O################",
+ "###########OO:::::O::::::O##############",
+ "##########O:::::O:::::O::#$$############",
+ "#########O::OO::%&%:O:::::22############",
+ "########O::O::O:%o :::::O::$.###########",
+ "########O:#O::%&&&&&%:::::O22###########",
+ "#######O:#::::%&&&&o ::O:::O2$##########",
+ "#######O:::O::O:%&%::O#OO:::22##########",
+ "######O:O:::::::%o%O:::O22::#2$#########",
+ "######O:::O::O:::::::O:::#2222$#########",
+ "######O:::::::::O:O::::::::#222#########",
+ "######O:O::O::::::::O::O::::O2$#########",
+ "######O:::::>=@@=**=**>>-:O::O2#########",
+ "######O::#**@3>%* ;=>=3;<@>>::$#########",
+ "######O:** >=>XXXX1X >>+>%*%*;O#########",
+ "######O3@*,X%XXXXXXX>X%XX >*=*O#########",
+ "######.@@3XXXXXXXXXXXXXXX>X>3*-#########",
+ "######>***>X% >XXXXX3XXXXXX%>*=>########",
+ "######.***> 22#XXX<%X22#XXX@+;#########",
+ "######=*3@X>O442OXX<X:442OXX=;=#########",
+ "####$=--;=X1,442XXX<X1442XXX3-*#########",
+ "######>==%XX11111O1+%X111XX%<#>#########",
+ "######.,;XXXXXX1O1X%3XXXXX%+3###########",
+ "########3=XXXXXX:XXXXXXXXX+<>$##########",
+ "########>+XXXXXX%-3->XXXX%+<############",
+ "#########%3XXXXXX>- -%XXX%<%$###########",
+ "#########$<XXXXXX%X%XXXX%3<>############",
+ "##########+%XXXXXXXXXXXX%+<#############",
+ "##########%3XXX>=****3XX%<%#############",
+ "##########>+XXX**=3-*@3>3+##############",
+ "###########<%XX >XX%X;%X3+##############",
+ "###########%3XX>XX++XXXX<%$#############",
+ "##########$>+XXXXXXXXXXX<###############",
+ "############<%XXXXXXXXX3+###############",
+ "###########$%+XXXXXXXX%<>###############",
+ "#############++XXXXXX%<%$###############",
+ "#############$%<<3333<%#################",
+ "#################%3>>$##################",
+ "#################$#$####################"
+};
+
+/* XPM */
+static const char *slt_enc_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #FFFFFF",
+ "* c #303030",
+ "= c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOoO+OOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOoOXX==OOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoO=OO+==OOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOoXOO.*$=$OOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO=+# *.X *OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOO==.OO=+@ $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOXO==.OO $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOO+=@$@* @OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOO&&&&&&&X @OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOo======X*OOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOoO======X**OOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOO&====X===% $OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOoo==%* %==%* OOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOoO=% % =X* @OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOO&==**==% %=% $OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOoo==%%==* %=X OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOoO=====* X==X* @OOOOOOOOOOOO",
+ "OOOOOOOOOOOO&=====* %====% $OOOOOOOOOOOO",
+ "OOOOOOOOOOOoo==== X=====%* OOOOOOOOOOOO",
+ "OOOOOOOOOOOo+===* *%*%%==X* @OOOOOOOOOOO",
+ "OOOOOOOOOOO&==== %===% $OOOOOOOOOOO",
+ "OOOOOOOOOOO&==============% OOOOOOOOOOO",
+ "OOOOOOOOOOO==============X% @OOOOOOOOOO",
+ "OOOOOOOOOOO+%%%%%%%%%%%%%% $OOOOOOOOOO",
+ "OOOOOOOOOOOOO% $OOOOOOOOOO",
+ "OOOOOOOOOOOOO@ @OOOOOOOOOO",
+ "OOOOOOOOOOOOOO@$$$$$$$$$$$$$@OOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *str_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 17 1",
+/* colors */
+ " c #000000",
+ ". c #F8B090",
+ "X c #5C7A7A",
+ "o c #F87A24",
+ "O c #7C3400",
+ "+ c None",
+ "@ c #B0B0B0",
+ "# c #F89E6C",
+ "$ c #B64700",
+ "% c #909090",
+ "& c #606060",
+ "* c #CEAA90",
+ "= c #DADAB6",
+ "- c #303030",
+ "; c #F86800",
+ ": c #FFB691",
+ "> c #F88C48",
+/* pixels */
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++",
+ "+++++++++++++++++++*>*>#++++++++++++++++",
+ "++++++++++++++++*#o>..*#o*++++++++++++++",
+ "+++++++++++++++o#.#>.....o++++++++++++++",
+ "+++++++++++++++;>;#.o.>..#$X++++++++++++",
+ "+++++++++++++++o#>.o.>:...o %++++++++++",
+ "++++++++++++++o##>>#o##>..#O -++++++++++",
+ "++++++++++++++>#.oo#>..>...O ++++++++++",
+ "++++++++++++++*o##.>>;o#...o ++++++++++",
+ "+++++++++++++++*;o#........>- &+++++++++",
+ "+++++++++++++++++#>>;o......O -+++++++++",
+ "+++++++++++++++++@+@+o>.....$ +++++++++",
+ "+++++++++++++++++++++*;.#...>- %++++++++",
+ "++++++++++++++++++++++;>o....$ &++++++++",
+ "++++++++++++++++++++++#>>....>- %+++++++",
+ "+++++++++++++++++++++++;#>....; -+++++++",
+ "+++++++++++++++++++++++o#>....>O %++++++",
+ "+++++++++++++++++++++++*>o.....; -++++++",
+ "+++++++++++++#>**+++++++;#.....>O %+++++",
+ "+o#+++++++*o;>>>>o#+++++o##.....; -+++++",
+ "+:#o*++++oo#..*..*>;*+++#>#.....>O %++++",
+ "+:=#o#+*;>.:==:....#;*++@o.......; &++++",
+ "+::..>;o#.=::::......o*++;.......>O ++++",
+ "+.....#o.:.=:.........o#+;........$ ++++",
+ "+......#o..:...........#o;>.......o &+++",
+ "+........#..............*>o......:o- +++",
+ "+..................#o>#...#o.......O +++",
+ "+...............>o>#.......#>......O &++",
+ "+..................................o -++",
+ "+..................................> ++",
+ "+..................................> ++",
+ "+.................................#$ &+",
+ "+................................>$ &+",
+ "+..#>$o>#..............#>;>>>oOOO- ++",
+ "+...#O OOOOO$>>>>>>>$OO %++",
+ "+...o -&&++++",
+ "+..#O -&&%++++++++++",
+ "++++++++++++++++++++++++++++++++++++++++"
+};
+
+/* XPM */
+static const char *stunned_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 12 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c #D4D4D4",
+ "O c None",
+ "+ c #B0B0B0",
+ "@ c #909090",
+ "# c #788C8C",
+ "$ c #606060",
+ "% c #406868",
+ "& c #303030",
+ "* c #6C91B6",
+/* pixels */
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+ "OOOOOOOOOOOO&$OOOO@OOO@@OO@OOOOOOOOOOOOO",
+ "OOOOOOOOOOO@& $OO@&&$$@ O@$$OOOOOOOOOOOO",
+ "OOOOOOOOOOOO$$ @@@$ &&OOO@$OOOOOOOOOOOO",
+ "OOOOOOOOOOOOO@@&$$$$&O$OO$O &@O@OOOOOOOO",
+ "OOOOOO@@@@@@OO@$$O$&$@@OO& &&$O&OOOOOOO",
+ "OOOOOO&&&& & $ &&@$ &O@$& &&&$ & $OOOOOO",
+ "OOOOOO$&OO &&&$ $$ $& $$&$&&&OOOOOOO",
+ "OOOOOO@@O@$ &+ # &O$$ $$&O@OOOOO",
+ "OOOOOOOO@X%$ %& %% & && $$@@@@OOOO",
+ "OOOOOOO+$$@+ &%%%&%& & &@OOO&&OOO",
+ "OOOOOO.Xo%+ &&%%%%%&& & OO@$&&OOO",
+ "OOOOO++ $$&&$ && %&%%& &O@&$&OOOO",
+ "OOOOO####$ X&&& && &%& & &&OOOO",
+ "OOOO++#.+## $&# %& & & &$ OOOO",
+ "OOOO#+++.@&%&& &#&%& & $ @OOOOOO",
+ "OOOO##....#+$#@%#& $%$&@&$$% & X##$@OOOO",
+ "OOOO.+#+.+@#+#+$&$X#%&%.+& %&#++.$&OOOOO",
+ "OOOOO#+#+.+++#$$%&++&X+X#&#+&+&##+ &OOOO",
+ "OOOOO#..#OO#+@%#o##X.@..++.+$&+#+#& @OOO",
+ "OOOOO+#.#O+#+#O@++@$$##+##++###+.#& $OOO",
+ "OOOOOOXX+#+#+#o.@%&$++#+..##.#+### &OOO",
+ "OOOOOOOX#.#X+#+#+##&#+..+####%XX%% OOO",
+ "OOOOOOOO+%%X.#+#+#.++#+#+#+.X++*.% &OOO",
+ "OOOOOOOOO@& &##+#+.O####.+XX%%%%#% $OOO",
+ "OOOOOOOOOOO. %X.+.#+++XXX*.+++#X $OOO",
+ "OOOOOOOOOOOO@& %%X..#X%#.####%X& $OOO",
+ "OOOOOOOOOOOOOO@$ &XX%%%*.#X%###*& OOOO",
+ "OOOOOOOOOOOOOOOOOO+%%%*%%#.+.#*& @OOOO",
+ "OOOOOOOOOOOOOOOOOOO*%%%**X##X%& OOOOO",
+ "OOOOOOOOOOOOOOOOOOOOX%%%%X*X& @OOOOO",
+ "OOOOOOOOOOOOOOOOOOOOX%%%%X &@OOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO*%%%X& &$$OOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOO+X%%* @OOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOOX%%& OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOO*%%% $OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOO*%%% $OOOOOOOOOOOOO",
+ "OOOOOOOOOOOOOOOOOOOOO.X%& $OOOOOOOOOOOOO"
+};
+
+/* XPM */
+static const char *wis_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c None",
+ "O c #B0B0B0",
+ "+ c #909090",
+ "@ c #788C8C",
+ "# c #606060",
+ "$ c #406868",
+ "% c #FFFFFF",
+ "& c #303030",
+ "* c #6C91B6",
+ "= c #0000FF",
+/* pixels */
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooo+#& &#oooooooooooooooooooo",
+ "oooooooooooo+& #oooooooooooooooooo",
+ "ooooooooooo+ &====&& &ooooooooooooooooo",
+ "oooooooooo+ &==& ===%& +ooooooooooooooo",
+ "ooooooooo+&%=== ===%%o&&oooooooooooooo",
+ "oooooooo.&%%===& ===%o& #+ooooooooooo",
+ "oooo&###&&%%*=======$#&ooo#& #+oooooooo",
+ "ooooo###o+&X$=====& #oo##oooo+######oooo",
+ "oooooooooooo######@oo##ooooooooooooooooo",
+ "oooooooooooooOoOoOo##ooooooooooooooooooo",
+ "ooooooooooooooooo+#+ooo+&#oooooooooooooo",
+ "ooooooooooooooooooooooo#oooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo"
+};
+
+/* XPM */
+static const char *nothing_xpm[] = {
+/* width height ncolors chars_per_pixel */
+ "40 40 13 1",
+/* colors */
+ " c #000000",
+ ". c #949E9E",
+ "X c #5C7A7A",
+ "o c None",
+ "O c #B0B0B0",
+ "+ c #909090",
+ "@ c #788C8C",
+ "# c #606060",
+ "$ c #406868",
+ "% c #FFFFFF",
+ "& c #303030",
+ "* c #6C91B6",
+ "= c #0000FF",
+/* pixels */
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo",
+ "oooooooooooooooooooooooooooooooooooooooo"
+};
diff --git a/patches/gtk2/gen_marsh_input b/patches/gtk2/gen_marsh_input
new file mode 100644
index 0000000..63229e7
--- /dev/null
+++ b/patches/gtk2/gen_marsh_input
@@ -0,0 +1,5 @@
+VOID:INT,INT,INT
+VOID:INT,STRING
+VOID:INT,POINTER,CHAR,CHAR,INT,STRING,BOOLEAN
+INT:INT,POINTER
+DOUBLE:DOUBLE
diff --git a/patches/gtk2/gkt2hackrc b/patches/gtk2/gkt2hackrc
new file mode 100644
index 0000000..2214245
--- /dev/null
+++ b/patches/gtk2/gkt2hackrc
@@ -0,0 +1,27 @@
+# pixmap_path "<dir 1>:<dir 2>:<dir 3>:..."
+#
+pixmap_path "/usr/local/games/lib/nethackdir:/var/install/usr/local/games/lib/nethackdir"
+
+style "map"
+{
+ bg_pixmap[NORMAL] = "mapbg.xpm"
+ fg[NORMAL] = { 1.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.3, 0.3, 0.3 }
+ bg[SELECTED] = { 0.5, 0.5, 0.5 }
+ bg[SELECTED] = { 0.5, 0.5, 0.5 }
+}
+
+style "text"
+{
+ font_name = "Sans 8"
+}
+
+style "status"
+{
+ font_name = "Sans 8"
+}
+
+
+widget "*status window.*" style "status"
+widget "*message window.*" style "text"
+widget "*map window.*" style "map"
diff --git a/patches/gtk2/gold24.png b/patches/gtk2/gold24.png
new file mode 100644
index 0000000..2f70d48
--- /dev/null
+++ b/patches/gtk2/gold24.png
Binary files differ
diff --git a/patches/gtk2/gtk2hack.png b/patches/gtk2/gtk2hack.png
new file mode 100644
index 0000000..b1dbc7d
--- /dev/null
+++ b/patches/gtk2/gtk2hack.png
Binary files differ
diff --git a/patches/gtk2/icons/Makefile b/patches/gtk2/icons/Makefile
new file mode 100644
index 0000000..b2e777c
--- /dev/null
+++ b/patches/gtk2/icons/Makefile
@@ -0,0 +1,55 @@
+
+# Makefile to create the stock icon image data
+# using pixbuf-csource tool
+
+
+GDK_PIXBUF_CSOURCE = gdk-pixbuf-csource
+
+STOCK_IMAGES = \
+ stock_down_arrow_24.png \
+ stock_down_left_arrow_24.png \
+ stock_down_right_arrow_24.png \
+ stock_eat_16.png \
+ stock_eat_24.png \
+ stock_inv_16.png \
+ stock_inv_24.png \
+ stock-kick-16.png \
+ stock-kick-24.png \
+ stock_left_arrow_24.png \
+ stock-open-16.png \
+ stock-open-24.png \
+ stock_right_arrow_24.png \
+ stock_self_24.png \
+ stock_throw_16.png \
+ stock_throw_24.png \
+ stock_up_arrow_24.png \
+ stock_up_left_arrow_24.png \
+ stock_up_right_arrow_24.png \
+ stock-zap-16.png \
+ stock-zap-24.png \
+ stock_spellbook_16.png \
+ stock_spellbook_24.png \
+ stock_whatshere_16.png \
+ stock_whatshere_24.png \
+ stock_whatsthere_16.png \
+ stock_whatsthere_24.png \
+ stock_search_16.png \
+ stock_search_24.png
+
+
+all: hack-stock-pixbufs.h
+
+stock-icons.list: $(STOCK_IMAGES)
+ ( rm -f $@; \
+ for image in $(STOCK_IMAGES); do \
+ echo $$image | \
+ sed -e 's|.*/||' -e 's|-|_|g' -e 's|\.png$$||' >> $@; \
+ echo " $$image" >> $@; \
+ done )
+
+
+hack-stock-pixbufs.h: stock-icons.list
+ $(GDK_PIXBUF_CSOURCE) --raw --build-list `cat stock-icons.list` > $(@F)
+
+clean:
+ rm stock-icons.list hack-stock-pixbufs.h
diff --git a/patches/gtk2/icons/hack-stock-pixbufs.h b/patches/gtk2/icons/hack-stock-pixbufs.h
new file mode 100644
index 0000000..5ef2788
--- /dev/null
+++ b/patches/gtk2/icons/hack-stock-pixbufs.h
@@ -0,0 +1,2664 @@
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_down_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_down_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_down_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\2\0\0\0\2"
+ "\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\14\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\14\0\0\0\5\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\1\0\0\0\14\0\0\0\40\0\0\0+\0\0\0-\0\0\0-\0\0\0-\0"
+ "\0\0-\0\0\0,\0\0\0+\0\0\0\40\0\0\0\14\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\2\0\0\0\20\0\0\0+\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\2\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\2\0\0\0\21\0\0\0-\0\0\0\377AV9\377JcB\377JcB\377TqP\377g\214c"
+ "\377i\202g\377~\253x\377\0\0\0\377\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\2\0\0\0\21\0\0\0-\0\0\0\377;P5\377[yP\377[yP\377\206\257\202\377\255"
+ "\310\253\377\251\304\247\377\262\311\260\377\0\0\0\377\0\0\0\2\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0-\0\0\0\377;P5\377[yP\377[yP\377"
+ "\210\260\205\377\256\307\254\377\256\307\254\377\273\320\271\377\0\0"
+ "\0\377\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\2\0\0\0\4\0\0\0\23\0\0\0-\0\0\0\377"
+ ";P5\377[yP\377[yP\377\207\260\203\377\260\307\256\377\252\305\250\377"
+ "\273\317\272\377\0\0\0\377\0\0\0\4\0\0\0\2\0\0\0\1\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\13\0\0\0\20\0\0\0\22\0\0"
+ "\0\35\0\0\0""1\0\0\0\377;P5\377[yP\377[yP\377\207\257\204\377\256\307"
+ "\254\377\252\305\250\377\271\316\267\377\0\0\0\377\0\0\0\22\0\0\0\20"
+ "\0\0\0\13\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\10\0"
+ "\0\0\30\0\0\0&\0\0\0,\0\0\0""1\0\0\0""9\0\0\0\377;P5\377[yP\377[yP\377"
+ "\210\257\204\377\256\307\254\377\252\305\250\377\272\321\272\377\0\0"
+ "\0\377\0\0\0,\0\0\0&\0\0\0\30\0\0\0\10\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\5\0\0\0\23\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377;P5\377[yP\377[yP\377\207\260\203\377\252\307\250\377\256\307"
+ "\254\377\271\316\267\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+ "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0"
+ "\25\0\0\0\377JcB\377JcB\377JcB\377JcB\377[yP\377[yP\377\207\257\204\377"
+ "\255\310\253\377\260\311\256\377\267\314\265\377\263\304\263\377\266"
+ "\307\266\377\271\320\271\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377"
+ "[yP\377[yP\377[yP\377[yP\377\207\257\204\377\255\306\253\377\260\311"
+ "\260\377\265\316\265\377\261\311\260\377\315\336\313\377\0\0\0\377\0"
+ "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377[yP\377[yP\377[yP\377\207"
+ "\257\204\377\255\306\253\377\263\312\261\377\264\313\262\377\315\336"
+ "\313\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0"
+ "\377<R5\377[yP\377[yP\377\207\257\204\377\260\307\256\377\252\307\250"
+ "\377\315\336\313\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377[yP\377\207\257\204\377\255\310"
+ "\253\377\315\336\313\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377\205\256"
+ "\201\377\317\337\314\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\23\0\0\0\377"
+ "\233\255\232\377---\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0\11\0\0\0"
+ "\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_down_left_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_down_left_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_down_left_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\3\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\3\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377%2#\377\0\0\0\357\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377R]Q\377\214\260\210\377DUB\377"
+ "\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\377\377\377"
+ "\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+ "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377V`V\377\266\314\264\377\252"
+ "\304\250\377~\235|\377=T;\377\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\1\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377S]S\377\0\0\0\377\0\0\0\0\0\0\0\377V_U\377\267\315\266"
+ "\377\255\307\254\377\255\306\253\377\241\300\237\377e\206a\3770A,\377"
+ "\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\210\227\210\377\200\214\200"
+ "\377\0\0\0\377V`U\377\266\315\265\377\253\306\251\377\255\306\253\377"
+ "\243\300\240\377\207\257\204\377g\210^\377OjF\377.=)\377\0\0\0\360\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\264\314\263\377\265\310\264\377\231\251\230\377"
+ "\267\314\265\377\254\306\253\377\254\306\252\377\242\300\240\377\207"
+ "\257\203\377h\211_\377[yP\377WtL\377AW:\377\23\31\20\377\0\0\0\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\264\314\263\377\264\314\263\377\265\314\263\377\260\310"
+ "\256\377\253\306\251\377\241\300\237\377\207\257\204\377g\210_\377[y"
+ "P\377WtL\377@W9\377\33%\30\377\0\0\0\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\263\303"
+ "\262\377\263\313\262\377\260\311\260\377\256\307\254\377\241\300\236"
+ "\377\207\260\203\377h\210_\377[yP\377WtL\377@W9\377\33%\30\377\0\0\0"
+ "\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\263\303\262\377\260\311\256\377\257"
+ "\307\255\377\241\277\237\377\207\257\204\377g\210_\377[yP\377WtL\377"
+ "@W9\377\33%\30\377\0\0\0\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\263"
+ "\303\262\377\260\311\256\377\243\277\240\377\207\257\204\377g\210_\377"
+ "[yP\377XuM\377@W9\377\33%\30\377\0\0\0\316\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\217\235\215\377\241\300\237\377\207\257\204\377"
+ "g\210_\377[yP\377[yP\377RnI\377<P5\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\221\242\217\377\205\256\202\377g\210"
+ "_\377WuM\377XvN\377[yP\377XvN\377MhE\3774F.\377\0\0\0\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\217\235\215\377DW@\3771C,\3776J0\377"
+ "3F-\3771B+\3773F-\3776J0\3773E.\377!,\35\377\0\0\0\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_down_right_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_down_right_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_down_right_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\360\23\31\20\377\0\0\0\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\360.=)\377AW:\377\33%\30\377\0\0\0\314\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\3600A,\377OjF\377WtL\377@W9\377\33%\30\377\0\0\0\314\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\360=T;\377e\206a\377g\210^\377[yP\377WtL\377@W9\377\33%\30\377\0\0"
+ "\0\316\0\0\0\0\0\0\0\377!,\35\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\357DUB\377"
+ "~\235|\377\241\300\237\377\207\257\204\377h\211_\377[yP\377WtL\377@W"
+ "9\377\33%\30\377\0\0\0\3774F.\3773E.\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377%2#\377"
+ "\214\260\210\377\252\304\250\377\255\306\253\377\243\300\240\377\207"
+ "\257\203\377g\210_\377[yP\377WtL\377@W9\377<P5\377MhE\3776J0\377\0\0"
+ "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377R]Q\377\266\314\264\377\255\307\254\377\255"
+ "\306\253\377\242\300\240\377\207\257\204\377h\210_\377[yP\377XuM\377"
+ "RnI\377XvN\3773F-\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377V`V\377\267"
+ "\315\266\377\253\306\251\377\254\306\252\377\241\300\237\377\207\260"
+ "\203\377g\210_\377[yP\377[yP\377[yP\3771B+\377\0\0\0\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377V_U\377\266\315\265\377\254\306\253\377\253"
+ "\306\251\377\241\300\236\377\207\257\204\377g\210_\377[yP\377XvN\377"
+ "3F-\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377V`U\377"
+ "\267\314\265\377\260\310\256\377\256\307\254\377\241\277\237\377\207"
+ "\257\204\377g\210_\377WuM\3776J0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\231\251\230\377\265\314\263\377\260"
+ "\311\260\377\257\307\255\377\243\277\240\377\207\257\204\377g\210_\377"
+ "1C,\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\377\200\214"
+ "\200\377\265\310\264\377\264\314\263\377\263\313\262\377\260\311\256"
+ "\377\260\311\256\377\241\300\237\377\205\256\202\377DW@\377\0\0\0\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377S]S\377\210\227\210\377\264\314"
+ "\263\377\264\314\263\377\263\303\262\377\263\303\262\377\263\303\262"
+ "\377\217\235\215\377\221\242\217\377\217\235\215\377\0\0\0\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_eat_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_eat_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_eat_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\34\0\0\0\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0;;;\306777\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0""9\0\0\0\252\0\0\0q\0\0\0\0\0\0\0\32\0\0\0"
+ "\304!!!\377SSS\377333\306\0\0\0\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0""9___\377\241\241\241\377\273\273\273\377\0\0\0U,,,\304"
+ "###\375RRR\377\26\26\26\377OOO\377333\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0""9JJJ\343\265\265\265\377\335\335\335\377///\336\0\0\0""4"
+ "\0\0\0""9eee\343\27\27\27\377EEE\377DDD\377QQQ\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0""9XXX\377\263\263\263\377\276\276\276\377###\354\0\0\0|"
+ "\0\0\0\30\0\0\0\0\0\0\0""9VVV\377^^^\377\216\216\216\377III\377\0\0\0"
+ "q\0\0\0\0\0\0\0""9JJJ\343\263\263\263\377\332\332\332\377###\354\0\0"
+ "\0\230\0\0\0\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9\40\40\40\252###\336"
+ "LLL\377\244\244\244\377\21\21\21\216RRR\377\263\263\263\377\276\276\276"
+ "\377###\354\0\0\0|\0\0\0\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0L\0\0\0\336LLL\377\206\206\206\377\266\266\266\377\342\342"
+ "\342\377%%%\354\0\0\0\230\0\0\0\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\204|||\377\243\243\243\377;;;\377"
+ "\0\0\0\377\0\0\0\211\0\0\0\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9zzz\343\267\267\267\377\23\23\23\377"
+ "\213\213\213\377\305\305\305\377\0\0\0\227\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9\204\204\204\377\267\267"
+ "\267\377\5\5\5\366\0\0\0\275\0\0\0\336hhh\377\277\277\277\377###\216"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9zzz\343\267"
+ "\267\267\377\37\37\37\377\0\0\0\257\0\0\0Q\0\0\0L\0\0\0\336\212\212\212"
+ "\377\277\277\277\377\0\0\0q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9"
+ "\214\214\214\377\270\270\270\377\5\5\5\366\0\0\0\257\0\0\0""0\0\0\0\0"
+ "\0\0\0\0\0\0\0""0\0\0\0\336iii\377\307\307\307\377+++\216\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\252\245\245\245\377###\377\0\0\0\257\0\0\0C\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0L\0\0\0\336\210\210\210\377222\377\0"
+ "\0\0""0\0\0\0\0\0\0\0\0\0\0\0\211\0\0\0\316\0\0\0\250\0\0\0""0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""0\0\0\0\316\0\0\0\316"
+ "\0\0\0l\0\0\0$\0\0\0\0\0\0\0\30\0\0\0$\0\0\0$\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\0\0\0l\0\0\0T\0\0\0\14"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_eat_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_eat_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_eat_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\314\314\314\0\314\314\314\0\231\231\231\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\231\231\231\377\0\0\0\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\231\231\231\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\231\231\231\377"
+ "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\305S\0\0\377\77\0\0\0\0\0\0\0\0\0\377\231\231\231\377fff\377\314"
+ "\314\314\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\354\0\0\0\377\231\231\231"
+ "\377\0\0\0\377\0\0\0\377\231\231\231\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\336p\0\0\232\77\0\0\345\20\0\0\0\0\0\0\0\0\0\377"
+ "\231\231\231\377\231\231\231\377\231\231\231\377\314\314\314\377\0\0"
+ "\0\377\0\0\0\0\0\0\0\377\231\231\231\377\0\0\0\377\0\0\0\377\231\231"
+ "\231\377\0\0\0\377\0\0\0\377\231\231\231\377\0\0\0\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\310e\0\0\205Z\0\0\327D\0\0\0\0\0\0\0\0\0\377\231\231\231\377"
+ "\231\231\231\377\231\231\231\377\314\314\314\377\0\0\0\377\0\0\0l\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\231\231\231\377\0\0\0\377\0\0\0\377\231\231\231"
+ "\377\0\0\0\377fff\377333\377333\0\0\0\0\0\301q\0\0~e\0\0\320u\0\0\0\0"
+ "\0\0\0\0\0\377\231\231\231\377\231\231\231\377\231\231\231\377\314\314"
+ "\314\377\0\0\0\377\0\0\0\252\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\231\231\231\377\0\0\0\377\0\0\0\377\231\231\231\377fff\377333\37733"
+ "3\0\241:\0\0f.\0\0\377\0\0\0\377\0\0\0\0\0\0\377\231\231\231\377\231"
+ "\231\231\377\231\231\231\377\314\314\314\377\0\0\0\377\0\0\0\252\0\0"
+ "\0l\0\0\0\0\0\0\0\0\0\0\0\0\377\367\301\0\377\344\252\0\0\0\0\377\231"
+ "\231\231\377fff\377fff\377fff\377333\377\0\0\0\377\0\0\0\0\377\363\355"
+ "\0\377\353\351\0\0\0\0\377\231\231\231\377\231\231\231\377\231\231\231"
+ "\377\314\314\314\377\0\0\0\377\0\0\0\252\0\0\0l\377\377\266\0\377\266"
+ "u\0\367\226}\0\0\0\0\0\377\317z\0\351\256n\0\377\301\254\0\0\0\0\377"
+ "333\377333\377333\377fff\377\262\262\262\377\0\0\0\377\0\0\0\0\0\0\0"
+ "\377\231\231\231\377\231\231\231\377\231\231\231\377\314\314\314\377"
+ "\0\0\0\377\0\0\0\252\0\0\0l\362\222\201\0\366\270\232\0\374\305\177\0"
+ "\365\232r\0\0\0\0\0\377\273\221\0\304DF\0\301BV\0""5\0\6\0rv^\0\0\0\0"
+ "l\0\0\0\377333\377fff\377\262\262\262\377\0\0\0\377\231\231\231\377\231"
+ "\231\231\377\231\231\231\377\314\314\314\377\0\0\0\377\0\0\0\252\0\0"
+ "\0l\233jH\0E\0\0\0\323Mg\0\351Yj\0\377\250\206\0\0\0\0\0\377\377\351"
+ "\0\377\204|\0\377\221\212\0\264e^\0\212\261\221\0\327\273\242\0\0\0\0"
+ "l\0\0\0\377333\377333\377\314\314\314\377\231\231\231\377\231\231\231"
+ "\377\314\314\314\377\0\0\0\377\0\0\0\252\0\0\0l\377\353\260\0\243\271"
+ "\223\0\230@E\0\377m|\0\377\222\216\0\377\244\204\0\0\0\0\0\377\377\356"
+ "\0\377\237\224\0\377^d\0\367EZ\0\177\212\204\0\37\23\40\0\346\266\224"
+ "\0\0\0\0\252\0\0\0\377\314\314\314\377\231\231\231\377333\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\252\0\0\0l\361\315\254\0\334\276\215\0\205\276\236\0"
+ "\355=K\0\377`v\0\377\220\200\0\377\235\201\0\0\0\0\0\377\377\342\0\377"
+ "\266\230\0\377\245\213\0\377Yf\0\377CP\0\331Rg\0\315\372\303\0\0\0\0"
+ "\377\314\314\314\377\231\231\231\377333\377\231\231\231\377\314\314\314"
+ "\377\0\0\0\377\0\0\0\252\332\324\245\0\302\263\221\0\313\235\206\0\360"
+ "6I\0\364:R\0\371|v\0\377\265\223\0\377\247\206\0\0\0\0\0\377\377\330"
+ "\0\377\246\220\0\377\262\233\0\377\234\212\0\377ec\0\3775L\0\0\0\0\377"
+ "\314\314\314\377\231\231\231\377333\377\0\0\0\377333\377\231\231\231"
+ "\377\314\314\314\377\0\0\0\377\353:G\0\363.J\0\366BR\0\336+@\0\351VZ"
+ "\0\357\231\204\0\374\221\212\0\377\243\203\0\0\0\0\0\377\377\350\0\377"
+ "\247\216\0\377\244\230\0\377\237\221\0\377\225\203\0\0\0\0\377\314\314"
+ "\314\377\231\231\231\377333\377\0\0\0\377\0\0\0\252\0\0\0\377333\377"
+ "\231\231\231\377\314\314\314\377\0\0\0\377\377KX\0\363CM\0\363Pg\0\357"
+ "\243\221\0\362\245\206\0\373\206{\0\377\251\204\0\0\0\0\0\377\345\301"
+ "\0\377\272\243\0\377\244\225\0\377\250\231\0\0\0\0\377\314\314\314\377"
+ "\231\231\231\377333\377\0\0\0\377\0\0\0\252\0\0\0\252\0\0\0l\0\0\0\377"
+ "333\377\231\231\231\377\314\314\314\377\0\0\0\377\377\177v\0\375\243"
+ "\230\0\350\245\222\0\377\224\206\0\354\203i\0\377\253\210\0\0\0\0\0\377"
+ "\372\270\0\377\340\302\0\377\337\316\0\0\0\0\377\314\314\314\377\231"
+ "\231\231\377333\377\0\0\0\377\0\0\0\252\0\0\0l\377\377\336\0\377\377"
+ "\350\0\0\0\0l\0\0\0\377333\377\231\231\231\377\314\314\314\377\0\0\0"
+ "\377\377\323\302\0\377\332\266\0\377\327\252\0\377\321\224\0\371\234"
+ "{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\314\314\314\377\231\231\231\377"
+ "333\377\0\0\0\377\0\0\0\252\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0l\0\0\0\377333\377\231\231\231\377\314\314\314\377\0\0\0\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\314\314\314\377"
+ "\231\231\231\377333\377\0\0\0\377\0\0\0\252\0\0\0l\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0\0\377333\377\231\231\231\377"
+ "\314\314\314\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377fff\377333\377\0\0\0\377\0\0\0\252\0\0\0l\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0\0\377333\377"
+ "fff\377\0\0\0\377\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\252\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0\0\377\0\0\0"
+ "\377\0\0\0\377\0\0\0l\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0\0l\0"
+ "\0\0l\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0\0l\0\0\0l\0\0\0l"
+ "\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0\0l\0\0\0l\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_inv_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_inv_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_inv_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0U,>\20\377\14\77\0\377\15=\0\377\15>\0\377\17D"
+ "\0\377\12/\0\377\0\0\0p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0UQ\315\20\377>\330\0\377<\314\0\377<\316\0\377"
+ "B\313\0\377.\210\0\377\0\0\0\247\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9\0\0\0\252\7\24\0\3777\234\0\377"
+ "7\204\1\377\10\14\1\377\0\0\0\341\0\0\0\247\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15/\0\377:\270"
+ "\0\377:\242\1\377\15\35\1\377\0\0\0n\0\0\0""7\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15""2\0\377"
+ ":\272\0\377:\244\0\377\15\37\0\377\0\0\0R\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15""2\0"
+ "\377:\272\0\377:\243\0\377\15\36\0\377\0\0\0R\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15""2"
+ "\0\377:\272\0\377:\243\0\377\15\36\0\377\0\0\0`\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15"
+ "2\0\377:\272\0\377:\243\0\377\15\36\0\377\0\0\0\213\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\0\0\0"
+ "U\7&\0\3778\265\0\3778\236\0\377\12\24\0\377\0\0\0\250\0\0\0""8\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Ub\226"
+ "$\377+\257\0\377:\263\0\377:\254\0\377.\212\0\377\34V\0\377\0\0\0\247"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0U\32Q\0\377&v\0\377&s\0\377&Y\0\377)c\0\377\35""4\0\377\0\0\0\247\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "8\0\0\0\247\0\0\0\247\0\0\0\247\0\0\0\247\0\0\0\247\0\0\0\247\0\0\0\246"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0S\0\0\0R\0\0\0R\0\0\0R\0\0\0R\0\0\0R\0\0\0R\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_inv_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_inv_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_inv_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0"
+ "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\231\3773\3773\314\0\3773\314\0\3773\314\0\3773\314\0\3773\314\0\377"
+ "3\314\0\3773\314\0\377\0\0\0\377\0\0\0{\0\0\0\0\0\0\0\0\377\377\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\3773\314\0\3773\231\0\3773\231\0\3773\231\0\3773\231"
+ "\0\3773\231\0\3773~\0\3773~\0\377\0\0\0\377\0\0\0{\0\0\0\0\0\0\0\0\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\3773\231\0\3773\213"
+ "\0\3773~\0\3773~\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0{\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773\231\0\3773\231"
+ "\0\3773\231\0\3773s\15\377\0\0\0\377\0\0\0\273\0\0\0{\0\0\0\273\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773\261"
+ "\0\3773\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0{333\0""333\0"
+ "333\0\0\0\0\0\0\0\0\0""333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773\261\0\377"
+ "3\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0{\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773\261\0\377"
+ "3\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0{3\0\0\0\0\0\0\0\0\0"
+ "\0\0""3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773\261\0\377"
+ "3\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0{\0\0\0\0""3\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773\261\0\377"
+ "3\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0{\231f3\0\0\0\0\0""3"
+ "\0\0\0""3\0\0\0\0\0\0\0""3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773\261\0"
+ "\3773\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0\273\377\314\231"
+ "\0\377\314\231\0f3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0f3\0\0\0\0\0\0\0\0"
+ "\0\3773\261\0\3773\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0\334"
+ "\314\231f\0\377\314\231\0\377\314\314\0\377\314\314\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231f3\0\231f3\0\231f3\0\314"
+ "\231f\0\314\231f\0\0\0\0\0\0\0\0\3773\261\0\3773\231\0\3773\231\0\377"
+ "3\200\0\377\0\0\0\377\0\0\0\273f3\0\0\231f3\0\314\231f\0\231f3\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\314\231\0\314"
+ "\231f\0\377\314\231\0\314\231f\0\0\0\0\377\0\0\0\377\0\0\0\3773\276\0"
+ "\3773\231\0\3773\231\0\3773\200\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0{f3\0\0f3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\314\231\0\377\314\231\0\314\231f\0\377\314\231\0\0\0\0\377\231"
+ "\3773\3773\314\0\3773\231\0\3773\231\0\3773\231\0\3773\231\0\3773\231"
+ "\0\3773\231\0\377\0\0\0\377\0\0\0{\377\314\231\0\314\231f\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\314\231\0\377\314"
+ "\231\0\377\314\231\0\314\231f\0\0\0\0\3773\231\0\3773\231\0\3773\231"
+ "\0\3773\231\0\3773~\0\3773~\0\3773~\0\3773f\0\377\0\0\0\377\0\0\0{\231"
+ "f3\0\377\314\231\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\314\231\0\377\314\231\0\377\314\231\0\0\0\0\0\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0{\377\314\231\0\231f3\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\314\231\0\377\314\231\0\377"
+ "\314\231\0\0\0\0\0\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0"
+ "\0\0{\0\0\0{\0\0\0{\0\0\0\273\314\231f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\273\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0\0\0{\0"
+ "\0\0{\0\0\0{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_kick_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_kick_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_kick_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\0\226I\2\0\27x\225\4\1\7\11<\0\0\0U\0\0\0U\0\0\0""9\0\0\0\0\321"
+ "O\0\0\321O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aaH\0\0"
+ "\0\0q\0\0\0\252}U5\343\307\230i\377\353\342\330\377\204a\77\343\0\0\0"
+ "9\0\0\0\0\0\0\0\0\300\307\230\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\34""6)\34\306\361\270\177\377\220kF\377\0\0\0\377\0\0\0\377"
+ "\263\203Q\377\36\16\4\216\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0U\212b;\377\205S\"\377'\11\0\377T*\0\377\224"
+ "Z\40\377\314\220T\377<%\26\377\0\304\374\4\0\310\375\4\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UH!\0\377\204@\6\377\243n9\377"
+ "\246q<\377\240k6\377\250p7\377\265zG\377\0\0\0q\0\0\0\0\253\246w\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0#\26\7\0\277s5\0\377\223"
+ "]'\377\246p;\377\244o9\377sN*\3770\26\0\377\0\0\0vo)\0\5\377s\0\0\251"
+ "\247z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\35$\12\0\12\32u<\"\7\377F"
+ "\36\0\377\220\\)\377`D&\377j2\0\377\232^!\377!\30\21\306\0\0\0\34\0\210"
+ "\334\4\0\0\0\0\0\0\0\34\0\0\0U\0\0\0U\0\0\0\34\25/3\3\22""4;\3\22\11"
+ "\1\216\0\0\0\377\34\12\0\377-\21\0\377\210S\35\377\210R\33\377nJ&\377"
+ "\0\0\0U\0\210\327\4\0\0\0q%\32\15\306\232rI\377\247|R\377:,\35\306\24"
+ "#$\0l\251\252\0\0\0\0\0\0\7\40kr<\1\377\241f,\377\205Q\33\377\241m8\377"
+ "\252q7\377X7\32\377/\35\16\377\307\222b\377\377\311\215\377\377\377\354"
+ "\377\331\233]\377\"\21\0\377\0\0\0\0p\261\262\0\0\0\0\0\0\0\0\0\33\40"
+ "\35\377a3\7\377\231d/\377\214Y&\377\321\235g\377\300\211R\377\330\240"
+ "h\377\343\255w\377\323\235h\377\315\227a\377t6\0\377\"\21\0\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UI!\0\377v>\5\377\234g3\377\210U\"\377"
+ "\273\210U\377\245r\77\377\254xD\377w@\12\377g,\0\377G\40\0\377\35\17"
+ "\0\306\0\0\0\0\0\0\0\0\0\0\0\0\23\11\4f\4\2\4""4.\25\0\336<$\12\377\211"
+ "Q\31\377\205P\32\377\227c/\377s>\10\377\201H\17\377Q%\0\377\32\14\0\377"
+ "\0\0\0U\2\1\1)\0\0\0\252\12\6\2\241\20\7\3\226\21\10\3-\0\0\0$\14\5\0"
+ "\3169\32\0\377O7\40\377\\)\0\377^+\0\377c.\0\377L%\0\377\0\0\0q\0\0\0"
+ "\0\30\14\6\0\22\11\4\0\16\7\3\1\22\11\4\10\21\10\3\1\37\31\22\0\0\0\0"
+ "\225\7\4\4\315G\"\0\377\77\36\0\377+\26\0\377-\30\0\377\24\12\0\336\0"
+ "\0\0\235\0\0\0\0\0\0\0""0\0\0\0H\0\0\0\30\0\0\0""9\0\0\0\252\0\0\0\252"
+ "\0\0\0\252\0\0\0\30\0\0\0`\14\11\7\316\22\10\3\316\6\0\1\316\0\0\0\215"
+ "\0\0\0l\0\0\0l\0\0\0l\0\0\0T\0\0\0""0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0H\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0<\0\0"
+ "\0$\0\0\0\14\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_kick_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_kick_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_kick_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\226I\2\0\226I\2\1\0\0\0\0\27x\225\20VbN\0ogK\0\234h9\0\325V"
+ "\10\0\340Q\0\0\332R\0\0\343U\0\0\0\0\0\0\321O\0\1\321O\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aaH\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\222]!\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\307L\0\0\342V\0\0\0\0\0\0\0\0\0\0\0\0\0\0~\204f\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aaH\1\0\0\0\0"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\314\231f\377\314\231f\377\377\314\231"
+ "\377\377\377\377\377\314\231f\377\0\0\0\377\325N\0\0\377g\0\0\0\0\0\0"
+ "\0\0\0\0\204\203a\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0c\213\200\0\0\0\0\377\314\231f\377\377\314\231"
+ "\377\231f3\377\0\0\0\377\0\0\0\377\0\0\0\377\314\231f\377\0\0\0\377\310"
+ "I\0\0\257[\34\0Krg\0]~l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\314\231f\377\231f3\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377f3\0\377f3\0\377\231f3\377\314\231f\377"
+ "\0\0\0\377|K\33\0ZaH\0rqO\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\231f3\377\231f3\377"
+ "f3\0\377f3\0\377f3\0\377\231f3\377\231f3\377\231f3\377\314\231f\377\0"
+ "\0\0\377\236@\0\0\0\214\256\21\0\275\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377f3\0"
+ "\377u2\0\377\231f3\377\231f3\377\231f3\377\231f3\377\231f3\377\231f3"
+ "\377\231f3\377\314\231f\377\0\0\0\377\0\0\0\0\0\0\0\0\200|X\1\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377f3\0\377f3\0\377f3\0\377\231f3\377\231f3\377\231f3\377\231f3\377"
+ "\231f3\377\231f3\377\0\0\0\377y=\1\0\0\0\0\0\0\0\0\0\302U\0\0dnY\0~~"
+ "]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\37"
+ "\0\0\0\340f3\0\377f3\0\377\231f3\377\231f3\377\231f3\377\231f3\377\231"
+ "f3\377\0\0\0\377f3\0\377\0\0\0\377X*\1\25\0\0\0\0\311[\0\1ju]\0{yY\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\25\34!\0\20"
+ "\27\3570\34\10\377f3\0\377f3\0\377\231f3\377\231f3\377\231f3\377f3\0"
+ "\377f3\0\377\231f3\377\0\0\0\377n7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\36QD\0]fI\0\224yR\0\240\200V\0\236vL\0\0\377\377\0\0\0\0\0\27""27"
+ "\33\17)-\0\35\37\31\3776\32\4\377\0\0\0\377f3\0\377\0\0\0\377\0\0\0\377"
+ "f3\0\377\231f3\377f3\0\377\231f3\377\0\0\0\377\220R\22\0\0g\230\20ik"
+ "J\0\377\260K\0pnW\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\257]!\0\0"
+ "\0\0\0\0\0\0\1\0\0\0\0Hpq\0\0\0\0\377\0\0\5\377\0\0\0\377f3\0\377f3\0"
+ "\377\231f3\377f3\0\377\231f3\377\231f3\377\0\0\0\377]F'\0""9K;\0PX@\0"
+ "\0\0\0\377\0\0\0\377\314\231f\377\314\231f\377\314\231f\377\314\231f"
+ "\377\0\0\0\377\24#$\1\0\0\0\0\0\0\0\0y\317\330\0:kr\0\0\12\26\361f3\0"
+ "\377f3\0\377\231f3\377f3\0\377\231f3\377\231f3\377\231f3\377\231f3\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\314\231f\377\314\231f\377\314\231f\377"
+ "\377\377\377\377\377\314\231\377f3\0\377\0\0\0\377\0\0\0\0P~\201\0Lx"
+ "y\1\0\0\0\0\0\0\0\0\11&/\0""0(\27\377f3\0\377\231f3\377\231f3\377\231"
+ "f3\377\231f3\377\231f3\377\231f3\377\314\231f\377\314\231f\377\314\231"
+ "f\377\377\314\231\377\377\314\231\377\377\314\231\377\314\231f\377\231"
+ "f3\377f3\0\377\0\0\0\377\0\0\0\0Q\201\203\0Q\201\203\0\0\0\0\0""3NL\0"
+ "0KJ\0\23#&\377\23\3\0\376f3\0\377\231f3\377f3\0\377\231f3\377\314\231"
+ "f\377\314\231f\377\231f3\377\314\231f\377\231f3\377\314\231f\377\231"
+ "f3\377\314\231f\377\231f3\377f3\0\377f3\0\377\0\0\0\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0""3GC\0\16\7\3\0\16\7\3\0\1\0\0\377f3\0\377f3\0\377"
+ "\231f3\377\231f3\377\231f3\377\231f3\377\314\231f\377\231f3\377\314\231"
+ "f\377\231f3\377\231f3\377f3\0\377f3\0\377f3\0\377f3\0\377\0\0\0\377\16"
+ "\7\3\0\16\7\3\0\16\7\3\0\17\11\5\0\16\7\3\0\16\7\3\0\16\7\3\0\23\12\5"
+ "\377f3\0\377f3\0\377f3\0\377\231f3\377f3\0\377\231f3\377\231f3\377\231"
+ "f3\377\231f3\377\231f3\377f3\0\377f3\0\377f3\0\377\0\0\0\377\0\0\0\377"
+ "\12\5\3\0\16\7\3\0\16\7\3\0\16\7\3\0\16\7\3\0\16\7\3\0\16\7\3\346\16"
+ "\7\3\0\0\0\0l\40\20\1\377\0\0\0\377\231f3\377f3\0\377\231f3\377f3\0\377"
+ "\231f3\377f3\0\377f3\0\377f3\0\377f3\0\377\0\0\0\377\0\0\0\377\26\14"
+ "\3\0P%\2\0\5\3\3\34\0\0\0\377\0\0\0\377\16\7\3\352\16\7\3\354\16\7\3"
+ "\314\16\7\3\0""3RT\0\0\0\0l\34\15\0\376f3\0\377\0\0\0\377\231f3\377f"
+ "3\0\377f3\0\377f3\0\377f3\0\377f3\0\377f3\0\377\0\0\0\377\0\0\0\0\0\0"
+ "\4\0\0\0\3\0\0\0\0\0\0\0\0\0\16\7\3\0\16\7\3\0\16\7\3\0\16\7\3\0\16\7"
+ "\3\0\22\16\12\0\16\7\3\0\0\0\0l\15\6\2\377\0\0\0\377f3\0\377\0\0\0\377"
+ "f3\0\377\0\0\0\377f3\0\377f3\0\377\0\0\0\377\0\0\0\377\17""3=\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\22\11\4\1\16\7\3\0\0\0\0\0\16\7\3\3\16\7\3\20\16\7"
+ "\3\3\26\21\14\0\26\21\14\1\0\0\0\377\0\0\0l\15\10\5\375f3\0\377\0\0\0"
+ "\377f3\0\377\0\0\0\377f3\0\377\0\0\0\377\0\0\0\377\0\0\0l\0\0\0l\0\0"
+ "\0\0\0\0\0\0\0\0\0l\0\0\0l\0\0\0m\16\7\3\0\0\0\0\0\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\16\0\0\0\0\0\0l\0\0\0l\21\14\10\377\22"
+ "\7\2\377\33\15\2\377\24\10\1\377\0\0\0\377\0\0\0l\0\0\0l\0\0\0l\0\0\0"
+ "l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\20\10\3\0\16\7\2\0\0\0\0l\0\0\0l\0\0\0l\0\0"
+ "\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\16\7\3\0"
+ "\16\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\16\11\5\0\16\7\3\0\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0\0l\0\0"
+ "\0l\0\0\0l\0\0\0l\16\7\3\0\16\7\3\0\16\7\3\0\16\7\3\0\16\7\3\0\0\0\0"
+ "\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_left_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_left_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_left_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377"
+ "\0\0\0\10\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377\0\0\0\30"
+ "\0\0\0\13\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\271\320\271\377\0\0\0\377\0\0\0&\0"
+ "\0\0\20\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\1\0\0\0\377\315\336\313\377\266\307\266\377\0\0\0\377\0"
+ "\0\0,\0\0\0\22\0\0\0\4\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\1\0\0\0\377\315\336\313\377\261\311\260\377\263\304\263"
+ "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+ "\0\377\0\0\0\377\0\0\0\14\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\315\336\313\377\264\313"
+ "\262\377\265\316\265\377\267\314\265\377\271\316\267\377\272\321\272"
+ "\377\271\316\267\377\273\317\272\377\273\320\271\377\262\311\260\377"
+ "~\253x\377\0\0\0\377\0\0\0\40\0\0\0\14\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\315\336\313\377\252\307"
+ "\250\377\263\312\261\377\260\311\260\377\260\311\256\377\256\307\254"
+ "\377\252\305\250\377\252\305\250\377\252\305\250\377\256\307\254\377"
+ "\251\304\247\377i\202g\377\0\0\0\377\0\0\0+\0\0\0\21\0\0\0\2\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1---\377\317\337\314\377\255\310"
+ "\253\377\260\307\256\377\255\306\253\377\255\306\253\377\255\310\253"
+ "\377\252\307\250\377\256\307\254\377\256\307\254\377\260\307\256\377"
+ "\256\307\254\377\255\310\253\377g\214c\377\0\0\0\377\0\0\0,\0\0\0\21"
+ "\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\233\255\232"
+ "\377\205\256\201\377\207\257\204\377\207\257\204\377\207\257\204\377"
+ "\207\257\204\377\207\257\204\377\207\260\203\377\210\257\204\377\207"
+ "\257\204\377\207\260\203\377\210\260\205\377\206\257\202\377TqP\377\0"
+ "\0\0\377\0\0\0-\0\0\0\21\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\1\0\0\0\11\0\0\0\377<R5\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP"
+ "\377[yP\377[yP\377[yP\377[yP\377[yP\377JcB\377\0\0\0\377\0\0\0-\0\0\0"
+ "\21\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\23"
+ "\0\0\0\377<R5\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377[y"
+ "P\377[yP\377[yP\377JcB\377\0\0\0\377\0\0\0-\0\0\0\21\0\0\0\2\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<"
+ "R5\377[yP\377[yP\377JcB\377;P5\377;P5\377;P5\377;P5\377;P5\377;P5\377"
+ "AV9\377\0\0\0\377\0\0\0-\0\0\0\21\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377[yP\377"
+ "JcB\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0+\0\0\0\21\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5"
+ "\377JcB\377\0\0\0\377\0\0\0""9\0\0\0""1\0\0\0-\0\0\0-\0\0\0-\0\0\0-\0"
+ "\0\0+\0\0\0\40\0\0\0\14\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377JcB\377"
+ "\0\0\0\377\0\0\0""1\0\0\0\35\0\0\0\23\0\0\0\21\0\0\0\21\0\0\0\21\0\0"
+ "\0\20\0\0\0\14\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377"
+ "\0\0\0\377\0\0\0,\0\0\0\22\0\0\0\4\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0"
+ "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377"
+ "\0\0\0&\0\0\0\20\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\23\0\0\0\30\0"
+ "\0\0\13\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0\10\0\0\0\4\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_open_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_open_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_open_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\34\0\0\0U\0\0\0U\0\0\0U\0\0\0U\0\0\0U\0\0\0U\0\0\0U\0\0\0U\0\0"
+ "\0U\0\0\0U\0\0\0U\0\0\0U\0\0\0U\0\0\0U\0\0\0\34\0\0\0U\"\"\"\377333\377"
+ "333\377333\377333\377333\377333\377333\377333\377333\377333\377333\377"
+ "333\377\"\"\"\377\0\0\0U\0\0\0U8\32\0\377\314o\0\377\303b\0\377\274T"
+ "\0\377\267R\0\377\261N\0\377\255L\0\377\234D\0\377\216E\0\3778,\"\377"
+ "\"\"\"\377\"\"\"\377---\377333\377\0\0\0U\0\0\0Uq_S\377\261M\30\377\203"
+ "M1\377\242A\10\377\222A\0\377\235F\0\377\230I\0\377\235J\0\377\315W\0"
+ "\377\242G\0\377!\21\0\377\0\0\0\377\"\"\"\377333\377\0\0\0U\0\0\0U&O"
+ "b\377|\200\207\377g\177\220\377\234lb\377\211_O\377\254Z\77\377\215F"
+ "\36\377\212E$\377\235C\34\377\255N\5\3771\26\0\377\0\0\0\377\"\"\"\377"
+ "333\377\0\0\0U\0\0\0U%CB\377;w\222\3775u\214\377L\213\260\377P\222\276"
+ "\377h\226\303\377L\201\232\3774\241\274\377h\223\255\377\236\\)\3774"
+ "\23\0\377\0\0\0\377\"\"\"\377333\377\0\0\0U\0\0\0U'FI\377vF\37\377TW"
+ "H\377TD+\3775;+\3779E:\377-\233\254\377^\242\305\377V\224\266\377\230"
+ "[&\3779\25\0\377\0\0\0\377\"\"\"\377333\377\0\0\0U\0\0\0UP2\23\377\245"
+ "C\4\377\205I\31\377\247\77\4\377~7\0\377\2220\0\377pm{\377Bav\377<Vd"
+ "\377\206:\5\377>\32\0\377\0\0\0\377\"\"\"\377333\377\0\0\0U\0\0\0U1g"
+ "\212\377\267`Z\377\203ho\377\276G#\377\2218\10\377\2356\0\377~WF\377"
+ "S|\226\377*\77D\377\2047\0\377A\37\0\377\0\0\0\377\"\"\"\377333\377\0"
+ "\0\0U\0\0\0U#CD\377h\222\267\377P\204\250\377~\202\243\377}{\236\377"
+ "\215ew\377\224Za\377-9B\377\20\32\35\377~/\0\377@\35\0\377\0\0\0\377"
+ "\"\"\"\377333\377\0\0\0U\0\0\0U\36JT\377JUN\3778ci\377<l~\377<{\234\377"
+ "G\205\256\377Y\225\301\377C|\211\377K\222\277\377\246f;\377;\27\0\377"
+ "\0\0\0\377\"\"\"\377333\377\0\0\0U\0\0\0UJ@&\377\266S\21\377u[<\377p"
+ "6\30\377S2\36\377OE8\377=KL\3778`d\3776y\222\377\233a0\3778\24\0\377"
+ "\0\0\0\377\"\"\"\377333\377\0\0\0U\0\0\0U\32\14\0\377`&\0\377k3\3\377"
+ "\253H\0\377\244J\0\377\270H\0\377\225;\0\377\237;\3\377\202;\20\377\252"
+ "P\11\377@!\13\377\21\21\21\377(((\377333\377\0\0\0U\0\0\0U\0\0\0\377"
+ "\10\3\0\377\15\5\0\377\35\13\0\377*\24\0\377Y&\0\377^.\0\377\202=\0\377"
+ "\231F\0\377\272W\0\377eH-\377DDD\377DDD\377333\377\0\0\0U\0\0\0""9\0"
+ "\0\0\252\0\0\0\252\0\0\0\252\0\0\0\252\0\0\0\252\0\0\0\252\2\1\0\343"
+ "\16\7\0\377\31\14\0\3770\27\0\377\27\13\0\306\0\0\0\252\0\0\0\252\0\0"
+ "\0\252\0\0\0""9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0""9\0\0\0U\0\0\0U\1\1\0\377\4\2\0U\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_open_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_open_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_open_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377LLL\377LLL\377LLL\377LLL\377LLL\377"
+ "LLL\377LLL\377LLL\377LLL\377LLL\377LLL\377LLL\377LLL\377LLL\377LLL\377"
+ "LLL\377LLL\377LLL\377LLL\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\0\0\0\377\300m\0\377\354\224\0\377\333d\0\377\320Y\0\377\305U\0\377"
+ "\272O\0\377\260J\0\377\245E\0\377\233@\0\377\223:\0\377a/\0\377m6\0\377"
+ "333\377333\377333\377333\377333\377333\377LLL\377\0\0\0\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\376v\1\377\354c\0\377\200B\0\377\215=\0\377\227H\0\377"
+ "\243S\0\377\255V\0\377\265Y\0\377\302]\0\377\317a\0\377\332b\0\377\270"
+ "]\0\377\346l\0\377_,\0\377\4\2\0\377\0\0\0\377\0\0\0\377\0\0\0\37733"
+ "3\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\200\233\273\377\261"
+ "Z7\377\220\"\0\377ynn\377\267>\23\377\2025\0\377\2118\0\377\231<\0\377"
+ "y;\0\377\202>\0\377\206\77\0\377\200@\0\377\355W\0\377\364e\0\377\222"
+ "J\0\377\0\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\377=\203\261\377\177{w\377\223V3\377b\212\251\377\303"
+ "aE\377\205L-\377\233J&\377\317K\36\377\217@\32\377\2405\4\377\2453\12"
+ "\377\236+\1\377\2615\0\377\302O\0\377\223F\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\3773_X\377d"
+ "\243\322\377u\243\330\377@\177\231\377}\220\255\377l\214\250\377y\207"
+ "\227\377\232\204\207\377\201z\177\377lR'\377Grg\377}dL\377\203gY\377"
+ "\250\\\27\377\225=\0\377\0\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377"
+ "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\3779gi\377%bo\377\"`w\377*p}\3775\205"
+ "\251\3779\222\306\377A\232\324\377G\241\341\377k\237\344\377\40\214\266"
+ "\377\5\302\362\377\\\256\336\377[\247\326\377\234vQ\377\2369\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\377*s\211\377_L1\377e8\26\3773lt\377FO@\377,@5\377&KG\377\36["
+ "a\377+IA\377\14\342\372\377X\305\352\377\217\267\351\377C\236\303\377"
+ "\225vI\377\250;\0\377\0\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0"
+ "\0\377\0\0\0\0\0\0\0\0\0\0\0\377\\S6\377\233N\22\377\2537\0\377Y]E\377"
+ "\216=\15\377d-\0\377C\36\0\377a,\0\377r\25\0\377M\243\321\377$EY\377"
+ "\212\250\302\377(Sa\377\177O\27\377\263D\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\207H\17\377"
+ "\257G\1\377\2324\0\377\206M\25\377\324E\3\377\211\77\0\377\235A\0\377"
+ "\237@\0\377\273#\0\377\\\215\254\377$:P\377y\246\272\377\25\34$\377c"
+ "\"\0\377\274R\0\377\0\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0\0"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\377T\262\374\377\337cL\377\250\33\0\377\204"
+ "yx\377\352D\21\377\1779\0\377\223B\0\377\221F\0\377\2514\0\377W\202\206"
+ "\377P~\243\377p\244\266\377\21\31\33\377b\40\0\377\303\\\0\377\0\0\0"
+ "\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\3774kv\377\213\231\267\377\212p\214\377X\221\275\377\300ac\377\210"
+ "7.\377\242%\13\377\243\"\0\377\255!\0\377\213@/\377DXq\377Cin\377\11"
+ "\17\16\377j+\0\377\304_\0\377\0\0\0\377\0\0\0\377\0\0\0\377333\377LL"
+ "L\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\3775b^\377S\225\270\377\\\227\312"
+ "\3778z\223\377j\226\302\377a\241\340\377u\245\343\377}\217\276\377\207"
+ "x\233\377\231fu\377,.5\377\16\30\30\377\7\15\22\377W\21\0\377\275U\0"
+ "\377\0\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\3775ks\377;a`\377\77cg\377.oz\377A\177\232\377\77\214\271"
+ "\377G\223\307\377O\226\314\377W\231\321\377l\243\325\377H\177\223\377"
+ "\77on\377V\236\343\377\237pV\377\265I\0\377\0\0\0\377\0\0\0\377\0\0\0"
+ "\377333\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\36u\223\377jH"
+ "/\377\\%\21\3771lu\377<@4\377!60\3770^]\377,W_\377;x\214\377D\204\242"
+ "\377\77\201\223\377=~\204\377I\250\345\377\241\201^\377\254>\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\230U\13\377\350i\12\377\315G\0\377riI\377\240>\17\377l\36"
+ "\0\377d&\12\377d4\31\377T;&\377.,#\3777NK\377/UW\377.s\211\377\217l<"
+ "\377\244;\0\377\0\0\0\377\0\0\0\377\0\0\0\377333\377LLL\377\0\0\0\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\377;\32\0\377\2104\0\377|6\0\377\227K\6\377\344"
+ "\\\0\377\275^\0\377\315W\0\377\331Q\0\377\2164\0\377\206*\0\377\221("
+ "\0\377\1770\16\377V0\34\377\242V\24\377\236\77\0\377\0\0\0\377\0\0\0"
+ "\377\0\0\0\377333\377LLL\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0"
+ "\0\377\27\10\0\377\32\14\0\377,\22\0\377[\35\0\377\77\"\0\377l2\0\377"
+ "\260G\0\377\225M\0\377\273\\\0\377\307^\0\377\304U\0\377\276N\0\377\315"
+ "X\0\377\236G\0\377333\377333\377333\377333\377LLL\377\0\0\0\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\7\4\0\377\26\12\0\3778\24\0\377'\26\0\377=\34\0\377W*\0\377s7\0\377"
+ "\216E\0\377\276]\0\377\255T\0\377LLL\377LLL\377LLL\377LLL\377LLL\377"
+ "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\4\2\0\377"
+ "\21\10\0\377\36\16\0\377*\23\0\377C\40\0\377K%\0\377\0\0\0\377\0\0\0"
+ "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\15\6\0\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_right_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_right_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_right_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\10\0\0\0\377\0\0\0"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\13\0\0\0\30\0\0\0\377\0\0\0\377\0\0"
+ "\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\2\0\0\0\20\0\0\0&\0\0\0\377\271\320\271\377\0\0\0"
+ "\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\2\0\0\0\2\0\0"
+ "\0\2\0\0\0\2\0\0\0\4\0\0\0\22\0\0\0,\0\0\0\377\266\307\266\377\315\336"
+ "\313\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\14\0\0\0\377\0\0"
+ "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\263"
+ "\304\263\377\261\311\260\377\315\336\313\377\0\0\0\377\0\0\0\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0"
+ "\0\0\14\0\0\0\40\0\0\0\377~\253x\377\262\311\260\377\273\320\271\377"
+ "\273\317\272\377\271\316\267\377\272\321\272\377\271\316\267\377\267"
+ "\314\265\377\265\316\265\377\264\313\262\377\315\336\313\377\0\0\0\377"
+ "\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\2\0\0\0\21\0\0\0+\0\0\0\377i\202g\377\251\304\247\377\256\307\254"
+ "\377\252\305\250\377\252\305\250\377\252\305\250\377\256\307\254\377"
+ "\260\311\256\377\260\311\260\377\263\312\261\377\252\307\250\377\315"
+ "\336\313\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0,\0\0\0\377g\214c\377\255\310\253\377"
+ "\256\307\254\377\260\307\256\377\256\307\254\377\256\307\254\377\252"
+ "\307\250\377\255\310\253\377\255\306\253\377\255\306\253\377\260\307"
+ "\256\377\255\310\253\377\317\337\314\377---\377\0\0\0\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0-\0\0\0\377TqP\377\206"
+ "\257\202\377\210\260\205\377\207\260\203\377\207\257\204\377\210\257"
+ "\204\377\207\260\203\377\207\257\204\377\207\257\204\377\207\257\204"
+ "\377\207\257\204\377\207\257\204\377\205\256\201\377\233\255\232\377"
+ "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0"
+ "\0\0-\0\0\0\377JcB\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377"
+ "[yP\377[yP\377[yP\377[yP\377<R5\377\0\0\0\377\0\0\0\11\0\0\0\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0-\0\0\0\377JcB\377["
+ "yP\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377[yP\377"
+ "<R5\377\0\0\0\377\0\0\0\23\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\2\0\0\0\21\0\0\0-\0\0\0\377AV9\377;P5\377;P5\377;P5\377"
+ ";P5\377;P5\377;P5\377JcB\377[yP\377[yP\377<R5\377\0\0\0\377\0\0\0\25"
+ "\0\0\0\7\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0"
+ "\0\21\0\0\0+\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+ "\377\0\0\0\377\0\0\0\377JcB\377[yP\377<R5\377\0\0\0\377\0\0\0\25\0\0"
+ "\0\7\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2"
+ "\0\0\0\14\0\0\0\40\0\0\0+\0\0\0-\0\0\0-\0\0\0-\0\0\0-\0\0\0""1\0\0\0"
+ "9\0\0\0\377JcB\377<R5\377\0\0\0\377\0\0\0\25\0\0\0\7\0\0\0\1\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0"
+ "\0\14\0\0\0\20\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\23\0\0\0\35\0\0\0""1"
+ "\0\0\0\377JcB\377\0\0\0\377\0\0\0\25\0\0\0\7\0\0\0\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\4\0\0\0\22\0\0\0,\0\0\0\377"
+ "\0\0\0\377\0\0\0\25\0\0\0\7\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\20\0\0\0&\0\0\0\377\0\0\0\25"
+ "\0\0\0\7\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\13\0\0\0\30\0\0\0\23\0\0\0\7\0\0\0\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\4\0\0\0\10\0\0\0\5\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_self_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_self_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_self_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3S]S\0\210\227\210"
+ "\0\264\314\263\0\0\0\0\377\231\251\230\377\0\0\0\377\263\303\262\0\217"
+ "\235\215\0\221\242\217\0\217\235\215\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\200\214\200\0\0\0\0\377V`U\377\267\314\265\377"
+ "g\210_\377\0\0\0\377\241\300\237\0\205\256\202\0DW@\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377V_U\377\266\315\265\377"
+ "\254\306\253\377\253\306\251\377g\210_\377\0\0\0\377g\210_\0""1C,\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377V`V\377\267\315\266"
+ "\377\253\306\251\377\254\306\252\377\241\300\237\377\207\260\203\377"
+ "@W9\377\0\0\0\3776J0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "R]Q\377\266\314\264\377\255\307\254\377\255\306\253\377\242\300\240\377"
+ "\207\257\204\377h\210_\377[yP\377@W9\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377%2#\377\214\260\210\377\252\304\250\377\255\306\253"
+ "\377\243\300\240\377\207\257\203\377g\210_\377[yP\377WtL\377@W9\377\33"
+ "%\30\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0R]Q\0\0\0\0\357DUB\377~\235|\377"
+ "\241\300\237\377\207\257\204\377h\211_\377[yP\377WtL\377@W9\377\33%\30"
+ "\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%2#\0\214\260\210\0\252\304\250\0\0"
+ "\0\0\360=T;\377e\206a\377g\210^\377[yP\377WtL\377@W9\377\33%\30\377\0"
+ "\0\0\3166J0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3DUB\0~\235|\0\241\300\237\0\0"
+ "\0\0\3600A,\377OjF\377WtL\377@W9\377\33%\30\377\0\0\0\3144F.\0""3E.\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4=T;\0e\206a\0g\210^\0\0\0\0\360."
+ "=)\377AW:\377\33%\30\377\0\0\0\314\0\0\0\0\0\0\0\0!,\35\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""0A,\0OjF\0WtL\0\0\0\0\360\23\31\20"
+ "\377\0\0\0\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0.=)\0AW:\0\33%\30\0\0\0\0\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\1\0\0\0\0\23\31\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_throw_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_throw_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_throw_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0\221G\0\0\314O"
+ "\0\0Gll\0Gll\0Gll\0Gll\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Gll\0Gll\0Gl"
+ "l\0Gll\0Gll\0\221G\0\0\377\0\0\0\377\377\0\0\221G\0\0Gll\0\221G\0\377"
+ "\314O\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Gll\0Gll\0Gll\0Gll\0\221G"
+ "\0\0\377\0\0\0\377\377\0\0\221G\0\0\0\0\0\0\221G\0\377\377\0\0\377\377"
+ "\377\0\377\221G\0\377\0\0\0\0\0\0\0\0\0\0\0\0Gll\0\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\221G\0\0\0\0\0\0\221G\0\377\377\0\0\377"
+ "\377\377\0\377\221G\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0Gll\0Gll\0"
+ "\221G\0\0\377\0\0\0\314O\0\0\221G\0\0\0\0\0\0\221G\0\377\377\0\0\377"
+ "\314O\0\377\221G\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Gll\0"
+ "Gll\0\314O\0\0\377\0\0\0\221G\0\0\0\0\0\0\221G\0\377\377\0\0\377\314"
+ "O\0\377\221G\0\377\0\0\0\377Gll\0\0\0\0\0\263\303\262\0\217\235\215\0"
+ "\221\242\217\0Gll\0Gll\0\314O\0\0\377\0\0\0\314O\0\0\0\0\0\0\314O\0\377"
+ "\377\0\0\377\221G\0\377\0\0\0\377Gll\0Gll\0g\210_\0\0\0\0\0\241\300\237"
+ "\0\205\256\202\0Gll\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\314O\0"
+ "\0\314O\0\377\377\0\0\377\314O\0\377\0\0\0\377Gll\0Gll\0\253\306\251"
+ "\0g\210_\0\0\0\0\0g\210_\0Gll\0Gll\0Gll\0Gll\0\314O\0\0\314O\0\0\314"
+ "O\0\0\314O\0\377\314O\0\377\314O\0\377\0\0\0\377Gll\0\241\300\237\0\207"
+ "\260\203\0@W9\0\0\0\0\0Gll\0Gll\0Gll\0Gll\0Gll\0\314O\0\0\377\377\0\0"
+ "\314O\0\0\314O\0\377\314O\0\377\314O\0\377\0\0\0\377\207\257\204\0h\210"
+ "_\0[yP\0@W9\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0\314O\0\0\377\377\0\0\314"
+ "O\0\0\314O\0\377\377\377\0\377\314O\0\377\0\0\0\377[yP\0WtL\0@W9\0Gl"
+ "l\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+ "\377\314O\0\0\0\0\0\0\314O\0\377\377\377\0\377\314O\0\377\0\0\0\377@"
+ "W9\0\33%\30\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0"
+ "\314O\0\377\314O\0\377\0\0\0\377\33%\30\0\0\0\0\0Gll\0Gll\0Gll\0Gll\0"
+ "Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0@W9\0\33%\30\0\0\0\0\0""4F.\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4=T;\0e\206a\0g\210^\0"
+ "\0\0\0\0.=)\0AW:\0\33%\30\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_throw_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_throw_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_throw_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0\221G\0\377\314O\0\377\314O\0\377G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\221"
+ "G\0\377\221G\0\377\314O\0\377\377\377\0\377\377\377\0\377\221G\0\377"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "\221G\0\377\221G\0\377\314O\0\377\377\377\0\377\377\377\0\377\314O\0"
+ "\377\221G\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\0\0\0"
+ "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+ "\0\377G\30\0\0G\30\0\0\221G\0\377\221G\0\377\314O\0\377\377\0\0\377\314"
+ "O\0\377\314O\0\377\221G\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0"
+ "\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0\221G\0\377\221G\0\377\377\0\0\377\377\0\0\377\314"
+ "O\0\377\314O\0\377\221G\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0"
+ "\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0\221G\0\377\377\0\0\377\377\0\0\377\314O"
+ "\0\377\314O\0\377\221G\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0"
+ "\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0\221G\0\377\377\0\0\377\377\0\0\377\314O"
+ "\0\377\221G\0\377\221G\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0"
+ "\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\314O\0\377\377\0\0\377\377\0\0\377"
+ "\221G\0\377\221G\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\314O\0\377\377\0\0\377\377\0"
+ "\0\377\221G\0\377\0\0\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\30\0\0G\30\0\0\314O\0\377\377"
+ "\0\0\377\377\0\0\377\314O\0\377\221G\0\377\0\0\0\377G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "\314O\0\377\314O\0\377\314O\0\377\314O\0\377\0\0\0\377\0\0\0\377G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0\314O\0\377\314O\0\377\314O\0\377\314O\0\377\314O\0\377\0\0\0\377"
+ "\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0\314O\0\377\314O\0\377\314O\0\377\314O\0\377"
+ "\0\0\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\314O\0\377\314O\0\377\377\377\0"
+ "\377\314O\0\377\0\0\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G"
+ "\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0"
+ "\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\314O\0\377\377\377"
+ "\0\377\377\377\0\377\314O\0\377\0\0\0\377\0\0\0\377G\30\0\0G\30\0\0G"
+ "\30\0\0G\30\0\0G\30\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+ "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\30"
+ "\0\0G\30\0\0G\30\0\0\314O\0\377\377\377\0\377\377\377\0\377\314O\0\377"
+ "\0\0\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\314O\0\377\314O\0\377\314O\0\377"
+ "\0\0\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0\221G\0\377\221G\0\377\221G\0\377"
+ "\221G\0\377\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30"
+ "\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0G\30\0\0"
+ "G\30\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377G\30\0\0G\30\0\0G\30\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_up_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_up_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_up_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0\11\0\0\0\377\0\0\0\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\1\0\0\0\7\0\0\0\23\0\0\0\377\233\255\232\377---\377\0\0"
+ "\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377\205\256\201\377\317\337\314\377"
+ "\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377[yP\377\207\257\204\377\255\310\253"
+ "\377\315\336\313\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377[yP\377[yP\377\207\257\204\377"
+ "\260\307\256\377\252\307\250\377\315\336\313\377\0\0\0\377\0\0\0\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5\377[yP\377[yP\377[y"
+ "P\377\207\257\204\377\255\306\253\377\263\312\261\377\264\313\262\377"
+ "\315\336\313\377\0\0\0\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\7\0\0\0\25\0\0\0\377<R5"
+ "\377[yP\377[yP\377[yP\377[yP\377\207\257\204\377\255\306\253\377\260"
+ "\311\260\377\265\316\265\377\261\311\260\377\315\336\313\377\0\0\0\377"
+ "\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0"
+ "\0\7\0\0\0\25\0\0\0\377JcB\377JcB\377JcB\377JcB\377[yP\377[yP\377\207"
+ "\257\204\377\255\310\253\377\260\311\256\377\267\314\265\377\263\304"
+ "\263\377\266\307\266\377\271\320\271\377\0\0\0\377\0\0\0\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\23\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377;P5\377[yP\377[yP\377\207\260\203\377\252"
+ "\307\250\377\256\307\254\377\271\316\267\377\0\0\0\377\0\0\0\377\0\0"
+ "\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0"
+ "\0\0\10\0\0\0\30\0\0\0&\0\0\0,\0\0\0""1\0\0\0""9\0\0\0\377;P5\377[yP"
+ "\377[yP\377\210\257\204\377\256\307\254\377\252\305\250\377\272\321\272"
+ "\377\0\0\0\377\0\0\0,\0\0\0&\0\0\0\30\0\0\0\10\0\0\0\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\13\0\0\0\20\0\0\0\22\0\0\0\35\0\0\0"
+ "1\0\0\0\377;P5\377[yP\377[yP\377\207\257\204\377\256\307\254\377\252"
+ "\305\250\377\271\316\267\377\0\0\0\377\0\0\0\22\0\0\0\20\0\0\0\13\0\0"
+ "\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\2"
+ "\0\0\0\4\0\0\0\23\0\0\0-\0\0\0\377;P5\377[yP\377[yP\377\207\260\203\377"
+ "\260\307\256\377\252\305\250\377\273\317\272\377\0\0\0\377\0\0\0\4\0"
+ "\0\0\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0-\0\0\0\377;P5\377[yP\377[y"
+ "P\377\210\260\205\377\256\307\254\377\256\307\254\377\273\320\271\377"
+ "\0\0\0\377\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0-\0\0\0"
+ "\377;P5\377[yP\377[yP\377\206\257\202\377\255\310\253\377\251\304\247"
+ "\377\262\311\260\377\0\0\0\377\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0"
+ "\0\0\21\0\0\0-\0\0\0\377AV9\377JcB\377JcB\377TqP\377g\214c\377i\202g"
+ "\377~\253x\377\0\0\0\377\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\20"
+ "\0\0\0+\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0"
+ "\0\14\0\0\0\40\0\0\0+\0\0\0-\0\0\0-\0\0\0-\0\0\0-\0\0\0,\0\0\0+\0\0\0"
+ "\40\0\0\0\14\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\14\0\0"
+ "\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\14"
+ "\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\2"
+ "\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_up_left_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_up_left_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_up_left_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\217\235\215\377\221\242\217\377\217\235\215"
+ "\377\263\303\262\377\263\303\262\377\263\303\262\377\264\314\263\377"
+ "\264\314\263\377\210\227\210\377S]S\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377DW@\377\205\256\202\377\241\300\237\377\260\311\256"
+ "\377\260\311\256\377\263\313\262\377\264\314\263\377\265\310\264\377"
+ "\200\214\200\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\3771C,\377g\210_\377\207\257\204\377\243\277\240\377\257\307\255\377"
+ "\260\311\260\377\265\314\263\377\231\251\230\377\0\0\0\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3776J0\377WuM\377g\210_\377"
+ "\207\257\204\377\241\277\237\377\256\307\254\377\260\310\256\377\267"
+ "\314\265\377V`U\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\3773F-\377XvN\377[yP\377g\210_\377\207\257\204\377\241\300\236\377"
+ "\253\306\251\377\254\306\253\377\266\315\265\377V_U\377\0\0\0\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3771B+\377[yP\377[yP\377[yP\377g\210_"
+ "\377\207\260\203\377\241\300\237\377\254\306\252\377\253\306\251\377"
+ "\267\315\266\377V`V\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773F-\377"
+ "XvN\377RnI\377XuM\377[yP\377h\210_\377\207\257\204\377\242\300\240\377"
+ "\255\306\253\377\255\307\254\377\266\314\264\377R]Q\377\0\0\0\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\3776J0\377MhE\377<P5\377@W9\377WtL\377[yP\377g\210_\377"
+ "\207\257\203\377\243\300\240\377\255\306\253\377\252\304\250\377\214"
+ "\260\210\377%2#\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3773E.\3774F.\377\0\0\0\377\33"
+ "%\30\377@W9\377WtL\377[yP\377h\211_\377\207\257\204\377\241\300\237\377"
+ "~\235|\377DUB\377\0\0\0\357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377!,\35\377\0\0\0\377\0"
+ "\0\0\0\0\0\0\316\33%\30\377@W9\377WtL\377[yP\377g\210^\377e\206a\377"
+ "=T;\377\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\314\33%\30\377@W9\377WtL\377OjF\3770A,\377\0"
+ "\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\377\377\377"
+ "\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\314\33%\30\377AW:\377.=)\377\0\0"
+ "\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\314\23\31"
+ "\20\377\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\377\377\377\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\1\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_up_right_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_up_right_arrow_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_up_right_arrow_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0"
+ "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+ "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377S]S\377\210\227\210\377\264\314\263\377\264\314\263"
+ "\377\263\303\262\377\263\303\262\377\263\303\262\377\217\235\215\377"
+ "\221\242\217\377\217\235\215\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\200\214\200\377\265\310\264\377\264\314\263"
+ "\377\263\313\262\377\260\311\256\377\260\311\256\377\241\300\237\377"
+ "\205\256\202\377DW@\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\231\251\230\377\265\314\263\377\260\311\260\377\257"
+ "\307\255\377\243\277\240\377\207\257\204\377g\210_\3771C,\377\0\0\0\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377V`U\377\267\314\265\377"
+ "\260\310\256\377\256\307\254\377\241\277\237\377\207\257\204\377g\210"
+ "_\377WuM\3776J0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377V_"
+ "U\377\266\315\265\377\254\306\253\377\253\306\251\377\241\300\236\377"
+ "\207\257\204\377g\210_\377[yP\377XvN\3773F-\377\0\0\0\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377V`V\377\267\315\266\377\253\306\251\377\254\306\252"
+ "\377\241\300\237\377\207\260\203\377g\210_\377[yP\377[yP\377[yP\3771"
+ "B+\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377R]Q\377\266\314\264\377\255\307"
+ "\254\377\255\306\253\377\242\300\240\377\207\257\204\377h\210_\377[y"
+ "P\377XuM\377RnI\377XvN\3773F-\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377%2#\377\214\260"
+ "\210\377\252\304\250\377\255\306\253\377\243\300\240\377\207\257\203"
+ "\377g\210_\377[yP\377WtL\377@W9\377<P5\377MhE\3776J0\377\0\0\0\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\357DUB\377~\235|\377\241\300\237\377\207\257\204\377"
+ "h\211_\377[yP\377WtL\377@W9\377\33%\30\377\0\0\0\3774F.\3773E.\377\0"
+ "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360=T;\377e\206a\377g\210^\377[yP"
+ "\377WtL\377@W9\377\33%\30\377\0\0\0\316\0\0\0\0\0\0\0\377!,\35\377\0"
+ "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3600A,\377OjF\377WtL\377@"
+ "W9\377\33%\30\377\0\0\0\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360.=)\377AW:"
+ "\377\33%\30\377\0\0\0\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\360\23\31\20\377\0\0\0\314\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0"
+ "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\377\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_zap_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_zap_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_zap_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\0\377\0\377\0\377\0\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+ "\377\377\377\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\0\377\0\377\0\377\0\377\0\377\377\377\0\377\377\377\0\377"
+ "\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\0\377\0\377\377"
+ "\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377"
+ "\0\377\0\377\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\0\377\0\377\0\377\377\377\0\377\0\377\0\377\0\377\0\377"
+ "\0\377\0\377\0\377\0\377\0\377\0\377\377\377\0\377\377\377\0\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\0"
+ "\377\0\377\377\377\0\377\0\377\0\377\377\377\0\377\0\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\0\377\0\377\0\377\377\377\0\377\0\377\0\377\0\377"
+ "\0\377\0\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\377\0"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\0\377"
+ "\0\377\377\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\377\377\0\377"
+ "\0\377\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\0\377\0\377\0\377\0\377\0\377\377\377\0\377\0\377\0\377"
+ "\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\0\377\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\377\0\377\377\377"
+ "\0\377\377\377\0\377\0\377\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\0\377\0\377\0\377\377\377\0\377\377\377\0\377\0\377"
+ "\0\377\377\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\360\377\345\345\313\377"
+ "\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\377\377\0"
+ "\377\0\377\0\377\0\377\0\377\0\377\0\377\377\377\0\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\0\0\377\302Q\276\377\37\37\32\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\0\377\0\377\0\377\0\377\0\377\377\377\0\377\377\377\0\377"
+ "\377\377\0\377\0\377\0\377\0\0\0\0\0\0\0\0\0\377\0""3\377\306\0\216\377"
+ "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\0\377\0\377\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\306\0\216"
+ "\377\34\0\34\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\255\255\233"
+ "\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_zap_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_zap_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_zap_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\2\377\0\377\16\377\0\377"
+ "-\377\0\377Y\377\0\377\210\377\0\377\254\377\0\377\377\377\0\377q\377"
+ "\0\377\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\0\377"
+ "\0\377\11\377\0\377G\377\0\377\255\377\0\377\352\377\0\377\355\377\0"
+ "\377\350\377\0\377~\377\0\377\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\0\377\3\377\0\377E\377\0\377\305\377\0\377\354\377\0\377\364\377"
+ "\0\377\353\377\0\377\246\377\0\377_\377\0\377J\377\0\377\15\0\0\0\0\0"
+ "\0\0\0\377\0\377\10\377\0\377+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\15\377\0\377\221"
+ "\377\0\377\274\377\0\377t\377\0\377[\377\0\377O\377\0\377\33\377\0\377"
+ "\3\377\0\377\0\377\0\377\0\377\0\377\10\377\0\3770\377\0\377W\377\0\377"
+ "\263\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\0\377\4\377\0\377S\377\0\377\267\377\0\377\207\377\0\377"
+ "\27\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0\377\0"
+ "\377\13\377\0\377`\377\0\377\313\377\0\377\321\377\0\377\313\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\0\377\14\377\0\377q\377\0\377\336\377\0\377\214\377\0\377\15"
+ "\377\0\377\2\377\0\377\4\377\0\377\15\377\0\377K\377\0\377\270\377\0"
+ "\377\361\377\0\377\371\377\0\377\355\377\0\377t\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\0\377\20\377\0\377\254\377\0\377\354\377\0\377M\377\0\377%\377\0\377"
+ "{\377\0\377\250\377\0\377\364\377\0\377\377\377\0\377\377\377\0\377\376"
+ "\377\0\377\311\377\0\377\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\377\27\377\0\377"
+ "\303\377\0\377\257\377\0\377/\377\0\377+\377\0\377\267\377\0\377\323"
+ "\377\0\377\356\377\0\377\377\377\0\377\376\377\0\377\362\377\0\377l\377"
+ "\0\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\0\377\25\377\0\377\260\377\0\377\250\377\0\377"
+ "\31\377\0\377\4\377\0\377\4\377\0\377P\377\0\377\320\377\0\377\340\377"
+ "\0\377\274\377\0\377\222\377\0\377R\377\0\377\20\377\0\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\0\377L\377\0\377\352\377\0\377\217\377\0\377\7\377\0\377\1\377"
+ "\0\377\0\377\0\3778\377\0\377\334\377\0\377\370\377\0\377y\377\0\377"
+ "\5\377\0\377\0\377\0\377\0\377\0\377\0\0\0\0\0\0\0\0\0Gll\0Gll\0Gll\0"
+ "Gll\0Gll\0Gll\0Gll\0Gll\0\377\0\377\20\377\0\377\220\377\0\377\207\377"
+ "\0\377\5\377\0\377\4\377\0\377\26\377\0\377d\377\0\377\311\377\0\377"
+ "\360\377\0\377\201\377\0\377\20\377\0\377\0\377\0\377\0\377\0\377\0\0"
+ "\0\0\0\0\0\0\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0\377\0\377\4\377"
+ "\0\377<\377\0\377\254\377\0\377n\377\0\377P\377\0\377\247\377\0\377\360"
+ "\377\0\377\371\377\0\377\322\377\0\377@\377\0\377\6\377\0\377\0\377\0"
+ "\377\0\377\0\377\0\0\0\0\0\0\0\0\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0"
+ "Gll\0\377\0\377:\377\0\377\336\377\0\377\371\377\0\377\364\377\0\377"
+ "\356\377\0\377\374\377\0\377\343\377\0\377\217\377\0\377C\377\0\377D"
+ "\377\0\377\204\377\0\377\20\377\0\377\20\377\0\377\3\0\0\0\0\0\0\0\0"
+ "Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0\377\0\377\251\377\0\377\377"
+ "\377\0\377\376\377\0\377\315\377\0\377\277\377\0\377\364\377\0\377\335"
+ "\377\0\377w\377\0\377R\377\0\377\335\377\0\377\375\377\0\377\231\377"
+ "\0\377~\377\0\377\34\0\0\0\0\0\0\0\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gl"
+ "l\0\377\377\377\0\377\0\377h\377\0\377\363\377\0\377\337\377\0\377@\377"
+ "\0\377[\377\0\377\356\377\0\377\362\377\0\377\363\377\0\377\323\377\0"
+ "\377\372\377\0\377\364\377\0\377\370\377\0\377\352\377\0\377C\0\0\0\0"
+ "\0\0\0\0Gll\0Gll\0Gll\0Gll\0Gll\0\377\377\377\377\332\332\266\377\377"
+ "\0\377\0\377\0\377\20\377\0\377P\377\0\3776\377\0\377\10\377\0\3776\377"
+ "\0\377\305\377\0\377\345\377\0\377\375\377\0\377\370\377\0\377\363\377"
+ "\0\377\223\377\0\377\224\377\0\377[\377\0\377\15\0\0\0\0\0\0\0\0Gll\0"
+ "Gll\0Gll\0Gll\0\377\377\377\377\332\332\266\377\377\0\377\0\0\0\0\0\0"
+ "\0\0\0Gll\0Gll\0Gll\0\377\0\377\10\377\0\377/\377\0\377e\377\0\377\327"
+ "\377\0\377\330\377\0\377\314\377\0\377=\377\0\377\20\377\0\377\3\377"
+ "\0\377\0\0\0\0\0\0\0\0\0Gll\0Gll\0Gll\0\377\0\0\377\377\0\377\377\0\0"
+ "\0\377\0\0\0\377\0\0\0\0Gll\0Gll\0Gll\0Gll\0\0\0\0\0\0\0\0\0\377\0\377"
+ "\10\377\0\3770\377\0\377W\377\0\377\253\377\0\3770\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0Gll\0Gll\0\377\0\0\377\377\0\377\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\0Gll\0Gll\0Gll\0Gll\0Gll\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\0\377\10\377\0\377(\377\0\377\10\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0Gll\0\377\0\0\377\377\0\377\377\0\0\0\377\0\0\0\377\0\0"
+ "\0\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\0\377\377\0\0\0\377\0\0\0\377\0\0\0\0Gll\0Gll\0Gll\0Gll"
+ "\0Gll\0Gll\0Gll\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\332\332\266\377"
+ "\0\0\0\377\0\0\0\377Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0Gll\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_spellbook_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_spellbook_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_spellbook_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0"
+ "\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15"
+ "\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0"
+ "\177X1\377\266u3\377J$\27\377\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15"
+ "\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0"
+ "\15\0\0\0\226ZR\377\247NF\377\244^T\377J$\27\377\15\0\0\0\15\0\0\0\15"
+ "\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0"
+ "\15\0\0\0[3+\377w2G\377\2104U\377l\35""0\377\203\77@\377L\22\6\377\15"
+ "\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0"
+ "3\6\11\377\214SZ\377\212:E\377\227J8\377\262eG\377\242RI\377h\26\"\377"
+ "m\31""3\377\"\0\0\377\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15"
+ "\0\0\0\15\0\0\0\234cj\377\205=H\377\237`A\377\246R.\377\2246\22\377\250"
+ "T<\377\216I:\377g+!\377}==\377nKE\377\15\0\0\0\15\0\0\0\15\0\0\0\15\0"
+ "\0\0\15\0\0\0\220PQ\377\2009=\377\231X\40\377\272iT\377\263fT\377\242"
+ "[\77\377\241[9\377\221I3\377f\33\25\377o+\"\377|>\15\377|>\15\377\15"
+ "\0\0\0\15\0\0\0ZCS\377nN'\377\207EG\377\2056;\377\257d<\377\213=0\377"
+ "\213;4\377\233L=\377\2010\33\377\215:4\377\205/8\377a\33\31\377T\32\4"
+ "\3770\13\0\377\15\0\0\0\15\0\0\0\15\0\0\0B\40\5\377wD%\377\241PV\377"
+ "\256^C\377\220H2\377\250YL\377\230E3\377\263aK\377\2050)\377\203.5\377"
+ "S\21\22\377/\0\0\3774\24\25\377\15\0\0\0\15\0\0\0\15\0\0\0\262\223\216"
+ "\377g73\377z89\377\242]V\377\235W>\377\241OC\377\234I7\377\2047#\377"
+ "u/'\377a\33#\377-\4\12\377*\27\35\377\15\0\0\0\15\0\0\0\15\0\0\0\36\17"
+ "\14\377-\17\21\377\257\205\207\377H\21\14\377|BA\377\2006-\377\201,1"
+ "\377\177)(\377v/)\377n/7\377D\11\37\377@%,\377\15\0\0\0\15\0\0\0\15\0"
+ "\0\0\15\0\0\0\15\0\0\0)\16\25\377)\1\11\377\214]U\377\77\15\16\377\200"
+ "39\377{$7\377\204-=\377^\30\"\377:\0\25\377E\17""3\377\15\0\0\0\15\0"
+ "\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0""0\15\7\377"
+ "\300\226\212\377\220l\\\377\214]\77\377\214Z7\377>\31\7\377Q76\377\15"
+ "\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0"
+ "\15\0\0\0@&'\3771\17\15\377\247\223x\3772\20\21\377hDR\3775$.\377\15"
+ "\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0"
+ "\15\0\0\0\15\0\0\0\15\0\0\0""1\32\40\377'\26\6\377\30\1\13\377_G]\377"
+ "\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0"
+ "\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0!\27\16\377"
+ "\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0"
+ "\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_spellbook_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_spellbook_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_spellbook_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1936) */
+ "\0\0\7\250"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (88) */
+ "\0\0\0X"
+ /* width (22) */
+ "\0\0\0\26"
+ /* height (22) */
+ "\0\0\0\26"
+ /* pixel_data: */
+ "\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0"
+ "\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\302\253y\377\302\253y\377\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0"
+ "\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\177X1\377\266u3\377\244^T\377J$\27\377\0\21\0\0\0\21\0"
+ "\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0g"
+ "PJ\377\226ZR\377\247NF\377\210.%\377\244^T\377J$\27\377\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0[3+\377\225ae\377"
+ "w2G\377\2104U\377\2147V\377l\35""0\377\203\77@\377L\22\6\377\0\21\0\0"
+ "\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0`@A\377\217@U\377\221DT\377w"
+ "/:\377\206\77E\377\210\77F\377\210:G\377\2114I\377\2217Q\377>\31\40\377"
+ "\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0""3\6\11\377\214SZ\377\212:E\377\234L"
+ "K\377\227J8\377\262eG\377\230K1\377\242RI\377h\26\"\377m\31""3\377n-"
+ "3\377\"\0\0\377\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0"
+ "\0\21\0\0\0\21\0\0\0\21\0\0H()\377\234cj\377\205=H\377\237`A\377\245"
+ "\\;\377\246R.\377\2246\22\377\257R1\377\250T<\377\216I:\377g+!\377q!"
+ "$\377}==\377nKE\377\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\220PQ\377\220PQ\377\2009=\377\231X\40\377\272iT\377\262"
+ "cR\377\263fT\377\242[\77\377\226P,\377\241[9\377\221I3\377f\33\25\377"
+ "`\40;\377o+\"\377|>\15\377|>\15\377\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0"
+ "\0\0\21\0\0\240\201R\377\207EG\377\207EG\377o$)\377\262l9\377\253\\M"
+ "\377\2044)\377^\20\4\377\223H3\377\255cF\377\236T9\377\244VJ\377y)*\377"
+ "_\31""1\377|5/\377~@\33\377^9\17\377/'\24\377\0\21\0\0\0\21\0\0\0\21"
+ "\0\0ZCS\377nN'\377\207EG\377\222KO\377\2056;\377\257d<\377\213=0\377"
+ "\213=3\377\213;4\377\233L=\377\222B+\377\2010\33\377\215:4\377\205/8"
+ "\377o&7\377a\33\31\377T\32\4\3770\13\0\3776('\377\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0B\40\5\377wD%\377z37\377\241PV\377\256^C\377\220H2\377"
+ "\2004$\377\250YL\377\230E3\377\233J/\377\263aK\377\2050)\377\203.5\377"
+ "\211=I\377S\21\22\377/\0\0\3774\24\25\377\22\4\21\377\0\21\0\0\0\21\0"
+ "\0\0\21\0\0\0\21\0\0xWH\377`-\34\377\200>@\377\213\77C\377\252]M\377"
+ "\256gK\377\2049\"\377\236M:\377\234J4\377\265bD\377\300oT\377}-\"\377"
+ "{,/\377J\3\13\377N\25\33\377/\13\17\3774\37(\377\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0\0\21\0\0\262\223\216\377g73\377O\25\24\377z89\377\242"
+ "]V\377\235W>\377\261fS\377\241OC\377\234I7\377\232H0\377\2047#\377u/"
+ "'\377a\33#\377T\27\36\377-\4\12\377*\27\35\377\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\36\17\14\377-\17\21\377\257\205\207\377\222a]"
+ "\377H\21\14\377|BA\377\2006-\377\244TS\377\201,1\377\177)(\377\21081"
+ "\377v/)\377n/7\377D\11\37\377C\20\31\377@%,\377\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0)\16\25\377)\1\11\377\266\213"
+ "\205\377\214]U\377\77\15\16\377\20039\377}+9\377{$7\377\204-=\377\206"
+ "6\77\377^\30\"\377:\0\25\377E\17""3\377V+5\377\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0""1\"%\377"
+ "#\7\3\377\304\234\220\377\211ZH\3776\4\7\377\210R:\377\240d(\377\305"
+ "\2066\377\365\272n\377S\36\0\377$\0\0\377V/N\377\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0"
+ "\0\0\21\0\0""0\33\32\3770\15\7\377\300\226\212\377\220l\\\3779\20\0\377"
+ "\214]\77\377\214Z7\377A\22\0\377>\31\7\377Q76\377\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0"
+ "\0\0\21\0\0\0\21\0\0\0\21\0\0@&'\3771\17\15\377\247\223x\377pVG\3772"
+ "\20\21\377hDR\377+\14\34\3775$.\377\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0"
+ "\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0""1\32\40\377'\26\6\377\177je\377\30\1"
+ "\13\377_G]\377)\27/\377\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0"
+ "\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0.\27!\377\40\11\17\377\15\0\0"
+ "\3774&#\377\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0"
+ "\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0<(3\377!\27\16\377\0\21\0"
+ "\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21"
+ "\0\0\0\21\0\0\0\21\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_whatshere_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_whatshere_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_whatshere_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\0\0\277"
+ "\0\0\0\377\0\0\0\377\0\0\0\277\0\0\0@\0\0\0\0\0\0\0@\0\0\0\277\0\0\0"
+ "\377\0\0\0\377\0\0\0\277\0\0\0@\0\0\0\0\0\0\0\0\0\0\0@777\377\256\256"
+ "\256\377\366\366\366\377\366\366\366\377\256\256\256\377777\377\0\0\0"
+ "\200777\377\256\256\256\377\366\366\366\377\366\366\366\377\256\256\256"
+ "\377777\377\0\0\0@\0\0\0\0\0\0\0\277\256\256\256\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\256\256\256\377\0\0"
+ "\0\377\256\256\256\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\256\256\256\377\0\0\0\277\0\0\0\0\0\0\0\377\366\366"
+ "\366\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\366\366\366\377\0\0\0\377\366\366\366\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\366\366\366\377\0\0\0\377\200"
+ "\200\200\200\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\0\0\0\377\200\200\200\377\0\0\0\377\366\366\366\377"
+ "777\377777\377\377\377\377\377\377\377\377\377\366\366\366\377\0\0\0"
+ "\377\366\366\366\377777\377777\377\377\377\377\377\377\377\377\377\366"
+ "\366\366\377\0\0\0\377\200\200\200\377\0\0\0\277\256\256\256\377777\377"
+ "777\377\377\377\377\377\377\377\377\377\256\256\256\377\0\0\0\377\256"
+ "\256\256\377777\377777\377\377\377\377\377\377\377\377\377\256\256\256"
+ "\377\40\40\40\377\200\200\200\377\0\0\0@777\377\256\256\256\377\366\366"
+ "\366\377\366\366\366\377\256\256\256\377777\377@@@\377777\377\256\256"
+ "\256\377\366\366\366\377\366\366\366\377\256\256\256\377777\377```\377"
+ "\200\200\200\277\0\0\0\0\0\0\0@\0\0\0\277\0\0\0\377\0\0\0\377\40\40\40"
+ "\377```\377\200\200\200\277\0\0\0@\0\0\0\277\0\0\0\377\0\0\0\377\40\40"
+ "\40\377```\377\200\200\200\377\200\200\200@\0\0\0\0\0\0\0\0\0\0\0\0\200"
+ "\200\200\277\200\200\200\377\200\200\200\377\200\200\200\200\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\377\200\200\200\377\200"
+ "\200\200\277\200\200\200@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_whatshere_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_whatshere_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_whatshere_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40\0\0\0\177\0\0\0"
+ "\177\0\0\0\177\0\0\0\177\0\0\0\40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0`\0\0\0\177\0\0\0\177\0\0\0\177\0\0\0`\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\217\0\0\0\317\0\0\0\377\0"
+ "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\317\0\0\0\217\0\0\0\0\0\0\0\0\0\0"
+ "\0""0\0\0\0\277\0\0\0\357\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\357\0\0"
+ "\0\277\0\0\0""0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0\237)))\377bbb"
+ "\377\345\345\345\377\370\370\370\377\370\370\370\377\345\345\345\377"
+ "bbb\377)))\377\0\0\0\237\0\0\0@\16\16\16\377777\377\271\271\271\377\353"
+ "\353\353\377\377\377\377\377\353\353\353\377\271\271\271\377777\377\16"
+ "\16\16\377\0\0\0""0\0\0\0\0\0\0\0\0\0\0\0@\0\0\0\377\245\245\245\377"
+ "\362\362\362\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\362\362\362\377\245\245\245\377\0\0\0\377\0\0\0\377777\377"
+ "\345\345\345\377\373\373\373\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\373\373\373\377\345\345\345\377777\377\0\0\0\277\0\0\0\0"
+ "\0\0\0\0\0\0\0\317RRR\377\342\342\342\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\342\342\342\377RRR\377\0\0\0\377\271\271\271\377\373\373\373\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\373\373\373\377\271\271\271\377\0\0\0\357\0\0\0`\0\0\0\0\0\0"
+ "\0\377rrr\377\370\370\370\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\370\370"
+ "\377rrr\377\0\0\0\377\353\353\353\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\353\353\353\377\0\0\0\377@@@\377\200\200\200@\0\0\0\377"
+ "\200\200\200\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\200\200\200\377\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\0\0\0\377@@@\377\200\200\200"
+ "\237\0\0\0\377\200\200\200\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\200\200\200\377\0\0\0\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377@@@\377"
+ "\200\200\200\377\0\0\0\377{{{\377\375\375\375\377|||\377\0\0\0\377||"
+ "|\377\377\377\377\377\377\377\377\377\377\377\377\377\375\375\375\377"
+ "{{{\377\0\0\0\377\370\370\370\377\322\322\322\377)))\377)))\377\322\322"
+ "\322\377\377\377\377\377\377\377\377\377\377\377\377\377\370\370\370"
+ "\377\0\0\0\377@@@\377\200\200\200\377\0\0\0\377nnn\377\366\366\366\377"
+ "\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\366\366\366\377nnn\377\0\0\0\377\345\345\345\377\200\200\200"
+ "\377\0\0\0\377\0\0\0\377\200\200\200\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\345\345\345\377\0\0\0\377@@@\377\200\200\200\377"
+ "\0\0\0p\34\34\34\377\271\271\271\377|||\377\0\0\0\377|||\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\271\271\271\377\34\34\34\377"
+ "\0\0\0\377bbb\377\305\305\305\377)))\377)))\377\322\322\322\377\377\377"
+ "\377\377\377\377\377\377\362\362\362\377bbb\377\30\30\30\377ppp\377\200"
+ "\200\200\377\0\0\0""0\0\0\0\337|||\377\271\271\271\377\366\366\366\377"
+ "\375\375\375\377\375\375\375\377\366\366\366\377\271\271\271\377|||\377"
+ "\20\20\20\377\40\40\40\377)))\377\245\245\245\377\342\342\342\377\370"
+ "\370\370\377\377\377\377\377\370\370\370\377\342\342\342\377\245\245"
+ "\245\377)))\377888\377\200\200\200\377\200\200\200\317\0\0\0\0\0\0\0"
+ "@\0\0\0\337\34\34\34\377nnn\377{{{\377{{{\377nnn\377\34\34\34\377\20"
+ "\20\20\377```\377\200\200\200\377\0\0\0\237\0\0\0\377SSS\377rrr\377\200"
+ "\200\200\377rrr\377SSS\377\0\0\0\377000\377\200\200\200\377\200\200\200"
+ "\377\200\200\200@\0\0\0\0\0\0\0\0\0\0\0""0\0\0\0p\0\0\0\377\0\0\0\377"
+ "\0\0\0\377\0\0\0\377HHH\377hhh\377\200\200\200\377\200\200\200p\0\0\0"
+ "\20\0\0\0@\0\0\0\317\0\0\0\377\0\0\0\377\0\0\0\377\30\30\30\377```\377"
+ "xxx\377\200\200\200\377\200\200\200\237\200\200\200\20\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\200\200\200`\200\200\200\357\200\200\200\377\200\200"
+ "\200\377\200\200\200\377\200\200\200\277\200\200\200`\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\200\200\200\277\200\200\200\337\200\200\200\377\200"
+ "\200\200\377\200\200\200\377\200\200\200\317\200\200\200\217\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200`\200\200"
+ "\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200@\200\200\200\200\200\200\200"
+ "\200\200\200\200\200\200\200\200\40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_whatsthere_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_whatsthere_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_whatsthere_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\0\277\277\277\4\274\274\274@\257\257\257b\240\240\240b\220\220"
+ "\220b\203\203\203K\0\0\0\0\243\243\243\11\236\236\236Q\226\226\226b\214"
+ "\214\214b\202\202\202b{{{5\0\0\0\0\0\0\0\0\0\0\0\0\272\272\272\12\302"
+ "\302\302\246\326\326\326\377\261\261\261\377\251\251\251\377\204\204"
+ "\204\304\0\0\0\0\235\235\235\30\260\260\260\323\312\312\312\377\246\246"
+ "\246\377\245\245\245\377uuu\211\0\0\0\0\0\0\0\0\0\0\0\0\212\212\212\12"
+ "\220\220\220\246\237\237\237\377ttt\377aaa\377___\304\0\0\0\0vvv\30\201"
+ "\201\201\323\230\230\230\377iii\377aaa\377ZZZ\211\0\0\0\0\0\0\0\0\262"
+ "\262\262*\246\246\246Q\217\217\217\204\243\243\243\370\242\242\242\377"
+ "yyy\377sss{\0\0\0\0ppp\15xxx\225\242\242\242\377\215\215\215\377ggg\366"
+ "dddniiiNiii\36\260\260\260\213\314\314\314\377\324\324\324\377\325\325"
+ "\325\377\317\317\317\377\311\311\311\377\177\177\177\355ccc\261\250\250"
+ "\250\270\222\222\222\361\266\266\266\377\251\251\251\377\234\234\234"
+ "\377\237\237\237\377\227\227\227\377JJJd\251\251\251\253\334\334\334"
+ "\377\333\333\333\377\354\354\354\377\321\321\321\377\266\266\266\377"
+ "\220\220\220\377\237\237\237\377\212\212\212\377{{{\377\276\276\276\377"
+ "\236\236\236\377\177\177\177\377\177\177\177\377\220\220\220\377:::~"
+ "\242\242\242\260\340\340\340\377\333\333\333\377\354\354\354\377\321"
+ "\321\321\377\267\267\267\377\237\237\237\377\263\263\263\377\227\227"
+ "\227\377{{{\377\276\276\276\377\236\236\236\377\177\177\177\377}}}\377"
+ "\225\225\225\377AAA\211\231\231\231\260\327\327\327\377\333\333\333\377"
+ "\354\354\354\377\321\321\321\377\266\266\266\377\234\234\234\377\253"
+ "\253\253\377\222\222\222\377{{{\377\276\276\276\377\236\236\236\377\177"
+ "\177\177\377xxx\377\231\231\231\377BBB\211\232\232\232\277\332\332\332"
+ "\377\333\333\333\377\354\354\354\377\321\321\321\377\266\266\266\377"
+ "\234\234\234\377\253\253\253\377\222\222\222\377{{{\377\276\276\276\377"
+ "\236\236\236\377\177\177\177\377ttt\377\240\240\240\377III\252\215\215"
+ "\215\330\302\302\302\377\303\303\303\377\316\316\316\377\264\264\264"
+ "\377\234\234\234\377\207\207\207\377\224\224\224\377\200\200\200\377"
+ "nnn\377\243\243\243\377\211\211\211\377qqq\377eee\377\207\207\207\377"
+ "GGG\260\212\212\212\330\264\264\264\377\276\276\276\377\231\231\231\377"
+ "iii\377999\333MMM\363xxx\377zzz\377BBB\357OOO\317\212\212\212\377jjj"
+ "\377___\377zzz\377GGG\260\262\262\262\336\343\343\343\377\356\356\356"
+ "\377\272\272\272\377yyy\377...\237111\235:::\261;;;\261///\237UUU\246"
+ "\307\307\307\377\216\216\216\377{{{\377\263\263\263\377aaa\325\235\235"
+ "\235\371\265\265\265\377\270\270\270\377\224\224\224\377eee\377///\211"
+ "\0\0\0\0\0\0\0\0\0\0\0\0---\12JJJ\246\244\244\244\377ttt\377ggg\377\230"
+ "\230\230\377aaa\330\241\241\241\377\240\240\240\377\237\237\237\377\200"
+ "\200\200\377XXX\377---\211\0\0\0\0\0\0\0\0\0\0\0\0---\12III\246\224\224"
+ "\224\377eee\377YYY\377\217\217\217\377jjj\334{{{\377kkk\377VVV\377MM"
+ "M\377KKK\377>>>\211\0\0\0\0\0\0\0\0\0\0\0\0---\12UUU\246jjj\377BBB\377"
+ "777\377```\377XXX\372KKKb888b%%%b(((b666b<<<5\0\0\0\0\0\0\0\0\0\0\0\0"
+ "---\4FFF@>>>b(((b$$$b666b\77\77\77b"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_whatsthere_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_whatsthere_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_whatsthere_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\277\277\277\1\274\274\274\11\267\267\267\24\255\255"
+ "\255\24\243\243\243\24\230\230\230\24\216\216\216\24\203\203\203\24\201"
+ "\201\201\3\0\0\0\0\243\243\243\0\241\241\241\7\236\236\236\24\227\227"
+ "\227\24\221\221\221\24\212\212\212\24\204\204\204\24}}}\24{{{\6\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\276\276\276\17\275\275\275z\274\274"
+ "\274\377\266\266\266\377\251\251\251\377\236\236\236\377\226\226\226"
+ "\377\205\205\205\377\200\200\200'\0\0\0\0\242\242\242\5\242\242\242]"
+ "\242\242\242\377\243\243\243\377\232\232\232\377\222\222\222\377\215"
+ "\215\215\377\201\201\201\377zzzN\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\270\270\270\17\301\301\301z\326\326\326\377\337\337\337\377\271"
+ "\271\271\377\250\250\250\377\262\262\262\377\206\206\206\377www'\0\0"
+ "\0\0\232\232\232\5\242\242\242]\271\271\271\377\337\337\337\377\301\301"
+ "\301\377\250\250\250\377\257\257\257\377\216\216\216\377rrrN\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\233\233\233\17\242\242\242z\261\261"
+ "\261\377\256\256\256\377~~~\377bbb\377lll\377hhh\377eee'\0\0\0\0\203"
+ "\203\203\5\207\207\207]\225\225\225\377\254\254\254\377\213\213\213\377"
+ "bbb\377ggg\377jjj\377bbbN\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppp"
+ "\12rrr\\}}}\335\224\224\224\377\222\222\222\377rrr\377___\377RRR\306"
+ "NNN\34\0\0\0\0bbb\3cccDkkk\324\214\214\214\377\236\236\236\377ttt\377"
+ "ZZZ\377RRR\322LLL8\0\0\0\0\0\0\0\0\0\0\0\0\264\264\264$\256\256\256v"
+ "\243\243\243x\224\224\224\216\222\222\222\317\244\244\244\377\246\246"
+ "\246\377\214\214\214\377{{{\377{{{\257~~~\27\0\0\0\0ppp\3qqq;www\303"
+ "\221\221\221\377\242\242\242\377\201\201\201\377jjj\377ggg\277hhh\200"
+ "iiiviiiviii\11\261\261\261N\264\264\264\377\312\312\312\377\307\307\307"
+ "\377\304\304\304\377\304\304\304\377\301\301\301\377\277\277\277\377"
+ "\275\275\275\377\206\206\206\377qqq\233[[[\211\253\253\253\214\245\245"
+ "\245\264\210\210\210\377\250\250\250\377\242\242\242\377\234\234\234"
+ "\377\226\226\226\377\217\217\217\377\233\233\233\377\241\241\241\377"
+ "^^^\377RRR\24\251\251\251i\270\270\270\377\352\352\352\377\337\337\337"
+ "\377\364\364\364\377\360\360\360\377\341\341\341\377\325\325\325\377"
+ "\305\305\305\377~~~\377lll\377eee\377\204\204\204\377\210\210\210\377"
+ "\215\215\215\377\314\314\314\377\275\275\275\377\253\253\253\377\231"
+ "\231\231\377\207\207\207\377\244\244\244\377\271\271\271\377NNN\3776"
+ "66%\243\243\243\204\271\271\271\377\351\351\351\377\323\323\323\377\357"
+ "\357\357\377\352\352\352\377\325\325\325\377\305\305\305\377\262\262"
+ "\262\377\226\226\226\377\266\266\266\377\266\266\266\377\250\250\250"
+ "\377zzz\377~~~\377\301\301\301\377\257\257\257\377\231\231\231\377\203"
+ "\203\203\377nnn\377\212\212\212\377\250\250\250\377QQQ\377333E\234\234"
+ "\234\211\270\270\270\377\360\360\360\377\323\323\323\377\357\357\357"
+ "\377\352\352\352\377\325\325\325\377\305\305\305\377\262\262\262\377"
+ "\230\230\230\377\273\273\273\377\260\260\260\377\247\247\247\377zzz\377"
+ "~~~\377\301\301\301\377\257\257\257\377\231\231\231\377\203\203\203\377"
+ "nnn\377\210\210\210\377\251\251\251\377XXX\377444N\224\224\224\211\263"
+ "\263\263\377\351\351\351\377\323\323\323\377\357\357\357\377\352\352"
+ "\352\377\325\325\325\377\305\305\305\377\261\261\261\377\224\224\224"
+ "\377\262\262\262\377\245\245\245\377\236\236\236\377xxx\377~~~\377\301"
+ "\301\301\377\257\257\257\377\231\231\231\377\203\203\203\377nnn\377\210"
+ "\210\210\377\260\260\260\377[[[\377444N\214\214\214\211\257\257\257\377"
+ "\344\344\344\377\323\323\323\377\357\357\357\377\352\352\352\377\325"
+ "\325\325\377\305\305\305\377\261\261\261\377\224\224\224\377\262\262"
+ "\262\377\245\245\245\377\236\236\236\377xxx\377~~~\377\301\301\301\377"
+ "\257\257\257\377\231\231\231\377\203\203\203\377nnn\377|||\377\256\256"
+ "\256\377[[[\377444N\206\206\206\215\274\274\274\377\344\344\344\377\323"
+ "\323\323\377\357\357\357\377\352\352\352\377\325\325\325\377\305\305"
+ "\305\377\261\261\261\377\224\224\224\377\262\262\262\377\245\245\245"
+ "\377\236\236\236\377xxx\377~~~\377\301\301\301\377\257\257\257\377\231"
+ "\231\231\377\203\203\203\377nnn\377{{{\377\260\260\260\377hhh\377444"
+ "{~~~\304\302\302\302\377\341\341\341\377\320\320\320\377\354\354\354"
+ "\377\347\347\347\377\322\322\322\377\302\302\302\377\257\257\257\377"
+ "\222\222\222\377\260\260\260\377\243\243\243\377\234\234\234\377www\377"
+ "|||\377\277\277\277\377\255\255\255\377\230\230\230\377\202\202\202\377"
+ "mmm\377yyy\377\261\261\261\377ttt\377555\211rrr\304\257\257\257\377\273"
+ "\273\273\377\264\264\264\377\306\306\306\377\277\277\277\377\254\254"
+ "\254\377\234\234\234\377\215\215\215\377yyy\377\216\216\216\377\205\205"
+ "\205\377\201\201\201\377fff\377jjj\377\231\231\231\377\215\215\215\377"
+ "}}}\377nnn\377___\377ccc\377\204\204\204\377```\377333\211fff\304\242"
+ "\242\242\377\233\233\233\377\247\247\247\377\235\235\235\377\205\205"
+ "\205\377iii\377HHH\377\77\77\77\340DDD\365XXX\377fff\377lll\377PPP\377"
+ "\77\77\77\361HHH\326```\377mmm\377]]]\377RRR\377WWW\377hhh\377RRR\377"
+ "222\211zzz\304\355\355\355\377\336\336\336\377\360\360\360\377\332\332"
+ "\332\377\257\257\257\377\200\200\200\377EEE\377---\217999\332aaa\377"
+ "~~~\377\211\211\211\377QQQ\377---\323LLLz\221\221\221\377\306\306\306"
+ "\377\223\223\223\377ooo\377\177\177\177\377\266\266\266\377\222\222\222"
+ "\377888\240\215\215\215\322\355\355\355\377\340\340\340\377\361\361\361"
+ "\377\334\334\334\377\263\263\263\377\207\207\207\377III\377///f---q-"
+ "--\211---\211---\211---\211---xLLLz\221\221\221\377\311\311\311\377\230"
+ "\230\230\377vvv\377\206\206\206\377\270\270\270\377\246\246\246\3779"
+ "99\304\204\204\204\361\322\322\322\377\271\271\271\377\306\306\306\377"
+ "\266\266\266\377\227\227\227\377uuu\377DDD\377///N\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0---\17FFFz\177\177\177\377\255\255\255\377\202"
+ "\202\202\377hhh\377ttt\377\234\234\234\377\241\241\241\377999\304\200"
+ "\200\200\377\274\274\274\377\226\226\226\377\240\240\240\377\224\224"
+ "\224\377zzz\377___\377<<<\377---N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0---\17@@@zppp\377\223\223\223\377jjj\377UUU\377___\377\203\203\203"
+ "\377\237\237\237\377999\304\227\227\227\377\274\274\274\377\226\226\226"
+ "\377\240\240\240\377\224\224\224\377zzz\377___\377<<<\377---N\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0---\17DDDzsss\377\223\223\223\377jjj"
+ "\377UUU\377___\377\202\202\202\377\265\265\265\377;;;\316\203\203\203"
+ "\377\224\224\224\377sss\377kkk\377___\377YYY\377TTT\377EEE\377>>>N\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0---\17PPPzqqq\377uuu\377PPP\377"
+ "999\377CCC\377___\377\223\223\223\377BBB\365SSS\377PPP\377;;;\377///"
+ "\377)))\377000\377888\377===\377===N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0---\17CCCzNNN\377BBB\377///\377$$$\377)))\377666\377OOO\377;"
+ ";;\377LLL\24FFF\24""222\24'''\24\"\"\"\24***\24""444\24:::\24<<<\6\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0---\1@@@\11HHH\24;;;\24+++\24\""
+ "\"\"\24&&&\24""000\24EEE\24""999\24"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_search_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_search_16[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_search_16[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (1024) */
+ "\0\0\4\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\263\263\302H\242\265\322\303\243\301\340\373\252\311"
+ "\345\377\245\300\335\357\256\267\314\234\262\262\302\40\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\376\376\377@\213\242\266\240g\200\230\240\251\272\312p\0\0"
+ "\0\0\241\247\277\200\220\272\343\377\232\324\370\377\245\336\372\377"
+ "\247\340\372\377\253\343\373\377\250\337\371\377\247\300\327\357\245"
+ "\245\270<\0\0\0\0\0\0\0\0\376\376\377@\235\263\305\240\253\274\313p`"
+ "|\226\317\231\231\256H\212\265\340\377\244\336\372\377\272\360\374\377"
+ "\303\366\376\377\270\356\374\377\252\342\373\377\261\350\374\377\272"
+ "\357\375\377\244\270\314\343\227\227\255\20\0\0\0\0\225\255\301\317r"
+ "\217\250\377\\z\226\377\226\247\271p\206\231\274\303\230\323\370\377"
+ "\270\356\374\377\326\376\377\377\344\377\377\377\272\355\374\377\310"
+ "\370\376\377\301\366\376\377\305\371\376\377\300\355\364\377\216\216"
+ "\245p\0\0\0\0q\217\250\377Nm\212\377@_~\377]u\216\240\210\246\312\373"
+ "\242\334\372\377\275\362\375\377\336\377\377\377\344\373\376\377\302"
+ "\366\376\377\327\376\377\377\322\377\377\377\324\377\377\377\322\377"
+ "\377\377\230\242\266\254\0\0\0\0\231\253\274p\77^|\377A]z\317\376\376"
+ "\377@\212\251\314\377\245\336\372\377\256\346\373\377\262\350\374\377"
+ "\276\364\375\377\334\376\377\377\332\377\377\377\337\377\377\377\341"
+ "\377\377\377\336\377\377\377\226\241\265\274\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0v\220\267\353\250\340\372\377\246\337\372\377\276\362"
+ "\375\377\320\374\377\377\330\377\377\377\341\377\377\377\352\377\377"
+ "\377\356\377\377\377\346\374\375\377tw\223\224\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0]d\211\220\235\323\362\377\255\345\373\377\266\354"
+ "\374\377\312\374\376\377\330\377\377\377\346\377\377\377\362\377\377"
+ "\377\371\377\377\377\277\310\323\377[[|<\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0UUx\24m\201\245\343\260\346\372\377\272\360\375\377\310\373"
+ "\376\377\327\377\377\377\344\377\377\377\357\377\377\377\334\344\352"
+ "\377\206\207\240\377xx\224L\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0UUx$jz\234\313\237\306\332\377\306\371\376\377\323\377\377\377"
+ "\326\366\370\377\252\271\307\377\203\205\236\347\246\246\270\367\266"
+ "\252\247\333\315\211'\313\276~)(\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0UUxH^`\201\210ls\220\240XX{tUUx,||\227\14\230|jX\323\257"
+ "r\377\361\274V\377\316\210\37\347\253o)(\0\0\0\0\0\0\0\0\376\376\377"
+ "0\213\242\266\240g\200\230\240\207\237\265P\376\376\377\20\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\243i(8\326\252V\363\374\351\253\377\361\274X\377"
+ "\304\200\37\347\230`((\0\0\0\0\376\376\377@\235\263\305\240\253\274\313"
+ "p`|\226\317^w\220P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\220Z'<\316"
+ "\243T\363\374\351\253\377\361\275Y\377\272x\40\347\204Q'(\225\255\301"
+ "\317r\217\250\377\\z\226\377\226\247\271p\213\242\267\240\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0}K&<\307\235R\363\374\351\253\377"
+ "\361\276Z\377\236e%\347q\217\250\377Nm\212\377@_~\377]u\216\240h\200"
+ "\230\240\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0tD&<"
+ "\273\222P\363\321\264\177\377\211y~\373\231\253\274p\77^|\377A]z\317"
+ "\376\376\377@\376\376\377@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0tD&8{`Z\200``\201T"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_search_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_search_24[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 stock_search_24[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (2304) */
+ "\0\0\11\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (96) */
+ "\0\0\0`"
+ /* width (24) */
+ "\0\0\0\30"
+ /* height (24) */
+ "\0\0\0\30"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\262\262\302\32\257\265\310`\253\267\317\264"
+ "\257\276\325\366\267\306\333\377\271\310\334\377\257\275\323\363\260"
+ "\273\320\261\262\266\310[\262\262\302\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\376\376\377@\376\376\377@\207\241\266\317Ws\217\317\376"
+ "\376\377@\267\305\322d\0\0\0\0\0\0\0\0\253\253\2750\245\257\307\263\227"
+ "\267\333\367\223\303\353\377\225\316\366\377\226\321\370\377\232\325"
+ "\370\377\234\325\367\377\243\317\356\377\245\303\336\371\253\264\307"
+ "\247\254\254\2754\252\252\274\2\0\0\0\0\0\0\0\0\0\0\0\0\376\376\377@"
+ "\376\376\377@\203\230\256\210o\204\232\210\254\276\314pf\203\236\347"
+ "\0\0\0\0\245\245\2700\236\247\301\277\211\271\350\377\226\317\366\377"
+ "\240\332\371\377\250\340\373\377\252\342\373\377\245\336\372\377\253"
+ "\343\373\377\256\346\373\377\254\343\372\377\246\316\347\373\245\260"
+ "\305\307\245\245\2701\0\0\0\0\0\0\0\0\0\0\0\0\376\376\377@\254\277\316"
+ "\210\214\245\272\317\204\235\263\253\312\325\337XKi\205\333\233\233\257"
+ "\32\226\241\275\263\205\266\346\377\236\330\371\377\255\345\373\377\270"
+ "\357\374\377\277\363\376\377\272\357\375\377\270\357\374\377\246\337"
+ "\372\377\251\341\373\377\263\352\374\377\271\357\375\377\255\325\350"
+ "\377\240\251\276\300\227\227\255\14\0\0\0\0\0\0\0\0\251\275\315\224\211"
+ "\244\271\377s\220\251\377b\200\234\377o\212\242\267\330\336\345L\220"
+ "\225\260`\211\252\322\367\223\316\366\377\254\344\373\377\276\363\375"
+ "\377\314\374\376\377\324\376\377\377\302\362\375\377\274\361\375\377"
+ "\276\362\375\377\264\353\374\377\267\355\374\377\276\363\375\377\277"
+ "\362\374\377\252\304\324\377\223\223\251Z\0\0\0\0\0\0\0\0\203\237\265"
+ "\377r\217\250\377Yx\224\377Ml\212\377Cb\200\377\222\243\265p\210\224"
+ "\263\264\212\271\343\377\235\327\371\377\266\354\374\377\312\372\376"
+ "\377\333\377\377\377\347\377\377\377\322\366\376\377\271\356\374\377"
+ "\320\373\377\377\301\365\376\377\304\370\376\377\306\372\377\377\311"
+ "\374\377\377\300\356\364\377\214\214\244\263\210\210\240\6\0\0\0\0o\215"
+ "\246\377\\{\227\377Ih\206\377@^}\3777Ut\377\212\233\255p\207\225\264"
+ "\366\222\314\365\377\243\335\372\377\271\357\375\377\317\375\377\377"
+ "\342\377\377\377\357\376\377\377\320\366\376\377\301\365\376\377\331"
+ "\376\377\377\316\377\377\377\321\377\377\377\322\377\377\377\322\377"
+ "\377\377\320\377\377\377\231\245\270\322\201\201\233&\0\0\0\0\251\270"
+ "\307dNl\211\347\77^}\3777Us\363k\177\225\210\376\376\377@\216\235\271"
+ "\377\226\321\370\377\246\337\372\377\261\351\374\377\273\356\374\377"
+ "\314\365\375\377\314\365\376\377\304\366\376\377\322\374\377\377\336"
+ "\377\377\377\326\377\377\377\331\377\377\377\332\377\377\377\332\377"
+ "\377\377\330\377\377\377\242\262\302\335zz\225<\0\0\0\0\376\376\377\40"
+ "e~\227P8Wv\200B]zh\376\376\377\40\376\376\377\40\205\224\263\377\227"
+ "\322\370\377\250\340\373\377\262\351\374\377\257\346\373\377\262\351"
+ "\374\377\275\363\375\377\316\373\376\377\343\377\377\377\332\377\377"
+ "\377\335\377\377\377\341\377\377\377\342\377\377\377\342\377\377\377"
+ "\337\377\377\377\237\254\276\334rr\217:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0p~\241\360\224\314\361\377\252\342\373\377"
+ "\243\334\372\377\271\357\374\377\305\367\376\377\322\374\377\377\330"
+ "\377\377\377\330\377\377\377\337\377\377\377\345\377\377\377\352\377"
+ "\377\377\355\377\377\377\353\377\377\377\345\375\376\377}\202\234\314"
+ "jj\210\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0gr\225"
+ "\245\211\264\330\377\252\342\373\377\250\341\372\377\252\342\373\377"
+ "\267\355\375\377\306\372\376\377\321\377\377\377\331\377\377\377\342"
+ "\377\377\377\352\377\377\377\360\377\377\377\365\377\377\377\362\377"
+ "\377\377\324\344\352\377``\201\243ee\205\4\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0[^\201Lq\215\263\363\242\330\364\377\260"
+ "\350\374\377\255\345\373\377\270\357\375\377\310\373\376\377\322\377"
+ "\377\377\332\377\377\377\344\377\377\377\354\377\377\377\364\377\377"
+ "\377\373\377\377\377\363\373\374\377\230\236\262\377YY{E\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UUx\17Z^\203\220"
+ "\177\242\306\370\260\347\372\377\267\356\374\377\272\360\375\377\307"
+ "\372\376\377\321\377\377\377\331\377\377\377\343\377\377\377\352\377"
+ "\377\377\361\377\377\377\357\370\372\377\262\270\307\377\201\202\233"
+ "\377{{\226n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0UUx$\\b\206\247\207\252\311\377\257\342\364\377\277\364"
+ "\375\377\307\372\377\377\317\377\377\377\326\377\377\377\337\377\377"
+ "\377\346\377\377\377\344\367\371\377\254\264\304\377\212\213\243\377"
+ "\235\235\261\377\226\226\253\245\302\241zH\307\207.I\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UUx\33^e\207\227r\204"
+ "\243\363\231\275\323\377\303\365\374\377\314\375\377\377\324\377\377"
+ "\377\325\370\372\377\267\314\326\377\206\217\246\377}~\231\311\226\226"
+ "\254\363\255\255\276\371\265\255\260\364\310\224O\343\317\210!\344\276"
+ "~)Y\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0UUx$UUx}Z[}\301lt\221\313ov\223\317ZZ|\266UUx\203UUx-||\227\11"
+ "||\227\22\220\203\205\203\303\233d\377\346\272g\377\356\256;\377\316"
+ "\207\36\355\270x%o\253o)\12\0\0\0\0\0\0\0\0\0\0\0\0\376\376\377\10\376"
+ "\376\377\40\226\256\301h]z\226h\376\376\377\20\0\0\0\0UUx\4UUx\30UUx"
+ "\40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\244l-\217\336\266f\377\374"
+ "\351\253\377\365\320~\377\350\2475\377\311\204\40\347\253n$o\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\376\376\3774\376\376\377@k\206\240\317Ie\202\317\376"
+ "\376\3778u\220\251\233\376\376\377$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\242h(0\274\210<\344\360\321\201\377\374\353\260"
+ "\377\364\311s\377\350\2465\377\300|\36\355\230`(Y\0\0\0\0\0\0\0\0\376"
+ "\376\377@\324\335\346X\267\307\324p\270\306\323d\231\256\300\210Vt\220"
+ "\363Eb\177\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\220Z'1\257{3\311\350\306u\374\374\353\260\377\365\321\200"
+ "\377\357\257>\377\271v\36\355\225\\$o\204Q'\12\327\340\350X\225\255\301"
+ "\317}\232\261\377n\213\245\347\246\270\310pq\207\235\210\376\376\377"
+ "8\376\376\377\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\211U'\2\206S'<\246t3\311\354\315\177\377\374\351\253\377\365\321"
+ "\201\377\346\2457\377\265t\40\347\211S#o\221\252\276\333\200\234\263"
+ "\377h\206\241\377Yx\225\377Sq\215\347\246\265\304d\210\241\266\317]z"
+ "\226h\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\200M'\2|J&1\243t9\344\353\314}\377\374\353\261\377\364\313u\377\334"
+ "\2377\377\215Y*\355x\225\255\377e\203\236\377Ml\212\377Dc\201\377;Zy"
+ "\377\214\236\260pWt\217\317C^{h\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0tD&1\231i1\311\334\272p\374"
+ "\353\327\240\377\252\206_\377\204v}\374y\223\253\267Qp\215\377Dc\201"
+ "\3779Wv\377B]z\317\263\276\312X\376\376\377@\376\376\377\40\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0tD&\2tD&<\215^0\311\242\200Z\377\210y~\373qp\213\273\331\337\346L\\"
+ "w\221\267;Zy\377>Zx\333\262\275\311X\376\376\377@\376\376\377@\376\376"
+ "\377\40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0tD&\2tD&(vRC@up\210>\\\\~!"};
+
+
diff --git a/patches/gtk2/icons/stock-icons.list b/patches/gtk2/icons/stock-icons.list
new file mode 100644
index 0000000..6de72ab
--- /dev/null
+++ b/patches/gtk2/icons/stock-icons.list
@@ -0,0 +1,58 @@
+stock_down_arrow_24
+ stock_down_arrow_24.png
+stock_down_left_arrow_24
+ stock_down_left_arrow_24.png
+stock_down_right_arrow_24
+ stock_down_right_arrow_24.png
+stock_eat_16
+ stock_eat_16.png
+stock_eat_24
+ stock_eat_24.png
+stock_inv_16
+ stock_inv_16.png
+stock_inv_24
+ stock_inv_24.png
+stock_kick_16
+ stock-kick-16.png
+stock_kick_24
+ stock-kick-24.png
+stock_left_arrow_24
+ stock_left_arrow_24.png
+stock_open_16
+ stock-open-16.png
+stock_open_24
+ stock-open-24.png
+stock_right_arrow_24
+ stock_right_arrow_24.png
+stock_self_24
+ stock_self_24.png
+stock_throw_16
+ stock_throw_16.png
+stock_throw_24
+ stock_throw_24.png
+stock_up_arrow_24
+ stock_up_arrow_24.png
+stock_up_left_arrow_24
+ stock_up_left_arrow_24.png
+stock_up_right_arrow_24
+ stock_up_right_arrow_24.png
+stock_zap_16
+ stock-zap-16.png
+stock_zap_24
+ stock-zap-24.png
+stock_spellbook_16
+ stock_spellbook_16.png
+stock_spellbook_24
+ stock_spellbook_24.png
+stock_whatshere_16
+ stock_whatshere_16.png
+stock_whatshere_24
+ stock_whatshere_24.png
+stock_whatsthere_16
+ stock_whatsthere_16.png
+stock_whatsthere_24
+ stock_whatsthere_24.png
+stock_search_16
+ stock_search_16.png
+stock_search_24
+ stock_search_24.png
diff --git a/patches/gtk2/icons/stock-kick-16.png b/patches/gtk2/icons/stock-kick-16.png
new file mode 100644
index 0000000..cc00f40
--- /dev/null
+++ b/patches/gtk2/icons/stock-kick-16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock-kick-24.png b/patches/gtk2/icons/stock-kick-24.png
new file mode 100644
index 0000000..be4bcc0
--- /dev/null
+++ b/patches/gtk2/icons/stock-kick-24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock-open-16.png b/patches/gtk2/icons/stock-open-16.png
new file mode 100644
index 0000000..d7655c7
--- /dev/null
+++ b/patches/gtk2/icons/stock-open-16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock-open-24.png b/patches/gtk2/icons/stock-open-24.png
new file mode 100644
index 0000000..8cf35a7
--- /dev/null
+++ b/patches/gtk2/icons/stock-open-24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock-zap-16.png b/patches/gtk2/icons/stock-zap-16.png
new file mode 100644
index 0000000..c30d11f
--- /dev/null
+++ b/patches/gtk2/icons/stock-zap-16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock-zap-24.png b/patches/gtk2/icons/stock-zap-24.png
new file mode 100644
index 0000000..58a2bac
--- /dev/null
+++ b/patches/gtk2/icons/stock-zap-24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_down_arrow_24.png b/patches/gtk2/icons/stock_down_arrow_24.png
new file mode 100644
index 0000000..81bd31b
--- /dev/null
+++ b/patches/gtk2/icons/stock_down_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_down_left_arrow_24.png b/patches/gtk2/icons/stock_down_left_arrow_24.png
new file mode 100644
index 0000000..6f536ae
--- /dev/null
+++ b/patches/gtk2/icons/stock_down_left_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_down_right_arrow_24.png b/patches/gtk2/icons/stock_down_right_arrow_24.png
new file mode 100644
index 0000000..44741a8
--- /dev/null
+++ b/patches/gtk2/icons/stock_down_right_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_eat_16.png b/patches/gtk2/icons/stock_eat_16.png
new file mode 100644
index 0000000..44de90c
--- /dev/null
+++ b/patches/gtk2/icons/stock_eat_16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_eat_24.png b/patches/gtk2/icons/stock_eat_24.png
new file mode 100644
index 0000000..2b73b36
--- /dev/null
+++ b/patches/gtk2/icons/stock_eat_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_inv_16.png b/patches/gtk2/icons/stock_inv_16.png
new file mode 100644
index 0000000..609bc4e
--- /dev/null
+++ b/patches/gtk2/icons/stock_inv_16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_inv_24.png b/patches/gtk2/icons/stock_inv_24.png
new file mode 100644
index 0000000..10ea038
--- /dev/null
+++ b/patches/gtk2/icons/stock_inv_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_left_arrow_24.png b/patches/gtk2/icons/stock_left_arrow_24.png
new file mode 100644
index 0000000..c08cbcb
--- /dev/null
+++ b/patches/gtk2/icons/stock_left_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_right_arrow_24.png b/patches/gtk2/icons/stock_right_arrow_24.png
new file mode 100644
index 0000000..b71cc77
--- /dev/null
+++ b/patches/gtk2/icons/stock_right_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_search_16.png b/patches/gtk2/icons/stock_search_16.png
new file mode 100644
index 0000000..56fe5f4
--- /dev/null
+++ b/patches/gtk2/icons/stock_search_16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_search_24.png b/patches/gtk2/icons/stock_search_24.png
new file mode 100644
index 0000000..9252acb
--- /dev/null
+++ b/patches/gtk2/icons/stock_search_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_self_24.png b/patches/gtk2/icons/stock_self_24.png
new file mode 100644
index 0000000..397fb1e
--- /dev/null
+++ b/patches/gtk2/icons/stock_self_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_spellbook_16.png b/patches/gtk2/icons/stock_spellbook_16.png
new file mode 100644
index 0000000..ff49506
--- /dev/null
+++ b/patches/gtk2/icons/stock_spellbook_16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_spellbook_24.png b/patches/gtk2/icons/stock_spellbook_24.png
new file mode 100644
index 0000000..03262c2
--- /dev/null
+++ b/patches/gtk2/icons/stock_spellbook_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_throw_16.png b/patches/gtk2/icons/stock_throw_16.png
new file mode 100644
index 0000000..e04785f
--- /dev/null
+++ b/patches/gtk2/icons/stock_throw_16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_throw_24.png b/patches/gtk2/icons/stock_throw_24.png
new file mode 100644
index 0000000..f3bfc96
--- /dev/null
+++ b/patches/gtk2/icons/stock_throw_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_up_arrow_24.png b/patches/gtk2/icons/stock_up_arrow_24.png
new file mode 100644
index 0000000..c0cb124
--- /dev/null
+++ b/patches/gtk2/icons/stock_up_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_up_left_arrow_24.png b/patches/gtk2/icons/stock_up_left_arrow_24.png
new file mode 100644
index 0000000..60cfe73
--- /dev/null
+++ b/patches/gtk2/icons/stock_up_left_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_up_right_arrow_24.png b/patches/gtk2/icons/stock_up_right_arrow_24.png
new file mode 100644
index 0000000..207a0ec
--- /dev/null
+++ b/patches/gtk2/icons/stock_up_right_arrow_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_whatshere_16.png b/patches/gtk2/icons/stock_whatshere_16.png
new file mode 100644
index 0000000..1d9c160
--- /dev/null
+++ b/patches/gtk2/icons/stock_whatshere_16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_whatshere_24.png b/patches/gtk2/icons/stock_whatshere_24.png
new file mode 100644
index 0000000..aa21219
--- /dev/null
+++ b/patches/gtk2/icons/stock_whatshere_24.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_whatsthere_16.png b/patches/gtk2/icons/stock_whatsthere_16.png
new file mode 100644
index 0000000..e7ea778
--- /dev/null
+++ b/patches/gtk2/icons/stock_whatsthere_16.png
Binary files differ
diff --git a/patches/gtk2/icons/stock_whatsthere_24.png b/patches/gtk2/icons/stock_whatsthere_24.png
new file mode 100644
index 0000000..dbb0e80
--- /dev/null
+++ b/patches/gtk2/icons/stock_whatsthere_24.png
Binary files differ
diff --git a/patches/gtk2/pad_clicked.png b/patches/gtk2/pad_clicked.png
new file mode 100644
index 0000000..22ad7fb
--- /dev/null
+++ b/patches/gtk2/pad_clicked.png
Binary files differ
diff --git a/patches/gtk2/pad_unclicked.png b/patches/gtk2/pad_unclicked.png
new file mode 100644
index 0000000..82913d5
--- /dev/null
+++ b/patches/gtk2/pad_unclicked.png
Binary files differ
diff --git a/patches/gtk2/po/POTFILES.in b/patches/gtk2/po/POTFILES.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/patches/gtk2/po/POTFILES.in
diff --git a/patches/gtk2/po/de_DE.po b/patches/gtk2/po/de_DE.po
new file mode 100644
index 0000000..211c359
--- /dev/null
+++ b/patches/gtk2/po/de_DE.po
@@ -0,0 +1,710 @@
+# German translations for gtk package
+# German messages for gtk.
+# Copyright (C) 2004 THE gtk'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gtk package.
+# Automatically generated, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gtk 2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-12-31 15:05+0100\n"
+"PO-Revision-Date: 2004-07-19 17:21+0200\n"
+"Last-Translator: Mihael Vrbanec\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: g2player.c:444
+msgid "<b><big>Create your character:</big></b>"
+msgstr "<b><big>Erstellen Sie Ihren Charakter:</big></b>"
+
+#: g2player.c:396
+msgid "<b>Choose alignment:</b>"
+msgstr "<b>Gesinnung wählen:</b>"
+
+#: g2player.c:453
+msgid "<b>Choose race:</b>"
+msgstr "<b>Rasse wählen:</b>"
+
+#: g2player.c:450
+msgid "<b>Choose role:</b>"
+msgstr "<b>Rolle wählen:</b>"
+
+#: g2player.c:368
+msgid "<b>Choose sex:</b>"
+msgstr "<b>Geschlecht wählen:</b>"
+
+#: g2status.c:664
+msgid "AC: "
+msgstr "RK: "
+
+#: g2status.c:435
+#, c-format
+msgid "AC: %d"
+msgstr "RK: %d"
+
+#: g2main.c:71 g2main.c:282
+msgid "About Gtk2Hack"
+msgstr "Über Gtk2Hack"
+
+#: g2main.c:114
+msgid "Adjust letters"
+msgstr "Buchstaben anpassen"
+
+#: g2status.c:890
+msgid "Adventurer's Name"
+msgstr "Name des Abenteurers"
+
+#: g2status.c:596
+msgid "Alignment"
+msgstr "Gesinnung"
+
+#: g2main.c:64
+msgid "Appa_rel"
+msgstr "Bekleidung"
+
+#: g2main.c:86
+msgid "Apply"
+msgstr "Anwenden"
+
+#: g2status.c:733
+msgid "Approximate score"
+msgstr "Punktzahl"
+
+#: g2status.c:667
+msgid "Armor Class"
+msgstr "Rüstungsklasse"
+
+#: g2main.c:83
+msgid "Attack <direction>"
+msgstr "Angreifen <Richtung>"
+
+#: g2status.c:28
+msgid "Blind"
+msgstr "Blind"
+
+#: g2status.c:46
+msgid "Burdened"
+msgstr "belastet"
+
+#: g2menu.c:249
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: g2main.c:112
+msgid "Cast a spell"
+msgstr "Zaubern"
+
+#: g2status.c:426
+#, c-format
+msgid "Cha: %d"
+msgstr "Cha: %d"
+
+#: g2status.c:711
+msgid "Cha: 9999"
+msgstr "Cha: 9999"
+
+#: g2player.c:413 g2status.c:23
+msgid "Chaotic"
+msgstr "chaotisch"
+
+#: g2status.c:894
+msgid "Character rame and rank"
+msgstr "Charaktername und Rang"
+
+#: g2status.c:711
+msgid "Charisma"
+msgstr "Charisma"
+
+#: g2main.c:115
+msgid "Chat"
+msgstr "Reden"
+
+#: g2main.c:87
+msgid "Close"
+msgstr "Schließen"
+
+#: g2status.c:417
+#, c-format
+msgid "Con: %d"
+msgstr "Kon: %d"
+
+#: g2status.c:709
+msgid "Con: 9999"
+msgstr "Kon: 9999"
+
+#: g2status.c:30
+msgid "Confused"
+msgstr "Verwirrt"
+
+#: g2status.c:709
+msgid "Constitution"
+msgstr "Konstitution"
+
+#: g2main.c:299
+msgid "Credits"
+msgstr "Danksagungen"
+
+#: g2status.c:626
+msgid "Current and maximum hit points"
+msgstr "Aktuelle und maximale Trefferpunkte"
+
+#: g2status.c:643
+msgid "Current and maximum magic energy"
+msgstr "Aktuelle und maximale Zauberkraft"
+
+#: g2status.c:414
+#, c-format
+msgid "Dex: %d"
+msgstr "Ges: %d"
+
+#: g2status.c:702
+msgid "Dex: 9999"
+msgstr "Ges: 9999"
+
+#: g2status.c:702
+msgid "Dexterity"
+msgstr "Geschicklichkeit"
+
+#: g2main.c:116
+msgid "Dip"
+msgstr "Dippen"
+
+#: g2main.c:78
+msgid "Discoveries"
+msgstr "Entdeckungen"
+
+#: g2main.c:261
+msgid ""
+"Do you want to save the current game?\n"
+"If not your current game will be lost!"
+msgstr ""
+"Möchten Sie das aktuelle Spiel speichern?\n"
+"Wenn nicht, geht dieses Spiel verloren!"
+
+#: g2main.c:89
+msgid "Drop"
+msgstr "Fallenlassen"
+
+#: g2main.c:90
+msgid "Drop many"
+msgstr "Mehrere fallenlassen"
+
+#: g2status.c:898
+msgid "Dungeon Level"
+msgstr "Labyrinthstufe"
+
+#: g2status.c:901
+msgid "Dungeon name and depth"
+msgstr "Labyrinthname und Tiefe"
+
+#: g2main.c:92
+msgid "Eat"
+msgstr "Essen"
+
+#: g2status.c:726
+msgid "Elapsed game moves"
+msgstr "vergangene Spielzüge"
+
+#: g2main.c:93
+msgid "Engrave"
+msgstr "Eingravieren"
+
+#: g2main.c:117
+msgid "Enhance skills"
+msgstr "Fertigkeiten verbessern"
+
+#: g2equip.c:183
+msgid "Equipment"
+msgstr "Ausrüstung"
+
+#: g2main.c:109
+msgid "Exchange weapons"
+msgstr "Waffen wechseln"
+
+#: g2main.c:268
+msgid "Exiting...\n"
+msgstr "Beenden...\n"
+
+#: g2status.c:679
+msgid "Exp: "
+msgstr "EP: "
+
+#: g2status.c:452
+#, c-format
+msgid "Exp: %-7ld"
+msgstr "EP: %-7ld"
+
+#: g2status.c:674
+msgid "Experience Level"
+msgstr "Erfahrungsstufe"
+
+#: g2status.c:682
+msgid "Experience Points"
+msgstr "Erfahrungspunkte"
+
+#: g2main.c:80
+msgid "Explain command"
+msgstr "Befehl erklären"
+
+#: g2main.c:110
+msgid "Explore mode"
+msgstr "Entdeckungs-Modus"
+
+#: g2status.c:40
+msgid "Fainted"
+msgstr "ohnmächtig"
+
+#: g2status.c:39
+msgid "Fainting"
+msgstr "ermattend"
+
+#: g2player.c:381
+msgid "Female"
+msgstr "weiblich"
+
+#: g2main.c:94
+msgid "Fire"
+msgstr "_Schießen"
+
+#: g2status.c:26
+msgid "Food Poisoned"
+msgstr "vergiftet"
+
+#: g2main.c:118
+msgid "Force"
+msgstr "Gewalt anwenden"
+
+#: g2main.c:82
+msgid "Go down"
+msgstr "Hinabsteigen"
+
+#: g2main.c:81
+msgid "Go up"
+msgstr "Hinaufsteigen"
+
+#: g2status.c:608
+msgid "Gold pieces"
+msgstr "Goldstücke"
+
+#: g2status.c:635
+msgid "Graphical hit point display"
+msgstr "Grafische Trefferpunktanzeige"
+
+#: g2status.c:652
+msgid "Graphical magic energy display"
+msgstr "Grafische Zauberkraftanzeige"
+
+#: g2menu.c:140
+msgid "Gtk2Hack - Message"
+msgstr "Gtk2Hack - Nachricht"
+
+#: g2main.c:292
+msgid ""
+"Gtk2Hack was developed by Mihael Vrbanec.\n"
+"Window icon and gold icon by David Theis.\n"
+"Other artwork is borrowed from the Qt, X11 and Gnome window ports.\n"
+"\n"
+"Thanks for trying Gtk2Hack."
+msgstr ""
+"Gtk2Hack wurde von Mihael Vrbanec entwickelt.\n"
+"Fenstericon und Goldicon wurden von David Theis gestaltet.\n"
+"Icons und Bilder wurden von den Qt, X11 und Gnome Varianten geliehen.\n"
+"\n"
+"Vielen Dank für Ihr Interesse an Gtk2Hack."
+
+#: g2status.c:25
+msgid "Hallucinating"
+msgstr "halluzinierend"
+
+#: g2status.c:622
+msgid "Hp: "
+msgstr "TP: "
+
+#: g2status.c:371
+#, c-format
+msgid "Hp: %d/%d"
+msgstr "TP: %d/%d"
+
+#: g2status.c:37
+msgid "Hungry"
+msgstr "hungrig"
+
+#: g2main.c:77
+msgid "Identify a map symbol"
+msgstr "Kartensymbol identifizieren"
+
+#: g2status.c:27
+msgid "Ill"
+msgstr "krank"
+
+#: g2status.c:420
+#, c-format
+msgid "Int: %d"
+msgstr "Int: %d"
+
+#: g2status.c:697
+msgid "Int: 9999"
+msgstr "Int: 9999"
+
+#: g2status.c:697
+msgid "Intelligence"
+msgstr "Intelligenz"
+
+#: g2invent.c:98 g2main.c:95 g2menu.c:334
+msgid "Inventory"
+msgstr "Inventar"
+
+#: g2main.c:119
+msgid "Invoke"
+msgstr "Aufrufen"
+
+#: g2main.c:120
+msgid "Jump"
+msgstr "Springen"
+
+#: g2main.c:91
+msgid "Kick"
+msgstr "Treten"
+
+#: g2player.c:405 g2status.c:21
+msgid "Lawful"
+msgstr "rechtschaffen"
+
+#: g2status.c:671
+msgid "Level: "
+msgstr "Stufe: "
+
+#: g2status.c:447
+#, c-format
+msgid "Level: %d"
+msgstr "Stufe: %d"
+
+#: g2main.c:121
+msgid "Loot"
+msgstr "Plündern"
+
+#: g2player.c:377
+msgid "Male"
+msgstr "männlich"
+
+#: g2main.c:122
+msgid "Monster action"
+msgstr "Monster-Handlung"
+
+#: g2main.c:67
+msgid "Move"
+msgstr "Bewegen"
+
+#: g2main.c:88
+msgid "Name monster"
+msgstr "Monster benennen"
+
+#: g2main.c:123
+msgid "Name object"
+msgstr "Objekt benennen"
+
+#: g2player.c:409 g2status.c:22
+msgid "Neutral"
+msgstr "neutral"
+
+#: g2player.c:373 g2player.c:401
+msgid "None selected"
+msgstr "nichts gewählt"
+
+#: g2main.c:124
+msgid "Offer"
+msgstr "Opfern"
+
+#: g2main.c:96
+msgid "Open"
+msgstr "Öffnen"
+
+#: g2main.c:437
+msgid "Options"
+msgstr "Einstellungen"
+
+#: g2status.c:50
+msgid "Overloaded"
+msgstr "Überladen"
+
+#: g2status.c:49
+msgid "Overtaxed"
+msgstr "Überbelastet"
+
+#: g2main.c:97
+msgid "Pay"
+msgstr "Bezahlen"
+
+#: g2menu.c:358
+msgid "Pick any"
+msgstr "Beliebige wählen"
+
+#: g2menu.c:354
+msgid "Pick one"
+msgstr "Eines wählen"
+
+#: g2main.c:113
+msgid "Pick up"
+msgstr "Aufheben"
+
+#: g2player.c:434
+msgid "Player selection"
+msgstr "Spielerauswahl"
+
+#: g2main.c:125
+msgid "Pray"
+msgstr "Beten"
+
+#: g2main.c:100
+msgid "Put in quiver"
+msgstr "In Köcher tun"
+
+#: g2main.c:98
+msgid "Put on accessory"
+msgstr "Accessoir anlegen"
+
+#: g2status.c:639
+msgid "Pw: "
+msgstr "ZK: "
+
+#: g2status.c:384
+#, c-format
+msgid "Pw: %d/%d"
+msgstr "ZK: %d/%d"
+
+#: g2main.c:99
+msgid "Quaff"
+msgstr "Trinken"
+
+#: g2main.c:69
+msgid "Quit Gtk2Hack"
+msgstr "Gtk2Hack beenden"
+
+#: g2player.c:436
+msgid "Random"
+msgstr "Zufällig"
+
+#: g2main.c:101
+msgid "Read"
+msgstr "Lesen"
+
+#: g2main.c:102
+msgid "Remove accessory"
+msgstr "Accessoir entfernen"
+
+#: g2main.c:85
+msgid "Rest"
+msgstr "Rasten"
+
+#: g2main.c:70
+msgid "Ride"
+msgstr "Reiten"
+
+#: g2main.c:126
+msgid "Rub"
+msgstr "Reiben"
+
+#: g2status.c:35
+msgid "Satiated"
+msgstr "gesättigt"
+
+#: g2main.c:435
+msgid "Save game"
+msgstr "Spielstand speichern"
+
+#: g2status.c:730
+msgid "Score: "
+msgstr "Punkte: "
+
+#: g2status.c:469
+#, c-format
+msgid "Score: %ld"
+msgstr "Punkte: %ld"
+
+#: g2main.c:103
+msgid "Search"
+msgstr "Suchen"
+
+#: g2menu.c:250
+msgid "Select"
+msgstr "Auswählen"
+
+#: g2main.c:439
+msgid "Show Help Menu"
+msgstr "Hilfe anzeigen"
+
+#: g2main.c:76
+msgid "Show Nethack version"
+msgstr "Nethack-Version anzeigen"
+
+#: g2main.c:131
+msgid "Show build options"
+msgstr "Softwarekonfiguration anzeigen"
+
+#: g2main.c:132
+msgid "Show character info"
+msgstr "Charakterinfo anzeigen"
+
+#: g2main.c:127
+msgid "Sit"
+msgstr "Sitzen"
+
+#: g2status.c:41
+msgid "Starved"
+msgstr "verhungert"
+
+#: g2status.c:403 g2status.c:409
+#, c-format
+msgid "Str: %d"
+msgstr "Stä: %d"
+
+#: g2status.c:407
+#, c-format
+msgid "Str: 18/%02d"
+msgstr "Stä: 18/%02d"
+
+#: g2status.c:405
+msgid "Str: 18/**"
+msgstr "Stä: 18/**"
+
+#: g2status.c:695
+msgid "Str: 9999"
+msgstr "Stä: 9999"
+
+#: g2status.c:48
+msgid "Strained"
+msgstr "angestrengt"
+
+#: g2status.c:695
+msgid "Strength"
+msgstr "Stärke"
+
+#: g2status.c:47
+msgid "Stressed"
+msgstr "beansprucht"
+
+#: g2status.c:29
+msgid "Stunned"
+msgstr "betäubt"
+
+#: g2main.c:105
+msgid "Take off armor"
+msgstr "Rüstung ausziehen"
+
+#: g2main.c:106
+msgid "Teleport"
+msgstr "Teleportieren"
+
+#: g2main.c:104
+msgid "Throw/Shoot"
+msgstr "Werfen/Schießen"
+
+#: g2status.c:723
+msgid "Time: "
+msgstr "Zeit: "
+
+#: g2status.c:461
+#, c-format
+msgid "Time: %ld"
+msgstr "Zeit; %ld"
+
+#: g2main.c:311
+msgid "Translations"
+msgstr "Übersetzungen"
+
+#: g2main.c:84
+msgid "Travel"
+msgstr "Reisen"
+
+#: g2main.c:128
+msgid "Turn undead"
+msgstr "Untote vertreiben"
+
+#: g2main.c:129
+msgid "Untrap"
+msgstr "Falle entschärfen"
+
+#: g2status.c:38
+msgid "Weak"
+msgstr "schwach"
+
+#: g2main.c:108
+msgid "Wear armor"
+msgstr "Rüstung anziehen"
+
+#: g2main.c:107
+msgid "Wield weapon"
+msgstr "Waffe führen"
+
+#: g2main.c:130
+msgid "Wipe"
+msgstr "Abwischen"
+
+#: g2status.c:423
+#, c-format
+msgid "Wis: %d"
+msgstr "Wei: %d"
+
+#: g2status.c:704
+msgid "Wis: 9999"
+msgstr "Wei: 9999"
+
+#: g2status.c:704
+msgid "Wisdom"
+msgstr "Weisheit"
+
+#: g2main.c:111
+msgid "Zap a wand"
+msgstr "Zauberstab anwenden"
+
+#: g2main.c:71
+msgid "_About"
+msgstr "Über"
+
+#: g2main.c:65
+msgid "_Action"
+msgstr "_Aktionen"
+
+#: g2main.c:63
+msgid "_Edit"
+msgstr "_Bearbeiten"
+
+#: g2main.c:62
+msgid "_File"
+msgstr "_Datei"
+
+#: g2main.c:68
+msgid "_Help"
+msgstr "Hilfe"
+
+#: g2main.c:79
+msgid "_History"
+msgstr "Historie"
+
+#: g2main.c:69
+msgid "_Quit"
+msgstr "Beenden"
+
+#: g2main.c:66
+msgid "_Special"
+msgstr "_Spezielles"
+
+#: g2main.c:76
+msgid "_Version"
+msgstr "_Version"
+
+#: g2main.c:47
+msgid "brazilian portuguese"
+msgstr "brasilianisches portugiesisch"
+
+#: g2main.c:45
+msgid "german"
+msgstr "deutsch"
+
+#: g2main.c:46
+msgid "italian"
+msgstr "italienisch"
diff --git a/patches/gtk2/po/de_DE/LC_MESSAGES/gtk2hack.mo b/patches/gtk2/po/de_DE/LC_MESSAGES/gtk2hack.mo
new file mode 100644
index 0000000..9421473
--- /dev/null
+++ b/patches/gtk2/po/de_DE/LC_MESSAGES/gtk2hack.mo
Binary files differ
diff --git a/patches/gtk2/po/gtk2hack.pot b/patches/gtk2/po/gtk2hack.pot
new file mode 100644
index 0000000..83b0e1c
--- /dev/null
+++ b/patches/gtk2/po/gtk2hack.pot
@@ -0,0 +1,702 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-12-31 15:05+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: g2player.c:444
+msgid "<b><big>Create your character:</big></b>"
+msgstr ""
+
+#: g2player.c:396
+msgid "<b>Choose alignment:</b>"
+msgstr ""
+
+#: g2player.c:453
+msgid "<b>Choose race:</b>"
+msgstr ""
+
+#: g2player.c:450
+msgid "<b>Choose role:</b>"
+msgstr ""
+
+#: g2player.c:368
+msgid "<b>Choose sex:</b>"
+msgstr ""
+
+#: g2status.c:664
+msgid "AC: "
+msgstr ""
+
+#: g2status.c:435
+#, c-format
+msgid "AC: %d"
+msgstr ""
+
+#: g2main.c:71 g2main.c:282
+msgid "About Gtk2Hack"
+msgstr ""
+
+#: g2main.c:114
+msgid "Adjust letters"
+msgstr ""
+
+#: g2status.c:890
+msgid "Adventurer's Name"
+msgstr ""
+
+#: g2status.c:596
+msgid "Alignment"
+msgstr ""
+
+#: g2main.c:64
+msgid "Appa_rel"
+msgstr ""
+
+#: g2main.c:86
+msgid "Apply"
+msgstr ""
+
+#: g2status.c:733
+msgid "Approximate score"
+msgstr ""
+
+#: g2status.c:667
+msgid "Armor Class"
+msgstr ""
+
+#: g2main.c:83
+msgid "Attack <direction>"
+msgstr ""
+
+#: g2status.c:28
+msgid "Blind"
+msgstr ""
+
+#: g2status.c:46
+msgid "Burdened"
+msgstr ""
+
+#: g2menu.c:249
+msgid "Cancel"
+msgstr ""
+
+#: g2main.c:112
+msgid "Cast a spell"
+msgstr ""
+
+#: g2status.c:426
+#, c-format
+msgid "Cha: %d"
+msgstr ""
+
+#: g2status.c:711
+msgid "Cha: 9999"
+msgstr ""
+
+#: g2player.c:413 g2status.c:23
+msgid "Chaotic"
+msgstr ""
+
+#: g2status.c:894
+msgid "Character rame and rank"
+msgstr ""
+
+#: g2status.c:711
+msgid "Charisma"
+msgstr ""
+
+#: g2main.c:115
+msgid "Chat"
+msgstr ""
+
+#: g2main.c:87
+msgid "Close"
+msgstr ""
+
+#: g2status.c:417
+#, c-format
+msgid "Con: %d"
+msgstr ""
+
+#: g2status.c:709
+msgid "Con: 9999"
+msgstr ""
+
+#: g2status.c:30
+msgid "Confused"
+msgstr ""
+
+#: g2status.c:709
+msgid "Constitution"
+msgstr ""
+
+#: g2main.c:299
+msgid "Credits"
+msgstr ""
+
+#: g2status.c:626
+msgid "Current and maximum hit points"
+msgstr ""
+
+#: g2status.c:643
+msgid "Current and maximum magic energy"
+msgstr ""
+
+#: g2status.c:414
+#, c-format
+msgid "Dex: %d"
+msgstr ""
+
+#: g2status.c:702
+msgid "Dex: 9999"
+msgstr ""
+
+#: g2status.c:702
+msgid "Dexterity"
+msgstr ""
+
+#: g2main.c:116
+msgid "Dip"
+msgstr ""
+
+#: g2main.c:78
+msgid "Discoveries"
+msgstr ""
+
+#: g2main.c:261
+msgid ""
+"Do you want to save the current game?\n"
+"If not your current game will be lost!"
+msgstr ""
+
+#: g2main.c:89
+msgid "Drop"
+msgstr ""
+
+#: g2main.c:90
+msgid "Drop many"
+msgstr ""
+
+#: g2status.c:898
+msgid "Dungeon Level"
+msgstr ""
+
+#: g2status.c:901
+msgid "Dungeon name and depth"
+msgstr ""
+
+#: g2main.c:92
+msgid "Eat"
+msgstr ""
+
+#: g2status.c:726
+msgid "Elapsed game moves"
+msgstr ""
+
+#: g2main.c:93
+msgid "Engrave"
+msgstr ""
+
+#: g2main.c:117
+msgid "Enhance skills"
+msgstr ""
+
+#: g2equip.c:183
+msgid "Equipment"
+msgstr ""
+
+#: g2main.c:109
+msgid "Exchange weapons"
+msgstr ""
+
+#: g2main.c:268
+msgid "Exiting...\n"
+msgstr ""
+
+#: g2status.c:679
+msgid "Exp: "
+msgstr ""
+
+#: g2status.c:452
+#, c-format
+msgid "Exp: %-7ld"
+msgstr ""
+
+#: g2status.c:674
+msgid "Experience Level"
+msgstr ""
+
+#: g2status.c:682
+msgid "Experience Points"
+msgstr ""
+
+#: g2main.c:80
+msgid "Explain command"
+msgstr ""
+
+#: g2main.c:110
+msgid "Explore mode"
+msgstr ""
+
+#: g2status.c:40
+msgid "Fainted"
+msgstr ""
+
+#: g2status.c:39
+msgid "Fainting"
+msgstr ""
+
+#: g2player.c:381
+msgid "Female"
+msgstr ""
+
+#: g2main.c:94
+msgid "Fire"
+msgstr ""
+
+#: g2status.c:26
+msgid "Food Poisoned"
+msgstr ""
+
+#: g2main.c:118
+msgid "Force"
+msgstr ""
+
+#: g2main.c:82
+msgid "Go down"
+msgstr ""
+
+#: g2main.c:81
+msgid "Go up"
+msgstr ""
+
+#: g2status.c:608
+msgid "Gold pieces"
+msgstr ""
+
+#: g2status.c:635
+msgid "Graphical hit point display"
+msgstr ""
+
+#: g2status.c:652
+msgid "Graphical magic energy display"
+msgstr ""
+
+#: g2menu.c:140
+msgid "Gtk2Hack - Message"
+msgstr ""
+
+#: g2main.c:292
+msgid ""
+"Gtk2Hack was developed by Mihael Vrbanec.\n"
+"Window icon and gold icon by David Theis.\n"
+"Other artwork is borrowed from the Qt, X11 and Gnome window ports.\n"
+"\n"
+"Thanks for trying Gtk2Hack."
+msgstr ""
+
+#: g2status.c:25
+msgid "Hallucinating"
+msgstr ""
+
+#: g2status.c:622
+msgid "Hp: "
+msgstr ""
+
+#: g2status.c:371
+#, c-format
+msgid "Hp: %d/%d"
+msgstr ""
+
+#: g2status.c:37
+msgid "Hungry"
+msgstr ""
+
+#: g2main.c:77
+msgid "Identify a map symbol"
+msgstr ""
+
+#: g2status.c:27
+msgid "Ill"
+msgstr ""
+
+#: g2status.c:420
+#, c-format
+msgid "Int: %d"
+msgstr ""
+
+#: g2status.c:697
+msgid "Int: 9999"
+msgstr ""
+
+#: g2status.c:697
+msgid "Intelligence"
+msgstr ""
+
+#: g2invent.c:98 g2main.c:95 g2menu.c:334
+msgid "Inventory"
+msgstr ""
+
+#: g2main.c:119
+msgid "Invoke"
+msgstr ""
+
+#: g2main.c:120
+msgid "Jump"
+msgstr ""
+
+#: g2main.c:91
+msgid "Kick"
+msgstr ""
+
+#: g2player.c:405 g2status.c:21
+msgid "Lawful"
+msgstr ""
+
+#: g2status.c:671
+msgid "Level: "
+msgstr ""
+
+#: g2status.c:447
+#, c-format
+msgid "Level: %d"
+msgstr ""
+
+#: g2main.c:121
+msgid "Loot"
+msgstr ""
+
+#: g2player.c:377
+msgid "Male"
+msgstr ""
+
+#: g2main.c:122
+msgid "Monster action"
+msgstr ""
+
+#: g2main.c:67
+msgid "Move"
+msgstr ""
+
+#: g2main.c:88
+msgid "Name monster"
+msgstr ""
+
+#: g2main.c:123
+msgid "Name object"
+msgstr ""
+
+#: g2player.c:409 g2status.c:22
+msgid "Neutral"
+msgstr ""
+
+#: g2player.c:373 g2player.c:401
+msgid "None selected"
+msgstr ""
+
+#: g2main.c:124
+msgid "Offer"
+msgstr ""
+
+#: g2main.c:96
+msgid "Open"
+msgstr ""
+
+#: g2main.c:437
+msgid "Options"
+msgstr ""
+
+#: g2status.c:50
+msgid "Overloaded"
+msgstr ""
+
+#: g2status.c:49
+msgid "Overtaxed"
+msgstr ""
+
+#: g2main.c:97
+msgid "Pay"
+msgstr ""
+
+#: g2menu.c:358
+msgid "Pick any"
+msgstr ""
+
+#: g2menu.c:354
+msgid "Pick one"
+msgstr ""
+
+#: g2main.c:113
+msgid "Pick up"
+msgstr ""
+
+#: g2player.c:434
+msgid "Player selection"
+msgstr ""
+
+#: g2main.c:125
+msgid "Pray"
+msgstr ""
+
+#: g2main.c:100
+msgid "Put in quiver"
+msgstr ""
+
+#: g2main.c:98
+msgid "Put on accessory"
+msgstr ""
+
+#: g2status.c:639
+msgid "Pw: "
+msgstr ""
+
+#: g2status.c:384
+#, c-format
+msgid "Pw: %d/%d"
+msgstr ""
+
+#: g2main.c:99
+msgid "Quaff"
+msgstr ""
+
+#: g2main.c:69
+msgid "Quit Gtk2Hack"
+msgstr ""
+
+#: g2player.c:436
+msgid "Random"
+msgstr ""
+
+#: g2main.c:101
+msgid "Read"
+msgstr ""
+
+#: g2main.c:102
+msgid "Remove accessory"
+msgstr ""
+
+#: g2main.c:85
+msgid "Rest"
+msgstr ""
+
+#: g2main.c:70
+msgid "Ride"
+msgstr ""
+
+#: g2main.c:126
+msgid "Rub"
+msgstr ""
+
+#: g2status.c:35
+msgid "Satiated"
+msgstr ""
+
+#: g2main.c:435
+msgid "Save game"
+msgstr ""
+
+#: g2status.c:730
+msgid "Score: "
+msgstr ""
+
+#: g2status.c:469
+#, c-format
+msgid "Score: %ld"
+msgstr ""
+
+#: g2main.c:103
+msgid "Search"
+msgstr ""
+
+#: g2menu.c:250
+msgid "Select"
+msgstr ""
+
+#: g2main.c:439
+msgid "Show Help Menu"
+msgstr ""
+
+#: g2main.c:76
+msgid "Show Nethack version"
+msgstr ""
+
+#: g2main.c:131
+msgid "Show build options"
+msgstr ""
+
+#: g2main.c:132
+msgid "Show character info"
+msgstr ""
+
+#: g2main.c:127
+msgid "Sit"
+msgstr ""
+
+#: g2status.c:41
+msgid "Starved"
+msgstr ""
+
+#: g2status.c:403 g2status.c:409
+#, c-format
+msgid "Str: %d"
+msgstr ""
+
+#: g2status.c:407
+#, c-format
+msgid "Str: 18/%02d"
+msgstr ""
+
+#: g2status.c:405
+msgid "Str: 18/**"
+msgstr ""
+
+#: g2status.c:695
+msgid "Str: 9999"
+msgstr ""
+
+#: g2status.c:48
+msgid "Strained"
+msgstr ""
+
+#: g2status.c:695
+msgid "Strength"
+msgstr ""
+
+#: g2status.c:47
+msgid "Stressed"
+msgstr ""
+
+#: g2status.c:29
+msgid "Stunned"
+msgstr ""
+
+#: g2main.c:105
+msgid "Take off armor"
+msgstr ""
+
+#: g2main.c:106
+msgid "Teleport"
+msgstr ""
+
+#: g2main.c:104
+msgid "Throw/Shoot"
+msgstr ""
+
+#: g2status.c:723
+msgid "Time: "
+msgstr ""
+
+#: g2status.c:461
+#, c-format
+msgid "Time: %ld"
+msgstr ""
+
+#: g2main.c:311
+msgid "Translations"
+msgstr ""
+
+#: g2main.c:84
+msgid "Travel"
+msgstr ""
+
+#: g2main.c:128
+msgid "Turn undead"
+msgstr ""
+
+#: g2main.c:129
+msgid "Untrap"
+msgstr ""
+
+#: g2status.c:38
+msgid "Weak"
+msgstr ""
+
+#: g2main.c:108
+msgid "Wear armor"
+msgstr ""
+
+#: g2main.c:107
+msgid "Wield weapon"
+msgstr ""
+
+#: g2main.c:130
+msgid "Wipe"
+msgstr ""
+
+#: g2status.c:423
+#, c-format
+msgid "Wis: %d"
+msgstr ""
+
+#: g2status.c:704
+msgid "Wis: 9999"
+msgstr ""
+
+#: g2status.c:704
+msgid "Wisdom"
+msgstr ""
+
+#: g2main.c:111
+msgid "Zap a wand"
+msgstr ""
+
+#: g2main.c:71
+msgid "_About"
+msgstr ""
+
+#: g2main.c:65
+msgid "_Action"
+msgstr ""
+
+#: g2main.c:63
+msgid "_Edit"
+msgstr ""
+
+#: g2main.c:62
+msgid "_File"
+msgstr ""
+
+#: g2main.c:68
+msgid "_Help"
+msgstr ""
+
+#: g2main.c:79
+msgid "_History"
+msgstr ""
+
+#: g2main.c:69
+msgid "_Quit"
+msgstr ""
+
+#: g2main.c:66
+msgid "_Special"
+msgstr ""
+
+#: g2main.c:76
+msgid "_Version"
+msgstr ""
+
+#: g2main.c:47
+msgid "brazilian portuguese"
+msgstr ""
+
+#: g2main.c:45
+msgid "german"
+msgstr ""
+
+#: g2main.c:46
+msgid "italian"
+msgstr ""
diff --git a/patches/gtk2/po/it_IT.po b/patches/gtk2/po/it_IT.po
new file mode 100644
index 0000000..9c9e617
--- /dev/null
+++ b/patches/gtk2/po/it_IT.po
@@ -0,0 +1,710 @@
+# translation of it_IT.po to
+# translation of it_IT.po to
+# translation of gtk2hack.po to
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: it_IT\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-12-31 15:05+0100\n"
+"PO-Revision-Date: 2004-11-09 16:50+0100\n"
+"Last-Translator: Qualsiasi\n"
+"Language-Team: <null@null.invalid>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+
+#: g2player.c:444
+msgid "<b><big>Create your character:</big></b>"
+msgstr "<b><big>Crea il tuo personaggio:</big></b>"
+
+#: g2player.c:396
+msgid "<b>Choose alignment:</b>"
+msgstr "<b>Scegli l'allineamento:</b>"
+
+#: g2player.c:453
+msgid "<b>Choose race:</b>"
+msgstr "<b>Scegli la razza:</b>"
+
+#: g2player.c:450
+msgid "<b>Choose role:</b>"
+msgstr "<b>Scegli un ruolo:</b>"
+
+#: g2player.c:368
+msgid "<b>Choose sex:</b>"
+msgstr "<b>Scegli un genere:</b>"
+
+#: g2status.c:664
+msgid "AC: "
+msgstr "CA: "
+
+#: g2status.c:435
+#, c-format
+msgid "AC: %d"
+msgstr "CA: %d"
+
+#: g2main.c:71 g2main.c:282
+msgid "About Gtk2Hack"
+msgstr "Informazioni su Gtk2Hack"
+
+#: g2main.c:114
+msgid "Adjust letters"
+msgstr "Allinea lettere"
+
+#: g2status.c:890
+msgid "Adventurer's Name"
+msgstr "Nome dell'Avventuriero"
+
+#: g2status.c:596
+msgid "Alignment"
+msgstr "Allineamento"
+
+#: g2main.c:64
+msgid "Appa_rel"
+msgstr "E_quipaggiamento"
+
+#: g2main.c:86
+msgid "Apply"
+msgstr "Applica"
+
+#: g2status.c:733
+msgid "Approximate score"
+msgstr "Punteggio approssimato"
+
+#: g2status.c:667
+msgid "Armor Class"
+msgstr "Classe Armatura"
+
+#: g2main.c:83
+msgid "Attack <direction>"
+msgstr "Attacca <direzione>"
+
+#: g2status.c:28
+msgid "Blind"
+msgstr "Cieco"
+
+#: g2status.c:46
+msgid "Burdened"
+msgstr "Caricato"
+
+#: g2menu.c:249
+msgid "Cancel"
+msgstr "Annulla"
+
+#: g2main.c:112
+msgid "Cast a spell"
+msgstr "Pronuncia un incantesimo"
+
+#: g2status.c:426
+#, c-format
+msgid "Cha: %d"
+msgstr "Car: %d"
+
+#: g2status.c:711
+msgid "Cha: 9999"
+msgstr "Car: 9999"
+
+#: g2player.c:413 g2status.c:23
+msgid "Chaotic"
+msgstr "Caotico"
+
+#: g2status.c:894
+msgid "Character rame and rank"
+msgstr "Nome e Livello del Personaggio"
+
+#: g2status.c:711
+msgid "Charisma"
+msgstr "Carisma"
+
+#: g2main.c:115
+msgid "Chat"
+msgstr "Parla"
+
+#: g2main.c:87
+msgid "Close"
+msgstr "Chiudi"
+
+#: g2status.c:417
+#, c-format
+msgid "Con: %d"
+msgstr "Cos: %d"
+
+#: g2status.c:709
+msgid "Con: 9999"
+msgstr "Cos: 9999"
+
+#: g2status.c:30
+msgid "Confused"
+msgstr "Confuso"
+
+#: g2status.c:709
+msgid "Constitution"
+msgstr "Costituzione"
+
+#: g2main.c:299
+msgid "Credits"
+msgstr ""
+
+#: g2status.c:626
+msgid "Current and maximum hit points"
+msgstr "Punti ferita attuali e massimi"
+
+#: g2status.c:643
+msgid "Current and maximum magic energy"
+msgstr "Energia Magica Attuale e Massima"
+
+#: g2status.c:414
+#, c-format
+msgid "Dex: %d"
+msgstr "Des: %d"
+
+#: g2status.c:702
+msgid "Dex: 9999"
+msgstr "Des: 9999"
+
+#: g2status.c:702
+msgid "Dexterity"
+msgstr "Destrezza"
+
+#: g2main.c:116
+msgid "Dip"
+msgstr "Tuffati"
+
+#: g2main.c:78
+msgid "Discoveries"
+msgstr "Scoperte"
+
+#: g2main.c:261
+msgid ""
+"Do you want to save the current game?\n"
+"If not your current game will be lost!"
+msgstr ""
+"Vuoi salvare la partita in corso?\n"
+"Se non la salvi i tuoi progressi andranno persi!"
+
+#: g2main.c:89
+msgid "Drop"
+msgstr "Lascia a terra"
+
+#: g2main.c:90
+msgid "Drop many"
+msgstr "Laciane a terra molti"
+
+#: g2status.c:898
+msgid "Dungeon Level"
+msgstr "Livello del Dungeon"
+
+#: g2status.c:901
+msgid "Dungeon name and depth"
+msgstr "Nome e profondità del dungeon"
+
+#: g2main.c:92
+msgid "Eat"
+msgstr "Mangia"
+
+#: g2status.c:726
+msgid "Elapsed game moves"
+msgstr "Movimenti di gioco effettuati"
+
+#: g2main.c:93
+msgid "Engrave"
+msgstr "Incidi"
+
+#: g2main.c:117
+msgid "Enhance skills"
+msgstr "Migliora abilità"
+
+#: g2equip.c:183
+msgid "Equipment"
+msgstr "Equipaggiamento"
+
+#: g2main.c:109
+msgid "Exchange weapons"
+msgstr "Scambia Armi"
+
+#: g2main.c:268
+msgid "Exiting...\n"
+msgstr "Sto uscendo...\n"
+
+#: g2status.c:679
+msgid "Exp: "
+msgstr "Esp: "
+
+#: g2status.c:452
+#, c-format
+msgid "Exp: %-7ld"
+msgstr "Esp: %-7ld"
+
+#: g2status.c:674
+msgid "Experience Level"
+msgstr "Livello di Esperienza"
+
+#: g2status.c:682
+msgid "Experience Points"
+msgstr "Punti Esperienza"
+
+#: g2main.c:80
+msgid "Explain command"
+msgstr "Spiega comando"
+
+#: g2main.c:110
+msgid "Explore mode"
+msgstr "Modalità di esplorazione"
+
+#: g2status.c:40
+msgid "Fainted"
+msgstr "Senza sensi"
+
+#: g2status.c:39
+msgid "Fainting"
+msgstr "Sta perdendo i sensi"
+
+#: g2player.c:381
+msgid "Female"
+msgstr "Femminile"
+
+#: g2main.c:94
+msgid "Fire"
+msgstr "Fuoco"
+
+#: g2status.c:26
+msgid "Food Poisoned"
+msgstr "Cibo Avvelenato"
+
+#: g2main.c:118
+msgid "Force"
+msgstr "Forza"
+
+#: g2main.c:82
+msgid "Go down"
+msgstr "Vai in basso"
+
+#: g2main.c:81
+msgid "Go up"
+msgstr "Vai in alto"
+
+#: g2status.c:608
+msgid "Gold pieces"
+msgstr "Pezzi d'oro"
+
+#: g2status.c:635
+msgid "Graphical hit point display"
+msgstr "Visualizzazione grafica punti ferita"
+
+#: g2status.c:652
+msgid "Graphical magic energy display"
+msgstr "Visualizzazione grafica energia magica"
+
+#: g2menu.c:140
+msgid "Gtk2Hack - Message"
+msgstr "Gtk2Hack - Messaggio"
+
+#: g2main.c:292
+msgid ""
+"Gtk2Hack was developed by Mihael Vrbanec.\n"
+"Window icon and gold icon by David Theis.\n"
+"Other artwork is borrowed from the Qt, X11 and Gnome window ports.\n"
+"\n"
+"Thanks for trying Gtk2Hack."
+msgstr ""
+"Gtk2Hack è stato sviluppato da Mihael Vrbanec.\n"
+"L'icona dell'oro e della finestra sono state create da David Theis.\n"
+"Il resto è stato preso in prestito dalle interfaccie di: Qt, X11 e Gnome.\n"
+"\n"
+"Grazie per aver provato Gtk2Hack."
+
+#: g2status.c:25
+msgid "Hallucinating"
+msgstr "Allucinogeni"
+
+#: g2status.c:622
+msgid "Hp: "
+msgstr "Pf: "
+
+#: g2status.c:371
+#, c-format
+msgid "Hp: %d/%d"
+msgstr "Pf: %d/%d"
+
+#: g2status.c:37
+msgid "Hungry"
+msgstr "Affamato"
+
+#: g2main.c:77
+msgid "Identify a map symbol"
+msgstr "Identifica un simbolo della mappa"
+
+#: g2status.c:27
+msgid "Ill"
+msgstr "Malato"
+
+#: g2status.c:420
+#, c-format
+msgid "Int: %d"
+msgstr "Int: %d"
+
+#: g2status.c:697
+msgid "Int: 9999"
+msgstr "Int: 9999"
+
+#: g2status.c:697
+msgid "Intelligence"
+msgstr "Intelligenza"
+
+#: g2invent.c:98 g2main.c:95 g2menu.c:334
+msgid "Inventory"
+msgstr "Inventario"
+
+#: g2main.c:119
+msgid "Invoke"
+msgstr "Evoca"
+
+#: g2main.c:120
+msgid "Jump"
+msgstr "Salta"
+
+#: g2main.c:91
+msgid "Kick"
+msgstr "Calcio"
+
+#: g2player.c:405 g2status.c:21
+msgid "Lawful"
+msgstr "Legale"
+
+#: g2status.c:671
+msgid "Level: "
+msgstr "Livello: "
+
+#: g2status.c:447
+#, c-format
+msgid "Level: %d"
+msgstr "Livello: %d"
+
+#: g2main.c:121
+msgid "Loot"
+msgstr "Bottino"
+
+#: g2player.c:377
+msgid "Male"
+msgstr "Maschile"
+
+#: g2main.c:122
+msgid "Monster action"
+msgstr "Azione del mostro"
+
+#: g2main.c:67
+msgid "Move"
+msgstr "Muovi"
+
+#: g2main.c:88
+msgid "Name monster"
+msgstr "Nome del mostro"
+
+#: g2main.c:123
+msgid "Name object"
+msgstr "Nome dell'oggetto"
+
+#: g2player.c:409 g2status.c:22
+msgid "Neutral"
+msgstr "Neutrale"
+
+#: g2player.c:373 g2player.c:401
+msgid "None selected"
+msgstr "Nessuno selezionato"
+
+#: g2main.c:124
+msgid "Offer"
+msgstr "Offri"
+
+#: g2main.c:96
+msgid "Open"
+msgstr "Apri"
+
+#: g2main.c:437
+msgid "Options"
+msgstr "Opzioni"
+
+#: g2status.c:50
+msgid "Overloaded"
+msgstr "Sovraccarico"
+
+#: g2status.c:49
+msgid "Overtaxed"
+msgstr "Sovratassato"
+
+#: g2main.c:97
+msgid "Pay"
+msgstr "Paga"
+
+#: g2menu.c:358
+msgid "Pick any"
+msgstr "Scegli uno qualsiasi"
+
+#: g2menu.c:354
+msgid "Pick one"
+msgstr "Segli uno"
+
+#: g2main.c:113
+msgid "Pick up"
+msgstr "Prendi"
+
+#: g2player.c:434
+msgid "Player selection"
+msgstr "Selezione del giocatore"
+
+#: g2main.c:125
+msgid "Pray"
+msgstr "Prega"
+
+#: g2main.c:100
+msgid "Put in quiver"
+msgstr "Riponi nella faretra"
+
+#: g2main.c:98
+msgid "Put on accessory"
+msgstr "Indossa accessorio"
+
+#: g2status.c:639
+msgid "Pw: "
+msgstr "Pw: "
+
+#: g2status.c:384
+#, c-format
+msgid "Pw: %d/%d"
+msgstr "Pw: %d/%d"
+
+#: g2main.c:99
+msgid "Quaff"
+msgstr "Bevi"
+
+#: g2main.c:69
+msgid "Quit Gtk2Hack"
+msgstr "Esci da Gtk2Hack"
+
+#: g2player.c:436
+msgid "Random"
+msgstr "Casuale"
+
+#: g2main.c:101
+msgid "Read"
+msgstr "Leggi"
+
+#: g2main.c:102
+msgid "Remove accessory"
+msgstr "Togli accessorio"
+
+#: g2main.c:85
+msgid "Rest"
+msgstr "Riposa"
+
+#: g2main.c:70
+msgid "Ride"
+msgstr "Cavalca"
+
+#: g2main.c:126
+msgid "Rub"
+msgstr "Sfrega"
+
+#: g2status.c:35
+msgid "Satiated"
+msgstr "Sazio"
+
+#: g2main.c:435
+msgid "Save game"
+msgstr "Salva partita"
+
+#: g2status.c:730
+msgid "Score: "
+msgstr "Punteggio: "
+
+#: g2status.c:469
+#, c-format
+msgid "Score: %ld"
+msgstr "Punteggio: %ld"
+
+#: g2main.c:103
+msgid "Search"
+msgstr "Cerca"
+
+#: g2menu.c:250
+msgid "Select"
+msgstr "Seleziona"
+
+#: g2main.c:439
+msgid "Show Help Menu"
+msgstr "Mosta il menù di Aiuto"
+
+#: g2main.c:76
+msgid "Show Nethack version"
+msgstr "Mostra la versione di Nethack"
+
+#: g2main.c:131
+msgid "Show build options"
+msgstr "Mostra le opzioni di compilazione"
+
+#: g2main.c:132
+msgid "Show character info"
+msgstr "Mostra le informazioni sul personaggio"
+
+#: g2main.c:127
+msgid "Sit"
+msgstr "Siedi"
+
+#: g2status.c:41
+msgid "Starved"
+msgstr "Morto di fame"
+
+#: g2status.c:403 g2status.c:409
+#, c-format
+msgid "Str: %d"
+msgstr "For: %d"
+
+#: g2status.c:407
+#, c-format
+msgid "Str: 18/%02d"
+msgstr "For: 18/%02d"
+
+#: g2status.c:405
+msgid "Str: 18/**"
+msgstr "For: 18/**"
+
+#: g2status.c:695
+msgid "Str: 9999"
+msgstr "For: 9999"
+
+#: g2status.c:48
+msgid "Strained"
+msgstr "Sforzato"
+
+#: g2status.c:695
+msgid "Strength"
+msgstr "Forza"
+
+#: g2status.c:47
+msgid "Stressed"
+msgstr "Stressato"
+
+#: g2status.c:29
+msgid "Stunned"
+msgstr "Svenuto"
+
+#: g2main.c:105
+msgid "Take off armor"
+msgstr "Togli armatura"
+
+#: g2main.c:106
+msgid "Teleport"
+msgstr "Teletrasporto"
+
+#: g2main.c:104
+msgid "Throw/Shoot"
+msgstr "Tira/Spara"
+
+#: g2status.c:723
+msgid "Time: "
+msgstr "Tempo: "
+
+#: g2status.c:461
+#, c-format
+msgid "Time: %ld"
+msgstr "Tempo: %ld"
+
+#: g2main.c:311
+msgid "Translations"
+msgstr ""
+
+#: g2main.c:84
+msgid "Travel"
+msgstr "Viaggio"
+
+#: g2main.c:128
+msgid "Turn undead"
+msgstr "Evoca non-morto"
+
+#: g2main.c:129
+msgid "Untrap"
+msgstr "Rimuovi trappola"
+
+#: g2status.c:38
+msgid "Weak"
+msgstr "Debole"
+
+#: g2main.c:108
+msgid "Wear armor"
+msgstr "Indossa armatura"
+
+#: g2main.c:107
+msgid "Wield weapon"
+msgstr "Impugna arma"
+
+#: g2main.c:130
+msgid "Wipe"
+msgstr "Distruggi"
+
+#: g2status.c:423
+#, c-format
+msgid "Wis: %d"
+msgstr "Sag: %d"
+
+#: g2status.c:704
+msgid "Wis: 9999"
+msgstr "Sag: 9999"
+
+#: g2status.c:704
+msgid "Wisdom"
+msgstr "Saggezza"
+
+#: g2main.c:111
+msgid "Zap a wand"
+msgstr "Distruggi una bacchetta"
+
+#: g2main.c:71
+msgid "_About"
+msgstr "_Informazioni su"
+
+#: g2main.c:65
+msgid "_Action"
+msgstr "_Azione"
+
+#: g2main.c:63
+msgid "_Edit"
+msgstr "_Modifica"
+
+#: g2main.c:62
+msgid "_File"
+msgstr "_File"
+
+#: g2main.c:68
+msgid "_Help"
+msgstr "Ai_uto"
+
+#: g2main.c:79
+msgid "_History"
+msgstr "_Cronologia"
+
+#: g2main.c:69
+msgid "_Quit"
+msgstr "_Esci"
+
+#: g2main.c:66
+msgid "_Special"
+msgstr "_Speciale"
+
+#: g2main.c:76
+msgid "_Version"
+msgstr "_Versione"
+
+#: g2main.c:47
+msgid "brazilian portuguese"
+msgstr ""
+
+#: g2main.c:45
+msgid "german"
+msgstr ""
+
+#: g2main.c:46
+msgid "italian"
+msgstr ""
diff --git a/patches/gtk2/po/it_IT/LC_MESSAGES/gtk2hack.mo b/patches/gtk2/po/it_IT/LC_MESSAGES/gtk2hack.mo
new file mode 100644
index 0000000..78760e9
--- /dev/null
+++ b/patches/gtk2/po/it_IT/LC_MESSAGES/gtk2hack.mo
Binary files differ
diff --git a/patches/gtk2/po/pt_BR.po b/patches/gtk2/po/pt_BR.po
new file mode 100644
index 0000000..5544c60
--- /dev/null
+++ b/patches/gtk2/po/pt_BR.po
@@ -0,0 +1,710 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-12-31 15:05+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Paulo Henrique Cabral <paulo@mudvayne.com.br>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: g2player.c:444
+msgid "<b><big>Create your character:</big></b>"
+msgstr "<b><big>Crie seu tipo:</big></b>"
+
+#: g2player.c:396
+msgid "<b>Choose alignment:</b>"
+msgstr "<b>Escolher alinhamento:</b>"
+
+#: g2player.c:453
+msgid "<b>Choose race:</b>"
+msgstr "<b>Escolher raça:</b>"
+
+#: g2player.c:450
+msgid "<b>Choose role:</b>"
+msgstr "<b>Escolher papel:</b>"
+
+#: g2player.c:368
+msgid "<b>Choose sex:</b>"
+msgstr "<b>Escolher sexo:</b>"
+
+#: g2status.c:664
+msgid "AC: "
+msgstr "AC: "
+
+#: g2status.c:435
+#, c-format
+msgid "AC: %d"
+msgstr "AC: %d"
+
+#: g2main.c:71 g2main.c:282
+msgid "About Gtk2Hack"
+msgstr "Sobre Gtk2Hack"
+
+#: g2main.c:114
+msgid "Adjust letters"
+msgstr "Ajustar letras"
+
+#: g2status.c:890
+msgid "Adventurer's Name"
+msgstr "Nome do aventureiro"
+
+#: g2status.c:596
+msgid "Alignment"
+msgstr "Alinhamento"
+
+#: g2main.c:64
+msgid "Appa_rel"
+msgstr "Appa_rel"
+
+#: g2main.c:86
+msgid "Apply"
+msgstr "Aplicar"
+
+#: g2status.c:733
+msgid "Approximate score"
+msgstr "Pontuação aproximada"
+
+#: g2status.c:667
+msgid "Armor Class"
+msgstr "Classe de armadura"
+
+#: g2main.c:83
+msgid "Attack <direction>"
+msgstr "Ataque"
+
+#: g2status.c:28
+msgid "Blind"
+msgstr "Cego"
+
+#: g2status.c:46
+msgid "Burdened"
+msgstr "Carregado"
+
+#: g2menu.c:249
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: g2main.c:112
+msgid "Cast a spell"
+msgstr "Lance uma mágica"
+
+#: g2status.c:426
+#, c-format
+msgid "Cha: %d"
+msgstr "Cha: %d"
+
+#: g2status.c:711
+msgid "Cha: 9999"
+msgstr "Cha: 9999"
+
+#: g2player.c:413 g2status.c:23
+msgid "Chaotic"
+msgstr "Caótico"
+
+#: g2status.c:894
+msgid "Character rame and rank"
+msgstr "Rank e rame do tipo"
+
+#: g2status.c:711
+msgid "Charisma"
+msgstr "Carisma"
+
+#: g2main.c:115
+msgid "Chat"
+msgstr "Bate-papo"
+
+#: g2main.c:87
+msgid "Close"
+msgstr "Fechar"
+
+#: g2status.c:417
+#, c-format
+msgid "Con: %d"
+msgstr "Con: %d"
+
+#: g2status.c:709
+msgid "Con: 9999"
+msgstr "Con: 9999"
+
+#: g2status.c:30
+msgid "Confused"
+msgstr "Confuso"
+
+#: g2status.c:709
+msgid "Constitution"
+msgstr "Constituição"
+
+#: g2main.c:299
+msgid "Credits"
+msgstr "Creditos"
+
+#: g2status.c:626
+msgid "Current and maximum hit points"
+msgstr "Atual e máximo de pontos acertados"
+
+#: g2status.c:643
+msgid "Current and maximum magic energy"
+msgstr "Atual e máxima energia mágica"
+
+#: g2status.c:414
+#, c-format
+msgid "Dex: %d"
+msgstr "Dex: %d"
+
+#: g2status.c:702
+msgid "Dex: 9999"
+msgstr "Dex: 9999"
+
+#: g2status.c:702
+msgid "Dexterity"
+msgstr "Destreza"
+
+#: g2main.c:116
+msgid "Dip"
+msgstr "Mergulhar"
+
+#: g2main.c:78
+msgid "Discoveries"
+msgstr "Descobertas"
+
+#: g2main.c:261
+msgid ""
+"Do you want to save the current game?\n"
+"If not your current game will be lost!"
+msgstr ""
+"Você quer salvar o jogo atual?\n"
+"Se não seu jogo atual vai ser perdido!"
+
+#: g2main.c:89
+msgid "Drop"
+msgstr "Derrubar"
+
+#: g2main.c:90
+msgid "Drop many"
+msgstr "Derrubar muitos"
+
+#: g2status.c:898
+msgid "Dungeon Level"
+msgstr "Nível do Calabouço"
+
+#: g2status.c:901
+msgid "Dungeon name and depth"
+msgstr "Nome e profundidade do calabouço"
+
+#: g2main.c:92
+msgid "Eat"
+msgstr "Comer"
+
+#: g2status.c:726
+msgid "Elapsed game moves"
+msgstr "Movimentos decorridos do jogo"
+
+#: g2main.c:93
+msgid "Engrave"
+msgstr "Gravar"
+
+#: g2main.c:117
+msgid "Enhance skills"
+msgstr "Aumentar habilidades"
+
+#: g2equip.c:183
+msgid "Equipment"
+msgstr "Equipamento"
+
+#: g2main.c:109
+msgid "Exchange weapons"
+msgstr "Armas de troca"
+
+#: g2main.c:268
+msgid "Exiting...\n"
+msgstr "Saindo...\n"
+
+#: g2status.c:679
+msgid "Exp: "
+msgstr "Exp: "
+
+#: g2status.c:452
+#, c-format
+msgid "Exp: %-7ld"
+msgstr "Exp: %-7ld"
+
+#: g2status.c:674
+msgid "Experience Level"
+msgstr "Nível de Experiência"
+
+#: g2status.c:682
+msgid "Experience Points"
+msgstr "Pontos de Experiência"
+
+#: g2main.c:80
+msgid "Explain command"
+msgstr "Explique o comando"
+
+#: g2main.c:110
+msgid "Explore mode"
+msgstr "Mode exploração"
+
+#: g2status.c:40
+msgid "Fainted"
+msgstr "Desfalecido"
+
+#: g2status.c:39
+msgid "Fainting"
+msgstr "Desfalecendo"
+
+#: g2player.c:381
+msgid "Female"
+msgstr "Feminino"
+
+#: g2main.c:94
+msgid "Fire"
+msgstr "Fogo"
+
+#: g2status.c:26
+msgid "Food Poisoned"
+msgstr "Comida Envenenada"
+
+#: g2main.c:118
+msgid "Force"
+msgstr "Força"
+
+#: g2main.c:82
+msgid "Go down"
+msgstr "Abaixe-se"
+
+#: g2main.c:81
+msgid "Go up"
+msgstr "Levante-se"
+
+#: g2status.c:608
+msgid "Gold pieces"
+msgstr "Peças de Ouro"
+
+#: g2status.c:635
+msgid "Graphical hit point display"
+msgstr "Exibir gráfico de pontos de ataque"
+
+#: g2status.c:652
+msgid "Graphical magic energy display"
+msgstr "Exibir gráfico de energia mágica"
+
+#: g2menu.c:140
+msgid "Gtk2Hack - Message"
+msgstr "Gtk2Hack - Mensagem"
+
+#: g2main.c:292
+#, fuzzy
+msgid ""
+"Gtk2Hack was developed by Mihael Vrbanec.\n"
+"Window icon and gold icon by David Theis.\n"
+"Other artwork is borrowed from the Qt, X11 and Gnome window ports.\n"
+"\n"
+"Thanks for trying Gtk2Hack."
+msgstr ""
+"Gtk2Hack foi desenvolvido por Mihael Vrbanec.\n"
+"Window icon e gold icon por David Theis.\n"
+"Other artwork is borrowed from the Qt, X11 and Gnome window ports.\n"
+"\n"
+"Thanks for trying Gtk2Hack."
+
+#: g2status.c:25
+msgid "Hallucinating"
+msgstr "Alucinado"
+
+#: g2status.c:622
+msgid "Hp: "
+msgstr "Hp: "
+
+#: g2status.c:371
+#, c-format
+msgid "Hp: %d/%d"
+msgstr "Hp: %d/%d"
+
+#: g2status.c:37
+msgid "Hungry"
+msgstr "Fome"
+
+#: g2main.c:77
+msgid "Identify a map symbol"
+msgstr "Identifique um símbolo no mapa"
+
+#: g2status.c:27
+msgid "Ill"
+msgstr "Ill"
+
+#: g2status.c:420
+#, c-format
+msgid "Int: %d"
+msgstr "Int: %d"
+
+#: g2status.c:697
+msgid "Int: 9999"
+msgstr "Int: 9999"
+
+#: g2status.c:697
+msgid "Intelligence"
+msgstr "Inteligencia"
+
+#: g2invent.c:98 g2main.c:95 g2menu.c:334
+msgid "Inventory"
+msgstr "Inventário"
+
+#: g2main.c:119
+msgid "Invoke"
+msgstr "Invocar"
+
+#: g2main.c:120
+msgid "Jump"
+msgstr "Pular"
+
+#: g2main.c:91
+msgid "Kick"
+msgstr "Chutar"
+
+#: g2player.c:405 g2status.c:21
+msgid "Lawful"
+msgstr "Legal"
+
+#: g2status.c:671
+msgid "Level: "
+msgstr "Nível: "
+
+#: g2status.c:447
+#, c-format
+msgid "Level: %d"
+msgstr "Nível: %d"
+
+#: g2main.c:121
+msgid "Loot"
+msgstr "Pilhagem"
+
+#: g2player.c:377
+msgid "Male"
+msgstr "Masculino"
+
+#: g2main.c:122
+msgid "Monster action"
+msgstr "Ação do monstro"
+
+#: g2main.c:67
+msgid "Move"
+msgstr "Mover"
+
+#: g2main.c:88
+msgid "Name monster"
+msgstr "Nome do monstro"
+
+#: g2main.c:123
+msgid "Name object"
+msgstr "Nome do objeto"
+
+#: g2player.c:409 g2status.c:22
+msgid "Neutral"
+msgstr "Neutro"
+
+#: g2player.c:373 g2player.c:401
+msgid "None selected"
+msgstr "Nada selecionado"
+
+#: g2main.c:124
+msgid "Offer"
+msgstr "Oferta"
+
+#: g2main.c:96
+msgid "Open"
+msgstr "Abrir"
+
+#: g2main.c:437
+msgid "Options"
+msgstr "Opções"
+
+#: g2status.c:50
+msgid "Overloaded"
+msgstr "Sobrecarregado"
+
+#: g2status.c:49
+msgid "Overtaxed"
+msgstr "Sobrecarregado"
+
+#: g2main.c:97
+msgid "Pay"
+msgstr "Pagar"
+
+#: g2menu.c:358
+msgid "Pick any"
+msgstr "Escolha qualquer"
+
+#: g2menu.c:354
+msgid "Pick one"
+msgstr "Escolha um"
+
+#: g2main.c:113
+msgid "Pick up"
+msgstr "Apanhar"
+
+#: g2player.c:434
+msgid "Player selection"
+msgstr "Seleção do jogador"
+
+#: g2main.c:125
+msgid "Pray"
+msgstr "Rezar"
+
+#: g2main.c:100
+msgid "Put in quiver"
+msgstr "Colocar em tremor"
+
+#: g2main.c:98
+msgid "Put on accessory"
+msgstr "Vestir acessório"
+
+#: g2status.c:639
+msgid "Pw: "
+msgstr "Pw: "
+
+#: g2status.c:384
+#, c-format
+msgid "Pw: %d/%d"
+msgstr "Pw: %d/%d"
+
+#: g2main.c:99
+msgid "Quaff"
+msgstr "Beber"
+
+#: g2main.c:69
+msgid "Quit Gtk2Hack"
+msgstr "Sair Gtk2Hack"
+
+#: g2player.c:436
+msgid "Random"
+msgstr "Aleatório"
+
+#: g2main.c:101
+msgid "Read"
+msgstr "Ler"
+
+#: g2main.c:102
+msgid "Remove accessory"
+msgstr "Remover acessório"
+
+#: g2main.c:85
+msgid "Rest"
+msgstr "Descansar"
+
+#: g2main.c:70
+msgid "Ride"
+msgstr "Andar"
+
+#: g2main.c:126
+msgid "Rub"
+msgstr "Esfregar"
+
+#: g2status.c:35
+msgid "Satiated"
+msgstr "Saciado"
+
+#: g2main.c:435
+msgid "Save game"
+msgstr "Salvar jogo"
+
+#: g2status.c:730
+msgid "Score: "
+msgstr "Pontuação: "
+
+#: g2status.c:469
+#, c-format
+msgid "Score: %ld"
+msgstr "Pontuação: %ld"
+
+#: g2main.c:103
+msgid "Search"
+msgstr "Procurar"
+
+#: g2menu.c:250
+msgid "Select"
+msgstr "Selecione"
+
+#: g2main.c:439
+msgid "Show Help Menu"
+msgstr "Mostrar menu de ajuda"
+
+#: g2main.c:76
+msgid "Show Nethack version"
+msgstr "Mostrar versão do Nethack"
+
+#: g2main.c:131
+msgid "Show build options"
+msgstr "Mostrar opções de estilo"
+
+#: g2main.c:132
+msgid "Show character info"
+msgstr "Mostrar informações do tipo"
+
+#: g2main.c:127
+msgid "Sit"
+msgstr "Sentar"
+
+#: g2status.c:41
+msgid "Starved"
+msgstr "Morrendo de fome"
+
+#: g2status.c:403 g2status.c:409
+#, c-format
+msgid "Str: %d"
+msgstr "Str: %d"
+
+#: g2status.c:407
+#, c-format
+msgid "Str: 18/%02d"
+msgstr "Str: 18/%02d"
+
+#: g2status.c:405
+msgid "Str: 18/**"
+msgstr "Str: 18/**"
+
+#: g2status.c:695
+msgid "Str: 9999"
+msgstr "Str: 9999"
+
+#: g2status.c:48
+msgid "Strained"
+msgstr "Puxado"
+
+#: g2status.c:695
+msgid "Strength"
+msgstr "Força"
+
+#: g2status.c:47
+msgid "Stressed"
+msgstr "Acentuado"
+
+#: g2status.c:29
+msgid "Stunned"
+msgstr "Atordoado"
+
+#: g2main.c:105
+msgid "Take off armor"
+msgstr "Remover armadura"
+
+#: g2main.c:106
+msgid "Teleport"
+msgstr "Teleport"
+
+#: g2main.c:104
+msgid "Throw/Shoot"
+msgstr "Lance/Atire"
+
+#: g2status.c:723
+msgid "Time: "
+msgstr "Hora: "
+
+#: g2status.c:461
+#, c-format
+msgid "Time: %ld"
+msgstr "Hora: %ld"
+
+#: g2main.c:311
+msgid "Translations"
+msgstr "Traduções"
+
+#: g2main.c:84
+msgid "Travel"
+msgstr "Viagem"
+
+#: g2main.c:128
+msgid "Turn undead"
+msgstr "Virar undead"
+
+#: g2main.c:129
+msgid "Untrap"
+msgstr "Untrap"
+
+#: g2status.c:38
+msgid "Weak"
+msgstr "Fraco"
+
+#: g2main.c:108
+msgid "Wear armor"
+msgstr "Usar armadura"
+
+#: g2main.c:107
+msgid "Wield weapon"
+msgstr "Sacar arma"
+
+#: g2main.c:130
+msgid "Wipe"
+msgstr "Enxugar"
+
+#: g2status.c:423
+#, c-format
+msgid "Wis: %d"
+msgstr "Wis: %d"
+
+#: g2status.c:704
+msgid "Wis: 9999"
+msgstr "Wis: 9999"
+
+#: g2status.c:704
+msgid "Wisdom"
+msgstr "Sabedoria"
+
+#: g2main.c:111
+msgid "Zap a wand"
+msgstr "Atirar uma batuta"
+
+#: g2main.c:71
+msgid "_About"
+msgstr "_Sobre"
+
+#: g2main.c:65
+msgid "_Action"
+msgstr "_Ação"
+
+#: g2main.c:63
+msgid "_Edit"
+msgstr "_Editar"
+
+#: g2main.c:62
+msgid "_File"
+msgstr "_Arquivo"
+
+#: g2main.c:68
+msgid "_Help"
+msgstr "_Ajuda"
+
+#: g2main.c:79
+msgid "_History"
+msgstr "_Histórico"
+
+#: g2main.c:69
+msgid "_Quit"
+msgstr "_Sair"
+
+#: g2main.c:66
+msgid "_Special"
+msgstr "_Especial"
+
+#: g2main.c:76
+msgid "_Version"
+msgstr "_Versão"
+
+#: g2main.c:47
+msgid "brazilian portuguese"
+msgstr ""
+
+#: g2main.c:45
+msgid "german"
+msgstr "Alemão"
+
+#: g2main.c:46
+msgid "italian"
+msgstr "Italiano"
diff --git a/patches/gtk2/po/pt_BR/LC_MESSAGES/gtk2hack.mo b/patches/gtk2/po/pt_BR/LC_MESSAGES/gtk2hack.mo
new file mode 100644
index 0000000..7cc9cb9
--- /dev/null
+++ b/patches/gtk2/po/pt_BR/LC_MESSAGES/gtk2hack.mo
Binary files differ
diff --git a/patches/gtk2/popup.c b/patches/gtk2/popup.c
new file mode 100644
index 0000000..19ff52a
--- /dev/null
+++ b/patches/gtk2/popup.c
@@ -0,0 +1,84 @@
+
+static gboolean
+g2_menu_popup_menu_name (GtkWidget * widget, gpointer userdata)
+{
+ g_print ("name\n");
+// do_popup_menu (widget, NULL);
+ return TRUE;
+}
+
+static gboolean
+g2_menu_popup_menu_read (GtkWidget * widget, gpointer userdata)
+{
+ g_print ("read\n");
+// do_popup_menu (widget, NULL);
+ return TRUE;
+}
+
+static void
+g2_menu_popup_menu (GtkWidget * treeview, GdkEventButton * event,
+ gpointer userdata)
+{
+ GtkWidget *menu, *menuitem;
+ int button, event_time;
+
+ menu = gtk_menu_new ();
+
+ menuitem = gtk_menu_item_new_with_label ("Name");
+ g_signal_connect (menuitem, "activate",
+ (GCallback) g2_menu_popup_menu_name, treeview);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label ("Read");
+ g_signal_connect (menuitem, "activate",
+ (GCallback) g2_menu_popup_menu_name, treeview);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+
+ gtk_widget_show_all (menu);
+
+ /* Note: event can be NULL here when called from view_onPopupMenu;
+ * gdk_event_get_time() accepts a NULL argument */
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
+ (event != NULL) ? event->button : 0,
+ gdk_event_get_time ((GdkEvent *) event));
+}
+
+static gboolean
+g2_menu_button_press_event (GtkWidget * treeview, GdkEventButton * event,
+ gpointer userdata)
+{
+ /* single click with the right mouse button? */
+ if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
+ g_print ("Single right click on the tree view.\n");
+
+ /* optional: select row if no row is selected or only
+ * one other row is selected (will only do something
+ * if you set a tree selection mode as described later
+ * in the tutorial) */
+ if (1) {
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+
+ /* Note: gtk_tree_selection_count_selected_rows() does not
+ * exist in gtk+-2.0, only in gtk+ >= v2.2 ! */
+ if (gtk_tree_selection_count_selected_rows (selection) <= 1) {
+ GtkTreePath *path;
+
+ /* Get tree path for row that was clicked */
+ if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview),
+ (gint) event->x, (gint) event->y, &path, NULL, NULL, NULL)) {
+ gtk_tree_selection_unselect_all (selection);
+ gtk_tree_selection_select_path (selection, path);
+ gtk_tree_path_free (path);
+ }
+ }
+ }
+ /* end of optional bit */
+ g2_menu_popup_menu (treeview, event, userdata);
+
+ return TRUE; /* we handled this */
+ }
+
+ return FALSE; /* we did not handle this */
+}
diff --git a/patches/gtk2/rebuild_trans.sh b/patches/gtk2/rebuild_trans.sh
new file mode 100755
index 0000000..6af5a17
--- /dev/null
+++ b/patches/gtk2/rebuild_trans.sh
@@ -0,0 +1,20 @@
+#! /bin/bash
+
+LINGUAS=( de_DE it_IT pt_BR)
+
+cd po
+for i in "${LINGUAS[@]}"
+do
+ if [ ! -e $i.po ]
+ then
+ msginit --no-translator -l $i -o $i.po -i gtk2hack.pot
+ else
+ msgmerge -U $i.po gtk2hack.pot
+ fi
+ if [ ! -e $i ]
+ then
+ mkdir $i
+ mkdir $i/LC_MESSAGES
+ fi
+ msgfmt $i.po --statistics -o $i/LC_MESSAGES/gtk2hack.mo
+done
diff --git a/patches/nethack.sh-maemo1 b/patches/nethack.sh-maemo1
new file mode 100755
index 0000000..778f991
--- /dev/null
+++ b/patches/nethack.sh-maemo1
@@ -0,0 +1,165 @@
+#!/bin/sh
+# This is a special .sh file for Maemo
+# All user data is stored in the home directory because we can't set a suid bit in Nethack and
+# we want backups to be made from the nethack data.
+
+HACKDIR=~/.nethackdir
+export HACKDIR
+MAXNROFPLAYERS=4
+
+INSTALL_HACKDIR=/var/lib/install/usr/games/lib/nethackdir
+HACK=$INSTALL_HACKDIR/nethack
+
+# Since Nethack.ad is installed in HACKDIR, add it to XUSERFILESEARCHPATH
+case "x$XUSERFILESEARCHPATH" in
+x) XUSERFILESEARCHPATH="$HACKDIR/%N.ad"
+ ;;
+*) XUSERFILESEARCHPATH="$XUSERFILESEARCHPATH:$HACKDIR/%N.ad"
+ ;;
+esac
+export XUSERFILESEARCHPATH
+
+# see if we can find the full path name of PAGER, so help files work properly
+# assume that if someone sets up a special variable (HACKPAGER) for NetHack,
+# it will already be in a form acceptable to NetHack
+# ideas from brian@radio.astro.utoronto.ca
+if test \( "xxx$PAGER" != xxx \) -a \( "xxx$HACKPAGER" = xxx \)
+then
+
+ HACKPAGER=$PAGER
+
+# use only the first word of the pager variable
+# this prevents problems when looking for file names with trailing
+# options, but also makes the options unavailable for later use from
+# NetHack
+ for i in $HACKPAGER
+ do
+ HACKPAGER=$i
+ break
+ done
+
+ if test ! -f $HACKPAGER
+ then
+ IFS=:
+ for i in $PATH
+ do
+ if test -f $i/$HACKPAGER
+ then
+ HACKPAGER=$i/$HACKPAGER
+ export HACKPAGER
+ break
+ fi
+ done
+ IFS=' '
+ fi
+ if test ! -f $HACKPAGER
+ then
+ echo Cannot find $PAGER -- unsetting PAGER.
+ unset HACKPAGER
+ unset PAGER
+ fi
+fi
+
+
+# create links to INSTALL_NETHACKDIR and setup the other things in the user homedirectory
+if test ! -d $HACKDIR
+then
+ mkdir $HACKDIR
+fi
+
+if test ! -f $HACKDIR/equip.png
+then
+ ln -s $INSTALL_HACKDIR/equip.png $HACKDIR/equip.png
+fi
+
+if test ! -f $HACKDIR/gold24.png
+then
+ ln -s $INSTALL_HACKDIR/gold24.png $HACKDIR/gold24.png
+fi
+
+if test ! -f $HACKDIR/gtk2hack.png
+then
+ ln -s $INSTALL_HACKDIR/gtk2hack.png $HACKDIR/gtk2hack.png
+fi
+
+if test ! -d $HACKDIR/locale
+then
+ ln -s $INSTALL_HACKDIR/locale $HACKDIR/locale
+fi
+
+if test ! -f $HACKDIR/logfile
+then
+ touch $HACKDIR/logfile
+fi
+
+if test ! -f $HACKDIR/mapbg.xpm
+then
+ ln -s $INSTALL_HACKDIR/mapbg.xpm $HACKDIR/mapbg.xpm
+fi
+
+if test ! -f $HACKDIR/nhdat
+then
+ ln -s $INSTALL_HACKDIR/nhdat $HACKDIR/nhdat
+fi
+
+if test ! -f $HACKDIR/perm
+then
+ touch $HACKDIR/perm
+fi
+
+if test ! -f $HACKDIR/record
+then
+ touch $HACKDIR/record
+fi
+
+if test ! -f $HACKDIR/recover
+then
+ ln -s $INSTALL_HACKDIR/recover $HACKDIR/recover
+fi
+
+if test ! -f $HACKDIR/rip.xpm
+then
+ ln -s $INSTALL_HACKDIR/rip.xpm $HACKDIR/rip.xpm
+fi
+
+if test ! -d $HACKDIR/save
+then
+ mkdir $HACKDIR/save
+fi
+
+if test ! -f $HACKDIR/x11tiles
+then
+ ln -s $INSTALL_HACKDIR/x11tiles $HACKDIR/x11tiles
+fi
+
+if test ! -f $HACKDIR/tiles32.png
+then
+ ln -s $INSTALL_HACKDIR/tiles32.png $HACKDIR/tiles32.png
+fi
+
+if test ! -f $HACKDIR/gtk2hackrc
+then
+ ln -s $INSTALL_HACKDIR/gtk2hackrc $HACKDIR/gtk2hackrc
+fi
+
+if test ! -f ~/.nethackrc
+then
+ ln -s $INSTALL_HACKDIR/dot.nethackrc ~/.nethackrc
+fi
+
+if test ! -d ~/MyDocs/.documents/.games/Nethack
+then
+ ln -s $HACKDIR/save/ ~/MyDocs/.documents/.games/Nethack
+#ln -s /home/user/$HACKDIR/save/ /home/user/MyDocs/.documents/.games/Nethack
+fi
+# we want to ask the username in HILDON
+
+cd $HACKDIR
+case $1 in
+ -s*)
+ exec $HACK "$@"
+ ;;
+ *)
+ exec $HACK "$@" $MAXNROFPLAYERS
+ ;;
+esac
diff --git a/patches/nethack.sh-maemo2 b/patches/nethack.sh-maemo2
new file mode 100755
index 0000000..c69dac3
--- /dev/null
+++ b/patches/nethack.sh-maemo2
@@ -0,0 +1,190 @@
+#!/bin/sh
+# This is a special .sh file for Maemo
+# All user data is stored in the home directory because we can't set a suid bit in Nethack and
+# we want backups to be made from the nethack data.
+
+HACKDIR=~/.nethackdir
+export HACKDIR
+MAXNROFPLAYERS=4
+
+INSTALL_HACKDIR=/usr/games/lib/nethackdir
+HACK=$INSTALL_HACKDIR/nethack
+
+# Since Nethack.ad is installed in HACKDIR, add it to XUSERFILESEARCHPATH
+case "x$XUSERFILESEARCHPATH" in
+x) XUSERFILESEARCHPATH="$HACKDIR/%N.ad"
+ ;;
+*) XUSERFILESEARCHPATH="$XUSERFILESEARCHPATH:$HACKDIR/%N.ad"
+ ;;
+esac
+export XUSERFILESEARCHPATH
+
+# see if we can find the full path name of PAGER, so help files work properly
+# assume that if someone sets up a special variable (HACKPAGER) for NetHack,
+# it will already be in a form acceptable to NetHack
+# ideas from brian@radio.astro.utoronto.ca
+if test \( "xxx$PAGER" != xxx \) -a \( "xxx$HACKPAGER" = xxx \)
+then
+
+ HACKPAGER=$PAGER
+
+# use only the first word of the pager variable
+# this prevents problems when looking for file names with trailing
+# options, but also makes the options unavailable for later use from
+# NetHack
+ for i in $HACKPAGER
+ do
+ HACKPAGER=$i
+ break
+ done
+
+ if test ! -f $HACKPAGER
+ then
+ IFS=:
+ for i in $PATH
+ do
+ if test -f $i/$HACKPAGER
+ then
+ HACKPAGER=$i/$HACKPAGER
+ export HACKPAGER
+ break
+ fi
+ done
+ IFS=' '
+ fi
+ if test ! -f $HACKPAGER
+ then
+ echo Cannot find $PAGER -- unsetting PAGER.
+ unset HACKPAGER
+ unset PAGER
+ fi
+fi
+
+
+# create links to INSTALL_NETHACKDIR and setup the other things in the user homedirectory
+if test ! -d $HACKDIR
+then
+ mkdir $HACKDIR
+fi
+
+if test ! -f $HACKDIR/equip.png
+then
+ ln -s $INSTALL_HACKDIR/equip.png $HACKDIR/equip.png
+fi
+
+if test ! -f $HACKDIR/gold24.png
+then
+ ln -s $INSTALL_HACKDIR/gold24.png $HACKDIR/gold24.png
+fi
+
+if test ! -f $HACKDIR/gtk2hack.png
+then
+ ln -s $INSTALL_HACKDIR/gtk2hack.png $HACKDIR/gtk2hack.png
+fi
+
+if test ! -f $HACKDIR/pad_unclicked.png
+then
+ ln -s $INSTALL_HACKDIR/pad_unclicked.png $HACKDIR/pad_unclicked.png
+fi
+
+if test ! -f $HACKDIR/pad_clicked.png
+then
+ ln -s $INSTALL_HACKDIR/pad_clicked.png $HACKDIR/pad_clicked.png
+fi
+
+if test ! -d $HACKDIR/locale
+then
+ ln -s $INSTALL_HACKDIR/locale $HACKDIR/locale
+fi
+
+if test ! -f $HACKDIR/logfile
+then
+ touch $HACKDIR/logfile
+fi
+
+if test ! -f $HACKDIR/mapbg.xpm
+then
+ ln -s $INSTALL_HACKDIR/mapbg.xpm $HACKDIR/mapbg.xpm
+fi
+
+if test ! -f $HACKDIR/nhdat
+then
+ ln -s $INSTALL_HACKDIR/nhdat $HACKDIR/nhdat
+fi
+
+if test ! -f $HACKDIR/perm
+then
+ touch $HACKDIR/perm
+fi
+
+if test ! -f $HACKDIR/record
+then
+ touch $HACKDIR/record
+fi
+
+if test ! -f $HACKDIR/recover
+then
+ ln -s $INSTALL_HACKDIR/recover $HACKDIR/recover
+fi
+
+if test ! -f $HACKDIR/rip.xpm
+then
+ ln -s $INSTALL_HACKDIR/rip.xpm $HACKDIR/rip.xpm
+fi
+
+if test ! -d $HACKDIR/save
+then
+ mkdir $HACKDIR/save
+fi
+
+if test ! -f $HACKDIR/x11tiles
+then
+ ln -s $INSTALL_HACKDIR/x11tiles $HACKDIR/x11tiles
+fi
+
+if test ! -f $HACKDIR/tiles32.png
+then
+ ln -s $INSTALL_HACKDIR/tiles32.png $HACKDIR/tiles32.png
+fi
+
+if test ! -f $HACKDIR/ClassicBW.png
+then
+ ln -s $INSTALL_HACKDIR/ClassicBW.png $HACKDIR/ClassicBW.png
+fi
+
+if test ! -f $HACKDIR/ClassicWB.png
+then
+ ln -s $INSTALL_HACKDIR/ClassicWB.png $HACKDIR/ClassicWB.png
+fi
+
+if test ! -f $HACKDIR/ClassicColor.png
+then
+ ln -s $INSTALL_HACKDIR/ClassicColor.png $HACKDIR/ClassicColor.png
+fi
+
+if test ! -f $HACKDIR/gtk2hackrc
+then
+ ln -s $INSTALL_HACKDIR/gtk2hackrc $HACKDIR/gtk2hackrc
+fi
+
+if test ! -f ~/.nethackrc
+then
+ ln -s $INSTALL_HACKDIR/dot.nethackrc ~/.nethackrc
+fi
+
+if test ! -d ~/MyDocs/.documents/.games/Nethack
+then
+ ln -s $HACKDIR/save/ ~/MyDocs/.documents/.games/Nethack
+#ln -s /home/user/$HACKDIR/save/ /home/user/MyDocs/.documents/.games/Nethack
+fi
+# we want to ask the username in HILDON
+
+cd $HACKDIR
+case $1 in
+ -s*)
+ exec $HACK "$@"
+ ;;
+ *)
+ exec $HACK "$@" $MAXNROFPLAYERS
+ ;;
+esac
diff --git a/patches/nethack.sh-maemo4 b/patches/nethack.sh-maemo4
new file mode 100755
index 0000000..5040dcd
--- /dev/null
+++ b/patches/nethack.sh-maemo4
@@ -0,0 +1,190 @@
+#!/bin/sh
+# This is a special .sh file for Maemo
+# All user data is stored in the home directory because we can't set a suid bit in Nethack and
+# we want backups to be made from the nethack data.
+
+HACKDIR=~/.nethackdir
+export HACKDIR
+MAXNROFPLAYERS=4
+
+INSTALL_HACKDIR=/usr/games/lib/nethackdir
+HACK=$INSTALL_HACKDIR/nethack
+
+# Since Nethack.ad is installed in HACKDIR, add it to XUSERFILESEARCHPATH
+case "x$XUSERFILESEARCHPATH" in
+x) XUSERFILESEARCHPATH="$HACKDIR/%N.ad"
+ ;;
+*) XUSERFILESEARCHPATH="$XUSERFILESEARCHPATH:$HACKDIR/%N.ad"
+ ;;
+esac
+export XUSERFILESEARCHPATH
+
+# see if we can find the full path name of PAGER, so help files work properly
+# assume that if someone sets up a special variable (HACKPAGER) for NetHack,
+# it will already be in a form acceptable to NetHack
+# ideas from brian@radio.astro.utoronto.ca
+if test \( "xxx$PAGER" != xxx \) -a \( "xxx$HACKPAGER" = xxx \)
+then
+
+ HACKPAGER=$PAGER
+
+# use only the first word of the pager variable
+# this prevents problems when looking for file names with trailing
+# options, but also makes the options unavailable for later use from
+# NetHack
+ for i in $HACKPAGER
+ do
+ HACKPAGER=$i
+ break
+ done
+
+ if test ! -f $HACKPAGER
+ then
+ IFS=:
+ for i in $PATH
+ do
+ if test -f $i/$HACKPAGER
+ then
+ HACKPAGER=$i/$HACKPAGER
+ export HACKPAGER
+ break
+ fi
+ done
+ IFS=' '
+ fi
+ if test ! -f $HACKPAGER
+ then
+ echo Cannot find $PAGER -- unsetting PAGER.
+ unset HACKPAGER
+ unset PAGER
+ fi
+fi
+
+
+# create links to INSTALL_NETHACKDIR and setup the other things in the user homedirectory
+if test ! -d $HACKDIR
+then
+ mkdir $HACKDIR
+fi
+
+if test ! -f $HACKDIR/equip.png
+then
+ ln -s $INSTALL_HACKDIR/equip.png $HACKDIR/equip.png
+fi
+
+if test ! -f $HACKDIR/gold24.png
+then
+ ln -s $INSTALL_HACKDIR/gold24.png $HACKDIR/gold24.png
+fi
+
+if test ! -f $HACKDIR/gtk2hack.png
+then
+ ln -s $INSTALL_HACKDIR/gtk2hack.png $HACKDIR/gtk2hack.png
+fi
+
+if test ! -f $HACKDIR/pad_unclicked.png
+then
+ ln -s $INSTALL_HACKDIR/pad_unclicked.png $HACKDIR/pad_unclicked.png
+fi
+
+if test ! -f $HACKDIR/pad_clicked.png
+then
+ ln -s $INSTALL_HACKDIR/pad_clicked.png $HACKDIR/pad_clicked.png
+fi
+
+if test ! -d $HACKDIR/locale
+then
+ ln -s $INSTALL_HACKDIR/locale $HACKDIR/locale
+fi
+
+if test ! -f $HACKDIR/logfile
+then
+ touch $HACKDIR/logfile
+fi
+
+if test ! -f $HACKDIR/mapbg.xpm
+then
+ ln -s $INSTALL_HACKDIR/mapbg.xpm $HACKDIR/mapbg.xpm
+fi
+
+if test ! -f $HACKDIR/nhdat
+then
+ ln -s $INSTALL_HACKDIR/nhdat $HACKDIR/nhdat
+fi
+
+if test ! -f $HACKDIR/perm
+then
+ touch $HACKDIR/perm
+fi
+
+if test ! -f $HACKDIR/record
+then
+ touch $HACKDIR/record
+fi
+
+if test ! -f $HACKDIR/recover
+then
+ ln -s $INSTALL_HACKDIR/recover $HACKDIR/recover
+fi
+
+if test ! -f $HACKDIR/rip.xpm
+then
+ ln -s $INSTALL_HACKDIR/rip.xpm $HACKDIR/rip.xpm
+fi
+
+if test ! -d $HACKDIR/save
+then
+ mkdir $HACKDIR/save
+fi
+
+if test ! -f $HACKDIR/x11tiles
+then
+ ln -s $INSTALL_HACKDIR/x11tiles $HACKDIR/x11tiles
+fi
+
+if test ! -f $HACKDIR/tiles32.png
+then
+ ln -s $INSTALL_HACKDIR/tiles32.png $HACKDIR/tiles32.png
+fi
+
+if test ! -f $HACKDIR/ClassicBW.png
+then
+ ln -s $INSTALL_HACKDIR/ClassicBW.png $HACKDIR/ClassicBW.png
+fi
+
+if test ! -f $HACKDIR/ClassicWB.png
+then
+ ln -s $INSTALL_HACKDIR/ClassicWB.png $HACKDIR/ClassicWB.png
+fi
+
+if test ! -f $HACKDIR/ClassicColor.png
+then
+ ln -s $INSTALL_HACKDIR/ClassicColor.png $HACKDIR/ClassicColor.png
+fi
+
+if test ! -f $HACKDIR/gtk2hackrc
+then
+ ln -s $INSTALL_HACKDIR/gtk2hackrc $HACKDIR/gtk2hackrc
+fi
+
+if test ! -f ~/.nethackrc
+then
+ ln -s $INSTALL_HACKDIR/dot.nethackrc ~/.nethackrc
+fi
+
+if test ! -d ~/MyDocs/.games/Nethack
+then
+ ln -s $HACKDIR/save/ ~/MyDocs/.games/Nethack
+#ln -s /home/user/$HACKDIR/save/ /home/user/MyDocs/.documents/.games/Nethack
+fi
+# we want to ask the username in HILDON
+
+cd $HACKDIR
+case $1 in
+ -s*)
+ exec $HACK "$@"
+ ;;
+ *)
+ exec $HACK "$@" $MAXNROFPLAYERS
+ ;;
+esac
diff --git a/patches/winGtk2.h b/patches/winGtk2.h
new file mode 100644
index 0000000..89eb46c
--- /dev/null
+++ b/patches/winGtk2.h
@@ -0,0 +1,12 @@
+/* header file for Gtk2 window port
+ *
+ * $Id: winGtk2.h,v 1.1.1.1 2004/06/23 01:56:30 miq Exp $
+ *
+ */
+
+#ifndef WINGTK2_H
+#define WINGTK2_H
+
+extern struct window_procs Gtk2_procs;
+
+#endif /* WINGTK2_H */
diff --git a/run.sh b/run.sh
new file mode 100755
index 0000000..6181b11
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# This is a special .sh file for Maemo
+# All user data is stored in the home directory because we can't set a suid bit in Nethack and
+# we want backups to be made from the nethack data.
+
+HACKDIR=~/.nethackdir
+export HACKDIR
+run-standalone.sh ./nethack-3.4.3/src/nethack
diff --git a/run_gdb.sh b/run_gdb.sh
new file mode 100755
index 0000000..337607c
--- /dev/null
+++ b/run_gdb.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# This is a special .sh file for Maemo
+# All user data is stored in the home directory because we can't set a suid bit in Nethack and
+# we want backups to be made from the nethack data.
+
+HACKDIR=~/.nethackdir
+export HACKDIR
+run-standalone.sh gdb --args ./nethack-3.4.3/src/nethack