From 1f80a252d48b3f6eed4469d60c7d109de46eb362 Mon Sep 17 00:00:00 2001 From: Josep Torra Date: Fri, 4 Jan 2013 09:30:48 +0100 Subject: Initial commit --- Makefile | 99 + README | 26 + data/ClassicBW.png | Bin 0 -> 20018 bytes data/ClassicColor.png | Bin 0 -> 47757 bytes data/ClassicWB.png | Bin 0 -> 21598 bytes data/com.nokia.nethack.service | 3 + data/gtk2hackrc | 29 + data/mapbg.xpm | 186 ++ data/nethack.conf | 8 + data/nethack.desktop-maemo1 | 12 + data/nethack.desktop-maemo2 | 12 + data/nethack.desktop-maemo4 | 15 + data/pkg_nethack.16.png | Bin 0 -> 199 bytes data/pkg_nethack.26.png | Bin 0 -> 293 bytes data/pkg_nethack.40.png | Bin 0 -> 363 bytes data/pkg_nethack.64.png | Bin 0 -> 245 bytes data/tiles32.png | Bin 0 -> 150234 bytes debian-maemo1/changelog | 19 + debian-maemo1/compat | 1 + debian-maemo1/control | 11 + debian-maemo1/copyright | 134 ++ debian-maemo1/nethack.links | 1 + debian-maemo1/rules | 98 + debian-maemo2/changelog | 19 + debian-maemo2/compat | 1 + debian-maemo2/control | 20 + debian-maemo2/copyright | 134 ++ debian-maemo2/files | 1 + debian-maemo2/nethack.links | 1 + debian-maemo2/postinst | 13 + debian-maemo2/rules | 99 + debian-maemo4/changelog | 19 + debian-maemo4/compat | 1 + debian-maemo4/control | 13 + debian-maemo4/copyright | 134 ++ debian-maemo4/files | 1 + debian-maemo4/nethack.links | 1 + debian-maemo4/postinst | 13 + debian-maemo4/rules | 99 + dist.sh | 42 + patches/3.4.3-GNOME-support.patch | 28 + patches/3.4.3-X-support.patch | 26 + patches/3.4.3-bison.patch | 18 + patches/3.4.3-default-options.patch | 23 + patches/3.4.3-gtk2.patch | 149 ++ patches/3.4.3-maemo1.patch | 11 + patches/3.4.3-maemo2.patch | 7 + patches/3.4.3-maemo4.patch | 28 + patches/cflags.patch | 11 + patches/dot.nethackrc | 20 + patches/gtk2-alt.patch | 101 + patches/gtk2/ChangeLog | 26 + patches/gtk2/README | 34 + patches/gtk2/copy_trans.sh | 13 + patches/gtk2/equip.png | Bin 0 -> 2478 bytes patches/gtk2/extract-pot.sh | 1 + patches/gtk2/g2bind.c | 1138 +++++++++ patches/gtk2/g2bind.h | 66 + patches/gtk2/g2equip.c | 235 ++ patches/gtk2/g2equip.h | 37 + patches/gtk2/g2i18n.h | 32 + patches/gtk2/g2invent.c | 216 ++ patches/gtk2/g2invent.h | 43 + patches/gtk2/g2main.c | 1092 +++++++++ patches/gtk2/g2main.h | 79 + patches/gtk2/g2map.c | 676 ++++++ patches/gtk2/g2map.h | 70 + patches/gtk2/g2marsh.c | 224 ++ patches/gtk2/g2marsh.h | 43 + patches/gtk2/g2menu.c | 719 ++++++ patches/gtk2/g2menu.h | 51 + patches/gtk2/g2mesg.c | 189 ++ patches/gtk2/g2mesg.h | 39 + patches/gtk2/g2minipad.c | 515 +++++ patches/gtk2/g2minipad.h | 45 + patches/gtk2/g2player.c | 643 ++++++ patches/gtk2/g2player.h | 15 + patches/gtk2/g2status.c | 1092 +++++++++ patches/gtk2/g2status.h | 86 + patches/gtk2/g2text.c | 152 ++ patches/gtk2/g2text.h | 42 + patches/gtk2/g2xpms.h | 1471 ++++++++++++ patches/gtk2/gen_marsh_input | 5 + patches/gtk2/gkt2hackrc | 27 + patches/gtk2/gold24.png | Bin 0 -> 1407 bytes patches/gtk2/gtk2hack.png | Bin 0 -> 693 bytes patches/gtk2/icons/Makefile | 55 + patches/gtk2/icons/hack-stock-pixbufs.h | 2664 ++++++++++++++++++++++ patches/gtk2/icons/stock-icons.list | 58 + patches/gtk2/icons/stock-kick-16.png | Bin 0 -> 879 bytes patches/gtk2/icons/stock-kick-24.png | Bin 0 -> 1083 bytes patches/gtk2/icons/stock-open-16.png | Bin 0 -> 735 bytes patches/gtk2/icons/stock-open-24.png | Bin 0 -> 1135 bytes patches/gtk2/icons/stock-zap-16.png | Bin 0 -> 324 bytes patches/gtk2/icons/stock-zap-24.png | Bin 0 -> 775 bytes patches/gtk2/icons/stock_down_arrow_24.png | Bin 0 -> 559 bytes patches/gtk2/icons/stock_down_left_arrow_24.png | Bin 0 -> 676 bytes patches/gtk2/icons/stock_down_right_arrow_24.png | Bin 0 -> 700 bytes patches/gtk2/icons/stock_eat_16.png | Bin 0 -> 556 bytes patches/gtk2/icons/stock_eat_24.png | Bin 0 -> 948 bytes patches/gtk2/icons/stock_inv_16.png | Bin 0 -> 416 bytes patches/gtk2/icons/stock_inv_24.png | Bin 0 -> 489 bytes patches/gtk2/icons/stock_left_arrow_24.png | Bin 0 -> 567 bytes patches/gtk2/icons/stock_right_arrow_24.png | Bin 0 -> 584 bytes patches/gtk2/icons/stock_search_16.png | Bin 0 -> 929 bytes patches/gtk2/icons/stock_search_24.png | Bin 0 -> 1712 bytes patches/gtk2/icons/stock_self_24.png | Bin 0 -> 656 bytes patches/gtk2/icons/stock_spellbook_16.png | Bin 0 -> 979 bytes patches/gtk2/icons/stock_spellbook_24.png | Bin 0 -> 1110 bytes patches/gtk2/icons/stock_throw_16.png | Bin 0 -> 525 bytes patches/gtk2/icons/stock_throw_24.png | Bin 0 -> 256 bytes patches/gtk2/icons/stock_up_arrow_24.png | Bin 0 -> 554 bytes patches/gtk2/icons/stock_up_left_arrow_24.png | Bin 0 -> 721 bytes patches/gtk2/icons/stock_up_right_arrow_24.png | Bin 0 -> 691 bytes patches/gtk2/icons/stock_whatshere_16.png | Bin 0 -> 240 bytes patches/gtk2/icons/stock_whatshere_24.png | Bin 0 -> 518 bytes patches/gtk2/icons/stock_whatsthere_16.png | Bin 0 -> 864 bytes patches/gtk2/icons/stock_whatsthere_24.png | Bin 0 -> 1413 bytes patches/gtk2/pad_clicked.png | Bin 0 -> 24890 bytes patches/gtk2/pad_unclicked.png | Bin 0 -> 26301 bytes patches/gtk2/po/POTFILES.in | 0 patches/gtk2/po/de_DE.po | 710 ++++++ patches/gtk2/po/de_DE/LC_MESSAGES/gtk2hack.mo | Bin 0 -> 8437 bytes patches/gtk2/po/gtk2hack.pot | 702 ++++++ patches/gtk2/po/it_IT.po | 710 ++++++ patches/gtk2/po/it_IT/LC_MESSAGES/gtk2hack.mo | Bin 0 -> 8305 bytes patches/gtk2/po/pt_BR.po | 710 ++++++ patches/gtk2/po/pt_BR/LC_MESSAGES/gtk2hack.mo | Bin 0 -> 7890 bytes patches/gtk2/popup.c | 84 + patches/gtk2/rebuild_trans.sh | 20 + patches/nethack.sh-maemo1 | 165 ++ patches/nethack.sh-maemo2 | 190 ++ patches/nethack.sh-maemo4 | 190 ++ patches/winGtk2.h | 12 + run.sh | 8 + run_gdb.sh | 8 + 136 files changed, 17089 insertions(+) create mode 100644 Makefile create mode 100644 README create mode 100644 data/ClassicBW.png create mode 100644 data/ClassicColor.png create mode 100644 data/ClassicWB.png create mode 100644 data/com.nokia.nethack.service create mode 100644 data/gtk2hackrc create mode 100644 data/mapbg.xpm create mode 100644 data/nethack.conf create mode 100644 data/nethack.desktop-maemo1 create mode 100644 data/nethack.desktop-maemo2 create mode 100644 data/nethack.desktop-maemo4 create mode 100644 data/pkg_nethack.16.png create mode 100644 data/pkg_nethack.26.png create mode 100644 data/pkg_nethack.40.png create mode 100644 data/pkg_nethack.64.png create mode 100644 data/tiles32.png create mode 100644 debian-maemo1/changelog create mode 100644 debian-maemo1/compat create mode 100644 debian-maemo1/control create mode 100644 debian-maemo1/copyright create mode 100644 debian-maemo1/nethack.links create mode 100755 debian-maemo1/rules create mode 100644 debian-maemo2/changelog create mode 100644 debian-maemo2/compat create mode 100644 debian-maemo2/control create mode 100644 debian-maemo2/copyright create mode 100644 debian-maemo2/files create mode 100644 debian-maemo2/nethack.links create mode 100755 debian-maemo2/postinst create mode 100755 debian-maemo2/rules create mode 100644 debian-maemo4/changelog create mode 100644 debian-maemo4/compat create mode 100644 debian-maemo4/control create mode 100644 debian-maemo4/copyright create mode 100644 debian-maemo4/files create mode 100644 debian-maemo4/nethack.links create mode 100755 debian-maemo4/postinst create mode 100755 debian-maemo4/rules create mode 100755 dist.sh create mode 100644 patches/3.4.3-GNOME-support.patch create mode 100644 patches/3.4.3-X-support.patch create mode 100644 patches/3.4.3-bison.patch create mode 100644 patches/3.4.3-default-options.patch create mode 100644 patches/3.4.3-gtk2.patch create mode 100644 patches/3.4.3-maemo1.patch create mode 100644 patches/3.4.3-maemo2.patch create mode 100644 patches/3.4.3-maemo4.patch create mode 100644 patches/cflags.patch create mode 100644 patches/dot.nethackrc create mode 100644 patches/gtk2-alt.patch create mode 100644 patches/gtk2/ChangeLog create mode 100644 patches/gtk2/README create mode 100755 patches/gtk2/copy_trans.sh create mode 100644 patches/gtk2/equip.png create mode 100755 patches/gtk2/extract-pot.sh create mode 100644 patches/gtk2/g2bind.c create mode 100644 patches/gtk2/g2bind.h create mode 100644 patches/gtk2/g2equip.c create mode 100644 patches/gtk2/g2equip.h create mode 100644 patches/gtk2/g2i18n.h create mode 100644 patches/gtk2/g2invent.c create mode 100644 patches/gtk2/g2invent.h create mode 100644 patches/gtk2/g2main.c create mode 100644 patches/gtk2/g2main.h create mode 100644 patches/gtk2/g2map.c create mode 100644 patches/gtk2/g2map.h create mode 100644 patches/gtk2/g2marsh.c create mode 100644 patches/gtk2/g2marsh.h create mode 100644 patches/gtk2/g2menu.c create mode 100644 patches/gtk2/g2menu.h create mode 100644 patches/gtk2/g2mesg.c create mode 100644 patches/gtk2/g2mesg.h create mode 100644 patches/gtk2/g2minipad.c create mode 100644 patches/gtk2/g2minipad.h create mode 100644 patches/gtk2/g2player.c create mode 100644 patches/gtk2/g2player.h create mode 100644 patches/gtk2/g2status.c create mode 100644 patches/gtk2/g2status.h create mode 100644 patches/gtk2/g2text.c create mode 100644 patches/gtk2/g2text.h create mode 100644 patches/gtk2/g2xpms.h create mode 100644 patches/gtk2/gen_marsh_input create mode 100644 patches/gtk2/gkt2hackrc create mode 100644 patches/gtk2/gold24.png create mode 100644 patches/gtk2/gtk2hack.png create mode 100644 patches/gtk2/icons/Makefile create mode 100644 patches/gtk2/icons/hack-stock-pixbufs.h create mode 100644 patches/gtk2/icons/stock-icons.list create mode 100644 patches/gtk2/icons/stock-kick-16.png create mode 100644 patches/gtk2/icons/stock-kick-24.png create mode 100644 patches/gtk2/icons/stock-open-16.png create mode 100644 patches/gtk2/icons/stock-open-24.png create mode 100644 patches/gtk2/icons/stock-zap-16.png create mode 100644 patches/gtk2/icons/stock-zap-24.png create mode 100644 patches/gtk2/icons/stock_down_arrow_24.png create mode 100644 patches/gtk2/icons/stock_down_left_arrow_24.png create mode 100644 patches/gtk2/icons/stock_down_right_arrow_24.png create mode 100644 patches/gtk2/icons/stock_eat_16.png create mode 100644 patches/gtk2/icons/stock_eat_24.png create mode 100644 patches/gtk2/icons/stock_inv_16.png create mode 100644 patches/gtk2/icons/stock_inv_24.png create mode 100644 patches/gtk2/icons/stock_left_arrow_24.png create mode 100644 patches/gtk2/icons/stock_right_arrow_24.png create mode 100644 patches/gtk2/icons/stock_search_16.png create mode 100644 patches/gtk2/icons/stock_search_24.png create mode 100644 patches/gtk2/icons/stock_self_24.png create mode 100644 patches/gtk2/icons/stock_spellbook_16.png create mode 100644 patches/gtk2/icons/stock_spellbook_24.png create mode 100644 patches/gtk2/icons/stock_throw_16.png create mode 100644 patches/gtk2/icons/stock_throw_24.png create mode 100644 patches/gtk2/icons/stock_up_arrow_24.png create mode 100644 patches/gtk2/icons/stock_up_left_arrow_24.png create mode 100644 patches/gtk2/icons/stock_up_right_arrow_24.png create mode 100644 patches/gtk2/icons/stock_whatshere_16.png create mode 100644 patches/gtk2/icons/stock_whatshere_24.png create mode 100644 patches/gtk2/icons/stock_whatsthere_16.png create mode 100644 patches/gtk2/icons/stock_whatsthere_24.png create mode 100644 patches/gtk2/pad_clicked.png create mode 100644 patches/gtk2/pad_unclicked.png create mode 100644 patches/gtk2/po/POTFILES.in create mode 100644 patches/gtk2/po/de_DE.po create mode 100644 patches/gtk2/po/de_DE/LC_MESSAGES/gtk2hack.mo create mode 100644 patches/gtk2/po/gtk2hack.pot create mode 100644 patches/gtk2/po/it_IT.po create mode 100644 patches/gtk2/po/it_IT/LC_MESSAGES/gtk2hack.mo create mode 100644 patches/gtk2/po/pt_BR.po create mode 100644 patches/gtk2/po/pt_BR/LC_MESSAGES/gtk2hack.mo create mode 100644 patches/gtk2/popup.c create mode 100755 patches/gtk2/rebuild_trans.sh create mode 100755 patches/nethack.sh-maemo1 create mode 100755 patches/nethack.sh-maemo2 create mode 100755 patches/nethack.sh-maemo4 create mode 100644 patches/winGtk2.h create mode 100755 run.sh create mode 100755 run_gdb.sh 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 +# Josep Torra +# 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 $ +Ralf Engels +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 Binary files /dev/null and b/data/ClassicBW.png differ diff --git a/data/ClassicColor.png b/data/ClassicColor.png new file mode 100644 index 0000000..5ba68cf Binary files /dev/null and b/data/ClassicColor.png differ diff --git a/data/ClassicWB.png b/data/ClassicWB.png new file mode 100644 index 0000000..4761777 Binary files /dev/null and b/data/ClassicWB.png 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 ":::..." +# +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%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,]@*$(>%.&", +"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#890gab6^^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%('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{>+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.$>5h;%h;+@_p*a^b&h$&6adyA", +"tcp/(^w0>_&d.5+9;5$q5/,>;6.%+;h(,8:@9;9e#{:O}r4;$,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'','@]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+@n~f,@<;.6h5<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@+$<@@{>'($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':+9..(0q${'>0h(q&.;", +"$_q4.hd9&6g04bjMa/.hg6(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%70n,+49%ElMa*53OG[]%7p{3G~eG9$h>,,e'3erG#>7*&p", +"h%0+4ee3>@,{6do^bdp6g_(+>@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%;.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:{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,]@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.&;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%(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.$>5h;%h;+@_p*a^b&h$&6adyAjy./_gw%]_q${9+(_5_h_q4(;/(_$;;,''<',,]:>;fPPO%q", +"$,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''+: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:'n+<'", +"3[<8+9,+99>;4%+]#:~!rf{::,'e[{_+%4;44.5(>9d7p&hL*^_g7.*dww*7%/$5(^.q4hc*5@>+@n~f,@<;.6h5<<85*$@e,'e'8;i", +"($q;9,n8@;5d/h%+<@nG~'%$%9+nn84]4(;95g6+8{qp7bw^&d.**h..7w*/h5@+$<@@{>'", +"$;>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':+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(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,!QG3:](w;<38:n94h;+{f,[KV1R:*&%.h%0+4ee3>@,{6do^bdp6g_(+>@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 @@ + + + /home/user/nethackrc + /home/user/nethackdir + + 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 Binary files /dev/null and b/data/pkg_nethack.16.png differ diff --git a/data/pkg_nethack.26.png b/data/pkg_nethack.26.png new file mode 100644 index 0000000..1254a5e Binary files /dev/null and b/data/pkg_nethack.26.png differ diff --git a/data/pkg_nethack.40.png b/data/pkg_nethack.40.png new file mode 100644 index 0000000..c9b5d75 Binary files /dev/null and b/data/pkg_nethack.40.png differ diff --git a/data/pkg_nethack.64.png b/data/pkg_nethack.64.png new file mode 100644 index 0000000..ece44b6 Binary files /dev/null and b/data/pkg_nethack.64.png differ diff --git a/data/tiles32.png b/data/tiles32.png new file mode 100644 index 0000000..d573c97 Binary files /dev/null and b/data/tiles32.png 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 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 +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 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 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 +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 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 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 +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 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 + + * makes available the ordinary 'm' (move) command. + You can use it to move explicitly without attacking. + +2007-03-11 Tilman Vogel + + * 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 Binary files /dev/null and b/patches/gtk2/equip.png 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 +#include + +#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 pressed\n"); */ + key = key | META_BIT; + } else if (event->state & GDK_CONTROL_MASK) { + /*g_print("modifier 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 + +#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 + +#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 +#include +#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 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 + +#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 +#include +#elif defined(MAEMO2) +#include +#elif defined(HILDON1) +#include +#endif + +#include + +#define MAEMO_PACKAGE "nethack" +#define MAEMO_VERSION "1.0" +#endif + +#include +#include + +#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 ", + "Paolo M. ", + "Paulo Henrique Cabral ", +}; + +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 +#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, "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 "), 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, "c", 'C', NULL}, + {"Drop", N_("Drop"), NULL, "d", 'd', GTK_STOCK_GOTO_BOTTOM}, + {"DropMany", N_("Drop many"), NULL, "d", 'D', NULL}, + {"Kick", N_("Kick"), NULL, "d", CTRL_BITS & GDK_d, + HACK_STOCK_KICK}, + {"Eat", N_("Eat"), NULL, "e", 'e', HACK_STOCK_EAT}, + {"Engrave", N_("Engrave"), NULL, "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, "p", 'P', NULL}, + {"Quaff", N_("Quaff"), NULL, "q", 'q', NULL}, + {"Quiver", N_("Put in quiver"), NULL, "q", 'Q', NULL}, + {"Read", N_("Read"), NULL, "r", 'r', GTK_STOCK_JUSTIFY_LEFT}, + {"Remove", N_("Remove accessory"), NULL, "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, "t", 'T', NULL}, + {"Teleport", N_("Teleport"), NULL, "t", CTRL_BITS & GDK_t, + GTK_STOCK_JUMP_TO}, + {"Wield", N_("Wield weapon"), NULL, "w", 'w', GTK_STOCK_CUT}, + {"Wear", N_("Wear armor"), NULL, "w", 'W', NULL}, + {"Exchange", N_("Exchange weapons"), NULL, "x", 'x', NULL}, + {"Explore", N_("Explore mode"), NULL, "x", 'X', NULL}, + {"Zap", N_("Zap a wand"), NULL, "z", 'z', HACK_STOCK_ZAP}, + {"Cast", N_("Cast a spell"), NULL, "z", 'Z', HACK_STOCK_SPELLBOOK}, + {"PickUp", N_("Pick up"), NULL, NULL, ',', GTK_STOCK_GOTO_TOP}, + {"Twoweapons", N_("Twoweapons"), NULL, "2", META_BIT | GDK_2, NULL}, + {"Adjust", N_("Adjust letters"), NULL, "a", META_BIT | GDK_a, NULL}, + {"Chat", N_("Chat"), NULL, "c", META_BIT | GDK_c, NULL}, + {"Dip", N_("Dip"), NULL, "d", META_BIT | GDK_d, NULL}, + {"Enhance", N_("Enhance skills"), NULL, "e", META_BIT | GDK_e, NULL}, + {"Force", N_("Force"), NULL, "f", META_BIT | GDK_f, NULL}, + {"Invoke", N_("Invoke"), NULL, "i", META_BIT | GDK_i, NULL}, + {"Jump", N_("Jump"), NULL, "j", META_BIT | GDK_j, NULL}, + {"Loot", N_("Loot"), NULL, "l", META_BIT | GDK_l, NULL}, + {"Monster", N_("Monster action"), NULL, "m", META_BIT | GDK_m, NULL}, + {"NameIndividual", N_("Name object"), NULL, "n", META_BIT | GDK_n, + NULL}, + {"Offer", N_("Offer"), NULL, "o", META_BIT | GDK_o, NULL}, + {"Pray", N_("Pray"), NULL, "p", META_BIT | GDK_p, NULL}, + {"Rub", N_("Rub"), NULL, "r", META_BIT | GDK_r, NULL}, + {"Sit", N_("Sit"), NULL, "s", META_BIT | GDK_s, NULL}, + {"Turn", N_("Turn undead"), NULL, "t", META_BIT | GDK_t, NULL}, + {"Untrap", N_("Untrap"), NULL, "u", META_BIT | GDK_u, NULL}, + {"Wipe", N_("Wipe"), NULL, "w", META_BIT | GDK_w, NULL}, + {"Edition", N_("Show build options"), NULL, "v", META_BIT | GDK_v, + NULL}, + {"CharacterInfo", N_("Show character info"), NULL, "x", + CTRL_BITS & GDK_x, NULL}, + + {"Redo", N_("Redo"), NULL, "A", CTRL_BITS & GDK_A, GTK_STOCK_REDO}, + {"Save", N_("Save game"), NULL, "s", GDK_S, GTK_STOCK_SAVE}, + {"Options", N_("Options"), NULL, "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 = + "" + " " + " " + " " + " " +/* " " */ + " " + " " + " " + " " + " " + " " + " " +/* " " */ + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " +/* " " */ + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " +/* " " */ + " " + " " + " " + " " +/* " " + " " */ + " " +/* " " + " " + " " */ + " " + " " + " " +/* " " + " " */ + " " + " " + " " + " " +/* " " + " " */ + " " + " " + " " +/* " " */ + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " +/* " " */ + " " + " " + " " +/* " " + " " + " " */ + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + ""; + + +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), + "Gtk2Hack " VERSION ""); + 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 pressed\n"); */ + key = key | META_BIT; + } else if (event->state & GDK_CONTROL_MASK) { + /*g_print("modifier 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 + +#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 +// #include + +#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 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 +#include + +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 + + +#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 + +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 +#include + +#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 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 + +#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 + +#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 + +#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 +#include +#include +#include + +#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 +#include + +#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 + +#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 +#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 +#include + + +#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 +#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 + +#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 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 + +#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 */ +/* NetHack may be freely redistributed. See license for details. */ +/* These XPMs are the artwork of Warwick Allison + * . 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.@@@@@@@@@@@", + "@@@@@@@@@@@@@.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+ :++-#############", + "######-: +XX+ #########", + "#####+%%@@,X%<,XXXXXXX<:@XXX<: =########", + "####$%XX< <,<,XX& ########", + "#####$%<%X@%XXXX<%XX< =#######", + "#######<;X%XXXXX<<,XXXXXX%,XXXXXXXXX%@ #######", + "##########- 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;<,=#######", + "#######<<<3-=<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;=##############", + "#################<# 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:OXO,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+OXX3O5************", + "*********=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==%XX11111O1+%X111XX%<#>#########", + "######.,;XXXXXX1O1X%3XXXXX%+3###########", + "########3=XXXXXX:XXXXXXXXX+<>$##########", + "########>+XXXXXX%-3->XXXX%+<############", + "#########%3XXXXXX>- -%XXX%<%$###########", + "#########$############", + "##########+%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 ":::..." +# +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 Binary files /dev/null and b/patches/gtk2/gold24.png differ diff --git a/patches/gtk2/gtk2hack.png b/patches/gtk2/gtk2hack.png new file mode 100644 index 0000000..b1dbc7d Binary files /dev/null and b/patches/gtk2/gtk2hack.png 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\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\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\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\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 Binary files /dev/null and b/patches/gtk2/icons/stock-kick-16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock-kick-24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock-open-16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock-open-24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock-zap-16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock-zap-24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_down_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_down_left_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_down_right_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_eat_16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_eat_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_inv_16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_inv_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_left_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_right_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_search_16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_search_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_self_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_spellbook_16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_spellbook_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_throw_16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_throw_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_up_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_up_left_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_up_right_arrow_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_whatshere_16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_whatshere_24.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_whatsthere_16.png 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 Binary files /dev/null and b/patches/gtk2/icons/stock_whatsthere_24.png differ diff --git a/patches/gtk2/pad_clicked.png b/patches/gtk2/pad_clicked.png new file mode 100644 index 0000000..22ad7fb Binary files /dev/null and b/patches/gtk2/pad_clicked.png differ diff --git a/patches/gtk2/pad_unclicked.png b/patches/gtk2/pad_unclicked.png new file mode 100644 index 0000000..82913d5 Binary files /dev/null and b/patches/gtk2/pad_unclicked.png differ diff --git a/patches/gtk2/po/POTFILES.in b/patches/gtk2/po/POTFILES.in new file mode 100644 index 0000000..e69de29 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 "Create your character:" +msgstr "Erstellen Sie Ihren Charakter:" + +#: g2player.c:396 +msgid "Choose alignment:" +msgstr "Gesinnung wählen:" + +#: g2player.c:453 +msgid "Choose race:" +msgstr "Rasse wählen:" + +#: g2player.c:450 +msgid "Choose role:" +msgstr "Rolle wählen:" + +#: g2player.c:368 +msgid "Choose sex:" +msgstr "Geschlecht wählen:" + +#: 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 " +msgstr "Angreifen " + +#: 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 Binary files /dev/null and b/patches/gtk2/po/de_DE/LC_MESSAGES/gtk2hack.mo 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 , 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 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: g2player.c:444 +msgid "Create your character:" +msgstr "" + +#: g2player.c:396 +msgid "Choose alignment:" +msgstr "" + +#: g2player.c:453 +msgid "Choose race:" +msgstr "" + +#: g2player.c:450 +msgid "Choose role:" +msgstr "" + +#: g2player.c:368 +msgid "Choose sex:" +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 " +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: \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 "Create your character:" +msgstr "Crea il tuo personaggio:" + +#: g2player.c:396 +msgid "Choose alignment:" +msgstr "Scegli l'allineamento:" + +#: g2player.c:453 +msgid "Choose race:" +msgstr "Scegli la razza:" + +#: g2player.c:450 +msgid "Choose role:" +msgstr "Scegli un ruolo:" + +#: g2player.c:368 +msgid "Choose sex:" +msgstr "Scegli un genere:" + +#: 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 " +msgstr "Attacca " + +#: 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 Binary files /dev/null and b/patches/gtk2/po/it_IT/LC_MESSAGES/gtk2hack.mo 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 , 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 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: g2player.c:444 +msgid "Create your character:" +msgstr "Crie seu tipo:" + +#: g2player.c:396 +msgid "Choose alignment:" +msgstr "Escolher alinhamento:" + +#: g2player.c:453 +msgid "Choose race:" +msgstr "Escolher raça:" + +#: g2player.c:450 +msgid "Choose role:" +msgstr "Escolher papel:" + +#: g2player.c:368 +msgid "Choose sex:" +msgstr "Escolher sexo:" + +#: 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 " +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 Binary files /dev/null and b/patches/gtk2/po/pt_BR/LC_MESSAGES/gtk2hack.mo 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 -- cgit v1.2.3