From 5b1c4f85b694a8892a453352915466128ab30fc9 Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Wed, 23 Nov 2016 14:35:12 +0900 Subject: [PATCH] Initial commit --- .gitignore | 9 + .kateconfig | 1 + COPYING | 340 +++ README.md | 61 + broadway.mk | 12 + channel/Makefile | 14 + channel/README | 69 + channel/banner/.gitignore | 6 + channel/banner/Makefile | 64 + channel/banner/Makefile.section | 30 + channel/banner/banner/abubble1.png | Bin 0 -> 981 bytes channel/banner/banner/abubble2.png | Bin 0 -> 710 bytes channel/banner/banner/abubble3.png | Bin 0 -> 364 bytes channel/banner/banner/abubble4.png | Bin 0 -> 396 bytes channel/banner/banner/abubble5.png | Bin 0 -> 359 bytes channel/banner/banner/abubble6.png | Bin 0 -> 248 bytes channel/banner/banner/banner_fade.png | Bin 0 -> 240 bytes channel/banner/banner/banner_shape2.png | Bin 0 -> 1837 bytes channel/banner/banner/banner_title.png | Bin 0 -> 10598 bytes channel/banner/banner/banner_wave1a.png | Bin 0 -> 1291 bytes channel/banner/banner/banner_wave1b.png | Bin 0 -> 1482 bytes channel/banner/banner/banner_wavea.png | Bin 0 -> 2967 bytes channel/banner/banner/banner_waveb.png | Bin 0 -> 2965 bytes channel/banner/banner/bbubble1.png | Bin 0 -> 1255 bytes channel/banner/banner/cbubble1.png | Bin 0 -> 1536 bytes channel/banner/banner/cbubble2.png | Bin 0 -> 283 bytes channel/banner/banner/mkbanner.py | 383 +++ channel/banner/banner/textures.txt | 20 + channel/banner/banner/white.png | Bin 0 -> 177 bytes channel/banner/icon/icon_fade.png | Bin 0 -> 214 bytes channel/banner/icon/icon_shape2.png | Bin 0 -> 610 bytes channel/banner/icon/icon_title.png | Bin 0 -> 2401 bytes channel/banner/icon/icon_wave1a.png | Bin 0 -> 407 bytes channel/banner/icon/icon_wave1b.png | Bin 0 -> 452 bytes channel/banner/icon/icon_wavea.png | Bin 0 -> 877 bytes channel/banner/icon/icon_waveb.png | Bin 0 -> 843 bytes channel/banner/icon/mkicon.py | 182 ++ channel/banner/icon/textures.txt | 11 + channel/banner/icon/white.png | Bin 0 -> 177 bytes channel/banner/names.txt | 9 + .../sound/wiibrew-banner-intro-part.wav | Bin 0 -> 539032 bytes .../banner/sound/wiibrew-banner-loop-part.wav | Bin 0 -> 1077852 bytes channel/banner/tools/Makefile | 19 + channel/banner/tools/addimd5.py | 13 + channel/banner/tools/join-imet.py | 48 + channel/banner/tools/lz77.c | 273 ++ channel/banner/tools/mkbns.c | 353 +++ channel/banner/tools/png2tpl.c | 221 ++ channel/channelapp/.gitignore | 10 + channel/channelapp/Makefile | 230 ++ channel/channelapp/banner/.gitignore | 3 + channel/channelapp/banner/Makefile | 11 + channel/channelapp/banner/banner.ppm | 4 + channel/channelapp/banner/icon.ppm | 4 + channel/channelapp/banner/title | Bin 0 -> 128 bytes channel/channelapp/banner/twintig.c | 103 + channel/channelapp/config.h | 143 ++ channel/channelapp/data/about.png | Bin 0 -> 6523 bytes channel/channelapp/data/apps_grid.png | Bin 0 -> 1359 bytes channel/channelapp/data/apps_grid_hover.png | Bin 0 -> 2562 bytes channel/channelapp/data/apps_list.png | Bin 0 -> 1586 bytes channel/channelapp/data/apps_list_hover.png | Bin 0 -> 2896 bytes channel/channelapp/data/apps_next.png | Bin 0 -> 3614 bytes channel/channelapp/data/apps_next_hover.png | Bin 0 -> 4941 bytes channel/channelapp/data/apps_previous.png | Bin 0 -> 3627 bytes .../channelapp/data/apps_previous_hover.png | Bin 0 -> 4942 bytes channel/channelapp/data/background.png | Bin 0 -> 124631 bytes channel/channelapp/data/background_wide.png | Bin 0 -> 152245 bytes channel/channelapp/data/bubble1.png | Bin 0 -> 5004 bytes channel/channelapp/data/bubble2.png | Bin 0 -> 5612 bytes channel/channelapp/data/bubble3.png | Bin 0 -> 6314 bytes channel/channelapp/data/button.png | Bin 0 -> 1635 bytes channel/channelapp/data/button_focus.png | Bin 0 -> 2445 bytes channel/channelapp/data/button_small.png | Bin 0 -> 1551 bytes .../channelapp/data/button_small_focus.png | Bin 0 -> 2328 bytes channel/channelapp/data/button_tiny.png | Bin 0 -> 1493 bytes channel/channelapp/data/button_tiny_focus.png | Bin 0 -> 2253 bytes .../channelapp/data/content_arrow_down.png | Bin 0 -> 383 bytes channel/channelapp/data/content_arrow_up.png | Bin 0 -> 369 bytes channel/channelapp/data/cursor_drag.png | Bin 0 -> 1805 bytes channel/channelapp/data/cursor_drag_shade.png | Bin 0 -> 670 bytes channel/channelapp/data/cursor_pic.png | Bin 0 -> 1795 bytes channel/channelapp/data/cursor_shade.png | Bin 0 -> 628 bytes channel/channelapp/data/dialog_background.png | Bin 0 -> 7051 bytes channel/channelapp/data/dlg_confirm.png | Bin 0 -> 2581 bytes channel/channelapp/data/dlg_error.png | Bin 0 -> 2604 bytes channel/channelapp/data/dlg_info.png | Bin 0 -> 2205 bytes channel/channelapp/data/dlg_warning.png | Bin 0 -> 2293 bytes channel/channelapp/data/droid.ttf | Bin 0 -> 190776 bytes channel/channelapp/data/droidbold.ttf | Bin 0 -> 194488 bytes channel/channelapp/data/icon_network.png | Bin 0 -> 1327 bytes .../channelapp/data/icon_network_active.png | Bin 0 -> 1473 bytes channel/channelapp/data/icon_usbgecko.png | Bin 0 -> 1478 bytes .../channelapp/data/icon_usbgecko_active.png | Bin 0 -> 1615 bytes channel/channelapp/data/logo.png | Bin 0 -> 10078 bytes channel/channelapp/data/progress.png | Bin 0 -> 3524 bytes channel/channelapp/data/throbber.png | Bin 0 -> 2878 bytes channel/channelapp/gdb.txt | 4 + channel/channelapp/i18n/dutch.po | 257 ++ channel/channelapp/i18n/french.po | 261 ++ channel/channelapp/i18n/german.po | 256 ++ channel/channelapp/i18n/italian.po | 267 ++ channel/channelapp/i18n/japanese.po | 253 ++ channel/channelapp/i18n/spanish.po | 258 ++ channel/channelapp/i18n/template.pot | 244 ++ channel/channelapp/newrvl.ld | 306 +++ channel/channelapp/newrvl.spec | 2 + channel/channelapp/source/appentry.c | 713 ++++++ channel/channelapp/source/appentry.h | 80 + channel/channelapp/source/asm.h | 340 +++ channel/channelapp/source/blob.c | 84 + channel/channelapp/source/blob.h | 9 + channel/channelapp/source/browser.c | 330 +++ channel/channelapp/source/browser.h | 26 + channel/channelapp/source/bubbles.c | 233 ++ channel/channelapp/source/bubbles.h | 15 + channel/channelapp/source/controls.c | 240 ++ channel/channelapp/source/controls.h | 36 + channel/channelapp/source/cursors.c | 55 + channel/channelapp/source/cursors.h | 28 + channel/channelapp/source/debug.c | 88 + channel/channelapp/source/dialogs.c | 623 +++++ channel/channelapp/source/dialogs.h | 46 + channel/channelapp/source/dvd.c | 79 + channel/channelapp/source/dvd.h | 10 + channel/channelapp/source/ecdsa.c | 413 +++ channel/channelapp/source/ecdsa.h | 8 + channel/channelapp/source/elf_abi.h | 594 +++++ channel/channelapp/source/font.c | 774 ++++++ channel/channelapp/source/font.h | 54 + channel/channelapp/source/gfx.c | 539 ++++ channel/channelapp/source/gfx.h | 96 + channel/channelapp/source/ggets.c | 67 + channel/channelapp/source/ggets.h | 45 + channel/channelapp/source/http.c | 455 ++++ channel/channelapp/source/http.h | 33 + channel/channelapp/source/i18n.c | 86 + channel/channelapp/source/i18n.h | 13 + channel/channelapp/source/isfs.c | 129 + channel/channelapp/source/isfs.h | 9 + channel/channelapp/source/loader.c | 1009 ++++++++ channel/channelapp/source/loader.h | 48 + channel/channelapp/source/loader_reloc.c | 283 ++ channel/channelapp/source/loader_reloc.h | 13 + channel/channelapp/source/m_main.c | 141 + channel/channelapp/source/m_main.h | 15 + channel/channelapp/source/main.c | 825 ++++++ channel/channelapp/source/manage.c | 561 ++++ channel/channelapp/source/manage.h | 18 + channel/channelapp/source/panic.c | 137 + channel/channelapp/source/panic.h | 53 + channel/channelapp/source/playtime.c | 39 + channel/channelapp/source/playtime.h | 25 + channel/channelapp/source/sha1.c | 172 ++ channel/channelapp/source/sha1.h | 18 + channel/channelapp/source/tcp.c | 297 +++ channel/channelapp/source/tcp.h | 17 + channel/channelapp/source/tex.c | 262 ++ channel/channelapp/source/tex.h | 19 + channel/channelapp/source/theme.c | 474 ++++ channel/channelapp/source/theme.h | 76 + channel/channelapp/source/title.c | 95 + channel/channelapp/source/title.h | 12 + channel/channelapp/source/unzip.c | 1576 ++++++++++++ channel/channelapp/source/unzip.h | 331 +++ channel/channelapp/source/unzip_io.c | 170 ++ channel/channelapp/source/unzip_io.h | 58 + channel/channelapp/source/update.c | 316 +++ channel/channelapp/source/update.h | 13 + channel/channelapp/source/view.c | 404 +++ channel/channelapp/source/view.h | 54 + channel/channelapp/source/widgets.c | 613 +++++ channel/channelapp/source/widgets.h | 122 + channel/channelapp/source/xml.c | 612 +++++ channel/channelapp/source/xml.h | 79 + channel/channelapp/stub/asm.h | 340 +++ channel/channelapp/stub/cache.h | 310 +++ channel/channelapp/stub/cache_asm.S | 465 ++++ channel/channelapp/stub/crt0.S | 207 ++ channel/channelapp/stub/ios.c | 290 +++ channel/channelapp/stub/ios.h | 11 + channel/channelapp/stub/processor.h | 115 + channel/channelapp/stub/stub.c | 151 ++ channel/channelapp/stub/stub_debug.c | 48 + channel/channelapp/stub/stub_debug.h | 41 + channel/channelapp/stub/system.c | 28 + channel/channelapp/stub/system.h | 24 + channel/channelapp/stub/system_asm.S | 100 + channel/channelapp/stub/usb.c | 221 ++ channel/channelapp/stub/usb.h | 65 + channel/title/.gitignore | 7 + channel/title/Makefile | 52 + channel/title/cetk.template | Bin 0 -> 676 bytes channel/title/dpki/certs | Bin 0 -> 3136 bytes channel/title/dpki/footer | 1 + channel/title/footer | Bin 0 -> 64 bytes channel/title/pywii | 1 + channel/title/retail/certs | Bin 0 -> 2560 bytes channel/title/retail/footer | 1 + channel/title/tmd.template | Bin 0 -> 556 bytes channel/wiiload/.gitignore | 3 + channel/wiiload/Makefile | 53 + channel/wiiload/gecko.c | 245 ++ channel/wiiload/gecko.h | 32 + channel/wiiload/main.c | 525 ++++ channel/wiiload/win32/include/zconf.h | 279 ++ channel/wiiload/win32/include/zlib.h | 893 +++++++ channel/wiiload/win32/lib/libz.a | Bin 0 -> 73320 bytes common.mk | 60 + pywii/Alameda/Alameda.py | 1736 +++++++++++++ pywii/Common/Struct.py | 335 +++ pywii/Common/pywii/__init__.py | 3 + pywii/Common/pywii/ec.py | 367 +++ pywii/Common/pywii/wii.py | 1757 +++++++++++++ pywii/README | 10 + pywii/breakfast.py | 94 + pywii/ecmodule/_ecmodule.c | 248 ++ pywii/ecmodule/setup.py | 9 + pywii/pywii-tools/addhash.py | 11 + pywii/pywii-tools/arclist.py | 15 + pywii/pywii-tools/arcpack.py | 26 + pywii/pywii-tools/certinfo.py | 26 + pywii/pywii-tools/discinfo.py | 28 + pywii/pywii-tools/dpkisign.py | 35 + pywii/pywii-tools/ecchecksig.py | 57 + pywii/pywii-tools/ecgenpriv.py | 33 + pywii/pywii-tools/ecpriv2pub.py | 30 + pywii/pywii-tools/ecsign.py | 35 + pywii/pywii-tools/extract.py | 59 + pywii/pywii-tools/extractdol.py | 26 + pywii/pywii-tools/extractfiles.py | 59 + pywii/pywii-tools/getappldr.py | 24 + pywii/pywii-tools/inject.py | 68 + pywii/pywii-tools/injectdol.py | 31 + pywii/pywii-tools/partsetios.py | 28 + pywii/pywii-tools/pywii | 1 + pywii/pywii-tools/rsapatch.py | 20 + pywii/pywii-tools/saveinfo.py | 10 + pywii/pywii-tools/tikfix.py | 17 + pywii/pywii-tools/tikinfo.py | 28 + pywii/pywii-tools/tmdfix.py | 18 + pywii/pywii-tools/tmdinfo.py | 28 + pywii/pywii-tools/tmdupdatecr.py | 29 + pywii/pywii-tools/tmdvers.py | 23 + pywii/pywii-tools/wadinfo.py | 16 + pywii/pywii-tools/wadpack-boot2.py | 34 + pywii/pywii-tools/wadpack.py | 40 + pywii/pywii-tools/wadunpack.py | 44 + wiipax/.gitignore | 2 + wiipax/Makefile | 11 + wiipax/client/.gitignore | 4 + wiipax/client/LzFind.c | 751 ++++++ wiipax/client/LzFind.h | 107 + wiipax/client/LzHash.h | 54 + wiipax/client/LzmaDec.c | 1007 ++++++++ wiipax/client/LzmaDec.h | 223 ++ wiipax/client/LzmaEnc.c | 2281 +++++++++++++++++ wiipax/client/LzmaEnc.h | 72 + wiipax/client/Makefile | 14 + wiipax/client/Types.h | 208 ++ wiipax/client/common.h | 43 + wiipax/client/elf_abi.h | 594 +++++ wiipax/client/lzma.c | 123 + wiipax/client/lzma.h | 20 + wiipax/client/main.c | 517 ++++ wiipax/client/stub_dkf.c | 1 + wiipax/client/stub_dkf_debug.c | 1 + wiipax/client/stub_dkfc.c | 1 + wiipax/client/stub_dkfc_debug.c | 1 + wiipax/client/stub_mini.c | 1 + wiipax/client/stub_mini_debug.c | 1 + wiipax/stub/.gitignore | 3 + wiipax/stub/LzmaDec.c | 1006 ++++++++ wiipax/stub/LzmaDec.h | 223 ++ wiipax/stub/Makefile | 66 + wiipax/stub/Types.h | 208 ++ wiipax/stub/channel.ld | 64 + wiipax/stub/common.h | 107 + wiipax/stub/crt0.s | 330 +++ wiipax/stub/devkitfail.ld | 59 + wiipax/stub/elf.c | 113 + wiipax/stub/elf.h | 7 + wiipax/stub/elf_abi.h | 594 +++++ wiipax/stub/exception.c | 52 + wiipax/stub/exception_asm.s | 21 + wiipax/stub/gecko.c | 185 ++ wiipax/stub/main.c | 109 + wiipax/stub/plunge.S | 13 + wiipax/stub/realmode.S | 101 + wiipax/stub/realmode.ld | 64 + wiipax/stub/string.c | 94 + wiipax/stub/string.h | 15 + wiipax/stub/sync.c | 40 + wiipax/stub/time.c | 27 + wiipax/stub/vsprintf.c | 291 +++ wiipax/stub/vsprintf.h | 9 + 296 files changed, 39925 insertions(+) create mode 100644 .gitignore create mode 100644 .kateconfig create mode 100644 COPYING create mode 100644 README.md create mode 100644 broadway.mk create mode 100644 channel/Makefile create mode 100644 channel/README create mode 100644 channel/banner/.gitignore create mode 100644 channel/banner/Makefile create mode 100644 channel/banner/Makefile.section create mode 100644 channel/banner/banner/abubble1.png create mode 100644 channel/banner/banner/abubble2.png create mode 100644 channel/banner/banner/abubble3.png create mode 100644 channel/banner/banner/abubble4.png create mode 100644 channel/banner/banner/abubble5.png create mode 100644 channel/banner/banner/abubble6.png create mode 100644 channel/banner/banner/banner_fade.png create mode 100644 channel/banner/banner/banner_shape2.png create mode 100644 channel/banner/banner/banner_title.png create mode 100644 channel/banner/banner/banner_wave1a.png create mode 100644 channel/banner/banner/banner_wave1b.png create mode 100644 channel/banner/banner/banner_wavea.png create mode 100644 channel/banner/banner/banner_waveb.png create mode 100644 channel/banner/banner/bbubble1.png create mode 100644 channel/banner/banner/cbubble1.png create mode 100644 channel/banner/banner/cbubble2.png create mode 100644 channel/banner/banner/mkbanner.py create mode 100644 channel/banner/banner/textures.txt create mode 100644 channel/banner/banner/white.png create mode 100644 channel/banner/icon/icon_fade.png create mode 100644 channel/banner/icon/icon_shape2.png create mode 100644 channel/banner/icon/icon_title.png create mode 100644 channel/banner/icon/icon_wave1a.png create mode 100644 channel/banner/icon/icon_wave1b.png create mode 100644 channel/banner/icon/icon_wavea.png create mode 100644 channel/banner/icon/icon_waveb.png create mode 100644 channel/banner/icon/mkicon.py create mode 100644 channel/banner/icon/textures.txt create mode 100644 channel/banner/icon/white.png create mode 100644 channel/banner/names.txt create mode 100644 channel/banner/sound/wiibrew-banner-intro-part.wav create mode 100644 channel/banner/sound/wiibrew-banner-loop-part.wav create mode 100644 channel/banner/tools/Makefile create mode 100644 channel/banner/tools/addimd5.py create mode 100644 channel/banner/tools/join-imet.py create mode 100644 channel/banner/tools/lz77.c create mode 100644 channel/banner/tools/mkbns.c create mode 100644 channel/banner/tools/png2tpl.c create mode 100644 channel/channelapp/.gitignore create mode 100644 channel/channelapp/Makefile create mode 100644 channel/channelapp/banner/.gitignore create mode 100644 channel/channelapp/banner/Makefile create mode 100644 channel/channelapp/banner/banner.ppm create mode 100644 channel/channelapp/banner/icon.ppm create mode 100644 channel/channelapp/banner/title create mode 100644 channel/channelapp/banner/twintig.c create mode 100644 channel/channelapp/config.h create mode 100644 channel/channelapp/data/about.png create mode 100644 channel/channelapp/data/apps_grid.png create mode 100644 channel/channelapp/data/apps_grid_hover.png create mode 100644 channel/channelapp/data/apps_list.png create mode 100644 channel/channelapp/data/apps_list_hover.png create mode 100644 channel/channelapp/data/apps_next.png create mode 100644 channel/channelapp/data/apps_next_hover.png create mode 100644 channel/channelapp/data/apps_previous.png create mode 100644 channel/channelapp/data/apps_previous_hover.png create mode 100644 channel/channelapp/data/background.png create mode 100644 channel/channelapp/data/background_wide.png create mode 100644 channel/channelapp/data/bubble1.png create mode 100644 channel/channelapp/data/bubble2.png create mode 100644 channel/channelapp/data/bubble3.png create mode 100644 channel/channelapp/data/button.png create mode 100644 channel/channelapp/data/button_focus.png create mode 100644 channel/channelapp/data/button_small.png create mode 100644 channel/channelapp/data/button_small_focus.png create mode 100644 channel/channelapp/data/button_tiny.png create mode 100644 channel/channelapp/data/button_tiny_focus.png create mode 100644 channel/channelapp/data/content_arrow_down.png create mode 100644 channel/channelapp/data/content_arrow_up.png create mode 100644 channel/channelapp/data/cursor_drag.png create mode 100644 channel/channelapp/data/cursor_drag_shade.png create mode 100644 channel/channelapp/data/cursor_pic.png create mode 100644 channel/channelapp/data/cursor_shade.png create mode 100644 channel/channelapp/data/dialog_background.png create mode 100644 channel/channelapp/data/dlg_confirm.png create mode 100644 channel/channelapp/data/dlg_error.png create mode 100644 channel/channelapp/data/dlg_info.png create mode 100644 channel/channelapp/data/dlg_warning.png create mode 100644 channel/channelapp/data/droid.ttf create mode 100644 channel/channelapp/data/droidbold.ttf create mode 100644 channel/channelapp/data/icon_network.png create mode 100644 channel/channelapp/data/icon_network_active.png create mode 100644 channel/channelapp/data/icon_usbgecko.png create mode 100644 channel/channelapp/data/icon_usbgecko_active.png create mode 100644 channel/channelapp/data/logo.png create mode 100644 channel/channelapp/data/progress.png create mode 100644 channel/channelapp/data/throbber.png create mode 100644 channel/channelapp/gdb.txt create mode 100644 channel/channelapp/i18n/dutch.po create mode 100644 channel/channelapp/i18n/french.po create mode 100644 channel/channelapp/i18n/german.po create mode 100644 channel/channelapp/i18n/italian.po create mode 100644 channel/channelapp/i18n/japanese.po create mode 100644 channel/channelapp/i18n/spanish.po create mode 100644 channel/channelapp/i18n/template.pot create mode 100644 channel/channelapp/newrvl.ld create mode 100644 channel/channelapp/newrvl.spec create mode 100644 channel/channelapp/source/appentry.c create mode 100644 channel/channelapp/source/appentry.h create mode 100644 channel/channelapp/source/asm.h create mode 100644 channel/channelapp/source/blob.c create mode 100644 channel/channelapp/source/blob.h create mode 100644 channel/channelapp/source/browser.c create mode 100644 channel/channelapp/source/browser.h create mode 100644 channel/channelapp/source/bubbles.c create mode 100644 channel/channelapp/source/bubbles.h create mode 100644 channel/channelapp/source/controls.c create mode 100644 channel/channelapp/source/controls.h create mode 100644 channel/channelapp/source/cursors.c create mode 100644 channel/channelapp/source/cursors.h create mode 100644 channel/channelapp/source/debug.c create mode 100644 channel/channelapp/source/dialogs.c create mode 100644 channel/channelapp/source/dialogs.h create mode 100644 channel/channelapp/source/dvd.c create mode 100644 channel/channelapp/source/dvd.h create mode 100644 channel/channelapp/source/ecdsa.c create mode 100644 channel/channelapp/source/ecdsa.h create mode 100644 channel/channelapp/source/elf_abi.h create mode 100644 channel/channelapp/source/font.c create mode 100644 channel/channelapp/source/font.h create mode 100644 channel/channelapp/source/gfx.c create mode 100644 channel/channelapp/source/gfx.h create mode 100644 channel/channelapp/source/ggets.c create mode 100644 channel/channelapp/source/ggets.h create mode 100644 channel/channelapp/source/http.c create mode 100644 channel/channelapp/source/http.h create mode 100644 channel/channelapp/source/i18n.c create mode 100644 channel/channelapp/source/i18n.h create mode 100644 channel/channelapp/source/isfs.c create mode 100644 channel/channelapp/source/isfs.h create mode 100644 channel/channelapp/source/loader.c create mode 100644 channel/channelapp/source/loader.h create mode 100644 channel/channelapp/source/loader_reloc.c create mode 100644 channel/channelapp/source/loader_reloc.h create mode 100644 channel/channelapp/source/m_main.c create mode 100644 channel/channelapp/source/m_main.h create mode 100644 channel/channelapp/source/main.c create mode 100644 channel/channelapp/source/manage.c create mode 100644 channel/channelapp/source/manage.h create mode 100644 channel/channelapp/source/panic.c create mode 100644 channel/channelapp/source/panic.h create mode 100644 channel/channelapp/source/playtime.c create mode 100644 channel/channelapp/source/playtime.h create mode 100644 channel/channelapp/source/sha1.c create mode 100644 channel/channelapp/source/sha1.h create mode 100644 channel/channelapp/source/tcp.c create mode 100644 channel/channelapp/source/tcp.h create mode 100644 channel/channelapp/source/tex.c create mode 100644 channel/channelapp/source/tex.h create mode 100644 channel/channelapp/source/theme.c create mode 100644 channel/channelapp/source/theme.h create mode 100644 channel/channelapp/source/title.c create mode 100644 channel/channelapp/source/title.h create mode 100644 channel/channelapp/source/unzip.c create mode 100644 channel/channelapp/source/unzip.h create mode 100644 channel/channelapp/source/unzip_io.c create mode 100644 channel/channelapp/source/unzip_io.h create mode 100644 channel/channelapp/source/update.c create mode 100644 channel/channelapp/source/update.h create mode 100644 channel/channelapp/source/view.c create mode 100644 channel/channelapp/source/view.h create mode 100644 channel/channelapp/source/widgets.c create mode 100644 channel/channelapp/source/widgets.h create mode 100644 channel/channelapp/source/xml.c create mode 100644 channel/channelapp/source/xml.h create mode 100644 channel/channelapp/stub/asm.h create mode 100644 channel/channelapp/stub/cache.h create mode 100644 channel/channelapp/stub/cache_asm.S create mode 100644 channel/channelapp/stub/crt0.S create mode 100644 channel/channelapp/stub/ios.c create mode 100644 channel/channelapp/stub/ios.h create mode 100644 channel/channelapp/stub/processor.h create mode 100644 channel/channelapp/stub/stub.c create mode 100644 channel/channelapp/stub/stub_debug.c create mode 100644 channel/channelapp/stub/stub_debug.h create mode 100644 channel/channelapp/stub/system.c create mode 100644 channel/channelapp/stub/system.h create mode 100644 channel/channelapp/stub/system_asm.S create mode 100644 channel/channelapp/stub/usb.c create mode 100644 channel/channelapp/stub/usb.h create mode 100644 channel/title/.gitignore create mode 100644 channel/title/Makefile create mode 100644 channel/title/cetk.template create mode 100644 channel/title/dpki/certs create mode 120000 channel/title/dpki/footer create mode 100644 channel/title/footer create mode 120000 channel/title/pywii create mode 100644 channel/title/retail/certs create mode 120000 channel/title/retail/footer create mode 100644 channel/title/tmd.template create mode 100644 channel/wiiload/.gitignore create mode 100644 channel/wiiload/Makefile create mode 100644 channel/wiiload/gecko.c create mode 100644 channel/wiiload/gecko.h create mode 100644 channel/wiiload/main.c create mode 100644 channel/wiiload/win32/include/zconf.h create mode 100644 channel/wiiload/win32/include/zlib.h create mode 100644 channel/wiiload/win32/lib/libz.a create mode 100644 common.mk create mode 100644 pywii/Alameda/Alameda.py create mode 100644 pywii/Common/Struct.py create mode 100644 pywii/Common/pywii/__init__.py create mode 100644 pywii/Common/pywii/ec.py create mode 100644 pywii/Common/pywii/wii.py create mode 100644 pywii/README create mode 100644 pywii/breakfast.py create mode 100644 pywii/ecmodule/_ecmodule.c create mode 100644 pywii/ecmodule/setup.py create mode 100755 pywii/pywii-tools/addhash.py create mode 100755 pywii/pywii-tools/arclist.py create mode 100755 pywii/pywii-tools/arcpack.py create mode 100755 pywii/pywii-tools/certinfo.py create mode 100755 pywii/pywii-tools/discinfo.py create mode 100755 pywii/pywii-tools/dpkisign.py create mode 100755 pywii/pywii-tools/ecchecksig.py create mode 100755 pywii/pywii-tools/ecgenpriv.py create mode 100755 pywii/pywii-tools/ecpriv2pub.py create mode 100755 pywii/pywii-tools/ecsign.py create mode 100755 pywii/pywii-tools/extract.py create mode 100755 pywii/pywii-tools/extractdol.py create mode 100644 pywii/pywii-tools/extractfiles.py create mode 100755 pywii/pywii-tools/getappldr.py create mode 100755 pywii/pywii-tools/inject.py create mode 100755 pywii/pywii-tools/injectdol.py create mode 100755 pywii/pywii-tools/partsetios.py create mode 120000 pywii/pywii-tools/pywii create mode 100755 pywii/pywii-tools/rsapatch.py create mode 100755 pywii/pywii-tools/saveinfo.py create mode 100755 pywii/pywii-tools/tikfix.py create mode 100755 pywii/pywii-tools/tikinfo.py create mode 100755 pywii/pywii-tools/tmdfix.py create mode 100755 pywii/pywii-tools/tmdinfo.py create mode 100755 pywii/pywii-tools/tmdupdatecr.py create mode 100755 pywii/pywii-tools/tmdvers.py create mode 100755 pywii/pywii-tools/wadinfo.py create mode 100755 pywii/pywii-tools/wadpack-boot2.py create mode 100755 pywii/pywii-tools/wadpack.py create mode 100755 pywii/pywii-tools/wadunpack.py create mode 100644 wiipax/.gitignore create mode 100644 wiipax/Makefile create mode 100644 wiipax/client/.gitignore create mode 100644 wiipax/client/LzFind.c create mode 100644 wiipax/client/LzFind.h create mode 100644 wiipax/client/LzHash.h create mode 100644 wiipax/client/LzmaDec.c create mode 100644 wiipax/client/LzmaDec.h create mode 100644 wiipax/client/LzmaEnc.c create mode 100644 wiipax/client/LzmaEnc.h create mode 100644 wiipax/client/Makefile create mode 100644 wiipax/client/Types.h create mode 100644 wiipax/client/common.h create mode 100644 wiipax/client/elf_abi.h create mode 100644 wiipax/client/lzma.c create mode 100644 wiipax/client/lzma.h create mode 100644 wiipax/client/main.c create mode 120000 wiipax/client/stub_dkf.c create mode 120000 wiipax/client/stub_dkf_debug.c create mode 120000 wiipax/client/stub_dkfc.c create mode 120000 wiipax/client/stub_dkfc_debug.c create mode 120000 wiipax/client/stub_mini.c create mode 120000 wiipax/client/stub_mini_debug.c create mode 100644 wiipax/stub/.gitignore create mode 100644 wiipax/stub/LzmaDec.c create mode 100644 wiipax/stub/LzmaDec.h create mode 100644 wiipax/stub/Makefile create mode 100644 wiipax/stub/Types.h create mode 100644 wiipax/stub/channel.ld create mode 100644 wiipax/stub/common.h create mode 100644 wiipax/stub/crt0.s create mode 100644 wiipax/stub/devkitfail.ld create mode 100644 wiipax/stub/elf.c create mode 100644 wiipax/stub/elf.h create mode 100644 wiipax/stub/elf_abi.h create mode 100644 wiipax/stub/exception.c create mode 100644 wiipax/stub/exception_asm.s create mode 100644 wiipax/stub/gecko.c create mode 100644 wiipax/stub/main.c create mode 100644 wiipax/stub/plunge.S create mode 100644 wiipax/stub/realmode.S create mode 100644 wiipax/stub/realmode.ld create mode 100644 wiipax/stub/string.c create mode 100644 wiipax/stub/string.h create mode 100644 wiipax/stub/sync.c create mode 100644 wiipax/stub/time.c create mode 100644 wiipax/stub/vsprintf.c create mode 100644 wiipax/stub/vsprintf.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..460a56d --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.*.swp +*.o +*.d +*~ +.*.swp +*.dSYM +*.pyc +.DS_Store + diff --git a/.kateconfig b/.kateconfig new file mode 100644 index 0000000..74ff610 --- /dev/null +++ b/.kateconfig @@ -0,0 +1 @@ +kate: space-indent off; tab-width 4; indent-width 4; replace-tabs off; eol unix; diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, 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 show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9e42a8f --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# The Homebrew Channel + +This repository contains the public release of the source code for +The Homebrew Channel. + +Included portions: + +* The Homebrew Channel +* Reload stub +* Banner +* PyWii (includes Alameda for banner creation) +* WiiPAX (LZMA executable packer) + +Not included: + +* Installer + +Note that the code in this repository differs from the source code used to build +the official version of The Homebrew Channel, which includes additional +protection features (i.e. we had to add reverse-DRM to stop scammers from +selling it). + +This code is released with no warranty, and hasn't even been tested on a real +Wii, only under Dolphin (yes, this release runs under Dolphin). + +## Build instructions + +You need DevkitPPC and libogc installed, and the DEVKITPRO/DEVKITPPC environment +variables correctly set. Use the latest available versions. Make sure you have +libogc/libfat, and also install the following 3rd party libraries: + +* zlib +* libpng +* mxml +* freetype + +You can download binaries of those +[here](https://sourceforge.net/projects/devkitpro/files/portlibs/ppc/). + +Additionally, you'll need the following packages on your host machine: + +* pycryptodome (for PyWii) +* libpng headers (libpng-dev) +* gettext + +The build process has only been tested on Linux. You're on your own if you +want to try building this on OSX or Windows. + +First run 'make' in wiipax, then 'make' in channel. You'll find a .wad file +that you can install or directly run with Dolphin under +channel/title/channel_retail.wad. You'll also find executable binaries under +channel/channelapp, but be advised that the NAND save file / theme storage +features won't work properly if HBC isn't launched as a channel with its +correct title identity/permissions. + +## License + +Unless otherwise noted in an individual file header, all source code in this +repository is released under the terms of the GNU General Public License, +version 2 or later. The full text of the license can be found in the COPYING +file. diff --git a/broadway.mk b/broadway.mk new file mode 100644 index 0000000..e2e3a8c --- /dev/null +++ b/broadway.mk @@ -0,0 +1,12 @@ +ifeq ($(strip $(DEVKITPPC)),) +$(error "Set DEVKITPPC in your environment.") +endif + +PREFIX = $(DEVKITPPC)/bin/powerpc-eabi- + +CFLAGS = -mcpu=750 -mpaired -m32 -mhard-float -mno-eabi -mno-sdata +CFLAGS += -ffreestanding -ffunction-sections -fdata-sections +CFLAGS += -Wall -Wextra -O2 +ASFLAGS = +LDFLAGS = -mcpu=750 -m32 -n -nostartfiles -nodefaultlibs -Wl,-gc-sections + diff --git a/channel/Makefile b/channel/Makefile new file mode 100644 index 0000000..f813e41 --- /dev/null +++ b/channel/Makefile @@ -0,0 +1,14 @@ +.PHONY: clean installer + +all: + @$(MAKE) -C channelapp channel + @$(MAKE) -C banner + @$(MAKE) -C title + +clean: + @$(MAKE) -C channelapp clean + @$(MAKE) -C banner clean + @$(MAKE) -C title clean + @$(MAKE) -C wiiload clean + @$(MAKE) -C wiiload clean WIN32=1 + diff --git a/channel/README b/channel/README new file mode 100644 index 0000000..7243e6b --- /dev/null +++ b/channel/README @@ -0,0 +1,69 @@ +The Homebrew Channel v1.1.2 +Copyright (C) 2007-2012 Team Twiizers, all rights reserved. +All rights reserved; do not redistribute + + + Update instructions: + + +If you have previously installed The Homebrew Channel, you can update it. If +this is the first time you are installing it, see README.txt for installation +instructions. The easiest way to update is using the built-in online update +functionality. Simply configure the WiFi network settings for your Wii for +proper Internet connectivity, and boot up the channel. If the connection is +established, you'll see an opaque white (not semitransparent) world icon +in the lower right corner, and an update prompt will automatically appear. +Accept it to begin downloading the update. If you cannot or do not want to +connect your Wii to the Internet, simply run the boot.elf file using any +homebrew booting method. For example, you can upload it using wiiload or +you can make a directory inside /apps (for example, /apps/Update) and copy +boot.elf there. Then, simply run it from the previous version of The Homebrew +Channel. + + + Adding and customizing apps: + + +All user applications should be stored in their own subdirectory inside of +apps/; some examples have been provided. Each subdirectory should have at +least three files; ScummVM will be used as an example. + +* apps/ScummVM/boot.elf main executable to be loaded +* apps/ScummVM/icon.png icon to be displayed in The Homebrew Channel + Menu; should be 128 x 48 pixels +* apps/ScummVM/meta.xml XML description of the channel. This format + might change for future releases of The + Homebrew channel, but we will try to remain + backwards-compatible. See + http://wiibrew.org/wiki/Homebrew_Channel + for information on what data should be included + in this file. + + + Staying current with new releases: + + +Relax, you will not need to do anything to keep up with new releases of the +Homebrew Channel. When a new version is available, a message will appear +giving you the option to download and install the new version, if your Wii +is configured to connect to the Internet. + + + Uninstallation: + + +You may uninstall the channel as you would any other channel, by using the Data +Management screen of the Wii Menu. Erasing every last trace of The Homebrew +Channel is not practical on a complex system such as the Wii. If a need +arises, we will develop a more thorough uninstaller application. + + + Reminder about elf files: + + +Old ELF files were incorrect and will not work. Please use DOL files or +recompile with the latest version of devkitPPC. You can use the following +command to convert a broken ELF file to a DOL file: + + powerpc-gekko-objcopy -O binary boot.elf boot.dol + diff --git a/channel/banner/.gitignore b/channel/banner/.gitignore new file mode 100644 index 0000000..a55550a --- /dev/null +++ b/channel/banner/.gitignore @@ -0,0 +1,6 @@ +build +channel.imet +tools/png2tpl +tools/mkbns +tools/lz77 +*.raw diff --git a/channel/banner/Makefile b/channel/banner/Makefile new file mode 100644 index 0000000..cbe4bc5 --- /dev/null +++ b/channel/banner/Makefile @@ -0,0 +1,64 @@ +ifeq ($(WIN32), 1) +export PREFIX = i586-mingw32msvc- +export EXE := .exe +export LFLAGS = -lws2_32 +else +export PREFIX = +export EXE = +export LFLAGS = +endif + +export PYWII := $(CURDIR)/../../pywii/pywii-tools +export ALAMEDA := $(CURDIR)/../../pywii/Alameda + +export PNG2TPL := $(CURDIR)/tools/png2tpl$(EXE) +export MKBNS := $(CURDIR)/tools/mkbns$(EXE) +export LZ77 := $(CURDIR)/tools/lz77$(EXE) +export ADDIMD5 := python $(CURDIR)/tools/addimd5.py +export ARCPACK := python $(PYWII)/arcpack.py +export SOX := sox + +all: channel.imet + +channel.imet: build/data.arc names.txt tools/join-imet.py + python tools/join-imet.py $@ build/data.arc build/icon.arc build/banner.arc build/sound.bns names.txt + +build/data.arc : build/data/meta/icon.bin build/data/meta/banner.bin build/data/meta/sound.bin + $(ARCPACK) $@ build/data + +build/data/meta/icon.bin : icon/* $(PNG2TPL) $(LZ77) + $(MAKE) -C icon -f ../Makefile.section + +build/data/meta/banner.bin : banner/* $(PNG2TPL) $(LZ77) + $(MAKE) -C banner -f ../Makefile.section + +build/data/meta/sound.bin : build/sound.bns + @[ ! -d build/data/meta ] && mkdir -p build/data/meta || true + $(ADDIMD5) $< $@ + +build/sound.bns : build/wiibrew-banner-intro-part.raw build/wiibrew-banner-loop-part.raw $(MKBNS) + @[ ! -d build ] && mkdir -p build || true + $(MKBNS) build/wiibrew-banner-intro-part.raw $@ 1 build/wiibrew-banner-loop-part.raw + +build/%.raw : sound/%.wav + @[ ! -d build ] && mkdir -p build || true + $(SOX) $< -r 32000 -c 2 -e signed-integer -b 16 -t raw $@ + +testi : channel.imet + python $(ALAMEDA)/Alameda.py channel.imet icon +testb : channel.imet + python $(ALAMEDA)/Alameda.py channel.imet banner + +$(PNG2TPL): tools/*.c + $(MAKE) -C tools png2tpl$(EXE) + +$(MKBNS): tools/*.c + $(MAKE) -C tools mkbns$(EXE) + +$(LZ77): tools/*.c + $(MAKE) -C tools lz77$(EXE) + +clean: + rm -f channel.imet + rm -rf build + $(MAKE) -C tools clean diff --git a/channel/banner/Makefile.section b/channel/banner/Makefile.section new file mode 100644 index 0000000..5c586c1 --- /dev/null +++ b/channel/banner/Makefile.section @@ -0,0 +1,30 @@ + +TYPE = $(notdir $(CURDIR)) + +PNGS = $(wildcard *.png) +TPLS = $(patsubst %.png,../build/$(TYPE)/arc/timg/%.tpl,$(PNGS)) + +../build/data/meta/$(TYPE).bin : ../build/$(TYPE).lz77 + @[ ! -d ../build/data/meta ] && mkdir -p ../build/data/meta || true + $(ADDIMD5) $< $@ + +../build/$(TYPE).lz77 : ../build/$(TYPE).arc + $(LZ77) $< $@ + +ifeq ($(TYPE),banner) +ANIMS = ../build/$(TYPE)/arc/anim/$(TYPE)_Start.brlan ../build/$(TYPE)/arc/anim/$(TYPE)_Loop.brlan +else +ANIMS = ../build/$(TYPE)/arc/anim/$(TYPE).brlan +endif +../build/$(TYPE)/arc/blyt/$(TYPE).brlyt $(ANIMS) : mk$(TYPE).py + @[ ! -d ../build/$(TYPE)/arc/anim ] && mkdir -p ../build/$(TYPE)/arc/anim || true + @[ ! -d ../build/$(TYPE)/arc/blyt ] && mkdir -p ../build/$(TYPE)/arc/blyt || true + python mk$(TYPE).py ../build/$(TYPE)/arc/blyt/$(TYPE).brlyt $(ANIMS) + +../build/$(TYPE).arc : $(TPLS) ../build/$(TYPE)/arc/blyt/$(TYPE).brlyt $(ANIMS) + $(ARCPACK) ../build/$(TYPE).arc ../build/$(TYPE) + +../build/$(TYPE)/arc/timg/%.tpl : %.png + @[ ! -d ../build/$(TYPE)/arc/timg ] && mkdir -p ../build/$(TYPE)/arc/timg || true + $(PNG2TPL) $< $@ `grep $< textures.txt | cut -f 2-` + diff --git a/channel/banner/banner/abubble1.png b/channel/banner/banner/abubble1.png new file mode 100644 index 0000000000000000000000000000000000000000..3517adc68a0defdae8210e4df04e1efcdda20f07 GIT binary patch literal 981 zcmV;`11kK9P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L0309y0309z%@3QN00007bV*G`2iOG- z3MdFxBESIv00UJ?L_t(&-tCz^ZxcZfhMxfkmJQ6y)&*a1IP*4C=M&V5R^F2n(plC?re`fgaEWy7gN1 z&rARq1F{a>QJmfb+VxtsGfMz0;GTq&iiAK5Xw_@gGo7{OE(1WlRt0XuK`ktRrWJ8+Z#?mo=xh18ab-X^5R63SC(S5Z}J&;u*+hD@ea5WlcVnyMekJb!nCW=wu$FscA}j{M-qUGnBRwh5%~zia5)Ua?Jx{I8QX7OJwFwl z7}$~s;5;t&W3o+}@#}K0xDwMvz#qOe$={UM&rJZtd1YYYd0;c{`O8N;&cm(5 z3wbzA04D~~vzc`3TNb>2_IT<51~DYYgs3c~P1vd2PAVk^+5jZY^{%QxH8&T#LA|7O zot8$sQ({`FVYmCUqho^>fSztRM94uBrw&7S`{8q3&&V8rbj;cli#xj3Tb9)q5Rvlk z%lE<8{Z>@$x6`_IsW-87%*M5^NL8r|;t<#sk6y^=e*Ce&S9|~IMhs(1y)fq$*KbMe zj~chDK*Mk+`V+)yBcj^urch12T1dF-;n;a7dwx*Lnt4P=IU?>4Ra=b8#hj$FhIq#o ze(Yp0-Vsh*qB literal 0 HcmV?d00001 diff --git a/channel/banner/banner/abubble2.png b/channel/banner/banner/abubble2.png new file mode 100644 index 0000000000000000000000000000000000000000..75467656da9157b9aa5b2c81f63852a25e4e83b5 GIT binary patch literal 710 zcmV;%0y+JOP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L0309y0309z%@3QN00007bV*G`2iOG- z3MT;HVO0D800KryL_t(o!|j&AZW2)xhQBKVSP>~zfmUr3V@%vlU&NP?=vz$VJcgMr zj7uNDt!o>@taM>Q00|szM9{mA4;2dbXc5%2?0;c7}fk(i@5btQ90i3#a@p@$frsZUSXFx0j*CEgX zIzS&7xpq-6O~ACA00?EVE%2O6cfug1WxbioaK zZ#1Sm7}m0>+owt?y$%97soo}l*7^X*hwxQbN>$cT1D-Ef#g{0c)(mK zOl3Hbz%`Hnnp465Rk2b{t@ReL*X|E6Eoa|1iUCqU2H1%*2PWtO_orFUshhno<(iUR z7UtM>LXTp>FS+*v?D_y7Pre7$+(je;N~x}pNCh}fxz&2FRILXc)2*l(0H_4nT@Jn2 zoA;l_0e%{;UA&4~1IT#2&{`WxDeuO%v^EZpjuXJW1#U*tvMiH<2@!AB`r*-WS`M#8 zD9@8=M!?`u^AwF~IWduFc_6vKO?A;x9Y&HRh3G(*wt&0R+nIp0mxFXdSW%jgE}`X#fBK07*qoM6N<$f~##iw*UYD literal 0 HcmV?d00001 diff --git a/channel/banner/banner/abubble3.png b/channel/banner/banner/abubble3.png new file mode 100644 index 0000000000000000000000000000000000000000..9c65dd8eda59bd66ed785acbaa13063206a925b5 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85m>~K$!6?|Ll1{LG}_)Usv`Uth`(rCY8Q>+JHiDJY5_^EKVQ2 zywU53g8ag$<>|%{PmkQ^iOn@OkHk!V&i#Mw>!rwEgxGRpAjulx3l5!M2DUy zF%uJ|60;cNK8W6~$PzZ+*qi>hRcY5={_~sbAO8QyYZY(x)Y)j+BcQ(-JYD@<);T3K F0RXj~K$!6?|Ll1{LG}_)Usv`Uth`*BioD&KIzUr+JY5_^JdWR; zYUsyoDBvoe!r9@m+ab$E@I|f0{KKv1A3E=B_n5dMGC@^3OuwC&3-(FYeD}El>J=Okt zBwbeFZjfYY+EXW~7t%bvxBojadnG%pWUNg-u#rvVSc4PuvttcA+0OJZ2J>e0F!r)t zIo43cJ7ICX;T~7zy0t52cxe4|k4UjKx9jP7LeL$-D$|n3BBRT^Rni z_n+Ah4nJ$S8m?<5~XM^MHcvC7!;n>^E3>xkcso-A?xh3cdDpaSZV|{`QJ3 zf0Ka#+k@{M1_D24rD#t6|6knlV3Y8I7MBZiW@{F-niYOA%XoKk>jm*2;xol8T-$`1 zT4op|JGk#PJ;3SZGW)u+)-HJ_p8$;>Ve=K8u6W-_TIvT3J=jtY_4E7?8zZaw5 z?%iPVqe=KO%hIRYwOt#MA3k~7Wid_dgv`JBK1@RF3R4>{Fmk9KC}*hQtgvLr=bRza zu$;w4rXh|gihaT42FAsyzdIZmIs&7aZcUB5!}{uC#1``^v$gAsYb%7_7WrvT^qSNA z);wf)=NH}()wHC&yw?_o@ChayOYwVJ|964ini)14W{2XsfZk^CboFyt=akR{00c&b AJOBUy literal 0 HcmV?d00001 diff --git a/channel/banner/banner/abubble6.png b/channel/banner/banner/abubble6.png new file mode 100644 index 0000000000000000000000000000000000000000..0d48b204a9b8ee593bfdcda20dbf1f1c60154064 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf67>k44ofy`glX(f`FeQ1ryDAA&a*Og&5JVOB>J5IQQqjc&eK6OOC)Pd?G1}a;APrc{x`-vaQ~|Z)w!MJsWaV(r!ux z%=hU@Un}rr^ZLW<*CtEMTouYt-&y|1v|#S*Ic&?Ad)Rg|Z(>`?Jc(`Mr6a8?8rHOM pYqCV%_P6_B!85b9;>h+h;#Y&^M1Jv9zXiI3!PC{xWt~$(69A#eSQ!8S literal 0 HcmV?d00001 diff --git a/channel/banner/banner/banner_fade.png b/channel/banner/banner/banner_fade.png new file mode 100644 index 0000000000000000000000000000000000000000..87c5510a42c898f0f9feb03d29dca19568000a04 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^91IMM3><7gR-d*xNPwl-$uool2x>S|I)Hr60*}aI zp!(||%;=;sy8hT|5}cn_Ql40p%1~Zju9umYU7Va)kgAtols@~NjTBH(uBVG* zNJit^>l=9+40sqEncf_3^O+RuJo{9K+NPsR&z`KBo|oLCTUGso8>o5;!`ofe-3NY} zr3zXInRJL)HuFrBlyZ5-sJcxca)slP6aEX1h)F6LgQe!Xw3+9(9hL#=1AzwC2aNMR VbLeF3TiOWXd%F6$taD0e0sw|!Ny7jD literal 0 HcmV?d00001 diff --git a/channel/banner/banner/banner_shape2.png b/channel/banner/banner/banner_shape2.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffc2b833de79eb4c7f31ed1ea437f5345fb2204 GIT binary patch literal 1837 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 BO(OsR literal 0 HcmV?d00001 diff --git a/channel/banner/banner/banner_wave1b.png b/channel/banner/banner/banner_wave1b.png new file mode 100644 index 0000000000000000000000000000000000000000..94f2490d655930d2a1264b11f73c552692b54c91 GIT binary patch literal 1482 zcmV;*1vUDKP)Px#0%A)?L;(MXkIcUS000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOG-3luix za?WA^00mA-L_t(|+U=d^cIr43Mz`b!1hVe?zvG?Eq+q~B^TTpWFtNd%^RY}ZS%770 z>oh6KFf%C}92{IU3M!i+At5FqAwe{)eD)aLq#@QUcNREsEfO*)v{MF(h?rPlF*+I! z1orH`VWdIUDmBTu)p&S#xHzqGa7)HwA`(;#u7Cr6<@JSsNTpc>4}C$w8`NgWQ4tdf zDtgw2eGLtnBK`^>1P}K*5B>;HxUSS%6cMppzz?J0fY<2gy>XEy5Tl1yiH#W>3JIyb zH+OYGg`z?Om;X;XfkjSkH`y>sUx_4ML8D{zu~s6dwM-pulE6 zvPi|V$!E{zp-%{T7q{*C@Zb{QSFm76Y!WdZIX5sKC`={$vHnZ`dg}64>!^nPUwn$Y z_8fR{*x(abKeQZI=PNdMEJvCxyT)>-W;7hX?K`kE3J;C8bpY#=#csq~K zrov~#rZX~|(U5=cf&I--h&U2Tz;a1=P$)F&X>$GEXo1YzF31$2O-;b2v&E1*2w|(% zeYI1)n{BHTN6ymqmK=L{f+H{N2|dv-h`-f|3@Miln@%aqvO9--b#e=QUVr_jgd-<$ zHUtmzms?C9QxpD*vc@#OnO=@8JGT3dEavM@XCUCUMZh!R%$c*e8-jh)x?Ph6IVPVk4 ztskc+bWNZxp#(3xHkvzrwoPeyW;atj%Z3tVp;X>0v|Z~}Rjj#VR_`i! z=n9ItxE}o~BIGn+N?WsQy>3JuSb16A_(|dVxc{^BuW`6Y2sxJ5f#BgjGt9%q8+a{> zaom&(XTp&>U%<-)b3wDU$@A^8aHhK2_0`Hd|E=pFkN?!0N$~KXT#E{C)XL1qM~Mp; zE)%2{9d>LwmT@;3&{fmo@PO z!w~f~K(t6I3m%3-MgGryvN*7s5C}=70Bc^-Y}rgu=>ELQ!oC;I?XCsE!&n_52Zb|` zZBaM0(_#s~CA3YzcEak_^(!qhK^=q7f`@73*u3}k`!cs(KK|TOeJ5Q(t$=5jC=^We zW z9(Wl;!Gma7pzwf;X-K~OZ5qOS-xf^JL2hkJS8Q-B%PI2bjlxHgIGEjM} kzbf~dE0d|sQmaz_2beH;F+`_m7ytkO07*qoM6N<$f`&Y}!~g&Q literal 0 HcmV?d00001 diff --git a/channel/banner/banner/banner_wavea.png b/channel/banner/banner/banner_wavea.png new file mode 100644 index 0000000000000000000000000000000000000000..895bf974cdf2c3738f7c35d0c155c2de013c3715 GIT binary patch literal 2967 zcmdT`i9b~98$Yv8_9e|E5(cHQ6xn4f3|X?3r5T3oMY4=7GdEq8x@FV|g|6hbkJq+dt0=<_j%BMcX#iE^q-??j-4IM|IB7a4#wKNSB7|FM4V?c*QH8rQZf+ngDyyl>5P9iHxXy zXy66Qc^SUSCWYt`OhxX(S0PHnJp~f{HF@lF!1AY0S31U#)=WjwYG4sGPVo-8&fi*D zJ9zV>l+u2#OW=-&3kQHL%m<0(dEeR84B7@Q^MjZEe$!m6NQ-#nKIZa~q4Ij37_haj zu-){Q$4UadTJ3l((a`MzsS&hLmQvl%mHfbXuzv8DBV+p|vf82{FKeVBw)ZU0*oVgY z^n4|h@t+F@=t5Co8f`P@qcSQf%+!AD74Z&bnpQg^?D#cDp3X8#rs16T;HMSMH zAuBpY5|RdOlW%4~667f~O{u-i<$>obVt5#^m9TPLVjWzt`~KH<^B7~Nl>^FR6cI{e zKi4K}b|)4IaK&(mUlaZ7`?dprN zMYa_(;~Z)Qt-_?`4-&~v$`EQ;DWFFx<%;$uB39tbkhrNQ#%og{}L0%rsaeopgN=YvJ>D2H3BTA zp7rx5dIHq9q0olx!U3iSAukK3Q_brK0Rujcldn7L_wt9vNWDVF^xDNumaUI3 ziU=O0pfS4sWe_-DcPfoE=M&yTZH;X^FfK6%mR0+!^6c$SbWDX2vx6k+=kj^pVKekv z^waeqNQZ=^LP4u0?y30WV)+Cw{;4-LPgPk+p0~eEZi$j@wT1``(7GH>`0kPM&nbkT z!&(lA>dvY-=BHL`c$P2|LLiRWg$nt9oZ=`bl9%M*re zFjnx|_HYvd(ab(n*uJBgaWwwgJ})UCS-7UseS5n5W4-)F5;M)bR-bqp7I;SrIS2Z# zemB8~t*%Y=m4iW672bQ&aKwzB<__bbe98gb&t*U78l$5|9m$V8;Yx|F_w~~n-U^*LtM>-@S{h(cWuUEQ zBH6D-SH6BNRrbi3)vD+*ZkWw&AxTuKnBD$zwQ)8R^EvI3zUs5|jRo=7lrygC7%>3p zLC5UhW?@zuzHo{@(QZpMEUS{)%Zv>fqYpWOrv_o>U^K>WeExAc|9GdWS<_&mT*u3z zhu^t=9?bO>^)%s1(%pfmNABtB|W9acpTOl*q!xm8)Sxq2|_VYfpo6;w_{@!$q$ z@nyF9C?SHwvgJ927^7SoVm{lk_}dI8eH03%tbco-p4xPexF*pTNzJSJ_9R9zS~c2c zJ}zaMlbwJo^KE=(;#!MmE@wYq>AwT93{uSdRwgezuX4NWd#nsaky2)G7)yFo`kg-A zUBc3#lB6$a?`@Ozmvqm7H-jXhP-R^P{=$SFS~hGvMH=AUeWXKpZ_tlfc%~5_s6GC@WFIAYk}D2?aBwaEt2PB zVkj`=6{HYm7y-OQpUl0F~&0mHpgUTq#6~M`<>FCmL`oY97g5~r2OTrW za)bW>MO9^mXQRLc=8@qe{asbCs2uMklW>`yw04tSkkx~6_O;FZ+>5U? zhbq+)>p;HZ2VLK6FuJHixELf^)!URq&Eeq9x!0r2Tp^ZmnyU_-%9OzY?zYwm_wt9&DxP1ezmEv!vXj z51r9KyO@P4p)}TovOL$p!VBPLVmgCtQvF6JnH=;$`;ESA+`t>%NlX5>H?%|-mKFs7 zP24)IJPTnAz0|?+@sW33j++ttt1Nlq{>%(9=Uda=nqb>uvrc7kvObZ;jQXb`R;9q? zUgb#aLW4#YNW9ur$&B7S!Rib1o9^`O&p`21D>vdyQJ6IF_suQY2w6ff#x}aLE!2c6 zyP`(l)tIIlye?b;;O-D)hb;a=?rEZu619ni?p6XKElkEv_|u@c#a7;|qW$}x9?J-O^2 zg!9 GZ~p^5J4PV@ literal 0 HcmV?d00001 diff --git a/channel/banner/banner/banner_waveb.png b/channel/banner/banner/banner_waveb.png new file mode 100644 index 0000000000000000000000000000000000000000..66dc8ead8f0ece6578596d2309c4b55ed2a3820a GIT binary patch literal 2965 zcmbtWi$7G`7e6z@%wSxhn5HRRW^j8E@~Vj@uaii~TWGw-bG-6sFcWoer0yMM3Xz6{ zymG~eOn%~aJ)82&C5$_Hzoz^=ZWzBa{)FG}d_L#wefC~^t-aS;`@6ok9PF*-WpT0q z0LX(j7LEWQ1$6;)G!puz%SvxTjZ_R7bVfrD9qs=M^e;oRagTxIKS^E~SvxNQ8r&Oe z=@#o085kSy7aah^$HyO|Muf&t{AdBkBBO)y7Ej>-Ku!s?IOCj2J-GvLCRcBZPYH@L*2{P}4BsE9F{ttNIn{GL;pG?Kk~F#a(Ytoi51VJP!Oy0PES46Cq7~ zUzVg6Gu%AFoYL>Z7vAv1>b9B`6-}@yPU4s{6-bfg)YEHOpM;9G`>a0j6iw5Zx72Oz z-yS*7DUzKifUl~!N9$cB@t^5Rlxk@7blvYhot+xl&Y%6VdqhoZy?O&PZN+ci)Ds~D zCwWS3W!OGM-){GBOAqQn4o|XO`TGVsY{i1s!UZfz{wXL3hio7g^&KLqmq+F3h5hSh zv5(BY>xqQwwyUcpx>PAi@QRt)lM_k;7<7U$h1+i{?3d^DXpG)Vh>gr6CTexMEB3kU zE@q@6Zo3+h88KeHgeZU&9DecTio&1SRymSjXQ=mdz2zA~zRY7ve=Yw2JV4&zbFcUo zZeTE_20E&6AELq57}BNpt7m~!3jCC(|GQd~6rC~^3;?A^pR>`X=kzIZq*l!yH*BS` zd|kG)pLthYp`F0@+;X&0(aiR-n%5|`sJ+^ZASOHW2zMy0?^mnq63e;Ska{3*`gC^d zem8uz=|Feq@6UG!a}Qiaw27g`av~C0xJ^?t`>rd}KdAHKOM;r2D^6Atk(rzPW<0{M ze+%7$LcfZ$O`C=LA=;9=F-R!9(I$a@oZ^u0g__;}Nxjv0EzS#h`3d(B@2Pd0#Lx9M z%hCHsg1*HAT^c!>D{Vx<{=l1XW!|u54jorl3}FFzRp<(UsxK zm|~3WcGug>Jy5nJaTx9l_41t$$(pHJwD@*@v7ezlz9@Y8jPH{_Sarwc=1L57)Ho(x z+XPM&xsxCYC1XV)zY$&4KWVJokk~$}-P1)(A6aQozQYe~i9oqP5ic)MnEp(sUBR;R zOB1>HbzIT-wr0)o2usr1k0M*aKkBw(+$(Gu8v}$8db%$0B785zc_W(T@L~Joe1j1FHvcVf1wb}B`XNXF8% zuO8>q^#SZfC_B#vf7>U&eV|QV*fZaebbS{R|5zVy{670Su?&h+bN0i!)k-_Dp)a+0 zmay{1fR^9Oc&w;|FI*a#tH|0oEk|eei_Bnjq?>VJp}xAa91ErAy^kR#kGg zLbG`uf|NG?*6N%FFXOZr!x0=3nTp^d@^8c?iz@4;a3pY6v!`q00rz&Q!uVwLuJejw ztpT)@2jY4>%I{Vlp{Kz>XDMKHN@O(tJeQD_D^souBv4+vQf*rN0bL&CmcDNHEmHb_ zu43&Foe#KI1RmzPf1aE=hl`+IK1P8SHoy)GFKK}p^9TWvjCC*_FF6wg=pN)ZfBvJ} zDpjH8Sjfe#xSW?;$Y7*Y=Xn?6%DG&&9C|#Yf%tv6?98wW`#{7=yCfG@9gy zLNL&fUF$*GL{zTb_Rup+`Inio1up$))DNl#g!ESEQv(xS^2kv^@ zi+D?HE0eA)GS|>H{xSZYmXqAS-F!Nnn@DluV>VvNY$p(=UndEMbZaj?Do#vP zeUz0fsUjXs79s2AGB3p!KIrPLg|-gyx#d1cFUM^jO&>@d=}7W@j#4AZ=Tic;MF;#M zYePAIu$)Ni^RJHsf}x%{VRzX2$bFxfsEpoDSufJ#A_z*(RgDcsLdD1BF#&9n+WfiK zSFixVO_uv$Sa}vd9#C+hxUQt^YY7!iby;^~q{a3L{zA8psKwuUVITIOi&#z*=>1{HO7VpM_Hb1hWf!M9uTq&cMPWL! zH7Y#0CF6alC~|=CBU+oG3e_ikL%y#+oB`c3*y+CRz*McY7P>`~_Y~LO+`;=o)5UI4 zML}9tSEmC_ZTh<6WSj^ zM9I`!dX$h3YekICPuv`TkATk7DU&CvH~Q}Rm8(c~JAd&8%pi^VE^l*4D?R9)2P%ec zW`&kzEA}RPUrqaDv^=$$45=x;d{Vxdj7C5#;@dbqWw`(eKnOxO#crw%2n$JUNvmnU zw8PI%*dZbnT~M3Sg9`Zkt{Hg49-ugpi*>Uf9Qm5kWVE(VCdjx+_vFI20-%rac_ zc2wkQRa)D`)0_@Vs30q3ho(Tg#qE$Bh!-IxB@LP?he=4;|12U_c%A%m`8*Rm1W{-J Mw6wRVBKuzdFO}{_6aWAK literal 0 HcmV?d00001 diff --git a/channel/banner/banner/bbubble1.png b/channel/banner/banner/bbubble1.png new file mode 100644 index 0000000000000000000000000000000000000000..6761669cae8537bc4ff243c88f4a0f09578e247f GIT binary patch literal 1255 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L0309y0309z%@3QN00007bV*G`2iOG- z3M(7=vC

00d`AL_t(&-tC!7Yg`ARa94R)M92&K?Pvq)u1n?fncwiL1} zWLMgXe1mSf5L6!{h^Ybzt* z6lmA0<3qf3O0v=DB?J={4@$++)o zx%bO&OeSF{AUd=5^kyiZ0d^%yywI(A_Tc{T@{L=bgixb=_xUG$^VtV@uKwOU*Wu%L z-=vsb=hw#v4v@Qi<5vIKgZr^j%AH~Jm*j=I2EDpA%I{s-<@WWfRwj1)`c?L>>`pCY zNAipv0Esp`%Igda=M6ORy$u`#hrmeEMj}I; zWaPI8bbzidF}Xi{8zcen;X7|c&nNf z`RUOUzW;Gw_t#VP6;u=2n6aNP=!=TIpCn|IFA@Rx{mDS_FCuz2bS7lG`AGQ6Ac;vh zj?E<@YF} zJaSeiCUl?i0pHU0yR2Ti8ej0|0noch={K*)nLQH#o5E&5dNPR1Uv7dlKTHw8FpieE z3DW#1MF1mBBj5}Gn<9FgB7kumuX103+r7|>Bmv;1sIX@O(6`vcPZ5BxX}z2Q(6ebO zqzGV5Lup@b_c?PnuC(AEMF z&S83mob-%Vb^9KWQ*Yl?)He)CEijaxih7doeBTV3$&)~%-AU4WrKHC zjoi9Gk*_nGLd5Q$*Q@2&L~EK4{yVwna$l9 zNh&L$GKkRUqYF=HA~$3^Bb(N+1985Q!sk7?;WeQLK@3q_+>A^CF`ZHtSsZyy933x{YZ|Ph%Ze2qL;Ke{J*@a@-MPZl>(I$ R@kRgu002ovPDHLkV1oQTQds~1 literal 0 HcmV?d00001 diff --git a/channel/banner/banner/cbubble1.png b/channel/banner/banner/cbubble1.png new file mode 100644 index 0000000000000000000000000000000000000000..e01a6df27dd5f842e1428e6b95612fc83fd6541a GIT binary patch literal 1536 zcmV+b2LJhqP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L0309y0309z%@3QN00007bV*G`2iOG- z3M>glNi~xI00n?aL_t(|+U;B2cG^Y|{strr1Y^f;(z;Kj8c#d`T>u>bK7ck~UhZc* z0DHc+08#+!C=7Nl5`fWoat2@kpkH9rly(3T0IMhrHqRP>(Re}t&H)Tr(za;}AO^6E z!azJ50CJ39vTD1gJ%9&WKu|;GdjPH-NnA%G?xQexIynF=^($8QA5AfUSzT?Q8q9kD z-UB#$M$v2o;B%d*L59qC0Q`0$Td(6A?xHYAO&)3)Fy94m}Y37zxWnTD=%Nz%D404DXkuh5Q_$B0Nly(OR_5& zRsAlhh{0Wl0CaPHO62^M&-_(tK!#pF3xkR<*;ll(WYlp8KymFPS33+;0Q7SxUdlko z}5)?W+B>oCBcg;N}vC)x`PDHTFX?0BoKU zD*Xu&?E!qT_|7l9rfNS@4G^aUfI&!99UFs&NTRu)gA4$h>ZsjA2=@bc{;?w+hK;8Sa^k&*G4RFF`r$->Zfe z_8K`rl~4F8gqTCKEv~tAzl6_H0Jep6Sa3{zYp127aq%!z1W$>9xAJ+oA5-kt--3Ba#Vx7G>36`u@GiAdC7Ts9w2mY^+90sxLj z(mjLU_gGVA28>rth?LPnc1Gb@mVO8IM&~Ys5Z`RI!b=M)^3LE~Pqt z<=G}eg(EFf+T%DmDozbR6N&95QmoS@y3?&^Tns+id^WAY{M2Mz);0i3%g^o%HK=kT z%sBu=l-BIz#Qdy|S;!pTC(}V`SDD}pW>Y3l72aB>QQPQy0qX#8PJdTX41LR+a2$25 zTMSwGV#HZBNJI-EM8f585C0xZrz~}ya=0Zi3v1sDIqe59gR=%pvk44ofy`glX(f`FeQ1ryDAA&a*N1%o-g8NXTTPY4 z-!)v<$_V%2Exo~r 0: + if i.Triplets[-1][0] >= self.Start: + print "WTF at %s: %f >= %f"%(self.Picture.Name,i.Triplets[-1][0],self.Start) + raise RuntimeError("We Have A Problem") + + brlan.Anim[self.Picture.Name][Brlan.A_COORD][Brlan.C_X].Triplets.append((self.Start, self.X, 0)) + brlan.Anim[self.Picture.Name][Brlan.A_COORD][Brlan.C_Y].Triplets.append((self.Start, self.YSTART, 1)) + brlan.Anim[self.Picture.Name][Brlan.A_COORD][Brlan.C_X].Triplets.append((self.End, self.X, 0)) + brlan.Anim[self.Picture.Name][Brlan.A_COORD][Brlan.C_Y].Triplets.append((self.End, self.YEND, 1)) + + fadepoint = self.Start + self.Length * self.FADESTART + + brlan.Anim[self.Picture.Name][Brlan.A_PARM][Brlan.P_ALPHA].Triplets.append((self.Start, 0, 0)) + brlan.Anim[self.Picture.Name][Brlan.A_PARM][Brlan.P_ALPHA].Triplets.append((self.Start, 255, 0)) + brlan.Anim[self.Picture.Name][Brlan.A_PARM][Brlan.P_ALPHA].Triplets.append((fadepoint, 255, 0)) + brlan.Anim[self.Picture.Name][Brlan.A_PARM][Brlan.P_ALPHA].Triplets.append((self.End, 0, 0)) + def clone(self): + new = BubbleInstance(self.Start, self.Length, self.X, self.XP) + new.TypeID = self.TypeID + return new + +class BubbleCollection: + def __init__(self, brlyt, brlan, pane): + self.Brlyt = brlyt + self.Brlan = brlan + self.Pane = pane + self.BubbleTypes = [] + self.Instances = [] + def addtype(self, t, chance): + self.BubbleTypes.append((t, chance)) + def choosetype(self): + sumchances = sum([c for t,c in self.BubbleTypes]) + opt = random.uniform(0,sumchances) + for i,bt in enumerate(self.BubbleTypes): + t,c = bt + if c > opt: + return i + opt -= c + return i + def addinstance(self, i): + if i.TypeID is None: + i.TypeID = self.choosetype() + self.Instances.append(i) + def cleanInstances(self, time): + for tis in self.TypeInstances: + for i, ti in enumerate(tis): + pic, user = ti + if user is not None and user.End < time: + #print "Freeing instance: [%f-%f]"%(user.Start,user.End) + tis[i] = pic, None + def printinstances(self): + print "Type Instances:" + for tid, tis in enumerate(self.TypeInstances): + print " Type Instances for type %d (%s):"%(tid, self.BubbleTypes[tid][0].Name) + for i, ti in enumerate(tis): + pic, user = ti + if user is None: + print " %d: Picture %s, free"%(i,pic.Name) + else: + print " %d: Picture %s, user: %s [%f-%f]"%(i,pic.Name,repr(user),user.Start,user.End) + def render(self): + for t,c in self.BubbleTypes: + t.makemat(self.Brlyt) + self.TypeInstances = [] + for i in range(len(self.BubbleTypes)): + self.TypeInstances.append([]) + self.Instances.sort(key=lambda x: x.Start) + for n,i in enumerate(self.Instances): + #print "Processing instance %d of type %d (%f-%f)"%(n,i.TypeID,i.Start,i.End) + time = i.Start + self.cleanInstances(time) + tis = self.TypeInstances[i.TypeID] + for nti,ti in enumerate(tis): + pic, user = ti + if user is None: + tis[nti] = (pic,i) + i.Picture = pic + #print "Found space" + break + else: + #print "No space for type %d"%i.TypeID + pic = self.BubbleTypes[i.TypeID][0].makepic() + self.Pane.Add(pic) + tis.append((pic, i)) + i.Picture = pic + i.render(self.Brlan) + #self.printinstances() + +print "Fake Start",fakeStart +print "Loop Start",loopStart +print "Loop End",loopEnd + +col = BubbleCollection(brlyt, brlan, bubblepane) +col.addtype(BubbleType("abubble1", 48, 48),1) +col.addtype(BubbleType("abubble2", 32, 32),1) +col.addtype(BubbleType("abubble3", 16, 16),1) +col.addtype(BubbleType("abubble4", 24, 24),1) +col.addtype(BubbleType("abubble5", 32, 32),1) +col.addtype(BubbleType("abubble6", 16, 16),1) +col.addtype(BubbleType("bbubble1", 48, 48),1) +col.addtype(BubbleType("cbubble1", 64, 64),1) +col.addtype(BubbleType("cbubble2", 16, 16),1) + +bubbleBoom = 190 + +# bubble mania! +for i in range(100): + col.addinstance(BubbleInstance(bubbleBoom)) + +# now fill things +for i in range(280): + start = random.uniform(bubbleBoom, loopEnd) + col.addinstance(BubbleInstance(start)) + +# clear the ones that overrun the loop +for i in col.Instances: + if i.End > loopEnd: + col.Instances.remove(i) + +# and copy the loop start bubbles to the end +for i in col.Instances: + if i.Start < loopStart and i.End > loopStart: + new = i.clone() + new.Start -= loopStart + new.Start += loopEnd + new.End -= loopStart + new.End += loopEnd + col.Instances.append(new) + +col.render() + +brldata = brlyt.Pack() +open(sys.argv[1],"w").write(brldata) + +bradata = brlan.Pack(loopStart) +open(sys.argv[2],"w").write(bradata) + +bradata = brlan.Pack(loopStart, loopEnd) +open(sys.argv[3],"w").write(bradata) diff --git a/channel/banner/banner/textures.txt b/channel/banner/banner/textures.txt new file mode 100644 index 0000000..3608078 --- /dev/null +++ b/channel/banner/banner/textures.txt @@ -0,0 +1,20 @@ +#----------------------- +# texture x y +#----------------------- +abubble1.png 0 0 +abubble2.png 0 0 +abubble3.png 0 0 +abubble4.png 0 0 +abubble5.png 0 0 +abubble6.png 0 0 +bbubble1.png 0 0 +cbubble1.png 0 0 +cbubble2.png 0 0 +white.png 1 1 +banner_fade.png 1 0 +banner_title.png 0 0 +banner_wave1a.png 0 0 +banner_wave1b.png 0 0 +banner_wavea.png 1 0 +banner_waveb.png 1 0 +banner_shape2.png 0 0 diff --git a/channel/banner/banner/white.png b/channel/banner/banner/white.png new file mode 100644 index 0000000000000000000000000000000000000000..62269a8ba51b066727ca75d65f88a0d8aa0c60aa GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^96-zhA{eGEQ`7-cjKx9jP7LeL$-D$|n3BBRT^Rni z_n+Ah4nJa0`PlBg3pY5H=O_8Tl>91McjUcA-@3Q3l@MwB?`=jNv7 zl`uFLr6!i7rYMwWmSiZnd-?{1H}Z)C6$yB{IEHXsPyTbBfzgM@LXtswA|rd7(&H^a OIR;NxKbLh*2~7Znc`Kd( literal 0 HcmV?d00001 diff --git a/channel/banner/icon/icon_fade.png b/channel/banner/icon/icon_fade.png new file mode 100644 index 0000000000000000000000000000000000000000..c127a61da7b84fdf8389edbefd3cc93fc59dc2c4 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^96;Q_!3HGF-e}kXDVAa<&kznEsNqQI0P;BtJR*yM z>aT+^qm#z$3ZS55iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0w)o-U3d z5v|F8{{OdUwmZ-gUKVn2MU&%-hQR%Ke8zUHIsra2nXUzDxAiHvyIb(Ene%iuNNr8B zh%{7@v9wvUV52g-^XCMRo

cTyCN~JD3>qlG%2A{33S=Xgq_btDnm{r-UW|QR6@? literal 0 HcmV?d00001 diff --git a/channel/banner/icon/icon_shape2.png b/channel/banner/icon/icon_shape2.png new file mode 100644 index 0000000000000000000000000000000000000000..b42d0482ea3612d142a7f5fceb32528c84fca8d1 GIT binary patch literal 610 zcmV-o0-gPdP)>W3f}90-k_nnWq~@LXs5=;2em6 zt1?gjkM*n{93BE=OzTFH6##SKOc((nu)&J5R;)U{0gi+d<-6+%a3b+fu|n6l1O5Pi z#}xf{Mv@gr*!<414doeFihVBg)Oh~>sdy#6J|tNY0Kc$eTnJBqV5D`efPcWX@Zpe> zwhg3+BOnH5VyD0wTd0n@h%4VdC8jRq2wTK+#hGVW2Af+a#$Nkbg};^f`jBKrh!y05 zMwIdXmexWI++c-xk4@4NSe1D?(j)zl4inJ`EAIF)Rw%ndPnPb~7>ehnk{0xuM*K0m zHHundu7$PohiKF@eAWPuz|FhG*M}r4j%kbWjMt-epV-g{afz+!zC>-54QL+;`i=)a zKg7Pw$g?KhT^uWk5h@!>O!EeHx2$Okt$M3d$>ef{5@Fv-I6(c|#243tTK2r^*jwPX z%+ne^(D}ASk`*(WQSHu=@97AK0GC9~uE@Tu8}Az;THP^yVllh!dvx)2Asf3%OO@M$G7jPx#0%A)?L;wJ)jUzGu000SaNLh0L0309y0309z%@3QN00007bV*G`2iOD_2rLwz zvvdjo00`wtL_t(&-sPHWbX3(9$A5P+c_))6kBC5dloAUTp;(vH6+u~4O0^acP;3+{ zEuy8?3WBr?Qp=t+``K?YkE0Ds5M~B(K~yr&_&*X3Hn3PHss)%@a5KYVX7d4U{B3pzd-h zU6M}+^ivJeH2EY=Rf4J|y{8z(>mx}OioaciLy3~4{z52S(rJYXAxp)Qex-4e-0CKT z2FWMsp_?t7^Sbrfhm2lV(~S^%0zQ`F1)=~9Y}`b0cGym#Kqx;nB45JI|Lz>&>VZo7 zP-A;4@9h?T#k4qb3`k@!9&>qbJ`y;AIKqHxYFnM@p^gYX;wa%kL*{JGk-|DwQih8j zWU;Eny&{PL>bTU|I2Wr6s!@$H+weV>KC^Lci=>lsnvwI8<_L{dl^+^zXl1W$s!@#! z71`O|GL%FBTy3KLB&N}mN{*1nD9UWbn@JaT0GXsRp08t3Oaa?k*(;t%z(q)BpIoAO z(^)qVfeuQNE-0pR?{h0efHw>ZEUd=JC4kom+re{%rYjslW;$A2?`UObumbjNd1f0> z;9wLPoWsL8{zS6j#`0_Oxr~=$w(^Xzl6hp4&8KwXP4cMVEUW2>lL>rEDdp^Ati9_5 zwo!(cDh~2`lYB6me^88T<(_SECX{RKq!1(XK7+ z#G?i}(rr7h<2OuV7L@=*Fs7N6*HdYf&Bu6>m~6(UQN$hq?k5h&H74*F(3jo-Y{Yl< z1~pwQc2P!#VT6S$~Et|ZvYf5 zGAn-TcXGK}s5HeYLS9MIaYZXyE}b!Fn4lSE)i|NIOnaNqPt0A0`lmegcmOD~t0O&3 z>kt4JIYj~x>la_10I<*MBtD?fucXvCGs^H>=KUrGIJLv(H`(S~;$f-)=wlpBFHRZw z2MEK(C%i`}Fq(fd-mH6&I7R_bNPg>C!Ik)-##W<7m1!?FMwppR#c^{sU|wxA&#h*G zy0gh1m#E+(*`xuZ8OS~M9Y-?)fK7N>7p~qufyP@m{x;Ci?j)!Yl}ec5$34NBfO)O} zA^qvH`Tdf4e%t~s0&7VF2JkWtpo%!)WqJYdNn82cl{Y*B3(<={08|-;X`3pkA_7Pz zpX03{?c=6(CdgE{I5!_7gy1H`kPbyO3{U3BFIDuEKR z7-iHskJZd3)vVf#J9yyyqUpaX^t)zg!i3Re>Fm>dq0A!F4gz$aF(U%BH$t8nh z08C^U;ARmXAeD3gR&fLfV=j@vA=UygfM*#>96ri8N)}siDy zHap#{)n64Y^p>i$R?jF$K1t=8EVNKnTC1rxuMv>%R;E0Xq#{k1)jpf+7~$SGdD|IP z%Bxqk-w08s3Q5vNp;#5EP=}SHLP^p>q2-bqjJT3iCRa0FsbUnNJW16$q#{W^O}%l# zCFruG4N6kDT>e$N>$kqLwo4%A{1K_nsMnJ^6C zb6#RU6>$0C1TPf&OjQ$2-iSbOUHHsqxr_yhThV#je0u z0f}inUOPdS9m{$M1-b*NCTmCl!cA^@1B7dQ%(gyREnyaJHgX;q#(mdxhcLinUQ;Qh z6jFSnglkM*ySMs5%Hj!NIdcJ6e2v0Y0(m@gGeG>m2$*b6F!4$>~3OL0#NahPFOl|94>c|07 z8G@I?9K**z`f-X1`f|=Bzz&8J!aPx#0%A)?L;(MXkIcUS000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOD^6ch&w z8+_FO00A3GL_t(I%gxkVPvbBUhT+Fe8cLG}Ra}6?|Nl>1fVA3Mq;5CR=GcUr2m<2N z)k^SL^4QXh{f@_)F!+)pOQ}?5saL9$N~OxdcWD+rgioxbQmNB-eVT7dWg&VSekpfm zg}qv<)#@C~&CMl~IlPK&RpY2tDjyd%82%A`?cB{2ekPMk#2R}$rT)`H=3=o}G}@QD znOddR>9o4h4lb`04xR79()bIp|ahf9+m7KLWC8XAW!H+lK%E002ovPDHLkV1g8D Bsx|-s literal 0 HcmV?d00001 diff --git a/channel/banner/icon/icon_wave1b.png b/channel/banner/icon/icon_wave1b.png new file mode 100644 index 0000000000000000000000000000000000000000..677f4a19f05b5441bd3780ef317f3b2667710529 GIT binary patch literal 452 zcmV;#0XzPQP)c00001b5ch_0Itp) z=>Px#0%A)?L;(MXkIcUS000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOD^6chst zcDT#{00BrzL_t(Y$HkS~Zi6roM9Zu+JTNhoP7evfl|L4EQXpB^?OMW1cL#ZKZ?B5O0HVD zMH=V`FN-GQgA%8Io^L$DCwm0Xg=zzhEi8w5G9H)CBO-y8NUI~#V#%;%!~QSmV~i7oQ`b9s)(nep15(xj#8wOubwyCc5u uXq$S%yJ4{EDOch5?`u2nyk|UL80-&3ij4$V$F%7H00005ouKlQgAjtBHqa!fw*mWRuz5G5fsX z!}Bn(-}&zB^Zh(OW?QSPt0IxeaPrKc6Np42gX7sjClHD3Hj=z}5no~)qm>TgA(pV% z(f*1lTq?8lR=;y?#VtT2QV&U9?7=tq9xrVp#C2Q}4B;nCmRb5weHlJZG=NB?29mt^ z1ZVMajbWGY1J2=mnWb|z#>W5D0Ft~ofH55I&?tV#MNE}hx-_^9w?>i|Z{Z8v#w=zq zS7zy>LFUzTlDs&GW0l^<9ZU<)Z@SFVJAKMyFHYcde2qOlzU5_{7YyM-nWca2G+?6) zpjtw`Zhc`Nw!YZMuy>PCE4U(aP{06(e> zq0G|XwiBc;22lN&BSLYnY1HF|en{_JbPrT>AfD^>xm?J@hQH;sU3v*Ti7ek zT5k;31>?9`X6f=y^6V!`Uc4q0`Vkz}F824ZuZOpOD44-w)voDJyn_A0m>sG5n@u`{ zW=2>UoI_b=>HV#IXxj!*&DO74U(`?20nK~ku!3K-4PjCbRtc5)oe~QFWSz19gJs+l z4BL6+Wml$(mRd&K_^9Qa9W^h@UJr{7dYVQln#6y+d5oY}3gGe?K>4v5)%bUnP zd{ikC*;VYeC43|j>4Ingk;o7e4ImO3Vxj>=B16o-&h750T2a|f00000NkvXXu0mjf D3AvVv literal 0 HcmV?d00001 diff --git a/channel/banner/icon/icon_waveb.png b/channel/banner/icon/icon_waveb.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc8ffb5f5a46e3326568222d48391ad6335aeb1 GIT binary patch literal 843 zcmV-R1GM~!P)FAwa z>;5YR2d}*mVJ|FpY=we9K(R_I5p5xAs#sf6Q)#@I4c$$XlC(*-o16z;WS!|M5>k^Qvb7&bTU=3j%_yDX_pd$7$B4`RLz!%STij6Fww3z`Ea2uEf5)B+y0-j;3f~7cK%N;cUrOgyD7tjsh zFYu|3HsW|vqe5vjz~K_TGM}I~-}-C<8`xgMdSE^XTm`Q9%A9bYRp2Qw54?#>le29G zptKn!oa}Qzy2)jBfgH8XA?LYHsbvAj1f@-iaAF6QrLjAg&|bEHS6DNc_gp6zaXfWt zi2*2W(%7=8lIS;q(GxFxH2YX5U!#UWc&@Y6=KWia|13TNjA75;n6GgTl72X{0EOeS ziZz4Rz&l{AnF_&g#13Mslp%l20Ozo;SMve=Y^G{%+5nU`K002ovPDHLkV1iz^Zt4I4 literal 0 HcmV?d00001 diff --git a/channel/banner/icon/mkicon.py b/channel/banner/icon/mkicon.py new file mode 100644 index 0000000..07ca2c0 --- /dev/null +++ b/channel/banner/icon/mkicon.py @@ -0,0 +1,182 @@ +import sys, os, struct, random + +sys.path.append(os.environ['ALAMEDA']+"/../Common") +sys.path.append(os.environ['ALAMEDA']) + +from Alameda import * + +brlyt = Brlyt(None, None, None) +brlyt.Width = 170 +brlyt.Height = 96 + +brlyt.Textures.add(Brlyt.BrlytTexture("icon_title.tpl")) +brlyt.Textures.add(Brlyt.BrlytTexture("white.tpl")) +brlyt.Textures.add(Brlyt.BrlytTexture("icon_wavea.tpl")) +brlyt.Textures.add(Brlyt.BrlytTexture("icon_waveb.tpl")) +brlyt.Textures.add(Brlyt.BrlytTexture("icon_wave1a.tpl")) +brlyt.Textures.add(Brlyt.BrlytTexture("icon_wave1b.tpl")) +brlyt.Textures.add(Brlyt.BrlytTexture("icon_shape2.tpl")) +brlyt.Textures.add(Brlyt.BrlytTexture("icon_fade.tpl")) + +brlyt.Materials.add(Brlyt.BrlytMaterial("title")) +brlyt.Materials[0].Textures.append((0,0,0)) +brlyt.Materials[0].TextureCoords.append([0,0,0,1,1]) +brlyt.Materials[0].SthB.append(0x01041e00) + +brlyt.Materials.add(Brlyt.BrlytMaterial("white")) +brlyt.Materials[1].Textures.append((1,1,1)) +brlyt.Materials[1].TextureCoords.append([0,0,0,1,1]) +brlyt.Materials[1].SthB.append(0x01041e00) + +brlyt.Materials.add(Brlyt.BrlytMaterial("wavea")) +brlyt.Materials[2].Textures.append((2,1,0)) +brlyt.Materials[2].TextureCoords.append([0,2,0,4,6]) +brlyt.Materials[2].SthB.append(0x01041e00) + +brlyt.Materials.add(Brlyt.BrlytMaterial("waveb")) +brlyt.Materials[3].Textures.append((3,1,0)) +brlyt.Materials[3].TextureCoords.append([0,2,0,4,6]) +brlyt.Materials[3].SthB.append(0x01041e00) + +brlyt.Materials.add(Brlyt.BrlytMaterial("wave1a")) +brlyt.Materials[4].Textures.append((4,0,0)) +brlyt.Materials[4].TextureCoords.append([0,0,0,1,1]) +brlyt.Materials[4].SthB.append(0x01041e00) + +brlyt.Materials.add(Brlyt.BrlytMaterial("wave1b")) +brlyt.Materials[5].Textures.append((5,0,0)) +brlyt.Materials[5].TextureCoords.append([0,0,0,1,1]) +brlyt.Materials[5].SthB.append(0x01041e00) + +brlyt.Materials.add(Brlyt.BrlytMaterial("shape2")) +brlyt.Materials[6].Textures.append((6,0,0)) +brlyt.Materials[6].TextureCoords.append([0,0,0,1,1]) +brlyt.Materials[6].SthB.append(0x01041e00) + +brlyt.Materials.add(Brlyt.BrlytMaterial("fade")) +brlyt.Materials[7].Textures.append((7,0,0)) +brlyt.Materials[7].TextureCoords.append([0,0,0,1,1]) +brlyt.Materials[7].SthB.append(0x01041e00) + + +brlyt.RootPane = Pane("RootPane") +brlyt.RootPane.Width = brlyt.Width +brlyt.RootPane.Height = brlyt.Height + +waterpane = Pane("water") + +bkg = Picture("background") +bkg.Material = 1 +bkg.X, bkg.Y, bkg.Width, bkg.Height = 0,0,170,96 + +tit = Picture("title") +tit.Material = 0 +tit.X, tit.Y, tit.Width, tit.Height = 0,-7,110,49 + +wavea = Picture("wavea") +wavea.Material = 2 +wavea.X, wavea.Y, wavea.Width, wavea.Height = -171,-5,1024,96 + +waveb = Picture("waveb") +waveb.Material = 3 +waveb.X, waveb.Y, waveb.Width, waveb.Height = -171,-3,1024,96 + +wave1a = Picture("wave1a") +wave1a.Material = 4 +wave1a.X, wave1a.Y, wave1a.Width, wave1a.Height = -75,27,94,8 + +wave1b = Picture("wave1b") +wave1b.Material = 5 +wave1b.X, wave1b.Y, wave1b.Width, wave1b.Height = 65,27,130,9 + +shadow = Picture("shadow") +shadow.Material = 6 +shadow.X, shadow.Y, shadow.Width, shadow.Height = -45,21,159,7 + +fade = Picture("fade") +fade.Material = 7 +fade.X, fade.Y, fade.Width, fade.Height = 0,-16,170,80 + + +waterpane.Add(wavea) +waterpane.Add(waveb) +waterpane.Add(wave1a) +waterpane.Add(wave1b) +waterpane.Add(shadow) +waterpane.Add(fade) + +brlyt.RootPane.Add(bkg) +brlyt.RootPane.Add(waterpane) +brlyt.RootPane.Add(tit) + +brldata = brlyt.Pack() + +open(sys.argv[1],"w").write(brldata) + + +brlan = Brlan() +brlan.Anim.add(Brlan.BrlanAnimSet("water")) +brlan.Anim.add(Brlan.BrlanAnimSet("wavea")) +brlan.Anim.add(Brlan.BrlanAnimSet("waveb")) +brlan.Anim.add(Brlan.BrlanAnimSet("wave1a")) +brlan.Anim.add(Brlan.BrlanAnimSet("wave1b")) +brlan.Anim.add(Brlan.BrlanAnimSet("shadow")) +brlan.Anim.add(Brlan.BrlanAnimSet("title")) + +brlan.Anim['title'].add(Brlan.BrlanAnimClass(Brlan.A_COORD)) +brlan.Anim['title'][Brlan.A_COORD].add(Brlan.BrlanAnim(Brlan.C_Y)) +brlan.Anim['title'][Brlan.A_COORD][Brlan.C_Y].repsimple(0, 960, 8, -7, 0, -11, 0) + +for i in ['wavea', 'waveb', 'wave1a', 'wave1b', 'shadow']: + brlan.Anim[i].add(Brlan.BrlanAnimClass(Brlan.A_COORD)) + brlan.Anim[i][Brlan.A_COORD].add(Brlan.BrlanAnim(Brlan.C_X)) + brlan.Anim[i][Brlan.A_COORD].add(Brlan.BrlanAnim(Brlan.C_Y)) + +brlan.Anim['wavea'][Brlan.A_COORD][Brlan.C_X].repsimple(0, 960, 2, -130, 0, 130, 0) +brlan.Anim['waveb'][Brlan.A_COORD][Brlan.C_X].repsimple(0, 960, 2, -130, 2.0, 130, 2.0) +brlan.Anim['wavea'][Brlan.A_COORD][Brlan.C_Y].repsimple(0, 960, 3, -5, 0, 1, 0) +brlan.Anim['waveb'][Brlan.A_COORD][Brlan.C_Y].repsimple(0, 960, 4, -3, 0, 3, 0) + +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((0, -75, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((0, 27, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((100, 0, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((100, 29, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((200, 50, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((200, 27, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((400, -75, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((400, 27, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((500, -40, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((500, 30, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((600, -40, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((600, 30, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((750, 15, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((750, 28, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_X].Triplets.append((960, -75, 0.2)) +brlan.Anim['wave1a'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((960, 27, 0.2)) + +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((0, 65, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((0, 27, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((120, 10, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((120, 29, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((190, 65, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((190, 27, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((430, 20, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((430, 27, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((510, -20, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((510, 30, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((670, -40, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((670, 30, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((710, 0, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((710, 28, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_X].Triplets.append((960, 65, 0.2)) +brlan.Anim['wave1b'][Brlan.A_COORD][Brlan.C_Y].Triplets.append((960, 27, 0.2)) + +brlan.Anim['shadow'][Brlan.A_COORD][Brlan.C_Y].repsimple(0, 960, 4, 21, -0.1, 25, -0.1) +brlan.Anim['shadow'][Brlan.A_COORD][Brlan.C_X].repsimple(0, 960, 2, -45, -0.1, 45, -0.1) + + +bradata = brlan.Pack(60*16) +for a,b,c in brlan.Anim['waveb'][Brlan.A_COORD][Brlan.C_X].Triplets: + print a,b,c + +open(sys.argv[2],"w").write(bradata) diff --git a/channel/banner/icon/textures.txt b/channel/banner/icon/textures.txt new file mode 100644 index 0000000..f2ab860 --- /dev/null +++ b/channel/banner/icon/textures.txt @@ -0,0 +1,11 @@ +#----------------------- +# texture x y +#----------------------- +white.png 1 1 +icon_fade.png 1 0 +icon_title.png 0 0 +icon_wave1a.png 0 0 +icon_wave1b.png 0 0 +icon_wavea.png 1 0 +icon_waveb.png 1 0 +icon_shape2.png 0 0 diff --git a/channel/banner/icon/white.png b/channel/banner/icon/white.png new file mode 100644 index 0000000000000000000000000000000000000000..62269a8ba51b066727ca75d65f88a0d8aa0c60aa GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^96-zhA{eGEQ`7-cjKx9jP7LeL$-D$|n3BBRT^Rni z_n+Ah4nJa0`PlBg3pY5H=O_8Tl>91McjUcA-@3Q3l@MwB?`=jNv7 zl`uFLr6!i7rYMwWmSiZnd-?{1H}Z)C6$yB{IEHXsPyTbBfzgM@LXtswA|rd7(&H^a OIR;NxKbLh*2~7Znc`Kd( literal 0 HcmV?d00001 diff --git a/channel/banner/names.txt b/channel/banner/names.txt new file mode 100644 index 0000000..1c230d4 --- /dev/null +++ b/channel/banner/names.txt @@ -0,0 +1,9 @@ +jp=Homebrewãƒãƒ£ãƒ³ãƒãƒ« +en=Homebrew Channel +de=Homebrewkanal +fr=Chaîne Homebrew +sp=Canal Homebrew +it=Canale Homebrew +nl=Homebrewkanaal +cn=Homebrewé¢‘é“ +ko=Homebrew ì±„ë„ diff --git a/channel/banner/sound/wiibrew-banner-intro-part.wav b/channel/banner/sound/wiibrew-banner-intro-part.wav new file mode 100644 index 0000000000000000000000000000000000000000..4e4d0b5fc4955caf969cddfbbe4d52be10159017 GIT binary patch literal 539032 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

ZPHWr&y3=&F+I(l8gXTy}@5i$On&P4}q+goJ4sF zwAG8^LyT9Ol8Wui`R$)dcXb!KG~I3F`5s2FqQdD z7V8yd#k}`qYqTpF8NGq}N1o}4;pV7&q@~^siNE8~*64z>oml)RoNyq^%P{l|L{La#auH(c&YyBlqK#sH*`CF|VeoA`;ut_U>cPz&nX$|)C+1vOeYp$pR zl=YL44>&}}h>B=EaKazUcbuTpkb?`mrRiLknvLBMG(?95!`{~553g8gCVvu|E1lqb zJ;I)gF2Z!6web@eLMxj=T-_X@yIH4XeJfV>vg-Kd&EuYHe2o4}|B7y+Um~^WtFRB* z#q{V!w4`?3Gb*FM3S6$KL`7BBABu?A2EH4|*y3nob7SO|)gqEFFg`LR@Lyzhu(jh@ zpPW-hA@41z??XeG&jR}DN$+o&!=0z!Ij!(3?=5ZZpD~8XeO6C3!`g~gTJLZ%vpVf* z^d&!&h2#c`fIp$NJ}*uH=X<^U?B`PX#Z}Rnmynl4DdCER{1{{pSA zHF7cm^*g2R;vUg2fTvbSp2fRR2a=i@km}e+<7~-V*(KS1Xx<&RuG1psIMUWo_$cjy z>yfa&j1K`N>ZQsGyyay;DqJMX%Oa|QN-b?YM^y#-(*u$KbjU6EmH7^Tw7StKB=UFL zBghleh7%7Z_sI?DG*2bx^##&FbzxW4L{>%>GX|(IORZMZ>u@_;EpMapqQ73wi^}}| zH6H7Y6qY|AlH+qpYS6JsD;ZalDC>J{vB2fv+rS_*f3PGW zfrFx!RlqxAbc~K<*Aw59P`EAmo_G%@i!{ZV+?-?`&}k7QzW$Q~@k2$?R7hG5M~%dA z)Y%(}PrEaS z(L?o6JXk#f*4Gts5i$l#L=4z@p3ww<1Zm5Q(67EjC;FQH%+nhU{DrJ0FJP4L*U%XM zJ89%Abl)qXcX_A4ojt@~?fFg)ekfX8bc-}mdn4b_&}cShd8N&c3~tJH0C)Za?rm&Asg3@4o_QYix9%%xK9U=(BqF7C&A(<=_HUb` zy^MwrzUJ3rKl5Z;Do_SsE?hykSy6PrSSb5hheZ!7m7idh@a9-)+zDn%re7Qz zlLVZpsI0qR)%PmPYP^B?0roc&wyoLGKcW^{D?idVdXrHEyxvV|dn*eo3Z1goW>RCf zafdBn&*%$UpG+i|adDCfZ^xri0l49}hsoOyR32r4u6-Du#fYqz#lX_`4#o2$x+mBM z0#|T*k^5e2I*v2oxjv=o zm8MLXR zzj;A-l=$Y&QD4Mdv{rL+lVmm884=@?nax@Ry+mOZV~wprzgCyL zA$k+I^b(vEsJGJsN1Q=qqT7MCgtl#7KNmah-=^>QYhdoy2m44KAWnW)<8c|4i%nFi ztppVfbkXx-`lAtX&?AUDhEvDh!qMO-Jj+^u2|JD|qJjE`G=bomNj-wC=q_)h*CR)epQ<#R7wL<3IycArG*6 zT)3mTZShlggP!Nrhs|YAal?P%rxRPeCbFMQCbr z_1I{s6pP4F^kMvnyiD&MhBPxfy032 z(i`Y}oriHq@)bg7jNNFM^$-4HKP97sKe1+^aYo+I8uN1?-r8f8wJtLbl=AIHQn`q| zaQ`9=BVW=7AE0yi3(V#h zf=g+-T?F3?)IwE)Z`I-851BEzTYL}n5!!AdI@*7U*OnubT3?km&gyn-H7ZJi;F!q- z?DuWxtvd~!iP-3MVqSDKAsgzLkPPXBdpdP^vpy3ktLp)apq!`VL%*@CC2oslvMvy) z9`Kf6NjQf$@+$N{{)p8Uf0~~~LAw`_`ID<&!HH^Q(9}+#o*rZGhpth3l*i}_t*$L3 zBWcRwFfwbR_0~dt%r2=*2J+}~;JKb-e^6PhN6<=24gAZQ`Ypb#bE1C8(mBvmISdl> zMbuk9Mf}9K`>Fg6-h8iz+r=yH{_cHokw4U*>+ct}c|n~{Bqa$zN*)R+>aRdwAFBQ~ z->ZkfCYc8818{AEC!#Fggffwbx+UGN!n6#K3Gc!?H9Zh!HoAvNyz>L!jPAwADTJRm z40rc_f_L0kbVzmsCgfB+fjq=L*j2n5PBPWa1t_c8T(<+#TT+%r>>!iZxugt=ta!FK?{A=O^khz&}o}{zcDqE8Gj4X!Ut@kwuLmCUco9ZIrYHA- zS>)sE3|gW_6XTmP)!c7%vj(&N)-}@7I)Uz(E!9cmKc0@w_3D$W&PFsYT14-OB*-6; zeqcoFCO5i`521on%0yq6}c5Ob?ba;N4c3;8CR4d&d=C$|Gec#7r;70bv`JMJ~ z66htTHN&1|9Pu9*9Ykixos4*HCM?TBO?y=TX!2H31eBW1G2Q|Pg zGyxXpO`JmgAWPv%SsAwJ7|w~4#4n~P`WoZ;L)wi$gxSF-O~n|MQC^fwR1&oe1@yn9 z6WRf1>3FjcooU^ruc4Pd#Og_RnG;E4V;~+%cOnO$*E3LRy+v|I9QiW{Z@3*e?c>Uni`7|)GYLm{s$PR!%-NOL6D2mtw{=K^+)ie*QfGiSH?I1(+P{n&EWNs&|%p2Jy?j)`dxe^D9wuy7a#PAxiI{I8-?~6zQ z-slm!tZ>Ogu8qOGvR#5d4;18kf(Q9RNE;>(u8_y=y{ffU5;?HTf6NxZx41pn=5Ls3 zVGc7C?Xear5BNL)i{p2}&o+`CaTk(b-931i`w1+mCD12tHTb$}=+``~7K(N%D2K{= zvW_Sz9Y3o)?p2WU+z|L;f71t@cwE`-OLKdtjrIOsaNQ3JWL4RMwH{=ECk&1z( zG_^gS-8N?#M~%s5YF5^oPX4nNpz8Js)z(&`h&`L{v>y0BL)WE*nVL5=?(@#thXwf_ z(iNO#nf|H@Gy-Tpu8Tp;j5|GwWzTtBY>abMQc^^hW-#>JN5=WuBDHfv1$go1i|s z162ro-UGZCRm?vKS)_{cinuODLVuthI>f)>R(w9t7zi!mKP9%Gk3_vLxRpN(z3@w+ zWFi|{EJvVLdO!MxGU2sk7|zO;Td8Q_RAZppz4&eZfZ171yRVj-@@(BeF=J zBnOmB+R3~$5BRB?!dyMTv(bV466ql{BwQXM18vvYNM6;0JrR}6M{wd~Tv)&Q_pRc7 z)J)@VHwO4MSYF-J#0b_Go zqn6r3hl{M_vhSiSVAojSjL`X`)pYSlQ9UJ`R8I=W>hEDoCyD0KY29Xes^40V0jped z^hP};_0>bRN**<{$urh|@tZvbXk$G^O?$l9Yn>9iO+&6TcFD|apjuA)>SeI?nyE_R z;o?3xE91!rcN#hC0Nus8iiwj3Z**#*^Da+6WFN7dUx!;I=0DW!M%q(lf<8 z-B#Yw1=Uv_()rL${T*m>=kX%+fXqdWAs@fOCakr~y|l=m|0CcQYr-U@JW$uv;e$*48P4>GV`^AFa1* z=^EA;Jl=8qx{hITf-mr<_+NiNitz{Qpx0Psb{EKM4wVI?55>#~ z_{bt-C6DA(?VP8oidRSX;g__84aXd`9Of+z@O>i_ajdE|A&`@$4Q*t-LWfw%Py<#a zxP*SPExO!VO|qH2$P(6-B#;>B=Fh>Y(E)Tzwa~kOOgumo}WbWW4zwc%kJ#x zdG{};ymt;v$bX6D{F}C9T_7}EHfricRt|L9ZUg7!tfYs1iYPM)t#4GIGw57;9j~R8 z&{=BfRIHF{!`920>?}-#XUZ^pB=Z`( zDmM~ee`GDluhuc3ggr682bbFQLNf#FgEs=11ET^P&AxUr*tHgiGi?{u1bmc7NKt43 z_46)+x#*H=;(eF!q>`S$N){18c$?2xbyXg1>UMe;{3wcY=)ciL)fz)v3g?CUL`pFP z_BTgJbH5|G=y~|DR~&cnhojUyC7fUq^h}u_8DOTHhPI=#_&Sng33^N$pe3xc{s$bd zrZHP4vNQ0R?I|)bAWzaZq8yzgc7vxR2YDg>gxpDW+*PK<&*dZZLAmIXzJV~_iweQ5 zs4rcnE3+YL5_>GBurmA!z3E*c+uU9_mAeBbr8m?Bw}HCj?NuxIP5o8I1n=~GM-4c`vJBB zQswFST*^cOsVFm%$0|LZiC*dMK#4d-KZ>Vp8jm*$`UMTc`whri_lV(IxQqKzJ#^oS z`QAdl#s3#>&^`REavgA6+rl2NnRo|tx^e8fx(I~h&E^+$*Sv^lnN7(yV<9QbhLeFL zNQR;q{Hyw;CyQe0wLeIV@%H-@+=uQur<0S#*%VFfQ0KB!-aYHafeU$v$ics;dZHwr zCyUVQD#8|_ZsusR!}^O|w@<>oZohpi*f>}+)Hu{L^m9xgR4gV(aC>OCy(yU5S_(e0 zbar|=$288~``@_Ii@k46J#r~-e$!hqs zY)N8OSvp7oQ3rBZXSGjX=zr;JJ&K;ujp!krla7bkVR>!AKTk_X>e{q4s!s2q?(_z} zNC~|M%~?S?TSpfgMQO+!LAWs*I3Ek(SJ)LOuH{ull0%+By~SvKl{Zs)`FC;8Pb#+g z^Z8`IHecrV=a2oPU{@wEMVkQUqYYxGN(o+@8S)dD^EMjy6twhoi@-IVK3EIw4s1km zb`*^_O5#7sDmV)t!)@hOJe@bkOZ=v|pq~LB_50z){0sgfmI5cdE-j{mY%35Fk|AuA zLUBe6S_(J#4fLiSM1JTA_`5EF9GyeQp%@i|E<$1>t2n8%gH?QwAJm2X?U133Q`NoG z(tvZ@0XMr`?k1Cc-E8ttw=Fzx>dB`5HppD0RcU1nXn?muAJA~Tg&Y7%)Bs3H?4W01 zcasEIW{-iDyVx8AUeMq53gf$?#txwNuT*1b3LvoV)eA{Ym|YEk8*CMn8n4n8`bS+; zFXeQgnRF7fWdZ(Ce)5jMiKV+P=vGD-og+Y%Xor=v6Mu8(;Y(g#Ed9@D3(OyLf{){# z=D_e6j?;q6prDzK6b9DS%fKD{G&lrL4i(1ppqwcYem%?p=>wciTj-x`U(ZyrxcCUe|ps()*e8S)LMl4C(1la964egva6R zfw9b-Yy4)XHVy__v)sWU^lM-e3EQ6_XO$J3#uS8TPLvlv)@}6={YHLLH^c%J6kSvY zo&xMxm*iBqzx?F?1J>K3q7o1X^Lf*FVQ(d0?>*+(AW6FxcG}us3@xK5xEGJedwv1A z*FP$Pe7tDG^NTtHrscA`=n4kO3HXDoNDryYU<3VRWCjQ4WfU}R+}Rk6E3g@O3H^%8 z)5)YIO+s(e)wDc|WnV8HQox?OVHOH&D22oR3 zS>Sn378~$6o*!;ZdsSWTNmI0taT1(%YPqO}T8kg}9xqPgc_lW+pTjcw<5)6Z0ZSz_ zJkz6)Aw3B>j&u5fE~~G@T(K2h0alw%>IO@$ma|)szFjRD?FrA8adH)|DYN5-awXED z13D=NqVvMWedKmXK`bFz&`Fw=JZ5d!Yh#W%#q4Zv0a9XHvt4k2(LY#(y$DPr*X%>6 zp=Ii?#%kG+ofpr+LEQ%T7axF9yg-eUN|aJh!S3_Kf22zIyVV@nd8GFmsKf3T+0K0k zPS_@DxoZI>Iv?8YmB%ambYutLNixYPU{ve|ChGrtV3*1Q;H|%pWBfEE6%dcoda3Dc z?;qNXA7iED1|z#3W1fO{Occ9jb27(VKrS20$P6$`8#EszyWW6tc^JMc6Hq3x2tD<~ zdZq{aJ@>2n$(^9mxEa-8*8;oaQ+e5YB4_yXWqV#lrW9pljBF#P!0#g?idT(E5}lpR zMYYU$V%zyy?m)=AA6NmjA8z*y$iRPgis0YYFM*NfN-LdF-RMa-ljATW_JL+m6l`y& z;rr2_gF)C|04^=VE#Mz^YWm%sCjJKJjQ`O2?k{m0@b}&kzKvG}O7r>pE1_zij0D(qo4YJb0`fu2AlOYauqxZx&tl4RLyiAAiE?} zwMaEpf(=l6j2G&anO)biHs}t3gnVSCMq#5P%3(}IE!i1#n`XhKfjzc_EX3b%7`9pi zh>2Y?1^k^yv?7NfGykWoLgK|&NEqe7>-{09vHwJ8@bBq^&<2>zKcTPU1>T`vlRwZ# zFoRryH&799JG{gz*()8Tf5<;bBmMz(^a|;ay8=8`ZNQ{3m6vn7^U3gCP6r8^4bUF1 zsCuJ6wMBsKL?7XA^gcKn zWI${1ZZMx!#*RJ&^LdL@fh6DzS&CeNq>#spkm0-*bexKj+W&tK@$F!Hoq%u4a(J7{ zgDdJQXuj@@>gol0DUjrdIw70O`;c?bE&dagcw@QEe1N z)1qc^lFb+cCqPf_#M|TxeOmN`^FXX@#BcG^JU?&GSNkc&S$Gm|1fJFbQ2=b^XYdx? ziM~P5T8FoKP0|+<2-L_34gLVR1Wm~^WCZ>UM%(5%559=6 z-J7)1Q^5c~5pJd(NklBdSw&0qoF7%E`BU+dzxOALK3-{<^nr!KeI_H$EE#ZZ`G*@X zV!XNhi5JK3``>*6q>6sBD(vn4l*NJm{X0I7^3ZW)3%f@lN^4}ZQk%JK1^J?fmKo?^ zKZRM*2s>y;ttwWc`O;Wwv}YOEa?*sHM3Yc{{R2qUhh z*Z3Xsf=6^}oTwhEoa&C~AzSb`S<+7{t9y09w+gKU=;73Jcj>TG4V`e-qYuu%&;mGw zsMiw>@_WJQ<0q6={im<$sW3~#x-uBWo{`ItPEH3Vu~DK0kdQu-ov=AM?VZJ^+-E4S z`%WV_s0X{VR7kfp6rNy$7$gHlgA$AGpsR>IF22YQqi5g}Gs8Jyu_ochr6U4cH@D!KGRH(FR$h-Oe*qEA#E=e!>7wnQhr2`C9Ki88{Z<_D0++Cp1!s{8|3;6wZ( za1*N_r+Xvi1+a~E^q;AEya@c8b8%4C2HMqeI1?o^8|#@SMUBi&sEbh+IFF-nfL?~F zdNLx=5K;%l(b@VMZLSBfczv2RhTYatUEL^wKCscFi&zfW*}|Jeb}Bd)7|lyHVas0W|Th;N{M4?J(P$wsDU|;qH40Jwb_JEBYON z?Zw3zz8l!G?RgTvB9HT1^J)Gt-i=@3)5Uo{LSEu!6o(mPA%TG2yI!pUf^QkQT|5R0 z3fA9!10D0j=&gShKjL*r2|0<}Qooa2Xc*a!dy?(sGfp6X;(W9Y&PrFHzsL=poTSt( za5ps<1yoY_Oyoq(RDZNtJx9ghvzQs$FEw=`dQSDBOy#Dx;b!@q55WWZAxQT^qZe|@ z^W-+AR0(w-byMYl%XSgc%r2X+!JdOQnSY{VCP$0GuhGFA4ov)7_>|$IaYjE>4q6~z zSqFWK^#J43B%Pmr(M=&?+!Wq5*Th`#Ei6^pozW6UCWzsQ$M~g$A^b@~E#5n^IT&P* z^1@&!uj{^)5Bv@Kt?Z36;ndI*F2Ej|f3hcbJS!jENxui5kvGAEm<0Qy1Up`rwSr*H z%O~5>e&QcI9_S8x#ZRgh^xX{AkQ3bz-T-C17`(^LLPoi@=u-D7-QoSt9{6S13UQP6 zQz2Rpm4Y4Aew>0$!Ea$EvZyNcpK4cWwOVEJ581&ry4S;c^J_A_C23;HK`JeQahb2bb1 zj16G7*_0e1-_&kd9c7eRftYqsrE)upnc>m0dPMsNq2V_Yd_rA;4AR*x0^8xzV21gP zok#OfoNCT4kO-^JrkbzKu|O$Fj^EQdY^vQ=dSpB*Yt2QMtWoj|%Z6%NZFNQSzUpmk z)*FnC=!B6#l396_iSNK{?iqT4dMFN0t=4=YG**)+;oest-N*X2*IQ0@7AfNOhg8c8 zHPL?#J=V3np<9JlaT9qH5BtU3HturgxmU$c<=k~wc$>sn@3OS~J~}U-jfcxYz;67* z4xxf(VHOCqHm3x3TF32nG4DdHf)8PC@>^hhaDbh`4w@>MI`G^oYF?#vNPpPRmN)Z4 z6Z0;apuei>61cE(IPe);$OSy79O&%x+WArOlfP0ll-cwKFn8nuzvnESQ;vgs@Mw}r zeT2E!6w+MQVeNHcx<}Q4R%B0nRc43#8n__jXz0`S(+QCJ+s7NKe)^nD4&Q-Usx5y5 zzsq*|wP%6huL^qU4?@|+Y23&|(6TB4C*|yPxW8R8aR*G1+tpT;QT0Tonu@2(-=Qz@ zoqa`O$ab$NsU7x zupn6I94)Bht%Z27RSO+6)B)DbZ zcHP12>Ys9o@P98a@izVEbufkDuA$%1zip1d$(K-0ESAZ07XG1PEGbH$H zLboJ^c^{lR*GWD4-Y8&nGYSIzF%5cZej&NdGB8h0syu5pT1C(Mm$BjgMi>wWDnL4B zy;`ACswOHsN(b4gk}3qrsPps?erfqAV7??vP3XzOeB_Ps*qm;ZH;$0U;DFy{-e4=( zJ8~D2a8=PlogStE*G^z;g;iPf zL(Ei{#Acm?XH{pMvwlvVAcycX(1cs7U_p*J|4USZc4=~Di{}0>-bR^4MZpNy2@IK& zR7uE}-^0hzSC$ReW2K=PSqP_wIEjXS{hS$yDLfR=N@niZg7B>`#Y^ zb+iz$4NkyW`IUOY`jbaAHBAGl!T<0bmZ;m3IGm1rMzz2{l8WX966F}9C}T!uHXpXB z^~g229oJ)3@qU^pli|*=zj`8)lUZU1G}P1R#Ej_ zu1AB_G(8F!m=S2$Jr-l&4$+LH;Q?A2Ncp+J&v?z7ujYD%bpg3azLL9D9Ihq`Vj-@R zWimbc&UZl$?mK%4Y~9UrJ&V;Nj2^nEaaJ{@gP?!1ifl6G7>&(!M#x-i^kc5so-Q#< z<4OjXntcuaEp6O+$mzKyF#t^3XxUIzCFGRKEHn_UBQt*O@3(9%G)nB{>6v3~{*#4NH)gce#~0;|m} z)_l5&^~WbjDRfgUmRoftd79Vs9{Y2>gOQqv$=!v~QBF4ZaP+2oF}mGr>1L8koFekO zw@8kI4S8qT7H0W9^n83*&&K&wB^s~Oz#Muu8!VO@+f@$pkXmE6Ajeq=yvg_-rhKnx zGw`T?SI0=AKM$o5n`nK%1HtZ4uwwLtL{l4ifiH*8VKJRT)x<^gRdgG9o~{n)3Xty`piMFg z?Sl??Lvs(bC``J*ctNvRcZ`~J84ej$pq&Z+3p@>WDV>cSVikiMu-Sxf0BUhx7V$F} z)UQOF`K`!6v7BrW9?lBp_@CiC8V_xyt8B0M!@4cc*%Rf&KpK%JSX-V5JOyj&1%DB+ znED#aIfbm{Ke{TPCF9|=H_NN+HuSPO$^6fe>3)^yB#|%jw{XJMbc;v^bUzXV^Y%dU z(y2+G`q_WDNX9yII4~e}S1e z4(x@;?Yn4;^&4tt{!j&AmeLKT`rGjtl?qxJ$5em)5#^;}ITBaax7jCfcWzdR^f$b~ zY9d<@LIg0srkh2e)i@64W!F$=yo)V07L)9x0Gul7u@jJPxvo!IJw>jzWUnu4XTA3<0WVszN!V> zX|v!8Dhb)Zx2i@kPg~`WhB?_s;0+gmBvBrCVm1Lbel>j?9aT&4Z?ZN%!PgM<|E8RO zStYs|4tg+e(1sygvNm+YQ(#%%9I*CugfRau;3;*EdBh&fe=qpjo*(y5tRdq4Q&##q>Q3LcVc?9Oh z1?*Rv2+qipmc)Ak-*D&90`erLIXxYBpB0YlZFGzKW~`2(kOBKln+6KP({3F49eUi8 zbqU#*j|FPB<)v`8I`gB-O&-n3Nu<5V?j(U8!8Ux zcnh6K3zBd2p_IIcQ(TpfREiwn4T0Z!A9nX;SW$4Rm5zKza}rnT z2Z_UF&+t^9Ga}s?uIpldzMEJ5<6cHz>k70;UnMS z-0}K^JNTEv-T2Z-Ha<9tCGy(AG_0dsFQ%$WFxxK#cIGn1Sd6SxY*}y+Q=#K5UF;8X zIV4Du&@7rQ^b4&Xd`HIy9?-@1WY*VS%d%M>{RmIKMoap~F=E;#3mjUB%aVouwrX$W-9wZH~U_N3eNw=rJV6~wbK4-MQi~nm&Ne&M5B;dkQFt?(?!(8&G2n-WaU!{A}jb!Vqt%& zz4Pt||A3dopW^Oyt9m!wg5Dt~iI?14>6P?N-qA-wi+=K==qwlLqk6CIs4F9a-hm6R z4B_aF@tS5bYte^RgxSF*#@ygCV_E2-Q7L$e)e87@p=Hv=keaND-@)Cni2UYn@aqCE zeYKMpz9*gd$Hem@Ut$NDHSwM7lbB7Fb~>RV?r^ltzks5!dmM*;21`H_+}D6ztyNN& z3YEq`g^r?TF&b|QttWQ_tH~w%9a(PV1WL1qE@;>ms41!nPX)7)T%xk`#h(yf@P9** ze=VF*B#&ya5;a4!yvNXytH_GVV@4&gOrF+4Mwwj1W$_|j*nC_32 z9ifvp$8D;TxEu9eHyyO&&tvNE$K|{zNy__>X?`yH7PgXKxJl;vugMpG9!bZ7@H!Zwm6<}iH9{ssLM{GgMD2BE@4=BeOB^Li-G$P=@RHi@D5-{4=`3nWTyH5B8G^kN>{AUCng zvKJ6H+p)sY-V8Cw#g6A52GHT1D2?2q>f9LnV&EmoD z=lP@`MfvlDZ2VK?JWuOw7DGgRuw0(j`^aoKQHSVUbCp>zkk3qN)wZsfd##-2Pxdk6 zy4A?gMt63L6=Rd|UXmM?rg1`}+Fl;~S7eEbPk6>Nem~;1|8~M@_^nf9`nU3lenP`= z`^c~1G0y97O^-xit_OyeicTf9-hHS{zZ$eKpP|l>AMOq0t_5VdenQu&U)W~YOMS)% zt=aUp)!)1ZJ)b*)VRq@@5W9GAy%n{G!Bakm(Z%|Yd|~$>WAjYU#7R_I^j=7Hf&ZyC z^WM4)Kc(;b`}HmE=-)hxARqGiSFmk zoIN5gI*1pKCIMp2GCnQZ$A`(7|DO}}m$@hSH193&Wjl#U{;y&`?+V?mt>S`w%*)`} zFeP0gcCeBnnRx)RQOkLv(Up%hs)|XZF!*G;@TYPFY>T(~_q@_Po$L8L>hkVRZ#6i& zR)2`5CZ8fRh#%d_Cb_$ex_&k5xEOA4P|a+CX9d7S8~AFx1OLMx)+D=%RVq-}x*ce5 zr4PWp#4c$ZwAQdkW(E3z{fvKR4|I8G6_v)#;f9eH64N>S>gbMt9aR%)F(kq0GW4@C zhE_Ds8ilMc)=2BTozng_c+UDB9A^bX_07q_vPP;v9=6S56s(`P936w=@EN%0jDyBP zQLqg3l&$yzsr(<}gExbxcbEI;qwD-j(Wv`1{ENFFF~55^;iyyNM@Fx9LQ-#hLMxs* zvJ4X2+eBY~iX0}9gqNud;7>rxZltrrPPZQY3Fd_3@FwtQ*1``_JdiQ|(3?+4?~3m8wj|c|UjMk@ zzW+YLq2FIb|NLG(()#=2$fSf9kw{`1=W(R6SKl4MZ$pBu03V5dlCN+MRfshJCqQa? z(B5r~hX3D)P`+Tf*yS-LW9P>13=NJg9C#OV)>t0ON&lSO34Q zS{u58$-Hf9v>OEvLvh%m#j7#i8CBiyhj#k$xPkW$E%Cl0?j}V!J*=DiKdE8@tM+<~ zng^50DaK?y&Mtv}33;SrYziZ7++XIGxTxJZE-v^nwqEdU%#c9dP}B(*3S(gB5+ALNK?} z(Bj_bmj^z|J`!^OA$6SHWNx$$t`q5shD8pm?2-Ru@#s#z3WT2Hq6_^Oj^|hN@`!9a zAXkd?%2o~4GSv}0Vryi3V74d6-KB#I$$#kp@qlIHEsf6p-^O{bnAyp@V{G(p8eQQ` z@9__8p?pnK=`|!Z3X&-}2A9JFbsTP^O5lvL0;C#$p@iG<EBc2X_1c}TI_ii|^S0+;0pC8@9 zPdj}?j9VDaZ4LD>?+Hw8&!R7!;mL9i%$e4rPLRM?x&|7H7~YIi;iBXnu1;H%bZj#j z!e)~)tOC%IAK;VpB_2g79z#M1I2igpOq27$bS@zO5@|(x$fY+EMMYy712?;&x|)nf zHDo2cQeMNu)FyHY-lnZ_ep;5kAYEB!{LV0OEi(>XF?Z;Y^-}+0mBo)OpVYR?7=7)_ zW_NqC{fnI`SkW32d}5fPX6*0a3la*($@?KbsCR+ zUKx5GMOZ5Ija9@242xVfJn{;xf%DmPw1|wBBVZr-Sx@&oMPY~g+-)tgc$ly7ig?xi zd(JDrVRSq{9FFHP;dT5~VpU!y{HMP(T-R?I+2q}d{O;{_Qu__T{(G7~7j0F4RRK2! z3QGn$+C0G?Se|j(8VeMVKg?Z_0HAC%`JJvp*=Z-BrsdYhX+N+Xl}8^)cAO6H#ls*o z`cVE&Gt2A72vNuSRj@!qF&J*JC+)LhhP_-oFlWg=#x(U0-K1;6`Ts3m2g#BEJEgN3 zWAzbZw!UF>fa&oPofnKAf3ZK*Y5H8WqG|a->iN0pOJGF50_D9I|;KjTe{9}G0IITqi%wT z1@3%#9s)m=qwcHBXgb=2-s7@p2gwb|r5CE3LBYIr45r5kD#q%r{{FvNU0kc z19U5+I=Tv<+v7|^@~taNL#qSnK7)}Ibu&8Zwx&`ktzUFoyPSRqr15KZXZ_Bqr)NP1 z$u^z=Jt#LCgcqY8`Y@8v6&>qO0&4kVeZ^U>D>z$$)?({*&IG-{y{d}3RW-D6bTuyo zZOHks3;ZH`K>s|m&LS`9Ut}e8LcRqbLl>e^7uaaDG5@0vtjg>UJHRH|oNTj_f!nJa zSe@p=KkovZ*&?bHYA24$Oa4O0C6w_Gdsn=oeo4O!Kf_mu|NDYBgV`X2{=?_+LAo9G z&-H0dE67IJ%jh;cFF9%#K&!1vKqmTGy2fJhiES0jf!+QMHi^HXP4a|_hdcar{fCIh zO+^m6LcCxHML(mIJYt-bcZ@{!%E*FJnon^jvjC7*y0AXxJmZ7$)VR*_nJt-w?`S+7 z1D2}tkk42sukbs5Id7cvxAPJ{AEOh8IOh{?Iw=!>awCaLog3k_PRi)C=mO_*^rKhL znIpQnZQ-er4Y!1b>;PVyq!;yoQTY(20)No6XbgKmPC|X|@SXHa7%+wl)R+v1-^E?agq8 zu4jz5)3G-85|SS%Kd0Cr$Q8_1chm!^VDrA-i<7sU3Zh7K051}0<*gyU)Qv zxzP!Ei@m;H5?;hFF0T2utS9;dwe4U1j~;_3;cp}xZO0z77Dj(l8?UV~=2E+_8MXVH zv4M4FGkXs-fo2$O*q`(*%qmLhl&G&*sk-?^RTj6GOc8x4CWmW^)QLy=)P!k#OTs_g zNes$Wk*aE-Q%8^SenuPkN0dT+!dqeHSccvp*gQx#+YQ*{U^fO0cU4Q|0Ogd zu9@>iXX~n*Z`J@hPc1Z;PQnTof@kX>GFQzd+2v7Oo*zaT;h7cV+*E@iD`nbnSoBVu zAbw9QBjUp|`OfeuKW!w9e!Mjk5DjD(^l^l)WJ<}9}g>GXk==vJTtz8lC(_Sx%*W9}dy;GMIbjD(HKRHAL)Lz1 zU=2DKNUyR4zWb@|n(ijEP4pA{5WYt0hBKhyiMi#;gt~sAgiVh7V^idO!qLR%iKi3R zM7kyPc6uZnb1Nlg@r_6YvCp}nI{D@BCTQLrLt(Q#tqF#YQlS~v?3iWthZqu=6!W*; zBvjg771(5+HwUsy_11o#r=Rl57ClrhgNW#9(Ki${Y2Nid149qFt;P z&f?%z?^cX0e#HK+%EslwFJr&c#F*LU(a=MCRPb7`T;O1+m1V|^FwTUA(vd-gvj(#1 zEx-@BZ@l3*DE24e4-ODVqTN-s$OYLbvPF)JzLhiGX6lOnhsq>V>q+{Weu;-6#14U9 zFi1aHvFsZ(r2>Hy?6rM?U9f$&&AtToy5}sHeVh%ozS6tKS8|t5f$Z4VMxrq@+@eO9=tzA0SRxTrodPwLNY8?1DVoyVT( z7QwOb)+!3E%=gI8?Z(@<7-;4dByIRZxCOX_3-eFGvvCohCqF=zV;bE9{=f%bQF#Ae zk=`;vxylYIZ<(nq^xi7AhmC^nn+_wS?AcPB)7zgrw^qW-(9G zPdW9qT~=e&G0un2=-I>fv{j)p+SpKrniyK90e4+*s}DDAGsAA+9%Zx95Xg~yrnUIR z{9@q+@NRz-uZs7?f5j4F0r5S*knaOCqABDkUW`_GUD;pI)m!Y8u_EmcdR0@@mg;VJ zs#ZL_OC1_Unom8h{jR;xR~jFTHP%gYq6;?;l;)hEZ`dZ-VXl+^pd);H`D6a+A|IG9 zt@2lt>-ciZUFAQd<)SV&;e*0Y>EK?&&45kc7HenCBeE55(U_D-@&&^ zrybEdZYN#^dy=XAH?p1kN?Ot%U=s;xFLWE)a}P;JuPZ&_+4NU5m&=RG@G;~Pe}J6h zKaey0eG=w(k(>NE+zHNNKmh>nqU#hOUF}*hcbklUvA#eX@G`4nk9RYm<7_*Xfdy6A zS_S+63V69$fU0IME@YkKb^E+<)cqT7MTexqq&IMop39SjCGrF*LrRvD#UGS6{3iKN z>W6#wC&(ifqyO4Vy$wcBC$F~Bj1I@^*Mr5??!kMZ^x&=F#n9!fe&OR;6V=yQYqVp* zvIe*~th`z~r?OF#ZMQynt=&a9$%~{{$!iX_4MI?yBt4Qn`G9gkIiqY-_R16G*WxO% z7f<+>q&&=6c<=(Av~L-rk)a|rH53T_5#)mBgO`H`Lw|-N)xyxJNHp7;Jt|%VGP2s!LfFe>H z_aHv+JE`w3p=*Ji+RBUMZpKp zZT5HO&iOynTfX^Zq!NQiN;5r;FUscAY3^UBw_Am&?n3(svyCmDskKB`)E+o1482NK z1q1eBx=HU!r>}V0O5;Cx8GJ|B7XHM_a|PXbSRFz!mP+v>!LeaTWPmf2U!ckOUzl}45Op^(0HY7HU2i{8G^kQ&SCN9SMRp@8@UL? z==FAcXsY&?jyPMSk#0y@$V_R0w@R9b{L*~9LF`P93oXGMdY-P~4$(ri4c(9Dk+0rI zyqf)jOSzxWL;D1}XkA8Y%$7K(c?XvO+h9qnG#zfYrW>4|^t{`iK4Uz+0uGde=mt55 zKarheBZ-8z^>P|Z5;#o0aTSTi4impSetsQ*zTteF%s1#+9_>$_@KTl zbkb-T+HP(SjkNZLSK5!Y5^f>$0&C#>KM%TrJOLl^dS2)M6Lq1HJYW1n7DYn}2*<@s z+-iOT(FjJ5y=eEaGtPq9nch%8rtMZcYs14xKNfncp9l9&pKuQQt{Ul{)?0fut>L(U z8%GUq7WW9U1_k&Lf+Btw4oHQ?^Kvn9zVcBxqWma~QI7Kq<@;O_$)yDZk7QCCHsPxw zgWDQ!^*Z1UY&@KVN|P*iJQ>QCQN^1BotJTZ1}Y%vc((v2a`6|MCj3SJ6eP~&-_f&> zXw6A64M2kAF}sa#I~3mnGGcCXlJ{80o}o2kgSFCbih9u=skXB6sYi_i;S2hU@H;I= zy{6^Xdg!zC{l;9grFF~h=X_;@Syj>t72r?f`r=$NSqhR<(hYJ;Y(k0(#qdq)dbM#* zCbRxdU;8hsl35D2SW!kk{iOc8-oe;l^fj}?jDT|nI+xtKtTEgIN1|Nh9`4CmWH2<( zrbq?3Qp#3tIymTb-*@i0?*-S=NBIr%bFQ>F8PbOLXnj0}4q`=NH}MO-VwR=ZjO!$? zzMOQ{uHr;(G`^>QK{w48sJau2OM9d7bNmUH;@Xo3{5m)XMG`+412}P_w@x_he&a9L zRd{Ch<6asKXu8gkrTSy^kItdf#%wQ_^_V5t$y3FqA(5X z<%WUA{K#v;TCt-n0;VS`ox&&%XqwaQOX#4r7~L?7z+Ua1cSCRKC25=46SY2@r)*%y!xttFJoN$)(E3!_n7fNkuuGtsW`=W9uWK#T>Kd!mY5H9?zur}Q zttaXhB)H~U`|MGW(wqv}x5N|3o#cs-5fS;xDM7+gi zac~zP^+{)-myLjX9(d}!*Y*mq_`P)t*e{)9Rt0CSb=R(A&4G!^Ap3xsWG7gMotpLm z*a-j1y0MvXYF>?M;!LcP^0Ww7f>XI=TncxUy9NIU+&nHn{Q~{Iig0@E2G6hlz?qtl z2BL3XW1QVcP-JRSt97x$r!F zxYpfVV%!4i$z;}nDd1!7Ota`T?jk%F4+-Nq5&o<>+!Op8;ZS`kMLD{Krlr-B9dm4#qdL}^v_fWPKF6UzcAX#r{P+efGPdvLh}OJMR-f-CQT zKpXg4(oeFV)R5MqdC=NF#Lac)0Asxlstb**O~w)+O=7FARmbF**TcP;L-P(Hwj(@`CoobIB3Z7dq3!AvKib zC88kvo%&bJpR$_C!<|GTZ+cf4D33<<0?Zkh4+S?o`%)fG$Ro+sk^!ra2eA zrR*j8fGFuk8Jr(fdQHsYw#rAK_t94<;1k5oz6qk}yDd&p_K8E~B4QD#5X??Sb3gEd z$u_usKEqYq*Itqp!*&~`98a5W<<^Rri`2jMe(F&zR_m#i&<|^zxm8bqTL584t=#yf zZZC!u(NinrAfaH=8!yp;rPgfHkKv+zxn zNXC+J^ci@HT64R|4Xz_j;dXmt6^yYg40MMARtMi{NM5Gp8y zZzE45J;b@*POg*F92iN^|I^A^|Ago3XF?Oz?VXbZ=vrGkAJ*IRTeO+nYjp@cq!uD`wA%PDeGM7}Nzo>DY1GUui3)kmA%W2bIXKzd z0~wm?bUr&rZ@P!+aNzr#uy}IbU?@%d3LfyPUXF0Iw<6Tq+Ymb9l@GT^OVvZDHyCX? znI7~&JeVoHaWAlEU|w$Q%*H=E&0t@UjW6wf7Dl)wz*+r5dhFhp^0En%#4d|T?kAz8 zJC!d4v?S^x`k&Jfp7mk25IUWG*$R6a^v5@#GFCJEk7?uo+tlY<)#!GZZCPLvyvt_t z+o9bwkkkjB>Ps=5+a{glUrD)z2ziV!SZXgU1@6%dp|bFpJIt*9KkfgVB+Z89DN zxAJ8CH#Y$oSkFj9p(5=F?_WWvN+0pbWEY=`JMiC7QLq&i=fA=m^_-*d&FvA~acd`C zU{xTxbpZVZwt-_#F?YNBtG$wyh6%`Gb2{*E_u<0UkK~z^NIuwQ=yca625Um%zyaff zJI!{S4k_hIaIdN2wZpr;J77^*LmohHQ=mh6o_j6C@_nSC{ABr8*mQj5hAW?`C7&cW zq{BF;_yexOw?Gex4fbZ{Env63d(INCrTvlpYrc1P87-YY`f#u!r5T;nSGpCxrmNw2 zBcQg0r`~f**3LTV+7q_e=#RQu#euRhnsx?%eFyRf--ibPJN(viD?Ru*zKz^d-!xjp z$CI3L2HGrOq|qR&h~K(A(Cv!5AM6-M2EOnw)+I{?rs8>Xx3$LnW+7{>JwaC_a0dda89@jpR()lu+0S9m!3kwU} ztK3CMVGnmcc=enGuHoqRO?R1fg?%u~piI+3uvZ6jaurCZZXt)9x1E zteSiwyA9XPE%|B)iS?LXe zOrhakgfrqfvcT#_OPQDG9OFElY)qwlj7KD7npy-`Q#3Gl5z?)^5sA~e0jVSWj{M9uVJ1zl^y4|vXPW} zHStJqm{$#zW%p2wn;*wJ9q}eR3jxK&t7F}DC!4qJ#fD^U(ia(%wg2?>>OTE@c&k;02d}v^j+9g$fHz=oC@qD?l5!i*!n^DZNwPh*f-}#6!waVWT_@IEcU= z5~|P*Tu~BDAA@_fo;L*z0m9&1do3FZwvC*?ip*sn zafaE8SbpaoS_YGoLS7{xp;$r!ohB9M`@k(KQi+rLDf=Z$ZY(X6=ZJ946(&g2I8|&# ze-+ySo%|1=V^qQ8_?EaTHv`ut>mVWD62o&J^|kt-rqG_#w7Onr@MlcYj>FILqgx(s zb#KA8^w!Z~(;0RqdI@gO)19r}73Vl4xlXz{?0ZfrOL0n>uH6_?tt0j8PNFu~{iw}h z+w`r#BdCK`0~7I+8>Q_ zot*err#b58bb;G=4lq?bWzC%Rtd7$R{&@}zqOj8p{IUC-@z&37XR|(AXRPpM8%1$* zGlT519&;C*YVf^jDqhE}MGBOOXZ%=5bbO#s#SNsSbPUHx9x4uuyJxVY|BLhC2Xr;g zMPb%Kej)8iDH0%;fpqu~9l{A{4pzK$G!1t658QU%SvLpEa^E^**e83Y*TwFKs@j!t zZhHwXVV}fH?ZNn)oq>u#uY9R<%B$q=0usk8uL5xF2Lmx_A}b8NkGh`9{)Q}VJ#-yB zVu|z03GIK6oOmoY%~QeV;%}QH}PeA z4P+%-&~o-hTGwts8`-spWFtJyf@Ze$gl#etm}Pu&?;H2ry^xP;Z{B0mtn1!*r#HII z7#fae;OyLVd`Sr4Tha$KS(yvpmlkN6uMR5a%ZAeAK4`nt0d|rFQ87q44}^qFIoRok z0PkKD^#Cs8YIlqK%4y>Cg+5+wXSJEn0g|(`LF??aSBE$?!?&Hcp~`MdxHy}j7WGQ# z1JM|B3y=aPLjpdPv_y<#;@)Hl>4lGypHL6z&}WB<_9b9n_r>4bozQ&z3VqKV;BFg8 zo4a3VKVSmax3eIbA4_@TF8-*=sGXLZebVMQhW;;P#&4Q)onGcnFDKjxo7=~@rOqay z5i1}iAYB@cr_1NSVYY&flxuN@RGX_NeWj+r$US~CdB&9@7vU4Il2jrM@N7~M)ukWU z9=g#D0ZBySX4r|;wN}#&R#7_LnnR{rzvG4Qu5V&Tp$^U_?~S_^SXedDCCJMC2JDkE z{4&x5PJ4O84)l$%f_QuZJcrBfeIy5+$+(|218p)w-a=hQmsI z7M{l}wBEb#RY&*PGxW~QgD1jPuD6?pcDt8>Snv>9CeP4tFi2hnMnDYUIBzGe zh_8|)a)@T*`fz@}B>x_W@=?M8emnmb{)_ROxhSDNmmS)!J%pW*BKZcLu%6s=zB=c? zPQf8t=vuUa%y!|)W+kyBMywmB|7;J|BCQj!wfRlIV16*hSbMC?b{D6rJJ9XJJhzdz z&n@VUbHl*)tixj68g6N~pwohlw1;|W)%3wPOdps5xQDR_yWhevQt z$$SdFMsktV!+pphZ!s>%HlZEPZ@?G6!pd3o*a$PgN|--`EABC4=5+746^+h8&T@p) z6JtaGF2bMs$jt^c&!YBW#@h?M^7djxoZ=+I?Mr3ka@R>Up%E{MQ^aE8 z2Ps|HCU1kCNnv4_e1h*St>(LnESIE6bUJf>fv!PSUsLSi8yH4Ju2 zCEa+~Dps`bnqAC>=0lw`8)(zbdFn#zq&m;;4^RCbdTsZUal!rBs?Gw=Eq2;1>E-t3 zd*#s=4?&u45`Kjq;u!o2_CJNlBHRR8;ET!MxH2t8KGLz|F?W)z;CqpG{2F|mUytJX zR^D5B$t_2^IupUcI)$~ga=DiI1seX>>>G9}*eg$gi;=lN1Mx1B7PtU+oZRACLLIPQT%x&7`jszJMECdvz~t2JB)Snj zB8TBz+z0yc9W08w8x4?OpXTveA@8L6m}RQHSYs_e>!UAs`xy_Me&z?r6koIA?DytD zJId?=*)toMK{1f3>khy3d>Fj)V2dBmFZ6baZ_qe-9^R^4#<9Nj_?eOopOzDmC+l#d(sg0n^cM2fqcnt z!hW|9U&WnEMPSDL0{yv=djKT>tEUb;>o?-f=sS6ZvS}G$YtJxN^(Y5hu zrw2Y|N8r~M!c(jo_)lvs<>H*DE6)w^eO_E@}k$sRl%4RV3Tdv zSz=#vcGySZEt=rAcEWBVJR>xx3Z$%ev781|7*e! zPL`3f@SE;ON6|PA7|h&M?jz(%eg(t$HfUg0B6r9fv!9t_#qPv%IP+lRB;y-y15%n5qD5Ibnh$bC5v&jp_sZgV9zhon%mBzbpydyT z$r(^-#QYwX&Uy`{JcyGTpypy36f3OuE<>y4Bl+1aj=$S=y!BQyx3ReZa{8({L7!t( z*H`PQ`grY(!D+dzbLs)RxwhEdsoiE-dS3L=c#3*hH^6|f3O8{E;)ZTII>+9i8{Qb` z4-Q3l$a1up>x^Q_}uYiJ9fMR$S! z(Un`sWueJ9-6rn8-X3sPZ1E&>f>R#OMa#_>ZnE~wf~lC5m9;taRo$f?RDTcs0D0)W zwxV~jrl^#*W3!Z*f#B|Q3<^EIJ?OTBkaHZ@xbc{5TuKFfK_s`5!eU6UK2q%C*worI! z?6-=d1t<|c^9p_4^Xa}`AzWKCv&y9&`<5$X?)Q2r#@Ah$r&9Z*ZA^}b`)4i3*8hO} z`CjU=zxAb|S~M4W1y4s$$@CqM>=3&m?o-b7Im#5=82>(>lDp3jZxR|53<#^EZtIKD zPw6khhl3G1bmwp*>nH0`+VIr#P7P~f#28{p&Ly8>>S@hX&Bwk7mUtK5c3Sld%I9)W`5pNfoqjkgo4(#&N+adpNe=lPS*u(O6im40Oyh;9 ze%aq=pOU|2_OW@VWeer%r7ZM+=0L%o` z{Mx5bcPpp0NVD{pu>BgY{%*us%iNc2Fd6K6sDbcO2D_;Ag6$%8=x<^r=LOn?W5o}s zj#%HRO&78;{C-?ryas#08|1tgCC!u93CUbh3AO~vM7}F(V?IZQxzSqzDZydjzy3{s zXN(UW_I|g^;MVL1a82crEI7&jMW^yhxKdml^3C|BUjv%A1Xk{e)-|u6156_z(hq05 zaAyZQe>s^>fBk_rkbSgHlQ+oYlF?f3Fjv5Rhxf1!@b-n@k5C9YA_#h*-SJjoskd91 z4_3&HBr6c_PxR#yzW^U@v6u%k2z}{0ahz`zICj7xhp#)UyiMLd`WnU1SrM_3MI=ty z0%qe&sDodF(##ccu7b`|52AEte;qO2W{|nkE zIzB2RPKccqH7eqGL~O)+_Zo`BMU@6-C)^9{e%JUhk$ppV-1YW2?#Gk|X&=*9WE`{p zHVaw3_3T_{*h_}MV7OJ>Z}#>kr#}w2$>i4>---E}}d#F{^!|HbJYQ!Y* zhlut38?965Im6s~YDz1RCMVS~`#%0(IGOJ9efxau{ak#+uRvF`xH++3& zj#Re-iD-CeeA=*#pTGZS9}Hjf^%mMF&4r@g2eX%(Xg=X9ps;@g_t+04Abnf#AQ|n< zlZy-KVE4}9?r@gFiFu;bI^wWzLCg{oD|7sQ@TwC&G#@aBIhAAg8S35*+ZON z*d%oqyGJ(j4~#x4SI(X*dSTR0{=pHM(l%+M@SivkGO7>Jaq zAf;LQ&7>m9MN-zL&i_9A`_^yiUw3@^`{Tr<=3nz_6Vn?6Po#|tv(R2+o0W&Y;cu~V zXeu8o*NBLYYL;EhQ6~F`>}%p`#2?I#v)#xUnd4Jr$+*(~#Hf$wTutx%w1t8<45*Dr$ne8^|_b$smxOz z!p?dWT_AkMdHh3_ek7MyTTbB;0@Zy5m0S^xf$>v-y`p2)O6+smMq^KUhPfd;5#5GQ zXL&S2?Cbpr*6tQw36jM{c?qZ_@Q3d4C%H`N5hwV56DkB|3f*Iu`d0cINxkr4=La^y zNwEvqOO4L@O)J(JAO1!CYD_imhg*jJ4aH^^H{XPk&A-FTQNU>|KEo!=ubK#xh1&dX zJ`xf{FChUEj|`e$+O8y#819Qx3`j=5nrE%5;IetpcuaA)&~dC(l^ zF7jG~8}u|Vh-!*AeQo_iqOwKS^|$kBKpvSUlp&3j0YV!x4Du@1-L+nObcj_1qf&Pi zHm|t1Eaf_-zEw#1Lht)uNJ)Xl(m#3aIL=9h>C_DUh5p{4+9LB)a2@1X-x;fevyBs>gNCSMAj^5yzm5dW zr^=+E{EtvhcqN+B5r0tr$Cpjk;ND#q@8Yk(G=39pL|UQ4bd=W@*+6$H>zRy$tZsGI z3buor?0rCrsR(4HXU;!pwClhPyB^EOmZC29b28o>3*Yd0((n=gAEox;+5AsndTKN7b;ZhDk2GF|zqL_&)7qyJz3 zX1S_=3-5`oVOu>(%QD6Qf%Swg7;VGvL(3q!*aq%7h+EEg!3mI5{0@}&h3+&r4Zp)7 z;H~xNCy9-fJ?tSFrQJ1`8STvN!KE27-`{*5n||i&Fl&0&GW~2?)r=FLj)a_V^Syc6 zb8abaW(CcNVBO#y@Xoh$e&jf}2ylIT(hO%iiyh$)u6Nn|K? zhSI`+20C6X@E2hP@H@*{XWT7nA#0sFNnfs4)*Gvgyp7mWzvhp~1D; zjs#ZJQ=t;Sg1^t@0G~lAZ=(~o588!THus^^$~`7-5`XrWRBp)GfEG0EK)KR~+|%k*UCYX)ZAdY* ztd!BAyqQ1hT>2DkX6pA)*WeH4Q|A?hpV&WK$l=Q?q>IIr338&ZuPFLE@$~}*xJJ=a z`Nz>UgrN~T=*EcATuuct;Bqu1{r{s!!NL6oXe?93w1~Fii^%=%IWfhaDD?G0!UMYp zZf2*tJKWDO$$Ab%o6XumYZy4UGu6`e9Id-iPCcXM56{f1n^iA-R;?18ABs~wb%b_8 z8)Nh}hPdY)WG1PI$>s#U6B_I*!MFDLgga6n+FAIU{3nd%9*GY`o0O2gL6Wx@`Bz@V zuaNFKeevgT8>cLobQaOczI1mH-$F&^02Rb9>Ki>Gt4=UIW2)9Uy-8@`_p0fmvs#DG znMKS2KWwXCz_e#NUt2mX9QHp5yo~)C@gizMbfeg9F;}xo*{|kJ%r-Y?&&Z__WwUqA z5gq$HTZyRLG0|~rqu;`A{ZF$(co4o}KahT-7nN+>CZH1kN^4nHqz6tdp@(zG`AwT_ zEK#ScE~qy8eBCa?zCC!MVXJnJF33Nwbo#eJz!gE3;8%7R>qQd7Hhx z-jC=jP(r_RPw`XXD(NdAZwIXaZP9JPr;x&~Cgmqp$$Fb}6U^L3AVO_y@%mVw?EK;W<`4BfFag1cc7v6T#H1aApGzdN*{eDTks*Cu#z_u`(%(7X+E-OrEnZpi;J zZ^7J~a{CKD&R?J)S72@K&6A87xGN^J(}yb$A1a4#id~Bo@M`IpR|0=WU!jo zrQL*vVEkO@jmwtW=kz(j0%=x)6E~rX4C;Jkv1*M zf5!7@ByboDfD3RK+^q2$%QjpelGU?!}~9v7JvQxb#~IXqcEzpDb|}V+&lzpS3F2b82_ak^^bvP4 z2SS2k8ka}u?rYB%Qy!D<@=RrVWdE4L@#6ztL@R!?08wsf9(_)pu=6lg>uc@w7TQH& z4;n95B%g!_z`ttYRfl>1DsPlEF1#zVfOX#b%ME$Y*m4vHEWQ-|uC<5TB^ zD?(ibT+8>+$}`YU;BpmU3YU%E$8E_Ez0SIt8cPQG{s5|95$zB1MxW2k0>hkOEnz>RI(%(qchrQyl;|TKAy-H%v2TRw zPYk@4lOyv)&5G$3D+b~tCO{7KqW#&izR$~W-$s4GADVrgnv|KUC3i^8O1hYIJ8Nh< zkM8QTd}r{8*vYJ_^% z82mD=TI#=@K*c znc!}+x0soeSNu)b#z<)XX%sL7L*VG4co!RfIoKvl7+@Qd%H-;G)>XN#z%tdH34e-#}ibqrh)8v4t- z|8XUNwZ6iRV;kv8;koi%{)h9si{vNne|~}HjGYJZ_FIuy@V+-B(752Sb4L5 zwEKqDzO|Fww?#sUK`j>|(??2p3I`JtrrA;WOHP3#FHoH;SQ_A?l5vwAP z`rh~!@fM=q26HFb;-;BOxUKmzR0TdiXSsm;QCxyc@w3=A;FGrigY6#l3(Q@nqh3I& zT;Rnq9xUZMjm_rS%y35A;P~|6<~S{2Kd`S@YoNvGIK}ZC{-B&3QAjA^%OYdMTfRSF zGJMJRm-0;+9~dN`@X5j$a0aY)E~~Ba3GFFaW^{GK!4lBDDoYG&nR8y>pLHv=7!ueA zy`?~%yoOHd#o1_WlhX$7pm)WN&~&;3ssC;AmdMKyN9816BK<1c(5uPsRR-Ed4j}<1 z{ms~UOI0fcY1W9$9-%y;_RbY+5!_a)!x`4^9C5KHarZM_HCK4LRm+&=lnn3F&j5#_ z3hQV|sHEE#MdFH*EuH%R&+pfwQss<@Kg0~Vov)bEH?TgU8kx%NGxOLVj94ZI|FbgE zUG?vjlbKdZ{j9C&mBQ__0^yG4GV?l+MhxW%zrwc>ukf$%c1N}pJ11O;JeK`vM5EYz z%FKvI9185kQ-n`;Z%77ue5$uo?2Km%?4f94$keZyna(iUpNkeo3xcn8 zgd+?L9Pqu3z7aD&TP^?4sC7UZ{g0Gzx4I3rA;#5=8P>M20(rQC&ONIv5WTw?3#>dw z4*QYxyR1Ui|2EK$Zlh5`Bdv)&I@C$q3loNF#w7hG^N>+Eln~U7eZ~fQhdU!&6~N95 zJHli-@Q>+SMS4Q|z{diYJU8&b1oFy~<#uF?#M4u>8T!|afvmtM z=&OCDn@BETGKjPjjRI2IMEQt&jr&zI*cD*KkI`GfeF*F=P!PhC_aEHvbT5WBeK0Vwbc+NUy-V<8U7c|;|`i^3&gj!~*yV=}rPPa?C z_06ePGoz|r*L!Gd-WIcl_#MYWZmfmMj=T`@CDQS=iXi^G z5rgDWf&KV~u#;QC{~K}GpF3tMc;pZmJXvtUzQR~aPzA-)AaP-m|x z8UpsV#b_hgphlCe{46+|RSQivN@ga8^k79JcS=k3#K&W)e|=C+{K>_$1NvZs2iFf-G=z1J{Mibbu4R9Fi9<_ ztql`(tPbZVn&#z^4iQ0q0!jHva-xW#ok;Cyl-FL%6(JRAVJ@Fr0a{K!fvutn_)nTj zURW_Ir54TX5?ZPKs9sewLWa87IA;(ym$k|nV*F+#h6Z}k_C)@vR{+wWHoMCv+Vi}V zOd{vGg1!UzqOuDQ@RcT|;4TxC#&G$3&xJ_&J_b)Ou1@n(jDPS9J(GyPg+ogq+;YNavWjM9-xy)23RjjWFur?evPc^u5pUk&u);?L~Q~o&0WTb`s|3lg)DO+faV>AG4v6>^AiVnHCVn z-_ac|Fo_`h*Vyhx8r#FrTjQL2%ifQ{e?>l8hwuw_8FgY$96yV*1ULuY7S`Gym8o7` z|5lnH9YY5B%l#9YfRs!Ge`q^M`~Pfq4-Pj=XpPZmE16EPRNT$&!c=@QwXgy&dil{sCq*=U7|X&D}@NyJ6bS8$+f6$@O2-9^aKl z@#W;zasy?TG{Bd}50c807T}S6KsvLVU{(3%UGqZLH+#Is%yB?>t!u~IOWg=-g!ww$ z$0!!!teWZ)dw?E7j&nwMNb8DC`2p+vf=W`6Jv8p%~waKg_B*7wByYtTo?wpbT}OkAca&Uz*5Cyhxvd-~Ow(i5LIBNduSG zDEELc4M;0@xRWS1OaP}rzHtorOs;!v)m_awY9-s4l|=Q zK&t&ev8fEOhw>0ZI4E}XKjOE_lbn|547!YR0t>o_YdVSUe)v0$aHqTZjB{*(!Mi>< z)#VCxHmblqf1+`~2-rM4obNlAja0X?mEG3NP3|pV+~mN&KrVWL-ph=)mf9md!z+&q z-Xg&gyG?=V!-yx8eV-#YamS5Sn#@+LV9au!{{jn>5}t3Dw8ji2O_ z-g@xL$8#6l*T7({%`%@X^z4ens>8P`yJE$riaa6`l+LRii&?U8m%E95$2oK%Iz(A?}MNp*HXB50}D zpPU4vMHMTod1g1`E}H?V`FM5+&OkY>ap(fH!0rGs>OZRzaBphUZ+IOZ;mvcqJNfl_ z*3i&>w~TqnTxt9muCF~0?>D!p|MzA(g z4R4%Jr;nuTWR$dubb}P^<3M3?QJ{=;Q9O>5X?fPq8wQD=JkY4^2Ni4+}Z$e8PF}j8ci~9QX{$us(WrJKB6=41sr};FY$X zJ133$?1l+hA^QZ~;{3n|os*=gwb8p}ECG-2Y&TL%(Dn!Onu&T|-O(BuQ|u;)<2Dje z9BQ|t$IbqvmAfAtkH4~Z!7L*Ow7~M&#mLXrXymglIETTaxCjg=t57kT%gx0mve9fb z(AO{F+wN=dD&IF+tG}29!mY4oL3)pM$CZsnw8dLXzM`pwp)6F`zK>oS-|%?z5L#(X_NKB)kn>4`Y|~I@ zGAiapaYvoY_<`9DZFTd(l=3mkW$v)!tbWc0R>kX#CVB6?{p<^`^RyizaDQrb#&0tNjIp~=66twsa9uec_7B3rrtx&@rb&Ro{j{RZjv${d3B&Q_tJ94~*8tH~9_R$^|tR?I0xNV+(KUkvBJg8VG$fS8|l z0i#GVU5P$}mwKl~&32{;NzfEqaR$2I;YRb!8HE0ZHa|FQaB=YJRdOrfw&tJa;-G8I z)K}UEjN(Rb?VO%y)HjQ;^|p%ta>qb(up!U`IpAkZhlx)NS4Em9)D!R0S8xxZ%1`_N zE(wT_xkc<0f8ASv=h!t&M`YbdV~u>rZG&q z(jW4M`W#Lb-p-qNlKZ3;J_M&ypLZy{)EnbvRU?6!utgd1OLvzmNINu~WJUWi(YMeS zl^P92ZPhTd-M|J3_X65uTiQpbqD544JOem=r!X*2*#p$fiDs(xHMppN%UVyE?8!d>?rJyb?Kr&1LXU8nGn4l6er!iT}jzR)KH< z=*^t4?jdX)0orsA+5`8;wINZu3hWu_Wd(FE_z$WWjCC%mCstMUw_V)ia4rDjs3H1c zTUG)85kK_a{C}Kt{uIs{|2W(cEE+bBms?FSvCQ-ZV$NQf&FnJJkifUdLvn&;U~8Qz zxQ4H;xobB;gPmMB(wVKYk+uAy+Uf4|7KSs1=J8}Kcc>p(f!o7RFu!P`cdPcmbS_8k0T1>+F&~nn196;N z5+#XmE1w5vsFb_`ZZ7;JEMA~edM123pTcLLypSpeSQ%fvAtbjLV-1%@X@2pZx3Wo2j6B=y~hlc z<#cXd5zd(TWF)u5FgHCX-dpL3p@ysXkakKezsPa=FnVb&(qd>Xdtvff(cm1oh~ur^ zsYrUeF{HDa0Mn%keMz5M zV_6w{0@(|!J0RmicWyp9OhyAuD_)NW?@m3ScxH#>?`X5f%rI#%$Q1e&@2+o%Tl$B*2qq#h zIFh^Y=LEXS^5Ain(zD27JcB()@Fqu3NgU2$?Zy4A^(qrhEDdyK?h>OHlbT|s$q44> zYvLIng*t2KoM-`^(VldNyyT42Uz}X#g#Ao!v;S2Goz&((HV~ZZdBCZSpk*DW5w&(dP;Z@c?)B~D|_w1|UA7(?oEN8fuN*Nw2bMY&> zyO^U}^EK+D+f;6LHP0%QOrXZWjJv#B$qeEyJEF7O>-9g@b@`gz5rbF}XtpGiapWxj zm$Z;~s4?G3Yy1|^1M}$wx*9t)q2)ooC9Pl4^3HO)-if4boFZg~^#-T0ZsN`C6&elP zvE?eO8{-z?Exj&sp1A0>@y@}0>^48^4)cD6)2PLAfSG72i7{dwKPIxOYH9?y7UIx4 zaRnC=V_^Hgn^@2->I#Ok(ZE8f3OTQ7w2|2hWWFyJIG241@DS$!9&2yL9qdU!y1K}= zIgQB&;Gni*D`-X^W{XKupl&>NT)VTi znEkY}u@?Sl`-(rxX#=K|4lE<7YOjQ!RX0)_+zuC!RGZWqc#k&XrDY+nvdrjZ6K%p> z_y-ru=U`l4D{gp3>=Ik_a&?>RQnzVUxSw=U6X;ZZ6VmDySR|TSjHUyB@i>yo9!3X& zwe~XDBisA0;$J}DonfU$J*^Tze$I#n<67n*7}iE}OO^F{%V_VeeC^&*AHxCtB*@{j zPz1=b#muD8a+S_KV}^^fcnqA~HY-EYqp!3(nh4#voOlPiq#KjLrWrFRJ9O?pJ9Ei* z{}h_m{{XFxs={vgH<_Z~AZbZUiSl@`D2A$tnPOe|x)%(;g0^Z4NcVgOdPaRPxviAV zNPRI8JgqlaanagJBAeOoq+oRw_{q!y>L=srAF>5^#sgF{?1v=88zFQ}&&c255nKn8 z%ii8y03P-l(ML3vXQ4Teo18U0>2iG^x=6=qT}Zm$ zW%B~haet>ECe{?_X6_`fSVbLYrT|4dHB3PE$}RdG_zN60)m%`6bO5Y)^$a#g%yhW< zH_%l~3O&MPQ7zqM%#xvTdfsrR6&vK!cPr?Y})uJse>ri<|3V4zFyOl5KOJ_hd#NlGu{ztLXQ z6#2+-c)o&F!BmI$^K`F>n(sanzF_bS}^Lcec8XrvYd{rG@Q*f zYv|0yiR|}!D(pSM`Vu~EK0wz#Cfrh23oimg?+V~3G{xzGzxshA{aaksrNBfO1u5qZ z(1>m+zp6j*r!+#qjrL4OFaVz<1=THDL5;UYDWCOLq+;8|MVefmCh28vyi`P>ZXyXYi=kj*A$l7is7Z^~m~ z2U%5j70Go&^+Totf zxH^V}$p}ub_p~gTz_!6BuC(=;tf#s07ih3Wu|jk+%VsUK*0W327WN+<31@~{EJT;W zpBMNA^dz#FFW{9}3OB+@K&4+TPXh1akk}2p%A@WtFN0f2!~}19S%YC-JeWg{4o0b= zK&>j`?FF~xIK$9Z;?hpmYdd6T_C2-^`%+o8A+sE3=YyT%7xje>;n@lE7>@PIp>*;t ziZ)k}f(~MS46R#uB8AyBXtE^6*V$Awimk_cSPGn-q{81!G}@>is1tBb`&V9rHs4xV zL4Eb0hZXK1)`hO|J>d+}b8kz{bLdj?E;L7Xsk%TrNKEIMG&G=FGpH3=A9XrbR1afa zl%K_^JCJKUM9aZxZ3z8p4P{%Ik6F-0Ok|CAGO}Y%HTu?Bf{#K%y)wA#{$__&MmiHt zXsM)YF7qCGnm12X_WG$@9#cuZ4ziW^p1rx#`DtS8zLJWsOngL za|XEMD`9U@%^swW z$ujmhQPrx+^RPeRo%k=ff4$?K@o!NSD08O_u#ELCvjom}F=Dj7;T<#6IM9&2B|3|H z1C8eAAiML;TnB$Hc(1@6Pw+xj6c+=pR0EYuQaJ6+)nC;(ZWikk+7~4%*@J7UmAEt)b zXO8hSCYG<&b44ZdP<~f$;RYK9N6b1olRL6HZy-kT4q`oco=VAH;<%b1hnnkZE1m-r zj~bAjoP|1)cytQChkqW4&ykuW2i-z{0*gNj+e(wLd*H5K$I4hGSO<7--@^Zxr|2}? z>leViak8$f%F042PA*dIO)BY`2YfDqZW8=o8@!qiB|mv9GD>QaR*eH<_9 znP?=PP8;C}_Cg;3$734!#I1+V#~ZT^Xl@y0PuxfuyaVRIey}EVRuqh{M*S;K0r6*? zyf4$q?J}w8D6hd3qmFzHJl{G%Y0s#K$tQX?ba>0jow~l53+A6@_!dme)|v&-^AEw3 zY`n9Mm4od-3gCMUv^zTE>_q-1tdwsler|U(1*{ypDjN-Fke7To`sF<{&%K~Y&byhg zS5P}}E~_pJnXj@4>}DcW6J1g5G8=(_{~d0PhcwKmzh=sn}OuKX-|jYjU+SKjEmBZs0cd(f79l`Z+n9V*&9&`yBut<@8HvRPV&qe z4!ooBa3-0pH>(?}gy^I0dKpv+kEnKD8x5ykmCu(W^o(tyLalltPmm#y7oKp&`} zck%wZtxklu;exa#-AQ|#8jGARwl&&#+y^k!Vz6i(=c z@OgJ3IqB{ohunH>5&vZ^lH2U%I@&o5#IhH-o_(FpuzXfmHqkB%JE)h2+s&Y{nMx<~ zwU;C8e(;>_EGt?w#R&RA&ZM{0DNW6Bf<7OJ#2;GEi@F_?M+wfUxInXjzg1I)UvcUb3Uw4tj6c-Qm6yDwRf~Qp{)s3Fj z-PtLff;ETxNJbnF_pWtdiLZ(j9dEL-eR>By1gxt(&>3x_Cb4Yr)DmbYYlNr6mRizl zKy*DtXOo(24$4Qj!Umuyd;(g-%%hK}qSR|X3)xi@0!mG5m|_51fsa&uJxf)Ct+e0Gt5<|; z>QZ4#yRHXzk)3Ff`UmFjKVkltmL#B4Yq@;W}AV22}~EeRG|nae#$R9}b40*IQv3to6;JmS3BjV!T8)u!fpPatq}H882QyQAFr0rh&3Rk% z&3gqDzf7pLc#UGDi^r-p)DI4%a_~t2ik3sIzW!78ra%MV)4(U+c>g;mp_2l*h$+}N zoE6$(dC+4%NOy2Ms(qmxs!(W-nj0FRv3ter^j4zf;v39@KVhJq;Gd`s*lI4Ib9e_N zV>6oJWSPE8zQL{RhzhW8DldDXKEf?+Ird~~Tt^jx%-(%-ULjNs+DHGQv*0TI8*inx zab=bhcV|}+r>o6dvRwX%MA+kW>2L4p)2O z4V_BlR1MWlHQ)5rPf%aYXnK?0UWQWoD&ht(ZO;}+Kz0UZlN8XTtK(Y$pT1l84*3IT z*MHD@BhhCaMPhVyI$2+4BXveQqiNwRLIZpqaSmT=yxAUuf3WuWD2YX>QC8qoO)+hN z%Ta~b(zo183SQT$bGV!O5q>U5xueB-NVc!?j`8ZEsEANaLB#batCr_o%kIfOGqW)t()--jQ-vJfwK0oBkvZOc9F08^rLE za2^hN<@gzQs#hrd)N2`*{E53o#Cb8YkT|Vg%JN_d^yw-Z>k;~fu4VFo7qvc6Acvs^ zxFM-eYXQko!PG3X6YJ#m)%Cpw1KAe;EZ-g9L+6iUIgjiV_El&Re+4>26y>BZjv^UR z9ehJ~Mt9XY^GgOy8M$097io2CQB+qKhxI;@%Vd@nfeaOe3hDCD8At@1?n0(8BvMDB zl5!E+B+{bi{H3YP5148|ni?)BJS&e;}tW5r%?2B(F*#;iyZT4IfWDk`^4**%Gn<#`% z@mVHP^e~%6lqn}y!EAB7{zor|$vL#HdCs@pA63(^?wS~!X(K!4M@CJC^Bf3wTx(Ept{b|O^FJ`Xg^#X22$s+VD{dc$PO zF(ts}^jxLXe`yWRtM~FhpzbtNu|Uz<Qrh8saUD|K@dzhaW+FHdz{ITO-|V z<|i*t(&%EW9{LyV4UtZ9;I2lo-OfjL38tNYTTQGh|Ic;dCe|j?%37u~+1*r8o2Wr{ zVl~HZrUuwZJN7)?!is^D`G2|^EoYJfVX!vZ1n=$gs2$w*j9P14`8WI)yXrrDs1n|I zb;ouv;RhGpz?GZIzq3Q69& zBE7U+pvnyGlEj z!e?j~Cn3#lWybGF8+iXtQ^Rx-(FOKT)l?mx9Db&`i~;LLd!(0=tb*H-X%!IUeamB8&gomp^@q+-0!cE&S*Ye0yoa- zKsGmI5?uy%9hohwahj*g;j0eUcgIXHkk|2Ab>;c^hTWTcB4P3CyyRrX!gG zv-|00B{Ez?@xfl<3~C5xqzTptqpcM>kv&X3vQ_~LV4T;0 zOb@p((?SPRf(#T(CyzF5LC~7*wxz|BG^fp`rD6Mn!LTi>;=R85D{Lv(P#7OE!JYy*$CtIVD#cI*-^b#FPDP(?%u`IMGD@za1Omr@pKx*N&xH)iLR+-x7C+sAbsgp2+ zP@;?IDb9H}_&2w;_~e$7HN9#oJ3pge11-O_eon5Tb?{l8YZbQ=*<0)()_12Z8{oT6 zjFTGQu(O%O)>g1kZC9CTFVzaN!p(7Qy#zhe*Ufz61Dn)g-3d2>MA*OTDqgBu;%(5~ z>Zg91=jtLnz4nBLny@sYGYj#2Y?G+L_Q;B?g1Sy~g1w}!u0Uq$kLaP^W(Y9;9_h#O zolYa*I|!|jW?oT~3!bgLy}qV351QuU9$GC2!%Xc0exx7Z9wr5mCJVf233&^=qTIm6 zYlv=Fg!T@H>vBGw1Tikac2 zq7>gK3ag&75W1jJ(n;ni+mA-r5-5Vz=ssU*AeAy&-j|Ia=P^*;pPPcLxM@rt=mqFH zG|B(d%XC`cKi|Tw%yaN<-vFQSL1zNV@83*f;7=ug2hzn?0hb5ENFMf7FToXbZF5(3 zR%g_1;i)g&(xdor<-kt94)39|iNR{6xTy-jrr;|4O!BHU$kyHPBE5mcnE7-F(1k_; zlkzWu> z6}lgI#@nz#I5oUi-a&(AiXLb7h%S1A*F_a|w}O>^2+(1Yg0b@fq@}1?FAJbGdO4g~ z)6o$5i?wCTA&=a_u3>$KJ#0hA4@s3}bQD<2PutId>amDbVb!dE!67gOrM2hk$5v~3 zk@e>_X$qhp-wgLMCe%cw6vXvRdBkp*^b3}I7jGhNF9B)KGOp%9=avH*e4Qc)h3IrXp+c2 zg>&0aQ6uY=3DM-*!_hLW>CZ1n?JngP!hY{%=se_We}rp=6M_A#Bj4kG7JlAZRTLfc zPnq4k*UimYv|e{7>(vfAMpkA6MJe{2zoQR%Q`!$QFK^`yQp-Fbm0|h}xe|O6-f^>i zS#fiJbMzCqnFoA}P(@!}xW#Wo>8+gj3Oxp1)m-E&%0ph6F#e?_UZVr#EqtQ=(6$Zh zFVLu*kG|*)rk?H&vy;D7ay3gvsrf*EC1M(E^nc4#Dm`rZmYcpPJ0|13S|b%c0*$*^6oN_5eQOT;%Wh;9u@_ng zEyZ@h?SCpQLz|MN#Ky^?uP_MwW#0)hG4!b}$|{?xU}H-P#t0ufZl==brarY$5jq-e zp(AicVA>yJx!6c6iG9jKzH{(xZ(|J#EMh;w+SNR;6>s(ZFr(~ikccsmcW%a;sWe`4 zG01J?t#`Y)^}OL>#e0S)sR!YL=&oCXT=V{+&pBdyMPXJ?9;S`tW1_@!oDZJ&%lSUD z0B+X#MRs^LCz2mjZ}HTe7h_0O;PQ7=W9_YavoqdYcNUu`aE9;5?#qNg_S>bhc^moo z@XheR(8XZZ(5d*|p|0>-x&UPQwL#<_4D|#aOn%RE6L3hyib3Kpm|hhzHNj_}8*TuT zU}M)BCWe)0dixsKJ=(%4`Mguc3i@8M7ycNQEN~h!>Ah%Pe;m;3uaPJAXt*KYB>#eC z_b%;6?~^Qyl9tv!T-UCM&)YX)a=sibg>QE|b{uBx{$R=SwQvq{z^>z*~t`T$Iqz2peVfZn72>O0&h z$123@$geQNJkE!Tu-Gg9R_nzKy$d=lxkWK^oBz=x`2`gTd!p353$Mp7xFz_cFye1Q z4ZOXf2kzwX*KoYsKKzBJ2#-}CLuJs(Fr~5X3x-4|`)~CM{txchkLXN$t$iDAk|9~v zV1m^uVCSL>oEPlAZ-EsD-iaN)KUP`ihE>OrIzxbxXlN8 zO~j#4O}RZjN{xu?tZK$(Q6=LS$|Rv2a*q2@loUCjd%0hhf|ZGmoX>uS+Bi+YGm_gdUj}{8DWC>BV`U46sN~KImD-tSCfh0T z7`qM~Xiu_s+h?82_85O^ClFE0`51BAE*6=}b|Z#Zi6f$z?XO1$+n3QY+5?zBxphHZ zRoxV>{0M2%e<4@OQ=ZJ9G~AO^4|z zvlyO~yWsD50+*yKff97UG^dZC^P?fTd`M!ISG@KPd6~nZ@U{3mq2qB^f<@v|2W!Pm z2_A|c5!w|R5kBjt@yY;A^?__BZYx{88%08!D2N)y3#1 z$l9JXJy~*8k!=NH@@P~EvbuXwRN@s=Li4^l)0uN?6QX(>r^pCnn zdDOowS%Pa;#i*9{#)$6rLO%lgXDO?VRe>F)VRC}JfO%J4+zL{aU&$mAB#UW0dC9Jl zSV(ezw=0qEPB+}onE+0wL}ruqQZ1ux*!;<;^cRp?p^x%doau0 z2ItjH_#8gajluts%k;*~WFW_N2>;RJ@Ew>L*Tb`sMc1LN%)#01^SFcaA35S13;dYV zcH)Rc{!tOLB2q?_ikj!&997s!9p$hZ5vib9-B!1;#{iS&nW#>D@)=qxcbEpyn9!=6 zE};*>f4_yw4f(zOYKd$B_sMNwAX*Ih+8pwxyIIT#=NAh@IYh+}5sgAc#Kq8du_N3F z?pmwWCq7npm6^;mb;nH6bD>|D9&d%G$ahF9d^73k7of-vhj(#pGn~Eyc5o>@8ultJ za1V9Ze1cr&S>Vx*m&N!|$j)7qG43z9$}Ot0dTCX4{tqNMhwJsqj~c@M?LSnU3?~Q3 z0$^A41cLBvmYHOQr*AUKQ6aJrEyN39+Oh~`f%nrD+zW0`T}V=vh_$k|TXXF`&Qc(3 zmGET>Eb+|>boJ#8{B&;l-`aKksjc$9D`ca6&$MG%fXTa%7ehDQM>@()rCYk$buVv` zeh4Yw88E#ptnZ?urU1;sOW`WDfv07d3iQc z=4Z#jq*B}TVhdo0bpU4o64FrWBl+nr*m*6&BY=h;i|fF@^C)a?Ez|*KIr;Q!Jzf5z zxAF42E6|}MLaSuP_?}{RYyqAowyt+QwyHNgeko8wLi~kySSD9X!I>5`eMvS+LPQi9)p6#poX3J$loEn*w`Etb%ca-ls~HSu@XD=&hUzZ^{=Wlb*uX>$-L+lhfA-P4W-N3j&9U3}j&c2I^S}17+>3 zaQ|B1YFp)lu+Henz=asNeXp~tVLhBTUIeA~0 zZT8lC@CwzQ6i|oBV6gTr(oM+-l%2dFb;(F;H#zJKpqcz>*gF4omft_0b@cTI-&_Ps zV}mn|4J3(aVmuD7H;+td=s*=yt)K~V2AVa8Am27gbulqOfO}#-;eBW`X^#Dn7a}wP zu1m(EH2ApbXF8fA>bsdGU!&}DA&HR%S!-~IKGf})*#f4-7@8AHp8Jk^EdhnAeOVlRCU~IFPn!miaEh2{7l?PK03BA zKl{hx{r`;elEucmrQ$A!lLiCfPQW95l>rz`v#f~zW=*xKah{kG4{yrXBV^{JHu#Fe{Vd_U)p5$=TJ+1 z=|v@Hs5jPH;XVXcK}q7cchG5L0#I*6@@+vYfE%qOMgfelrW z?SR?9PLi7~AZ3B%UX2x{rP*=1n_Xs$prv|{{joec*~$a&^mBM9d1uC%77EMmJeeC8 zDiq%_?#A!FzyJ9e^|RHFH{aL&`18H!uSP#Zf4cm>9bX`hy5&Nz_+y}uoZ#=Z7L&|1 zxyT$+h0IMoSNkE4RuT3UQKW_1K&Gm{=xBWaQlnR?g^$p2qy`;NUN5#fNx~N+5T&Z>jj1-eH^%+^sm71q^JGE6UX@WM!&OP zgSYje6H5xSmG~SQjT9u8>dMmSu=oLn;7>SKbRY!2dEdlf@_|>!4#&_KEULS^U1S@# zC4c9RbLV==!V`JcP%$wwm`5H8Zh$lUSNS-UL466gS2;aTtpYdRU-FNM2F~SG^8|K` zZPmefemNof+OW2Z0%! zK$SD=L=D|m{7?r3*U8mg)XbElT}XS_a4xkI`Eo)ZdcK_?;(=8&;ukv=2*8u=Z(0vB z0*~xL;6m+Rf~)BE(WWDX{84W2|uk0O_me{+ml&GyA_<^llv;$ul(ul zM-e4$6ZPDF8U4ty6TS2On`mNScp?#zI$@%ym;}e7wnX+wFeN||9Q5^$YUyl=Ld(#p>Xev3BH0)<7as`I8<7pC!$vG6q-jt zV|?|vS8)$w>&0h`YaC>78$20&1%%bR{2;g%evA96sZMRK181Z?J&eX!`S5=5fj07& zAvpq<$-%&8S_Kku|M(lSy}m`z;_JjJ+WV;sXOUa9B%CbPm{u@Z-=#Z4s`o!=8pV1c zKGPe*cL4Vx4WHv(L*E~&ViHHaTOTg`+S3r7j zAS68BQor@VSJ`(wDk7p_qMwm#lB7s5BT`_EMLVYQ+Hz%>XUKp&4GA|vW0q~d*K1-pw|vLvLGs{Z@>ipx@k&= znSM04c|y=Th_-C8ykpH)t?hPtwLQm_ zvv;9;mWNAPy=Vu>0F|Ukt!vn0RZ&_NqbHO4vND>*v+1vHwEP-=%SVPY^K;?K@P50^ ztMTpPq|BnWns}XtM4*8{@c3n|MZN5K=7IG?t$?mrko57=;mqOXW_)m;&J(PxKL;D? ze6G-E#R}+lbwfL75xsEgsF_e zDyPmNf5|?)ki6)I#lCQ2IVRj%=5|*A>ED&MSf|cOrkChxkfds5zT+>Z1zifv_>Op) zm7lb?|0DP8cCR4467Z?qL()%Ec@H5lhm(WE6jRkG+H-EWXJ4`Y}} zwzl81-Zr+sTZ15V(!fqfCs+(mf#G8^1g*XtwV392a96Dg}ON6)f`n0mGkzpy`(7<&~< zYX4)WwKDkcLLHAJ{8;hHJ>8UOe>X9)n{tRwL8_I;vN&p{3||3kY0J zggwmXft@IwGc6EjcZ(=(cZe)%4UA09?nPXJJk%YW(_a!>&O|U-j)5%FWmKBX#>4s!8c_xte4U<8XN|Y!-#<>G8p8GFki|UM?;ZuM}65SBsbYWiX@60#<@NVw-6Q zExpWGkv-6GJ!0ix&+HX+j{P0~wxZA~wpR_JmxaN8eicP|L(ClaBea{^%bzZV242uh zC?t{IWgd;Ahf%rW@OWC7jU`L8B|kGFWM>LY9CINQli~GucH7{unZl zuEe{@0<;r9hV4mP)5&BoFO=W(gem5J(b+T+drdhp2U+qVo~^FYE3o}9NNW17vf6<% z&Z&sr{_hbx17#wjBTo7c2l_it{IJ3D)u8i%Gk(hsAgIGojO5?m0DiL=9LVz-96{Yf3F{O4}4WbBIIl(=odbHT~M z?ct@NNWSR*6CP85`GA6R z3Jnxf;1+q#{N=UL``jn8gIinFaMQt4eVfS@R zJcYM`FLWpK6Yc^&(t8DdrXReBe9!l&5D)6>+%rM&7BvuCz$AVJr-a_&0V$yOl8>~5 z?|&cj4JM&;=~`gpcY}=Y15$yVgg(?vHlEeC>a$H&J@x_k4jJIBv(?&8b}@qM(k*Zk z_zBtK)owmHCwST`8yguu_Um-~^q;HahW}g|ckb7y_<^zKLidA{yb)f0Szf({?12Td z-KL~1^yJ^!lfhA2ot|?HZsP1h*X{8pwcT4I>xp_pC#pr{h3bG`>auW#Z)4VwH`;IQ z(RrLtdZn+gDeW(SlK9`D-%dhY(B1+Y<8>w$XVpHi*Kg4Oi6?3*+=(ZP?y8)ep~|T( zYLfn`Dw+)nq`a~WxBxPuAN+{f;>AEVy|KySem42scBqTn443f;X#v)`4lVB-kxtONdfwI~$$5qT<5EAnJSrHILq(Sg!Y(|jePayZW;J6KmE z<^iq$7*6YaG>C=O4Db%8gHJ&jzQ)@UcHMcQtlqKEGw)rPi3`x(?+-kXFZ#W4kq_D% zesY-ZB$=3>W@j;UKd?>yA-#ch4onX8#VUvv+RCJI{D?Z0QC+(m(yS-!_a>kScz=#W zmCZ$%YF1RW<#+KHU&i~pRlJ{}60R3)7k&_Y6j~Qr9*PUE3ElEihPg=U_Seb1H0T&_ zkB`ZpxS^g3^o_o#r8%dUnfxl7iG|JjRPh*oZUsyuIovc?RiG~sf+<80U%}r0PK1)WSMNaLJBG>5MUDe7B|E<4Bd3wyJyWo_bv z=`mNK>ES)PMR<=~7cL>jxI=j&zL<{{sf3WJWMAD#-7|Z1W?UGRCpGXXT8xZ_jXSqj zkg>kLKvCR^d;4di2>(fw#uwIm>@E5@>kXOhlh8@Ms)y>6x`*tbFY~L)^^&L`?s&1l zedd{PDmT*o9V+dX3Y~F>hPHWq!cTc3FNu7@kE;lU%nN-AI+lNMJj_eBl8Lk*nMya} zHZXs#OlO!xw7bp#n~+GBOO3SR)Ej%J8S4zjL!Iu_a*A5H>1-4pFU_Wq8npnz-f#*vktqi7Ehn|y~6GH=d`;ccAWb%F0ETKSPni@Z$tY+<3rWL4MTUr=YhKUHrxf6 zCarih(DdlF<@5D#C-m}){j7Cr&HugU&p9T{xMN`11BO$U_rz}|1 zKTMnR(HWuzna2C!3VafL`>vYOvORQidYL77su{%AntaZ2)7Kwo76v|;R)IZ6`abD? z_95k`NhFZ;c${eGR`xQ4SA>g(eukn$8N#hYkHa~`_kePrm9O_YiM#w?ppGt610nhF zRj<_R&@$NI-2tA?aNt4?Llpx@aPx?kw0Fc+m_w(qweP9D-_GjPWyzfrc%eNBya{dL zc6?SGCWdDLLeOp#f{Dv^u?99C2}~hqH|EvH@fn?sPKM@nWh7ZDoYrfS7Mu0h!j)N_=NnW z6Dp>9!}f2fuFkUqBd#9g(unE7+vuF4l=4eg%$3SoC+6jh$-S%>t)$RrqptEQOm~}A9ss_NjZm9U? z#e0RlLEb~RBXrkK!h~@mU%)4daUw>}lMPi~HB8M_Bh?y}MKw~LWDdxX<%ZK_3O!D2 zHofFqyjjPw0gzo=3R9xh&V|SnflLW}ku4I$MZSwlAJs83ab&(ggTP}*uMe{PRyLXu zy2uM*o;_CWRjzm{p7QhFTW?CZkoPor(`^|4!d(_u)jJh;!P^smfbR>v5vjb}axV~O zYU-5G5nT*Vn?>Zfb&VZxwgTy+v9Dmn2!GDVK%hb7zy3oJn|z%EnVdDgVpdK&KyT5U zcsSl}a+^(hnrf{rIb07Geat8R(|qQa(H(vV-Qp+EUM|f!p4Ob;1#~O^K{nwhML{4v z{l^FJP2vETaJ zj}P!mq>%baYePEbCH-kFbgtVbkkr`;yS}y2-JItM+c?(}VrNG5ed~T?7goZ*oMZro zM|-TmD_TTd;Qxp%ZXq5WF6<=?C38mydxH_VD&9Nl8ivCI0N`|A3a1V;HwMIe9vh_b$-fgN@|UqP#w zT@hxiy@9{54}5Q3bt~h^ruv~crjGH1Y9X*Lce#UPdAE!_8{Q@sg`dNQ<__HOT6+8W z8+WF}UI9JXOMx7b3r~m7!$h5cltCNtAv_3gCM|F;*vh}B`N$t2bfktfP(8@9E+aiy z3G$SIncG@Tj#_)*PE^ktZZC2czyxlC{V-yw9T$1YdK8(*3PhfxulxhZBxek&%YgWf zPstv7x@ah8@gsaR*WPx11$z7i`B%}B*M-|=P5G4fkY9n$c9c($6`_A00>kViZ?UQF zwZ#j)oU}8)$_|KJ_Et5<`EIiN%8;gz9k1`3Y8Uop^woF%p9%5#Q(8@Yihi^$>R7*l zPT@lCe4g0{TPdZ}$T7MxpQ3$k1KlT7NB@tavx<`2*rI4vsYI>ro-s2svz?fk9WygC zGqYoinHgech&g6v=9n2~rn|*b)w^%Km9O`c*e$8*-gEZOts8#FSbG0i?3g!9zvT`# zRyZ%rnRXA`wd%OCouB;y@68SFRcJ%5kwjEpZA}_!!)cG8F76F}lFn;KrRD)&{2=$D zBO!w#2m|pz)Cd~;ANW`AJpb(0Lm!>{sI=1skF{sx1Zy^KXywGK%;U&6Zt?EMFxJ-? z?;kU!dugmN+=<5n&83Pzl=osw@Mzvwn2ny(1=tmblP{7gEC%9RA7vhSp^Uvi3G(VAX8NTf7~9`k3%da+!_ zEB3(bz$-wXAdjDl3`3vb+x-e0yF=tQ>L8_<_C`6VwN$>szFSaB(~8h?OAj5jEj$^d zgRa6EW=#xP9isirQqdyT?bttddGiqP>>fh9ZwGIQ%iw{KlDjKa6c#Dz=|godZ5ucY z+w%hAW3_;o3-VyKmG)v?xZ_Ngg5qMaFMUWW3kQUYcoyu=3gI=7a(K(W`lZ-6_Yia_ z_WFNVC;S0sqTj?k=sRX6Mx4`Zo3{oSu_uur#F2NRDZEwgiJ7&3sO4+~|`HE6kN+HWY$7lzqt=brFeT;h*-D*x&Yny4ucE=Kunnd;` zEJ$qet7&52Ump^8Bn*r=Ns2x|*DTHc`>q7?jq@B~X~7KI(Lnyd z0A-?5Mfxa>r!B=__0;u!YNbJtR55)6A^ASka^67iS2i z&S0UUa~?=11Ib7)7qR^oPm+Z;29wYWVLi=8w+I=*b-qW~#zOsVt+O$Da_Dy^)bR?(E1{r*pK3n@R8PmH{%}O1r059*B@z*e?Gi*yCRU>t`N4 zkK(2F#FVSj^Xe5bzcyBG9el5p3i)cc&=z$_aD_s&bkb1eGN~+XVij>-C$Ilnx2&y^ zRr-iTGtw)eZ_>Sl)Jffw(nV%QUq@3JVZ*StS{L0JKxN6oUZAxonJ}CT5`(n7{E9A7 zDu^@HKg72%Gy9?bf~nmx8d26lFDFLVN=N7ex&o4~sc8UTCEr^vm>r_d>=xws!45R1W-upPf3oMdmX1UKJR{!5q- z__WB;&K~l1UKfAVn^1O*7h0+g`Fd~mvx=LFoyeY^jdBo{U7_7 ze$$$1G_?v@x25cPX3@0YaTc8vy zfNkIhY-JmTg2<&3$qq)UxR#%X1YLjn z1f``6|4y%x>~yw3fi!#z8X&EOdSpH6h^m2MbuLfijRyC!*q}C)r7V}HK;SC}nD!~%gI z^1+a!_K4r3wM>34m@P%mP}k&TLr3H91{Z}!Xj|1&YGpCCJO>Fhz4rxGv24GC-pm~k z742`4dtgu-WoC@!vZm{2ENx?;q;=X_-iyrHNL+l!y^exxfNKq`{w_!`lG!uzeN`ufgQ9+lX-EmZC#ru#j&wvlXHW2Zy z@J&s{6`Y-KA?^8eNJ>?dit)vAh)+`fWJ8tr{u4-uPLvvWE9oV74Y}?@ipe_yd4?cR z2Etx?{s3s|rJX`xTOEq-SPuVb_UG-*n=E9;{L#ibf4Z^Me`p-?_nGC`d#gV9zVDzP z-bmnuToYE3yR?=li!0@+G@p7>NEZl@ooZE7UCG8ih+m)qf6eZODp_e+z|8AaFpfEz zk=@yCG<5zpEoY!jy~(cc)npTZIN5_AA?Kl6w4eW=alDk60^ZgI{IK|kH(X5SSz>4J zPiSyn2G-CapnRHQ0mxCb5xSG1bQLft72Z)?#Yj{&R$ zUcsl~Ip{gi(~|**aTX~B)81)lB$>nG$U>G2%#LFaX8rjUpFkJ20?_cccsuwH?=qVVNd4$RP_cm?dpr{k{Z z2kr&)@8zhB@Dw_+CGb3<2^NGAI4>!IZ=sziBR|Gv{}fO=5BQy6!rjzL=ifK``DuZa z(%stSO|mb#ogD?X?}x0uK;pXrgqJVw6@z$_&5#$gD?-Piqd%OzU|Vnq8d%4Lu(C%w z5SXrx3hvTQg)WD_g|>wKVAU`S90^ucN(XM!{Zcu+j6~oDSJZ9qBtT9kX1t9R*0V<4 z=%I)hJs;@}PflE9XY4?vq0uvX2yQru)@%KR-P9Za4I$Z`?l5;c%)y)TZLAznm9E0> zE~}bfsu_H)91WMyGRE%>?u`F4v?0D_s92n%J%+oWu4a*+N%3?#oMEz|M8B55$X)Gp zgigx=lNi*@66bMwLL43~?ani%d6k^;z=4{846=i`(neZ4kWO;6 z@lxH;E2&|qyL34CQ|zQY2IBTy;kALX889#2fM;qZYyWC*Tdb& zwtEQIgm%SZenR{U^@VKfF6BFpDi&^}bij8d48)>xY&(AD73726J6;3Fa-P}8Z4I{5 z@vd*>@ygf}ea%_Vmckq@n>!p$a5cQg?GIMO%;W-a^Ba35X<45GD`uhm9PNfaUw>5* zGpl*!RZ4$#fm~C&1>T!FbY5^1DIFYwf78aGMe0i4MIOfci_L)1TY)DBI%0F^2)u>< z(;}ErRdL(M1#fgqqchHZ{-3>%KeChf zbfAyE20m(Tza%NccEAMc2AqS_lWpt_D!^o*3Dto)#8a3M?Qj~h9L{5QA9{QD?85wu zt?|Q7A6Cr0=>LRyNqaB5|Iw@N7x4?Qqkd=bN*;sxSXI)6Zx(u@Sun4dD&8dP#0SD{ zxOcV_YfAm;T`5AIOH1%&;MsU$R<@s3@Sc;>ZZ#Zmi=Z~{1fJQe!gKo5_+<7QdcjNL z7w9$C@eHzyJS7RF6PZo^!1M4Z4xC(XI&1Az15e0Z&oSP6TZ{*O3sdHXWuh8xBcT%; z0RAkXgwpd$J-LPYSb3vfQzxih)qP4crG?x=N)T()BEZUA1R0=Zs1~~gx$dGs=iFjz z?s=o1^Ls489vc~Ne@t3rlgMDZLA0kW>b32E%scQczT$lHS9#x2UG^Plv`3}gq={NW ztfWnl?*vDxD?=>sCX}eff*ZAV+Vwyeb+FnKvYda3QPB`)(*mTZumLQ3wINx5$A6A8 zdU?@2$mmrA-qaMUgTL48d9r^iWlNvE}S)Jku5HLrmS9vqkY+GslCQM9}HHnzbg<_a&BlLozj2GMuuF$h3! zeWTt8;82EO%eXSZ2JvsT?(u&H%EdiUT7zdSrSz!K9?C;9mUAx#&p$}%^;s<{X%n`Kgr+TZecMSP9LCK^g3_` z13+wb{?gZ7enl>(D#a2kG;S&PFNgp4rMdWqT=E9~jD;Vp>LSp5( zJYT|Ucd$QXl3pmE=|I^R?uwVlR$&lnMz-MNs2z^*%qSJF%x|-PeleEGi)Ue{svifF z{{*wJ7Z2{pOJ+-FjP zJ~ZAF#isfizpQnI&x~G$=Ov{zJaJXDMPyX8j?>T1U<`^Lb@CbG`2qVddE*XM58(EJ z5ZSEmMxT{Fyi%MZPEFB6d80J;+bZ|Hr{V9ys6YuwOCK;^@b~UOd#SbGTH#vGc-+D0 zjGh^5gschu{Zx*wtWW&GrbTA*6i$7yFz_JSx<$$Oq?|@=>6lW{+wWcG)7Z7(ZZ(H^ z4BZXX6qkg$%D>5-P%GsLeCPK2D}v92qV$|I-}#cbf)cly(8Ag5xv`@{D%iqpcdtOl zsy?DX7|)B#y6`r_2LmP=02ygBln%{Qrm`%MRyw5iqDR$xz#3Q%*@_WpBZgfcoPp=# zr*1sV%!b>u%{|eLtfHOLc1TnoNToj0y=x{(1hMGz7cRf0c~*9*^0F){g&)U(uj!P45fV4u+Q z(B?p@K=1f>;jHcpE1lUr)|hp5m+Flp(|)}9vh(Y$kIjGN{j&FGm#=jb4}b3!{rGEt z-_CrH(t2o>7Ml#n6@=r(;FDctYKE0t{k;iDo)D*$;QXfT@+bgvL#{-$e5FOE$ z2foo}v|x(i$uFxn6rG+IhRUs_Iq++l4eaClLVvW=t6)|2*IBXUb{1dovKZOS;gJdY`B>PglThC%Zzb`h$V5Ab*~4p!9sn`+8Tmnqid)2=QVrOA zPn3%*HO1BRmC{g}s~#8o2XiWZa3jnUzmk4|sMt^N*cfFxm``RyQfxVJi%J3SzLp?p z%L2LJJi1jlCzh}?_4Y^ih(4HLhxqT*(MxV9hMikJQ0aXIs^piXiGn+PbpUiwYy zg2%}ru~TqGP{9%CC{G7#a>ei^u!NpN*R+1_V0rn^+IA?`m0gImbf24}*|=zb>!nfF zxvp<9-`d5TsF~gj1N-1T-VJ8xI@VydAvB$tt4cBdcQ`jc#@+3bG`U|;yurSpM@}0t zC0Zk#g7)DwudrHDy$rLf>4eGc5mttwqv~%cQ(&b&gU7jF=?}6#xZ3;&wPyL`Df(@H zfV~hM^8O;vyl&97|5vyq{2))22Gmrl3eS{8v`?sPH4?5G`80`zajD2oJUy0=%+c?# zN72?Ox1~ou|EOqOk7jUoo0*K}))uy3Xz8}cTdkdZF+CD!3O{h;Tvmn*1>*Ai|TEv?sZntkcc zf_cLk=TEmPq(Fu{1z=BCUYH|vgv?lGsV>Q&uJkA4Q_yA}fUDqh{x5vZ9)zv|?P35; zPG#5(jNnbMjZ~o27N8m$$BvRZ$by`DdubqSf$Yi6<4MUQ{H#NP9mm7^SX~NwHM!G&tRzOL}7^CfsyZ{1mJ$zb4ti zq?2|#>k}()2>v@Z8Mc_GP)?w#Iiw=~7s#QR<<__rt8WdHZ~E_qsjev{gUoANue%h- z(h7%IN9cn0fNcyUo5c033eF~%4Gg4x#N*Pw&?Rn`-(-fPZ zQQLcqi7(y`yg)O>XWlX#AkC$6Y^SfG+(30I3N5Vz`U7F0Z+WTotQ2-{u-z%m{xgfq z2ha~b!s;h{1($1**BPzzb4p?HsomLWAzYzNA@eqjnb4tHLRz4cuL! zI!adq*OcFb{pHr$LalvxuNap0OTCmLz(*O$u7P1Vj~yylDDJ4KP_&brf@<*FARMJOB((-CYihr=#Lb=^G@;Fs-Z&54;yYh?bf% z5Dv{!%W4bMT5(2rSN!;JH?4q{F8nrlOWqy0C_Pcjz>PR78^QDWanL{RVqFK?evin7 zBtPj>EM3wgJxi>;AtqjegzXF94Ndo+8?zx1HJDfOPVhT!VepR(M(fc&en{LTbW<*o zKa|R}LvWrvNSjC#g16`f#satTJ>1Nok#r7H6$smeD^pmh|^diM`k(zR>&{ zs6v*?MeuS(C4E$;Orqau2DzMOqP&5;__TTwJq*=#GRXum_XOH8LtVwOcA4+i&iKipt>eiR zNV~u?UzM1#l>KB?#QyFUbjo|qpE?u0{g6KjvnKv(>sqvyJJVS0bT@L?g(EH5JAJcN zEMcav>X)2^sOLX0%DS(N0Zs~FcR@$pKIA>NbMtj>ZCr)-r9asiaW4HDSVeY9`=kMZ zGW4w6NJ*!O;sV)(_*)BUM6>_v)uZ_-eL~$_F0pBn8x}W z?L}Tbdy@4P$W*1>lFoBrGD*OdufTo*KXNwERO9d+;4Q>Mi*>7%7HEfCv;%>Kf%V#u zxJ{uRaYis*IJ@R2I~4ae1S+23Fl~~uP~Ixlm*)w;lN8WYl=&vVg)_kp!t`K?iR}3% zY^be))(Y#D-NX7}had;^NgrW$(z7_h*gUgaWV_xbvd8d^8rC!*3_ORNz%SU`OQ@Up12 z+ZGsCpZEkjJ&K1UXm6ts+YB@4H0FD@*Up2p8g2X}`)~Hv+0Pl|N>ig8bcOAMPv(`7 zC^%AWT2#>K6nabgK(EOE(v)%$p|si#Howoj@!&5iEY@`U(>1^!yzd+pxt|~wM%4pE zObM;^ULqBXDQ~qCXcc53HLa~bPnyT?E2-R~G|4!Fvx9cIvGq5f;!-@%Imqr>E4}(& z#8=&MUTr_8f6qK>nGSZ6VDDAie`O@O1!8^N+evfz%4pQ96`AUdk6d&+Mz8qg&GtCt ztt2ynzdsVsQ!mQD1;X0jY9Z~cGAY%wXmV8inO820?A{{7OA?UfqFy$d7S# zI7_w;q@X`k8}d*CfWu!1$J4UHY_brTjbrgXzl6t)Z0Lwnmc7w0I$2|#-DT0=?A4Ll z&ivRHC!!ay59xEg$@X^GKd!WH*eC3UZdIeRQ#H2L9&2r4zri$Tm-~&SWcyJzd>udL z1Q!)OI!intr6+mBK{UBkjhuy+?j`z_bPx)|o%JHeY&7Wq)=nt!8EHTmaBbaJFtEEH`5x9?Z>x5OUKI!ouPYz-`I%YYTPR7?^-$*wj+y#yz&7NLjA ziMV-6uDC|(ndG;%eeqp_?c!4gucs&$KR8+1xTJ87kR7TM{;s79HV;Na6P4nDeA?Gw z6Xm^fRbH-Y!e7F5q5=nEF!>5>wX3KGjoMpSoK=s%a@r!<9KeQKpHL+um5<$2r~&VW z`$AS!BPr1gDM$*zuPvMW8A)O-FlFC>bH_}eJ%|0eFk4HFX?d|Q~%uuvo7 zPDE_Wb~@8BKH0a-Z;oO7%?-OZpJNSxmMRsFIvMDHZdx#}=ae(ySz;~pRk=WC23|;6 zH7d6W-BP;8rw;B2Rt|htQJ|fYFVL7KQyU2>wfwxL65y8dgzwTO@$SKC>~qj%&oz^e z(JbL9e7!yeCe!6g8v&R+KpJm?ANkpFcP|wyV=Zw`MT_~z_3F-{NJqbmUe9e7>xp!` z8ar<`#YOx=_%g5}!@PvB4FACMp>cZ&xNS#(sQpzCcrSDtZG@KeKQuYtEqwPcLb|^u zuxQTXhu$&N7m^}#O~+Ya=XF;XG;7-BV`0xUHb826 z5+}AMRQKxBc79Ir08^y|+)bQ>r_kR?yl@&?fEnTJY?D4{Cs_p~-m^5Xc2H~)9;Z}F zmRH@MysBC%#lAqElzG(N$sVdk+zz#HI03j6qs7ruaoC280D9In^w>*RDDDb@q3`%+zw) z+Lw(t2GhsrMzvSu$*;9h@81Th1M)g@48=!Lx$( z6*zc-O=^m4*Gv#->ON1^RfED$7y@-N+`VOkN| z<9{nJ#b-(r*pg?I>WUHC7ufRe{1N;da8i!im7rVN)D|E)SuFa}^r8!ljFDgFKascQ z?uf0AfQBPTL9FGmcg_cWnI~I!fYSpf68{+(DRz;e;DP7`jm_0U72xM}01DLr zN5VuTAEeXTi*xX4u(J#h-oR{A1+#KVXms7i-{HPpR!mPHh-HKqLU&=OFpLU97ildS zMQ@`;Bn=;h_Q0HdwcFW!YtJO?;~4bAyLK5j-%v*prlTu>Py z)CzQ!HfaR{&~?(};HoeUM&br(a(vN1owyRpuh3hmS-=pA21d|D(mXJzPRDz|?slH< z;!of^U)9d%M)ZPK3!|mgUY~E)j+WK?#C{s*V_%J2Rtx*9^{-t5`VB2$Cw&pfDEUzi zc3Vh~HL(poD$ONP<&4k)?wK`|o0uuf2nhf$CZGsM0+odKT7NnzcuvY2>@Ln#JByd) z9ds|v4Q=HzIJ;jGJ+vFKUuGYFhcVFmBRbnrq8FTFQO!+fJob(m-~IMhcD~#mhI_lO zp&zqJaDY7%0fN{fww-_HFW6U}%{$2kLmupiW%^HHH*iG%;C+ROerIEuJ;I8CZELvi z`zyfy93;hrp^$kvPUebFNNITmn9g$ICsI75>hG|IU;y4qr})2C`sLc~`7_ye4eB4*Mry!_ri&C;Tpk zr0wz&YD;g$UD6XcYmbJ;Q5LZn%*YpzWd=*y*K8mBYbMlDbnLwWK zcx_E+Sg3X=P28WMV0@n7?zmdP*WqD-#xP6C9oQjvS5`7NT;H z=YQ%d{!eG5ci6e)?sl43cdd%nMr*#=(>`V%v~!x7oErK&sM`eGL}P$E#w-pr)dXPO z9rTC0hy7Pxde)15W*PnJz&GE^3Ic7WBlHM4IRR#wr6?r-LDI|cH3O=9K4}G{R(gQh z?=`!H4*LIhjURP$yP7r1J{}Q_6iLT)DPgKU?N`{`_A9$}B4MjjF7nuujhnz=XimPs z8>|cNDc+%fin$@Fx;4~6ei9xe6^p+r{T^RQiiNv~MM6@qLt6$0MH8)%!wk>p-+ve=tW65S?3Aump-<7OlM z-TFMg^VMtTe1V*94);%QjV*aCor?Z)rwV%s$-YOfkLI}=8R})Gw>_Iyfp<`t|0UH& zJ)|g56V{*&Qx?tl2g-3vZvWuoLOci+cImr=d3keJ7~MO-f;Yh6#^q&P~Jz{s7s|3!7hPP z;ku!H;csyp!w2K*hg!tN2bzV?$o;kVbe-G=PZYbuJiVLSo}aTDxzqF=#*?I?vE~Vz zlg9r1C$ZVDOF!@Z-1YNYg7hn6QoqC$Q5rcCYZTiAot(yYPy2yud&A)CsPlipPB)Z{ zg|Ed0QUzQ(agbyyDm0=xc|sSG_jD+U(c;2*v6&c=T1s=JA<8W|q;`_0DvhPX;(p

ekfn8B_>x3MFTggXlgYlbPL@u5Epox>7vmhFIZ0i`va zUz=?3`(W8W1dQ8*K&9=8KKQHnMBw8s@^Y{fUTwFE`=^!KxniVodg+ht?6Etx6;1B6 zik)-Pn(ZL@wZX6LcVYke%OC^ZnN20x_;T8pUy%2sx5{fIXvgq9Z8QEu8-(WvM&jE_ z5Xa=kU<&cj5#a-G2n^Yt&|O;Kr{tI5Ihp4q;)1qDw^+rb_4ZLE&b=7`>TBo{-W@JP zUxo|HN?ah2J+7~oBQ!C1Mth*0QBr6#rO| zUCc2~&~)s3MgvH1Bgm)5+b=B)x&PI6SvM!VW5)TtP*+||n1uFG9gmRyAzfvUT$39L zm*phkmAr)-vIEAP!9Waof#b;wpdM93&%NB}lhcSFfIUim!*GYhPC26@*_^9MPpnRf z&&_;^#jRC|SFP_!=k1-*znm)iJ0}e7Hu=7qvmDc`LTgFAVdS&(1K9It{$b z_9C}~{R*0%vz)hfVK=WEa$33%?GEtNq-RB8YcmX*E}z*7;U0fPC!w}tW}IExi?>Os z;H&oK ztzS+_v!Pkjcoa)8vc%F_{bE_|iC_l#+qevU-v_L>b03^li-axyP5Qw1D1o!cOg|&J z4-EBOz(+dny!LlGYy92LYM}ojt1kg1bV_`rvI3ncAta8@;~4ScBiMDwp4b*G_^Zj2>OSGvV4Is z5j?tJ%q0Xj$DhGT5>Gzyx+Dc8p|1N)$y4uvu*I857rIO6LuVj8U{|G0?E=C&s~s+D zUE>|CxonqJ%|C2C0Y-mk?<$l zi`A;o;|Qy#0*BS90VR+w&>`@WeD07?2cC5`>$)53cKfflkp$ z_oVgA9&HwdO!xt_xVg^gU~beKnbmY)bH+MZ>0`&OQ_)TKx0vBJHv;T|wGRz+kCR@k zm{=O8m(L4#l=@(Gog!ycvnn~2C(>x>ecvEUgg+1>0&9kv!uKjAG-_)&W4w5HzTAlipN&lYh$QFi~9qv&7s!kXgOXc5^R}bfA$$tmBhg?xJXyQQ7pi4hZ<+de zAjcOkl=3d2wO)k9v$ft?_RV?5$J@tI2OE(RP9LG2+mKfDUef7)6R|2EBklnr&nlsc z6aebMaOtSDQ{Ev}R?31o{S56YRRZqEN4!VO1sSIy;9!@%dSsXV9c?l*@^(f+|E8YP zP1Gydi;Q6~k$q!sb@JGA{Ao@xm}`HBcHKC!DsBlp&aBEh;=>nsy!3(}rahSq@4xl< zpgRE-bq68Q9SE7Dov5d~24!~@pe6jn6a0@XJIcpXOpg89%nnx=naIv=pvx}UKWp{p5Vx0(qFkyT zw`NA3Mf)ZeN*tPie=SJp@H1yp`JY*%BYrK{Yb5=&GU&a5GPi;!_ZyHNSP%)^75)at z`}yE%jfH;&Tg4X+y@`Js{1{&=L(nf12uT!=Fg)0}dW=Em(etRH- z4}&C+Y3|XHaV9!2_A7EVS|_>?x*eXr%qRj=)HvYZj%MflAz(AwB&-6OZ!>gM)bM+; z33(-^67JIy!g-;oFq+hXmh26oK6oLn@_*=aevVFsl=B?kmF9;GY7%QloA3<4L;ff% z;;q5v+?`b6YtTkunb-Gy_ptlYUhO;rtISHhirp(V*ZwEA+WDwEZZ>m}-@>}fKG-Kw zP46e^2)4L2c&AtnsM{OqM4)H|;6%THt)^MMn9$gHM$+0n$rtM#P6w0g?a-zU!3=DO z*M^5#9zK&_=k0J2)Ro*tlYlH!lBUI(#X7hfxcFMhbx}5D24AY&VaJu)tdAnFtjbvE z2{T?pxdmB9os^V6317wG&{7>LRt1t*ee_Y>&aR5h{q15?uda9m2>t!sam03xBHwAp zJ3%9)sy7zWnRmUMtc|yfU2*rYzHS_U;NAt|WJR2s-6S=6S(<<>u{oJ3r-E5$6|rdG zsMJh*Dc{h#D0bkEd{kK`%@=!%z(N*w`Q1=ONK(|&zuS?d0p{g|fAm$qzDINXY8>79 z%Zxrq=&vtJ`eZzgezE2nz1+)oTJSXPLrd6wQVNU(0^Tq52F@b`!s8quXD+hA-RxCvMJHxoh8cK$=))$5&C)6_VqfsjJKfo4HxthdO`ltA4Bm#C30FxTX(7$5 zZjh=3Qz@Oo9n?v2(LkE`d%-;Mze2_1R)eX&kK7iXw-(H`L} z1=eIeZz|+$rw|SeS&NL2@6c=NVkuF(BNq(~R4#XlfS>hTichXDeNHppzW=g!mF@%M_3|yoha$E8Z-a{Yc zWa1t9I5O82D`Qds&d&46}CR=DTGFG?EM4s7S2|1eHU{n-<>u{J~2Tsf^u@Sy6#Sx;c!%R*>t>u6aO?uOy@Nh*(t4Wc5Pd67s0%`Fu%iW(jI-1p5cLk5<;I)CUH=_B==ALN|~8rUEpDg z1=^nE*|mppH3GweUzF*}9C5F=6N@{_0j8OmuAI*+0_>uxL^1MaKXpZoZ<%fdsO7~fqcqk zt+x6u_)Yy0%pAxcEFZWWs2<1y3D>1kNVzXuhj-F1(vhV{{k&Cvf`i>rc3Ha%OhxKg z$Kih`t;Y6q3p?lR>h21sh*uNX`m5Y|-hb{2@2q>?+wL}mo!=XOq?3tfaFznSeLDeq z7d`5Wusf4wN;=6Y=y17=*i+gq+H^UP4MpiEE)4|g&C(n+SZakHh<#B@a3>`blA%60 zfXee>e1&KFg&atQ!WQvgP7k zPw;bDM9)i6Al7EkOd0TE(u>eA@knT$@G|%iZ`ML+r5evl$ep}#^rUkT|DT^Z6Y|^# z?I~a?mz`Yh4C|^}!~ES_41SwNMgjk&@yyR^hS+g)D63$#V8!j%3^~jBFt-AJ>3t$| z!Nqt6r4$#DYT^x;*4>hN(~3%0;hpjyKA@xpx7t`%NWSL5ciT-80&o(ZWZ&j}>>Yj< z=P$Pb%$B}*vmt3&#aWEkxgs6pFOg>PWAKcW3w$G&1Mh|Bf%?E*T0_1)&Wa8)P10La0R*W-T35YU}f#oUU{RDM`NemP-KdGFL8%^F)^=q zI_ZnYq6Jw+vldvNKci`^CGqeyFaTGkg4~FfR4P)W-V%DMi-jX9m{tSRgpz?S!X8MK ztylgdZ>3(~9`A=Af&H>DE``$Yf~XPjiyOK3_#AsIe{PDrm+{lT8=K%Yg&b!zDThsx zhL}?mTN%ZZZs|882lbx%Yomfq?7#fc?hW9EoD@5ti%JvHPa7iS4Gp0q!}G=XxL(rB za7;QIDk?V)2IWP8&Qe$9Z}AVvF)hXfAzztg0E&582nvK|r6b0B4~WxF5?&AE6S`54dNR6Zb>j zdz?B|-KeJ5N~t-6OO<}XJ3voAE49@Oaa16KI2=rBgO!iMMQJunQUqKA416&@$J-01 z6CGMDJFHXsShIj0GJn@^8ikBB<~{R=S;^UIjrUZC@XOAh=r%Y|?f~&vVH3!C_82xP zdGSSPyiP%VQ5&!bZ6R||QJM|c5!d6Ow3+0SiV9PJXYNaV#8PrtY9zOn(#bJ#yVMXI zUQdJ>u(|yUS4DsFW$d6|9~}3$fT^_sa)B-3*?8*wG^V(djIrJ#Lu0edmt3~X<4w** z$i3afgPDttqvU8BnZ#h-?_2b&yH9-T%#rpu`QVCvx;pzkL-0qc)lHD6D-mHV&-rSXmIDT znp<(UY~Hg2M!cKX*x~(d?qr4SR5-ocSh(P|6W6iP@*RF%X@cLXMPNSuoSq7N5ErU7 zqy#y)G(~(MszOt-51gcy`a{T{&Q(;%`T_g-3m%U?cV_d!qdm-na3t>R)j?v&-HUFtnw`CDfIj&r#hXe6)x8PXiXRw0$ zAb3K}AN1hY+cR)VJ*^&=EW1AZ%?rl2Lev za2{i^H*^Y$3wz}-&8@Vj=j1bjE+vuca5fkLo@+_4Ss(lgTt+9nc5IMa&FkTmbY|Pl zt)})j;{?zY?m5I50PT#OET^>_HMOUbu}+e3)=ek=^zMs|8I@}Cxne7{iX!qD+%+D& zX)D4EWEQR|=Yo?&8r)gY@D@eI_mpP%ma-qmDIZ|JbQz};S3v8^29F9u!@)|v7LCJY zQDw50zaXdi6(JKkO4p*DVh_|s+`%tE$6=Wuv4vzV*wd4|9%!J~lK%l#j`3c9|2O}Z zx5dBazVPom*%`Nwv&Qx`p22>{&s#6}5Nk1dXqCj{YzI#QU)F!_U15aZfxcqRzy~;0 z$b@IZTy`^mhBLEyV8fX#IPOq7&n+rWbDxX#+*{&Gcbb^PTSM=7Hfi7o@h6{vRiQU@ z@3VX5Q8TwT+U`t3tDR-Q@2QPCI@@^AS;qdh$M{dJ2Hs1c0*o~7SbOyq<|e(dIn5|w z&9dg%g4TsNHSdtpgiI}e=*n!KS6?&^U_v`-8L?|v!Uf!DYoB89sLqJ7nvWu z6!|UMHrhHmB32~!KvxalY+!YCz#!xm28Qn~o)RX~`@qgHT@5R}w90`!L0g+1x*zNr z+8W9gBH@j}aiL^d@8C*hRA7d0ddsR6y<})&-*C0I?|K1~$TP>nN#;ZRqMY0Gd@lFj8#fb0CTK75pqUywz~} zF`PQU$nouKRzZiEjhvfiK43x}2VQAS_M4j=W%R#*sjP|MquF#L%-oyO!L+ydk5FD} zOX^F1qc`F#R$bibjim|BIbpq>L~dI!>$4Uj#rn*Cm}C9yR>Y(C*H~2X4-m_{dt*-T;y8_T7SM!Qhm3-nLX*C^68-t_fBKTTU zgGn(!&i~)k;639roR`eB-ur97C$if(;T1Nvcqxsj*TQJ#XEtZDi`HiT$$_&y5UpCH zr^08llpX}9MKYNENOEV|S`NTeJ*DuMynxh{e*-u2ckncK#5=%-*;r_f=HRtFH;Uu; z*dVsZuLCW=N?_T03gnc-exkk0Ut{+N&VECGwB5tMZ%_3r1E*`dGr`~Iobz^o&twz) zIUjenI4gj7@eEks>3C}(sNC~+(gD1;`~!7Ruajn4A378m!$WMc3m77`)wLm~s z3oGlC|HSFwi5H}HV7-aw4e%3a+5YMD@LF1hoqk3&>t}42p~WWar=pwn<+0oPT78j` z!W?EUg+yU-=M9jkSY&#_&Agx5x?9t+RX;>5Qujg@odCD}6`D zNJXW`a$fnKazP%i9+J;0$0fMo&>yt6kVUX?O*{oySB>}p){yn_oA_D$6n>n4$vfzG z^JlX^ST*n>9^pCA2=oQgLb-7TJRHx(4DWzV)mdzk0l2d88czQu!N_tNm>Y*63$~pv z2g2+--X68$@6bRt61N53LwlHDarY%jax)4Ay`I7=uRGjeCkp3*B=ri6f0b~3G6UM+ zUxgg_65WKxie=CjNHzA5%A&zn@vfTV7gVEH`GPqoj^T#vi674L94Dl4{TRgsi)Q6 z3Q@;Mv*bs@BQYQDB-nmkJk6a9p3stPi8UPhl6n2yR&9TmRnKp3xA%uSXZ-DMCiVgH zX)nNc@`V|Ge{TB{G^Ed<75;b(I{;FTl^4445fpOp;$ARcmBwdbud^5W2k%6QDAIWn z{6G0voC4OuK4L?9UknNHl0^QL=HOXCfqW0NflV|kt13M3%HeqTG^=4hch{P;>`z7^ zbC|JKw~Ym{@8-GKFd&O}bB~y?A9N1$Ti!8T8=MMTa6fuZNDCY6u3{Fsvj|&A@t$&o z_E+9Rmx2gsq)JP%sRF0)nsP5-d>&@1Rw2CvZspl%^|ntKMQ zPse~{wA@MQcXIyn_dCZ~GB=Sgb05KcZzRqHOtFfr1KG^uA=PpcsO<&m7vUyNpyy}` zsT(~kO#y1rMY2QshChO(`UEYG(h1w4b&-!JM@4xD{x45tQ_*1d5WzPU&R3h!Ywrm! z?p5RI-KMZRI^oX(vP5n-B~0cvvZwGh%mXg^_R#8k2VVEPq>*q@m?~)WDA@~hvcse< z&xJR8h2U%u@2@n6x*>4$^w*!*19j{)FzUF&;dd2=q;O642)DtTg>3LQaYpJT-Bc>e z1p}$%$$`C6)j(-!z1mvrs+6bir2{0nco4k@e&=n}#xKW9d$m{*@8|zGI>&IiuD1^_ zY|YGJPTZIc8r!z5Mvd*HC$??dwr!_DqsI2Z%xo;Z&;Px84Y zper6%m1uFu3sxeJtmgEa{|~KUL~DI?QEL`KL7CL3|S9>!&3fL>7h zqy@-RdK;*_XT)OM2AFx(-R+Q+JqP6KC*Gap0WM0O?R-mW;*3n*>}(3&bmPMYyW%7> zKPv&0v$?Ph@uR1t9A2XpCwug%bh=SkJ8g8++CbNHo<4^z)vgkU79(ML5O>xV;D=gG zTo6**`Sc8AE0`PpqkBkcpa=$QF>SdHL|d*(YnRb4Iu6gHdtr-5HOOvjW3)dZeX&f> zZOqW4%)0szQ)sJzv$E7Y0ECd)+9SOYBy0B5Aa=-gwH*%<%g{0Qw_5Dgk`LVfag~no z3|?t|*`wg8xz1km>+F`u&n2{$30f=ufCQEc-`o9iDtN>n^DOXr@5Yw!;%paq(a#8A zTFcvfI_%%y;kIfPeSp4bDMSh#1P%pN{lsTj*gi2I;#_&zR1E|DbMiXO##=|K3EhKH-8_m%_{I};9M#whO_1JGAoPj z@J3{`_arl|#hx|tx z^)LUa(#hYT!vVfDAedGoGqkhxgZ{53jr2waE6UV;yUi)S;nok|eXFhSr1i+WU@q1( z8)wNAI$G7j>3B$%a^G?{{2Ln|3c@xMT3Mkh?!E9*?+fk+S#;bw_@?Y+{H(6A$CEDVaYAa2^>+~jC19PhW(kyN4 zG~erg8Ljjfy{c9oI+ZW+74jLyk{fVyZ3_mWD0N(6wFN%8(}4$mnqPx4VSYJ`^$=}X zGT#cb&0@R<&n*6hC*4MIR2`KS!AiD`02LLU3QM&qB(L6>ZqPT;P5Kl%Pp?I5Lwd7< zJ`0`__s|b50*%p*DGJo7XY@MQ?R;b?aB^Jms+=JG^=9OmejcYWD&Q4*aRfdkm4fD$ z2Cz!L0LyMT&&|d_zqoF{QWan6Z(0Nxbph3INlE?=)K+3s-`ROHrJ--y~lb>E{xi8zZrvS znm_RjV;GsK8T2jDX)2tS9#xOXQJIcTl*Q=Z@OxjFI#dG7akQ+4Z;M(eLL5|`I8mKh zPFVo<|MlF4e5o^=&2x5o%fKg<$=&3pgITJ{|Mh&b1W$?f0qtm*Dz2r(4}rd$-b|;R zF%N({Y>kluJ}D5DG(BUkc|><%cKT3%N_uHEa5_3%EyFX#Sj1oh<+>qgI|uny$X$=K zBUxYI3N5oQyD#k2Zd&J&lg@47_`J2Y!5Z1)_#!)}JO|{*2Hr=!mM76;svCR~Ct4Zx zMnH>u6*z5;h#=5~PP7^YIzo(RhS|aDZFDwL=!rB)-{btGjk<}l3MGGeI|R_$c%)N- z?}4YPd8%Z^Ch8(~Fni@`^Pf;04Q5*UvaDivS&%2QvNgjz7xPh1e9)-m~ zilq|hPogoO#7?lykaa%p4rVpn_UsPq@PVz%nmE1q7iXJDa<9mFY$U28&f-~+^=N<> zY8mM@y||XssG+AZHp7tbiT;f~)t8WAdSe`+w?H24sD6+?fbwug89>Q7ir(Wj2q<>A zgr16AfH~7NGel~eA4ppx52*%I&$sx6yechGi4SCLy)s@7_fNNnv&Sj!Om&t!wlmtj z=+^OGcpX?-_$E~apUMc;1Q@%GL?X(=OT)Cz#7(^afIHL|jrJfh%O|4SA_liYRq$D| z0AJENL%L-HZU8yk>E>))(6kXT`k{qDKuRLh)ixZXh9h{hsG;&PycvGUGU|&=jk>74 zXrZcsPpR|Z_u3DhsLc2(2@d9wBj{UZM&fq{1n_n8`C z2K%4=)0Hn_9{e3V7=yKDVjqyhF4G>~9P$FDTIKDus#Z9?SQkoWxx$!bx7&Nd8RPZ^ z_IqZ2(y1mYx;x}$u%7p1ThTe*5{$?3g%@}j2)!O3LSL+F| zsHXU;`cnG(Ll>!nVME?`EbygA;|pSooC6ux9?n$n9c&YKg@-#&!b6>rP8lbKcg$(X zbGyZ5JFgQe&+dUa><;O}$B`y-Bh4dk!x^5E{AeG^h?kLQGMxb5NWTO(yulROu*PfS zqE-~%X61k(m)GnJ&5uUDs}^>loJPS zYlkhC5pDwiZ13V7#YB={kM`#St9=fcA7`|7`jV}jzK_C#O>-@nR+tRvKW-H;*kyve zWm|Gc-efNA%gW<|rS23lAB1L{P&%hpCdV0Z4;>)_vj^;XU}rsC;(pv||$Q_KS1 zPqdOXB31 zmMtD`sLizN<{1>w3V444aqS+oSdU5~m0B!9@`S9RuDL7RP4FbS#ZI_6p=sN|of7)t zRt`}zlHU`r?GkFZ%g|=_SqyefQO8>cTktT>1gDppG#IYHA7~c>yW|3+uCo~3wB%1>Agrv^P5)ASH`I0zh`XszodQ54H505KSi~T@%xJU>Vc==wO$_D z3Z2{zMt)Td=3Y`Z3n%C;MSxs$N8t9}dt8cl5Pe`vLxlqjoq}vN&&KY6ArPz;vK*Q1 z6o$lN0E737N65T*i&%p)@qlWNB~3y8(pW_E=y>@3rN4Q^Vq?8|So>YS;D7CVpx=WX zdJyM?#@-#Xw>+oTg^E$fsmOG2U=>J?PiXgTW$19y81I>z_%-T#`GnHRWs{HDD--Nc z?_X_0Q$mB-Ysh-^`>`ddBkXgwiCg#`KA~f{k<>tWwZ?(SXiMv3`hD*L&13(L!@gSn ztb=c{UBWTG_~~&_7N~ zptGi6Sw&wkjCO^7kDo8}4nq1NLVU+1qm!2v-Pj&|yQ9AHQ{vz+m4(*h-(5O%1eLG3_Kz;L8 zOg6n^Oq$5tsm5rL5e32Fb{)lKK97Yxo5Rqg)Xrcf)G#BFd^c}X7ZG@Roi z*#q{WT1EFj)4#Iu$bU_A!wl~;`uP71EY)-BLnA`In!bPavC!)hz|8EXn!6*cA(X)P zbPG{EvqIQ9xX79&sVEm37T`(qAD^B(hCJU;h~2 zj=;=7IpYLQOih@G7?pf5+k^z)z{ayB}1-1=S} zam8K9m-9Fk%hvI+K!U3>WW&z-)v)Y7I;T1G*_RC2BA;pJR_F=jeg1Z zvNf<)_t0zN5A74)jJon=syFyY-id*@89zcc$YEZB-4EZEx;w}z$V#&2u3+Qrw2tmH zwHp4{S3C$f@Hvy&h{?+EJsep31yoM*0_8!+o#JIcBRs zX@6$eQcSeUY8~|I$|i%LeKSF%lMO|P*^n!#3|o*-G6ke#4~vbs8W0d;RZ)D+edf(2 zzmZmUTK68@AR35fJOtd`T61<<4xTXUKdtgO@SnIIGfgmY*O!Gw)#XJkmpD&o`*-_5gyDAwK=39y38_aa85EC zB0?^BwzUqgCAoQaINx{EdWw{22}{Hou&%X$Sx-~+9NJz?{(^KIu^uWCJbNL}AZ|jygr8gKwG%km~9MEkr~L>!o3z_fT0t>AenZpCu%{S^=5CJz^pdQ;P5& z9{gX3MAaMmY73nnG$*a-T45a+&d2Rhp+Goa@&nZmB_!2LjCR|y?%;A+$Zqfg_y&3G z+;h`wskI+)QZJ6rqTjSNMl7^6nnHK4Bb)*<;hS>5_P16+jg+?Oho_YZJI6J!1DFA+ zf-YpG)gOq|XCY5m6BpB)0zW%Rrh~I-YG}jUR&jEyY$rO(YA{VaB^v-EdbHMvZa`Pm z7c@g<)hFrqadp~QyI~xGS@|o-KU6h}Sue;3t%%XuaJ6;%Rr*3ZqLt8Q>5KH&K$-1K z($I3ydVyDyX0XY!KhAHQ0pe>-*+=UugS0wqV~#*}ZwA{S?u!iSnp%!ah_Ad7Nsp`X zM{YMXNxYCL#AsARn5c%>0Qu;i@MlbcetJbzCvS$h=xEAvH+$p53q?ckqO&ZN%KOi$ z7CvNuaaOP?b`t9pD&-F33g>pu$W8FP*&;XKLh=QgjhjO&Pg*|isM>TKFOkSRhLT{j1ksYU? zw}3Sk4@T@Rq@fuFw544rU=DyO@}K0c^^zX3Dr&ua@6BU@f6aHmDM=YQJ#aGOjju%1 zYu|VO2P;?LwRzV!#;}2^y_KBBr^qavMU_Ph*;ujCJ12{|`DM_K7a8o%-k0PF_R(b1 zRY|5jCb>_jVbXnP6HxvVon7wD@OQVd+tdj{&JP^qZa;C7MTsfiI!RbpSpep3x4cEt z&$(#oMZ@o@ z5i|Vh{fA@T#LV=?_+z4KMs^0S;UoV!Up=@9FM)Juz&c|T0~^3(y_%jwKcU%pD_Nv9 z(OyEjWd%J%9>e@CK@O79=!m?}Q?W?42%h+P?Yk__UENBB$6T zOA4tzcyIpKH-_mo%;fB|PCWEt{tJ(E|8pmMNp5Ra3$~LbQCXB1qaI2F@NAQiDg>K0_GRMe9dzcM< z)%+)nmVv{*G7&4SQZNe$`Lp^{M-(x7`)5#x@(buKRIpPdb#^`{HG@9zU}t$SWvFK| zK=(j@!dM40emv;y-5@G(m=mEs!d@4@|muxG~;^_JKbl9eoT> zyP8@CT959*Gr@s2LX!%(%H9m{w&mslX!UOoH)R{c>6za-CL+Aua;7*dX2}+i@~Myh zq(!xp#uvKHI!Y~HRx2j5n`uVQ*9$^ErBTG6#%13MD>h=LG0r!}uOcJ-sU!7><}rl= z_oJAv3c&1IRz#+UHd?5Q(QPoyuMg!zc zIYDMX4}_%#iyz`Cc)3%{jPe|RDL!*QH`OX}L(LOe@ouqRT3!!z*1aLyx#{FqNIRto z_2KKn*Sx8r6}+o61a@hU_$jxiyvzPoYeXloyCmRL__T^tz#PWWcq%Cclx!(Sk*`=9 zT~P}&jq+K!NyMp!bQA+_HL(7c(QljiMAVt?%QQx&Q-vj@6>UCfa6qj{;)qe`JArq z-;NO;6uKT7AN&M+vFG7gp)J8H!K_Z&&}K)sOL+P0)4*mO%HG;>>Z!X|3J**Iz!yI5 zOl0Hjckb5E2=`fdw9_aQ>ue2S_jGup)4?vs{$eR1)p*2Xdy^Pz zG3sF6gEV6exn4gb&*`I84s#T69nX=!{aE(`lTAH3r+->(>4%uFEfC5I;hK=AOM-U( zJYf7EmD9*3`G)32g(=YaX(H-=zqN#ubT}~X4CD|XmhIk=%@L6CL)74yY zTNG6tRaG<}H$YX<473N0hpl%Wa9egp`(#e=-VYW*UC!Ux4a+JJh{?PMJu2tKRn>K*PVyP*s$f&3{?gvb%0bU5ztc|i1Di@2=M~NlNu-i;8tN*h>ycVCJY#F< z4~+u)70a*hwk{j75f3z9U>~jPZ$@kRU6_#Qc(Pd;^)Uy*iTjN@rOg1^+(lBztPOPglTt%k|;RFK#@OF9t^+F+IB8$OxeVe`GqZbSIIUUxs( zt8BTQpADHUAR!wC=k{9T6OMoCa0;Z&mtW|nuaF34it)=<>cStU)E81#Y zkwx_X#9u%K152wn3uShvL1U?yoNOn+KI1Mw??kEr&?G$1^QqN5JK74|sIF?71cJUo z^r}cfONl~|Z5MhjIl|EKG%JW&`Hqo2{*#(NV!k%kAEMWMjBK%jB(E6+mU$7Conko$ zm*<6H${vtgSuyd|?aQ*V!O(AM!ft!xfTkI4QP;w}_Vp5&tQHci= z<|h0|oRAbsdKT;%I_JE!gY3PxQ(a^6xEQ*nXCd5_biIYO{8k!$r8QnFVB~@M;#s&W zWWfPc3VoB+ft)s9?c=*-8MY3+Wk=C%FPa`}yHd-Id z@6bi?y{*BkL*DNI4Z)4&0C`1AYSr}X#vXo!N8ivj1?>G}O)HE=Z z8QwOpqB9$qKXdH5b{w?m27$F^s%v@-em1I!-kgZi8;Ot)%aVU}BMl*N~ z6$DoDFK4ov;pA6soG&W7cSYW63WS?QViYgJ z&$%<4$Khk4uAy1UdxH~_>V~o==L+9UUhceybp1Lzvls%Kw!FZTi2>%^P-sm!drdbhh6jb$jKsJo@RMabKV~KM1{!( zwv=p3*f$yDT@f##xA8f&*oW~>|+W0AOqjr z{*biOZWP?;Ua?m|%A}j%;*)|*6wR!k)@NC3O1bG0VixF=@;)YglwP->t|Ffvi#BT#HBwd<&$BoDr}h{`92{ zWU}`AFPoWsk92NT)_a?mX{5Q6rZKY8`Fc|_TFXHy(v3i^&IF9h)DlQ)BAI{o?z7kK zPItV$$9-z|b6$t1JKw`qUCSxpZnPty{dUx=0#>$2b`?y4d)Z#ExW}B;P7(W3xJ&SB zatp97x<4ZmR{hxWOMLI~EAXRH;(?zzl3OOkhmU|wE>AeX1I|!Ygf+x-c@Y{R3)0J? z1nDT&qVhZ%xcZBk?ZkLXV4Kw6`Oog{)^S?^hkv3x#A`u5tgP`b{$fqnrbc8penoyW z$45W6+~`#PaxrcF)uKE4e??{u+>HDTB;>|{UXgbLd7}~n>!S7t_C&Q0{2tZRpFgsc zZ%QD$b;@eTIL zi{)_9M`YtzbYbcEVHd+$?5NW!n8EIpcqBCR*YaThpDeiT=jTwagfsT`q#n-XV9>2# zKl0ML-&t1{&r?DUxsMztY-#hIGA9sC`~J_)#cjEV=S5}3UED+#)Vjz3bXi+lE3iLc z6A|dGHHfTcoQ?F1e350W^${6;W<=2H=I`x$XMKbQ(so}1v#7OLuL)_B7m%8`q1DyW z(*I~y+@CB)wF#4-&=;eSP5G+L1m(IrW`n0VFn0 z8u#?wW_PoQ+1M;#T-7`4TQr-*65xb@H7liZ$AH@?9?}f`%_wu9>6p?SV`m z++^-HHkftv`-UV5`g3S;^#W7H6iDX$t^z2d8mivQ+%UJk0}Px)VxhVr-l=6`2zn}l z=)0hhFr5UAw>@~SI7t#jPWoJ|p;_c4ZHg?dC4fQmyJ$?u@Jj>%Zy=x7LJf!MS9SX` z&k_EQjR-AaC^UnWhTl_wHA#iuLi*+qe+}9GiC$J&o6i(4;AMXsY>AiU4OU8h^|C|T z>7^V4Q@6FQj^exxs3^MtS;VRI59s0TB)wsyH34{`XMplrBeF!miaP9X8(GZvIgr!% z&6h`;ZcajlwV9#|9>#8{tllX($Za5}!R@Q1S5QT~AMhE+|0ii+sa;UK!W}j5QJ9kh%w-HW&oz(~T5=!SCg#A@6$c*Qe z6Wm5(q`Qaz?Y`&nkcSAclVUy?K5IzGfWYi~8O$qxf}OdxmCu*~X~>uU8+u`XW8L!C z(T-V(WRNiychRn^%ecGRje4ox=qr%=d*M8=70m%z9O#p13C1FQm6_V?Z!Ix1`l?!K zeeKM5;FjDB&B^(CGw=x{;?cb}v~IJUCl+3CE&o4#pF_SmGBw$qM-enCmgP7vkWx`$uL+Z^QyM zfG?71VN?GMZWveC@A4+^r#|os@OSYTKa?NgEb#+UT647nxV_d0G7N*s3)thl#Ggq$ zoR_AAIdUgtl90-eYe3R>yzD0mh(oZm8|(gH8yuI7w%4-J;gak}cs^@t*W-umI{Y8_ zzTSYA+86IG2R0BS$ZEl~qZa?n)5E|2Vhj0kNI?;if!`NCAn{J(B^8_^RHQfsmemqy zxICubsgCGA`T&W(lw`hEgJv*lfcs2oh0Ix6eRGnQ9?};RE6SOzLte^qg5BAWv9+H#T3b3clLM?e;+={m*llU$Y!)@|`H2|ZupYG)?z^9j& zG?SxnBh?q@#6M9!vH(>EV#QMWQ9c24^(6`>1mJvBrWeHz8Y90#=J|@&952*+(8chn z-)4R`ms_TPkMC>XnEzhH&_Mgh3K97uyGQ&Pkul=FKV#s!)dsrM8_oMPmEIc{pa<1= zTnuii2gQDsPrQ~6UoNY{+$x1=C^zzCv69acUzx{;vwS?(+XLpHEAAmD(JAj_cSbvv z;onv}Pu+#?b(kmhWbN2@7Ge$gpZo+L$sfZ_sk=A^x2RiQ7Lm?NCH`lA3^(%L0{yy&-PL3EG4Hf<$t&ts1^RF?K8o!XHXoxp$}4yn+6V63 zUoboUX(ky9effN2{iy?2{R?4>S0-|s`cn<9NUaov@tRP-`H4ZG0l%H3S5| zK2(F5&=z{uaI{jEX?*tWH7f^vzDt24Fr!}OTjy^GB+=h}cdRMadGoz_)TnJDzEm5IHR38{7?82kfut6o`?E|7KBQMH-}ibcc>D~wlBM1LNTm* zxE_BM-or!T>U>_fGn*6s&D#`KPFb4*XLV+1x_u;=#mNY+;H$}9-O<6nfrHSOFR?vw z$@SDyzJ}aa^MIR|$*QIQ?QdYViMV5ZjC|}n7-jgIMz!-rL?&4K0&}48lVIM2XJ|V} zxcp{JFi+^^&1k)`Sx@`NxI*_CKmjlo(qhI9`n&O+Rx}F0ce|EWMgKrsYHjIuT9{U% z`RN4`0QbRg`kp+dk@OG9V2#o)!Sm`P&OpoHhGZFPjinlZ`m0~?R_p^^z8rjweC~ag zC*7i|v>S~&yPHs7w-HL|&QQ9e$&cZde01oQmn-;}n=1JahbIoP_a~;e?g=pwm`OX&~Dd80KXa%#{_)@$+zcq|Rg4!EMx9`yiI zg{9|4^R&sRhqe>aYQM-wJv;QfXK7{4mU<@ZUwylk+4y3$F=ktHjapVZGp`jkbgQB1 zvj&-8;r#gpdY{$J5_;J94BqW{Qe3}Gb^QlU5HhXuY6o(3FkMpuy6ep%NpBDAC z(EIq$8C?T^nL7fX&9{Nu=0AafW_$2HPldTmSKk*fiN2#f&DFFQ?0U=TK-SalkPuji zHsO_|C2C5tz)oC=gV0)}^cHVM$Md4V1xz3-*e+6o4J6;aOysSXmDFK_$OBe}bmloo z9s!9m(Fk}-^Wjc(hQH<}tHB4l6ImnYoRMK2rUJZnHFdd8K7#Bcv*sA840AP@}!ZRLh`8c6g ziDo4^f$-d%7RFg2d1jE1h(}fV1KHNAAu6~t_${Y6-{hp>Rb3A}eT{%G`B07L8Sw#N zp~k9;^d?FNUaVGHZ(3N3)LUpJp=r_GEUwkGifJ>gwLqRUX$A8dPS8`M-N3)dOy6)9 zPh*Erb#JW73Ms{A&L6_HyYLP6Zq@~yDhKUNY=+a1UvqEs2sT+9<^7@ES^%tLhgCOH z8I{tOL!Y++rjQ%mZdxR*RfpU&pOAR7CM{|VhIi*b^faX64cY^m9@Vt5B)wLce5dJ1 zW_X*XfbQXapxGtK8sJ@a*&x;y2zK9K50KvB;r!rN`|6Z}q|r+|4diXp%NAa9pki(( zH3Zh$fv2vW$_CG@|FrV3ov4GJk>x50WmT=!24LS(*oPMIM!P{LlhX}Ob;7O|?&fq1 z?|0^hd%G=x67bzl&&E3qcyXZ6e0C$$Ht>|!ff-4Nr6phZ0LYh21NY}RuoDy{1))hX zihP9bBOx~Zi_C`nT`9dK{YyU!Y4lcLvc0DL4L*ACsEla3UKvR05=HQ$t4e1WOko1tC-2+?Qt+2I0G7|XCH~B}eHEfy_+&NAm_Zl#{ zOW0NIzP1}~>_pk4-Tw9w@0Y!rb#yv#ƿzY`*kwUN2_B$$f40E=fYn9UTI6QI4D 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

? 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 fiijaDkV~u#@(J$#hocm$r`3!YO@z literal 0 HcmV?d00001 diff --git a/channel/banner/sound/wiibrew-banner-loop-part.wav b/channel/banner/sound/wiibrew-banner-loop-part.wav new file mode 100644 index 0000000000000000000000000000000000000000..7b166205bdce97578a5ec0f053ac4937a1979fcb GIT binary patch literal 1077852 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%0Aeuh*KYznv| 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]pOMMGP#BfJw}8zx6&UiS7mD&G8uN44nrh`v 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⪼7>5Sz%TI2qH2yBj;o=foxp{i6H$N1?HT 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 z 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⩔B4i2eye^nNN@uE?!(3dBa2DpP;XNoJ$Q1 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%0Ar2*caQbI5Qnb+<)9vtT%3sYcTsR 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

8t8hg6c-~m9|0Os9!P6P-FN#+zlyGY?1acc2irz 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","IMD5",len(data)) + +f2 = open(sys.argv[2],"w") +f2.write(hdr) +f2.write(digest) +f2.write(data) +f2.close() diff --git a/channel/banner/tools/join-imet.py b/channel/banner/tools/join-imet.py new file mode 100644 index 0000000..31f19a5 --- /dev/null +++ b/channel/banner/tools/join-imet.py @@ -0,0 +1,48 @@ +import os, sys, struct, md5 + +output, datafile, iconarc, bannerarc, soundbns, namesfile = sys.argv[1:] + +data = open(datafile,"r").read() + +names={} + +for i in open(namesfile,"r"): + a,b = i.split("=") + while b[-1] == "\n": + b = b[:-1] + b = b.replace("\\n","\n") + names[a] = b.decode("utf-8") + +def getsize(x): + return os.stat(x).st_size + +def pad(x,l): + if len(x) > l: + raise ValueError("%d > %d",len(x),l) + n = l-len(x) + return x + "\x00"*n + +imet = "\x00"*0x40 +imet += struct.pack(">4sIIIIII","IMET",0x600,3,getsize(iconarc),getsize(bannerarc),getsize(soundbns),1) + +for i in ["jp", "en", "de", "fr", "sp", "it", "nl", "cn", None, "ko"]: + try: + imet += pad(names[i].encode("UTF-16BE"),0x54) + except KeyError: + imet += "\x00"*0x54 +imet += "\x00"*(0x600 - len(imet)) + +imet = imet[:-16] + md5.new(imet).digest() + +open(output,"w").write(imet) + +f = open(sys.argv[1],"w") +f.write(imet) +f.write(data) + +fsize = f.tell() + +if (fsize % 20) != 0: + f.write("\x00"*(20-(fsize%20))) + +f.close() diff --git a/channel/banner/tools/lz77.c b/channel/banner/tools/lz77.c new file mode 100644 index 0000000..0620b23 --- /dev/null +++ b/channel/banner/tools/lz77.c @@ -0,0 +1,273 @@ +#include +#include +#include +#include +#include +#include + +/*Altered by Kuwanger*/ +/************************************************************************* +* Name: lz.c +* Author: Marcus Geelnard +* Description: LZ77 coder/decoder implementation. +* Reentrant: Yes +* $Id: lz.c,v 1.4 2004/10/08 19:28:04 marcus256 Exp $ +* +* The LZ77 compression scheme is a substitutional compression scheme +* proposed by Abraham Lempel and Jakob Ziv in 1977. It is very simple in +* its design, and uses no fancy bit level compression. +* +* This is my first attempt at an implementation of a LZ77 code/decoder. +* +* The principle of the LZ77 compression algorithm is to store repeated +* occurrences of strings as references to previous occurrences of the same +* string. The point is that the reference consumes less space than the +* string itself, provided that the string is long enough (in this +* implementation, the string has to be at least 4 bytes long, since the +* minimum coded reference is 3 bytes long). Also note that the term +* "string" refers to any kind of byte sequence (it does not have to be +* an ASCII string, for instance). +* +* The coder uses a brute force approach to finding string matches in the +* history buffer (or "sliding window", if you wish), which is very, very +* slow. I recon the complexity is somewhere between O(n^2) and O(n^3), +* depending on the input data. +* +* There is also a faster implementation that uses a large working buffer +* in which a "jump table" is stored, which is used to quickly find +* possible string matches (see the source code for LZ_CompressFast() for +* more information). The faster method is an order of magnitude faster, +* and also does a full string search in the entire input buffer (it does +* not use a sliding window). +* +* The upside is that decompression is very fast, and the compression ratio +* is often very good. +* +* The reference to a string is coded as a (length,offset) pair, where the +* length indicates the length of the string, and the offset gives the +* offset from the current data position. To distinguish between string +* references and literal strings (uncompressed bytes), a string reference +* is preceded by a marker byte, which is chosen as the least common byte +* symbol in the input data stream (this marker byte is stored in the +* output stream as the first byte). +* +* Occurrences of the marker byte in the stream are encoded as the marker +* byte followed by a zero byte, which means that occurrences of the marker +* byte have to be coded with two bytes. +* +* The lengths and offsets are coded in a variable length fashion, allowing +* values of any magnitude (up to 4294967295 in this implementation). +* +* With this compression scheme, the worst case compression result is +* (257/256)*insize + 1. +* +*------------------------------------------------------------------------- +* Copyright (c) 2003-2004 Marcus Geelnard +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would +* be appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source +* distribution. +* +* Marcus Geelnard +* marcus.geelnard at home.se +*************************************************************************/ + + +/************************************************************************* +* Constants used for LZ77 coding +*************************************************************************/ + +/* Maximum offset (can be any size < 2^32). Lower values gives faster + compression, while higher values gives better compression. + NOTE: LZ_CompressFast does not use this constant. */ +#define LZ_MAX_OFFSET 4096 + + + +/************************************************************************* +* INTERNAL FUNCTIONS * +*************************************************************************/ + + +/************************************************************************* +* _LZ_StringCompare() - Return maximum length string match. +*************************************************************************/ + +static unsigned int _LZ_StringCompare( unsigned char * str1, + unsigned char * str2, unsigned int minlen, unsigned int maxlen ) +{ + unsigned int len; + + for( len = minlen; (len < maxlen) && (str1[len] == str2[len]); ++ len ); +// for( len = minlen; (len < maxlen) && (str2+len+1 < str1-1) && (str1[len] == str2[len]); ++ len ); + + return len; +} + + +/************************************************************************* +* PUBLIC FUNCTIONS * +*************************************************************************/ + + +/************************************************************************* +* LZ_Compress() - Compress a block of data using an LZ77 coder. +* in - Input (uncompressed) buffer. +* out - Output (compressed) buffer. This buffer must be 0.4% larger +* than the input buffer, plus one byte. +* insize - Number of input bytes. +* The function returns the size of the compressed data. +*************************************************************************/ + +int LZ_Compress( unsigned char *in, unsigned char *out, + unsigned int insize ) +{ + unsigned char mask, bundle1, bundle2; + int inpos, outpos, bytesleft; + int maxoffset, offset, bestoffset; + int maxlength, length, bestlength; + unsigned char *ptr1, *ptr2, *flags; + + /* Do we have anything to compress? */ + if( insize < 1 ) + { + return 0; + } + + /* Remember the repetition marker for the decoder */ + + out[0] = 0x10; + out[1] = insize&0xFF; + out[2] = (insize>>8)&0xFF; + out[3] = (insize>>16)&0xFF; + flags = &out[4]; + *flags = 0; + mask = 128; + + /* Start of compression */ + inpos = 0; + outpos = 5; + + /* Main compression loop */ + bytesleft = insize; + do + { + /* Determine most distant position */ + if( inpos > LZ_MAX_OFFSET ) maxoffset = LZ_MAX_OFFSET; + else maxoffset = inpos; + + /* Get pointer to current position */ + ptr1 = &in[ inpos ]; + + /* Search history window for maximum length string match */ + bestlength = 2; + bestoffset = 0; + for( offset = 3; offset <= maxoffset; ++ offset ) + { + /* Get pointer to candidate string */ + ptr2 = &ptr1[ -offset ]; + + /* Quickly determine if this is a candidate (for speed) */ + if( (ptr1[ 0 ] == ptr2[ 0 ]) && + (ptr1[ bestlength ] == ptr2[ bestlength ]) ) + { + /* Determine maximum length for this offset */ + maxlength = ((inpos+1) > 18 ? 18 : inpos + 1); + + /* Count maximum length match at this offset */ + length = _LZ_StringCompare( ptr1, ptr2, 0, maxlength ); + + /* Better match than any previous match? */ + if( length > bestlength ) + { + bestlength = length; + bestoffset = offset; + } + } + } + + /* Was there a good enough match? */ + if( bestlength > 2) + { + *flags |= mask; + mask >>= 1; + bundle2 = ((bestlength-3)<<4) | (((bestoffset-1)&0xF00)>>8); + bundle1 = (bestoffset-1)&0xFF; + out [ outpos++ ] = bundle2; + out [ outpos++ ] = bundle1; + + inpos += bestlength; + bytesleft -= bestlength; + if (!mask) { + mask = 128; + flags = &out [ outpos++ ]; + *flags = 0; + } + } + else + { + mask >>= 1; + out[ outpos ++ ] = in[ inpos++ ]; + -- bytesleft; + if (!mask) { + mask = 128; + flags = &out [ outpos++ ]; + *flags = 0; + } + } + } + while( bytesleft > 3 ); + + /* Dump remaining bytes, if any */ + while( inpos < insize ) + { + out[ outpos ++ ] = in[ inpos++ ]; + } + + while(outpos&3) + out [ outpos ++] = 0; + + return outpos; +} + +int main(int argc, char *argv[]) +{ + int in, out, size; + struct stat buf; + unsigned char *uncompressed, *compressed; + + if (argc == 3) { + in = open(argv[1], O_RDONLY); + out = creat(argv[2], 0600); + fstat(in, &buf); + uncompressed = malloc(buf.st_size); + read(in, uncompressed, buf.st_size); + close(in); + compressed = malloc(buf.st_size*2); + size = LZ_Compress(uncompressed, compressed, buf.st_size); + write(out, "LZ77", 4); + write(out, compressed, size); + close(out); + free(compressed); + free(uncompressed); + return 0; + } + printf("Usage: %s file.bin file.lz77\n", argv[0]); + return 1; +} + diff --git a/channel/banner/tools/mkbns.c b/channel/banner/tools/mkbns.c new file mode 100644 index 0000000..ae15ccc --- /dev/null +++ b/channel/banner/tools/mkbns.c @@ -0,0 +1,353 @@ +#include +#include +#include +#include +#include + +#if 0 +uint16_t deftbl[16] = { + 2048, 0, + 4096, -2048, + 0, 0, + 1536, 512, + 1920, 0, + 2176, 0, + 3680, -1664, + 3136, -1856 +}; +#endif + +#if 0 +int16_t deftbl[16] = { + 2048, 0, + 0,0, + 0,0, + 0,0, + 0,0, + 0,0, + 0,0, + 0,0, +}; +#endif + +int16_t deftbl[16] = { +674,1040, +3598,-1738, +2270,-583, +3967,-1969, +1516,381, +3453, -1468, +2606, -617, +3795, -1759, +}; + + +typedef struct { + + uint32_t fourcc; + uint32_t unk; + uint32_t filesize; + uint16_t unk1,unk2; + uint32_t infooff; + uint32_t infosize; + uint32_t dataoff; + uint32_t datasize; +} bnshdr; + +typedef struct { + uint32_t fourcc; + uint32_t size; + uint16_t looped; + uint16_t unk2; + uint16_t srate; + uint16_t unk3; + uint32_t looppoint; + uint32_t samples; + uint32_t unknown1[6]; + uint32_t start1; + uint32_t start2; + uint32_t unknown2[2]; + int16_t tbl1[16]; + uint16_t unka1[8]; + int16_t tbl2[16]; + uint16_t unka2[8]; +} bnsinfo; + +float tables[2][16]; + +typedef struct { + uint32_t fourcc; + uint32_t size; +} bnsdatahdr; + +#define SWAB16(x) ((((x)>>8)&0xFF) | (((x)&0xFF)<<8)) +#define SWAB32(x) ((SWAB16((x)&0xFFFF)<<16)|(SWAB16(((x)>>16)&0xFFFF))) + +#define ISWAB16(x) x=SWAB16(x) +#define ISWAB32(x) x=SWAB32(x) + +typedef struct { + int16_t l; + int16_t r; +} sample; + +int16_t lsamps[2][2] = {{0,0},{0,0}}; +int16_t rlsamps[2][2] = {{0,0},{0,0}}; + +#define CLAMP(a,min,max) (((a)>(max))?(max):(((a)<(min))?(min):(a))) + +void unpack_adpcm(int idx, int16_t *table, uint8_t *data, int16_t *outbuf) +{ + + int32_t index = (data[0] >> 4) & 0x7; //highest bit of byte is ignored + uint32_t exponent = 28 - (data[0] & 0xf); + int32_t factor1 = table[2*index]; + int32_t factor2 = table[2*index + 1]; + int i; + int32_t sample; + for(i=0;i<14;i++) { + sample = data[1+(i/2)]; + if(!(i&1)) { + sample = (sample&0xf0)<<24; + } else { + sample = (sample)<<28; + } + sample = ((lsamps[idx][1]*factor1 + lsamps[idx][0]*factor2)>>11) + (sample>>exponent); + if(sample>32767) sample=32767; + if(sample<-32768) sample=-32768; + if(abs(sample)>20000) printf("dammit %d\n",sample); + outbuf[i] = sample; + lsamps[idx][0] = lsamps[idx][1]; + lsamps[idx][1] = outbuf[i]; + } +} + +uint8_t findexp(float residual, uint8_t *nybble) +{ + uint8_t exp = 0; + + while((residual > 7.5f) || (residual < -8.5f)) { + exp++; + residual /= 2; + } + if(nybble) + *nybble = CLAMP((int16_t)floor(residual),-8,7); + return exp; +} + +uint8_t determine_std_exponent(int idx, int16_t *table, int index, int16_t *inbuf) +{ + int32_t maxres = 0; + int32_t factor1 = table[2*index]; + int32_t factor2 = table[2*index + 1]; + int32_t predictor; + int32_t residual; + int i; + int16_t elsamps[2]; + memcpy(elsamps,rlsamps[idx],sizeof(int16_t)*2); + for(i=0;i<14;i++) { + predictor = (elsamps[1]*factor1 + elsamps[0]*factor2)/2048; + residual = inbuf[i] - predictor; + if(residual > maxres) maxres = residual; + elsamps[0] = elsamps[1]; + elsamps[1] = inbuf[i]; + } + return findexp(maxres,NULL); +} + +float compress_adpcm(int idx, int16_t *table, uint8_t tblidx, uint8_t *data, int16_t *inbuf, int16_t *lsamps) { + + int32_t factor1 = table[2*tblidx]; + int32_t factor2 = table[2*tblidx + 1]; + int32_t predictor; + int32_t residual; + uint8_t exp; + int8_t nybble; + int i; + float error = 0; + + exp = determine_std_exponent(idx, table, tblidx, inbuf); + + while(exp<=15) { + memcpy(lsamps,rlsamps[idx],sizeof(int16_t)*2); + data[0] = exp | tblidx<<4; + error = 0; + for(i=0;i<14;i++) { + predictor = (lsamps[1]*factor1 + lsamps[0]*factor2)>>11; + residual = inbuf[i] - predictor; + residual = residual>>exp; + if((residual > 7) || (residual < -8)) { + exp++; + break; + } + nybble = CLAMP(residual,-8,7); + if(i&1) { + data[i/2+1] |= nybble&0xf; + } else { + data[i/2+1] = nybble<<4; + } + predictor += nybble< 4 && (atoi(argv[3]) == 1)) + separated_loop = 1; + + f = fopen(argv[1],"r"); + fo = fopen(argv[2],"w"); + + fseek(f,0,SEEK_END); + + samples = ftell(f)/(sizeof(uint16_t)*2); + + if(separated_loop) { + f2 = fopen(argv[4],"r"); + fseek(f2,0,SEEK_END); + loop_pt = samples; + samples += ftell(f2)/(sizeof(uint16_t)*2); + } + + blocks = (samples+13)/14; + + memset(&hdr,0,sizeof(hdr)); + memset(&info,0,sizeof(info)); + memset(&datahdr,0,sizeof(datahdr)); + + hdr.fourcc = 0x20534e42; + hdr.unk = SWAB32(0xfeff0100); + hdr.filesize = SWAB32(blocks * 16 + sizeof(hdr) + sizeof(info) + sizeof(datahdr)); + hdr.unk1 = SWAB16(32); + hdr.unk2 = SWAB16(2); + hdr.infooff = SWAB32(sizeof(hdr)); + hdr.infosize = SWAB32(sizeof(info)); + hdr.dataoff = SWAB32(sizeof(hdr) + sizeof(info)); + hdr.datasize = SWAB32(sizeof(datahdr) + blocks * 16); + + info.fourcc = 0x4f464e49; + info.size = SWAB32(sizeof(info)); + info.srate = SWAB16(32000); + if(argc > 3 && (atoi(argv[3]) == 1)) + info.looped = SWAB16(1); + info.unk2 = SWAB16(0x200); + info.looppoint = SWAB32(loop_pt); + info.samples = SWAB32(samples); + info.unknown1[0] = SWAB32(0x18); + info.unknown1[1] = SWAB32(0x00); + info.unknown1[2] = SWAB32(0x20); + info.unknown1[3] = SWAB32(0x2c); + info.unknown1[4] = SWAB32(0x00); + info.unknown1[5] = SWAB32(0x38); + info.unknown2[0] = SWAB32(0x68); + info.unknown2[1] = SWAB32(0x00); + info.start1 = SWAB32(0); + info.start2 = SWAB32(blocks * 8); + for(i=0;i<16;i++) { + info.tbl1[i] = SWAB16((int16_t)(deftbl[i])); + info.tbl2[i] = SWAB16((int16_t)(deftbl[i])); + } + + datahdr.fourcc = 0x41544144; + datahdr.size = SWAB32(blocks * 16); + + fwrite(&hdr,sizeof(hdr),1,fo); + fwrite(&info,sizeof(info),1,fo); + fwrite(&datahdr,sizeof(datahdr),1,fo); + + + datain = malloc(sizeof(uint16_t)*2*blocks*14); + memset(datain,0,sizeof(uint16_t)*2*blocks*14); + + databuf = malloc(blocks * 16); + data1 = databuf; + data2 = databuf + blocks * 8; + + if(separated_loop) { + fseek(f,0,SEEK_SET); + fread(datain,sizeof(uint16_t)*2,loop_pt,f); + fseek(f2,0,SEEK_SET); + fread(&datain[loop_pt],sizeof(uint16_t)*2,samples-loop_pt,f2); + fclose(f); + fclose(f2); + } else { + fseek(f,0,SEEK_SET); + fread(datain,sizeof(uint16_t)*2,samples,f); + fclose(f); + } + + printf("Samples: 0x%x\n",samples); + printf("Blocks: 0x%x Size ADPCM: 0x%x Size PCM: 0x%x\n",blocks,blocks*8,blocks*14); + if(separated_loop) + printf("Loop point: 0x%x samples\n",loop_pt); + + for(i=0;i +#include +#include +#include +#include + +struct tpl_hdr { + uint32_t magic; + uint32_t ntextures; + uint32_t hdrsize; +}; + +struct tpl_tex { + uint32_t hdroff; + uint32_t pltoff; +}; + +struct tpl_texhdr { + uint16_t height; + uint16_t width; + uint32_t format; + uint32_t offset; + uint32_t wraps; + uint32_t wrapt; + uint32_t minfilter; + uint32_t maxfilter; + float lodbias; + uint8_t edgelod; + uint8_t minlod; + uint8_t maxlod; + uint8_t unpacked; +}; + +#define SWAB16(x) ((((x)>>8)&0xFF) | (((x)&0xFF)<<8)) +#define SWAB32(x) ((SWAB16(((uint32_t)(x))&0xFFFF)<<16)|(SWAB16((((uint32_t)(x))>>16)&0xFFFF))) + +#define ISWAB16(x) x=SWAB16(x) +#define ISWAB32(x) x=SWAB32(x) + +#define ALIGN(x) (((x)+31)&(~31)) + +void do_ia8(int width, int height, FILE *fp, uint8_t **row_pointers) { + + uint16_t **in = (uint16_t **)row_pointers; + int wo, ho, wt, i, j; + uint16_t *out; + wo = (width + 3) & ~3; + ho = (height + 3) & ~3; + wt = wo/4; + out = malloc(wo*ho*2); + memset(out,0,wo*ho*2); + for(i=0; i>3) & 0x001F); + } + } + + fwrite(out,2,wo*ho,fp); +} + +void do_i8(int width, int height, FILE *fp, uint8_t **in) { + + int wo, ho, wt, i, j; + uint8_t *out; + wo = (width + 7) & ~7; + ho = (height + 3) & ~3; + wt = wo/8; + out = malloc(wo*ho); + memset(out,0,wo*ho); + for(i=0; i>16); + } + } + + fwrite(out,2,wo*ho*2,fp); +} + + +int main(int argc, char **argv) +{ + png_structp png_ptr = png_create_read_struct + (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + + png_infop info_ptr = png_create_info_struct(png_ptr); + + if (setjmp(png_jmpbuf(png_ptr))) + { + printf("PNG error\n"); + return 1; + } + + FILE *fp = fopen(argv[1],"rb"); + + png_init_io(png_ptr, fp); + png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_PACKING|PNG_TRANSFORM_EXPAND|PNG_TRANSFORM_STRIP_16|PNG_TRANSFORM_SWAP_ALPHA, NULL); + + uint8_t **row_pointers = png_get_rows(png_ptr, info_ptr); + + png_uint_32 width, height; + int bit_depth, color_type, filter_method, compression_type, interlace_type; + png_get_IHDR(png_ptr, info_ptr, &width, &height, + &bit_depth, &color_type, &interlace_type, + &compression_type, &filter_method); + + printf("Texture: %d x %d\n",(int)width,(int)height); + + FILE *fo = fopen(argv[2],"wb"); + + struct tpl_hdr tplhdr; + tplhdr.magic = SWAB32(0x0020af30); + tplhdr.ntextures = SWAB32(1); + tplhdr.hdrsize = SWAB32(sizeof(struct tpl_hdr)); + + fwrite(&tplhdr,sizeof(struct tpl_hdr),1,fo); + + struct tpl_tex tpltex; + tpltex.hdroff = SWAB32(ftell(fo) + sizeof(struct tpl_tex)); + tpltex.pltoff = SWAB32(0); + + fwrite(&tpltex,sizeof(struct tpl_tex),1,fo); + + struct tpl_texhdr texhdr; + memset(&texhdr,0,sizeof(struct tpl_texhdr)); + + + + texhdr.width = SWAB16(width); + texhdr.height = SWAB16(height); + texhdr.offset = SWAB32(ALIGN(ftell(fo) + sizeof(struct tpl_texhdr))); + texhdr.minfilter = SWAB32(1); + texhdr.maxfilter = SWAB32(1); + texhdr.wraps = SWAB32(atoi(argv[3])); + texhdr.wrapt = SWAB32(atoi(argv[4])); + + switch(color_type) { + case PNG_COLOR_TYPE_GRAY_ALPHA: + texhdr.format = SWAB32(3); //IA8 + fwrite(&texhdr,sizeof(struct tpl_texhdr),1,fo); + fseek(fo,SWAB32(texhdr.offset),SEEK_SET); + do_ia8(width, height, fo,row_pointers); + break; + case PNG_COLOR_TYPE_GRAY: + texhdr.format = SWAB32(1); //I8 + fwrite(&texhdr,sizeof(struct tpl_texhdr),1,fo); + fseek(fo,SWAB32(texhdr.offset),SEEK_SET); + do_i8(width, height, fo,row_pointers); + break; + case PNG_COLOR_TYPE_RGB_ALPHA: + texhdr.format = SWAB32(6); //ARGB + fwrite(&texhdr,sizeof(struct tpl_texhdr),1,fo); + fseek(fo,SWAB32(texhdr.offset),SEEK_SET); + do_rgba8(width, height, fo,row_pointers); + break; + case PNG_COLOR_TYPE_RGB: + texhdr.format = SWAB32(4); //RGB565 + fwrite(&texhdr,sizeof(struct tpl_texhdr),1,fo); + fseek(fo,SWAB32(texhdr.offset),SEEK_SET); + do_rgb565(width, height, fo,row_pointers); + break; + } + return 0; +} diff --git a/channel/channelapp/.gitignore b/channel/channelapp/.gitignore new file mode 100644 index 0000000..e990be7 --- /dev/null +++ b/channel/channelapp/.gitignore @@ -0,0 +1,10 @@ +stub.bin +*.dol +*.elf +.*.swp +dist +build +i18n/merge +i18n/*.gen +*.map + diff --git a/channel/channelapp/Makefile b/channel/channelapp/Makefile new file mode 100644 index 0000000..bb80931 --- /dev/null +++ b/channel/channelapp/Makefile @@ -0,0 +1,230 @@ +#pngcrush -rem iTXt -rem tEXt -d out *.png + +PREFIX = $(DEVKITPPC)/bin/powerpc-eabi- + +CC = $(PREFIX)gcc +AS = $(PREFIX)as +OBJCOPY = $(PREFIX)objcopy +ELF2DOL =$(DEVKITPPC)/bin/elf2dol +GDB = $(PREFIX)gdb +BIN2S = $(DEVKITPPC)/bin/bin2s +TARGET_STUB = stub +TARGET_APP = channelapp +TARGET_CHAN = channelapp-channel + +WIIPAX = ../../wiipax/client/wiipax + +BASE_ADDR = 0x81330000 + +DIR_STUB = stub +DIR_SRC = source +DIR_DATA = data +DIR_DATA_CRYPT = $(DIR_DATA)/crypt +DIR_I18N = i18n +DIR_BUILD = build +DIR_BUILD_CHAN = $(DIR_BUILD)/channel + +DIR_INCLUDES = $(DIR_BUILD) \ + $(DEVKITPRO)/libogc/include \ + $(DEVKITPRO)/3rd/include \ + $(DEVKITPRO)/3rd/include/freetype2 + +DIR_LIBS = \ + $(DEVKITPRO)/libogc/lib/wii \ + $(DEVKITPRO)/3rd/lib + +LIBS = fat wiiuse bte mxml png15 z ogc m db freetype + +MACHDEP = -g -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float +CFLAGS = $(MACHDEP) -Os -Wall -DBASE_ADDR=$(BASE_ADDR) $(DIR_INCLUDES:%=-I%) +# using -Os for the stub makes it dependent on libgcc +CFLAGS_STUB = $(MACHDEP) -O2 -Wall -DBASE_ADDR=$(BASE_ADDR) $(DIR_INCLUDES:%=-I%) +ASFLAGS = -D_LANGUAGE_ASSEMBLY -DHW_RVL +LDFLAGS_STUB = $(MACHDEP) -Wl,--section-start,.init=0x80001800 -nostartfiles -nodefaultlibs +LDFLAGS_APP = $(MACHDEP) -specs=newrvl.spec -Wl,--section-start,.init=$(BASE_ADDR) \ + $(DIR_LIBS:%=-L%) $(LIBS:%=-l%) -Wl,-Map,channelapp.map +LDFLAGS_CHAN = $(MACHDEP) -specs=newrvl.spec -Wl,--section-start,.init=$(BASE_ADDR) -Wl,-e,_stub_start $(DIR_LIBS:%=-L%) $(LIBS:%=-l%) -Wl,-Map,channelapp_chan.map + +FILES_STUB = $(wildcard $(DIR_STUB)/*.S) $(wildcard $(DIR_STUB)/*.c) +FILES_STUB_OBJx = $(FILES_STUB:$(DIR_STUB)/%.S=$(DIR_BUILD)/%.o) +FILES_STUB_OBJ = $(FILES_STUB_OBJx:$(DIR_STUB)/%.c=$(DIR_BUILD)/%.o) + +BANNER_BIN = banner/banner.bin +BANNER_OBJ = $(DIR_BUILD)/banner_bin.o + +FILES_TTF = $(wildcard $(DIR_DATA)/*.ttf) +FILES_TTF_OBJ = $(FILES_TTF:$(DIR_DATA)/%.ttf=$(DIR_BUILD)/%_ttf.o) + +FILES_PNG = $(wildcard $(DIR_DATA)/*.png) +FILES_PNG_OBJ = $(FILES_PNG:$(DIR_DATA)/%.png=$(DIR_BUILD)/%_png.o) + +POTPL = $(DIR_I18N)/template.pot +POTPL_MRG = $(DIR_I18N)/template.merge.pot +FILES_PO = $(wildcard $(DIR_I18N)/*.po) +FILES_PO_ENC = $(FILES_PO:$(DIR_I18N)/%.po=$(DIR_BUILD)/%.enc.po) +FILES_MO = $(FILES_PO_ENC:$(DIR_BUILD)/%.enc.po=$(DIR_BUILD)/%.mo) +FILES_MO_OBJ = $(FILES_MO:$(DIR_BUILD)/%.mo=$(DIR_BUILD)/%_mo.o) +ENCODING = utf-8 +FILES_PO_MRG = $(FILES_PO:$(DIR_I18N)/%.po=$(DIR_I18N)/merge/%.po) + +FILES_SRC = $(wildcard $(DIR_SRC)/*.c) +FILES_SRC_OBJ = $(FILES_SRC:$(DIR_SRC)/%.c=$(DIR_BUILD)/%.o) \ + $(DIR_BUILD)/$(TARGET_STUB)_bin.o $(BANNER_OBJ) \ + $(FILES_PNG_OBJ) $(FILES_MO_OBJ) $(FILES_TTF_OBJ) + +FILES_CHAN = $(DIR_CHAN)/nandloader.S +FILES_CHAN_OBJ = $(DIR_BUILD)/nandloader.o $(FILES_SRC_OBJ) + +.PHONY: all channel world clean upload gdb debug + +all: + @[ -d $(DIR_BUILD) ] || mkdir $(DIR_BUILD) + @$(MAKE) --no-print-directory data + @$(MAKE) --no-print-directory $(TARGET_APP).elf + +channel: + @$(MAKE) --no-print-directory all + @$(MAKE) --no-print-directory $(TARGET_CHAN).dol + +world: + @$(MAKE) --no-print-directory all + @$(MAKE) --no-print-directory $(TARGET_CHAN).dol + +data: $(BANNER_OBJ) $(FILES_PNG_OBJ) $(FILES_MO_OBJ) \ + $(FILES_PNG_INT_OBJ) $(FILES_INT_OBJ) \ + $(FILES_TTF_OBJ) + +%.bin: %.elf + @echo $(@F) + @$(OBJCOPY) -O binary $< $@ + +%.dol: %.elf $(ELF2DOL) + @echo $(@F) + @$(ELF2DOL) $< $@ + +$(TARGET_STUB).elf: $(FILES_STUB_OBJ) + @echo $(@F) + @$(CC) $(FILES_STUB_OBJ) $(LDFLAGS_STUB) -o $@ + +$(TARGET_APP)_nopax.elf: $(FILES_SRC_OBJ) newrvl.ld + @echo $(@F) + @$(CC) $(FILES_SRC_OBJ) $(LDFLAGS_APP) -o $@ + +$(TARGET_APP).elf: $(TARGET_APP)_nopax.elf + @$(WIIPAX) -s devkitfail $< $@ + +$(TARGET_CHAN).elf: $(TARGET_APP)_nopax.elf + @echo $(@F) + @$(WIIPAX) -s dkfailchannel $< $@ + +$(DIR_BUILD)/$(TARGET_STUB)_bin.o: $(TARGET_STUB).bin + @echo $(@F) + @$(BIN2S) -a 32 $< | $(AS) -o $@ + +$(BANNER_BIN): + @$(MAKE) -C banner + +$(BANNER_OBJ): $(BANNER_BIN) + @echo $(@F) + @$(BIN2S) -a 32 $< | $(AS) -o $@ + @echo "extern const u8 $( $(@:%.o=%.h) + @echo "extern const u8 $(> $(@:%.o=%.h) + @echo "extern const u32 $(> $(@:%.o=%.h) + +$(DIR_BUILD)/%_png.o: $(DIR_DATA)/%.png + @echo $(@F) + @$(BIN2S) -a 32 $< | $(AS) -o $@ + @echo "extern const u8 $( $(@:%.o=%.h) + @echo "extern const u8 $(> $(@:%.o=%.h) + @echo "extern const u32 $(> $(@:%.o=%.h) + +$(DIR_BUILD)/%_ttf.o: $(DIR_DATA)/%.ttf + @echo $(@F) + @$(BIN2S) -a 32 $< | $(AS) -o $@ + @echo "extern const u8 $( $(@:%.o=%.h) + @echo "extern const u8 $(> $(@:%.o=%.h) + @echo "extern const u32 $(> $(@:%.o=%.h) + +$(DIR_BUILD)/%_mo.o: $(DIR_BUILD)/%.mo + @echo $(@F) + @$(BIN2S) -a 32 $< | $(AS) -o $@ + @echo "extern const u8 $( $(@:%.o=%.h) + @echo "extern const u8 $(> $(@:%.o=%.h) + @echo "extern const u32 $(> $(@:%.o=%.h) + +$(DIR_BUILD)/%.o: $(DIR_INT)/% + @echo $(@F) + @$(BIN2S) -a 32 $< | $(AS) -o $@ + @echo "extern const u8 $(subst .,_,$( $(@:%.o=%.h) + @echo "extern const u8 $(subst .,_,$(> $(@:%.o=%.h) + @echo "extern const u32 $(subst .,_,$(> $(@:%.o=%.h) + +$(DIR_BUILD)/%.mo: $(DIR_BUILD)/%.enc.po + @echo $(@F) + @msgfmt --no-hash -o $@ $< + +$(DIR_BUILD)/%.enc.po: $(DIR_I18N)/%.po + @echo $(@F) + @msgconv -t $(ENCODING) -o $@ $< + +$(DIR_BUILD)/%.o: $(DIR_STUB)/%.c + @echo $(@F) + @$(CC) $(CFLAGS_STUB) -MMD -MP -MF $(@:%.o=%.d) -c $< -o $@ + +$(DIR_BUILD)/%.o: $(DIR_STUB)/%.S + @echo $(@F) + @$(CC) $(ASFLAGS) -c $< -o $@ + +$(DIR_BUILD)/%.o: $(DIR_SRC)/%.c + @echo $(@F) + @$(CC) $(CFLAGS) -MMD -MP -MF $(@:%.o=%.d) -c $< -o $@ + +-include $(FILES_SRC_OBJ:%.o=%.d) + +clean: + rm -rf $(DIR_BUILD) \ + *.elf *.dol *.bin *.map i18n/merge/* $(POTPL).gen + @$(MAKE) -C banner clean + +wiiload: + @$(MAKE) --no-print-directory all + @$(DEVKITPPC)/bin/wiiload $(TARGET_APP).elf + +upload: wiiload + +$(POTPL).gen: source/*.c + @echo "GETTEXT $(POTPL).gen" + @xgettext --from-code=UTF-8 -C -o $(POTPL).gen --keyword=_ source/*.c + @sed -i.bak s/CHARSET/UTF-8/g $(POTPL).gen + +$(POTPL): $(POTPL).gen + @echo "MERGE $(POTPL_MRG)" + @msgmerge $(POTPL) $(POTPL).gen > $(POTPL_MRG) + @mv -v $(POTPL_MRG) $(POTPL) + @rm $(POTPL).gen.bak + +genmsgs: $(POTPL) +msgmerge: $(POTPL) $(FILES_PO_MRG) +movemerge: + @mv -v i18n/merge/* i18n + +msgupdate: msgmerge movemerge msgstats + +%.postats: %.po + @echo -n "$<: " + @msgfmt --statistics -o /dev/null $< + +msgstats: $(FILES_PO:%.po=%.postats) +msgmergestats: msgmerge $(FILES_PO_MRG:%.po=%.postats) + +$(DIR_I18N)/merge/%.po : $(DIR_I18N)/%.po $(POTPL) + @[ ! -d $(DIR_I18N)/merge ] && mkdir -p $(DIR_I18N)/merge || true + @echo "MERGE $(@F)" + @msgmerge -o $@ $(@:$(DIR_I18N)/merge/%.po=$(DIR_I18N)/%.po) $(POTPL) + +gdb: + $(GDB) -n $(TARGET_APP)_nopax.elf + +debug: + $(GDB) -n $(TARGET_APP)_nopax.elf -x gdb.txt + diff --git a/channel/channelapp/banner/.gitignore b/channel/channelapp/banner/.gitignore new file mode 100644 index 0000000..a0b92ff --- /dev/null +++ b/channel/channelapp/banner/.gitignore @@ -0,0 +1,3 @@ +twintig +banner.bin + diff --git a/channel/channelapp/banner/Makefile b/channel/channelapp/banner/Makefile new file mode 100644 index 0000000..f292584 --- /dev/null +++ b/channel/channelapp/banner/Makefile @@ -0,0 +1,11 @@ +all: banner.bin + +banner.bin: twintig title banner.ppm icon.ppm + @$(CURDIR)/twintig + +twintig: twintig.c + @gcc -g -O2 -Wall $< -o $@ + +clean: + rm -f twintig banner.bin + diff --git a/channel/channelapp/banner/banner.ppm b/channel/channelapp/banner/banner.ppm new file mode 100644 index 0000000..4603f4a --- /dev/null +++ b/channel/channelapp/banner/banner.ppm @@ -0,0 +1,4 @@ +P6 +192 64 +255 +bÌÝbÌÜbÌÜbÌÜbÌÜbÌÜbÌÝcÌÜbÌÜbÌÜbÌÜbÌÝbÌÜcËÜbËÝbÌÜbËÜbÌÝcÌÝbÌÝbÌÜbËÜbÌÝbÌÝbÌÜbÌÜbÌÝbÌÝbÌÜbÌÝcÌÝcÌÜbÌÝbËÜbËÝbÉÚZ»ÏZÀÓ[¾Ñ\ÂÔfÍÞgÍÞiÏÝiÏÞjÍÞjÏÞjÏßjÏßjÏßjÏÞjÏÞiÏÞiÍÝfÍÞeÍÞdÌÝ\ÅÖS¶ËW¹Í`Æ×bÌÝbËÜbËÜbÌÝcÌÝbÌÝbÌÝcÌÜbËÝbËÝbËÝbÌÜbÌÜbÌÝbËÜbËÝcÌÝdÌÜeÌÝeÌÝfÍÝgÍÞfÍÝfÌÜeÌÝdËÜcÌÜcÌÜbËÝcÌÝcÌÝbËÝbÌÝcÌÝbÌÝcÌÜbÌÝbÌÝbÌÝcÌÝcÌÜbËÝbÌÝbÌÜbÌÜbËÜbËÜbÌÝbËÜcÌÜbÌÝbÌÜbÌÝbÌÝbÌÜcÌÜbÌÝbÌÜcÌÜbËÝbÌÝbÌÜbÌÜcÌÝbÌÝbÌÜcÌÝbÌÝbÌÜbÌÜcÌÝbËÝbËÝcËÜbÌÝbÌÝcÌÜbÌÜbÌÜbÌÜbÌÜcËÜbÌÝcËÝbÌÜbÌÝcËÝbÌÜbÌÜbÌÜbÌÜbËÜcËÜbÌÝcÌÝbÌÝbÌÜbÌÝcÌÜbÌÜbÌÜbÌÜbÌÝbÌÜbÌÝbËÜcÌÜbÌÜbÌÝcÌÝbÌÝbÌÜcËÜcÌÜbÌÝbËÝbËÜbÌÝbËÝbÌÜbÌÜcÌÝcÌÜbËÜbËÝcÌÝbÌÝbÌÝbËÜbÌÝbËÜbÌÝbËÝbÌÜbÌÜbËÜbËÜbÌÜbÌÜbÌÜbËÜbËÜbÌÜbËÜbËÜbËÜbËÜbËÝbËÜbËÜbÌÜbËÜbËÜbËÜbËÝbËÝbÌÝbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÝbËÜbËÜbËÜ\¾Ñ[ÀÓ_ÄÕ[¾ÒeÊÜiÏÝiÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞiÏÞgÍÝeÍÝZ¾ÒU¹Í[¼ÐbËÚbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÝbËÜbËÜbËÜbËÜbËÜbËÜbËÜdËÜeÌÝfÍÞiÍÝjÍÝjÍÝjÌÝgËÜfËÜdÊÚdÊÚcËÜcËÝbËÜbËÜbËÜbËÝbËÝbËÜbËÜbËÜbËÜbËÜbÌÜbËÝbËÜbÌÜbËÜbËÜbËÜbËÜbËÝbËÜbËÜbÌÝbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÝbËÜbÌÜbËÝbËÝbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbÌÜbËÜbËÜbËÝbËÜbËÜbËÜbÌÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbÌÜbËÜbËÜbËÝbËÜbËÜbËÜbËÝbËÜbËÜbËÜbËÝbËÜbÌÜbËÜbËÜbÌÜbËÝbËÝbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÝbËÜbËÜbËÜbËÜbËÝbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜ`ËÜbËÜ`ËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbÌÝ^ÃÕZ½ÑbÆØ^ÂÔcÅ×iÍÝjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞjÍÞiÍÝgÍÝdÊÜU¶ÌW»Ï^ÂÓbÌÝbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜcËÜdËÜgÌÝiÍÝkÍÝkÍÝjÌÜiËÜfÉÙdÈØdÈØdÈÙdÉÚcÊÚbËÜbËÜbËÜbËÜbËÜbËÜ`ËÜbËÜbËÜbËÜbËÜbËÜbÊÜbËÜbËÜ`ËÜbÊÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜ`ËÜbËÜbËÜbËÜbËÜbËÜbËÜ`ËÜbËÜbËÜbËÜ`ËÜbËÜ`ËÜbËÜbËÜbËÜ`ËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜbËÜ`ËÜbËÜbËÜbËÜbËÚ`ÊÜbÊÜ`ÊÚbËÜ`ËÜ`ÊÜbËÜbËÜbËÜbÊÜ`ËÜ`ËÜbËÜbËÜ`ÊÜ`ËÚbÊÜ`ËÜ`ËÜ`ËÜbËÜbËÜbÊÜbÊÜbËÜ`ËÜ`ÊÜbËÜ`ËÜ`ÊÜ`ÊÜbËÜbËÜ`ËÜ`ËÜ`ÉÙX¹Ï]ÂÔdÈÙbÅÖgÊÚiÍÞiÍÞjÍÞiÍÞiÍÞjÍÞjÍÞjÌÞjÌÞiÍÞiÍÞiÍÝgÍÞ\½ÑU·ÌX»Ï`ÆØbËÜ`ËÜ`ËÜbÊÜ`ÊÜ`ÊÜ`ÊÜ`ËÜ`ÊÜ`ÊÜbÊÜbËÜ`ËÜbËÜbËÜbËÜdÊÜeËÚgËÜjËÜjËÜgÊÚeÈÙdÆØbÅÖ`ÄÖ_ÄÖ`Å×bÆØcÉÙbÊÚbÊÜbÊÜbËÜ`ËÜ`ËÜ`ÊÜbËÜbËÜ`ÊÜbËÜ`ËÜ`ÊÜ`ËÜ`ËÜ`ÊÚ`ÊÜbËÜbÊÚ`ËÜbÊÜbÊÜbËÜbËÜbÊÚ`ËÜ`ËÜ`ËÜ`ÊÜbËÜ`ËÚ`ÊÚbÊÜ`ËÜbÊÜbÊÜbÊÜbËÜ`ËÜbÊÜbËÜbËÜbÊÜbËÜ`ÊÜbËÜbÊÜbËÜ`ËÜbÊÜbËÜbËÚ`ËÜbËÜ`ÊÜ`ÊÜ`ËÜ`ËÜ`ËÜbÊÚbËÜ`ÊÜbÊÜ`ÊÜbËÜbËÜbËÜbËÜbËÜbÊÜ`ÊÜ`ËÜbÊÜ`ÊÜbÊÜbËÜ`ËÜ`ÊÜ`ÊÜbÊÜbÊÜ`ÊÜ`ÊÜ`ËÜ`ËÚbËÜbËÜbËÜbÊÜbËÜ`ËÜ`ËÚbËÜ`ËÜbÊÚbÊÜbËÜ`ËÚbËÜbËÜ`ËÜbËÚbÊÜ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÜ`ÊÚ`ÊÜ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚbÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÜbÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÜ`ÊÜbËÜ\ÂÔV·ÍbÄÕdÆØeÆØgÊÚkÍÞkÍÞkÍÞjÍÝjÍÞiÍÝiÍÝiÍÝiÌÞjÌÝiÌÝ`ÃÔX·ÌX¹Ï\¿Ò`ËÜ`ÊÚ`ÊÚbÊÜ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚbÉÚcÉÙeÈÙfÈÙfÉÙeÈÙcÅ×`ÄÖ^ÃÕ\ÀÓ\ÀÓ\ÀÔ^ÃÔ`ÄÖbÆØbÈÙbÉÚbÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÜ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚbÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚbÊÜ`ÊÜ`ÊÜ`ÊÜ_ÊÚ_ÊÚ`ÊÜ`ÊÜ_ËÜ_ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÜ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÜ`ÊÜ`ÊÚ`ÊÜ`ÊÚ`ÊÜbÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚbÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÉÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÉÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚX¹ÏW¶ËbÂÔdÆØgÈÙjÉÚlÌÜmÍÝlÍÝlÍÝkÍÝkÍÝjÍÝjÌÜjÉÚdÃÔ\¸Í[¹ÏX¹Ï`ÉÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÉÚbÈÙbÆØbÅ×bÅÖ`ÅÖ_ÄÖ^ÃÕ\ÂÔ[ÀÓZ¿ÓZ¿ÒZ¿Ò[¿Ó\ÂÔ_ÄÕ`Å×bÈÙ`ÉÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÉÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚmÍÝ{Òà€Ôâ{ÐßmÈÙfËÚ_ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÉÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÚ`ÊÜ`ÊÚ`ÊÚ`ÊÚ`ÊÚ_ÊÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÊÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÉÚ_ÊÚ`ÊÚ`ÉÚ_ÊÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÊÚ_ÉÚ`ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÊÚ`ÉÚ`ÉÚ`ÉÚ_ÈÙW·ÌX¶Ë`ÂÔfÈÙmÌÝqÍÝrÍÝqÌÝpÌÝnËÝmËÜmËÜnËÜkÅ×gÀÓd¾Ñ\¹Ï_ÆØ`ÊÜ`ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÚ]ÉÚ^ÉÚ_ÊÚ`ÉÚ`ÈÙ`ÆØ_ÅÖ^ÃÕ]ÃÕ]ÃÕ]ÃÕ\ÃÕ\ÂÕ[ÂÔZÂÔZÀÔZÀÔZÀÓ[ÀÓ\ÂÔ_ÄÖ`ÅØ`ÈÙ`ÉÚ`ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÊÚ`ÊÚ`ÉÚ_ÉÚ`ÉÚ_ÊÚ`ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÊÚ`ÉÚ_ÊÚ`ÉÚ`ÉÚ`ÊÚ`ÉÚuÏÞˆÖãˆÕâ‚ÑßsÅÖi½ÑmÂÔjÈÙ_ÉÚ_ÉÚ`ÉÚ`ÊÚ_ÉÚ_ÉÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ_ÊÚ`ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ`ÊÚ`ÉÚ`ÉÚ`ÊÚ_ÉÚ`ÉÚ`ÊÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ_ÉÚ`ÊÚ`ÊÚ`ÊÚ`ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÙ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÊÚ_ÈÙX¹Ï\¸ÍeÄÕlËÜtÐßyÒàzÒàyÑàyÑàxÑßwÐÞuÌÜtÉÚqÆØeÂÔ_ÆÙ_ÊÚ`ÉÙ_ÉÚ`ÉÙ`ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÈÚ`ÆØcÅÕ`ÄÔ^Å×_ÈÙ_ÆØ_Å×]ÃÕ\ÂÕ\ÃÕ\ÃÕ]ÄÖ]ÄÖ]ÅÖ]ÅÖ]ÄÖ\ÄÖ\ÄÕ\ÂÔ[ÂÔ[ÂÔ]ÃÔ^Å×_ÆØ_ÉÙ`ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÚ_ÉÚkÅ×xÈØ{ÌÜlÀÒT®ÅG£½G£½U®ÅmÀÓiÈÙ^ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÙ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ`ÉÚ`ÉÚ`ÉÚ_ÉÙ_ÉÙ`ÉÚ`ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÚ_ÉÚ_ÉÚ`ÉÙ`ÉÚ`ÉÚ_ÉÚ_ÉÙ_ÉÚ_ÉÚ_ÈÙ_ÉÙ_ÈÙ_ÉÙ_ÈÙ_ÈÚ_ÉÙ_ÈÙ_ÈÙ_ÉÙ_ÈÙ_ÈÙ_ÈÙ_ÉÚ_ÈÙ_ÉÙ_ÈÙ_ÈÙ_ÉÚ_ÉÙ_ÈÙ_ÈÙ_ÉÚ_ÈÙ_ÈÚ_ÈÙ_ÉÙ_ÉÙ_ÉÙ_ÉÙ_ÈÙ_ÈÙ_ÉÙ_ÈÚ_ÉÚ_ÉÙ_ÈÚ_ÉÙ_ÈÙ_ÉÚ_ÉÚ\ÂÔ_¿ÓgÅÖqËÜyÐß~Òà€Òà€ÒàÒàÑß~ÑßuÌÝfÈØ_ÈÙ_ÉÚ_ÈÙ_ÈÙ_ÉÙ_ÉÙ_ÈÙ_ÈÙ_ÉÚZÅ×TÄÕ\ÆØ`ÈÚVÃÕÒÞóùúËâéP®Â[ÃÕ_ÆØ^ÄÖ\ÃÕ\ÃÕ]ÄÖ]Å×^ÅØ^ÆØ^ÆØ_ÆØ^ÆØ^ÆØ^Å×]Å×\ÄÖ[ÃÕ\ÂÕ]ÄÖ^ÅØ_ÈÙ_ÉÙ_ÈÙ_ÈÙ_ÉÙ_ÉÙ_ÉÚ_ÈÚ_ÈÚ_ÉÚ_ÉÙ_ÉÙ_ÈÙ_ÈÙ_ÈÚ_ÉÙ_ÈÙ_ÈÙ_ÉÙ_ÉÙ_ÉÙ_ÉÙ_ÈÙ^ÈÚdÈÙg½ÐT­ÅP­ÄLªÃG§ÀG§ÀF¤¾A¡»L§¿jÀÓbÉÙ_ÈÙ_ÈÙ_ÉÙ_ÈÙ_ÈÙ_ÈÙ_ÉÙ_ÈÙ_ÈÙ_ÉÚ_ÉÚ_ÈÙ_ÉÙ_ÉÙ_ÈÙ_ÈÙ_ÉÙ_ÉÚ_ÉÚ_ÉÚ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÚ_ÉÙ_ÉÙ_ÈÙ_ÈÙ_ÈÙ_ÉÙ_ÉÙ_ÈÙ_ÈÙ_ÉÙ_ÉÙ_ÉÙ_ÉÚ_ÈÙ_ÉÙ_ÉÙ_ÈÙ_ÉÙ_ÉÙ_ÉÙ_ÈÙ_ÉÚ_ÈÙ_ÈÙ_ÉÙ_ÈÙ_ÉÚ_ÈÚ_ÉÚ_ÈÙ_ÈÚ_ÉÙ_ÈÙ_ÉÙ_ÈÚ_ÈÙ_ÉÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÚ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÉÚ^ÈÙ_Å×fÆØnÊÚtÍÝyÐÞzÐàyÑàrÍÞiÊÜ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ]Å×xËÙ¤ÙänÄÔWÃÔQ¾Ò”ÍÙÿÿÿÕÜä1‚žX¿Ñ^Å×]ÄÖ\ÃÕ\ÄÖ]Å×^ÆØ_ÈÙ_ÈÙ`ÈÙ`ÈÙ`ÈÙ_ÈÙ_ÈÙ_ÅØ]Å×\ÄÕ\ÃÕ\ÄÕ^Å×^ÆÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÉÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÉÚcÂÓT­ÄL­ÅQµËV½ÑX¿ÓX¿ÓV½ÑSµËG¨ÂS«ÄdÅ×_ÉÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÉÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÆÙ^ÆÙ^ÆÙ^ÈÙ^ÆÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈØ_ÆÙ_ÈÙ^ÈÙ_ÆÙ^ÈÙ^ÆÙ^ÈÙ^ÈÙ^ÆÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ]ÈÙ]ÆÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÆÙ^ÈÙ]ÆØ\¿Òçô÷ÿÿÿ]•­I²ÅP¼ÏÉÖÿÿÿÔÜå,žV¼Ï]Å×\ÄÖ\ÄÖ^Å×_ÆØ`ÈÙ`ÈÙ`ÉÙ_ÉÙ_ÈØ_ÈÙ`ÉÙ`ÈÙ_ÈÙ^ÆØ]ÅÖ\ÃÖ]ÄÖ^Å×^ÆÙ^ÆÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ_ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ_ÉÚZ¸ÍO¯Å[ÂÕ_ÈÙ`ÈÙbÉÚbÉÚ`ÈÙ^ÆØX¿ÓLªÃ]¿Ó_ÉÚ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÆÙ_ÆÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÆÙ^ÈÙ^ÈÙ^ÆÙ^ÈÙ_ÈÙ^ÈØ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÆÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ_ÈÙ^ÈÙ^ÈÙ^ÆÙ^ÆÙ^ÆÙ^ÈÙ^ÆÙ^ÆØ^ÆØ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÈØ^ÆØ^ÆÙ^ÈÙ^ÆØ^ÆÙ^ÈØ^ÆÙ^ÆØ^ÆÙ^ÆØ^ÈØ^ÆØ^ÆØ^ÈØ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆØ^ÆÙ_ÈÙ`ÈÙ`ÈÙ_ÈÙ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆÙ^ÆÙ^ÈÙ^ÈÙ^ÆØ^ÆÙ^ÆØ^ÆÙ_ÈÙXÄÕP²Æêó÷ÿÿÿG:¢¹GµÉÉÖÿÿÿÔÜå'z›IµÉZ¿Ò\¾ÑT»Ï[ÀÓcÈÙdÉÚbÈÙWÂÔ\ÂÓ`ÂÓ[¿ÒT¾Ñ[ÄÖ`ÆÙ_ÅØ]ÅØ\ÃÖ\ÄÖ]ÅØ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆØ^ÆØ^ÈØ^ÆÙ^ÆØ^ÆÙ^ÆÙ^ÆØ^ÆÙ^ÆØ^ÆØ^ÈÙ^ÆÙ^ÆÙ^ÆØ^ÆØ_ÈÚZ¼ÐU·Í^ÅØdÉÚeÉÚfÊÚeÊÚeÉÚcÉÚ_ÆÙPµÊ[¿Ó^ÈÚ^ÆÙ^ÆØ^ÈØ^ÆÙ^ÈÙ^ÈÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÈÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÈØ^ÈØ^ÆÙ^ÆØ^ÆØ^ÆÙ^ÈØ^ÈØ^ÆØ^ÆÙ^ÆÙ^ÆØ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆØ^ÆÙ^ÆØ^ÆÙ^ÆÙ^ÈØ^ÈÙ^ÆÙ^ÈÙ^ÆÙ^ÆÙ^ÆØ^ÈÙ^ÆØ^ÆØ^ÆÙ^ÆÙ^ÈØ^ÈØ^ÆÙ^ÆØ^ÆÙ^ÈÙ^ÆÙ^ÈØ^ÈÙ^ÆÙ^ÆÙ^ÆØ^ÈÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ]ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ]ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ_ÆÙdÉÙjÊÜnÌÜpÌÝnËÜjÉÙfÈÙcÆØ_ÆÙ]ÆØ]ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØXÄÖzËÙÍçíùüüÿÿÿÊÚãËæë›ÐÚ‡ÂÐÿÿÿÒÜåNŽ«®ÜäÚïóáñôÅãën½Ï\¾ÑcÅ×`ÂÒ¦ÙãÙîòæô÷Þðó¶Þåg½ÍT¼Ð_Å×^Å×\ÄÖ\Ä×]ÅØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÈÙ[ÂÔX¼Ñ_ÃÖfÊÜeÊÚeÊÚfÊÚfÊÚeÊÚ_Å×T¶Ì]ÄÖ^ÆÙ^ÆØ^ÆÙ^ÆØ]ÆØ^ÆÙ^ÆØ^ÆÙ^ÆÙ^ÆÙ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ]ÆØ^ÆØ_ÆØ_ÆØ_ÆØ_ÆØ^ÆØ^ÆØ]ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ]ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ^ÆÙ^ÆØ^ÆØ^ÆØ]ÆØ]ÅØ^ÅØ]ÆØ^ÆØ]ÆØ^ÆØ]ÅØ^ÅØ^ÆØ^ÅØ]ÅØ^ÆØ]ÆØ^ÆØ^ÆØ^ÆØ]ÆØ]ÅØ]ÆØ^ÆØ]ÅØ]ÅØ]ÅØ^ÆØ^ÆØ]ÅØ^ÆØ]ÆØ^ÆØ^ÅØ^ÅØ^ÆØ^ÆØ]ÆØ^ÅØbÆÙkÊÜsÍÝwÏÞxÏÞwÍÞuÌÝnÆ×gÃÕfÄÖeÅ×`ÆØ]ÆØ]ÆØ]ÅØ]ÆØ]ÅØ]ÆØ^ÆØ^ÆØ^ÅØ]ÆØ]ÆØ^ÆØS¿ÒËØÿþÿÿÿÿÿÿÿÿÿÿÿÿÿ¶É×s¨¾ÿÿÿùúü÷ùùÿÿÿÿÿÿÿÿÿÿÿÿØçìT©¾W·ÊÄãêÿÿÿþþÿóôùüüýÿÿÿæòôb³ÅU»Ï]ÄÖ\ÄÖ\ÅÖ]Å×^ÆØ^ÆØ]ÆØ]ÆØ^ÅØ]ÅØ]ÆØ^ÆØ]ÆØ^ÅØ]ÆØ^ÆØ^ÅØ]ÅØ^ÆØ]ÆØ^ÆØ^ÆØ^ÅØ]ÅØ^ÅØ]ÆØ^ÆØ]ÆØ]Å×X»Ð_ÂÔeÈÙfÉÚeÉÚeÉÚfÊÚeÈÙZ»ÏX»Ð^ÆÙ^ÅØ^ÆØ]ÆØ]ÅØ]ÅØ]ÆØ]ÆØ^ÅØ]ÆØ]ÆØ^ÆØ^ÅØ]ÆØ^ÆØ^ÆØ]ÅØ^ÆØ^ÅØ]ÆØ]ÆØ^ÆØ^ÆØ]ÅØ^ÅØ^ÆØ^ÅØ]ÅØ]ÆØ]ÆØ]ÆØ]ÆØ^ÆØ`ÆØbÈÙcÈÙcÈÙcÆØ`ÆØ^ÅØ^ÅØ]ÆØ]ÆØ^ÆØ]ÆØ^ÆØ^ÆØ]ÆØ]ÅØ]ÅØ]ÆØ]ÆØ^ÆØ^ÆØ^ÆØ]ÆØ^ÆØ^ÅØ^ÅØ]ÆØ^ÆØ^ÆØ]ÅØ]ÆØ^ÆØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ^Å×]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]Å×]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]Å×]Å×]ÅØ]ÅØ]ÅØ]ÅØ]Å×]ÅØ]ÅØ`ÅØlÉÚuÌÝwÍÞwÍÝtÌÜqÉÙkÅ×fÀÓc¾Òc¾ÓeÂÔeÄÖ`ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ[ÄÖL¦»7n“æìñÿÿÿbŽ±#bŽ Q€xª¿ÿÿÿÿÿÿÆÖäbŒ°)f“‰©ÂÿÿÿøøùO’«z»Ëÿÿÿýýþ]‹¯ V‡Cyžåìñÿÿÿ¢ÄÑC¦¼[ÂÔ]Ä×\Å×]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ^ÆØ[ÀÔX·ÍdÄÖmÊÜnÊÜlÊÚkÉÚgÂÔ[¹Ï\ÄÖ]ÆØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]Å×]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]Å×]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]Å×]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ^Å×`ÆØdÈÙfÈÙfÈÙeÆÙbÅ×`ÄÖ_ÄÖ_Å×^Å×]ÅØ]ÅØ]ÅØ]Å×]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]ÅØ]Å×]ÅØ]Å×]Å×]Å×]Å×]Å×]ÅØ]Å×]Å×]Å×]Å×]ÅØ]Å×]Å×\ÅØ]Å×]Å×]ÅØ]ÅØ]ÅØ]Å×]Å×]ÅØ]Å×]Å×]Å×]Å×]Å×]Å×]ÅØ\Å×]Å×]Å×_Å×fÄÖnÆØsËÜrËÚnÈØfÂÓ^¹ÏVµÊQ²ÈS²ÉX¶Ì`½ÑfÀÔeÄÖ_Å×]ÅØ]Å×]Å×]Å×]Å×]Å×]Å×]Å×]Å×]Å×]ÅÖP¶Ê=—°æðóÿÿÿG€ #†¢,ª‹ÂÑÿÿÿÒÞéPƒ d‹'ƒ¡H“®öùùÿÿÿI…¢¡ÊÖÿÿÿ¸ËÚO€+‰¤ œÂÑÿÿÿÅÓÝ7Ž©X¾Ñ^ÄÖ]Å×\Å×]ÅØ]ÅØ]Å×]ÅØ]Å×]Å×]Å×]ÅØ]Å×]ÅØ]Å×]ÅØ]Å×]ÅØ]Å×]Å×]Å×]Å×]Å×]Å×]Å×]Å×]ÅØ]ÅØ]Å×]ÅØ[ÂÔ^¿ÓnÉÙyÏÞ{ÐÞwÌÜiÅØ]Å×]ÅØ]Å×]Å×]ÅØ]Å×]Å×]Å×]Å×\Å×\Å×]Å×]Å×]Å×]Å×]Å×]Å×]ÅØ]Å×]Å×]Å×\ÅØ]Å×]ÅØ]ÅØ]Å×]Å×]Å×]Å×]Å×\Å×]Å×]Å×_Å×bÅØeÆØeÆØcÄ×`ÂÕ]ÀÓ\¿Ó^ÀÔ^ÃÖ_Å×]ÅØ]Å×]Å×]Å×]Å×]Å×]ÅØ]ÅØ]Å×]Å×]Å×]Å×]Å×]Å×]ÅØ]Å×]Å×]ÅØ]Å×\ÅØ]ÅØ]ÅØ]ÅØ\Å×]Å×\Å×\Å×]Å×\Å×]Å×\Å×\Å×]Å×\Å×]Å×]Å×\Å×\Å×\ÅØ]Å×\Å×\ÅØ\Å×\Å×]Å×]Å×]Å×]Å×]Å×]Å×\Å×]Å×]Å×\Å×\Å×]Å×]Å×cÄÖeÂÔfÂÓfÀÔeÀÔ^»ÐVµËO°ÆM­ÅJ«ÄJ«ÄL«ÄP°È\¸ÏfÀÔdÄÖ]Å×\Å×]Å×\Å×]Å×\Å×]Å×]Å×]Å×]Å×\Å×ZÃÕV³Æéó÷ÿÿÿP‡¢B§¼L·ÊÈÕÿÿÿÉÔà'y™Q²ÅSµÉ[®ÂðöøÿÿÿLƒ¢²Ôßÿÿÿáéï¼ÕàÊæíÆäëãðôÿÿÿÚáé2…¢U»Í]Å×\Å×\Å×]Å×\Å×]Å×\Å×]Å×\Å×\Å×]Å×\Å×\Å×]Å×\ÅØ\Å×\Å×]Å×]Å×\Å×\Å×\Å×]ÅØ\Å×]Å×\Å×]Å×]Å×\Å×]Å×\Å×^Å×cÅØdÆÙ_ÅØ\Å×]ÅØ]Å×\Å×]Å×\Å×\Å×]Å×]Å×\Å×]Å×]Å×]Å×]Å×]Å×]Å×\Å×]Å×]Å×\Å×\Å×]Å×]Å×\Å×\Å×]Å×]Å×]Å×\Å×]Å×\Å×\Å×]Å×]ÅÖ_ÄÕ_ÃÕ`ÃÕ_ÂÔ\¿ÓX½ÑW»ÐW»ÐZ¼Ñ\¿Ó^ÃÕ]Ä×]Å×\Å×]Å×]Å×\Å×]Å×\Å×\Å×]Å×]Å×]Å×]Å×]Å×]Å×]Å×]Å×]Å×\Å×\Å×]Å×]Å×\Å×\Ä×\Å×\Å×]Å×\Å×]Å×\Å×\Å×\Å×\Å×\Å×\Å×]Å×\ÅÖ\Å×\Å×]Å×]Å×\Å×\Å×\Å×\Å×]Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×]Å×\Å×\Å×_ÄÖdÀÔ^»ÐVµÊT³ÊUµÊS³ÉO°ÈM°ÆM°ÆM¯ÆL®ÆL­ÅL­ÅN®Å[·ÌeÂÔ_ÅÖ\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×ZÃÕU³ÆéóöÿÿÿO‡¢B§½M·ËŽÈÖÿÿÿÊÕà){›TµÊT»Ï\±Åñ÷øÿÿÿL…£¶Öáÿÿÿó÷ùÞåîÝãìÝãìØáëÜäíªÅ#y›W½Ï]Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×]Å×\Å×\Å×\Å×\Å×\Å×]Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×[Å×[Å×\Å×\Å×\Å×]Å×\Å×\Å×\Å×]Å×]Å×\Å×\Å×]Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×]Å×\Å×\Å×\Å×\Å×\Å×]Å×\Å×]ÃÖ]ÀÔ[¾ÓZ¾ÒX¾ÓX¾ÒW½ÑV¼ÑV¼ÑV»ÐX¼Ñ[¿Ó]ÃÕ\ÅÖ\Å×\Å×]Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×\Å×]Å×\Å×\Å×\Ä×\Ä×\ÄÖ\ÄÖ\Å×\Ä×\ÄÖ\Ä×\Ä×\ÅÖ\ÅÖ\Ä×\ÅÖ\Å×\Ä×\Ä×\Ä×\ÅÖ\ÄÖ\Ä×\Ä×\Ä×\Ä×\Å×\Å×\Å×\ÄÖ\Ä×\Ä×\Ä×\Ä×\Å×\Ä×_ÀÔ]¹ÏUµÊO°ÈO²ÉQµËS¶ËS·ÌS¸ÍT¸ÍS·ÍQ¶ÌPµÊO±ÈM¯ÅN¯Æ\¸ÏbÂÕ\Ä×\Ä×\ÄÖ\Ä×\Ä×\Ä×\Ä×\ÄÖ\ÄÖ\Å×XÂÕU²Æéó÷ÿÿÿJ‚¡?¦¼J¶ËŽÈÖÿÿÿÊÕà(zšSµÊT»Ð\²Åñ÷ùÿÿÿJ…£°Ôßÿÿÿ®ÅÖN [‡ Z‡ Z‡ Z‡U:•¯ZÂÓ\ÅÖ\Ä×\Ä×\Å×\Ä×\Å×\Ä×\Å×\Å×\Ä×\Ä×\Å×\Ä×\Ä×\ÄÖ\ÄÖ\Ä×\Ä×\Ä×\ÄÖ\Å×\Ä×\Å×\Å×\Ä×\ÄÖ\ÅÖ\Ä×\Ä×\Ä×\Ä×\ÄÖ\ÅÖ\ÄÖ\Å×\Ä×\Ä×\Å×\ÅÖ\Å×\Ä×\Ä×\Ä×\ÅÖ\Ä×\Ä×\Ä×\Ä×\Ä×\Ä×\Ä×\Ä×\ÄÖ\Ä×[Å×\ÄÖ\Å×\ÅÖ\ÄÖ\Ä×\Ä×\Å×\Å×\Ä×\Ä×\Ä×\ÅÖ\ÄÖ[ÂÔZ¾ÓX½ÒX¾ÒX¿ÔZ¿ÔZÀÔX¿ÔX¿ÓW¾ÓW½ÒX½Ñ[ÀÓ\ÄÖ\ÄÖ\Å×\Å×\Ä×\ÄÖ\Å×\Å×\Å×\ÄÖ\Å×\ÄÖ\Å×\Ä×\Ä×\Å×\ÄÖ\ÄÖ\ÅÖ\Ä×\Å×\Ä×\ÄÖ\ÄÖ\ÄÖ\ÄÖ[ÄÖ[ÄÖ\ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ\ÄÖ\ÄÖ[ÄÖ\ÄÖ[ÄÖ\ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ\ÄÖ[ÄÖ[Ä×\ÄÖ[ÄÖ[ÄÖ[ÄÖ[Ä×[ÄÖ[ÄÖ\ÄÖ\ÄÖ]½ÒUµÊS³ÉSµËU¹ÏV½ÑX¿ÒX¿ÔZÀÔZÀÔW¿ÓP¹ÐN¸ÍMµÌPµÊN°ÈS±È]½Ò]ÄÖ\ÄÖ\Ä×[Ä×[ÄÖ\ÄÖ[ÄÖ\ÄÖ[Ä×[Ä×XÂÕU³Åêóöÿÿÿf•¯?¢¸M²ÅŽÆÕÿÿÿÊÕà(zšS¶ÊU½Ñ]³Æð÷ùÿÿÿH…£’ÃÒÿÿÿãêïH”®6š²: µ>žµB¢·J­ÀV»Ï[ÃÕ\ÄÖ[ÄÖ\ÄÖ[Ä×[ÄÖ\ÄÖ[ÄÖ\ÄÖ\ÄÖ\ÄÖXÂÕS¿ÔS¿ÓT¿Ô[ÄÖ\Ä×\Ä×[ÄÖ\ÄÖ[Ä×[ÄÖ[Ä×\ÄÖ[ÄÖ[ÄÖ\Ä×\ÄÖ\ÄÖ[Ä×\ÄÖ[ÄÖ\ÄÖ\ÄÖ\ÄÖ[ÄÖ[Ä×[ÄÖ[ÄÖ[ÄÖ\ÄÖ\ÄÖ[Ä×\ÄÖ[ÄÖ[ÄÖ[ÄÖ\ÄÖ\ÄÖ[ÄÖ[ÄÖ[ÄÖ\ÄÖ\ÄÖ\Ä×[ÄÖ[ÄÖ\Ä×[ÄÖ[ÄÖ[ÄÖ[Ä×[Ä×[ÄÖ\ÄÖ[ÄÖ[ÄÖ[ÄÖ\ÃÕZÀÓX¾ÓX¿Ó[ÂÕ[ÃÕ\ÄÕ\ÄÖ[ÃÖ[ÃÖZÂÕXÀÓX½ÒZ¿Ó\ÃÕ\ÄÖ\ÄÖ\ÄÖ\ÄÖ\ÄÖ[ÄÖ\ÄÖ[ÄÖ[ÄÖ[ÄÖ[Ä×\Ä×[ÄÖ\Ä×[ÄÖ[ÄÖ\ÄÖ[ÄÖ\Ä×[Ä×\Ä×[ÄÖ[ÃÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ\ÄÖ[ÃÖ\ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÃÖ[ÃÖ\ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ\ÃÕZ¹ÏS³ÊT·ÌW½ÑZÀÔ[ÃÕ[ÃÖ\ÄÖ\ÄÖ[ÂÕdÄÕÊÙÈÖ|ÅÕ\¹ÍO³ÊO°ÈW¸Ï\ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖXÂÕP±ÅÝìðÿÿÿïô÷Ýìðáðó¼ØáÿÿÿÊÕà(zšQ¶ËU¾Ò`µÈóøùÿÿÿN‡¦Pžµðóöÿÿÿçòö¹Ýå¹ßæÌçíÞñóm»ËP¸Í[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÃÖ[Ã×[ÃÖ[ÄÖ[ÄÖZÂÕjÅÖÊÙ€ÉÖyÆÖ[¾ÑXÂÔ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÃÖ[ÃÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ\ÄÖ[ÃÖ[ÄÖ[ÃÖ[ÄÖ[ÃÖ[ÃÖ[ÃÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ\ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÃÕZÀÔZ¿ÔZÀÔ\ÃÖ]ÄÖ]ÄÖ]ÄÖ]ÄÖ]ÄÖ\ÄÖ[ÂÕX¿ÓX¿ÓZÂÕ[ÄÖ[ÄÖ[ÃÖ[ÄÖ\ÄÖ[ÃÖ[ÃÖ[ÄÖ[ÄÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÃÖ[ÃÖ[ÃÖ[ÄÖ[ÄÖ[ÃÖ[ÄÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕZÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÕ[ÃÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÖ[ÄÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÄÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÂÕV¸ÏT¶ËU»ÐZÂÕ\ÃÕ]ÄÖ]Ä×^Ä×^Å×Q¼Ñ›Óßÿÿÿÿÿÿÿÿÿr­¿C©ÀP³ÉU·Í[ÂÕ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖI°Å“¾Ìÿýýÿÿÿÿÿÿöøù®ÃÔÿÿÿÆÓß'y™S·ËU½ÒdµÉöøùÿÿÿP‡¦,’«gš²âæîÿÿÿÿÿÿÿÿÿÿÿÿíîöIƒ¢G«Â[ÃÕ[ÃÖ[ÃÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖO¹Ï±Üåÿÿÿÿÿÿö÷ùX¢¶O·Ë[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÕ[ÃÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕZÀÔZÀÔ[ÀÔ\ÃÖ]ÄÖ]ÄÖ]Ä×]ÄÖ]ÄÖ]ÄÖ[ÂÕX¿ÔZ¿Ó[ÂÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÖ[ÃÕ[ÃÕ[ÃÕ[ÂÕ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÕZÃÕ[ÂÕZÃÕ[ÃÕZÃÕ[ÃÕ[ÃÕZÂÕ[ÃÕ[ÃÕ[ÃÖZÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÖ[ÃÖZÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕZÃÖZÂÕW»ÐU¸ÍV»Ð[ÂÔ]ÄÖ]Ä×_ÄÖ_ÄÖ_Å×N·ÌœÏÚÿÿÿÿÿÿÿÿÿ\‰¦9œµQµËV¹ÏZÂÕ[ÃÕZÃÕZÃÕ[ÃÕ[ÃÕ[ÃÖZÃÖ[ÃÖ[ÃÖZÃÖV¼Ð8“­=t™X†©I{¢ _`‰:r—Z‡)W¼Ð[ÀÔS±Å?|œ+cŽb‡M®Â7–°#jGyž^‰­S‚§4n™ S‚e‰P³Æ[ÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕZÃÕZÃÕZÃÖ[ÃÖJµÉ±×âÿÿÿÿÿÿôôø>I¯Ä[ÃÕ[ÃÖZÃÕZÃÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÖ[ÃÕ[ÃÕ[ÃÖ[ÃÖZÃÖ[ÃÕ[ÃÕZÃÕZÃÖ[ÃÕ[ÃÖ[ÃÕ[ÃÕ[ÃÖ[ÃÕ[ÃÕZÃÕZÃÕZÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕZÃÕZÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕ[ÃÕZÃÖ[ÃÖ[ÃÕ[ÃÕ[ÃÖ[ÃÕ[ÃÕ[ÃÕ[ÂÕZÂÔZ¿Ó[ÀÔ\ÃÖ]ÄÖ]ÄÖ]Ã×]ÄÖ\ÄÖ]ÃÕZÀÔZ¿ÓXÀÔ[ÂÕ[ÃÕ[ÃÖ[ÃÖ[ÃÖ[ÃÖZÃÕZÃÕ[ÂÕZÃÖ[ÃÖZÃÖZÃÕ[ÃÖ[ÃÕ[ÃÕZÃÖ[ÃÕ[ÃÕ[ÃÕ[ÃÕZÃÖZÂÕZÂÕ[ÂÕZÂÕZÂÕ[ÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕ[ÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÃÕZÃÕ[ÂÕZÂÕ[ÂÕZÂÕZÂÕZÂÕZÃÕ[ÂÕW½ÒV»ÐW¼ÑZ¿Ó]ÃÖ^ÄÖ_ÅÖ_ÅÖ_Å×N¶ÊšÌØÿÿÿÿÿÿÿÿÿ]¨8™²S¶ËX½ÑZÂÕ[ÃÕZÂÕZÂÕZÂÕ[ÂÕZÂÕZÂÕZÂÕZÂÖZÃÕZÀÔT·Ì8š² ~œ"1ªA¡¶4”®6“®M®ÃX½Ñ[ÀÔW¹Í> ¶3«G£»X¼ÐX½ÐJª¿0¨yšw—)‡£9–¯N°ÄW¾Ò[ÃÕZÂÕZÂÕZÃÕ[ÃÕ[ÃÖZÂÕZÂÕZÂÕ[ÂÖI²Æ°Öàÿÿÿÿÿÿôöø?€ G­ÂZÂÔ[ÃÕZÂÕZÃÕZÃÕZÂÕZÂÕZÂÕ[ÂÕZÃÕZÂÕ[ÂÕZÂÕZÂÕZÂÕZÃÕ[ÂÕZÂÕ[ÂÕZÃÕZÂÕZÃÕZÃÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕ[ÃÕZÃÕZÂÕZÂÕZÃÕZÂÕ[ÂÕZÂÕZÂÕZÂÕ[ÂÕZÃÕ[ÂÕZÃÕZÂÕZÂÕ[ÂÕ[ÂÕ[ÂÕZÂÖZÂÖZÂÕZÂÕX¿Ó[ÀÓ\ÂÔ]ÃÕ]ÃÖ]ÃÖ]ÃÖ]ÃÖ\ÂÔ[ÀÓX¿ÔZÀÔZÂÕZÃÕZÂÕZÂÕZÂÕZÂÕZÂÕ[ÂÕ[ÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕ[ÂÕZÂÕZÃÕZÃÕ[ÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÔZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÔZÂÔZÂÕX¾ÓV»ÐX½ÑZ¾Ó]ÃÕ_ÄÖ_ÄÖ_ÄÖ_ÅÖNµÊ™ÌØÿÿÿÿÿÿÿÿÿ\¨4•¯M³ÊN¹ÏO¼ÐT¾ÒXÀÕZÂÕZÂÕZÂÕZÀÕXÂÕT¾ÓP½ÒO¼ÐP¼ÑT½ÒW¾ÒX½ÑV¼ÐW½ÑU½ÑS¼ÑS¼ÑT½ÒZ¿ÔW¾ÓS»ÑQ»ÐT»Ð[ÀÓ^ÃÕ^ÃÖ\ÂÔS¹ÍNµÊNµÉS¹ÍX¾ÒZÀÔZÂÔZÂÕZÂÕWÀÔQ½ÒO¼ÐO¼ÐQ½ÒV¿ÔZÂÖZÂÕH±Æ°Öàÿÿÿÿÿÿôöù9|ž=§½O»ÐP¼ÑT¾ÓXÂÕZÂÕZÂÕZÂÕV¿ÔS¾ÓT¾ÓV¿ÔZÂÕZÂÕVÀÔQ¾ÒXÀÕZÂÕZÂÕWÀÔS½ÒO¼ÑO»ÑQ¼ÒV¿ÓZÂÕZÂÕXÂÕT¿ÓT¾ÓT¾ÓWÀÕZÂÕZÂÕVÀÔT¾ÓT¾ÓV¿ÔZÂÕZÂÕZÂÕXÂÕU¿ÓT¿ÓT¾ÓXÀÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÀÔZ¿Ó[ÀÔ]ÂÕ_ÃÖ_ÃÖ_ÄÖ^ÃÖ\ÀÔ[¿ÓZÀÓZÀÔZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÕZÂÔXÀÕXÀÕXÀÕZÀÕZÀÔZÂÕZÀÔZÀÔZÀÕZÀÔZÀÕZÀÔZÀÔZÀÕZÂÕZÂÕXÀÕXÀÔZÀÕZÀÕZÀÔZÂÕXÀÔXÀÔXÀÕZÀÕZÀÔZÂÕZÂÕXÀÕZÂÔZÂÔXÀÔV»ÐW»Ð[¾Ò\ÀÔ_ÃÕ_ÃÖ_ÃÕ_ÄÖMµÉ™Ì×ÿÿÿÿÿÿÿÿÿQ…¢3«s¿ÒÍÜŽÌÙp¿ÐMµÉU¾ÒZÂÕ[ÂÕS½ÒQ¹ÏqÄÕŒÌÚ’Ï܈ÊØn¿ÑPµÊO¹ÏZÂÕWÀÔcÂÔqÄÔpÃÓf¿ÑJ³ÉZ¸Ì~Æ׎ÍÚƒÈ×]¹ÌU¹ÏV½Ñ[¼ÐzÅÖÌÚ‡ÉØ`¹ÍN¶ÌZÀÔZÂÕXÀÔN¹Ð]½Ð€È×ÏÜÍÚ~ÅÕ\¸ÌLµÊW¿ÓH±Æ°ÖàÿÿÿÿÿÿóôøVŽªx½Í’ÏÜ‹ËÙn¿ÑNµÉS»ÑZÂÕX¿ÓgÂÔpÃÔnÂÓe¿ÑP¹ÏL·Ìf¿ÒÈ×[¼ÐV½ÒO»Ð\¼Ð~ÆÖÍÜÍÜÆÖ_¹ÌJµÊU½Ò^ÂÔqÅÕnÂÓnÂÒ[»ÍV½ÒW¿ÓfÃÕqÄÔpÂÓb½ÐT»ÐXÀÔZÂÔX¾ÒnÄÕpÂÓnÂÒ`ÀÓV¾ÒZÀÔXÀÕZÀÕZÂÕZÀÔXÀÔXÀÔZÀÔX¿ÔZÀÔ\ÂÔ^ÃÖ_ÃÖ_ÄÖ^ÃÕ\ÂÔZÀÔZÀÔXÀÔZÂÔXÂÔXÀÕZÂÕZÀÔXÀÕZÀÕXÂÔZÀÔZÀÔZÂÕXÀÔZÀÕXÀÕXÂÕZÀÕXÀÔXÀÕXÀÕZÀÔXÀÕZÀÕXÀÔXÀÔXÀÔXÀÔZÀÔXÀÔXÀÔXÀÔXÀÔZÀÕXÀÔXÀÔXÀÔZÀÔZÀÔXÀÔXÀÔXÀÔXÀÕXÀÔZÀÔXÀÔXÀÔXÀÔXÀÔXÀÕXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔXÀÕW½ÒU·ÍX¹Ð[¾Ò^ÀÔ`ÃÖ`ÃÖ`Ä×NµÊ™ËØÿÿÿÿÿÿÿÿÿ¦¿ÐÑäëþÿÿÿÿÿÿÿÿþþþ°ÖàL®ÃU½ÑQ¼ÒjÀÒÌçîüýýÿÿÿÿÿÿÿÿÿüýýÑçím¹ËJ³ÉM¶ËÃãëÿÿÿÿÿÿàíñ’ÅÓãñôÿÿÿÿÿÿÿÿÿãðóm·Ê…ÆÕÝïóþþþÿÿÿÿÿÿð÷ùÀÐI±ÆW¿ÓP¸Í•ÑÝìöøÿÿÿÿÿÿÿÿÿÿÿÿíöøšÍÙL°ÅE®Ä°ÖàÿÿÿÿÿÿýýþôøùÿÿÿÿÿÿÿÿÿüýþÆâê]³ÆN¶ËV¸Í×ìðÿÿÿÿÿÿÆÜãO¢¹³Ýæôùúÿýý`£¸?ªÂŒÌÚæó÷ÿÿÿÿÿÿÿÿÿÿÿÿð÷ù£ÒÝG«Ãl½ÏùúüþþþÿÿÿµÕßB¦½JµÊ½àéÿÿÿÿÿÿÕåìH¦¼U»ÐO¹ÏÌÚÿÿÿýþþÿÿÿy®ÀC©ÀX¿ÔXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔZÀÔZÀÔ[ÂÕ\ÂÕ\ÂÕ[ÂÕZÀÔZÀÔXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔZÀÔXÀÕZÀÔZÀÔXÀÔXÀÔXÀÔZÀÔXÀÔXÀÕXÀÕXÀÔXÀÔXÀÔXÀÔXÀÔXÀÔX¿ÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔXÀÔXÀÔX¿ÔX¿ÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔX¿ÔX¿ÔX¿ÔX¿ÔX¿ÔX¿ÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔXÀÔXÀÔV¼ÑU¶ÍX¹Ï^¿ÔbÃÖeÄÖeÅ×QµÊ›ËØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÆ?©À_»Íäòöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîô÷c°Ä=¤½ËäëÿÿÿÿÿÿþýþþýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðöøùúüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáëïJ¢·F°Æ—ÑÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›ÉÕ2œµ¯ÕàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉßæE£»N®ÄÞîñÿÿÿÿÿÿãêïÚäêÿÿÿÿÿÿÿÿÿ]’­x¹Ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨ÏÚ:š²ØçíÿÿÿÿÿÿÞäê>«BªÃ‡¿ÏÿÿÿÿÿÿùøùU–¯I°ÅI³É¼Þæÿÿÿÿÿÿëïô^‡B¢¸X¾ÓX¿ÔX¿ÔXÀÔX¿ÔX¿ÔX¿ÔX¿ÔXÀÔX¿ÔXÀÔX¿ÔX¿ÔXÀÔXÀÔXÀÔXÀÔX¿ÔX¿ÔXÀÔX¿ÔXÀÔX¿ÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔXÀÔX¿ÔX¿ÔX¿ÔX¿ÔX¿ÔXÀÔXÀÔW¿ÓX¿ÔW¿ÔX¿ÓW¿ÔX¿ÔX¿ÔX¿ÔW¿ÔX¿ÔW¿ÔX¿ÔX¿ÓX¿ÓX¿ÔX¿ÔW¿ÔX¿ÔX¿ÔX¿ÔW¿ÔW¿ÔX¿ÓW¿ÓW¿ÔX¿ÔW¿ÔW¿ÔX¿ÔX¿ÔX¿ÓX¿ÔX¿ÔX¿ÔW¿ÔX¿ÓW½ÑW¹Ï\½ÒbÂÕgÅ×kÆØX·ÌžÍÙÿÿÿÿÿÿÿÿÿÿÿÿþþÿïóøúüýÿÿÿÿÿÿÿÿÿªÃÑ'Œ¨­ØâÿÿÿÿÿÿÿÿÿñôùÉ×äíñ÷ÿÿÿÿÿÿÿÿÿµÑÜ0“®ÈâêÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþÿÿÿÿÿÿÿÿÿÿýúüT”®O©¿ìöøÿÿÿÿÿÿöùú—µË–±È÷ùúÿÿÿÿÿÿìðóE—°ªÒÞÿÿÿÿÿÿÿÿÿðôøÑÝéÞæïÿÿÿÿÿÿÿÿÿþüýd¢·? ·ÝíñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒªÀÐáéÿÿÿÿÿÿùúýž¸Ð­Åðóøÿÿÿÿÿÿô÷øJ™±—ÄÓÿÿÿÿÿÿþüýZ–¯>¤½P¦¼ëðóÿÿÿÿÿÿ‡¯Â7µQ²Æàïòÿÿÿÿÿÿ«ÀÓiŽP³ÈX¿ÓW¿ÔW¿ÔX¿ÔX¿ÔW¿ÓX¿ÔX¿ÔW¿ÔX¿ÓX¿ÔW¿ÔX¿ÔX¿ÓX¿ÔX¿ÔX¿ÓX¿ÔX¿ÔX¿ÓX¿ÔX¿ÓW¿ÔX¿ÔX¿ÔW¿ÔW¿ÔX¿ÓX¿ÔX¿ÔX¿ÔX¿ÓX¿ÔX¿ÔW¿ÔW¿ÔX¿ÓX¿ÓW¿ÓX¿ÔX¿ÔW¿ÓW¿ÓW¾ÓW¾ÔW¾ÓW¿ÓW¿ÓW¾ÓW¾ÓX¿ÓW¿ÓX¿ÔW¾ÓW¿ÓW¾ÓW¿ÓW¿ÓW¾ÓW¾ÓW¿ÓW¿ÓW¾ÓW¿ÔW¿ÓW¿ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¿ÓW¾ÓW¾ÓW¿ÓW¾ÓX½Ò]¿ÔbÂÕfÅ×V¶ÊÌØÿÿÿÿÿÿÿÿÿ±ÆØ:rœ W‰c°þþþÿÿÿÿÿÿ»ÍÙ0‡¤ßïóÿÿÿÿÿÿöùú:t J|:wœîò÷ÿÿÿÿÿÿâçí3‡£Åâéÿÿÿÿÿÿýþþ¢»Ò=tž=tœÝäìÿÿÿÿÿÿÿÿÿµÉÚGz¢2l–ÅÕàÿÿÿÿÿÿÿÿÿQ‰§r²Åÿÿÿÿÿÿÿÿÿ‚¤ÀBx]ˆ›½Íÿÿÿÿÿÿÿÿÿ_™±¢ÌØÿÿÿÿÿÿùüý?x¢O X‡²ÈÖÿÿÿÿÿÿÿÿÿƒª¿4“®Ýíñÿÿÿÿÿÿÿÿÿÿÿÿãëò°Å×r—·^‹­ýýýÿÿÿÿÿÿ™µËBx\‡‡°Äÿÿÿÿÿÿÿÿÿr¢¸U¡·üüýÿÿÿÿÿÿˆ¯Â1—±]°Åñ÷ùÿÿÿÿÿÿ¾ÐÚ,Žªj·ÊüýþÿÿÿÿÿÿbŒ­$¡U¹ÏX¿ÓW¿ÓW¾ÓW¾ÔW¾ÓW¿ÔW¿ÓW¾ÓW¿ÓW¾ÓW¾ÓW¿ÓW¿ÓW¾ÓX¾ÓW¿ÔW¿ÓW¾ÓW¿ÓW¾ÓW¾ÓW¿ÓW¿ÓW¾ÔW¾ÓW¿ÓW¾ÓW¿ÓW¾ÔX¿ÓW¾ÓW¿ÓW¿ÓW¿ÓX¿ÓW¾ÓW¿ÔW¾ÓW¾ÓW¿ÓW¿ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¿ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓX¿ÓZÀÔH±È–É×ÿÿÿÿÿÿÿÿÿL€£iŽ1ª=“®êñöÿÿÿÿÿÿÀÑÞ;†£òùüÿÿÿÿÿÿ¼ÌÜ^ˆ>žµ3“®ÃÚãÿÿÿÿÿÿôöø>†¤Âßçÿÿÿÿÿÿãêñ X‡q•{œ¤ÈÖÿÿÿÿÿÿùùü(i“ i{œ‡¶ÉÿÿÿÿÿÿÿÿÿL…¢‰½Ìÿÿÿÿÿÿÿÿÿ©ÀÒ“ÂÐœÍÙ¿Üäÿÿÿÿÿÿÿÿÿx¢¸ÅÕÿÿÿÿÿÿôöù7zœ7—±3™±t°Äÿÿÿÿÿÿÿÿÿ•³Å+‡¢ÞîóÿÿÿÿÿÿäìòFz£S…S‚Xƒx«Àÿÿÿÿÿÿÿÿÿ³Æ׽͞ÏÚ¸×áÿÿÿÿÿÿÿÿÿ’²Å)‡¤Öæìÿÿÿÿÿÿ¾ÐÚ(‰¦“É×ÿÿÿÿÿÿÿÿÿíðó:‹¦ÅÓÿÿÿÿÿÿïóø'i=ž¶V¼ÑW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¿ÓW¾ÓW¿ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¿ÓW¿ÓW¾ÓV¾ÒV¾ÓV½ÓV¾ÒV¾ÓV¾ÒV½ÓW¾ÓW¾ÓV¾ÓV¾ÓV¾ÓW½ÓW½ÒW¾ÓV¾ÒW¾ÓW¾ÓV½ÒV¾ÓV¾ÓV¾ÓV¾ÓV¾ÓW½ÓV¾ÓV½ÓV½ÒW¾ÓW¾ÓW¾ÓW¾ÓV¾ÓW¾ÓW¾ÓW¾ÒV¾ÓW¾ÓW¾ÓV¾ÒW¾ÓV¾ÓE°Æ•É×ÿÿÿÿÿÿÿÿÿ]©8›³OµÊS­Âëó÷ÿÿÿÿÿÿ¾ÐÝ>†¢øýþÿÿÿÿÿÿ¤»Í"|œPµÉC©À¼Úäÿÿÿÿÿÿùùü= ¿Üäÿÿÿÿÿÿàæî,y™I®ÃB©À«ÒÞÿÿÿÿÿÿö÷ùA€B¤¼BªÂ’ÆÕÿÿÿÿÿÿÿÿÿL…£™ÅÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿs »šÂÑÿÿÿÿÿÿôöù>€ C¨¾I±Ær·Éÿÿÿÿÿÿÿÿÿ›µÆ( ÞïóÿÿÿÿÿÿÅÓà `‰6“­I©¿A¨¿ÍÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÃyšžÈÕÿÿÿÿÿÿêíò:ˆ¦Åâêÿÿÿÿÿÿÿÿÿÿÿÿfµ±Ôßÿÿÿÿÿÿ¸ÊÚdŒN°ÅW½ÒW¾ÓW¾ÓV½ÒV½ÓW¾ÓW¾ÓV½ÓW½ÓW¾ÓW¾ÓV¾ÓV¾ÓW¾ÓW¾ÓW¾ÓV¾ÓV¾ÓW¾ÓW¾ÓW¾ÓW¾ÓW¾ÓV¾ÒW¾ÓW¾ÓW¾ÒV¾ÓW¾ÓV¾ÓW¾ÓW¾ÒW¾ÓW¾ÓV¾ÓV¾ÓV¾ÓW¾ÓV¾ÓV½ÓW½ÓW¾ÓV½ÒV½ÓV½ÓV½ÒV½ÒV½ÒV½ÓV½ÒV½ÒV½ÒW½ÒV½ÒV½ÒV¾ÓV¾ÓV½ÓV¾ÓV½ÒV½ÒV½ÒV¾ÒV½ÒV½ÓV½ÒV½ÓV½ÒV¾ÓV½ÒV½ÒV¾ÒV½ÒV½ÒV½ÒV½ÒV½ÓV½ÒV¾ÒV¾ÒV½ÓV¾ÓW½ÒV¾ÓE¯Å•ÉÖÿÿÿÿÿÿÿÿÿ\Œ¨8š³S¹ÏU¯Äëó÷ÿÿÿÿÿÿ¿ÐÝ>…¢÷üýÿÿÿÿÿÿ©½Í$€žS¸ÍF­Ä¾Üåÿÿÿÿÿÿøùú8zœ¿Üäÿÿÿÿÿÿáæî,w—J°ÅE®Å­Óßÿÿÿÿÿÿ÷÷ùA~C§¾F°Å”ÈÖÿÿÿÿÿÿÿÿÿL…£™ÄÓÿÿÿÿÿÿÿÿÿÉÙå±ÆÙµÉÚµÈÚµÈÙ·Ëܧ¾Ó_Œ£ÊÖÿÿÿÿÿÿôöù> E©¿JµÊt¹Ëÿÿÿÿÿÿÿÿÿ—²Å%€ ÞïóÿÿÿÿÿÿÈÓß)|O³ÈV½ÒG°ÆœËÙÿÿÿÿÿÿÿÿÿÏÝç±ÆصÉÚµÈÙµÈÙ¶ÊܯÄ×,g’)ˆ¦e­Âúúüÿÿÿýýþ€ª¿êòöÿÿÿÿÿÿÿÿÿÿÿÿ®ÆÕ×æìÿÿÿÿÿÿp•³{œS¶ËW¾ÓV½ÒV½ÒV½ÒV½ÒV½ÒV½ÓV½ÒV½ÒV½ÒV½ÓV½ÓV½ÓV½ÓV½ÓV½ÓV½ÓV½ÒW½ÒV½ÒV½ÒV½ÓV¾ÒV½ÒV½ÒV¾ÓV½ÒV½ÒV½ÒV½ÒV½ÒV½ÓV½ÒV¾ÒV½ÒV½ÒV½ÒV½ÒV½ÓV½ÒV¾ÒV¾ÒV½ÒV½ÒV¼ÒV½ÒV½ÒV½ÒV¼ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒW½ÒW¾ÒW½ÒW½ÒV½ÒV¼ÒV¼ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV¾ÓE¯Å•ÉÖÿÿÿÿÿÿÿÿÿ\Œ¨8š³Q¹ÏT¯Äëó÷ÿÿÿÿÿÿÀÑÞ4€ ïøùÿÿÿÿÿÿÊÕß%€ E¯ÅFªÂÖéîÿÿÿÿÿÿñóø*r–ÂÞåÿÿÿÿÿÿáæî,w—J°ÅE­Ä­ÓÞÿÿÿÿÿÿ÷÷ù?~œB¦½F¯Å“ÈÕÿÿÿÿÿÿÿÿÿL…¢‡»Ëÿÿÿÿÿÿÿÿÿf”²IzV‚V‚U‚T€S€r”¯Õßÿÿÿÿÿÿôôø3xš9¢»=«Ä”É×ÿÿÿÿÿÿÿÿÿ…¤¼%€žÞïóÿÿÿÿÿÿÈÓß'{œOµÊW¾ÓG°Æ‰ÃÒÿÿÿÿÿÿÿÿÿ{¢¼HzV‚V‚U‚T€Q€u—J«ÂB ·Ôãêÿÿÿÿÿÿçíñýþþÿÿÿ³ÉÚëðôÿÿÿùúüúüýÿÿÿ÷ùü0m•7—°T¹ÏV½ÓV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV¼ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒU½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV½ÒV¼ÒU¼ÒU¼ÒV¼ÒV¼ÒU¼ÒV¼ÒU¼ÒV½ÒV¼ÒV¼ÒW½ÒX½ÓZ¾Ó[¾Ó[¾ÓZ¾ÓX¼ÒW¼ÒW¼ÒV¼ÒV½ÒU¼ÑV¼ÒU½ÒU¼ÒU¼ÒV¼ÒV¼ÒV½ÒU¼ÒU¼ÒV½ÒU¼ÒV¼ÒV¼ÒV¼ÒV¼ÒU½ÒV½ÒV¼ÒV½ÒE®Å•ÉÖÿÿÿÿÿÿÿÿÿ\‹¨7™³Q·ÍT®Äëó÷ÿÿÿÿÿÿÃÒß#w™Úìñÿÿÿÿÿÿüúü–ÂÐiµÈ¢ÒÞþþþÿÿÿÿÿÿÐÚågÅáéÿÿÿÿÿÿáæî,w—J°ÅE­Ã­ÓÞÿÿÿÿÿÿ÷÷ù?~œB¦½E¯Å“ÈÕÿÿÿÿÿÿÿÿÿM†£d¦¼ÿÿÿÿÿÿÿÿÿâìðw³Å^­Àc°ÃnµÆƒ¿Íc³Å:¢¹®Ôßÿÿÿÿÿÿùùú{§½p¶ÉŒÈÖëô÷ÿÿÿÿÿÿÿÿÿ`Ž­)ƒ¢ÞîòÿÿÿÿÿÿÈÓß'{œO³ÉV½ÓL³Éj²Åüüýÿÿÿÿÿÿêïò{µÈ^­¿b°ÃmµÅ¾Íf³ÅJ®ÄS¸Ï>¦½šÄÒÿÿÿÿÿÿÿÿÿÿÿÿúüþ3qš¿ÕßÿÿÿÿÿÿÿÿÿÿÿÿÅÓác‹J«ÂU»ÑV½ÒU½ÒU¼ÒV¼ÒU¼ÒV½ÒV¼ÒV¼ÒU¼ÒU¼ÒV½ÒV½ÒV¼ÒV¼ÒV¼ÒU¼ÒU¼ÒV¼ÒU¼ÒU¼ÒV¼ÒV¼ÒV½ÒV¼ÒV¼ÒV½ÒU¼ÒV¼ÒV½ÒU¼ÒV¼ÒU½ÒU½ÒU¼ÒU¼ÒV¼ÒV¼ÒV½ÒV¼ÒV½ÑV½ÒV½ÒU¼ÑU¼ÒU¼ÑU¼ÒU¼ÑU¼ÒU¼ÑU¼ÑU¼ÑV¼ÑW¼ÒZ½Ò\¾Ó]¾Ó]¾Ó]½Ó[½ÒZ»ÑW»ÑW¼ÑV¼ÑV¼ÑU¼ÑU¼ÑU¼ÑU¼ÑU¼ÒU¼ÑU¼ÒU¼ÒU¼ÑU¼ÒU¼ÑU¼ÑU¼ÑU¼ÒU¼ÑU¼ÑU¼ÑU¼ÑU¼ÒU½ÒC®Å”ÈÖÿÿÿÿÿÿÿÿÿ\‹¨7™²P·ÍS®ÃëóöÿÿÿÿÿÿÄÓßp”¿Íÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿwš· iŽÉäëÿÿÿÿÿÿáæî,w—I¯ÅC«Ä­ÓÞÿÿÿÿÿÿ÷øù?~œB¤½E®Å“ÈÕÿÿÿÿÿÿÿÿÿTˆ¦3©Ùæìÿÿÿÿÿÿÿÿÿÿÿÿúýþúýþÿÿÿÿÿÿ§ÆÓ(«°Öàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëïô"f9•¯ÝíñÿÿÿÿÿÿÈÓß%{œN³ÉV½ÒS¸ÍE¢¹ÌÞåÿÿÿÿÿÿÿÿÿÿÿÿúýþúýþÿÿÿÿÿÿ¸ÑÜ8›µT¸ÐH±Æcª¾úúüÿÿÿÿÿÿÿÿÿÅÔáX†Œ½Íÿÿÿÿÿÿÿÿÿÿÿÿ¡¼t–PµÉV¼ÒU¼ÒU¼ÒU¼ÑU¼ÒU¼ÒU¼ÒU¼ÑU¼ÒU¼ÒU¼ÒU¼ÒU¼ÒU¼ÒU¼ÒU¼ÑU¼ÒU¼ÒU¼ÒU¼ÒV¼ÑU¼ÒU¼ÒU¼ÒU¼ÒU¼ÑU¼ÑU¼ÒU¼ÒU¼ÑU¼ÒU¼ÑU¼ÑU¼ÑU¼ÑU¼ÑU¼ÑU¼ÑU¼ÑU¼ÑU¼ÒU¼ÑU¼ÑU»ÑU»ÑU»ÑU»ÑU»ÑU»ÑU»ÑU¼ÑU¼ÑV»ÑX¼Ò\½Ó^¾Ò]½Ò\¼ÒZ¹ÐW¸ÏV·ÏV·ÏW¹ÏW¹ÐV»ÑU¼ÑU»ÑU»ÑU»ÑU»ÑU¼ÑU»ÑU¼ÑT»ÑU»ÑU¼ÑU»ÑU»ÑU¼ÑU¼ÑU»ÑU¼ÑU¼ÑU¼ÑU¼ÒB­Å—Ê×ÿÿÿÿÿÿÿÿÿ^©6—²P·ÌS®Äëó÷ÿÿÿÿÿÿÅÔà"x™7«µÈÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ä×Q0Ž©Ëäëÿÿÿÿÿÿâéï/x™H®ÄC«Ã¯ÔßÿÿÿÿÿÿøøúBA£¼C®Ä–ÉÖÿÿÿÿÿÿÿÿÿZŒ¨(Œ¨^›±ìîòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸Êמ¡ÌØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbŒ¯ c‹I¤»ÞíñÿÿÿÿÿÿËÖá'{œN³ÈU¼ÑU»ÑC©ÀV–°äéîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÔß0…¢PµËQ·ÍB¡¸Ñâéÿÿÿÿÿÿÿÿÿr—µq”X¦¼ó÷ùÿÿÿÿÿÿÿþÿ9rš2’­S¸ÍU¼ÑU»ÑT¼ÑU»ÑT»ÑT»ÑU»ÑU»ÑU»ÑU»ÒU»ÑU»ÑU¼ÑU»ÑU»ÑU»ÑU¼ÑU»ÑU»ÑU¼ÑU¼ÑU¼ÑU»ÑU¼ÑU»ÑU»ÑU¼ÑU¼ÑU¼ÑU¼ÑU¼ÑU»ÑU¼ÑU¼ÑU¼ÑU»ÑU¼ÑU¼ÑU»ÑU»ÑU¼ÑU¼ÑU¼ÑU»ÑT»ÑU»ÑU»ÑT»ÑT»ÑU»ÑT»ÑU»ÑV»ÐX»ÐZ»Ñ[»ÑZ¹ÐV·ÍTµÌQµËQµËSµËU¶ÍV¸ÏV¹ÐU»ÑU»ÑT»ÑT»ÑT»ÑT»ÑU»ÑU»ÑU»ÑU»ÑT»ÑT»ÑU»ÑU»ÑT»ÑU»ÑT»ÐT»ÑU»ÑU¼ÑH°Æu¶ÈÅÒßÃÑàÀÏß8q”;œµQ¸ÏO­Â±Ê×ÄÑàÉ×ㆢ½ u–C§½)|œr—³ÅÔááêðéïôáéñÄÓâg²I|)…¢C¦½—ÂÑÅÑßÅÔ⢶Ì"mL°ÅG¯Å†¹ÊÅÑßÄÒáµÅ×*lE¨¿I±Èw¶ÉÅÑÞÃÑà¿ÏÞ8r•;œ³6–°9xšš²ÈÖàëçîôéïôâêñÍÜ碹Ð9m—$~œB•¯l’¯«ÀÔÍÚæßéðçîôéïôßçð²ÆÙ?sžQ?µJ©¿¦ÅÓÅÑàÈÖ㋦¾"w—OµÊU»ÑU¼ÑS·Í8›³3w™“®ÅÓÞéæíóéïöãëòÐÝ駾ÓBrš w–Q·ÌT»ÑB¨¿{®ÀÅÑßÅÓá²Å×^ˆ8—±A¡¸œ½ÌÅÒáÆÕ╯Æ^‡H©¿T¹ÏT»ÑT»ÑU»ÑW¼ÒX¼ÒX¼ÒW¼ÑU»ÑT»ÑU»ÑT»ÑT»ÑU»ÑT»ÑU»ÑT»ÑT»ÑU»ÑU»ÑU»ÑT»ÑT»ÑT»ÑT»ÑT»ÑT»ÑT»ÑT»ÑT»ÑT»ÑT»ÑT»ÑU»ÑU»ÑU»ÑU»ÑT»ÑT»ÑU»ÑU»ÑT»ÑT»ÑT»ÑT»ÑT¹ÑT»ÑT»ÑT»ÑT»ÑT»ÑT¹ÑU¹ÐV¸ÏV·ÍV¶ÍU¶ÍT¶ÌQµËP³ËO³ÊN²ÉO²ÉQ³ËTµÌU·ÏU¹ÐT¹ÑT¹ÑT»ÐT»ÑT»ÑT»ÐT»ÑT»ÑT»ÑT»ÑT¹ÑT¹ÐT¹ÑT»ÑT¹ÑT¹ÑT»ÐT»ÑT»ÑT¸Ï?ž¸ ]‡W…T‚lL­ÃT¹ÐM±Æt—T‚W†W‚7“­QµÊHªÂ"ž ^ˆ\ˆ[‡ V…P^‡6’«O±ÆQµÊ,‡¤UX†T+‚ QµËS·Í7“®W‚X†T‚"u–O²ÈT¸Í>µ\†TƒQ€lL®ÃPµÊ:›µl^ˆ\‡[‡V†S‚U‚p“G¤½G©¿ ~ _ˆ \ˆ[‡[‡[‡ TƒP€kB¡·PµÊO²É#zšU‚X†U4ªS·ÌT»ÑT»ÑT¹ÐQµË=ž¶p“]ˆ\‡[‡W†S‚T‚kE¢¹P·ÍL¶ÍJ²É4“®ZƒX†T#yšO±ÆN²È%žU‚X†T1‰¤PµÊT»ÐV¼Ñ\¾Óc¿ÔfÂÕgÂÕfÀÔb½Ò]¼ÑZ»ÑV»ÑT»ÑT»ÐU»ÑT»ÐT»ÑT¹ÑT»ÐT»ÑT»ÑU»ÐT»ÑT»ÐT¹ÑT»ÑT»ÐT¹ÑT»ÑT»ÐT»ÐT»ÑT¹ÐT»ÑT»ÑT¹ÐT¹ÐT»ÑT¹ÐT»ÐT¹ÐT¹ÐT¹ÐT¹ÐT»ÑT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐU¸ÏT¶ÍQµËQµËQµËPµËPµËPµËPµËOµËO³ÊO²ÊP³ËSµÌT·ÏT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¸ÏPµËJ«ÂF¦¼G§½N°ÅS¶ÍT¹ÐQ¶ÍL¯ÅG§¾G¦¼JªÀOµÊS¸ÏS¸ÏP³ÊHªÀ>µ8–±:™±C¢¸M¯ÄPµËT¸ÏS¸ÍN²ÈH©¿F¦¼H¨¿O²ÈS·ÍS¸ÏO³ÊIªÀG¦¼H¨¾N±ÆS¶ÍT¸ÏN³ÊO«ÂrµÆmµÅM­ÃOµËT¹ÏQ¶ÌO±ÆE£»:™²8–°:—²?ž¶IªÀO²ÈQ¶ÌS·ÍPµÊM¯ÅE¤¼=œµ9–±8–°;™²F¤»O±ÆQ¶ÌT¸ÏS¶ÍM±ÆG¨¾F¤¼IªÀO³ÉS¸ÍT¹ÐS¹ÐT¹ÐT¸ÐQ¶ÌO²ÈE¤¼:™²8–°9—±?µI¨¿O²ÆOµË[¹Ï~ÅÖs¿ÒN°ÅH©¿F¦¼H¨¾O±ÆS·ÍS·ÍN²ÈH¨¾F¤¼I©¿O³ÉT·ÏZ¼Ñd¿ÔjÂÕkÃÕlÃÕkÃÖiÀÔc¼Ñ]·Í]·Í\¹ÐW¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐT¹ÐS¹ÐT¹ÐT¹ÐT¹ÐT¹ÐS¹ÐT¹ÐT¸ÐT¸ÏS¶ÍQµÌPµËQµÌQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍPµÌPµËPµËQµËS·ÍS¸ÏT¹ÐT¹ÐS¹ÐT¹ÐS¹ÐT¹ÐT¹ÐS¹ÐT¹ÐS¸ÐS¸ÐT¹ÐT¹ÐS¹ÐS¸ÐS¹ÐT¹ÐT¹ÐS¹ÐT¹ÐS¹ÐS¸ÏT¸ÏT¸ÐT¹ÐT¹ÐS¹ÐS¸ÐS¸ÐT¸ÏT¸ÐT¹ÐT¹ÐS¹ÐT¹ÐT¸ÐS·ÏQ·ÍS·ÍS¸ÏS¸ÐT¹ÐT¹ÐS¹ÐT¸ÐS¸ÐS¸ÏS¸ÐT¸ÐT¹ÐT¹ÐT¸ÐS¸ÐT¸ÏT¸ÏT¹ÐS¹ÐT¹ÐLµÌp½Ðÿÿÿñó÷J™²I°ÆS¹ÐT¹ÐT¹ÐS¸ÏS·ÍQ¶ÍS¶ÍS·ÏS¸ÏT¸ÐT¸ÐT¹ÐS¹ÐT¸ÐS¸ÏS·ÍS·ÍQ¶ÍS·ÍS¸ÏS¸ÐT¹ÐT¹ÐT¹ÐT¸ÐS¸ÏT¸ÏT¹ÐS¸ÐS¸ÐS¹ÐS¹ÐT¹ÐS¸ÐT¹ÐT¹ÐS¸ÏS·ÍQ·ÍS¶ÍS·ÍS¸ÏT¹ÐI³ËÃÓÿÿÿäìðB•¯M²ÉT¸ÏT¸ÐS¹ÐT¸ÐT¹ÐT¹ÐT¸ÐS¸ÏT¸ÏS¸ÐX¹Ðc½ÒjÂÕkÃÕjÂÕf¿Óc»Ñ]·ÍZµËW³ÊZµË\µÌ\·ÏW¹ÐS¹ÐS¹ÐT¸ÐT¹ÐT¹ÐS¹ÐT¹ÐT¸ÐS¸ÐS¹ÐT¹ÐS¹ÐT¹ÐT¹ÐT¹ÐS¸ÐS¹ÐS¹ÐS¹ÐS¹ÐT¹ÐS¸ÐT¹ÐT¹ÐS¹ÐT¹ÐS¸ÐT¹ÐT¹ÐT¹ÐT¹ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÐS¸ÐS¸ÐS·ÏQ¶ÍQµÌPµÌQ¶ÍQ·ÍS¸ÏS¸ÏT¸ÐT¸ÏS·ÏS·ÍQ¶ÍPµÌPµËQµÌS·ÏS¸ÐS¸ÏS¸ÐS¸ÐS¸ÏS¸ÏS¸ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÐS¸ÏS¸ÏS¸ÏS¸ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÏS¸ÐS¸ÐS¸ÐS¹ÐT¸ÐS¸ÐS¸ÐS¸ÏS¸ÏS¸ÏS¸ÐS¹ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÐS¸ÐS¹ÐS¸ÐS¹ÐJ²ÊjµÉÿÿÿíîó3y›FªÂS¸ÏS¸ÐS¸ÐS¸ÐS¹ÐT¸ÐT¹ÐS¹ÐS¹ÐS¸ÐS¸ÐS¸ÏS¸ÏS¹ÐS¸ÏT¸ÐS¹ÐS¹ÐS¹ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÏS¸ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÏS¸ÐS¸ÐS¸ÏS¸ÏS¸ÐS¸ÐS¹ÐS¹ÐT¹ÐS¹ÐS¹ÐS¸ÐS¸ÐG°Èz¼Íÿÿÿßãë*w™I®ÅS¹ÐS¸ÐS¹ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐV¸Ð]¸Ïc»Ñf¾Óe¾Ò`»ÐXµÊP®ÅL©ÃH§ÂH§ÂN«ÅU±È\¶Ì\·ÏV¸ÐS¸ÐS¸ÏS¸ÏS¸ÐS¸ÏS¸ÐS¸ÏS¸ÏS¸ÏS¸ÐS¸ÐS¸ÐS¸ÏS¸ÐS¸ÏS¸ÏS¸ÐS¸ÐS¸ÏS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÐS¸ÏS¸ÐS¸ÐS¸ÏS¸ÐS¸ÐS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÐS·ÏQµÌQµÌQµÌS·ÍT¸ÏT¸ÐT¸ÐU¹ÐT¹ÏT¸ÏT¸ÏS·ÏQµÍPµËQµÌQ·ÍS·ÏS·ÏS¸ÏS¸ÏQ¸ÏS¸ÏS¸ÐS¸ÏS¸ÐS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS·ÏS·ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÐS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÐS¸ÏS·ÏS¸ÐS¸ÐQ¸ÏS¸ÏS·ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÐS¸ÏS¸ÏS¸ÏS¸ÏS¸ÐS·ÏS¸ÏS¸ÏS¸ÏO¶ÍMµÌMµÌO·ÏH±Éi³Æÿÿÿíïó3{œC§¿O¶ÍMµÌO¶ÍQ¸ÐS·ÏS¸ÏS·ÐP·ÏN¶ÍMµÌMµÍN¶ÍS¸ÏS¸ÏS¸ÐQ¸ÏO·ÏQ·ÏS¸ÐQ¸ÏN¶ÍMµÌP¶ÏS¸ÐS¸ÏQ·ÏO·ÏQ¸ÏS¸ÐP·ÏM¶ÍMµÌQ·ÏS¸ÏS¸ÐS¸ÏS¸ÐQ·ÏMµÌMµÌN¶ÍS¸ÐS¹ÑG¯Æy¹Ëÿÿÿßäì+y›H«ÃS¸ÐS¸ÐS¸ÏS¸ÏS¸ÏS¸ÐS¸ÏS¸ÐT¸ÏZ·Ï[µÌZµËX³ËW³ËS¯ÈL©ÃG¦ÂE¤¿E¤¿C£¿C£¿G¦ÀP®Å[µÌZ·ÏT·ÏS¸ÏS¸ÏS·ÏS¸ÐQ¸ÐS¸ÏS¸ÏS¸ÏQ¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏQ¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS¸ÏS·ÏS¸ÐS¸ÏS¸ÐS¸ÐS·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏS·ÏQ·ÏP¶ÍPµÌQµÌS·ÏT¸ÏT¸ÐT¸ÐT¸ÐT¸ÐT¸ÏT¸ÏS·ÍQµÍPµÌPµÌQ¶ÍS·ÏQ·ÏQ·ÏS·ÏQ·ÏQ·ÏS·ÏQ·ÏQ·ÏS·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏS·ÏS·ÏQ·ÏQ·ÏQ·ÏS·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏS·ÏQ·ÏQ·ÏS·ÏS·ÏQ·ÏQ·ÏS·ÏQ·ÏQ·ÏQ·ÏQ·ÏS·ÏQ·ÏS·ÏMµÌH±É\¶Ìi»Íg¹Ì[µÊA§Àe°Åÿÿÿíïó(t—;¢¹^·Ìi»ÏW³ÈF®ÅQ¶ÌQ·ÍJ²ÊS³É_¶Ëg¹Ìg¹Í]µÊH­ÅL²ÊQ¶ÏS¶ÌVµÊS²ÈE¯ÅJ±È`¸Ìi»ÍS±ÆG¯ÆQ¶ÍTµÌWµÊN±ÈE¯ÆP²Ée¹Íe¸ÌM®ÅJ±ÉS·ÏS·ÏI²ÊQ²Ée¸Íi¹Í]µÊG­ÅM³ËF¯Æx¹Ëÿÿÿßäì*x›HªÃQ·ÏS·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ¸ÏV·ÍZµËS¯ÆL©ÄJ©ÃLªÄI©ÄG¨ÃG¨ÃG¨ÃG¨ÂF§ÂF¦ÂE¤¿F¤ÀO­ÅZµÌU¸ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏS·ÏS·ÏS·ÏS·ÏQ·ÏQ·ÏQ·ÏQ·ÏS·ÏQ·ÏS·ÏQ·ÏQ·ÏS·ÏQ·ÏS·ÏS·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÍQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ¶ÍPµÍQµÍS¶ÍT¸ÍT¸ÐT·ÐT¸ÐT¸ÐT¸ÏT¸ÏS¶ÏQµÌPµËPµÍQ¶ÏQ·ÏQ·ÏQ·ÏQ¶ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÍQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÍQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ¶ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÍQ·ÏQ¶ÏQ¶ÍQ·ÏQ·ÏQ·ÏQ·ÏQ·ÍQ·ÏQ¶ÏQ·ÍQ¶ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÍQ·ÏMµË[µË¼ßçòùùþÿÿÿÿÿöúüÉãêy¶Èüþþíðôq¡¸Æãëøýýüþýîöø“ÆÖB§¿J°Æ¤ÖâïùùüÿþÿÿÿÿÿÿôùúÅáé[¯Å>¨ÀŒÉØ÷úü¼Ùâ|»ÌÓêðùüýúüýæñôz¼Í:¢¼¯Øãøúü Ê׌ÅÔáñôúýýùüüÕéî^¯ÅG®ÅG°ÆƒÅÖáðôþÿÿÿÿÿöùú¿ÞåW®Ä:¤¾y¹Ìÿÿÿßäì*y›GªÃQ·ÍQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ¶ÏQ·ÏVµÌS¯ÆL©ÄG§ÃHªÄJ­ÅL®ÆL¯ÈL¯ÈM¯ÆL¯ÈJ®ÅI«ÅH©ÃF§ÀG¦ÂQ¯ÆV¶ÌQ·ÏQ¶ÏQ·ÏQ·ÍQ¶ÏQ¶ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ¶ÏQ¶ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÏQ·ÍQ·ÍQ·ÏQ·ÏQ·ÏQ·ÏQ¶ÏQ·ÏQ·ÏQ¶ÍQ·ÍQ¶ÍQ¶ÏQ¶ÍQ¶ÍQ¶ÍQ¶ÍQµÍQµÌQµÌQµÍS¶ÍT·ÏT·ÐT·ÏT·ÏT·ÏT·ÍSµÌQµÌOµÌQµÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍP¶ÍP¶ÍQ¶ÍQ¶ÍP¶ÍQ¶ÏQ¶ÏQ¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍQ¶ÍQ¶ÏQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍP¶ÍP¶ÍQ¶ÍP¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÏQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍP¶ÏQ¶ÍQ·ÏOµÍL¯ÅÌåíÿÿÿÿÿÿáéðØâíïñ÷äéðbªøüýÿÿÿÿÿÿþþþãêòñôùÿÿÿöøù[¢¸9 ¸²ÑÝãæîÊ×äÃÒàÊ×äùùüÿÿÿ»Õß+’®•ÆÖÿÿÿýýýþÿþýýþîñ÷üýþÿÿÿÞéî9«¼ÚäÿÿÿüüýÿÿÿùùüïòøÿÿÿÿÿÿµÏÙ/”¯x¾ÐúýýÿÿÿÙãíÅÓâòöùÿÿÿÒäë9—²t¶Éÿÿÿßäì*x›G©ÂQ¶ÍP¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍP¶ÍS¶ÍS±ÉMªÄIªÄJ®ÆL°ÉN³ÊOµËPµËPµÌPµÌPµÌOµËN³ÊM±ÉJ­ÅG¨ÃJ¨ÃS²ÊQ¶ÍQ¶ÍQ¶ÍP¶ÍQ¶ÍQ¶ÍQ¶ÏQ¶ÏQ·ÍP¶ÍP¶ÍQ¶ÍP¶ÍQ¶ÍQ¶ÍP¶ÍQ¶ÍP¶ÍQ¶ÍQ¶ÍQ¶ÍQ¶ÍP¶ÍQ¶ÍP¶ÍQ¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍQ¶ÍQ¶ÍQ¶ÍP¶ÍPµÍPµÍQµÍP¶ÍPµÌPµÌQµÌS¶ÌT·ÏV¸ÏU¸ÏU·ÏU·ÏT·ÍQµÌPµÌPµÌPµÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍQ¶ÌP¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍQ¶ÍQ¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍH±Éu½Ðÿÿÿÿÿÿw¼N Vƒ\‡ Tƒ>{œÿÿÿÿÿÿ¢»Ñ4m™OCzžøùúÿÿÿn³2–±1†¢O{P€SƒO€€¦½ÿÿÿÝãê%{›ŽÄÒÿÿÿ÷ùú“±Ê0j–Sƒ{¡»ÿÿÿööù?ƒ¢µÖáÿÿÿçîôsš¸_Ž W‡®ÅÕÿÿÿÓÝä(~žÅâêÿÿÿ²ÈÙL€PQ‡§ýýþÿÿÿ_œ³i®Âÿÿÿßäì*xšF©ÂQ¶ÍP¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍP¶ÍPµÌO¯ÆJªÄL®ÆN²ÊPµÌQ¶ÍQ¶ÍS¶ÍS¶ÏS·ÏS¶ÍQ¶ÍQ¶ÌPµÌN²ËJ­ÆH¨ÃN¯ÆPµÍP¶ÍQ¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍQ¶ÍP¶ÍP¶ÍP¶ÍP¶ÍQ¶ÍPµÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍP¶ÍQµÍPµÌPµÍPµÍPµÍPµÍPµÍPµÍPµÌPµÍPµÌPµËPµÌQµÌT¶ÍV·ÏV·ÏV·ÏV·ÍT¶ÍSµÍPµÌPµÌPµÍPµÍPµÌPµÌPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍP¶ÍPµÍPµÍPµÍPµÌPµÍPµÍPµÍPµÍPµÍPµÍP¶ÍPµÍPµÍPµÍPµÍP¶ÌPµÌPµÍPµÍPµÍPµÍPµÍPµÌPµÍPµÍPµÍP¶ÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍP¶ÍB«Å–É×ÿÿÿàçï [ˆ+‡¦:š³8–±/­bªÀÿÿÿðóø]‹m’2«3ŽªÜéîÿÿÿn—±,­;¢¼Eµ]¨¼_©¾T¢¸‚¶Èÿÿÿåêï$u—ÂÑÿÿÿÂÒàL~t—+Œ©L™²ùúüþýþAž²Ôßÿÿÿ‹«ÅM~$ž%‰¨x¯ÄÿÿÿÖßé3 éô÷ÿÿÿ_Œ®u™>›²7ŽªÚçíÿÿÿ~¦¼c¦½ÿÿÿßäì*wšF©ÂPµÍPµÍPµÍPµÍPµÍP¶ÍP¶ÍPµÌM¯ÆJ­ÅM¯ÈOµÌQ¶ÍS·ÍS¶ÏT¶ÍT·ÏT¶ÏT¶ÏS·ÍS¶ÍQµÍPµÌM±ÉHªÄM®ÆPµÌPµÍPµÌPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÍPµÌPµÍPµÌPµÍPµÌPµÌPµÍPµÌPµÍPµÍPµÍPµÍPµÍP¶ÌPµÌOµÌOµÌPµÌPµÌOµÌOµÍOµÌPµÌOµÍPµÌPµÌPµÌS¶ÍT¶ÍU·ÍU·ÍT¶ÍS¶ÌQµÌPµÌPµÌPµÍOµÌOµÌPµÌPµÌPµÌOµÌPµÌPµÍPµÌPµÌPµÌOµÌPµÍPµÌPµÌOµÌOµÌPµÌPµÍPµÌOµÌOµÌPµÌPµÌOµÌPµÌPµÌPµÍPµÌPµÌPµÍPµÌPµÌPµÌPµÌPµÌOµÌOµÌOµÌPµÌOµÌPµÌPµÌOµÌPµÌPµÌPµÌOµÌOµÌPµÍPµÍ>¨À¡ÌÙÿÿÿÈÕâkG¨ÀN³ÊOµËF®Åg±Åÿÿÿíïó3{A£»L°ÆF£»Ýìïÿÿÿm—²'‹¨™ÍÚì÷ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäêð"q•Œ¿ÐÿÿÿÀÏÜ"u–HªÂF­ÅZ©À÷ùúÿþÿA~ž²Ôßÿÿÿ¯Å$ƒ¢J®Å?§À|¹ËÿÿÿÔÞç:¢ñùùÿÿÿïó÷ðùúñúüñùúþþÿÿÿÿ‡ªÂ\œµÿÿÿßäì)wšF¨ÀOµÍPµÌPµÌOµÌPµÌPµÌOµÌOµËN°ÈM®ÈM°ÉOµÌQ¶ÍT¶ÍT¶ÍU·ÍT·ÍT·ÏT·ÏT·ÍT¶ÍQ¶ÍPµÌM²ÊJ«ÅN°ÈPµÌPµÌPµÌOµÌOµÍPµÌOµÌPµÍOµÌPµÌOµÌOµÌOµÌOµÌPµÌOµÌPµÌPµÌPµÌOµÌOµÍPµÌOµÌOµÌOµÌOµÌPµÌOµÌPµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌPµÌPµÌQµÌQµÍQ¶ÍQµÌQµÌPµÌOµÌOµÌOµÌOµÌOµÌPµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌPµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌPµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌPµÌOµÌOµÌOµÌOµÌPµÌ=§¿¡ÌÙÿÿÿÊ×ã#wšH«ÃP¶ÍP¶ÍG¯Æf²Åÿÿÿîðó2zœB£½M³ËG¤½Ýìðÿÿÿe”°b¤»ÿÿÿÿÿÿªÂÕr—µp•µž·Ìÿÿÿåêð"q•Œ¿ÐÿÿÿÀÏÜ t–J®ÅJ±É[­Â÷ùúÿýþ?~ž²Óßÿÿÿ¯Ä$‚¢M²ÉB«Ä»ÌÿÿÿÔÞç;‚£òùúÿÿÿ¿Ñà ·Í¢¸Ï¢¹Ï ¸Íž¶Ì%cŽbž¶ÿÿÿßäì)wšF¨ÀOµÌOµÌOµÌOµÌPµÌOµÌOµÌOµÌN±ÉM°ÈN°ÉO³ËSµÍT¶ÍT·ÍT¶ÍT¶ÍT¶ÍT¶ÍT¶ÍT·ÍT¶ÍQµÍM°ÉJ­ÅN±ÉOµÌOµÌOµÌOµÌOµÌPµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌPµÌOµÌOµÌOµÌOµÌOµËOµÌOµÌNµÌOµÌOµËOµÌOµÌOµÌO³ÌOµËOµËOµËOµÌOµÌOµËOµÌOµÌO³ÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµËOµËOµÌOµÌO³ÌOµÌOµÌO³ÌOµÌOµÌOµËOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌO³ÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµËOµÌOµÌOµËNµËOµÌOµËOµÌOµÌOµÌPµÌ>¦¿”ÅÔÿÿÿßæí*{›A¦¿NµËMµËA«Åf°Åÿÿÿîðó2zœB£½M³ËG¤½Ýìðÿÿÿc“°’¾ÏÿÿÿÃÓáI~`‡X‚NŒ©ÿÿÿåêðp•Œ¿ÐÿÿÿÀÏÜ t–I­ÅI°É[«Ã÷ùúÿýþ?|ž²Óßÿÿÿ¯Ä$‚¢M±ÉBªÄ~»ÌÿÿÿÕßé2| ìöøÿÿÿW‡©M~[‡[‡Z†X… js³ÅÿÿÿÞãë$s–E¨ÀOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌN²ÊM¯ÈO±ÊP³ÊSµÌT¶ÍT¶ÌT¶ÍT¶ÍT¶ÍT¶ÍT¶ÌT¶ÍT¶ÍQ³ËL­ÅL®ÆO³ËOµËOµÌOµÌOµËOµÌOµÌOµÌOµÌOµËOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌOµÌO³ÌOµÌOµÌOµÌOµÌOµËOµËNµÌO³ËOµÌOµÌO³ËO³ËN³ËO³ËN³ËO³ÌO³ËN³ËNµËO³ÌN³ËN³ËO³ËNµÌO³ËN³ËO³ËO³ËNµËOµËNµËOµÌN³ËOµËO³ËO³ËN³ËO³ËO³ËN³ÌO³ËOµËN³ËN³ËNµËO³ËOµËO³ËO³ËN³ËO³ÌO³ËO³ËO³ËO³ËO³ËO³ËO³ËO³ËNµËN³ËO³ËN³ËN³ËO³ËN³ËO³ËO³ËO³ËNµËNµËN³ËO³ËO³ËNµËO³ËO³ËNµËN³ÌN³ËN³ËN³ËO³ËN³ÌB©Âp±Åÿÿÿÿÿÿˆ³ÅC ¸N­ÅX²ÈV¯Åf°Åÿÿÿîðô2z›A£¼L²ÊF¤¼Ýìðÿÿÿc“°šÃÒÿÿÿ¾ÏÝt—?¡¸_¯Ä¾Ýåÿÿÿæëñn”‰¾ÏÿÿÿÀÏÜ t–I­ÅH¯È[«Â÷ùúÿýþ?|²ÓÞÿÿÿ®Ä#‚¢M°ÈA©Ã€¼Íÿÿÿ×àê s—ÉàçÿÿÿËÜäMµA ¶G£»U©¿TªÀ:¢»w·Éÿÿÿçìñ=ƒ¢C¤½N²ÊN³ËN³ËN³ËN³ËN³ËN³ËOµËN³ËM°ÈM¯ÈP±ÉQµËTµÌTµÍTµÍTµÌS¶ÌS¶ÍT¶ÌSµÌQµÌN¯ÈJ­ÅM°ÈN³ËOµËN³ËO³ËN³ËNµËO³ËN³ËN³ËN³ËN³ÌNµËN³ËOµËN³ËN³ËO³ËOµËO³ËO³ËN³ËN³ËN³ËN³ËO³ËO³ËN³ËO³ËOµÌN³ËN³ËN²ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN²ËN³ËN³ËN³ËNµÌJ¯È;—²Å×ßÿÿÿÿÿÿêô÷åòööúüðöø|±Äúþþðñö3zœA¢¼L±ÊF£½ßìðÿÿÿe•±u«Âÿÿÿþþþ×éîÞïòÿÿÿøùüýýþÿÿÿ¹ÔÞ›ÅÔÿÿÿÂÐÜ t–H«ÅG¯È\«ÂùúüÿþÿBž³Óßÿÿÿ“±Å#¢L°È>¨Â‹ÂÑÿÿÿÚãìq–qª¾þüüÿÿÿóùúáïóæó÷ÿÿÿÜêî7”¯k±Åÿÿÿÿÿÿøùúu±Å>£¾N³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN±ÊL®ÆN®ÆP±ÊSµÌVµÌV¶ÍVµÍUµÍUµÍTµÌTµËS±ÈN®ÆM®ÆN²ÊN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN³ËN²ËN³ËN³ËN³ËN²ËN²ËN²ËN²ËM²ÊN²ËN²ÊM³ËN²ÊN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN³ËN²ËN²ËN³ËN²ÊN²ËN³ËN²ËN³ËN²ÊN²ËN³ËN²ÊN³ËN²ËN²ÊN²ËN²ÊN²ËN²ËN²ÊN²ËN³ËM²ËN²ËN²ËN³ËN²ËN²ËN²ËN³ËN³ËN²ÊN²ÊN²ËN²ËN³ËN³ËN³ËN²ËN²ËN²ÊN²ÊN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²ËN²Ê>¢½9‚¡žµÈåìòô÷ùôöùéîô®ÂÕJ|ÞéïÉÔá(q•B£½L±ÉF£½ÂØâìïöX‰©'ž¦½Íïòøùùúåëò–²Ê$c¨¿Ñô÷ùËØäwœµîóø£¸Ìr”I­ÅH¯ÈU¨¾ÙãëÚâí0q”ÄÓòóùx·$‚¢L°ÈA©ÃxµÈëîò¸ÈÙ"r–+ˆ¦e’­ÐÚæô÷ùùùüòóøÞæ¾mA›³¯ÅÓîñ÷êîôJ|œ3”¯N²ÊN³ËN²ÊN²ÊN³ËN²ËN²ËM²ËN²ËM±ÉM­ÅO®ÈS²ËW¶ÍZ·Í[¶ÏZ·ÍX¶ÍXµÍWµËU²ÊP¯ÈN±ÉN³ËN²ËN³ËN²ËN²ËN²ËN²ËN²ÊN²ÊN²ËN²ËM²ÊN²ÊN²ËN²ËN³ËN²ËN³ËN³ËN²ËM²ËN²ËN³ËN³ËN²ËN³ËN³ÊN³ËN²ÊN²ËM²ËM²ÊM²ÊM²ÊM²ÊM²ÊM²ÊM²ÊN²ËM²ÊM²ÊM²ÊM²ÊM²ÊN²ÊN²ÊN²ÊM²ÊM²ËM²ÊM²ËM²ËN²ÊM²ËM²ÊM²ÊM²ÊM²ÊM²ÊM²ÊM²ËM²ÊM²ÊM²ÊN²ÊN²ÊN±ËM²ÊM²ÊM²ÊM²ÊN²ÊN²ÊM²ÊM²ÊM²ÊN²ÊN²ËN²ÊM²ÊM²ÊM²ÊM²ÊM²ÊM²ÊM²ÊM²ËM²ÊM²ÊM²ÊM²ËM²ÊN²ÊM²ÊN²ËM²ÊN²ËN²ËN²ÊM²ÊN²ÊN²ÊM²ÊM²ËM²ËL²ËW²ÊX§½*u–]ˆ_^V‡L|$p’d‰L{r”I«ÄN²ÊHªÄ't–O~ Zƒ8•°t–\‡^ T…O~w™s–[‡Qcˆ]‡M{+ L¯ÈN²ÊE£¼gŒM~f‹, S€S8•°M°ÉM°É;–±ZƒM{'{F¦¿'…¢_‡]‰`^QO|0‰§B£¼t–Z‡ Tƒ ]…C¢»M²ÊN²ÊM²ÊM²ÊM²ÊM²ÊN²ÊN²ÊM²ËM²ËM°ÉM¯ÈP±ÉVµÌ\·Ï^¸Ð^¸Ï^¸Ï]·ÏXµÌS²ÊN²ÊN²ËM²ÊM²ÊM²ÊM²ÊM²ÊM²ÊM²ËN²ÊM²ÊM²ÊM²ÊM²ÊM²ÊN²ËM²ËM²ÊM²ËM²ÊM²ÊM²ÊN²ÊM²ÊM²ÊM²ËM²ÊM²ÊM²ÊM²ÊM²ÊM²ÊM²ËM±ÊM±ÊM²ÊM²ÊM±ÊM²ÊM²ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM²ÊM²ÊM²ÊM±ÊM²ÊM±ÊM±ÊM²ÊM²ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM²ÊM²ÊM±ÊM±ÊM±ÊM±ÊM²ÊM±ÊM±ÊM²ÊM±ÊM±ÊM²ÊM±ÊM²ÊM±ÊM±ÊM±ÊM²ÊM²ÊM±ÊM±ÊM±ÊM±ÊM±ÊM²ÊM±ÊM²ÊM±ÊM±ÊM±ÊM±ÊM±ÊM²ÊM±ÊM±ÊM±ÊM²ÊM²ÊM±ÊM±ÊM±ÊS²ÊcµÌj¹Ïc²ÈLœµ8‹¨/…¢*¡7‹¨Iœ¶Lœ¶Eš³E¤¾J®ÆN±ÊJ¯ÆA¢»9—²A ¸H©ÃE§¿9—²6”°8•±B¡¸H¨ÂC¢¼8—²9—²?ž¸9™³;šµG§ÀM°ÉM²ÊI­Å> ¹9™³C¢»B¢¼:™³>·HªÃM±ÊM±ÊG©Ã;œµ:šµF¦¿L¯ÆI«Å?¡¸6•°4“¯4”°8–±B¡¹I«ÄJ®ÅE¦¿8—²7•±C¢»J®ÅM²ÉM±ÊM±ÊM±ÊM²ÊM±ÊM±ÊM±ÊM±ÊM±ÊM²ÊM±ÊM±ÊP²ÊUµËWµÌX¶ÍX¶ÍUµÌP²ËM±ÊM±ÊM±ÊM²ÊM±ÊM±ËM±ÊM±ÊM±ÊM±ÊM²ÊM²ÊM±ÊM±ÊM±ÊM±ÊM²ÊM±ÊM±ÊM²ÊM±ÊM±ÊM±ÊM²ÊM²ÊM²ÊM²ÊM²ÊM±ÊM±ÊM±ÊM²ÊM²ÊM±ÊM±ÊM±ÊM±ÊM±ÉM±ÊM±ÊL±ÉM±ÊL±ÊM±ÊL±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊL±ÉM±ÊM±ÊM±ÊM±ÊL±ÊM±ÉM±ÉL±ÊL±ÉM±ÊM±ÊM±ÊM±ÊM±ÊL±ÊM±ÊM±ÉL±ÊM±ÉM±ÊM±ÊM±ÊM±ÊL±ÉM±ÉM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÉM±ÊM±ÊM±ÊL±ÊL±ÊM±ÊM±ÉL±ÉM±ÊM±ÉM±ÉM±ÊM±ÊM±ÊM±ÊM±ÊM±ÊM±ÉM±ÉM±ÉM±ÊM±ÉL±ÉN±Ê[±ÈV­ÅS©ÄS¨ÃF ¼:—µ8•³8•³7•µ8•µH¡¼]°ÈQ±ÉL±ÉL±ÊM±ÉL°ÉL°ÈL¯ÉL±ÉL±ÊL¯ÈJ¯ÆL¯ÈL°ÉL±ÊL°ÉL¯ÈL°ÈL°ÈL¯ÈL°ÈM±ÉM±ÊM±ÊM±ÊL°ÉL°ÈL°ÈL°ÉL¯ÉL°ÈM±ÊM±ÊM±ÊL±ÉL°ÉL°ÉM°ÉM±ÊM±ÊL°ÉL¯ÈJ®ÆJ®ÆL¯ÆL°ÉL±ÊM±ÊM±ÊL¯ÈL¯ÈL°ÉM±ÊL±ÊM±ÊM±ÊM±ÊM±ÊM±ÉM±ÉL±ÊL±ÉM±ÉL±ÉM±ÊM±ÊM±ÉM±ÊM±ÊM±ÊM±ÊM±ÊM±ÉM±ÉM±ÉL±ÊL±ÊM±ÊM±ÉL±ÊM±ÉM±ÊL±ÊM±ÊM±ÊM±ÊL±ÊM±ÊL±ÊM±ÉM±ÊM±ÊM±ÊM±ÊM±ÊL±ÊL±ÊM±ÊM±ÊM±ÉM±ÉM±ÊM±ÊL±ÊM±ÊM±ÊM±ÉL°ÉM°ÉL°ÉL°ÉL±ÊL°ÉL°ÉL±ÉL°ÉM±ÊM±ÉL°ÉM±ÊL±ÉL°ÉL°ÊL±ÉL°ÉL°ÊL°ÉM±ÉL±ÉL°ÊL±ÉL±ÉL±ÉL°ÉM°ÊL°ÉM°ÉM±ÉL°ÉL°ÊL±ÊL°ÉM°ÉL±ÉL°ÉL±ÊM±ÉL±ÊL°ÊL°ÉM±ÊL°ÉL°ÉM°ÉM±ÉL°ÉL°ÊL°ÊL°ÉL°ÉL°ÊL°ÉL±ÊL°ÉL±ÉM°ÉL±ÉL°ÊL°ÉL±ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉM°ÉM°ÉL°ÊT±ÉS¨ÃB¹;š·A»?ž¼? ¼A ¼? ¼>¹;š·8–µH¢½X±ÊL±ÉL±ÉL±ÉM°ÊM±ÊL±ÊL±ÊL±ÊM±ÊL±ÊL°ÊL±ÊL±ÊL±ÉL±ÊL±ÊM±ÊM±ÉM°ÊM±ÊL±ÉL°ÉL±ÉL°ÉL°ÊL±ÉL±ÊL±ÊL°ÉL±ÉL±ÉL±ÉM°ÊL°ÊL°ÉL°ÉL±ÊL±ÊM°ÊM±ÊM°ÊM±ÊM±ÉM±ÉL°ÉL±ÉL±ÊL±ÊM°ÊM±ÊL±ÉL°ÉL°ÉL°ÊL±ÉL±ÉM±ÉL±ÉL°ÉL°ÉM±ÉL°ÉL°ÉL±ÉL±ÉL±ÊL±ÉL°ÉL°ÉL°ÉL°ÉL±ÉL±ÉL±ÉL±ÉL°ÉL°ÉL°ÉL°ÉL°ÊL±ÉL°ÊL°ÊM±ÉL±ÉM°ÊL°ÊL°ÉL±ÊL°ÉL°ÉL±ÉL±ÉL°ÉM±ÉL±ÊL±ÊL±ÉM°ÉL°ÊL°ÊL°ÉM±ÊM±ÉL±ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉQªÅEž»?ž¼B£¿F¨ÄH«ÅI­ÅI­ÅH«ÅG©ÄE¤Â? ½:™¶O§ÂO±ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉM±ÉO²ÉQ²ÊQ²ÊO±ÊN°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉL°ÉJ°ÉJ°ÉJ°ÉL¯ÉL¯ÉJ¯ÉL°ÉJ°ÈL¯ÉL°ÉJ¯ÉL°ÉL°ÈJ°ÉJ°ÉJ°ÈJ°ÉL°ÉL°ÈL°ÈL°ÉL¯ÉJ°ÉJ°ÉJ°ÉL¯ÉL°ÉL¯ÉL°ÈL¯ÉL°ÉL°ÉL¯ÉL¯ÉL¯ÈL¯ÉJ°ÉL°ÉL¯ÈJ°ÉJ¯ÉL¯ÉJ°ÉJ°ÉJ°ÉJ¯ÉL°ÉL¯ÉL¯ÉL¯ÉL¯ÉL°ÉL°ÉL¯ÈL¯ÉL¯ÈL°ÉL°ÉL¯ÉL°ÉL¯ÈJ¯ÉL¯ÈL°ÈJ°ÈL¯ÉL°ÈL¯ÉL°ÉJ¯ÉJ¯ÉJ°ÉM°ÉI£¿Bž»G¨ÄI®ÈL°ÉM°ÉM°ÊM±ÉM°ÉL°ÉI¯ÈH«Å? ¼Bž»N¯ÈL¯ÉL¯ÉL¯ÉL¯ÉL¯ÉL¯ÉL°ÉJ°ÉJ¯ÉJ¯ÉL°ÉL¯ÉL¯ÉL°ÉJ°ÉJ¯ÉL°ÉJ°ÉJ°ÉJ°ÉM°ÉT²ËZµÌ]¶Í_·Ï^·ÏZ³ËU±ÉQ°ÉN°ÉJ°ÉJ°ÉJ¯ÈJ°ÈJ¯ÉL¯ÉL°ÉL¯ÈL¯ÈJ¯ÈL¯ÈL°ÉJ¯ÉJ°ÉL¯ÉL¯ÈL°ÉL°ÉL°ÉL¯ÈL°ÉL¯ÉL¯ÉJ¯ÉJ¯ÈJ¯ÉJ°ÉL¯ÉL¯ÈJ°ÉJ¯ÈL°ÉL°ÈJ°ÉL°ÉL¯ÉL¯ÉJ¯ÈL¯ÈL¯ÉL¯ÈL¯ÉJ°ÉL¯ÈL¯ÉJ°ÉJ¯ÉJ°ÉJ¯ÉJ¯ÉL¯ÈL¯ÉL°ÉJ°ÉJ¯ÈL°ÉJ¯ÉL¯ÉJ¯ÉL°ÉL¯ÉJ¯ÉL°ÈL°ÉL°ÉL¯ÉJ¯ÉJ°ÉL°ÉL¯ÉL°ÉL°ÉL¯ÉL¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈL¯ÉM°ÈM°ÉL¯ÉL¯ÈJ¯ÉJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÉJ¯ÈJ¯ÈJ¯ÈL¯ÈG£ÀE¢¿I«ÅM°ÉN±ÉO±ÉP±ÊP±ÊO°ÊO±ÊM°ÉL°ÉE¦ÂA ¼J­ÆJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈN°ÉWµÌ_·Ï`·Ï`·Ï_¶Í]µÌW±ÉS­ÆS®ÆS¯ÈN¯ÈL¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉL¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÉJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ®ÈI®ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ®ÈI¯ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ¯ÈM¯ÈO°ÉP°ÊP°ÉO¯ÈN®ÈL¯ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ¯ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ®ÈJ®ÈJ®ÈJ®ÈJ¯ÈH¨ÃG¦ÂH©ÅO°ÉP±ÊP±ÊQ±ÊQ±ÊQ±ÊQ±ÊO±ÉM°ÉF§ÃE£ÀJ®ÆJ®ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ®ÈL®ÈU°É]µÌ_¶Í^µÍZ²ÊT®ÆN©ÃJ¦ÂI¦ÂN©ÄS­ÅS®ÆN®ÈI®ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ¯ÈJ®ÈJ¯ÈI¯ÈJ®ÈJ¯ÈJ®ÈJ®ÈI®ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ¯ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ®ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ¯ÈJ¯ÈJ¯ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ¯ÈJ®ÈJ®ÈJ®ÈJ®ÈI®ÆI®ÈJ®ÈI®ÈI®ÈI®ÈI®ÆI®ÆJ®ÆI®ÆI®ÈI®ÈI®ÈI­ÆI®ÈJ®ÈI®ÆI®ÆJ®ÆJ®ÈI®ÈI®ÆI®ÈI®ÆI®ÆI®ÈI®ÆI®ÈI®ÈI®ÆJ®ÆI®ÈI®ÈI®ÈI®ÆI®ÈI®ÈI®ÈI®ÈI®ÈI®ÆJ®ÈI®ÈI®ÈI®ÈI®ÈI®ÈI®ÈJ®ÈM®ÈP°ÉQ°ÉQ°ÉP¯ÈN­ÆM­ÅL­ÆL®ÈJ®ÈI®ÈI®ÆJ®ÈJ®ÈI®ÈI®ÈJ®ÈJ®ÈJ®ÈI®ÈI®ÈI®ÆI®ÈHªÅH¨ÄJªÅN¯ÉP±ÊP±ÊQ±ÉP±ÊP±ÊQ±ÊP±ÉM¯ÆE£¿H¨ÃJ®ÈI®ÈI®ÈI®ÈJ®ÆJ®ÆI®ÆI®ÈI®ÈI®ÈI®ÆI®ÈI®ÆI®ÈI®ÈJ®ÈI®ÈI®ÈJ®ÈP®ÆU®ÆV°ÈW°ÉT­ÆL§ÃE¢¾A ¼>ž»>»A ¼H¤ÀQ«ÅS®ÆL®ÈI®ÈI®ÈI®ÈJ®ÆI®ÈI®ÈI®ÈI®ÈI®ÈJ®ÆJ®ÈJ®ÈI®ÈI®ÈI®ÆI®ÈI®ÆI®ÆJ®ÈJ®ÈJ®ÆI®ÆI®ÈI®ÈI®ÈJ®ÈI®ÈI®ÆI®ÈI®ÈJ®ÆI®ÈI®ÈI®ÈJ®ÈI®ÈI®ÆJ®ÈJ®ÈI®ÈI®ÈI®ÈJ®ÆI®ÈI®ÈI®ÈI®ÈI®ÈI®ÈJ®ÈI®ÈI®ÈI®ÆI®ÈI®ÈI®ÈI®ÈJ®ÆI®ÈI®ÈI®ÈI®ÈI®ÈI®ÆJ®ÈI®ÈI®ÈI®ÈI®ÈI®ÈI®ÈI­ÆI®ÆI­ÆI®ÈI­ÈI­ÆI®ÆI­ÆI­ÆI®ÆI­ÈI­ÆI­ÆI­ÆI®ÆI®ÆI®ÆI­ÈI®ÆI®ÆI­ÆI­ÆI­ÆI®ÆI®ÆI­ÆI­ÆI­ÆI­ÆI­ÈI®ÆI­ÆI­ÈI­ÈI­ÆI®ÆI®ÆI®ÆI­ÆI­ÈI­ÆI­ÆI®ÈI­ÈI®ÆI®ÆI®ÆI­ÆI®ÆJ®ÈM®ÆO®ÆN®ÆL­ÅI©ÅG¨ÄH©ÄI©ÅL«ÅJ­ÈI­ÈI®ÆI®ÆI­ÈI­ÆI®ÆI®ÆI®ÆI­ÆI­ÆI­ÆI®ÈI­ÆI­ÆF¦ÂLªÅN­ÈP°ÉP±ÉQ±ÉP±ÉP°ÊP°ÊO°ÉI¨ÃE£¿I«ÅI­ÆI®ÆI­ÆI®ÆI®ÆI®ÆI­ÆI®ÆI­ÆI®ÈI­ÆI­ÈI­ÆI­ÆI®ÈI­ÆI­ÈI­ÆM­ÈQ«ÅM¨ÄH¤ÀH¤ÀF£¿C¢¾?¡¼? ¼? ¼> »>ž¼>ž»E¢¾P«ÅO®ÈI®ÆI­ÆI­ÆI­ÆI­ÆI®ÆI®ÆI­ÆI­ÆI­ÆI­ÆI­ÆI­ÆI­ÆI­ÆI­ÈI®ÆI®ÆI®ÆI­ÆI®ÆI®ÆI®ÆI­ÆI®ÆI®ÆI­ÆI®ÆI®ÈI­ÈI­ÆI®ÈI®ÆI®ÆI­ÆI­ÆI®ÆI­ÆI®ÆI®ÆI®ÈI­ÆI®ÆI­ÆI®ÆI®ÆI®ÆI­ÆI­ÆI®ÈI®ÈI®ÈI®ÆI­ÆI®ÆI®ÆI®ÆI­ÈI®ÈI­ÈI­ÈI­ÆI­ÆI®ÆI®ÆI®ÈI­ÆI­ÆI®ÆI­ÆI­È \ No newline at end of file diff --git a/channel/channelapp/banner/icon.ppm b/channel/channelapp/banner/icon.ppm new file mode 100644 index 0000000..ba0d476 --- /dev/null +++ b/channel/channelapp/banner/icon.ppm @@ -0,0 +1,4 @@ +P6 +48 48 +255 +bÔábÔàbÔábÔábÔábÒábÒábÒábÒábÒábÒábÔàbÒábÒàbÒábÒábÒábÔàbÒàbÒábÒàbÒàbÒábÒábÒàbÒábÒàbÒàbÒábÒàbÔábÔábÒábÒábÔàbÒábÒàbÒàbÒàbÒàdÒábÔábÔábÔáaÒàaÒàbÔábÒáaÒàbÒàaÒàaÒàaÒàaÒàbÒàaÒàaÒàaÒàbÒàbÒàaÒàbÒàaÒàbÒàbÒàaÒàaÒàaÒàaÒàdÔáeÔáaÒáaÒàbÒàaÒàaÒàbÒàaÒàaÒàbÒàaÒàaÒàbÒàbÒàaÒàaÒàbÒàfÔáhÔágÑàdÑßbÒàaÒàbÒàbÒàbÒàfÑßaÑàaÑàaÑàaÑàaÑàaÑàaÑàaÑàaÑàaÑàaÑßaÑßaÑàaÑßaÑßaÑßaÑßaÑàaÑàlÔáuÕâjÊÛeËÛbÑàaÑàaÑàaÑàaÑßaÑàaÑàaÑàaÑßaÑàaÑßaÑßaÑàaÑßdÐßgÐßfÎÝ`ÉÙ_ÉÙbÏÞaÑàaÑßaÑàaÑàeÀÒfÐß_Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`ÐßbÎÝbÄÕ[ÀÒP¸ÌT¹ÌaÉÙaÑà`ÐßaÐß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`Ðß`ÐßaÐß`ÏÞ_ÊÛ^ÉÙ\ÉØZÆØYÆ×^ÈÙaÏÞ`Ðß`ÐßaÐßE§À`ÁÒbÑàbÐßaÐß_Ðß_ÏÞ`Ïß`ÏÞ`ÏÞ`Ïß`ÏÞ`ÏÞ`ÏÞ`ÏÞ`ÏÞ`ÏÞ`Ïß`Ðß\Æ×XÄÕ^ÌÝ`ÎÝZÈØXÀÒ`ÏÞ`Ðß`ÏÞ`ÐÞ`ÐÞ`Ïß`Ïß`Ïß`Ïß`ÐÞ`ÏÞ`ÐÞ_ÌÝ\ÉÙ^ÌÜ`ÎÞ`ÎÞ^ÌÝ\ÉÙ_ËÜ`Ïß`ÏÞ`ÐÞYÃÕXµÊ×ã‚ØäsÎÝhÊÛaÏÞ_ÏÞ_ÏÞ_ÏÞ_ÎÞ_ÎÞ_ÏÞ_ÎÞ_ÎÞ_ÎÞ_ÎÞ_ÎÞ_ÏÞ\ÉÙ_ËÜeÐßeÐßbÏÞZÆ×_ÎÞ_ÏÞ_ÏÞ_ÎÞ_ÎÞ_ÎÞ_ÏÞ_ÎÞ_ÏÞ_ÏÞ_ÏÞ_ÏÞ^ÌÝ^ÊÜ`ÏÞaÏÞaÏÞaÏÞ^ËÜ^ÌÜ_ÏÞ_ÏÞ_ÏÞxÒàlÅÖ|ÑßmÆÖ_¹Îd»ÏlÈØaÎÞ_ÎÝ_ÎÝ_ÎÝ_ÎÝ^ÎÝ^ÎÝ_ÎÝ_ÎÝ_ÎÞ_ÎÝ_ÎÝ^ÌÝ^ÈØgÏÞjÐßbÊÛ\ÉÙ_ÎÞ^ÎÝ_ÎÝ_ÎÝ_ÎÝ_ÎÝ_ÎÞ_ÎÝ_ÎÝ_ÎÝ^ÎÝ_ÎÝ^ÌÝ^ËÜ`ÌÝbÏÞbÏÞ`ÌÝ^ÊÛ^ÌÝ_ÎÝ_ÎÝ_ÎÝhÀÒ_¹ÌS±Æ@¢½<ž¹@¢»X²ÈkÈÙ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ\ËÜbÌÝgÏÞ`ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ÌÝ^ËÜ_ËÜbÎÞdÎÞaÌÜ^ËÜ^ÌÝ^ÌÝ^ÌÝ^ÌÝR±ÆH®ÅI²ÆK³ÉI²ÈE«Ä=¢½X³ÈbËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÝ[ËÜ[ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜ^ËÜ_ËÜ^ËÜ\ËÜ\ËÜ\ËÜ\ËÜ\ËÜR½ÐXÆ×[ÉÙ\ÉÛ[ÉÛYÆ×P»ÏF¨Á[ÁÔ\ËÝ\ÊÜ[ÊÜ[ÊÜ\ÊÜ\ÊÜ\ÊÜ[ÊÛ[ÊÜ[ÊÜ[ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ[ÊÜ[ÊÜ\ÊÜ\ÊÜ\ÊÜ[ÊÜ[ÊÜ[ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÊÜ\ÉÛ`ËÜaËÝbÌÝaËÝ`ËÜ\ÊÜLµËV¾Ñ\ÊÜ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ\ÊÛ\ÊÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÊÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÉÛ[ÊÛ[ÉÛ\ÆØbËÜbÊÝbÊÝbÊÜbÊÜ_ÉÛN¸ÌXÄÖZÉÛZÈÛZÈÛZÈÛZÈÙZÈÛ[ÉÙ`ÊÛbÊÛaÈÙ^ÆÙ[ÈÙZÈÛZÉÙZÈÛZÈÛZÈÛZÉÙZÉÙZÈÛZÈÙZÈÛZÈÛZÈÙZÈÙZÈÙZÈÙZÈÙZÉÙZÉÛZÉÙZÉÙZÈÙZÉÙZÈÙZÈÙZÈÙZÈÙZÈÙ[ÃÕbÉÛbÊÜbÊÜbÊÜbÊÜY¿ÒR¹ÎZÈÙZÈÙYÆÙZÈÙYÈÙZÈÙZÈÙ^ÆØaÆØ_Å×YÀÔXÀÒ[ÄÖZÆÙYÈÙYÆÙZÈÙZÆÙYÆÙYÈÙZÈÙZÆÙZÆÙZÈÙYÆÙYÆÙ^ÉÛ\ÉÛYÈÙZÆÙZÆÙYÈÙZÈÙZÆÙYÈÙZÈÙYÆÙZÈÙZÈÙYÆÙT¸ÎaÅ×kËÜjÊÜhÉÛfÅ×X¹ÎVÃÕYÆÙYÆØUÆØYÆÙTÅ×VÆØZÆ×XÁÔVÀÒU¿ÒS¾ÑR½ÐU¾ÑYÄÖYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØlËÜrÈØ^ºÏ\ÄÖYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØYÆØUÁÕZÁÕlÊÛsÎÞrÎÝgÈØYÅ×XÆØXÆ×XÆ×fÆØM¿Ò¡ÙäyÁÑK¾ÑSÀÔVÃÕTÃÖSÃÖVÃÖTÀÒUÀÔXÅ×XÆØXÆØXÅØXÆ×XÆØXÆØXÆ×XÆ×XÆØYÀÒU²ÈK®ÆA¦¿N®ÆZÅ×XÆØXÆØXÆ×XÆØXÆ×XÆ×XÆØXÆØXÆØXÆ×ZÆØYÆØXÅ×YÅ×YÅ×VÅ×VÅ×VÅ×SÄ×nÊÙËßæT¯ÄÁãêµÆaÄÕZÁÔTÃÖdÈÙrÎÝTÁÔUÃÖUÀÔVÄ×VÅ×VÅ×VÅ×VÅ×VÅ×VÄ×VÅ×VÅ×XÆØRºÏR½Ð[ÆØ[ÆØN·ÌT¿ÒXÆØVÅ×VÅ×VÄ×XÅ×VÅ×VÅ×VÅ×VÅ×VÅ×mËÜgÆØ^ÁÔYÄÖUÄÖUÄÖVÄÖVÄÖMÀÔ–ÊØõõø›¹Ë³ÎÙÔáêÊÙãÁßçp¿ÏÊáêÅÕà®ÙâM¹ÎTÁÕVÄÖVÄÖUÄÖVÄÖVÄÖVÄÖVÄÖVÄÖVÄÖVÄÖTÀÒY¿ÒdÈÛbÆØU½ÐUÁÕVÄÖVÄÖVÄÖVÄÖVÄÖVÄÖVÄÖVÄÖVÄÖVÄÖZ¹ÎK®ÆK­ÆZºÏYÃÖUÃÖUÃÕUÃÖSÃÖX±ÅÃÔß#~ž¹Ùâ¬Ã=¬ÉÙâ­ÈÕ¬ÆÖs¨¾ÞæìI£ºTÄ×UÃÖUÃÕUÃÕUÃÖUÃÖUÃÕUÃÕUÃÖUÃÖUÃÖUÃÖU¿ÔdÆØbÅ×VÀÔUÃÖUÃÖUÃÕUÃÕUÃÖUÃÖUÃÕUÃÕUÃÖUÃÖUÃÕH±ÈE¯È:¨ÃE¬ÅV»ÐTÁÕTÁÕTÁÕRÁÕbÃÔÅ×á3œµ¿ãêy²ÅT¸ËÆØâ±Ê׳ÊÙ^–²Y¬@ ¹UÅ×TÁÕTÁÕUÁÕM¿ÒI¾ÒTÃÖTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕSÀÕSÁÕTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕTÁÕR¿ÒdÄÖž×â_´ÉG¯ÈTÀÔSÀÔSÀÔRÀÔU¹ÌÜçíÁÜäØâêr¬ÁU¸ÌÈ×áp¢¸Ñàç®ÒÞ…ºËH³ÉTÁÕSÀÔSÀÔM¾ÒÌÜ’ÑÞRºÎSÀÔSÀÔSÀÔSÀÔSÀÔSÀÔSÀÔSÀÔSÀÔSÀÔSÀÔSÀÔTÀÔTÀÔSÀÔTÀÔSÀÔS¿ÔSÀÔSÀÔP¾Ò~ÉØÿÿÿr§¾6¨ÃK½ÑS¿ÔR¿ÒI½ÒB·ÌP ¸^˜´CŽ«<š´K¸ÌF•¯4—²N·`š´B¬I´ÉM¾ÔGºÐI½ÑF¸ÎÀâéêìð< ¸G½ÒP¿ÒP¾ÔI»ÑN¿ÔK½ÑR¿ÔL½ÑGºÐI»ÑR¿ÔI»ÑM¾ÒR¿ÔI»ÑR¿ÔR¾ÔI»ÑP¿ÔS¿ÒP½Ñ{ÆÖÿÿÿ„±Æ}ÅÕ}ÉØL¹ÏP»Ñ~ËÛ’Ôàd¾Ð?±ÆjÄÕpÄÕsÅÖ…ËÛ_¿ÑrÆÖ}ÄÒUºÎI»ÐpÆ×–ÕáyÈØA±È»àèðòõ‚¾Î†ÎÜTºÏ[ÀÔ{ÈØX¸ÌvÆ×R¸ÌqÆ×–ÕàyÈØR¹ÎyÉÙf¿ÒX½Ñ|ÉÙV»ÏU¾Ñ}ÊÙ`½ÐM»ÑV¾ÒÆ×ÿÿÿýýþÿýþÿÿÿs¸Ê§Øãÿÿÿþúûýþþq¹ÊÃáèÿÿÿýýýÿÿÿéõ÷ûýýÿÿÿ­ÔÞu¿ÐþþÿêîóÿÿÿÌÙ¬Ôßÿÿÿúøúÿÿÿ¹Ûâ{¾Ïÿÿÿéòôòõ÷•ÁÑúþþêíóÿþÿ¡ÌÙÑäìÐâéS¨¿ÿþþ|¹ÊsÁÑÿþÿ_ž·F·ÌNºÐ}ÆÖÿÿÿŠ¯ÆV•²ÿÿÿ£ÆÔæóõ´ÊÙ?…¦ùûý§ÉÖÁÝäèîóI‰«ÜéïæíòI‰©ßìðÉÜã²ÒÝøøú|©Áæðôàêð½×áïóõ7¢»×àðô÷†¹ÊÿÿÿºÌÜ`”±ÅØâõ÷úy¨ÀãîóÔâéšÃÑðôõZ£ºýÿÿ¬ÌئÑÜâæí4Ž¬N¾ÒE·ÌuÃÔÿÿÿh¤½E¨¿ýþþ¨ÆÖïõøšÀÏ*›´ïùú«ÅÒÁÙâÒßç%­ÐéïÑÞæ%­ÐéïËÜäºÖàúúý¤ÀÒž½Ï‚¨Á¸ÑÞèíò"¬¤Öàõô÷ˆ·ÉÿÿÿF‹¨)›·×ìðõõù¡¿Ñ¡¿Ð~§¿Tœ´ùûýÁØâþÿÿßêïãîó¡½Î4ž¹P½ÒEµÌvÃÔÿÿÿq¨ÀM¬ÃÿÿÿÀÐÒãêãïô«×áÿÿÿ…­ÃÃÜäÖáè1˜³ÔìòÕàç0˜³ÕíòÉÛã¡ÆÔÿÿÿŒ¹Ê…·ÈZ ·±ÕßûúûžÌÙðûýÕßèv«ÀÿÿÿZœµ:®ÆµØâÿýýŽ¹Ê„·È\¢º9£»Ñäìÿÿÿ˜·Ëßêïÿÿÿ`š´?­ÆM¹ÐGµÌf¸ËÆÐÞU•±I«ÃÀÐÞn¡¹Y ·ÉÕàâäìž·Ê)¡žÆÕœµÉ3›´¢ÈלµÉ4š´¡Èב³Æ?’­®ÆÖãçîÜáêu¤»k§½ÆÔàãæíÌÖáP‹©[¤ºÄÎÜFŽ«C´ËN¦½±ÆÕãçîÝáês¢º-¡»»ÌÄÎÜ9…¦’¿Ï±ÀÑ5Œ«KºÏN¹ÏL·ÎE®Æ)Š«7œ¸H²É,Ž¬4—´@¬Å/®/‰©)Œ¬F±È5šµ,Œ¬H±È4˜µ,Œ¬F¯ÈF ¹Zœµ?©Ã0—´0‹«*ˆ¨1—´;¦¿*Œ¬1‹«)ˆ§7¡½C¬Å&ˆ¨;¡ºM¸ÏF²Ê/•²0‹«)ˆ¨.•³vÆ×T¨À!…§=§À9 º&ˆ¨E¬Å\¾Òb¿ÒI´ÌKµÌL¹ÏL¸ÏIµÌL¹ÏL¸ÏKµÎL¸ÏK¸ÏL¹ÐKµÎL¸ÎL¹ÏKµÌGµÎB´Ë9®ÈwÄÕ½ÒÞ.œ¹B´ÌH·ÏEµÌC´Ì@±ÊI¸ÏA³ËA³ËA²ÊE³ËEµÎA³Ë?®ÈC²ÊH·Ï@²ÊB³Ë;¯ÉºÝ惵È@²ÊL¸ÏK·ÎM¹ÐTµÌZµËP®ÆH³ËH³ËH³ËH³ËH³ËH³ËH³ËH³ËH³ËH³ËH³ËH³ËH³ËH³ËE²Ê[¸Î³Ýç´Ûä•ÅÔÏßç£ÎÛ­ÙãN®ÆŽÉÙµÙã¨ÖáU±Æ‘ÎÜ Ôà½àép»Ï‹ÊÙžÔà¾àéu¿ÐR²É¬ÙäµÜæ\³È²×â²Æ<«ÅH´ÌH³ËK³ÊG¨ÄA¦ÀA§ÃG²ÊG²ÊG²ÊG²ÊG²ÊG²ÊG²ÊG²ÊH²ÊG²ÊG²ÊH²ÊH²ÊG²Ê=¬Æ½à顺ÎA‚¤n¡¸ÞçîUŒ¬ÌÜäy³ÆF¬Z‘®Å×â’¾ÌÒä삧¿–¹ËºÑÝÊÞæ¯Æ‰¯ÆºÑݯÑݤ¾Ð‚¬ÃÊßç³ÒÝ~²Æ;©ÄH³ËG²ÊG­ÆB§ÄF¯ÉI³ÊF±ÉG±ÉG±ÉG±ÉG±ÉG±ÉG±ÉG±ÉF±ÉG±ÉG±ÉG±ÉG±ÉF±Ê<¨ÃËâé` ¸›¸q½Ï·ÌÙˆ¨³ØâºË±Õàƒ­ÄÅØã—½ÎÁÖà7¬r½Ï¹Ë×¾ÐÜC”¯[±Æ¹ÎÛÉÜä¯É؈±Æ‰¬Ä¯Ê×y¯Å:¨ÃG²ÊF±ÉF®ÆE¬ÆI²ÊK³ÊF®ÈF¯ÈF¯ÉF¯ÈF¯ÈF®ÈF¯ÈF¯ÉF¯ÉF®ÈF¯ÈF¯ÈF®ÉF¯É:§ÁµÖà·ÖàwÅ×”ÊÙ¹ÐÜ(”²µÛä­É×ÌÞçS•±ÁØâ²ÏÜÆÙâF›µ|ÅÖ»ËØ¿ÑÜS ¸j»Ï·ÌÛ®Ê׳ÎÜ` ¹C’®®ÑÞ§Ê×;§ÁE¯ÉF¯ÉF¯ÈE¬ÆH¯ÈL²ÊE­ÈE­ÈE­ÈE­ÈE®ÈE­ÈE­ÈE­ÈE­ÈE­ÈE®ÈE­ÈE­ÈE­ÈA­ÆU¤½ ¹ÊžµÉp˜±j˜²1œ¸v®ÄX‘¬‹³Æ”²Ær¡¹…©Àx´;”±_²Èn—¯rœ³?‘®X¯Æmš²9ˆ§›ºË§¿Ña˜³a¤»Š¨¾7–²F¯ÉE­ÈE®ÈC¬ÆF«ÆP²ÊC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆC¬ÆB¬ÆI­ÆM§Á/Š«w%‚¤6”±E­Æ4œ¹4›¸/—´)®1›¸,’²-’±?§Á=§Ã.–³.–³<¤¿@¨Ä/–³<§Á-•³&Œ­3›¸9¢¾*¯@§ÃC­ÆC¬ÆC¬ÆC¬ÆC¬ÆG­ÈB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆB¬ÆB£¿:º=¦Á@§Ã:¡¿=»E«ÅC­ÆC­ÈC­ÈC®ÈC¬ÆE®ÈE®ÈB¬ÆE­ÆL²ÊM±ÊF­ÈB¬ÆC­ÈB¬ÆC­ÈE®ÈC­ÈC¬ÆE®ÈC¬ÆB«ÆB«ÆB«ÆB«ÆB«ÆB«ÆA©ÅA©ÅA©ÅA©ÅA©ÅE«ÆE«ÆB©ÆA©ÆA©ÅA©ÅA©ÅA©ÅA©Æ=¢¾A¨ÄG­ÈH­ÆF­È<¡¿@§ÃA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅE«ÆU²ÊU±ÉI§ÃF¦ÁF©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©ÅA©Å@¨Å@¨Å@¨Ä@¨ÅB¨ÄF¨ÄB§Ã@¦ÁA§Ä@¨Å@¨Å@¨Ä@§Å@¨Å?¦ÁC¦ÃI¬ÆH¬ÆG©Å?£À@§Å@¨Å@¨Å@¨Å@¨Ä@¨Ä@¨ÅA¨ÅF§ÁC£¿<ž½6š¸6˜¸A¡¾C¨Å@¨Ä@¨Å@§Å@¨Ä@¨Å@¨Å@¨Å@¨Ä@¨Ä@¨Å@¨Ä@¨Å@¨Å?§Ä?§Ä?§Ä?§Ä?¤Á=¤Á=¤Á<£À=¤Á?§Ä?§Ä?§Ä?§Ä?§Ä?§Ä?¤ÁL«ÆT¯ÉH©Å?§Ã?§Ä?§Ä?§Ä?§Ä?§Ä?§Ä?§Ä@¦Ã<ž½:¡¾<£À=¤Á<¢¿9º?£À?§Ä?§Ä?§Ä?§Ä?§Ä?§Ä@§Ä@§Ä?§Ä?§Ä?§Ä?§Ä?§Ä=¦Ã=¦Ã=¦Ã?¦Á=¤Á?§Ã@§Ã?¦Ã=¤Á?¦Ã=¦Ã=¦Ã?¦Ã?¦Ã?¦Ã=¦Ã?¦ÃA§Ä=§Ã=¦Ã=¦Ã=¦Ã=¦Ã=¦Ã=¦Ã?¦Ã=§Ã=¤À;¡¿@§ÄB§ÄB§ÄA§Ä<£À;¡¾=¦Ã=¦Ã?¦Ã?¦Ã?¦Ã?¦Ã=¦Ã=¦Ã=¦Ã=¦Ã=¦Ã?¦Ã?¦Ã<¤Á=¤Á=¤Á=¤Á=£Á@¤ÁA§Ã@¤Á=¤Á=¤Á=¤Á=¤Á=¤Á=¤Á<¤Á=¤Á<¤Á<¤Á<¤Á=¤Á=¤Á<¤Á<¤Á=¤Á=¤Á<¤Á=¤Á<¤Á<¢¿A¦ÃB§ÃA§ÃA§Ã<¢¿<£À=¤Á=¤Á=¤Á<¤Á<¤Á=¤Á=¤Á=¤Á=¤Á=¤Á=¤Á=¤Á=¤Á<£À<£À<£À<£À;£À<¤À?¦Á=¤À<£À<£À<£Á<£À<£À<£À<£À<£À<£À<£À<£Á<£À<£À<£À<£À<£À<£À<£Á<£À<£À;¡¿?¢ÀE§ÄF§ÄC¦Á<¢¿<£À<£À<£À<£À<£À<£Á<£À<£À<£À<£À<£À<£À<£À<£À;¢¿;¢À;¢À;¢À;¢¿;¢¿;¢¿;¢¿;¢À;¢À;¢À;¢¿;¢¿;¢À;¢À;¢À;¢À;¢À;¢À;¢À;¢¿;¢¿;¢À;¢À;¢À;¢À;¢À;¢À;¢À;¡¿A¤ÁC¦Á?£À;¢À;¢À:¢¿;¢À;¢À;¢¿;¢¿;¢À;¢¿;¢¿;¢À;¢¿;¢À;¢¿;¢¿:¡¿:¡¿:¡¾:¡¿:¡¿: ¿:¡¿:¡¿: ¿:¡¿:¡¿:¡¿:¡¿:¡¿: ¿: ¿:¡¾:¡¿:¡¿:¡¿:¡¿: ¿:¡¿:¡¿: ¿:¡¾:¡¿:¡¿:¡¿:¡¿9¡¿9 ¾9 ¿:¡¿:¡¿:¡¿:¡¿:¡¿:¡¿:¡¿:¡¿:¡¿:¡¿9 ¿9 ¾: ¿:¡¾:¡¿9 ¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9 ¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾9ž¾7ž½9ž¾<¡¿=¡¿: ¾7ž¾9ž¾7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½7½6½@¡ÀN§ÄU«ÆS¨ÅG¡¿@ ¾9ž½6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»6œ»5œ»?ž½R§ÄS¨ÅH¢¿<—¸7”´@š¹Bž½5›º5›º5›º5›º5šº5›»5›º5›º5›º5›º5›º5›º5›º5›º5›º5šº5›º5›º5›º5›º5›º5›º5›º5›º5›º5›º5›º5›º5›»5›º5›º5›º5›º5›º5›º5›º5›º5šº5›º9œ»A›º=—¸:–·.Œ¯)ˆ¬(ˆ«*‰¬9”´ \ No newline at end of file diff --git a/channel/channelapp/banner/title b/channel/channelapp/banner/title new file mode 100644 index 0000000000000000000000000000000000000000..10d31f1b9e5fa63c57ab323972270a07b8b2b36e GIT binary patch literal 128 zcmZPwVaQ-eWl&)7V90041+tPDihyJ}P{bK1lgN+ +// Licensed under the terms of the GNU GPL, version 2 +// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + +#include +#include +#include +#include +#include +#include +#include + +#define ERROR(s) do { fprintf(stderr, s "\n"); exit(1); } while (0) + +// basic data types +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; + +void wbe16(u8 *p, u16 x) { + p[0] = x >> 8; + p[1] = x; +} + +void wbe32(u8 *p, u32 x) { + wbe16(p, x >> 16); + wbe16(p + 2, x); +} + +static int read_image(u8 *data, u32 w, u32 h, const char *name) { + FILE *fp; + u32 x, y; + u32 ww, hh; + + fp = fopen(name, "rb"); + if (!fp) + return -1; + + if (fscanf(fp, "P6 %d %d 255\n", &ww, &hh) != 2) + ERROR("bad ppm"); + if (ww != w || hh != h) + ERROR("wrong size ppm"); + + for (y = 0; y < h; y++) + for (x = 0; x < w; x++) { + u8 pix[3]; + u16 raw; + u32 x0, x1, y0, y1, off; + + x0 = x & 3; + x1 = x >> 2; + y0 = y & 3; + y1 = y >> 2; + off = x0 + 4 * y0 + 16 * x1 + 4 * w * y1; + + if (fread(pix, 3, 1, fp) != 1) + ERROR("read"); + + raw = (pix[0] & 0xf8) << 7; + raw |= (pix[1] & 0xf8) << 2; + raw |= (pix[2] & 0xf8) >> 3; + raw |= 0x8000; + + wbe16(data + 2*off, raw); + } + + fclose(fp); + return 0; +} + +int main(int argc, char **argv) { + FILE *in, *fp; + u8 header[0x72a0]; + + fp = fopen("banner.bin", "wb+"); + if (!fp) + ERROR("open banner.bin"); + + memset(header, 0, sizeof header); + + memcpy(header, "WIBN", 4); + header[9] = 2; // wtf + + in = fopen("title", "rb"); + if (!in) + ERROR("open title"); + if (fread(header + 0x20, 0x80, 1, in) != 1) + ERROR("read title"); + fclose(in); + + if(read_image(header + 0xa0, 192, 64, "banner.ppm")) + ERROR("open banner.ppm"); + + if(read_image(header + 0x60a0, 48, 48, "icon.ppm")) + ERROR("open icon.ppm"); + + if (fwrite(header, 0x72a0, 1, fp) != 1) + ERROR("write header"); + + fclose(fp); + + return 0; +} diff --git a/channel/channelapp/config.h b/channel/channelapp/config.h new file mode 100644 index 0000000..e47b7e0 --- /dev/null +++ b/channel/channelapp/config.h @@ -0,0 +1,143 @@ +#ifndef _CONFIG_H_ +#define _CONFIG_H_ + +#define CHANNEL_VERSION_DATE 201611230000llu +#define CHANNEL_VERSION_STR "1.1.3" + +//#define DEBUG_APP +//#define DEBUG_STUB + +#define ENABLE_WIDESCREEN +#define ENABLE_SCREENSHOTS +//#define ENABLE_UPDATES +//#define FORCE_LANG CONF_LANG_JAPANESE + +#ifdef DEBUG_APP +void gprintf_enable(int enable); +int gprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); +void hexdump(const void *d, int len); +void memstats(int reset); +#define CHKBUFACC(access, ptr, len) \ + do { \ + if ((access < ptr) || (access >= ptr + len)) \ + gprintf("WARNING: buffer access out of range: %s:%d\n", __FILE__, __LINE__); \ + } while (0) +#else +#define gprintf(...) +#define hexdump(...) +#define memstats(...) +#define gprintf_enable(...) +#define CHKBUFACC(...) +#endif + +#define UPDATE_URL "http://example.com/update.sxml" +#define UPDATE_PUBLIC_KEY \ + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + +#define USBGECKO_CHANNEL 1 + +#define STUB_MAGIC 0x4c4f41444b544858ull +#define STUB_ADDR_MAGIC ((u64 *) 0x80002f00) +#define STUB_ADDR_TITLE ((u64 *) 0x80002f08) + +#define BOOTMII_IOS 254 +#define TITLEID_BOOTMII (0x0000000100000000LL | BOOTMII_IOS) + +#define PREFERRED IOS_GetPreferredVersion() +#define UNCHANGED IOS_GetVersion() + +#define MY_TITLEID 0x000100014f484243ull +#define STUB_LOAD_IOS_VERSION UNCHANGED +#define APPS_IOS_VERSION PREFERRED + +#define VIEW_Z_ORIGIN -420 + +#define GFX_ORIGIN_STACK_SIZE 16 + +// peak bubbles +#define MAX_BUBBLE_COUNT 20 +// minimum bubbles +#define MIN_BUBBLE_COUNT 4 +// cycle time in minutes +#define BUBBLE_TIME_CYCLE (60*24) +// time (in minutes, inside cycle) of minimum bubbles +#define BUBBLE_MIN_TIME (60*4) +// time (in minutes) offset from BUBBLE_MIN_TIME of maximum bubbles +#define BUBBLE_MAX_OFFSET (60*12) +// bubble size +#define BUBBLE_SIZE_MIN 0.4 +#define BUBBLE_SIZE_MAX 1.0 +// bubble pop radius modifier +#define BUBBLE_POP_RADIUS 0.8 +// bubble pop generates this many bubbles +#define BUBBLE_POP_MAX 10 +#define BUBBLE_POP_MIN 5 +// bubble pop sub-bubble size +#define BUBBLE_POP_SIZE_MIN 0.2 +#define BUBBLE_POP_SIZE_MAX 0.4 +// bubble pop spread out range +#define BUBBLE_POP_SPREAD_X 40 +#define BUBBLE_POP_SPREAD_Y 30 + +#define IRAND(max) ((int) ((float) (max) * (rand () / (RAND_MAX + 1.0)))) +#define FRAND(max) ((max) * (rand () / (RAND_MAX + 1.0))) + +#define WIDGET_DISABLED_COLOR 0xFFFFFF54 + +#define DIALOG_MASK_COLOR 0x101010a0 + +#define TEX_LAYER_WIDGETS 2 +#define TEX_LAYER_DIALOGS 30 + +#define TEX_LAYER_CURSOR 80 + +#define APP_ENTRY_ICON_X 8 +#define APP_ENTRY_ICON_Y 8 +#define GRID_APP_ENTRY_ICON_X 8 +#define GRID_APP_ENTRY_ICON_Y 8 +#define APP_ENTRY_ICON_WIDTH 128 +#define APP_ENTRY_ICON_HEIGHT 48 +#define APP_ENTRY_TEXT1_X 156 +#define APP_ENTRY_TEXT1_Y 8 +#define APP_ENTRY_TEXT2_X 156 +#define APP_ENTRY_TEXT2_Y 54 + +#define MAX_ENTRIES 1024 + +#define TCP_CONNECT_TIMEOUT 5000 +#define TCP_BLOCK_SIZE (16 * 1024) +#define TCP_BLOCK_RECV_TIMEOUT 10000 +#define TCP_BLOCK_SEND_TIMEOUT 4000 + +#define WIILOAD_MIN_VERSION 0x0005 +#define ARGS_MAX_LEN 1024 + +#define LD_TCP_PORT 4299 +#define LD_THREAD_STACKSIZE (1024 * 8) +#define LD_THREAD_PRIO 48 +#define LD_TIMEOUT 3000 +#define LD_MIN_ADDR 0x80003400 +#define LD_MAX_ADDR (BASE_ADDR - 1 - ARGS_MAX_LEN) +#define LD_MAX_SIZE (LD_MAX_ADDR - LD_MIN_ADDR) +#define LD_ARGS_ADDR (LD_MAX_ADDR + 1) + +#define HTTP_THREAD_STACKSIZE (1024 * 8) +#define HTTP_THREAD_PRIO 48 +#define HTTP_TIMEOUT 30000 + +#define MANAGE_THREAD_STACKSIZE (1024 * 16) +#define MANAGE_THREAD_PRIO 48 + +#define APPENTRY_THREAD_STACKSIZE (1024 * 16) +#define APPENTRY_THREAD_PRIO 62 + +#define UPDATE_THREAD_STACKSIZE (1024 * 8) +#define UPDATE_THREAD_PRIO 58 + +#define FORCE_INLINE __attribute__((always_inline)) + +#endif + diff --git a/channel/channelapp/data/about.png b/channel/channelapp/data/about.png new file mode 100644 index 0000000000000000000000000000000000000000..86721a4aae862b14e23f1f527dfa2b4619e74203 GIT binary patch literal 6523 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 Rb*TUV002ovPDHLkV1jtXY)AkA literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/apps_grid_hover.png b/channel/channelapp/data/apps_grid_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..aafab5f64b634f198adddb5490a974e1eafefc9d GIT binary patch literal 2562 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/apps_list_hover.png b/channel/channelapp/data/apps_list_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..2dfa840b7f4fa80da0a3cd697633737bbac55770 GIT binary patch literal 2896 zcmWlbc{o&E9LH~VNolMp$ucC{Xqix`$TDMW8HNTklO<)zo@Iyv5z2UV*cHZ0l{Xb?>m>!|Ccyquav*>RE$qHhb(R1OReG>g(%`8Y6c8W4>grd|otK4Fo+bqoL=X0-GE$&ggjPAj#Z_n%1?Kdq&EY+nCi0=*A8Qy#6mV*>;TqFCbJJvCX z|IL)L2kVOimxgV5k4d`d*St}p0C~`VF%T0>M;7CHfZeAw2rd@ zChvtxK?g6^f^zSQiY)C5aaZ+&;reJeq(EA7Tv0T8;{&i#ggu?m^IephCeB7u< zoPu@IY}{M95OnM)dF6QNij(X_Q3PlDQk%Zo30W8bU^K`i23D`&CiBvD=a{x_H=h*E zbG1dSh02wSEj^0n*`ot`A^*I{L&5Nfz!fcGIZ}WBNq>?!06bq$@B6N3PuI1qdzcrP z@ZLB}-V0&`wJm(b)n}+FJy>OqA6JmD62IM6Vmrvv?=J_fz>!$k%;r@((hqOx=%Z^o z3K6d@z0>!UORSqhUqQZg*WbBMJvi@9K(#&j;5LEO$ZwY-k;lLa5#v|sJ@ST;TvGAH z>O#z#ljb}-bSMDrgwsBFkeYtcd()hUNEN;ox^=3=HV5zsI#`UtxhNM}BdXB+1mR3n<^gJ*>d#ofkktg$@0BI6tY9$QZzU+;VWy?iFH{U6nA7y@<%KFB%Y%H@K7SM z^Zt|t)2x|xw1Ya$k=b?%b65ZQ$BI|}cPF^)P4IM9B3QDgTJT=g!0%_@~VuE@8*(2e5zLPKxHrGn9uZ$sm-O?a-#g z2DTQA3*>A98pjk7ga3FS2meim5KM8}t;&d!AzdeLncNgcw+?7-STvf~Uc1+GhBor_ zMQZa6ejjU&6t(6;K_lIH#y&ECP4v&TlJ;0j`?^biv#5}O*XLTB-C6fKRhT6Kp-B2= zJ@c0dA(6Sn%;=_&N_ciZ-e{VeU zpA>96#J&Z)K-2JWoVlm?1mk9>Z-MWHWziD zljmffHmT%3DKP4Yw9_(!3aCh93r7~%Wfj6qtBVgnUC;g?BCIaAbY##I3!C)>Bd!fxXuBHB`t2usqo$us}+*)(V6|n5*NC^z7xrTfD7gd*t zox&J0tJ}S!b3uDX3u=(b{`YZ}eegOmR)xR=Jc>c!IHAoA&2QsJ;c|%BKKOOQcpNG@ zy;~qd)7S|B9xz129Nktm?&<0}$d@leuitg?_s= zquRL@paw}81ll(Yk%;!1Sne;qw_tJfZ$3@NB~H2vUh1OASUIklw!l9=i|uHpq*`F$ z)Xdf<2h;%E&j=R1;^oMJR5IN#^L13CCARFsMj9=!5^2%7A~VZ>D_=3#C73?Zwgh_h zhRf!th(Q0|*1LyJdgt<305FD!VCWK!QfAs=47r!kijTZ8nnoa=Zv;*}(|AC-nR>C=9=AcZ0=?ef}M4KgwR+4~|Z zg4=$a)UQJTZe0XkFH8(QjUkFrhRa&V+d9XSH1FlGrf!!?FOIN7x2Xx)IvH@?=vsM= z9u!_9q|jGaVilw_S)|W<)PlL@a%;O=hPb!Ej94VSv8HR5h*3PkHq&okE@iGRD5_@> z$G8J8(ytTBGX}gT3Z|kPLHDPH;1S~6--ySjTz=Gv5B&7T4vB&XZzrF}T+8iN^`|RjB`I!|0qi!U3k2@27I7I}l*9G;w z0MC8I`n$?sEk=8rCE`6nYGM1+ena9pKecxjz{^V5*qUKx^){q9Lg_CVkW;<23vJ5z z6^}!MUhMBBoDA*%x!1E;-^i?+{J9f(@J)JmGhI4{IB6W$qNJCzGASI6U7OU>>neEV zFb_t5S~|JPd364%bmO1N4C$pUpZ)~H!a*$>Q7^E2kD2;Km(op@A%G1a9D5g@TQa2N zGh*t+w(UKIaWck#sFYSrd2g0GA3*n?4FNB2Mp4Fd*CBl)@)dh)8JUW--3*go9y&TH q4PXhI59YapHu8 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/apps_next_hover.png b/channel/channelapp/data/apps_next_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..e14046d02676ea64d781e15a802ec17f2266a977 GIT binary patch literal 4941 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 LNkvXXu0mjf%sO-) literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/apps_previous.png b/channel/channelapp/data/apps_previous.png new file mode 100644 index 0000000000000000000000000000000000000000..c75c53ffe1a0b0f190ef415732620882397bc01b GIT binary patch literal 3627 zcmV+`4%G39P)^UcAPkNE>0ZR zY0}G<0xc!oE^H~4+OpcV5=B6fwt`hrE0B;_9zY8Z(4sD+Lc4G51LB3Zt`seZ7eJy_ zyG2Xss<)-9wkf?3x=nMxI&qvju@l?-eZzmybUL=jiKBMKNJnFjXU_S*@4uY?{AcXQ zWHQ>%`EY7K^W$evfNQ=7a5x-QIQ;^x32h--2(1>a60KZrn?xH&8$laD>p|;6`!8HH z`hQ0NKoejy+Ny?zhRy5OulF@KH+%2B_uleFixzq6>+4HvYHHl&<>e(h`pL=E=;-M5 z;NW1gv$Het{rBHbUbt`}e&WQ53G{Uow_HTK05V33E^9G^AcS3p(<4ikEcyMmZQH6g zY}in>diCncy1F_KKx#K{-qd2Tm^Lvnp?{v9p4OjpyWLtvMTO?``82=ZuYU$P+VJpj z;{5sZ(=dl`st?wn>K9~3|%fAFoBZ*Sce8H(H1UTs5gG^>+6djJ9aGc`RAWUPMtb+ z0FQkG*?aCN0RYa^=9Mc~{_)vopABx_ytxh_$_V({wQJh->({k`fdL&fwQYAS_DicE z8KF=}Te@_qwrtrloeYpSb@b@b;ZHvKWa!eROMk`fN9TlLwhxQex9#4&d)M~u+v_2m zAO5RdxpGAZKQc0+B@&6-KnrPE53Bn<9*kYirZG zySsJ2PN&ni0JZ|2jSMSU)HQW>I-PpFXl!iM9(?dYZSms8w7SU0AAj6?=FFKt4?QtIC#vhUfkV@KnH1q=M`?d{sdix(NK^?+st+6=Z(7cg6bIx}!$cF|U?TBR*t zzFh0??~i@@>8IV8G5&&EzRK7H<|+XEV~;-i=$@yZda4P*$#?GDIo;pK#>Rfqx?R(r zjRlwqU{Ga%rMq!f0SSJ}21V>SdGcfmV|;Cg1eaZ(htKWVvSmvn=4zkv_wn&@9lRNk z5u_DhyH;lf-uRhThxnsgVKSLykn~YT$h8MDj$_=j`NneD0N(_2Z`rtUV*?_w|A!xb z(5_y+dJA|3G8=Fugxx@B*9{a2v_e`VuVIGpQ&!AEEpUrJV9c&uB;;ER@%L>=aKf02 z1DxLpo&$1Vc1#ki&g!$(_k1na^Hyg?0%fC&l$A15_Iwy!dHjCMLk~Ul{E8JTIMwN9 z&ulK0N?B^&cs5$mToRRR)?j4`l#McSrl8DSU0u(gJ$tqTG91Yk4_vuSA5r#It=IVd}(=~ppJU4|T;Rvfr;nEobo5(Ei; zY9IcjM_e=TxlVhe9x1y!<5+DLEN5I>OJiLyqvO`WaifJ=& zI~m_xGQmO!;6Yg_Gm|A^AQlA0Gmzn`xnE}%?XRn>tPEhrE2Cf00%-bn0vO{%w(G`* zT%zQ~7hm*aj1u#2x%#jpgPI;GJ24OoF8$U;IC`EUT+ohZ7(~CMx***c1+$* zn!A4e`tmp5d=pBkbY8xEIgO0YQAj3fCqYtY$}YtfFELF`O|8M@!@MOM0knu!yqW89 zcA&Jcf?uJ)4atxL3#f{hUw+w7Lg}ZXNr#$N3yB5!h+tC+Bo<%F*C5=cs#C`+K7qRfad_@ z98&kWOy++N%*6-4@o+lf!{+5}p=KWrhg~f#E!8Vmu5_!)kUGQyGRno~I!#)ACI%{# zn1~HB+=I)*$_>l}ECEwq3Puwp3C6`vKH$b{6yV{9A1>RsZ(mg)5O8wsU<7K+Cvv&K zTvv^1wMZPqMvN@1S`ok!bpzNcr$97Qv-#UKdk(x~$Bv5EUVF`tfgNh$bW5;7bjHHP z`Qe8jR%6TzzvntiN=mfe-rh7^X%u5-?79QTB^F{LHewX4X)6NiF_6bN#T07xVA%oS zl_0>Ys=rnmQ++R9yx2u>b`Cs~feSftf2t67P}3%{5u;$8HWNSI~CPPC&}S>>gs3j(qh6GZ89@gO!yMqcQ(66W~MVZr;pbl`jAq zkLKoP&wKB^S49$-fl=6EAIdUw1x+g}P*`9AZeq+u02wM#ev_+^VJvn$`Q($jzhk;{ zupB;@sBVVrMg(0rR@iYDIvZMU#d6&TN@r5}i|h zE-RL^Mf@+n{4#On%9WD0-g>JHD=^1=6OhlstVm&?6>P~|tHC%rpDwU`l>sp`?d|Q8 zufP6!{PgM5X{*&;v6@}EtjcV}MvS=@LowWx#LeX@pSHQKPb0!kBl2h7dFP$<3opD- z{>(Ga%*)ohRTVm)_6-RawI9ny0Bt^kDI>w8M6qVoQ8wA|`!t?QfArBu>CVp1@|RwE zsg&DUxu&&_j*g72`n}8Lz``bF6`$<-Kd}*`u`*;PU=TM=QfTu)HjA6QftwPELx&D! zy1Kg3m>oQ!P{>kc{r&x!x8Hs{jzw46PBMgk*>}dy;>jp06-xPujTnstI86lfVa|*j z^YlVX+RWC3gk)P=TYT@{y>Xn=SqdFgeiGoBG39N%7cE^#X&WH;oFXE4s0~al zf!PELDM)0C3rxhYBFlX6!3XIZH*R=$?b_v5=04kcK%v|DbOB%*CpL)zscZx=NL&L` zQLLSVd{Aj>4i#QL%mhC3#TQ>>dU|@wUU}sePjz**!)QgtIIQF(1`>`%8Q(U$CKyvz zE|8HQFF|9xIj%HSh{Z_&zC5G2~ei!_ZI})%q>%-g>am5 zu0r!C(1y9sCLI+up_8aSZM9uh4DC~9%1#W#LQH}!ohud2$YO!7t)7j?#1Up3P?h4l@u1&R^N^LM-w)YO5rbe!*xDVI zU`Q)q)N87An;xcy5I;*@4V`QvMziEU7}?4@ir@jG|oz zn+MV1c97uq<4`X;-z}Cv&8ru#;Q}$tFujzSvI~Y}wqWbZmQjfn#D&2#$fW$}d}~cj zO%o!lk0j6%?lcL?>;?S9=;&xSWToGq5!vI}w4ciYeya3H0ihr5IIO^p0e=$+1RBA( zUy(3hMNqrZp5PhrBauiqWc(*(6`5l)?`QSZd{rCe3S)BbH{;{u>~B+DU0nl+2#^HU z|E<;x^Xc;h&mt_r!`vgo!^6F?SnQa9?-iMo`SOgsugXdS#QBf=YIWL=e|=et!5<5S zLSdu{3t(~%wd-pqZJy0mxN&hqt@C|hv`jP_?H?Ez=z|iz7PIGHZHDuizHI_zV26;v zy|r4|U*leTb2uDcU0YkrEj2$$;52EqewfQULJBwo9p`w0hsDK4Mn(qv`ufgGntM?+ z&%f17s@g$bYz4k7?GzHK(H5XJqWv0X_)Azr5CM`FQbw1cHIN9SYvg)Q*c5Bm0Euchp zd{O|*(peJjlYnVYBBE2{6Sy`YL9J8!@&AOw;^$+M;U(?*dr=86Sp$J^1Auub{}5Rv zgj5S5A-Tri>Bw%eAg9IhcuE#7QPJ|SfE|--ieF4nvG^3t*2BQ!3XLcq0ME@_15OLfW+QaY<5(C-Zz| xZw4|{tSB*nc4nzY8Cy!#5Q`1kc>GU*0RVwPd-O$a9M%8;002ovPDHLkV1f&d+R*?2 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/apps_previous_hover.png b/channel/channelapp/data/apps_previous_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..855dd49dfecf54e2f1f622f70d20da46571e07fd GIT binary patch literal 4942 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 M07*qoM6N<$f=)1D6aWAK literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/background.png b/channel/channelapp/data/background.png new file mode 100644 index 0000000000000000000000000000000000000000..48c1c39d76829cd108a45656f7057e1cfe5663c0 GIT binary patch literal 124631 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Ǧt&@TUzC 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 z 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/background_wide.png b/channel/channelapp/data/background_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..9be9f4adbb2a86afa93ad57aa0332b5e93fdd1c1 GIT binary patch literal 152245 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

S-RWpMucu*%@&Rq#Vs@a70B^k76L9IciP? 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/bubble1.png b/channel/channelapp/data/bubble1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ddb5d2aa223a94418d47c0bee4cf8e4d083be65 GIT binary patch literal 5004 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/button.png b/channel/channelapp/data/button.png new file mode 100644 index 0000000000000000000000000000000000000000..1183c5a5ee336771652192b99e97b86ad0986662 GIT binary patch literal 1635 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 B-ogL? literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/button_small_focus.png b/channel/channelapp/data/button_small_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..817483882ce82846955baae3dddfcf5b37a5d547 GIT binary patch literal 2328 zcmV+z3Fr2SP);T)1-KhH@Z(01`w3!2tvk902hq3L+pt zfb+6N636jlz4q?TbW=6mGt)CWYcB}0-hG&7!&^lklkZDt~>I~ zb1#e>JoNaMN>7isu+)GmM!gw;LSr9Udm#jW>a4;l>V%?JDzUBhls)M0tw0|}qh1e= zzV+thk;AV|jQ{cbGkD35od9y}=-Bq7&%OB4*gf~%zp1*|fQjijn3}J_LcIx1U&U}B z9ce)9IU~dB3JeJqX+RuE$|VVXJ!KdkSPLWT2cdsW1wQ`h!*hpUeP#U2_@4*ylC$nT zz0B{RUahANJ^lOxcij8HmZ{kV_;vCEOis^3wcY?fFmUJyh7bs0i4f2}nFtP!{~_9e zB4T2+0}4gc5AYv-11?n;F>0WchRvhf`U8;q*cYEpTTi0%0HM1c*tP%8m+yM)$sIyU zd3JghW~xizE1g_o!O-@P)B<8i=soS;oyEG0*&}It+J4!icCOI|mOv?3!iuQYXoM}f zcW7h(UuRB@o}V~<-1Q@+3?TbQcJ3KkXa=61slrTc2?A|=1_FZ@C=g1<$wS*8($Q}h z3D*n>t7~OeTw-Z+YO{w4WsV3)fX5lkBxtIkhHakO{)w+Y+mAo-b#yBi5IVnc5d>+1;0VuE>^+1fB}yWY8kJ`!!s?0xamp*5f&*MglsN_%^NUMZdig+Y zAIxwDvCzl^WMp9d@Y*^8LbVw|5;7q1s1XhcX)vq@5yAn2xnLE;soVe8SvXAga3QJd zW(WwieK5ltZ2?&$%jHs|>4)h@hmBvOeUaf&XzgSVX-le17GXkI-6ljQrB>oYR04`J z=gNW-ppOX9ynER8i2;|3Qnp7+1uD!OG}aN8R5Ch82q>e-D1)d3j@<4m28Gqd5(|

e3DGy?ux!@9uRUl4ul14Hf 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/button_tiny_focus.png b/channel/channelapp/data/button_tiny_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..b0025fc9a728cebe0c4b2ba56b9cab753d3729a7 GIT binary patch literal 2253 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/content_arrow_up.png b/channel/channelapp/data/content_arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..37b673dd2f389f309392a2e537fec82ec0e276e2 GIT binary patch literal 369 zcmV-%0gnEOP)vw{QP1U%tEo$mgV|1DMyXTbJSFBpJP!L6>YJ~=TlQ4&2p5cCnY1cp^1BO}|i zY12BSrKR(K{`~m|s1L3eDEFU(gM;vAFl*2004YemZqq)ME_hK zt~1W%Md||p*9R-p>yG!B>xDRsyRXPl{DC5FBAs$`6+^&1>nm~A4K}=!XzDvhEn_sm zsxKf#s`#B9MG6w(D|gCDs>{o=tpW;f3+C@6t4JdC2=v3mxN#NUa{LODq=?Nr**=u* zz%ncGW7Z_~B>^#f(eC1G!RIhqSW(u=%-!ErOwTEKTFU?&L`#4NcmkXU3WaKpbimVW8TXd8X96S7}ivi50sD38^%Rd-c)YnXiR`7 z#8MyJL+neJfHYach@+TmgynJBrlQa3ZzKeWy+sZ{(Z-vGn>w2sXmD*+ zm4)v_j)ptRJP3oa+uPgwc3zR#0%nZ@j^M7P<*~azPTArhC=^;f~!DvU0r!wn^^I?+~{%&CH?d?E?vr?F9E_$ zJA|mIs#Z5N5WJ2v$rgTn`3#Qni3t-Mo3VO5Nl8g84yOQv(u}|rV;AFo_cQ+&L<5ZO z^Z@V&GdFUF=6he%2QEp8QlqG$EF_Ed$$Iutr^w}7DaQY)uvF36uqyC|se5*2pM60h zk$AY0)@HlOF6t4|o93ZwM^3<3b;S~EI-o|xd{RZ}Qu|NY{-@p} zvq6L0m0$lRc$v)UW~pr(-_Rrg3sioV^u*oWqf1bPwuA;2kl5rM=d^QjG7Ag4(%;{o zSD6n#URY2t=9>8mi)SD2aU@+&?3Iz!!^?~Cjz!tY3&~1nypz5PO$yd8*vk6}Sni0^ zgmkc&d>mT>2D5Zhv-Qv3-;Z#nco@{h9&ImhfI;E0(ZzH^AwmWb5Kss0yVA^C($Ii& zt2qqc%U_>v^A9{YVIQ(jA9u$r(F!yF^!qnAdTVY#OTa}&W!R%i3^=L?PXAH-GLaiy zryV)`QvJvnsOOX^@hj@804YCxwd4HE1VtO-d`d*~0*%>eApQ3Udb4Xsj3&<;fc}D$ zh*eXhUoGkCBKP+87NnH47s3UU5ARlERcG0WK3>Z(zvuJqL7x!0Kh5+FpX`K*hVqa&^pB7HzYC{c!cRL!%{b;P z>}SsB3^X}-YX>Q$2&~zf^`Ul&0-)DM+nn7-(GRis#C{*sc|TR_(U!FkFEZ)viBILg zWPiDJ=hfYwLn-cqSeD1gErYNfu$NMdZ0gC5BnW&E5jM@vU@-zUjXn>Rg&xcZE8yaU z^*kq0gBf#+g|7==eb~v{+2;vPL#=e7AV4Gd9^8d1n0|r$EqXcRYMzJNMtRvN;o}0> zlYU8^9CQlvHBnny&n&IOMw;_QHJ4v9W3EczH!9D`H<%({pKKSiUEjFYa1&UX@;CnNW>?_8ZhxWEF}& zGgae)ziE&S<=lWU;QagVLm6&J6+P*;bN6Qltx7_$o454MXA)zRx}@fZ5)hqRH=`8` zD*LI^)ODZuqBAwWY-xCh%N21FYYyR;ZTgBT3hL$?J}cT@P-)h!(IW% zlM)c*PucpYu0Z+{SM=@T=HpiJPnrJ^geBQz3}*DG&c!P$P3}IL?n|{N4vN;be`V@w zdyW|12%&A!{oy+!xy6QKdcelmclRhXJ==>FUu$w_YF55O;6?D1rywGgxioWR*wnITOnCg{Zf0zvFi1poj5 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/cursor_drag_shade.png b/channel/channelapp/data/cursor_drag_shade.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8af2950096c3ba2ecb7143820e91d360cccb41 GIT binary patch literal 670 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 Y991y=OgNPMS>PCswyx+`*1>oG0|<>pVgLXD literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/cursor_shade.png b/channel/channelapp/data/cursor_shade.png new file mode 100644 index 0000000000000000000000000000000000000000..6be965182068bfcdd207f287ffeec8a63a64a9d1 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V6ygfaSW-r_4ZDF_GJf#hL7r- zUv2R@TDq(A0k@#wv+w_v9t8*lip2blzJ74a?Oo#K%&E)XxxUwXX?y;3=^DlTPxW@T zn0)>zqkVnWZU+WNA4*WeJ(Cx&+Dv^ne@K2{SHLfEY`$+}ZNi+S>Y%+>mb`p*J4lRy zr(yYlu+z_fAIN^NgrA{SrfHtejh{!9A8#ynnDy?6?4SK*4beM{V>RZa!n0!2m)LQyG{as1>YzExmJ9Z-eilMR!~nSJQ^ll{jzVS0=9>R9=vbw>)T+lyAuetqDug?~sXi%CoM zetwPpTlPdgZoMJ)aAo^cyV&W z$4h4m%B8R5d%#fru;hSIB6YDB&gOeX* z@3TbIn0+yPcwhcG+l$A)o1_jM-gNuGRaHLg|L!4YB|L literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/dialog_background.png b/channel/channelapp/data/dialog_background.png new file mode 100644 index 0000000000000000000000000000000000000000..23a6cfb6497e9589cfa83028b1ef9a2fc9c090be GIT binary patch literal 7051 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 KZwcdA?Ee9WX$Oq} literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/dlg_confirm.png b/channel/channelapp/data/dlg_confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c516005379c0d952a0af35f1d20e096f1fd171 GIT binary patch literal 2581 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 O0000kecUg9E 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/droidbold.ttf b/channel/channelapp/data/droidbold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d065b64eb1863f83c2c982264f9442f2313a44a9 GIT binary patch literal 194488 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 z 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 S{TRCwC#S4m4GSrE?5%G#^6)Uw?h zv=u?oazs(w@Gb}<=t;zr2XBJEz@y;Bt03Y@L0mw*xZ#GPh|5WIlyP5LEw%O~bH2#Q zlI)^dOUI@UGYCcz4F-cr ztJUh%YPCj%!O9!JBQc2K_xpWbuh-*pxg2L_XV0~@wSh?Xl)Phq_y_~Av$JDLOiWBL z8jZ1Vs)hrG1WuT6^3q;_V>B8K!}C1p`JGPZF(~xa930euI7tZ!2^JV-A0HoIbOAsFLI0^`upZ7|N+>oqmH}At?(WVG zLSMJGw))6Cgf<9DpL~QeC3LibOHNMy0*c<(A_!@}m>1iJ_bPp%`p`jrM%F?GutqNtQX=!OO0i2t3qj4VX5h%fGWnNG{ z2Rb`DrC#6L+bhWHybQ`K>oEW7I*!BzlF7+QBkDZ~Q5$Fh*>G)bZC%&b*E<#GE`Bxu zX$%Yu#GtmbC=;R1NS%)&UteE8YHMqIdhgJD0~i)Pf|I!-etHJb zjs;vueoB2L!Hb73D&bc>%SAj!1LNc4cJzKR+&SKj;>5&+ophp&{v%aDJ-|>=Q4wEP zR~L)7qjZFbJTNsi^|-padQVju-upkb3}xQv>86w~Dn`C=h#2nI8qj9}2xUU0I6^^= lI;!&fDS-dvf5X287yx_+?9Z|A$-4jm002ovPDHLkV1m>XYc&7> literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/icon_network_active.png b/channel/channelapp/data/icon_network_active.png new file mode 100644 index 0000000000000000000000000000000000000000..3a985ad44ccd26dddc234f460f4030afde1098eb GIT binary patch literal 1473 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/icon_usbgecko_active.png b/channel/channelapp/data/icon_usbgecko_active.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ea0bf070bc47dc997dd293255423aeb5f43206 GIT binary patch literal 1615 zcmV-V2C(^wP)!F$4qGv0V6m0xtDX#J?A^$|NY-NLu)h|YCkWA+UINE0r0dBG)=$v z$w~URV}Q=j&zDS3PggE3E;f{xmwS@7_n88olao^v?w=u!dU|>m=jP^q@Ge1Y2S8+E zV)D5{p`ezQmMD=(^kHOV&qxK}W51mN%QFA$0kA@}IA?BdP7Dw~uB@z_Y;A2d*$o?S0>ISO)h(eq^bQ|BELN-48XhitdwYkjt}X=_ zu$9SV7HB7T*X!4>=i(cFOG^v;;>8PQR{&B{QWy+wgZv7rtE;VRYinmgaSLb{Km$s= zn@8!;NC^eXOEK9108j%10}FV!n2?a*07h;a85w=0TjFmEfQHy4hK7buPoF-0)6LE8 z>G|{LCB?} zAAy}?-QC@#MMXsiw@ZsI0LIzb*&Dg+!=Ps|sWZS>Vnwqo%Tfp)SeTxioLmIuhE`Tq zp8||Qb8~ao@bGXm05ze%k3b;sv9Ym9?CtI4-Me>Bw4Km(X%Zbje*6cl)DddeSvdw}0En`)vlAjUe?~<`omgF6CDc!)r>FmX?b)5B;KGFqz77r! zRuvT$BWY=A$H0IAfc0l(WmR0fcrgmqVMV@$NH@lSIAvF_Uj6pr!-v1)-(|!wVxG+P zHUJ1+=BG}b3LYID754Y{kCLrL5Y2XGEF9(BoYZp z%M2={vZ|^|?e6aG40gn3W@dbdmIWXdRUrhE`Uo0&8pei}@9XRP3(4r40MI(BRqIek zTrMCxJ3B8VB;@FZVnreflTi@o6vQ}+36!V~7US^{3@T}3Y)nq0V))p|98sQyfq{Wn z@cH^y0JgMcge~F(D&QPId;)EVp>~?1oxw!Z!omV!hT?>)B<_jwW#J9W^Yil)9v&VC zQMQSxsi~#tqS^@nic5tJ!UN%s6}f|Iv*_q(A1^PjL!<*dq!;$xJ~%k|N-CAgpaTZ! zv5Sa^@P{{8pfqQ|QafDqEV?g|xp_O-HwbM+mOrXm&QSSWEvV*+3|XF??hV1O)mc6PS4v$M0E0DvB3XshOe zlwl(mHAuy?`}gmcfDjhXMCgLO9!iNo*FnAf<;$03f)$({K7R7#Nqk;j9?7X3p+Kx@ z8Ea~4s)iJ#ocpr>XT>|c1eY&g{vP5B#vVbV8kDH{m?KAy1SKUUh1|MzYf7hzWH6~$ z0IGmc7j=zkF93v(9zCi+CCG3%iNxRxR@sdl|A7Mxan)&^iPSj6F#7uX2H4&!wPm>1 z-vtWnc8#W{rYfjgJ~cHpi*jTO3JS{F+uNm^>{ky?_$4Y+QC3z~sTJT}86ct?ef;=w zF>>F9mFr{I97J0$m-p8IU|NQ7L~k5$N&vKv+b90B8}0@K@di^aSkAs@5UZQ|nIW9G z=YGW8PMvVe?R=AcYc^TiS2?PID9LWFx N002ovPDHLkV1lU7;I#k% literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/logo.png b/channel/channelapp/data/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8c552bf01798e9619737107e47603cbaeaf9d64e GIT binary patch literal 10078 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 E0WtDHNB{r; literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/progress.png b/channel/channelapp/data/progress.png new file mode 100644 index 0000000000000000000000000000000000000000..cdce07aaf1b585fcb3e2dbdbca8c9772107a8d6d GIT binary patch literal 3524 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 literal 0 HcmV?d00001 diff --git a/channel/channelapp/data/throbber.png b/channel/channelapp/data/throbber.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe286db1797cdc8ccd70876c78f760fd98287ec GIT binary patch literal 2878 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 translation by " +msgstr "Nederlandse vertaling door bLAStY en ChronoX" + +#: source/dialogs.c:115 +msgid "Theme:" +msgstr "Thema:" + +#: source/dialogs.c:125 +#, c-format +msgid "Version: %s" +msgstr "Versie: %s" + +#: source/dialogs.c:126 +#, c-format +msgid "Author: %s" +msgstr "Auteur: %s" + +#: source/loader.c:716 +msgid "Error while reading the application from the SD card" +msgstr "" +"Er is een fout opgetreden tijdens het lezen van de applicatie van de SD kaart" + +#: source/loader.c:717 +msgid "Error while receiving the application" +msgstr "Er is een fout opgetreden tijdens het ontvangen van de applicatie" + +#: source/loader.c:718 +msgid "Error uncompressing the received data" +msgstr "Error tijdens het uitpakken van de ontvangen data" + +#: source/loader.c:719 +msgid "This is not a valid Wii application" +msgstr "Dit is geen geldige Wii applicatie" + +#: source/loader.c:720 +msgid "This is not a usable ZIP file" +msgstr "Dit is geen bruikbaar ZIP bestand" + +#: source/loader.c:721 +msgid "Not enough memory" +msgstr "Niet genoeg geheugen" + +#: source/loader.c:763 +#, c-format +msgid "Loading %s" +msgstr "Bezig met laden van %s" + +#: source/loader.c:772 +#, c-format +msgid "Receiving over USBGecko" +msgstr "Ontvangen via USBGecko" + +#: source/loader.c:782 +#, c-format +msgid "Receiving from %s" +msgstr "Laden via %s" + +#: source/loader.c:968 +#, c-format +msgid "" +"Extract the received ZIP file?\n" +"%s of free space are required." +msgstr "" +"Pak het ontvangen ZIP bestand uit?\n" +"%s aan vrije ruimte is vereist." + +#: source/loader.c:969 +#, c-format +msgid "WARNING: Files in '%s' will be overwritten" +msgstr "WAARSCHUWING: Bestanden in '%s' zullen worden overschreven" + +#: source/loader.c:970 +msgid "Error while extracting the ZIP file" +msgstr "Er is een fout opgetreden tijdens het uitpakken van de ZIP filee" + +#: source/main.c:250 +msgid "Do you really want to delete this application?" +msgstr "Wil je echt deze applicatie verwijderen?" + +#: source/main.c:251 +#, c-format +msgid "Error deleting '%s'" +msgstr "Kon '%s' niet verwijderen" + +#: source/manage.c:518 +msgid "Extracting" +msgstr "Uitpakken" + +#: source/m_main.c:80 +msgid "Network not initialized" +msgstr "Netwerk niet geïnitialiseerd" + +#: source/m_main.c:81 +#, c-format +msgid "Your Wii's IP is %u.%u.%u.%u" +msgstr "IP adres: %u.%u.%u.%u" + +#: source/m_main.c:97 +msgid "About" +msgstr "Info" + +#: source/m_main.c:102 +msgid "Launch BootMii" +msgstr "BootMii starten" + +#: source/m_main.c:106 +msgid "Exit to System Menu" +msgstr "Terug naar System Menu" + +#: source/m_main.c:109 +msgid "Shutdown" +msgstr "Afsluiten" + +#: source/update.c:232 +#, c-format +msgid "" +"An update to the Homebrew Channel (version %s, replacing the installed " +"version %s) is available for installation, do you want to update now?\n" +"\n" +"Release notes:\n" +"\n" +"%s" +msgstr "" +"Een update voor het Homebrew Kanaal (%s zal de huidige %s vervangen) is " +"beschikbaar, wil je nu updaten?\n" +"\n" +"Release notes:\n" +"\n" +"%s" + +#: source/update.c:262 +#, c-format +msgid "Downloading Update (%u kB)" +msgstr "Update wordt gedownload (%u kB)" + +#: source/update.c:304 +msgid "Download failed" +msgstr "Downloaden mislukt" + +#: source/widgets.c:16 +msgid "" +msgstr "" + +#~ msgid "Version: " +#~ msgstr "Versie: " + +#~ msgid "Coder: " +#~ msgstr "Auteur: " + +#~ msgid "Deleting" +#~ msgstr "Verijwderen" diff --git a/channel/channelapp/i18n/french.po b/channel/channelapp/i18n/french.po new file mode 100644 index 0000000..3f1ed46 --- /dev/null +++ b/channel/channelapp/i18n/french.po @@ -0,0 +1,261 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-22 21:29+0900\n" +"PO-Revision-Date: 2008-05-23 08:52+0100\n" +"Last-Translator: Bruno C. \n" +"Language-Team: LANGUAGE\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/dialogs.c:53 +msgid "no description available" +msgstr "aucune description disponible" + +# This and the following strings are dialog box "title bars" +#: source/dialogs.c:55 +msgid "Information" +msgstr "Information" + +#: source/dialogs.c:56 +msgid "Confirmation" +msgstr "Confirmation" + +#: source/dialogs.c:57 +msgid "Warning" +msgstr "Avertissement" + +#: source/dialogs.c:58 +msgid "Error" +msgstr "Erreur" + +# button text +#: source/dialogs.c:59 +msgid "Ok" +msgstr "Ok" + +# button text +#: source/dialogs.c:60 +msgid "Cancel" +msgstr "Annuler" + +# button text +#: source/dialogs.c:61 +msgid "Yes" +msgstr "Oui" + +# button text +#: source/dialogs.c:62 +msgid "No" +msgstr "Non" + +#: source/dialogs.c:63 +msgid "Delete" +msgstr "Supprimer" + +# button text +#: source/dialogs.c:64 +msgid "Load" +msgstr "Charger" + +# button text +#: source/dialogs.c:65 source/m_main.c:95 +msgid "Back" +msgstr "Retour" + +#: source/dialogs.c:66 +msgid "Options" +msgstr "Options" + +#: source/dialogs.c:67 +msgid "Device:" +msgstr "Dispositif:" + +#: source/dialogs.c:68 +msgid "Internal SD Slot" +msgstr "Lecteur de carte SD" + +#: source/dialogs.c:69 +msgid "USB device" +msgstr "Dispositif USB" + +#: source/dialogs.c:70 +msgid "SDGecko Slot A" +msgstr "Lecteur SDGecko A" + +#: source/dialogs.c:71 +msgid "SDGecko Slot B" +msgstr "Lecteur SDGecko B" + +#: source/dialogs.c:72 +msgid "Sort applications by:" +msgstr "Trier les applications par:" + +#: source/dialogs.c:73 +msgid "Name" +msgstr "Nom" + +#: source/dialogs.c:74 +msgid "Date" +msgstr "Date" + +#: source/dialogs.c:110 +msgid " translation by " +msgstr "Traduction française par Chandler et Strangerke" + +#: source/dialogs.c:115 +msgid "Theme:" +msgstr "Thème:" + +#: source/dialogs.c:125 +#, c-format +msgid "Version: %s" +msgstr "Version : %s" + +#: source/dialogs.c:126 +#, c-format +msgid "Author: %s" +msgstr "Auteur : %s" + +#: source/loader.c:716 +msgid "Error while reading the application from the SD card" +msgstr "Erreur de lecture de l'application à partir de la carte SD" + +#: source/loader.c:717 +msgid "Error while receiving the application" +msgstr "Erreur lors de la réception de l'application" + +#: source/loader.c:718 +msgid "Error uncompressing the received data" +msgstr "Erreur de décompression des données reçues" + +#: source/loader.c:719 +msgid "This is not a valid Wii application" +msgstr "Application Wii non valide" + +#: source/loader.c:720 +msgid "This is not a usable ZIP file" +msgstr "Ce fichier ZIP est inutilisable" + +#: source/loader.c:721 +msgid "Not enough memory" +msgstr "Mémoire insuffisante" + +#: source/loader.c:763 +#, c-format +msgid "Loading %s" +msgstr "Chargement de %s" + +#: source/loader.c:772 +#, c-format +msgid "Receiving over USBGecko" +msgstr "Réception sur USBGecko" + +#: source/loader.c:782 +#, c-format +msgid "Receiving from %s" +msgstr "Réception à partir de %s" + +#: source/loader.c:968 +#, c-format +msgid "" +"Extract the received ZIP file?\n" +"%s of free space are required." +msgstr "" +"Decompression du fichier ZIP reçu?\n" +"Un espace libre de %s est nécessaire." + +#: source/loader.c:969 +#, c-format +msgid "WARNING: Files in '%s' will be overwritten" +msgstr "ATTENTION: Les fichiers dans '%s' seront écrasés" + +#: source/loader.c:970 +msgid "Error while extracting the ZIP file" +msgstr "Erreur de décompression du fichier ZIP" + +#: source/main.c:250 +msgid "Do you really want to delete this application?" +msgstr "Voulez-vous vraiment supprimer cette application?" + +#: source/main.c:251 +#, c-format +msgid "Error deleting '%s'" +msgstr "Errur lors de la suppression de '%s'" + +#: source/manage.c:518 +msgid "Extracting" +msgstr "Extraction en cours" + +#: source/m_main.c:80 +msgid "Network not initialized" +msgstr "Réseau non initialisé" + +#: source/m_main.c:81 +#, c-format +msgid "Your Wii's IP is %u.%u.%u.%u" +msgstr "L'IP de votre Wii est %u.%u.%u.%u" + +# button text +#: source/m_main.c:97 +msgid "About" +msgstr "À propos de" + +#: source/m_main.c:102 +msgid "Launch BootMii" +msgstr "Lancer BootMii" + +#: source/m_main.c:106 +msgid "Exit to System Menu" +msgstr "Retour au menu système" + +#: source/m_main.c:109 +msgid "Shutdown" +msgstr "Arrêt" + +#: source/update.c:232 +#, c-format +msgid "" +"An update to the Homebrew Channel (version %s, replacing the installed " +"version %s) is available for installation, do you want to update now?\n" +"\n" +"Release notes:\n" +"\n" +"%s" +msgstr "" +"Une mise à jour de la chaine Homebrew (version %s, remplaçant la version " +"installée %s) est disponible. Voulez-vous faire la mise à jour maintenant ?\n" +"\n" +"Notes de version :\n" +"\n" +"%s" + +#: source/update.c:262 +#, c-format +msgid "Downloading Update (%u kB)" +msgstr "Téléchargement... (%u Ko)" + +#: source/update.c:304 +msgid "Download failed" +msgstr "Échec du téléchargement" + +#: source/widgets.c:16 +msgid "" +msgstr "" + +#~ msgid "Version: " +#~ msgstr "Version : " + +#~ msgid "Coder: " +#~ msgstr "Auteur : " + +#~ msgid "Deleting" +#~ msgstr "Suppression en cours" diff --git a/channel/channelapp/i18n/german.po b/channel/channelapp/i18n/german.po new file mode 100644 index 0000000..df46377 --- /dev/null +++ b/channel/channelapp/i18n/german.po @@ -0,0 +1,256 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-22 21:29+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: NICKNAME \n" +"Language-Team: LANGUAGE\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/dialogs.c:53 +msgid "no description available" +msgstr "keine Beschreibung" + +#: source/dialogs.c:55 +msgid "Information" +msgstr "Information" + +#: source/dialogs.c:56 +msgid "Confirmation" +msgstr "Bestätigen" + +#: source/dialogs.c:57 +msgid "Warning" +msgstr "Achtung" + +#: source/dialogs.c:58 +msgid "Error" +msgstr "Fehler" + +#: source/dialogs.c:59 +msgid "Ok" +msgstr "OK" + +#: source/dialogs.c:60 +msgid "Cancel" +msgstr "Abbrechen" + +#: source/dialogs.c:61 +msgid "Yes" +msgstr "Ja" + +#: source/dialogs.c:62 +msgid "No" +msgstr "Nein" + +#: source/dialogs.c:63 +msgid "Delete" +msgstr "Löschen" + +# button text +#: source/dialogs.c:64 +msgid "Load" +msgstr "Laden" + +# button text +#: source/dialogs.c:65 source/m_main.c:95 +msgid "Back" +msgstr "Zurück" + +#: source/dialogs.c:66 +msgid "Options" +msgstr "Einstellungen" + +#: source/dialogs.c:67 +msgid "Device:" +msgstr "Quelle:" + +#: source/dialogs.c:68 +msgid "Internal SD Slot" +msgstr "Interner SD Slot" + +#: source/dialogs.c:69 +msgid "USB device" +msgstr "USB-Laufwerk" + +#: source/dialogs.c:70 +msgid "SDGecko Slot A" +msgstr "SDGecko Slot A" + +#: source/dialogs.c:71 +msgid "SDGecko Slot B" +msgstr "SDGecko Slot B" + +#: source/dialogs.c:72 +msgid "Sort applications by:" +msgstr "Anwendungen sortieren nach:" + +#: source/dialogs.c:73 +msgid "Name" +msgstr "Name" + +#: source/dialogs.c:74 +msgid "Date" +msgstr "Datum" + +#: source/dialogs.c:110 +msgid " translation by " +msgstr "Deutsche Ãœbersetzung: Elena Vectoradvenberg" + +#: source/dialogs.c:115 +msgid "Theme:" +msgstr "Thema:" + +#: source/dialogs.c:125 +#, c-format +msgid "Version: %s" +msgstr "Version: %s" + +#: source/dialogs.c:126 +#, c-format +msgid "Author: %s" +msgstr "Autor: %s" + +#: source/loader.c:716 +msgid "Error while reading the application from the SD card" +msgstr "Fehler beim Lesen der Anwendung von der SD-Karte" + +#: source/loader.c:717 +msgid "Error while receiving the application" +msgstr "Fehler beim Empfang der Anwendung" + +#: source/loader.c:718 +msgid "Error uncompressing the received data" +msgstr "Fehler beim Entpacken der empfangenen Daten" + +#: source/loader.c:719 +msgid "This is not a valid Wii application" +msgstr "Das ist keine gültige Wii-Anwendung" + +#: source/loader.c:720 +msgid "This is not a usable ZIP file" +msgstr "Dies ist keine gültige ZIP-Datei" + +#: source/loader.c:721 +msgid "Not enough memory" +msgstr "Nicht genug Speicher" + +#: source/loader.c:763 +#, c-format +msgid "Loading %s" +msgstr "Lade %s" + +#: source/loader.c:772 +#, c-format +msgid "Receiving over USBGecko" +msgstr "Empfange über USBGecko" + +#: source/loader.c:782 +#, c-format +msgid "Receiving from %s" +msgstr "Empfange von %s" + +#: source/loader.c:968 +#, c-format +msgid "" +"Extract the received ZIP file?\n" +"%s of free space are required." +msgstr "" +"Entpacken der empfangenen ZIP-Datei?\n" +"%s bytes freier Speicherplatz werden benötigt." + +#: source/loader.c:969 +#, c-format +msgid "WARNING: Files in '%s' will be overwritten" +msgstr "ACHTUNG: Dateien in '%s' werden überschrieben" + +#: source/loader.c:970 +msgid "Error while extracting the ZIP file" +msgstr "Fehler beim Empfang der Anwendung" + +#: source/main.c:250 +msgid "Do you really want to delete this application?" +msgstr "Soll die Anwendung wirklich gelöscht werden?" + +#: source/main.c:251 +#, c-format +msgid "Error deleting '%s'" +msgstr "Fehler beim Löschen von '%s'" + +#: source/manage.c:518 +msgid "Extracting" +msgstr "Entpacke" + +#: source/m_main.c:80 +msgid "Network not initialized" +msgstr "Netzwerk nicht initialisiert" + +#: source/m_main.c:81 +#, c-format +msgid "Your Wii's IP is %u.%u.%u.%u" +msgstr "Die IP deiner Wii ist %u.%u.%u.%u" + +# button text +#: source/m_main.c:97 +msgid "About" +msgstr "Info" + +#: source/m_main.c:102 +msgid "Launch BootMii" +msgstr "BootMii starten" + +#: source/m_main.c:106 +msgid "Exit to System Menu" +msgstr "Beenden, zum Systemmenü" + +#: source/m_main.c:109 +msgid "Shutdown" +msgstr "Herunterfahren" + +#: source/update.c:232 +#, c-format +msgid "" +"An update to the Homebrew Channel (version %s, replacing the installed " +"version %s) is available for installation, do you want to update now?\n" +"\n" +"Release notes:\n" +"\n" +"%s" +msgstr "" +"Ein Update für den Homebrew Channel ist verfügbar (Version %s, ersetzt die " +"aktuelle Version %s). Soll jetzt aktualisiert werden?\n" +"\n" +"Versionsinfo:\n" +"\n" +"%s" + +#: source/update.c:262 +#, c-format +msgid "Downloading Update (%u kB)" +msgstr "Lade Update (%u KB)" + +#: source/update.c:304 +msgid "Download failed" +msgstr "Download fehlgeschlagen" + +#: source/widgets.c:16 +msgid "" +msgstr "" + +#~ msgid "Version: " +#~ msgstr "Version: " + +#~ msgid "Coder: " +#~ msgstr "Coder: " + +#~ msgid "Deleting" +#~ msgstr "Lösche" diff --git a/channel/channelapp/i18n/italian.po b/channel/channelapp/i18n/italian.po new file mode 100644 index 0000000..1427195 --- /dev/null +++ b/channel/channelapp/i18n/italian.po @@ -0,0 +1,267 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-22 21:29+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: NICKNAME \n" +"Language-Team: LANGUAGE\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/dialogs.c:53 +msgid "no description available" +msgstr "nessuna descrizione disponibile" + +# This and the following strings are dialog box "title bars" +#: source/dialogs.c:55 +msgid "Information" +msgstr "Informazioni" + +#: source/dialogs.c:56 +msgid "Confirmation" +msgstr "Conferma" + +#: source/dialogs.c:57 +msgid "Warning" +msgstr "Avvertenza" + +#: source/dialogs.c:58 +msgid "Error" +msgstr "Errore" + +# button text +#: source/dialogs.c:59 +msgid "Ok" +msgstr "Ok" + +# button text +#: source/dialogs.c:60 +msgid "Cancel" +msgstr "Annulla" + +# button text +#: source/dialogs.c:61 +msgid "Yes" +msgstr "Sì" + +# button text +#: source/dialogs.c:62 +msgid "No" +msgstr "No" + +#: source/dialogs.c:63 +msgid "Delete" +msgstr "Elimina" + +# button text +#: source/dialogs.c:64 +msgid "Load" +msgstr "Carica" + +# button text +#: source/dialogs.c:65 source/m_main.c:95 +msgid "Back" +msgstr "Indietro" + +#: source/dialogs.c:66 +msgid "Options" +msgstr "Opzioni" + +#: source/dialogs.c:67 +msgid "Device:" +msgstr "Periferica:" + +#: source/dialogs.c:68 +msgid "Internal SD Slot" +msgstr "Slot SD Interno" + +#: source/dialogs.c:69 +msgid "USB device" +msgstr "Pendrive USB" + +#: source/dialogs.c:70 +msgid "SDGecko Slot A" +msgstr "SDGecko Slot A" + +#: source/dialogs.c:71 +msgid "SDGecko Slot B" +msgstr "SDGecko Slot B" + +#: source/dialogs.c:72 +msgid "Sort applications by:" +msgstr "Ordina applicazioni per:" + +#: source/dialogs.c:73 +msgid "Name" +msgstr "Nome" + +#: source/dialogs.c:74 +msgid "Date" +msgstr "Data" + +#: source/dialogs.c:110 +msgid " translation by " +msgstr "" +"Traduzione italiana di EnricoBr\n" +"Aggiornata da The Lemon Man" + +#: source/dialogs.c:115 +msgid "Theme:" +msgstr "Tema:" + +#: source/dialogs.c:125 +#, c-format +msgid "Version: %s" +msgstr "Versione: %s" + +#: source/dialogs.c:126 +#, c-format +msgid "Author: %s" +msgstr "Autore: %s" + +#: source/loader.c:716 +msgid "Error while reading the application from the SD card" +msgstr "Errore durante la lettura dell'applicazione dalla scheda SD" + +#: source/loader.c:717 +msgid "Error while receiving the application" +msgstr "Errore durante la ricezione dell'applicazione" + +#: source/loader.c:718 +msgid "Error uncompressing the received data" +msgstr "Errore durante la decompressione dei dati ricevuti" + +#: source/loader.c:719 +msgid "This is not a valid Wii application" +msgstr "Non è un'applicazione Wii valida" + +#: source/loader.c:720 +msgid "This is not a usable ZIP file" +msgstr "Questo non è un file ZIP utilizzabile" + +#: source/loader.c:721 +msgid "Not enough memory" +msgstr "Memoria insufficiente" + +#: source/loader.c:763 +#, c-format +msgid "Loading %s" +msgstr "Caricamento di %s" + +#: source/loader.c:772 +#, c-format +msgid "Receiving over USBGecko" +msgstr "Ricezione su USBGecko" + +#: source/loader.c:782 +#, c-format +msgid "Receiving from %s" +msgstr "Ricezione da %s" + +#: source/loader.c:968 +#, c-format +msgid "" +"Extract the received ZIP file?\n" +"%s of free space are required." +msgstr "" +"Estrarre il file ZIP ricevuto?\n" +"Sono richiesti %s di spazio libero." + +#: source/loader.c:969 +#, c-format +msgid "WARNING: Files in '%s' will be overwritten" +msgstr "ATTENZIONE: I file in '%s' verranno sovrascritti" + +#: source/loader.c:970 +msgid "Error while extracting the ZIP file" +msgstr "Errore durante l'estrazione del file ZIP" + +#: source/main.c:250 +msgid "Do you really want to delete this application?" +msgstr "Sei sicuro di voler cancellare questa domanda?" + +#: source/main.c:251 +#, c-format +msgid "Error deleting '%s'" +msgstr "Errore durante l' eliminazione di '%s'" + +#: source/manage.c:518 +msgid "Extracting" +msgstr "Estraendo" + +#: source/m_main.c:80 +msgid "Network not initialized" +msgstr "Rete non inizializzata" + +#: source/m_main.c:81 +#, c-format +msgid "Your Wii's IP is %u.%u.%u.%u" +msgstr "L'indirizzo IP del Wii è %u.%u.%u.%u" + +# button text +#: source/m_main.c:97 +msgid "About" +msgstr "Informazioni" + +#: source/m_main.c:102 +msgid "Launch BootMii" +msgstr "Lanciare BootMii" + +#: source/m_main.c:106 +msgid "Exit to System Menu" +msgstr "Ritorna al Menu di Sistema" + +#: source/m_main.c:109 +msgid "Shutdown" +msgstr "Spegni" + +#: source/update.c:232 +#, c-format +msgid "" +"An update to the Homebrew Channel (version %s, replacing the installed " +"version %s) is available for installation, do you want to update now?\n" +"\n" +"Release notes:\n" +"\n" +"%s" +msgstr "" +"È disponibile per l'installazione un aggiornamento di Homebrew Channel " +"(versione %s, in sostituzione della versione %s installata); vuoi eseguire " +"adesso l'aggiornamento?\n" +"\n" +"Note sulla versione:\n" +"\n" +"%s" + +#: source/update.c:262 +#, c-format +msgid "Downloading Update (%u kB)" +msgstr "Download (%u kB)" + +#: source/update.c:304 +msgid "Download failed" +msgstr "Download non riuscito" + +#: source/widgets.c:16 +msgid "" +msgstr "" + +#~ msgid "Version: " +#~ msgstr "Versione: " + +#~ msgid "Coder: " +#~ msgstr "Sviluppatore: " + +#~ msgid "Deleting" +#~ msgstr "Eliminando" + +#~ msgid "Do you really want to exit to the boring, boring System Menu?\n" +#~ msgstr "Confermi di voler uscire al noiosissimo menu di sistema?\n" diff --git a/channel/channelapp/i18n/japanese.po b/channel/channelapp/i18n/japanese.po new file mode 100644 index 0000000..4737fbb --- /dev/null +++ b/channel/channelapp/i18n/japanese.po @@ -0,0 +1,253 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: homebrew_channel\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-22 21:29+0900\n" +"PO-Revision-Date: 2011-01-10 05:53+0200\n" +"Last-Translator: Jan Ekstrom \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/dialogs.c:53 +msgid "no description available" +msgstr "詳細情報ã¯ã‚ã‚Šã¾ã›ã‚“ " + +# This and the following strings are dialog box "title bars" +#: source/dialogs.c:55 +msgid "Information" +msgstr "報告" + +#: source/dialogs.c:56 +msgid "Confirmation" +msgstr "確èª" + +#: source/dialogs.c:57 +msgid "Warning" +msgstr "警告" + +#: source/dialogs.c:58 +msgid "Error" +msgstr "エラー" + +# button text +#: source/dialogs.c:59 +msgid "Ok" +msgstr "Ok" + +# button text +#: source/dialogs.c:60 +msgid "Cancel" +msgstr "キャンセル" + +# button text +#: source/dialogs.c:61 +msgid "Yes" +msgstr "ã¯ã„" + +# button text +#: source/dialogs.c:62 +msgid "No" +msgstr "ã„ã„ãˆ" + +#: source/dialogs.c:63 +msgid "Delete" +msgstr "削除" + +# button text +#: source/dialogs.c:64 +msgid "Load" +msgstr "èµ·å‹•" + +# button text +#: source/dialogs.c:65 source/m_main.c:95 +msgid "Back" +msgstr "戻る" + +#: source/dialogs.c:66 +msgid "Options" +msgstr "オプション" + +#: source/dialogs.c:67 +msgid "Device:" +msgstr "デãƒã‚¤ã‚¹:" + +#: source/dialogs.c:68 +msgid "Internal SD Slot" +msgstr "内部SDスロット" + +#: source/dialogs.c:69 +msgid "USB device" +msgstr "USBデãƒã‚¤ã‚¹" + +#: source/dialogs.c:70 +msgid "SDGecko Slot A" +msgstr "SDGeckoã®ã‚¹ãƒ­ãƒƒãƒˆA" + +#: source/dialogs.c:71 +msgid "SDGecko Slot B" +msgstr "SDGeckoã®ã‚¹ãƒ­ãƒƒãƒˆB" + +#: source/dialogs.c:72 +msgid "Sort applications by:" +msgstr "アプリケーションã®ä¸¦ã¹æ›¿ãˆé †åº " + +#: source/dialogs.c:73 +msgid "Name" +msgstr "åå‰" + +#: source/dialogs.c:74 +msgid "Date" +msgstr "日付" + +#: source/dialogs.c:110 +msgid " translation by " +msgstr "日本語ã€JEEBæ°ã«ã‚ˆã‚‹ç¿»è¨³" + +#: source/dialogs.c:115 +msgid "Theme:" +msgstr "テーマ:" + +#: source/dialogs.c:125 +#, c-format +msgid "Version: %s" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %s" + +#: source/dialogs.c:126 +#, c-format +msgid "Author: %s" +msgstr "作者: %s" + +#: source/loader.c:716 +msgid "Error while reading the application from the SD card" +msgstr "アプリケーションをSDカードã‹ã‚‰èª­ã¿è¾¼ã‚“ã§ã„る最中エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: source/loader.c:717 +msgid "Error while receiving the application" +msgstr "アプリケーションをå—ä¿¡ã—ã¦ã„る最中エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: source/loader.c:718 +msgid "Error uncompressing the received data" +msgstr "å—ä¿¡ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿ã‚’解å‡ä¸­ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: source/loader.c:719 +msgid "This is not a valid Wii application" +msgstr "ã“ã‚Œã¯å¦¥å½“ãªWiiアプリケーションã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + +#: source/loader.c:720 +msgid "This is not a usable ZIP file" +msgstr "ã“ã‚Œã¯å¦¥å½“ãªZIPファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + +#: source/loader.c:721 +msgid "Not enough memory" +msgstr "メモリーãŒè¶³ã‚Šã¾ã›ã‚“。" + +#: source/loader.c:763 +#, c-format +msgid "Loading %s" +msgstr "%sをロード中。" + +#: source/loader.c:772 +#, c-format +msgid "Receiving over USBGecko" +msgstr "USBGecko経由ã§å—信中。" + +#: source/loader.c:782 +#, c-format +msgid "Receiving from %s" +msgstr "%sã‹ã‚‰å—信中。" + +#: source/loader.c:968 +#, c-format +msgid "" +"Extract the received ZIP file?\n" +"%s of free space are required." +msgstr "" +"å—ä¿¡ã•ã‚ŒãŸZIPファイルを解å‡ã—ã¾ã™ã‹ã€‚\n" +"%sã®ç©ºã領域ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" + +#: source/loader.c:969 +#, c-format +msgid "WARNING: Files in '%s' will be overwritten" +msgstr "警告: 「%sã€ã®ä¸­ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã™ã¹ã¦ä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚" + +#: source/loader.c:970 +msgid "Error while extracting the ZIP file" +msgstr "ZIPファイルを解å‡ä¸­ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: source/main.c:250 +msgid "Do you really want to delete this application?" +msgstr "本当ã«ã“ã®ã‚¢ãƒ—リケーションを削除ã—ã¾ã™ã‹ã€‚" + +#: source/main.c:251 +#, c-format +msgid "Error deleting '%s'" +msgstr "「%sã€ã‚’削除中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: source/manage.c:518 +msgid "Extracting" +msgstr "解å‡ä¸­" + +#: source/m_main.c:80 +msgid "Network not initialized" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒåˆæœŸåŒ–ã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: source/m_main.c:81 +#, c-format +msgid "Your Wii's IP is %u.%u.%u.%u" +msgstr "ã“ã®Wiiã®IPアドレス㯠%u.%u.%u.%u" + +# button text +#: source/m_main.c:97 +msgid "About" +msgstr "ã“ã®ã‚¢ãƒ—リケーションã«ã¤ã„ã¦" + +#: source/m_main.c:102 +msgid "Launch BootMii" +msgstr "BootMiiã‚’èµ·å‹•" + +#: source/m_main.c:106 +msgid "Exit to System Menu" +msgstr "システムメニューã¸æˆ»ã‚‹" + +#: source/m_main.c:109 +msgid "Shutdown" +msgstr "シャットダウン" + +# note: a non-breaking space is used in "Homebrew Channel" here. +#: source/update.c:232 +#, c-format +msgid "" +"An update to the Homebrew Channel (version %s, replacing the installed " +"version %s) is available for installation, do you want to update now?\n" +"\n" +"Release notes:\n" +"\n" +"%s" +msgstr "" +"Homebrew Channelã«åˆ©ç”¨å¯èƒ½ãªæ›´æ–°ãŒã‚ã‚Šã¾ã™ã€‚ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³%sã€ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§" +"ン%sã‚’ç½®æ›ï¼‰ 今ã™ãæ›´æ–°ã—ã¾ã™ã‹ã€‚\n" +"\n" +"リリース ノート :\n" +"\n" +"%s" + +#: source/update.c:262 +#, c-format +msgid "Downloading Update (%u kB)" +msgstr "更新をダウンロード中 (%u kB)" + +#: source/update.c:304 +msgid "Download failed" +msgstr "ダウンロードãŒå¤±æ•—ã—ã¾ã—ãŸã€‚" + +#: source/widgets.c:16 +msgid "" +msgstr "<詳細情報ã¯ã‚ã‚Šã¾ã›ã‚“ >" diff --git a/channel/channelapp/i18n/spanish.po b/channel/channelapp/i18n/spanish.po new file mode 100644 index 0000000..dac8dd0 --- /dev/null +++ b/channel/channelapp/i18n/spanish.po @@ -0,0 +1,258 @@ +# translation of template.pot to Spanish +# Spanish translations for PACKAGE package. +# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# marcan , 2008. +msgid "" +msgstr "" +"Project-Id-Version: spanish\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-22 21:29+0900\n" +"PO-Revision-Date: 2008-05-21 01:17+0200\n" +"Last-Translator: marcan \n" +"Language-Team: Spanish\n" +"Language: \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" +"X-Generator: KBabel 1.11.4\n" + +#: source/dialogs.c:53 +msgid "no description available" +msgstr "descripción no disponible" + +#: source/dialogs.c:55 +msgid "Information" +msgstr "Información" + +#: source/dialogs.c:56 +msgid "Confirmation" +msgstr "Confirmación" + +#: source/dialogs.c:57 +msgid "Warning" +msgstr "Advertencia" + +#: source/dialogs.c:58 +msgid "Error" +msgstr "Error" + +#: source/dialogs.c:59 +msgid "Ok" +msgstr "Aceptar" + +#: source/dialogs.c:60 +msgid "Cancel" +msgstr "Cancelar" + +#: source/dialogs.c:61 +msgid "Yes" +msgstr "Sí" + +#: source/dialogs.c:62 +msgid "No" +msgstr "No" + +#: source/dialogs.c:63 +msgid "Delete" +msgstr "Eliminar" + +# button text +#: source/dialogs.c:64 +msgid "Load" +msgstr "Cargar" + +# button text +#: source/dialogs.c:65 source/m_main.c:95 +msgid "Back" +msgstr "Atrás" + +#: source/dialogs.c:66 +msgid "Options" +msgstr "Opciones" + +#: source/dialogs.c:67 +msgid "Device:" +msgstr "Dispositivo:" + +#: source/dialogs.c:68 +msgid "Internal SD Slot" +msgstr "Ranura SD Interna" + +#: source/dialogs.c:69 +msgid "USB device" +msgstr "Dispositivo USB" + +#: source/dialogs.c:70 +msgid "SDGecko Slot A" +msgstr "SDGecko en Slot A" + +#: source/dialogs.c:71 +msgid "SDGecko Slot B" +msgstr "SDGecko en Slot B" + +#: source/dialogs.c:72 +msgid "Sort applications by:" +msgstr "Ordenar aplicaciones por:" + +#: source/dialogs.c:73 +msgid "Name" +msgstr "Nombre" + +#: source/dialogs.c:74 +msgid "Date" +msgstr "Fecha" + +#: source/dialogs.c:110 +msgid " translation by " +msgstr "Traducción al español - marcan" + +#: source/dialogs.c:115 +msgid "Theme:" +msgstr "Tema:" + +#: source/dialogs.c:125 +#, c-format +msgid "Version: %s" +msgstr "Versión: %s" + +#: source/dialogs.c:126 +#, c-format +msgid "Author: %s" +msgstr "Autor: %s" + +#: source/loader.c:716 +msgid "Error while reading the application from the SD card" +msgstr "Error al leer la aplicación desde la tarjeta SD" + +#: source/loader.c:717 +msgid "Error while receiving the application" +msgstr "Error al recibir la aplicación" + +#: source/loader.c:718 +msgid "Error uncompressing the received data" +msgstr "Error al descomprimir los datos recibidos" + +#: source/loader.c:719 +msgid "This is not a valid Wii application" +msgstr "Esta no es una aplicación de Wii válida" + +#: source/loader.c:720 +msgid "This is not a usable ZIP file" +msgstr "Este archivo ZIP no se puede utilizar" + +#: source/loader.c:721 +msgid "Not enough memory" +msgstr "Memoria insuficiente" + +#: source/loader.c:763 +#, c-format +msgid "Loading %s" +msgstr "Cargando %s" + +#: source/loader.c:772 +#, c-format +msgid "Receiving over USBGecko" +msgstr "Recibiendo por USBGecko" + +#: source/loader.c:782 +#, c-format +msgid "Receiving from %s" +msgstr "Recibiendo desde %s" + +#: source/loader.c:968 +#, c-format +msgid "" +"Extract the received ZIP file?\n" +"%s of free space are required." +msgstr "" +"¿Desea extraer el archivo ZIP recibido?\n" +"Se requiren %s de espacio libre." + +#: source/loader.c:969 +#, c-format +msgid "WARNING: Files in '%s' will be overwritten" +msgstr "AVISO: Se reemplazarán archivos en '%s'" + +#: source/loader.c:970 +msgid "Error while extracting the ZIP file" +msgstr "Error al extraer el archivo ZIP" + +#: source/main.c:250 +msgid "Do you really want to delete this application?" +msgstr "¿Estás seguro de que quieres eliminar esta aplicación?" + +#: source/main.c:251 +#, c-format +msgid "Error deleting '%s'" +msgstr "Error al eliminar '%s'" + +#: source/manage.c:518 +msgid "Extracting" +msgstr "Extrayendo" + +#: source/m_main.c:80 +msgid "Network not initialized" +msgstr "La red no se ha inicializado" + +#: source/m_main.c:81 +#, c-format +msgid "Your Wii's IP is %u.%u.%u.%u" +msgstr "La IP de tu Wii es %u.%u.%u.%u" + +#: source/m_main.c:97 +msgid "About" +msgstr "Acerca de" + +#: source/m_main.c:102 +msgid "Launch BootMii" +msgstr "Lanzar BootMii" + +#: source/m_main.c:106 +msgid "Exit to System Menu" +msgstr "Salir al menú del sistema" + +#: source/m_main.c:109 +msgid "Shutdown" +msgstr "Apagar" + +#: source/update.c:232 +#, c-format +msgid "" +"An update to the Homebrew Channel (version %s, replacing the installed " +"version %s) is available for installation, do you want to update now?\n" +"\n" +"Release notes:\n" +"\n" +"%s" +msgstr "" +"Está disponible la versión %s del Canal Homebrew, que sustituye a la versión " +"instalada (%s). ¿Quieres actualizar ahora?\n" +"\n" +"Notas sobre la versión:\n" +"\n" +"%s" + +#: source/update.c:262 +#, c-format +msgid "Downloading Update (%u kB)" +msgstr "Descargando (%u kB)" + +#: source/update.c:304 +msgid "Download failed" +msgstr "Error al descargar" + +#: source/widgets.c:16 +msgid "" +msgstr "" + +#~ msgid "Version: " +#~ msgstr "Versión: " + +#~ msgid "Coder: " +#~ msgstr "Autor: " + +#~ msgid "Deleting" +#~ msgstr "Eliminando" diff --git a/channel/channelapp/i18n/template.pot b/channel/channelapp/i18n/template.pot new file mode 100644 index 0000000..586afa9 --- /dev/null +++ b/channel/channelapp/i18n/template.pot @@ -0,0 +1,244 @@ +# 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. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-22 21:29+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: NICKNAME \n" +"Language-Team: LANGUAGE\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/dialogs.c:53 +msgid "no description available" +msgstr "" + +# This and the following strings are dialog box "title bars" +#: source/dialogs.c:55 +msgid "Information" +msgstr "" + +#: source/dialogs.c:56 +msgid "Confirmation" +msgstr "" + +#: source/dialogs.c:57 +msgid "Warning" +msgstr "" + +#: source/dialogs.c:58 +msgid "Error" +msgstr "" + +# button text +#: source/dialogs.c:59 +msgid "Ok" +msgstr "" + +# button text +#: source/dialogs.c:60 +msgid "Cancel" +msgstr "" + +# button text +#: source/dialogs.c:61 +msgid "Yes" +msgstr "" + +# button text +#: source/dialogs.c:62 +msgid "No" +msgstr "" + +#: source/dialogs.c:63 +msgid "Delete" +msgstr "" + +# button text +#: source/dialogs.c:64 +msgid "Load" +msgstr "" + +# button text +#: source/dialogs.c:65 source/m_main.c:95 +msgid "Back" +msgstr "" + +#: source/dialogs.c:66 +msgid "Options" +msgstr "" + +#: source/dialogs.c:67 +msgid "Device:" +msgstr "" + +#: source/dialogs.c:68 +msgid "Internal SD Slot" +msgstr "" + +#: source/dialogs.c:69 +msgid "USB device" +msgstr "" + +#: source/dialogs.c:70 +msgid "SDGecko Slot A" +msgstr "" + +#: source/dialogs.c:71 +msgid "SDGecko Slot B" +msgstr "" + +#: source/dialogs.c:72 +msgid "Sort applications by:" +msgstr "" + +#: source/dialogs.c:73 +msgid "Name" +msgstr "" + +#: source/dialogs.c:74 +msgid "Date" +msgstr "" + +#: source/dialogs.c:110 +msgid " translation by " +msgstr "" + +#: source/dialogs.c:115 +msgid "Theme:" +msgstr "" + +#: source/dialogs.c:125 +#, c-format +msgid "Version: %s" +msgstr "" + +#: source/dialogs.c:126 +#, c-format +msgid "Author: %s" +msgstr "" + +#: source/loader.c:716 +msgid "Error while reading the application from the SD card" +msgstr "" + +#: source/loader.c:717 +msgid "Error while receiving the application" +msgstr "" + +#: source/loader.c:718 +msgid "Error uncompressing the received data" +msgstr "" + +#: source/loader.c:719 +msgid "This is not a valid Wii application" +msgstr "" + +#: source/loader.c:720 +msgid "This is not a usable ZIP file" +msgstr "" + +#: source/loader.c:721 +msgid "Not enough memory" +msgstr "" + +#: source/loader.c:763 +#, c-format +msgid "Loading %s" +msgstr "" + +#: source/loader.c:772 +#, c-format +msgid "Receiving over USBGecko" +msgstr "" + +#: source/loader.c:782 +#, c-format +msgid "Receiving from %s" +msgstr "" + +#: source/loader.c:968 +#, c-format +msgid "" +"Extract the received ZIP file?\n" +"%s of free space are required." +msgstr "" + +#: source/loader.c:969 +#, c-format +msgid "WARNING: Files in '%s' will be overwritten" +msgstr "" + +#: source/loader.c:970 +msgid "Error while extracting the ZIP file" +msgstr "" + +#: source/main.c:250 +msgid "Do you really want to delete this application?" +msgstr "" + +#: source/main.c:251 +#, c-format +msgid "Error deleting '%s'" +msgstr "" + +#: source/manage.c:518 +msgid "Extracting" +msgstr "" + +#: source/m_main.c:80 +msgid "Network not initialized" +msgstr "" + +#: source/m_main.c:81 +#, c-format +msgid "Your Wii's IP is %u.%u.%u.%u" +msgstr "" + +# button text +#: source/m_main.c:97 +msgid "About" +msgstr "" + +#: source/m_main.c:102 +msgid "Launch BootMii" +msgstr "" + +#: source/m_main.c:106 +msgid "Exit to System Menu" +msgstr "" + +#: source/m_main.c:109 +msgid "Shutdown" +msgstr "" + +#: source/update.c:232 +#, c-format +msgid "" +"An update to the Homebrew Channel (version %s, replacing the installed " +"version %s) is available for installation, do you want to update now?\n" +"\n" +"Release notes:\n" +"\n" +"%s" +msgstr "" + +#: source/update.c:262 +#, c-format +msgid "Downloading Update (%u kB)" +msgstr "" + +#: source/update.c:304 +msgid "Download failed" +msgstr "" + +#: source/widgets.c:16 +msgid "" +msgstr "" diff --git a/channel/channelapp/newrvl.ld b/channel/channelapp/newrvl.ld new file mode 100644 index 0000000..efd7ddb --- /dev/null +++ b/channel/channelapp/newrvl.ld @@ -0,0 +1,306 @@ +/* + * Linkscript for GC, automatically sets up DOL structures, + * generate ELF file and use objdump, or generate binary + * directly. + * + * PSUL doesn't seem to handle separate text and data sections correctly, + * that is why the text and data sections are merged in the header. + * + * If you want to experiment, it should be quite obvious how to + * change the header to list the data separately. + */ + +OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc"); +OUTPUT_ARCH(powerpc:common); +EXTERN(_start); +ENTRY(_start); + +PHDRS +{ + stub PT_LOAD FLAGS(5); + text PT_LOAD FLAGS(5); + data PT_LOAD FLAGS(6); +} + +SECTIONS +{ + /* stub is loaded at physical address 0x00003400 (though both 0x80003400 and 0x00003400 are equivalent for IOS) */ + /* This can also be used to load an arbitrary standalone stub at an arbitrary address in memory, for any purpose */ + /* Use -Wl,--section-start,.stub=0xADDRESS to change */ + . = 0x00003400; + + .stub : + { + KEEP(*(.stub)) + } :stub = 0 + + /* default base address */ + /* use -Wl,--section-start,.init=0xADDRESS to change */ + . = 0x80004000; + + /* Program */ + .init : + { + KEEP (*crt0.o(*.init)) + KEEP (*(.init)) + } :text = 0 + .plt : { *(.plt) } + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rela.got1 : { *(.rela.got1) } + .rela.got2 : { *(.rela.got2) } + .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } + .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } + .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } + .rela.sbss : { *(.rela.sbss .rela.sbss.* .rel.gnu.linkonce.sb.*) } + .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } + .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } + .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } + .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + +.text : + { + *(.text) + *(.text.*) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t.*) + . = ALIGN(32); /* REQUIRED. LD is flaky without it. */ + } = 0 + + .fini : + { + KEEP (*(.fini)) + . = ALIGN(32); /* REQUIRED. LD is flaky without it. */ + } = 0 + + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + + .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data + .rodata1 : { + *(.rodata1) + . = ALIGN(32); + } :data + .sdata2 : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) } + .sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) } + /* Adjust the address for the data segment. We want to adjust up to + the same address within the page on the next page up. */ + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { *(.preinit_array) } + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { *(.init_array) } + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { *(.fini_array) } + PROVIDE (__fini_array_end = .); + .data : + { + *(.data) + *(.data.*) + *(.gnu.linkonce.d.*) + SORT(CONSTRUCTORS) + . = ALIGN(32); /* REQUIRED. LD is flaky without it. */ + } + + .data1 : { *(.data1) } + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } + .eh_frame : { KEEP (*(.eh_frame)) } + .gcc_except_table : { *(.gcc_except_table) } + .fixup : { *(.fixup) } + .got1 : { *(.got1) } + .got2 : { *(.got2) } + .dynamic : { *(.dynamic) } + + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + + KEEP (*crtbegin.o(.ctors)) + + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + + KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(32); /* REQUIRED. LD is flaky without it. */ + } + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(32); /* REQUIRED. LD is flaky without it. */ + } + + .jcr : { KEEP (*(.jcr)) } + .got : { *(.got.plt) *(.got) } + + + /* We want the small data sections together, so single-instruction offsets + can access them all, and initialized data all before uninitialized, so + we can shorten the on-disk segment size. */ + + .sdata : + { + *(.sdata) + *(.sdata.*) + *(.gnu.linkonce.s.*) + . = ALIGN(32); /* REQUIRED. LD is flaky without it. */ + } + + _edata = .; + PROVIDE (edata = .); + + .sbss : + { + __sbss_start = .; + PROVIDE (__sbss_start = .); + PROVIDE (___sbss_start = .); + *(.dynsbss) + *(.sbss) + *(.sbss.*) + *(.gnu.linkonce.sb.*) + *(.scommon) + PROVIDE (__sbss_end = .); + PROVIDE (___sbss_end = .); + . = ALIGN(32); /* REQUIRED. LD is flaky without it. */ + __sbss_end = .; + } + + .bss : + { + __bss_start = .; + PROVIDE (__bss_start = .); + *(.dynbss) + *(.bss) + *(.bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + + . = ALIGN(32); + + PROVIDE (__bss_end = .); + __bss_end = .; + } + + _end = .; + PROVIDE(end = .); + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /* These must appear regardless of . */ +} + +__isIPL = 0; +__stack_addr = (__bss_start + SIZEOF(.bss) + 0x20000 + 7) & (-8); +__stack_end = (__bss_start + SIZEOF(.bss)); +__intrstack_addr = (__stack_addr + 0x4000); +__intrstack_end = (__stack_addr); +__Arena1Lo = (__intrstack_addr + 31) & (-32); +__Arena1Hi = (0x817FEFF0); +__Arena2Lo = (0x90002000); +__Arena2Hi = (0x933E0000); + +__gxregs = (__Arena1Hi + 31) & (-32); +__ipcbufferLo = (0x933e0000); +__ipcbufferHi = (0x93400000); + +/* for backward compatibility with old crt0 */ +PROVIDE (__stack = (0x817FEFF0)); + +PROVIDE(__isIPL = __isIPL); +PROVIDE(__stack_addr = __stack_addr); +PROVIDE(__stack_end = __stack_end); +PROVIDE(__intrstack_addr = __intrstack_addr); +PROVIDE(__intrstack_end = __intrstack_end); +PROVIDE(__Arena1Lo = __Arena1Lo); +PROVIDE(__Arena1Hi = __Arena1Hi); +PROVIDE(__Arena2Lo = __Arena2Lo); +PROVIDE(__Arena2Hi = __Arena2Hi); +PROVIDE(__ipcbufferLo = __ipcbufferLo); +PROVIDE(__ipcbufferHi = __ipcbufferHi); +PROVIDE(__gxregs = __gxregs); diff --git a/channel/channelapp/newrvl.spec b/channel/channelapp/newrvl.spec new file mode 100644 index 0000000..0f2b207 --- /dev/null +++ b/channel/channelapp/newrvl.spec @@ -0,0 +1,2 @@ +*link_start_rvl: + -T newrvl.ld%s diff --git a/channel/channelapp/source/appentry.c b/channel/channelapp/source/appentry.c new file mode 100644 index 0000000..d488ff4 --- /dev/null +++ b/channel/channelapp/source/appentry.c @@ -0,0 +1,713 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "../config.h" +#include "tex.h" +#include "panic.h" + +#include "appentry.h" + +typedef struct { + const char *name; + const DISC_INTERFACE *device; + bool last_status; +} device_t; + +static app_entry *entries_all[MAX_ENTRIES]; +static u32 entry_count_all = 0; + +app_entry *entries[MAX_ENTRIES]; +u32 entry_count = 0; + +const char *app_path = "/apps"; +const char *app_fn_boot_elf = "boot.elf"; +const char *app_fn_boot_dol = "boot.dol"; +const char *app_fn_theme = "theme.zip"; +const char *app_fn_meta = "meta.xml"; +const char *app_fn_icon = "icon.png"; + +static device_t devices[DEVICE_COUNT] = { + { "sd", &__io_wiisd, false }, + { "usb", &__io_usbstorage, false }, + { "carda", &__io_gcsda, false }, + { "cardb", &__io_gcsdb, false } +}; + +static int device_active = -1; +static int device_prefered = -1; +static app_filter current_filter = APP_FILTER_ALL; +static app_sort current_sort = APP_SORT_NAME; +static bool cmp_descending = false; +static bool cmp_release_date = false; + +static int cmp_app_entry (const void *p1, const void *p2) { + const app_entry *a1; + const app_entry *a2; + + if (cmp_descending) { + a1 = *((const app_entry **) p2); + a2 = *((const app_entry **) p1); + } else { + a1 = *((const app_entry **) p1); + a2 = *((const app_entry **) p2); + } + + if (!a1->meta && !a2->meta) + return stricmp (a1->dirname, a2->dirname); + + if (!a1->meta && a2->meta) + return 1; + + if (a1->meta && !a2->meta) + return -1; + + if (cmp_release_date) { + if (!a1->meta->release_date && !a2->meta->release_date) + return 0; + + if (!a1->meta->release_date && a2->meta->release_date) + return -1; + + if (a1->meta->release_date && !a2->meta->release_date) + return 1; + + if (a1->meta->release_date > a2->meta->release_date) + return 1; + + return -1; + } + + if (!a1->meta->name && !a2->meta->name) + return stricmp (a1->dirname, a2->dirname); + + if (!a1->meta->name && a2->meta->name) + return 1; + + if (a1->meta->name && !a2->meta->name) + return -1; + + return stricmp (a1->meta->name, a2->meta->name); +} + +static void app_entry_filter(app_filter filter) { + u32 i; + + for (i = 0; i < MAX_ENTRIES; ++i) + entries[i] = NULL; + + entry_count = 0; + + for (i = 0; i < MAX_ENTRIES; ++i) { + if (!entries_all[i]) + continue; + + switch (filter) { + case APP_FILTER_ICONSONLY: + if (!entries_all[i]->icon) + continue; + break; + + case APP_FILTER_DATEONLY: + if (!entries_all[i]->meta) //|| !entries_all[i]->meta->release_date) + continue; + break; + + default: + break; + } + + entries[entry_count] = entries_all[i]; + entry_count++; + } + + current_filter = filter; + + if (entry_count) + qsort(entries, entry_count, sizeof(app_entry *), cmp_app_entry); +} + +app_sort app_entry_get_sort(void) { + return current_sort; +} + +void app_entry_set_sort(app_sort sort) { + switch (sort) { + case APP_SORT_DATE: + cmp_descending = true; + cmp_release_date = true; + current_filter = APP_FILTER_DATEONLY; + current_sort = APP_SORT_DATE; + break; + + default: + cmp_descending = false; + cmp_release_date = false; + current_filter = APP_FILTER_ALL; + current_sort = APP_SORT_NAME; + break; + } + + if (settings.sort_order != current_sort) + settings.sort_order = current_sort; +} + +static app_entry *app_entry_load_single (const char *dirname) { + app_entry *entry; + app_entry_type type; + char tmp[MAXPATHLEN + 32]; + struct stat st; + + type = AET_BOOT_ELF; + sprintf(tmp, "%s/%s/%s", app_path, dirname, app_fn_boot_elf); + + if (stat(tmp, &st)) { + type = AET_BOOT_DOL; + sprintf(tmp, "%s/%s/%s", app_path, dirname, app_fn_boot_dol); + + if (stat(tmp, &st)) { + type = AET_THEME; + sprintf(tmp, "%s/%s/%s", app_path, dirname, app_fn_theme); + + if (stat(tmp, &st)) + return NULL; + + if (st.st_size > MAX_THEME_ZIP_SIZE) + return NULL; + } + } + + if (!st.st_size || st.st_size > LD_MAX_SIZE) + return NULL; + + entry = (app_entry *) pmalloc(sizeof(app_entry)); + + entry->type = type; + entry->size = st.st_size; + entry->dirname = pstrdup(dirname); + entry->icon = NULL; + entry->meta = NULL; + + sprintf(tmp, "%s/%s/%s", app_path, dirname, app_fn_meta); + if (stat(tmp, &st) == 0) + entry->meta = meta_parse(tmp); + + sprintf(tmp, "%s/%s/%s", app_path, dirname, app_fn_icon); + if (stat(tmp, &st) == 0) + entry->icon = tex_from_png_file(tmp, &st, APP_ENTRY_ICON_WIDTH, + APP_ENTRY_ICON_HEIGHT); + + return entry; +} + +void app_entries_free(void) { + u32 i; + + for (i = 0; i < MAX_ENTRIES; ++i) { + entries[i] = NULL; + + if (!entries_all[i]) + continue; + + free (entries_all[i]->dirname); + tex_free (entries_all[i]->icon); + meta_free (entries_all[i]->meta); + + free(entries_all[i]); + entries_all[i] = NULL; + } + + entry_count_all = 0; + entry_count = 0; +} + +static void app_entry_load_all (void) { + app_entry *entry; + DIR *d; + struct dirent *de; + + app_entries_free (); + + d = opendir(app_path); + if (!d) + return; + + while ((de = readdir(d))) { + // ignore dotfiles / dotdirs + if (de->d_name[0] == '\0' || de->d_name[0] == '.') + continue; + + // All apps have their own dir + if (de->d_type != DT_DIR) + continue; + + entry = app_entry_load_single(de->d_name); + + if (!entry) + continue; + + entries_all[entry_count_all] = entry; + + entry_count_all++; + + if (entry_count_all >= MAX_ENTRIES) + break; + } + + closedir(d); + + app_entry_filter(current_filter); +} + +bool app_entry_remove(app_entry *app) { + u32 i; + bool res = false; + + for (i = 0; i < MAX_ENTRIES; ++i) + if (entries_all[i] == app) { + free(entries_all[i]->dirname); + tex_free(entries_all[i]->icon); + meta_free(entries_all[i]->meta); + + free(entries_all[i]); + entries_all[i] = NULL; + entry_count_all--; + + res = true; + + break; + } + + if (res) + app_entry_filter(current_filter); + + return res; +} + +app_entry *app_entry_add(const char *dirname) { + app_entry *entry = NULL; + u32 i; + bool filter = false; + + gprintf("adding entry '%s'\n", dirname); + + for (i = 0; i < MAX_ENTRIES; ++i) { + if (entries_all[i]) { + if (!strcasecmp(entries_all[i]->dirname, dirname)) { + gprintf("removing old entry '%s'\n", entries_all[i]->dirname); + + free(entries_all[i]->dirname); + tex_free(entries_all[i]->icon); + meta_free(entries_all[i]->meta); + + free(entries_all[i]); + entries_all[i] = NULL; + entry_count_all--; + + filter = true; + + break; + } + } + } + + if (entry_count_all >= MAX_ENTRIES) + goto exit; + + entry = app_entry_load_single(dirname); + + if (!entry) + goto exit; + + for (i = 0; i < MAX_ENTRIES; ++i) + if (!entries_all[i]) { + entries_all[i] = entry; + entry_count_all++; + + filter = true; + + break; + } + +exit: + if (filter) + app_entry_filter(current_filter); + + return entry; +} + +static bool _mount(int index) { + devices[index].last_status = fatMountSimple(devices[index].name, + devices[index].device); + + if (!devices[index].last_status) { + devices[index].device->shutdown(); + + return false; + } + + return true; +} + +typedef enum { + AE_CMD_IDLE = 0, + AE_CMD_EXIT, + AE_CMD_SCAN, + AE_CMD_POLLSTATUS +} ae_cmd; + +typedef struct { + bool running; + ae_cmd cmd; + ae_action action; + bool status[DEVICE_COUNT]; + bool umount; + int mount; + bool loading; + mutex_t cmutex; + cond_t cond; +} ae_args; + +static lwp_t ae_thread; +static u8 ae_stack[APPENTRY_THREAD_STACKSIZE] ATTRIBUTE_ALIGN (32); +static ae_args ta_ae; + +static void *ae_func (void *arg) { + ae_args *ta = (ae_args *) arg; + int i; + char cwd[16]; + + ta->running = true; + + for (i = 0; i < DEVICE_COUNT; ++i) + ta_ae.status[i] = false; + + LWP_MutexLock (ta->cmutex); + + while (true) { + + ta->cmd = AE_CMD_IDLE; + LWP_CondWait(ta->cond, ta->cmutex); + + if (ta->cmd == AE_CMD_EXIT) + break; + + switch (ta->cmd) { + case AE_CMD_SCAN: + + if (device_active >= 0) { + if (!ta->umount && devices[device_active].device->isInserted()) + continue; + + gprintf("device lost: %s\n", devices[device_active].name); + + ta->umount = false; + + fatUnmount(devices[device_active].name); + devices[device_active].device->shutdown(); + devices[device_active].last_status = false; + device_active = -1; + + ta->action = AE_ACT_REMOVE; + + continue; + } + + if (ta->mount >= 0) { + if (_mount(ta->mount)) + device_active = ta->mount; + ta->mount = -1; + } + + if ((device_active < 0) && (device_prefered >= 0)) { + if (_mount(device_prefered)) + device_active = device_prefered; + } + + if (device_active < 0) { + for (i = 0; i < DEVICE_COUNT; ++i) + if (_mount(i)) { + device_active = i; + break; + } + } + + if (device_active >= 0) { + gprintf("device mounted: %s\n", devices[device_active].name); + + ta->loading = true; + + strcpy(cwd, devices[device_active].name); + strcat(cwd, ":/"); + + gprintf("chdir to '%s'\n", cwd); + if (chdir(cwd)) + gprintf("chdir failed: %d\n", errno); + + app_entry_load_all(); + + ta->loading = false; + + ta->action = AE_ACT_ADD; + } + + continue; + + case AE_CMD_POLLSTATUS: + for (i = 0; i < DEVICE_COUNT; ++i) { + if (i == device_active) { + ta->status[i] = devices[i].last_status = + devices[i].device->isInserted(); + + if (!ta->umount && !devices[i].last_status) + ta->umount = true; + + continue; + } + + if (devices[i].last_status) { + if (!devices[i].device->isInserted()) { + ta->status[i] = devices[i].last_status = false; + devices[i].device->shutdown(); + } + + continue; + } + + if (!devices[i].device->startup()) { + ta->status[i] = devices[i].last_status = false; + continue; + } + + ta->status[i] = devices[i].last_status = + devices[i].device->isInserted(); + + if (!devices[i].last_status) + devices[i].device->shutdown(); + } + + continue; + + default: + break; + } + } + + LWP_MutexUnlock (ta->cmutex); + + gprintf("app entry thread done\n"); + + ta->running = false; + + return NULL; +} + +void app_entry_init(void) { + s32 res; + + memset(&entries_all, 0, sizeof(app_entry *) * MAX_ENTRIES); + memset(&entries, 0, sizeof(app_entry *) * MAX_ENTRIES); + + gprintf("starting app entry thread\n"); + + ta_ae.cmd = AE_CMD_IDLE; + ta_ae.action = AE_ACT_NONE; + ta_ae.umount = false; + ta_ae.mount = -1; + ta_ae.loading = false; + + res = LWP_MutexInit (&ta_ae.cmutex, false); + + if (res) { + gprintf ("error creating cmutex: %ld\n", res); + return; + } + + res = LWP_CondInit (&ta_ae.cond); + + if (res) { + gprintf ("error creating cond: %ld\n", res); + return; + } + + memset(&ae_stack, 0, APPENTRY_THREAD_STACKSIZE); + res = LWP_CreateThread(&ae_thread, ae_func, &ta_ae, ae_stack, + APPENTRY_THREAD_STACKSIZE, APPENTRY_THREAD_PRIO); + + if (res) { + gprintf("error creating thread: %ld\n", res); + } +} + +void app_entry_deinit (void) { + u8 i; + + if (ta_ae.running) { + gprintf ("stopping app entry thread\n"); + + for (i = 0; i < 25; ++i) { + if (LWP_MutexTryLock (ta_ae.cmutex) == 0) { + break; + } + usleep (20 * 1000); + } + if (i < 25) { + gprintf ("sending app entry thread the exit cmd\n"); + ta_ae.cmd = AE_CMD_EXIT; + LWP_SetThreadPriority (ae_thread, LWP_PRIO_HIGHEST); + LWP_CondBroadcast (ta_ae.cond); + LWP_MutexUnlock (ta_ae.cmutex); + LWP_JoinThread(ae_thread, NULL); + LWP_CondDestroy (ta_ae.cond); + LWP_MutexDestroy (ta_ae.cmutex); + app_entries_free (); + } else { + gprintf("app entry thread didn't shutdown gracefully!\n"); + } + + if (device_active >= 0) { + fatUnmount(devices[device_active].name); + devices[device_active].device->shutdown(); + } + + USB_Deinitialize(); + } + +} + +void app_entry_scan(void) { + if (!ta_ae.running) + return; + + if (LWP_MutexTryLock(ta_ae.cmutex) != 0) + return; + + ta_ae.cmd = AE_CMD_SCAN; + LWP_CondBroadcast(ta_ae.cond); + LWP_MutexUnlock(ta_ae.cmutex); +} + +ae_action app_entry_action(void) { + ae_action res; + + if (!ta_ae.running) + return AE_ACT_NONE; + + if (LWP_MutexTryLock(ta_ae.cmutex) != 0) + return AE_ACT_NONE; + + res = ta_ae.action; + ta_ae.action = AE_ACT_NONE; + LWP_MutexUnlock(ta_ae.cmutex); + + return res; +} + +void app_entry_poll_status(bool reset) { + if (!ta_ae.running) + return; + + if (LWP_MutexTryLock(ta_ae.cmutex) != 0) + return; + + ta_ae.cmd = AE_CMD_POLLSTATUS; + LWP_CondBroadcast(ta_ae.cond); + LWP_MutexUnlock(ta_ae.cmutex); +} + +int app_entry_get_status(bool *status) { + u8 i; + + if (status) + for (i = 0; i < DEVICE_COUNT; ++i) + status[i] = ta_ae.status[i]; + + return device_active; +} + +void app_entry_set_prefered(int device) { + if (device < 0) { + device_prefered = -1; + return; + } + + if (device > DEVICE_COUNT - 1) { + device_prefered = -1; + return; + } + + device_prefered = device; + + if (settings.device != device_prefered) + settings.device = device_prefered; +} + +void app_entry_set_device(int device) { + if (device < 0) + return; + + if (device > DEVICE_COUNT - 1) + return; + + ta_ae.umount = true; + ta_ae.mount = device; +} + +bool app_entry_get_path(char *buf) { + if (device_active < 0) + return false; + + strcpy(buf, devices[device_active].name); + return true; +} + +bool app_entry_get_filename(char *buf, app_entry *app) { + if (device_active < 0) + return false; + + sprintf(buf, "%s:%s/%s/", devices[device_active].name, + app_path, app->dirname); + + switch(app->type) { + case AET_BOOT_ELF: + strcat(buf, app_fn_boot_elf); + return true; + case AET_BOOT_DOL: + strcat(buf, app_fn_boot_dol); + return true; + case AET_THEME: + strcat(buf, app_fn_theme); + return true; + } + + return false; +} + +app_entry *app_entry_find(char *dirname) { + u32 i; + + for (i = 0; i < entry_count; ++i) + if (!strcasecmp(entries[i]->dirname, dirname)) + return entries[i]; + + return NULL; +} + +bool app_entry_is_loading(void) { + if (!ta_ae.running) + return false; + + return ta_ae.loading; +} + diff --git a/channel/channelapp/source/appentry.h b/channel/channelapp/source/appentry.h new file mode 100644 index 0000000..9adc970 --- /dev/null +++ b/channel/channelapp/source/appentry.h @@ -0,0 +1,80 @@ +#ifndef _APPENTRY_H_ +#define _APPENTRY_H_ + +#include + +#include "gfx.h" +#include "xml.h" + +#define DEVICE_COUNT 4 +#define MAX_THEME_ZIP_SIZE (20 * 1024 * 1024) + +typedef enum { + AET_BOOT_ELF = 0, + AET_BOOT_DOL, + AET_THEME +} app_entry_type; + +typedef struct { + app_entry_type type; + u32 size; + char *dirname; + gfx_entity *icon; + meta_info *meta; +} app_entry; + +typedef enum { + AE_ACT_NONE = 0, + AE_ACT_REMOVE, + AE_ACT_ADD +} ae_action; + +typedef enum { + APP_FILTER_ALL = 0, + APP_FILTER_ICONSONLY, + APP_FILTER_DATEONLY +} app_filter; + +typedef enum { + APP_SORT_NAME = 0, + APP_SORT_DATE +} app_sort; + +extern const char *app_path; +extern const char *app_fn_boot_elf; +extern const char *app_fn_boot_dol; +extern const char *app_fn_theme; +extern const char *app_fn_meta; +extern const char *app_fn_icon; + +extern app_entry *entries[MAX_ENTRIES]; +extern u32 entry_count; + +void app_entry_init (void); +void app_entry_deinit (void); + +void app_entries_free(void); + +void app_entry_scan(void); +ae_action app_entry_action(void); + +void app_entry_poll_status(bool reset); +int app_entry_get_status(bool *status); + +void app_entry_set_prefered(int device); +void app_entry_set_device(int device); + +bool app_entry_get_path(char *buf); +bool app_entry_get_filename(char *buf, app_entry *app); +app_entry *app_entry_find(char *dirname); + +app_sort app_entry_get_sort(void); +void app_entry_set_sort(app_sort sort); + +app_entry *app_entry_add(const char *dirname); +bool app_entry_remove(app_entry *app); + +bool app_entry_is_loading(void); + +#endif + diff --git a/channel/channelapp/source/asm.h b/channel/channelapp/source/asm.h new file mode 100644 index 0000000..8e335b4 --- /dev/null +++ b/channel/channelapp/source/asm.h @@ -0,0 +1,340 @@ +// this file was taken from libogc, see http://www.devkitpro.org/ + +#ifndef __ASM_H__ +#define __ASM_H__ + +#ifdef _LANGUAGE_ASSEMBLY +/* Condition Register Bit Fields */ + +#define cr0 0 +#define cr1 1 +#define cr2 2 +#define cr3 3 +#define cr4 4 +#define cr5 5 +#define cr6 6 +#define cr7 7 + + +/* General Purpose Registers (GPRs) */ + +#define r0 0 +#define r1 1 +#define sp 1 +#define r2 2 +#define toc 2 +#define r3 3 +#define r4 4 +#define r5 5 +#define r6 6 +#define r7 7 +#define r8 8 +#define r9 9 +#define r10 10 +#define r11 11 +#define r12 12 +#define r13 13 +#define r14 14 +#define r15 15 +#define r16 16 +#define r17 17 +#define r18 18 +#define r19 19 +#define r20 20 +#define r21 21 +#define r22 22 +#define r23 23 +#define r24 24 +#define r25 25 +#define r26 26 +#define r27 27 +#define r28 28 +#define r29 29 +#define r30 30 +#define r31 31 + + +/* Floating Point Registers (FPRs) */ + +#define fr0 0 +#define fr1 1 +#define fr2 2 +#define fr3 3 +#define fr4 4 +#define fr5 5 +#define fr6 6 +#define fr7 7 +#define fr8 8 +#define fr9 9 +#define fr10 10 +#define fr11 11 +#define fr12 12 +#define fr13 13 +#define fr14 14 +#define fr15 15 +#define fr16 16 +#define fr17 17 +#define fr18 18 +#define fr19 19 +#define fr20 20 +#define fr21 21 +#define fr22 22 +#define fr23 23 +#define fr24 24 +#define fr25 25 +#define fr26 26 +#define fr27 27 +#define fr28 28 +#define fr29 29 +#define fr30 30 +#define fr31 31 + +#define vr0 0 +#define vr1 1 +#define vr2 2 +#define vr3 3 +#define vr4 4 +#define vr5 5 +#define vr6 6 +#define vr7 7 +#define vr8 8 +#define vr9 9 +#define vr10 10 +#define vr11 11 +#define vr12 12 +#define vr13 13 +#define vr14 14 +#define vr15 15 +#define vr16 16 +#define vr17 17 +#define vr18 18 +#define vr19 19 +#define vr20 20 +#define vr21 21 +#define vr22 22 +#define vr23 23 +#define vr24 24 +#define vr25 25 +#define vr26 26 +#define vr27 27 +#define vr28 28 +#define vr29 29 +#define vr30 30 +#define vr31 31 + +#endif //_LANGUAGE_ASSEMBLY + +#define SPRG0 272 +#define SPRG1 273 +#define SPRG2 274 +#define SPRG3 275 + +#define PMC1 953 +#define PMC2 954 +#define PMC3 957 +#define PMC4 958 + +#define MMCR0 952 +#define MMCR1 956 + + +#define LINK_REGISTER_CALLEE_UPDATE_ROOM 4 +#define EXCEPTION_NUMBER 8 +#define SRR0_OFFSET 12 +#define SRR1_OFFSET 16 +#define GPR0_OFFSET 20 +#define GPR1_OFFSET 24 +#define GPR2_OFFSET 28 +#define GPR3_OFFSET 32 +#define GPR4_OFFSET 36 +#define GPR5_OFFSET 40 +#define GPR6_OFFSET 44 +#define GPR7_OFFSET 48 +#define GPR8_OFFSET 52 +#define GPR9_OFFSET 56 +#define GPR10_OFFSET 60 +#define GPR11_OFFSET 64 +#define GPR12_OFFSET 68 +#define GPR13_OFFSET 72 +#define GPR14_OFFSET 76 +#define GPR15_OFFSET 80 +#define GPR16_OFFSET 84 +#define GPR17_OFFSET 88 +#define GPR18_OFFSET 92 +#define GPR19_OFFSET 96 +#define GPR20_OFFSET 100 +#define GPR21_OFFSET 104 +#define GPR22_OFFSET 108 +#define GPR23_OFFSET 112 +#define GPR24_OFFSET 116 +#define GPR25_OFFSET 120 +#define GPR26_OFFSET 124 +#define GPR27_OFFSET 128 +#define GPR28_OFFSET 132 +#define GPR29_OFFSET 136 +#define GPR30_OFFSET 140 +#define GPR31_OFFSET 144 + +#define GQR0_OFFSET 148 +#define GQR1_OFFSET 152 +#define GQR2_OFFSET 156 +#define GQR3_OFFSET 160 +#define GQR4_OFFSET 164 +#define GQR5_OFFSET 168 +#define GQR6_OFFSET 172 +#define GQR7_OFFSET 176 + +#define CR_OFFSET 180 +#define LR_OFFSET 184 +#define CTR_OFFSET 188 +#define XER_OFFSET 192 +#define MSR_OFFSET 196 +#define DAR_OFFSET 200 + +#define STATE_OFFSET 204 +#define MODE_OFFSET 206 + +#define FPR0_OFFSET 208 +#define FPR1_OFFSET 216 +#define FPR2_OFFSET 224 +#define FPR3_OFFSET 232 +#define FPR4_OFFSET 240 +#define FPR5_OFFSET 248 +#define FPR6_OFFSET 256 +#define FPR7_OFFSET 264 +#define FPR8_OFFSET 272 +#define FPR9_OFFSET 280 +#define FPR10_OFFSET 288 +#define FPR11_OFFSET 296 +#define FPR12_OFFSET 304 +#define FPR13_OFFSET 312 +#define FPR14_OFFSET 320 +#define FPR15_OFFSET 328 +#define FPR16_OFFSET 336 +#define FPR17_OFFSET 344 +#define FPR18_OFFSET 352 +#define FPR19_OFFSET 360 +#define FPR20_OFFSET 368 +#define FPR21_OFFSET 376 +#define FPR22_OFFSET 384 +#define FPR23_OFFSET 392 +#define FPR24_OFFSET 400 +#define FPR25_OFFSET 408 +#define FPR26_OFFSET 416 +#define FPR27_OFFSET 424 +#define FPR28_OFFSET 432 +#define FPR29_OFFSET 440 +#define FPR30_OFFSET 448 +#define FPR31_OFFSET 456 + +#define FPSCR_OFFSET 464 + +#define PSR0_OFFSET 472 +#define PSR1_OFFSET 480 +#define PSR2_OFFSET 488 +#define PSR3_OFFSET 496 +#define PSR4_OFFSET 504 +#define PSR5_OFFSET 512 +#define PSR6_OFFSET 520 +#define PSR7_OFFSET 528 +#define PSR8_OFFSET 536 +#define PSR9_OFFSET 544 +#define PSR10_OFFSET 552 +#define PSR11_OFFSET 560 +#define PSR12_OFFSET 568 +#define PSR13_OFFSET 576 +#define PSR14_OFFSET 584 +#define PSR15_OFFSET 592 +#define PSR16_OFFSET 600 +#define PSR17_OFFSET 608 +#define PSR18_OFFSET 616 +#define PSR19_OFFSET 624 +#define PSR20_OFFSET 632 +#define PSR21_OFFSET 640 +#define PSR22_OFFSET 648 +#define PSR23_OFFSET 656 +#define PSR24_OFFSET 664 +#define PSR25_OFFSET 672 +#define PSR26_OFFSET 680 +#define PSR27_OFFSET 688 +#define PSR28_OFFSET 696 +#define PSR29_OFFSET 704 +#define PSR30_OFFSET 712 +#define PSR31_OFFSET 720 +/* + * maintain the EABI requested 8 bytes aligment + * As SVR4 ABI requires 16, make it 16 (as some + * exception may need more registers to be processed...) + */ +#define EXCEPTION_FRAME_END 728 + +#define IBAT0U 528 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 +#define IBAT4U 560 +#define IBAT4L 561 +#define IBAT5U 562 +#define IBAT5L 563 +#define IBAT6U 564 +#define IBAT6L 565 +#define IBAT7U 566 +#define IBAT7L 567 + +#define DBAT0U 536 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 538 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 +#define DBAT3L 543 +#define DBAT4U 568 +#define DBAT4L 569 +#define DBAT5U 570 +#define DBAT5L 571 +#define DBAT6U 572 +#define DBAT6L 573 +#define DBAT7U 574 +#define DBAT7L 575 + +#define HID0 1008 +#define HID1 1009 +#define HID2 920 +#define HID4 1011 + +#define GQR0 912 +#define GQR1 913 +#define GQR2 914 +#define GQR3 915 +#define GQR4 916 +#define GQR5 917 +#define GQR6 918 +#define GQR7 919 + +#define L2CR 1017 + +#define WPAR 921 + +#define DMAU 922 +#define DMAL 923 + +#define MSR_RI 0x00000002 +#define MSR_DR 0x00000010 +#define MSR_IR 0x00000020 +#define MSR_IP 0x00000040 +#define MSR_SE 0x00000400 +#define MSR_ME 0x00001000 +#define MSR_FP 0x00002000 +#define MSR_POW 0x00004000 +#define MSR_EE 0x00008000 + +#define PPC_ALIGNMENT 8 + +#define PPC_CACHE_ALIGNMENT 32 + +#endif //__ASM_H__ diff --git a/channel/channelapp/source/blob.c b/channel/channelapp/source/blob.c new file mode 100644 index 0000000..8d2fbdf --- /dev/null +++ b/channel/channelapp/source/blob.c @@ -0,0 +1,84 @@ +#include +#include + +#include "../config.h" +#include "debug.h" +#include "panic.h" +#include "blob.h" + +#define MAX_BLOBS 8 +#define BLOB_MINSLACK (512*1024) + +typedef struct { + void *the_blob; + size_t blob_size; + void *old_arena2hi; +} blob_t; + +blob_t blobs[MAX_BLOBS]; +int num_blobs = 0; + +// supports only stack-type allocs (free last alloced) +void *blob_alloc(size_t size) +{ + u32 level; + u32 addr; + void *old_arena2hi; + + _CPU_ISR_Disable(level); + if (num_blobs >= MAX_BLOBS) { + _CPU_ISR_Restore(level); + gprintf("too many blobs\n"); + panic(); + } + + old_arena2hi = SYS_GetArena2Hi(); + addr = (((u32)old_arena2hi) - size) & (~0x1f); + + if (addr < (BLOB_MINSLACK + (u32)SYS_GetArena2Lo())) { + _CPU_ISR_Restore(level); + return NULL; + } + + blobs[num_blobs].old_arena2hi = old_arena2hi; + blobs[num_blobs].the_blob = (void*)addr; + blobs[num_blobs].blob_size = size; + num_blobs++; + + SYS_SetArena2Hi((void*)addr); + _CPU_ISR_Restore(level); + gprintf("allocated blob size %d at 0x%08lx\n", size, addr); + return (void*)addr; +} + +void blob_free(void *p) +{ + u32 level; + if (!p) + return; + + _CPU_ISR_Disable(level); + + if (num_blobs == 0) { + _CPU_ISR_Restore(level); + gprintf("blob_free with no blobs\n"); + panic(); + } + + num_blobs--; + if (p != blobs[num_blobs].the_blob) { + _CPU_ISR_Restore(level); + gprintf("mismatched blob_free (%p != %p)\n", p, blobs[num_blobs].the_blob); + panic(); + } + if (SYS_GetArena2Hi() != p) { + _CPU_ISR_Restore(level); + gprintf("someone else used MEM2 (%p != %p)\n", p, SYS_GetArena2Hi()); + panic(); + } + + SYS_SetArena2Hi(blobs[num_blobs].old_arena2hi); + _CPU_ISR_Restore(level); + gprintf("freed blob size %d at %p\n", blobs[num_blobs].blob_size, p); +} + diff --git a/channel/channelapp/source/blob.h b/channel/channelapp/source/blob.h new file mode 100644 index 0000000..f355a40 --- /dev/null +++ b/channel/channelapp/source/blob.h @@ -0,0 +1,9 @@ +#ifndef _BLOB_H_ +#define _BLOB_H_ + +#include + +void *blob_alloc(size_t size); +void blob_free(void *p); + +#endif diff --git a/channel/channelapp/source/browser.c b/channel/channelapp/source/browser.c new file mode 100644 index 0000000..abdaad2 --- /dev/null +++ b/channel/channelapp/source/browser.c @@ -0,0 +1,330 @@ +#include +#include +#include +#include + +#include +#include + +#include "../config.h" +#include "theme.h" +#include "view.h" +#include "controls.h" +#include "i18n.h" + +#include "browser.h" + +#define AE_OFFSET 4 +#define TRANS_STEPS 20 +#define MAX_COLUMNS 4 +#define ROWS 5 + +static bool first_set = true; +static u16 top_offset = 0; + +static view *v_browser = NULL; + +static int columns_current = 1; +static int columns_new = 1; + +static bool inited_widgets = false; + +view * browser_init(void) { + v_browser = view_new (AE_OFFSET + (MAX_COLUMNS * ROWS * 2), NULL, + 0, 0, 0, 0); + browser_theme_reinit(); + + return v_browser; +} + +void browser_deinit(void) { + view_free(v_browser); + inited_widgets = false; + v_browser = NULL; +} + +void browser_theme_reinit(void) { + int i; + if (inited_widgets) + for (i = 0; i < v_browser->widget_count; ++i) + widget_free(&v_browser->widgets[i]); + + widget_image (&v_browser->widgets[0], 24, 192, 0, + theme_gfx[THEME_ARROW_LEFT], NULL, true, + theme_gfx[THEME_ARROW_LEFT_FOCUS]); + widget_image (&v_browser->widgets[1], + view_width - 24 - theme_gfx[THEME_ARROW_RIGHT]->w, 192, 0, + theme_gfx[THEME_ARROW_RIGHT], NULL, true, + theme_gfx[THEME_ARROW_RIGHT_FOCUS]); + widget_image (&v_browser->widgets[2], + view_width - 32 - theme_gfx[THEME_GECKO_ACTIVE]->w - + theme_gfx[THEME_LAN_ACTIVE]->w, 412, 0, + theme_gfx[THEME_GECKO_ACTIVE], theme_gfx[THEME_GECKO], + false, NULL); + widget_image (&v_browser->widgets[3], + view_width - 32 - theme_gfx[THEME_GECKO_ACTIVE]->w, 412, 0, + theme_gfx[THEME_LAN_ACTIVE], theme_gfx[THEME_LAN], + false, NULL); + widget_set_flag (&v_browser->widgets[2], WF_ENABLED, false); + widget_set_flag (&v_browser->widgets[3], WF_ENABLED, false); + + widget_set_flag (&v_browser->widgets[0], WF_VISIBLE, false); + widget_set_flag (&v_browser->widgets[1], WF_VISIBLE, false); + + inited_widgets = true; +} + +static void browser_set_top_offset(const app_entry *app) { + u32 i; + + if (!app || (entry_count < 1)) { + top_offset = 0; + return; + } + + for (i = 0; i < entry_count; ++i) + if (entries[i] == app) { + top_offset = i; + break; + } + + top_offset /= columns_new * ROWS; + top_offset *= columns_new * ROWS; + + if (top_offset > entry_count - 1) + top_offset -= columns_new * ROWS; +} +void browser_gen_view(browser_action action, const app_entry *app) { + bool less, more; + app_entry *entry; + s8 focus; + + u32 i, j; + u16 y; + + u8 o1, o2; + s16 xal, xar, x1, x2; + float xm; + float vala = 0; + float val1[MAX_COLUMNS * ROWS]; + float val2[MAX_COLUMNS * ROWS]; + float stepa = M_TWOPI / TRANS_STEPS; + float step = M_PI / (TRANS_STEPS - 6); + s16 s; + float f1, f2; + + switch (action) { + case BA_REMOVE: + break; + + case BA_ADD: + case BA_REFRESH: + browser_set_top_offset(app); + break; + + case BA_NEXT: + if (entry_count <= top_offset + (columns_new * ROWS)) + return; + top_offset += columns_current * ROWS; + break; + + case BA_PREV: + if (top_offset < 1) + return; + if (top_offset < columns_current * ROWS) + return; + top_offset -= columns_current * ROWS; + break; + } + + if (action == BA_REMOVE) { + less = false; + more = false; + } else { + less = top_offset > 0; + more = entry_count > top_offset + (columns_new * ROWS); + } + + memset(val1, 0, sizeof(float) * MAX_COLUMNS * ROWS); + memset(val2, 0, sizeof(float) * MAX_COLUMNS * ROWS); + + if (first_set) { + o1 = AE_OFFSET; + o2 = AE_OFFSET + (MAX_COLUMNS * ROWS); + } else { + o1 = AE_OFFSET + (MAX_COLUMNS * ROWS); + o2 = AE_OFFSET; + } + + first_set = !first_set; + focus = o2; + + xal = v_browser->widgets[0].coords.x; + xar = v_browser->widgets[1].coords.x; + + if (columns_current == 1) + x1 = (view_width - theme_gfx[THEME_APP_ENTRY]->w) / 2; + else + x1 = (view_width - (theme_gfx[THEME_GRID_APP_ENTRY]->w * + columns_current)) / 2; + + if (columns_new == 1) + x2 = (view_width - theme_gfx[THEME_APP_ENTRY]->w) / 2; + else + x2 = (view_width - (theme_gfx[THEME_GRID_APP_ENTRY]->w * + columns_new)) / 2; + + if (action == BA_PREV) { + xm = view_width / 2; + x2 = -view_width + x2; + } else { + xm = -view_width / 2; + x2 = view_width + x2; + } + + y = 64; + + for (i = 0; i < (MAX_COLUMNS * ROWS); ++i) + widget_free(&v_browser->widgets[o2 + i]); + + if (action != BA_REMOVE) + for (i = 0; i < (columns_new * ROWS); ++i) { + if (entry_count > top_offset + i) { + entry = entries[top_offset + i]; + + if (entry && (entry == app)) + focus += i; + + if (columns_new == 1) + widget_app_entry(&v_browser->widgets[o2 + i], + x2, y, 0, entry); + else + widget_grid_app_entry(&v_browser->widgets[o2 + i], + x2 + ((i % columns_new) * + theme_gfx[THEME_GRID_APP_ENTRY]->w), + y, 0, entry); + } + + if (((i+1) % columns_new) == 0) + y += theme_gfx[THEME_APP_ENTRY]->h; + } + + for (i = 0; i < TRANS_STEPS; ++i) { + vala += stepa; + s = roundf (156.0 * (cosf (vala) - 1)); + + // adjust L/R button positions + v_browser->widgets[0].coords.x = xal + s; + v_browser->widgets[1].coords.x = xar - s; + + for (j = 0; j < MAX_COLUMNS * ROWS; ++j) { + if ((i > j / columns_current) && + (i < TRANS_STEPS - (ROWS - j / columns_current))) + val1[j] += step; + if ((i > j / columns_new) && + (i < TRANS_STEPS - (ROWS - j / columns_new))) + val2[j] += step; + + f1 = roundf (xm * (cosf (val1[j]) - 1)); + f2 = roundf (xm * (cosf (val2[j]) - 1)); + + v_browser->widgets[o1 + j].coords.x = x1 - f1 + + ((j % columns_current) * theme_gfx[THEME_GRID_APP_ENTRY]->w); + v_browser->widgets[o2 + j].coords.x = x2 - f2 + + ((j % columns_new) * theme_gfx[THEME_GRID_APP_ENTRY]->w); + } + + view_plot (v_browser, 0, NULL, NULL, NULL); + + if (i == TRANS_STEPS / 2) { + widget_set_flag (&v_browser->widgets[0], WF_VISIBLE, true); + widget_set_flag (&v_browser->widgets[1], WF_VISIBLE, true); + widget_set_flag (&v_browser->widgets[0], WF_VISIBLE, less); + widget_set_flag (&v_browser->widgets[1], WF_VISIBLE, more); + + view_set_focus (v_browser, focus); + } + } + + for (i = 0; i < (MAX_COLUMNS * ROWS); ++i) + widget_free(&v_browser->widgets[o1 + i]); + + columns_current = columns_new; + + if (action == BA_REMOVE) + top_offset = 0; +} + +void browser_set_focus(u32 bd) { + if (columns_current == 1) { + if (bd & PADS_UP) { + view_set_focus_prev(v_browser); + return; + } + + if (bd & PADS_DOWN) { + view_set_focus_next(v_browser); + return; + } + + return; + } else { + if (bd & PADS_LEFT) { + view_set_focus_prev(v_browser); + return; + } + + if (bd & PADS_RIGHT) { + view_set_focus_next(v_browser); + return; + } + + if (bd & PADS_UP) { + view_move_focus(v_browser, -columns_current); + return; + } + + if (bd & PADS_DOWN) { + view_move_focus(v_browser, columns_current); + return; + } + + return; + } +} + +app_entry *browser_sel(void) { + if ((entry_count < 1) || (v_browser->focus < AE_OFFSET)) + return NULL; + + u32 i; + if (first_set) + i = top_offset + v_browser->focus - AE_OFFSET; + else + i = top_offset + v_browser->focus - (MAX_COLUMNS * ROWS) - AE_OFFSET; + + return entries[i]; +} + +void browser_switch_mode(void) { + const app_entry *app = browser_sel(); + int mode = 0; + + if (columns_current == 1) { + if (widescreen) + columns_new = 4; + else + columns_new = 3; + + mode = 1; + } else { + columns_new = 1; + } + + if (v_browser) + browser_gen_view(BA_REFRESH, app); + + if (settings.browse_mode != mode) + settings.browse_mode = mode; +} + diff --git a/channel/channelapp/source/browser.h b/channel/channelapp/source/browser.h new file mode 100644 index 0000000..07b23b1 --- /dev/null +++ b/channel/channelapp/source/browser.h @@ -0,0 +1,26 @@ +#ifndef _BROWSER_H_ +#define _BROWSER_H_ + +#include + +#include "view.h" + +typedef enum { + BA_ADD = 0, + BA_REMOVE, + BA_REFRESH, + BA_NEXT, + BA_PREV +} browser_action; + +view * browser_init(void); +void browser_deinit(void); +void browser_theme_reinit(void); + +void browser_gen_view(browser_action action, const app_entry *app); +void browser_set_focus(u32 bd); +app_entry *browser_sel(void); +void browser_switch_mode(void); + +#endif + diff --git a/channel/channelapp/source/bubbles.c b/channel/channelapp/source/bubbles.c new file mode 100644 index 0000000..19ead4e --- /dev/null +++ b/channel/channelapp/source/bubbles.c @@ -0,0 +1,233 @@ +#include +#include + +#include "../config.h" +#include "gfx.h" +#include "theme.h" + +#include "bubbles.h" + +#include + +#define BUBBLE_DELTA (MAX_BUBBLE_COUNT-MIN_BUBBLE_COUNT) + +typedef struct { + float x; + float py; + float speed; + float xm; + float val; + float step; + int popped; + int popcnt; + int tex; +} bubble; + +static gfx_entity *tex_bubbles[3]; + +static gfx_queue_entry entries_bubbles[MAX_BUBBLE_COUNT]; +static gfx_queue_entry entries_sub_bubbles[MAX_BUBBLE_COUNT][BUBBLE_POP_MAX]; + +static bubble bubbles[MAX_BUBBLE_COUNT]; +static bubble sub_bubbles[MAX_BUBBLE_COUNT][BUBBLE_POP_MAX]; + +static int bubble_count = -1; + +static void bubble_rand(int i) { + int tex; + + tex = IRAND (3); + + bubbles[i].x = IRAND (view_width); + bubbles[i].py = view_height + IRAND (200); + bubbles[i].speed = 1.2 + FRAND (4 - tex); + bubbles[i].xm = 3.0 + (IRAND ((tex + 1)) * bubbles[i].speed); + bubbles[i].val = 0; + bubbles[i].step = M_TWOPI / (64 + FRAND (64.0)); + bubbles[i].popped = 0; + bubbles[i].popcnt = 0; + bubbles[i].tex = tex; + + gfx_qe_entity(&entries_bubbles[i], tex_bubbles[tex], bubbles[i].x, + bubbles[i].py, -2, COL_DEFAULT); + + entries_bubbles[i].entity.scale = BUBBLE_SIZE_MIN + + FRAND (BUBBLE_SIZE_MAX - BUBBLE_SIZE_MIN); + entries_bubbles[i].entity.rad = FRAND (M_PI_4); +} + +static void bubble_update_count(void) { + static int div = 0; + s32 minute; + static int new_count; + int t; + + // time() might be expensive due to RTC reading + // so slow it down a bit + if ((div++ >= 600) || (bubble_count < 0)) { + div = 0; + t = time(NULL); + minute = (t / 60 - BUBBLE_MIN_TIME) % BUBBLE_TIME_CYCLE; + + if (minute <= BUBBLE_MAX_OFFSET) + new_count = (BUBBLE_DELTA * minute / BUBBLE_MAX_OFFSET) + + MIN_BUBBLE_COUNT; + else + new_count = (BUBBLE_DELTA * (BUBBLE_TIME_CYCLE - minute) / + (BUBBLE_TIME_CYCLE - BUBBLE_MAX_OFFSET)) + + MIN_BUBBLE_COUNT; + + if (new_count < MIN_BUBBLE_COUNT) // should never happen + new_count = MIN_BUBBLE_COUNT; + + if (new_count > MAX_BUBBLE_COUNT) // should never happen + new_count = MAX_BUBBLE_COUNT; + } + + if (((div % 6) == 0) || (bubble_count < 0)) { + if (bubble_count < 0) + bubble_count = 0; + if (bubble_count < new_count) { + while (bubble_count < new_count) + bubble_rand(bubble_count++); + } else if (bubble_count > new_count) + bubble_count--; + } +} + +static void bubble_pop(int i) { + int j; + bubbles[i].popped = 1; + bubbles[i].popcnt = IRAND(BUBBLE_POP_MAX - BUBBLE_POP_MIN) + BUBBLE_POP_MIN; + entries_bubbles[i].entity.color = 0x00000000; + + for (j = 0; j < bubbles[i].popcnt; j++) { + int tex; + float sa; + float dx,dy; + + sa = FRAND(M_TWOPI); + dx = sin(sa) * FRAND(BUBBLE_POP_SPREAD_X); + dy = (cos(sa) - 1.5) * FRAND(BUBBLE_POP_SPREAD_Y); + + tex = bubbles[i].tex; + + sub_bubbles[i][j].x = bubbles[i].x + dx; + sub_bubbles[i][j].py = entries_bubbles[i].entity.coords.y + dy; + sub_bubbles[i][j].speed = bubbles[i].speed - 0.5 + FRAND (4 - tex); + sub_bubbles[i][j].xm = bubbles[i].xm * (0.8 + FRAND(1.0)); + sub_bubbles[i][j].val = bubbles[i].val; + sub_bubbles[i][j].step = bubbles[i].step * (0.8 + FRAND(0.4)); + sub_bubbles[i][j].popped = 0; + sub_bubbles[i][j].popcnt = 0; + + gfx_qe_entity (&entries_sub_bubbles[i][j], tex_bubbles[tex], + sub_bubbles[i][j].x, sub_bubbles[i][j].py, + -2, COL_DEFAULT); + + entries_sub_bubbles[i][j].entity.scale = (BUBBLE_POP_SIZE_MIN + + FRAND (BUBBLE_POP_SIZE_MAX - BUBBLE_POP_SIZE_MIN)) * + entries_bubbles[i].entity.scale; + entries_sub_bubbles[i][j].entity.rad = entries_bubbles[i].entity.rad; + } +} + +void bubbles_init(void) { + srand (gettime ()); + bubbles_theme_reinit(); + bubble_update_count(); +} + +void bubbles_deinit(void) { +} + +void bubbles_theme_reinit(void) { + tex_bubbles[0] = theme_gfx[THEME_BUBBLE1]; + tex_bubbles[1] = theme_gfx[THEME_BUBBLE2]; + tex_bubbles[2] = theme_gfx[THEME_BUBBLE3]; + + bubble_count = -1; + bubble_update_count(); +} + +void bubble_update(bool wm, s32 x, s32 y) { + int i, j, deadcnt; + gfx_coordinates *coords; + f32 radius; + + bubble_update_count(); + + for (i = 0; i < bubble_count; ++i) { + coords = &entries_bubbles[i].entity.coords; + radius = entries_bubbles[i].entity.scale * + entries_bubbles[i].entity.entity->w / 2 * BUBBLE_POP_RADIUS; + if (!bubbles[i].popped && wm) { + float cx = coords->x + entries_bubbles[i].entity.entity->w/2; + float cy = coords->y - entries_bubbles[i].entity.entity->h/2; + if ((abs(x - cx) < radius) && (abs(y - cy) < radius)) + bubble_pop(i); + } + + if (bubbles[i].popped) { + deadcnt = 0; + + for (j = 0; j < bubbles[i].popcnt; j++) { + coords = &entries_sub_bubbles[i][j].entity.coords; + radius = entries_sub_bubbles[i][j].entity.scale * + entries_sub_bubbles[i][j].entity.entity->w / 2 * + BUBBLE_POP_RADIUS; + + if (!sub_bubbles[i][j].popped && wm) { + float cx = coords->x + entries_bubbles[i].entity.entity->w/2; + float cy = coords->y - entries_bubbles[i].entity.entity->h/2; + if ((abs(x - cx) < radius) && (abs(y - cy) < radius)) { + entries_sub_bubbles[i][j].entity.color = 0x00000000; + sub_bubbles[i][j].popped = 1; + } + } + + sub_bubbles[i][j].py -= sub_bubbles[i][j].speed; + coords->y = sub_bubbles[i][j].py; + + if ((coords->y < -100) || sub_bubbles[i][j].popped) { + deadcnt++; + continue; + } + + coords->x = sub_bubbles[i][j].x + roundf (sub_bubbles[i][j].xm * + sinf (sub_bubbles[i][j].val)); + sub_bubbles[i][j].val += sub_bubbles[i][j].step; + } + + if(deadcnt >= bubbles[i].popcnt) { + bubble_rand(i); + continue; + } + + gfx_frame_push (entries_sub_bubbles[i], bubbles[i].popcnt); + } else { + bubbles[i].py -= bubbles[i].speed; + coords->y = bubbles[i].py; + + if (coords->y < -100) { + bubble_rand(i); + continue; + } + + coords->x = bubbles[i].x + roundf (bubbles[i].xm * + sinf (bubbles[i].val)); + bubbles[i].val += bubbles[i].step; + } + } + + gfx_frame_push(entries_bubbles, bubble_count); +} + +void bubble_popall(void) { + int i; + + for (i = 0; i < bubble_count; ++i) + if (!bubbles[i].popped) + bubble_pop(i); +} + diff --git a/channel/channelapp/source/bubbles.h b/channel/channelapp/source/bubbles.h new file mode 100644 index 0000000..d13048d --- /dev/null +++ b/channel/channelapp/source/bubbles.h @@ -0,0 +1,15 @@ +#ifndef _BUBBLES_H_ +#define _BUBBLES_H_ + +#include + +void bubbles_init(void); +void bubbles_deinit(void); +void bubbles_theme_reinit(void); + +void bubble_update(bool wm, s32 x, s32 y); + +void bubble_popall(void); + +#endif + diff --git a/channel/channelapp/source/controls.c b/channel/channelapp/source/controls.c new file mode 100644 index 0000000..e3f18eb --- /dev/null +++ b/channel/channelapp/source/controls.c @@ -0,0 +1,240 @@ +#include +#include +#include + +#include +#include + +#include "../config.h" + +#include "controls.h" +#include "gfx.h" + +static s32 pointer_owner = -1; +WPADData *wpads[WPAD_MAX_WIIMOTES]; + +static int rumbling = 0; + +void controls_init (void) { + int i; + + i = WPAD_Init (); + + if(i < 0) { + gprintf("WPAD_Init failed: %d\n",i); + return; + } + + for(i=0;iexp.type) { + case WPAD_EXP_NUNCHUK: + if(btns & WPAD_NUNCHUK_BUTTON_Z) + btns |= PADW_BUTTON_NET_INIT; + if(btns & WPAD_NUNCHUK_BUTTON_C) + btns |= PADW_BUTTON_SCREENSHOT; + break; + case WPAD_EXP_CLASSIC: + if(btns & WPAD_CLASSIC_BUTTON_LEFT) + btns |= WPAD_BUTTON_LEFT; + if(btns & WPAD_CLASSIC_BUTTON_RIGHT) + btns |= WPAD_BUTTON_RIGHT; + if(btns & WPAD_CLASSIC_BUTTON_UP) + btns |= WPAD_BUTTON_UP; + if(btns & WPAD_CLASSIC_BUTTON_DOWN) + btns |= WPAD_BUTTON_DOWN; + if(btns & WPAD_CLASSIC_BUTTON_A) + btns |= WPAD_BUTTON_A; + if(btns & WPAD_CLASSIC_BUTTON_B) + btns |= WPAD_BUTTON_B; + if(btns & WPAD_CLASSIC_BUTTON_X) + btns |= WPAD_BUTTON_1; + if(btns & WPAD_CLASSIC_BUTTON_Y) + btns |= WPAD_BUTTON_2; + if((btns & WPAD_CLASSIC_BUTTON_FULL_L) || (btns & WPAD_CLASSIC_BUTTON_MINUS)) + btns |= WPAD_BUTTON_MINUS; + if((btns & WPAD_CLASSIC_BUTTON_FULL_R) || (btns & WPAD_CLASSIC_BUTTON_PLUS)) + btns |= WPAD_BUTTON_PLUS; + if(btns & WPAD_CLASSIC_BUTTON_HOME) + btns |= WPAD_BUTTON_HOME; + if(btns & WPAD_CLASSIC_BUTTON_ZR) + btns |= PADW_BUTTON_NET_INIT; + if(btns & WPAD_CLASSIC_BUTTON_ZL) + btns |= PADW_BUTTON_SCREENSHOT; + break; + case WPAD_EXP_GUITARHERO3: + if(btns & WPAD_GUITAR_HERO_3_BUTTON_STRUM_UP) + btns |= WPAD_BUTTON_UP; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_STRUM_DOWN) + btns |= WPAD_BUTTON_DOWN; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_GREEN) + btns |= WPAD_BUTTON_A; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_RED) + btns |= WPAD_BUTTON_B; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_PLUS) + btns |= WPAD_BUTTON_PLUS; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_MINUS) + btns |= WPAD_BUTTON_MINUS; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_YELLOW) + btns |= WPAD_BUTTON_LEFT; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_BLUE) + btns |= WPAD_BUTTON_RIGHT; + if(btns & WPAD_GUITAR_HERO_3_BUTTON_ORANGE) + btns |= WPAD_BUTTON_1; + break; + } + return (btns&0xffff) << 16; +} + +void controls_scan (u32 *down, u32 *held, u32 *up) { + u32 bd, bh, bu; + int i; + s32 last_owner; + + PAD_ScanPads (); + + bd = PAD_ButtonsDown (0); + bh = PAD_ButtonsHeld (0); + bu = PAD_ButtonsUp (0); + + WPAD_ScanPads (); + + for(i=0;i= 0) && (!wpads[pointer_owner] || !wpads[pointer_owner]->ir.valid)) { + pointer_owner = -1; + } + + // find a new pointer owner if necessary + if(pointer_owner < 0) { + for(i=0;iir.valid) { + pointer_owner = i; + break; + } + } + } + + // pointer owner owns buttons + if(pointer_owner >= 0) { + bd |= wpad_button_transform(wpads[pointer_owner], wpads[pointer_owner]->btns_d); + bh |= wpad_button_transform(wpads[pointer_owner], wpads[pointer_owner]->btns_h); + bu |= wpad_button_transform(wpads[pointer_owner], wpads[pointer_owner]->btns_u); + } else { + // otherwise just mix all buttons together + for(i=0;ibtns_d); + bh |= wpad_button_transform(wpads[i], wpads[i]->btns_h); + bu |= wpad_button_transform(wpads[i], wpads[i]->btns_u); + } + } + } + + if(last_owner >= 0 && last_owner != pointer_owner && rumbling) { + WPAD_Rumble (last_owner, 0); + if(pointer_owner >= 0) + WPAD_Rumble(pointer_owner, 1); + } + + if (down) + *down = bd; + + if (held) + *held = bh; + + if (up) + *up = bu; +} + +bool controls_ir (s32 *x, s32 *y, f32 *roll) { + if (pointer_owner >= 0 && wpads[pointer_owner] && wpads[pointer_owner]->ir.valid) { + *x = wpads[pointer_owner]->ir.x - 64; + *y = wpads[pointer_owner]->ir.y - 64; + + if(roll) + *roll = -wpads[pointer_owner]->ir.angle / 180.0 * M_PI; + return true; + } else { + return false; + } +} + +void controls_rumble(int rumble) { + if(pointer_owner >= 0) + WPAD_Rumble(pointer_owner, rumble); + rumbling = rumble; +} + +static s32 wpad_sticky(int chan) { + s32 sy = 0; + if(wpads[chan]) { + switch(wpads[chan]->exp.type) { + case WPAD_EXP_NUNCHUK: + sy = wpads[chan]->exp.nunchuk.js.pos.y - wpads[chan]->exp.nunchuk.js.center.y; + break; + case WPAD_EXP_CLASSIC: + sy = (wpads[chan]->exp.classic.ljs.pos.y - wpads[chan]->exp.classic.ljs.center.y) * 4; + break; + case WPAD_EXP_GUITARHERO3: + sy = (wpads[chan]->exp.gh3.js.pos.y - wpads[chan]->exp.gh3.js.center.y) * 4; + break; + } + } + return sy; +} + +#define DEADZONE 10 + +s32 deadzone(s32 v) { + if(v > DEADZONE) + return v - DEADZONE; + if(v < -DEADZONE) + return v + DEADZONE; + return 0; +} + +s32 controls_sticky(void) { + s32 sy; + int i; + sy = deadzone(PAD_StickY(0)); + if(pointer_owner >= 0) { + sy += deadzone(wpad_sticky(pointer_owner)); + } else { + for(i=0;i +#include + +// fake wiimote buttons for mapping extension buttons +#define PADW_BUTTON_NET_INIT 0x2000 +#define PADW_BUTTON_SCREENSHOT 0x4000 + +#define PADS_A (PAD_BUTTON_A | (WPAD_BUTTON_A << 16)) +#define PADS_B (PAD_BUTTON_B | (WPAD_BUTTON_B << 16)) +#define PADS_MINUS (PAD_TRIGGER_L | (WPAD_BUTTON_MINUS << 16)) +#define PADS_PLUS (PAD_TRIGGER_R | (WPAD_BUTTON_PLUS << 16)) +#define PADS_1 (PAD_BUTTON_X | (WPAD_BUTTON_1 << 16)) +#define PADS_2 (PAD_BUTTON_Y | (WPAD_BUTTON_2 << 16)) +#define PADS_HOME (PAD_BUTTON_START | (WPAD_BUTTON_HOME << 16)) +#define PADS_UP (PAD_BUTTON_UP | (WPAD_BUTTON_UP << 16)) +#define PADS_DOWN (PAD_BUTTON_DOWN | (WPAD_BUTTON_DOWN << 16)) +#define PADS_LEFT (PAD_BUTTON_LEFT | (WPAD_BUTTON_LEFT << 16)) +#define PADS_RIGHT (PAD_BUTTON_RIGHT | (WPAD_BUTTON_RIGHT << 16)) +#define PADS_DPAD (PADS_UP | PADS_DOWN | PADS_LEFT | PADS_RIGHT) +#define PADS_NET_INIT (PAD_TRIGGER_Z | (PADW_BUTTON_NET_INIT << 16)) +#define PADS_SCREENSHOT (PADW_BUTTON_SCREENSHOT << 16) + +void controls_init (void); +void controls_deinit (void); + +void controls_scan (u32 *down, u32 *held, u32 *up); +bool controls_ir (s32 *x, s32 *y, f32 *roll); +void controls_rumble(int rumble); +s32 controls_sticky(void); +void controls_set_ir_threshold(int on); + +#endif + diff --git a/channel/channelapp/source/cursors.c b/channel/channelapp/source/cursors.c new file mode 100644 index 0000000..babe56c --- /dev/null +++ b/channel/channelapp/source/cursors.c @@ -0,0 +1,55 @@ +#include "../config.h" + +#include + +#include "cursor_drag_png.h" +#include "cursor_drag_shade_png.h" +#include "cursor_pic_png.h" +#include "cursor_shade_png.h" + +#include "cursors.h" + +static cursor cursors[CUR_MAX]; + +void cursors_init (void) { + cursors[CUR_STD].tex[0] = tex_from_png (cursor_shade_png, + cursor_shade_png_size, 96,96); + cursors[CUR_STD].tex[1] = tex_from_png (cursor_pic_png, cursor_pic_png_size, + 96, 96); + + cursors[CUR_STD].hotspot_x = cursors[CUR_STD].tex[1]->w / 2; + cursors[CUR_STD].hotspot_y = cursors[CUR_STD].tex[1]->h / 2; + + cursors[CUR_DRAG].tex[0] = tex_from_png (cursor_drag_shade_png, + cursor_drag_shade_png_size, + 96, 96); + cursors[CUR_DRAG].tex[1] = tex_from_png (cursor_drag_png, + cursor_drag_png_size, 96, 96); + cursors[CUR_DRAG].hotspot_x = cursors[CUR_DRAG].tex[1]->w / 2; + cursors[CUR_DRAG].hotspot_y = cursors[CUR_DRAG].tex[1]->h / 2; +} + +void cursors_deinit (void) { + u8 i; + + for (i = 0; i < CUR_MAX; ++i) { + tex_free (cursors[i].tex[0]); + tex_free (cursors[i].tex[1]); + } +} + +void cursors_queue (gfx_queue_entry *queue, cursor_type type, s16 x, s16 y, + f32 roll) { + gfx_qe_entity (&queue[0], cursors[type].tex[0], + x - cursors[type].hotspot_x + 2, + y - cursors[type].hotspot_y + 4, TEX_LAYER_CURSOR, + COL_DEFAULT); + gfx_qe_entity (&queue[1], cursors[type].tex[1], + x - cursors[type].hotspot_x, + y - cursors[type].hotspot_y, TEX_LAYER_CURSOR + 1, + COL_DEFAULT); + + queue[0].entity.rad = roll; + queue[1].entity.rad = roll; +} + diff --git a/channel/channelapp/source/cursors.h b/channel/channelapp/source/cursors.h new file mode 100644 index 0000000..e02d709 --- /dev/null +++ b/channel/channelapp/source/cursors.h @@ -0,0 +1,28 @@ +#ifndef _CURSORS_H_ +#define _CURSORS_H_ + +#include + +#include "gfx.h" +#include "tex.h" + +typedef enum { + CUR_STD = 0, + CUR_DRAG, + + CUR_MAX +} cursor_type; + +typedef struct { + gfx_entity *tex[2]; + + s16 hotspot_x, hotspot_y; +} cursor; + +void cursors_init (void); +void cursors_deinit (void); +void cursors_queue (gfx_queue_entry *queue, cursor_type type, s16 x, s16 y, + f32 roll); + +#endif + diff --git a/channel/channelapp/source/debug.c b/channel/channelapp/source/debug.c new file mode 100644 index 0000000..014ff31 --- /dev/null +++ b/channel/channelapp/source/debug.c @@ -0,0 +1,88 @@ +#include +#include + +#include +#include + +#include "../config.h" + +#ifdef DEBUG_APP + +//#define DEBUG_MEMSTATS + +static int gprintf_enabled = 1; + +void gprintf_enable(int enable) { + gprintf_enabled = enable; +} + +int gprintf(const char *format, ...) +{ + va_list ap; + u32 level; + int ret; + + if (!gprintf_enabled) + return 0; + + level = IRQ_Disable(); + va_start(ap, format); + ret = vprintf(format, ap); + va_end(ap); + IRQ_Restore(level); + + return ret; +} + +/********* you know you love it **********/ +static char ascii(char s) { + if(s < 0x20) return '.'; + if(s > 0x7E) return '.'; + return s; +} + +void hexdump(const void *d, int len) { + u8 *data; + int i, off; + data = (u8*)d; + for (off=0; off=len) gprintf(" "); + else gprintf("%02x ",data[off+i]); + + gprintf(" "); + for(i=0; i<16; i++) + if((i+off)>=len) gprintf(" "); + else gprintf("%c",ascii(data[off+i])); + gprintf("\n"); + } +} +/********* you know you love it **********/ + +#ifndef UINT_MAX +#define UINT_MAX ((u32)((s32)-1)) +#endif +void memstats(int reset) { +#ifdef DEBUG_MEMSTATS + static u32 min_free = UINT_MAX; + static u32 temp_free; + static u32 level; + + if (reset) + min_free = UINT_MAX; + + _CPU_ISR_Disable(level); + + temp_free = (u32) SYS_GetArena2Hi() - (u32) SYS_GetArena2Lo(); + + _CPU_ISR_Restore(level); + + if (temp_free < min_free) { + min_free = temp_free; + gprintf("MEM2 free: %8u\n", min_free); + } +#endif +} + +#endif diff --git a/channel/channelapp/source/dialogs.c b/channel/channelapp/source/dialogs.c new file mode 100644 index 0000000..f0aa48d --- /dev/null +++ b/channel/channelapp/source/dialogs.c @@ -0,0 +1,623 @@ +#include +#include +#include +#include + +#include + +#include "../config.h" +#include "controls.h" +#include "theme.h" +#include "font.h" +#include "widgets.h" +#include "view.h" +#include "xml.h" +#include "panic.h" + +#include "dialogs.h" + +#include "i18n.h" + +#define TRANS_STEPS 15 + +static const char *app_entry_desc_default; + +static const char *caption_info; +static const char *caption_confirm; +static const char *caption_warning; +static const char *caption_error; +static const char *caption_ok; +static const char *caption_cancel; +static const char *caption_yes; +static const char *caption_no; +static const char *caption_delete; +static const char *caption_load; +static const char *caption_back; +static const char *caption_options; +static const char *caption_device; +static const char *caption_device_names[DEVICE_COUNT]; +static const char *caption_sort_by; +static const char *caption_sort_name; +static const char *caption_sort_date; + +static const char *l_version; +static const char *l_coder; + +static const char *string_about_pre; +static const char *string_about_post; +static const char *string_about_trans; +static const char *string_about_theme; +static char *string_about_gen; + +void dialogs_theme_reinit (void) { + app_entry_desc_default = _("no description available"); + + caption_info = _("Information"); + caption_confirm = _("Confirmation"); + caption_warning = _("Warning"); + caption_error = _("Error"); + caption_ok = _("Ok"); + caption_cancel = _("Cancel"); + caption_yes = _("Yes"); + caption_no = _("No"); + caption_delete = _("Delete"); + caption_load = _("Load"); + caption_back = _("Back"); + caption_options = _("Options"); + caption_device = _("Device:"); + caption_device_names[0] = _("Internal SD Slot"); + caption_device_names[1] = _("USB device"); + caption_device_names[2] = _("SDGecko Slot A"); + caption_device_names[3] = _("SDGecko Slot B"); + caption_sort_by = _("Sort applications by:"); + caption_sort_name = _("Name"); + caption_sort_date = _("Date"); + + string_about_pre = + "Credits\n\n" + + "The Homebrew Channel was made possible by the following people:\n\n" + + "dhewg (EWRONGCHAN) - application code, geckoloader code\n" + "blasty (ESTONED) - application code\n" + "marcan (EFAILURE) - reload stub, banner, installer, packaging\n" + "bushing (EWANTPONY) - socket code, loader code\n" + "segher (EBUGFOUND) - nandloader stub code\n" + "souLLy (ENOTHERE) - banner graphics\n" + "drmr (EMORECOWBELL) - banner audio, channel graphics\n" + "mha (E404) - update server and hosting"; + + string_about_post = + "Powered by devkitPPC and libogc, by shagkur, WinterMute, " + "and everyone else who contributed\n\n" + + "Thanks to all the beta testers\n\n" + + "Kind regards to the following people too:\n\n" + + "sepp256 - dropped some good GX hints\n" + "chishm, svpe, rodries, hermes - libfat port\n" + "alien - some graphics\n" + "jodi - the lulz\n\n" + + "And last but not least, thanks to the authors of the following libraries:\n\n" + + "wiiuse - para's Wiimote library, now integrated with libogc\n" + "libpng - the official PNG library\n" + "Mini-XML - small and efficient XML parsing library\n" + "FreeType - the free TrueType/OpenType font renderer\n"; + + string_about_trans = _(" translation by "); + + if (!i18n_have_mo()) + string_about_trans = ""; + + string_about_theme = _("Theme:"); + + if (string_about_gen) + free(string_about_gen); + + string_about_gen = pmalloc(strlen(string_about_pre) + + strlen(string_about_post) + + strlen(string_about_trans) + + strlen(string_about_theme) + 128); + + l_version = _("Version: %s"); + l_coder = _("Author: %s"); +} + +void dialogs_init (void) { + string_about_gen = NULL; + dialogs_theme_reinit(); +} + +void dialogs_deinit (void) { + free(string_about_gen); +} + +void dialog_fade (view *v, bool fade_in) { + float val; + float step; + s16 y; + float yf; + u32 c; + u8 stepa; + u8 i; + + if (fade_in) { + val = 0; + step = M_PI / (2 * TRANS_STEPS); + y = v->coords.y + view_height; + c = DIALOG_MASK_COLOR & 0xffffff00; + stepa = (DIALOG_MASK_COLOR & 0xff) / TRANS_STEPS; + } else { + val = M_PI; + step = M_PI / (2 * TRANS_STEPS); + y = v->coords.y; + c = DIALOG_MASK_COLOR; + stepa = -(DIALOG_MASK_COLOR & 0xff) / TRANS_STEPS; + } + + yf = view_height; + + for (i = 0; i < TRANS_STEPS; ++i) { + v->coords.y = y - roundf (yf * sinf (val)); + val += step; + c += stepa; + + view_plot (v, c, NULL, NULL, NULL); + } +} + +view * dialog_app (const app_entry *entry, const view *sub_view) { + view *v; + u16 x, gap; + char *name; + char coder[64]; + char version[64]; + const char *desc; + u16 ym, hm, yb; + + if (entry->meta && entry->meta->name) + name = entry->meta->name; + else + name = entry->dirname; + + if (entry->meta && entry->meta->coder) + snprintf (coder, sizeof (coder), l_coder, entry->meta->coder); + else + *coder = 0; + + if (entry->meta && entry->meta->version) + snprintf (version, sizeof (version), l_version, entry->meta->version); + else + *version = 0; + + if (entry->meta && entry->meta->long_description) + desc = entry->meta->long_description; + else + desc = app_entry_desc_default; + + v = view_new (11, sub_view, (view_width - theme_gfx[THEME_DIALOG]->w) / 2, + 44, TEX_LAYER_DIALOGS, PADS_B); + + widget_image(&v->widgets[0], 0, 0, 0, theme_gfx[THEME_DIALOG], + NULL, false, NULL); + + widget_label (&v->widgets[1], 32, 16, 1, name, + theme_gfx[THEME_DIALOG]->w - 64, FA_CENTERED, FA_ASCENDER, + FONT_DLGTITLE); + + if (entry->icon) + widget_image(&v->widgets[2], 32, 48, 1, entry->icon, NULL, false, NULL); + + widget_label (&v->widgets[3], 48 + APP_ENTRY_ICON_WIDTH, 72, 1, version, + theme_gfx[THEME_DIALOG]->w - 72 - APP_ENTRY_ICON_WIDTH, + FA_LEFT, FA_DESCENDER, FONT_LABEL); + + widget_label (&v->widgets[4], 48 + APP_ENTRY_ICON_WIDTH, 72, 1, coder, + theme_gfx[THEME_DIALOG]->w - 72 - APP_ENTRY_ICON_WIDTH, + FA_LEFT, FA_ASCENDER, FONT_LABEL); + + yb = theme_gfx[THEME_DIALOG]->h - theme_gfx[THEME_BUTTON_TINY]->h - 16; + ym = 48 + APP_ENTRY_ICON_HEIGHT + 8; + hm = yb - ym - 8; + + widget_memo_deco (&v->widgets[5], 32, ym, 1, + theme_gfx[THEME_DIALOG]->w - 64, hm, desc, FA_LEFT); + + gap = (theme_gfx[THEME_DIALOG]->w - + theme_gfx[THEME_BUTTON_TINY]->w * 3) / 4; + + x = gap; + widget_button (&v->widgets[8], x, yb, 1, BTN_TINY, caption_delete); + + x += gap + theme_gfx[THEME_BUTTON_TINY]->w; + widget_button (&v->widgets[9], x, yb, 1, BTN_TINY, caption_load); + + x += gap + theme_gfx[THEME_BUTTON_TINY]->w; + widget_button (&v->widgets[10], x, yb, 1, BTN_TINY, caption_back); + + view_set_focus (v, 10); + + return v; +} + +view * dialog_progress (const view *sub_view, const char *caption, u32 max) { + view *v; + + v = view_new (1, sub_view, (view_width - theme_gfx[THEME_PROGRESS]->w) / 2, + (view_height - theme_gfx[THEME_PROGRESS]->h) / 2, + TEX_LAYER_DIALOGS, 0); + + widget_progress (&v->widgets[0], 0, 0, 0, caption, max); + widget_set_progress (&v->widgets[0], 0); + + return v; +} + +void dialog_set_progress (const view *v, u32 progress) { + widget_set_progress (&v->widgets[0], progress); +} + +view * dialog_about (const view *sub_view) { + view *v; + u16 ym, hm, yb, hmn; + u8 l, hf; + + strcpy(string_about_gen, string_about_pre); + if (string_about_trans && strlen(string_about_trans)) { + strcat(string_about_gen, "\n\n"); + strcat(string_about_gen, string_about_trans); + } + + if (theme.description && strlen(theme.description)) { + strcat(string_about_gen, "\n\n"); + strcat(string_about_gen, string_about_theme); + strcat(string_about_gen, " "); + strcat(string_about_gen, theme.description); + } + + strcat(string_about_gen, "\n\n"); + strcat(string_about_gen, string_about_post); + + v = view_new (3, sub_view, (view_width - theme_gfx[THEME_DIALOG]->w) / 2, + 44, TEX_LAYER_DIALOGS, 0); + + widget_image (&v->widgets[0], 0, 0, 0, theme_gfx[THEME_DIALOG], + NULL, false, NULL); + + widget_image (&v->widgets[1], (theme_gfx[THEME_DIALOG]->w - + theme_gfx[THEME_ABOUT]->w) / 2, 16, 1, + theme_gfx[THEME_ABOUT], NULL, false, NULL); + + yb = theme_gfx[THEME_DIALOG]->h - 16; + ym = 16 + theme_gfx[THEME_ABOUT]->h + 8; + hm = yb - ym - 8; + hf = font_get_y_spacing(FONT_MEMO); + l = hm / hf; + hmn = l * hf; + + if (hmn < hm) { + ym += (hm - hmn) / 2; + hm = hmn; + } + + widget_memo (&v->widgets[2], 32, ym, 1, theme_gfx[THEME_DIALOG]->w - 64, + hm, string_about_gen, FA_CENTERED); + + v->widgets[2].cur = CUR_STD; + + return v; +} + +static view *dialog_message(const view *sub_view, dialog_message_type type, + dialog_message_buttons buttons, const char *text, + u8 focus) { + view *v; + u8 c; + u16 x, gap; + const char *caption = NULL, *b1 = NULL, *b2 = NULL; + u16 ym, hm, yb; + u8 hf; + gfx_entity *icon = NULL; + + c = 6; + switch (buttons) { + case DLGB_OK: + c++; + break; + + case DLGB_OKCANCEL: + case DLGB_YESNO: + c += 2; + break; + } + + v = view_new (c, sub_view, (view_width - theme_gfx[THEME_DIALOG]->w) / 2, + 44, TEX_LAYER_DIALOGS, PADS_B); + + widget_image (&v->widgets[0], 0, 0, 0, theme_gfx[THEME_DIALOG], + NULL, false, NULL); + + switch (type) { + case DLGMT_INFO: + caption = caption_info; + icon = theme_gfx[THEME_DLG_INFO]; + break; + + case DLGMT_CONFIRM: + caption = caption_confirm; + icon = theme_gfx[THEME_DLG_CONFIRM]; + break; + + case DLGMT_WARNING: + caption = caption_warning; + icon = theme_gfx[THEME_DLG_WARNING]; + break; + + case DLGMT_ERROR: + caption = caption_error; + icon = theme_gfx[THEME_DLG_ERROR]; + break; + } + + widget_image (&v->widgets[1], 128, 24, 0, icon, NULL, false, NULL); + widget_label (&v->widgets[2], 32, 32, 1, caption, + theme_gfx[THEME_DIALOG]->w - 64, FA_CENTERED, FA_ASCENDER, + FONT_DLGTITLE); + + hf = font_get_height (FONT_DLGTITLE); + yb = theme_gfx[THEME_DIALOG]->h - theme_gfx[THEME_BUTTON_SMALL]->h - 32; + ym = 32 + hf + 8; + hm = yb - ym - 8; + + widget_memo_deco (&v->widgets[3], 32, ym, 1, + theme_gfx[THEME_DIALOG]->w - 64, hm, text, FA_CENTERED); + + switch (buttons) { + case DLGB_OK: + b1 = caption_ok; + b2 = NULL; + break; + + case DLGB_OKCANCEL: + b1 = caption_ok; + b2 = caption_cancel; + break; + + case DLGB_YESNO: + b1 = caption_yes; + b2 = caption_no; + break; + } + + if (b2) { + gap = (theme_gfx[THEME_DIALOG]->w - + theme_gfx[THEME_BUTTON_SMALL]->w * 2) / 3; + + x = gap; + widget_button (&v->widgets[6], x, yb, 1, BTN_SMALL, b1); + + x += gap + theme_gfx[THEME_BUTTON_SMALL]->w; + widget_button (&v->widgets[7], x, yb, 1, BTN_SMALL, b2); + } else { + gap = (theme_gfx[THEME_DIALOG]->w - + theme_gfx[THEME_BUTTON_SMALL]->w) / 2; + + x = gap; + widget_button (&v->widgets[6], x, yb, 1, BTN_SMALL, b1); + } + + view_set_focus (v, 6 + focus); + + return v; +} + +s8 show_message (const view *sub_view, dialog_message_type type, + dialog_message_buttons buttons, const char *text, u8 focus) { + view *v; + u8 fhw; + u32 bd; + s8 res; + s16 mm; + + v = dialog_message (sub_view, type, buttons, text, focus); + + dialog_fade (v, true); + + fhw = font_get_y_spacing(FONT_MEMO); + + while (true) { + view_plot (v, DIALOG_MASK_COLOR, &bd, NULL, NULL); + + if (bd & PADS_LEFT) + view_set_focus_prev (v); + + if (bd & PADS_RIGHT) + view_set_focus_next (v); + + mm = 0; + if (bd & PADS_UP) + mm += fhw; + + if (bd & PADS_DOWN) + mm -= fhw; + + mm += controls_sticky() / 8; + + if (v->drag && (v->drag_widget == 4)) + mm += -v->drag_y / 32; + + widget_scroll_memo_deco (&v->widgets[3], mm); + + if ((bd & PADS_A) && (v->focus != -1)) + break; + } + + res = v->focus - 6; + + dialog_fade (v, false); + + view_free (v); + + return res; +} + +#define DLG_DEV_FIRST 4 + +dialog_options_result show_options_dialog(const view *sub_view) { + u32 frame = 0; + view *v; + dialog_options_result ret; + int device; + app_sort sort; + bool status[DEVICE_COUNT]; + u32 i, bd; + + app_entry_poll_status(true); + + v = view_new (12, sub_view, (view_width - theme_gfx[THEME_DIALOG]->w) / 2, + 44, TEX_LAYER_DIALOGS, PADS_B); + + widget_image (&v->widgets[0], 0, 0, 0, theme_gfx[THEME_DIALOG], + NULL, false, NULL); + widget_label (&v->widgets[1], 32, 16, 1, caption_options, + theme_gfx[THEME_DIALOG]->w - 64, FA_CENTERED, FA_ASCENDER, FONT_DLGTITLE); + + widget_label (&v->widgets[2], 32, 60, 1, caption_device, + theme_gfx[THEME_DIALOG]->w - 64, FA_LEFT, FA_DESCENDER, FONT_LABEL); + widget_label (&v->widgets[3], 32, 212, 1, caption_sort_by, + theme_gfx[THEME_DIALOG]->w - 64, FA_LEFT, FA_DESCENDER, FONT_LABEL); + + widget_button (&v->widgets[4], 52, 64, 1, BTN_SMALL, NULL); + widget_button (&v->widgets[5], 268, 64, 1, BTN_SMALL, NULL); + widget_button (&v->widgets[6], 52, 128, 1, BTN_SMALL, NULL); + widget_button (&v->widgets[7], 268, 128, 1, BTN_SMALL, NULL); + + widget_button (&v->widgets[8], 52, 216, 1, BTN_SMALL, NULL); + widget_button (&v->widgets[9], 268, 216, 1, BTN_SMALL, NULL); + + widget_button (&v->widgets[10], 32, + theme_gfx[THEME_DIALOG]->h - + theme_gfx[THEME_BUTTON_SMALL]->h - 16 , 1, BTN_SMALL, + caption_ok); + widget_button (&v->widgets[11], theme_gfx[THEME_DIALOG]->w - + theme_gfx[THEME_BUTTON_SMALL]->w - 32, + theme_gfx[THEME_DIALOG]->h - + theme_gfx[THEME_BUTTON_SMALL]->h - 16 , 1, BTN_SMALL, + caption_back); + + device = app_entry_get_status(status); + sort = app_entry_get_sort(); + + ret.confirmed = false; + ret.device = device; + ret.sort = sort; + + for (i = 0; i < DEVICE_COUNT; ++i) { + if (i == device) + widget_button_set_caption(&v->widgets[DLG_DEV_FIRST + i], + FONT_BUTTON, + caption_device_names[i]); + else + widget_button_set_caption(&v->widgets[DLG_DEV_FIRST + i], + FONT_BUTTON_DESEL, + caption_device_names[i]); + + widget_set_flag (&v->widgets[DLG_DEV_FIRST + i], WF_ENABLED, status[i]); + } + + if (ret.sort == APP_SORT_DATE) { + widget_button_set_caption(&v->widgets[8], + FONT_BUTTON_DESEL, + caption_sort_name); + widget_button_set_caption(&v->widgets[9], + FONT_BUTTON, + caption_sort_date); + } else { + widget_button_set_caption(&v->widgets[8], + FONT_BUTTON, + caption_sort_name); + widget_button_set_caption(&v->widgets[9], + FONT_BUTTON_DESEL, + caption_sort_date); + } + + view_set_focus (v, 11); + + dialog_fade (v, true); + + while (true) { + app_entry_get_status(status); + + for (i = 0; i < DEVICE_COUNT; ++i) + widget_set_flag (&v->widgets[DLG_DEV_FIRST + i], WF_ENABLED, + status[i]); + + view_plot (v, DIALOG_MASK_COLOR, &bd, NULL, NULL); + frame++; + + if (bd & PADS_LEFT) + view_set_focus_prev (v); + + if (bd & PADS_RIGHT) + view_set_focus_next (v); + + if (bd & PADS_UP) + if (v->focus == view_move_focus(v, -2)) + view_move_focus(v, -4); + + if (bd & PADS_DOWN) + if (v->focus == view_move_focus(v, 2)) + view_move_focus(v, 4); + + if (bd & (PADS_B | PADS_1)) + break; + + if ((bd & PADS_A) && (v->focus != -1)) { + if ((v->focus >= DLG_DEV_FIRST) && + (v->focus < DLG_DEV_FIRST + DEVICE_COUNT)) { + widget_button_set_caption(&v->widgets[DLG_DEV_FIRST + ret.device], + FONT_BUTTON_DESEL, + caption_device_names[ret.device]); + ret.device = v->focus - DLG_DEV_FIRST; + widget_button_set_caption(&v->widgets[DLG_DEV_FIRST + ret.device], + FONT_BUTTON, + caption_device_names[ret.device]); + } else if (v->focus == 8) { + ret.sort = APP_SORT_NAME; + widget_button_set_caption(&v->widgets[8], + FONT_BUTTON, + caption_sort_name); + widget_button_set_caption(&v->widgets[9], + FONT_BUTTON_DESEL, + caption_sort_date); + } else if (v->focus == 9) { + ret.sort = APP_SORT_DATE; + widget_button_set_caption(&v->widgets[8], + FONT_BUTTON_DESEL, + caption_sort_name); + widget_button_set_caption(&v->widgets[9], + FONT_BUTTON, + caption_sort_date); + } else if ((v->focus == 10) || (v->focus == 11)) { + break; + } + } + + if ((frame % 30) == 0) + app_entry_poll_status(false); + } + + if ((bd & PADS_A) && (v->focus == 10)) + ret.confirmed = true; + + dialog_fade (v, false); + + view_free (v); + + return ret; +} + + diff --git a/channel/channelapp/source/dialogs.h b/channel/channelapp/source/dialogs.h new file mode 100644 index 0000000..d29fddb --- /dev/null +++ b/channel/channelapp/source/dialogs.h @@ -0,0 +1,46 @@ +#ifndef _DIALOGS_H_ +#define _DIALOGS_H_ + +#include + +#include "gfx.h" +#include "view.h" + +typedef enum { + DLGMT_INFO = 0, + DLGMT_CONFIRM, + DLGMT_WARNING, + DLGMT_ERROR +} dialog_message_type; + +typedef enum { + DLGB_OK, + DLGB_OKCANCEL, + DLGB_YESNO +} dialog_message_buttons; + +typedef struct { + bool confirmed; + int device; + app_sort sort; +} dialog_options_result; + +extern u16 width_dialog, height_dialog; + +void dialogs_init (void); +void dialogs_theme_reinit (void); +void dialogs_deinit (void); + +void dialog_fade (view *v, bool fade_in); + +view * dialog_app (const app_entry *entry, const view *sub_view); +view * dialog_progress (const view *sub_view, const char *caption, u32 max); +void dialog_set_progress (const view *v, u32 progress); +view * dialog_about (const view *sub_view); + +s8 show_message (const view *sub_view, dialog_message_type type, + dialog_message_buttons buttons, const char *text, u8 focus); +dialog_options_result show_options_dialog(const view *sub_view); + +#endif + diff --git a/channel/channelapp/source/dvd.c b/channel/channelapp/source/dvd.c new file mode 100644 index 0000000..3d25632 --- /dev/null +++ b/channel/channelapp/source/dvd.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include + +#include "../config.h" + +static u32 inbuf[8] __attribute__((aligned(0x20))); +static u32 outbuf[8] __attribute__((aligned(0x20))); + +static s32 _dvd_fd = -1; + +static const char _dvd_path[] __attribute__((aligned(0x20))) = "/dev/di"; + +typedef enum { + WDVD_OPEN = 0, + WDVD_STOP, + WDVD_CLOSE, + WDVD_DONE +} wiidvd_state; + +static wiidvd_state _state; + +static s32 __WiiDVD_Callback(s32 result, void *userdata) +{ + s32 res = -1; + + switch (_state) { + case WDVD_OPEN: + _dvd_fd = result; + if (_dvd_fd < 0) + return 0; + + memset(inbuf, 0, 0x20); + inbuf[0x00] = 0xe3000000; + inbuf[0x01] = 0; + inbuf[0x02] = 0; + + _state = WDVD_STOP; + res = IOS_IoctlAsync( _dvd_fd, 0xe3, inbuf, 0x20, outbuf, 0x20, + __WiiDVD_Callback, NULL); + break; + + case WDVD_STOP: + _state = WDVD_CLOSE; + res = IOS_CloseAsync(_dvd_fd, __WiiDVD_Callback, NULL); + break; + + case WDVD_CLOSE: + _dvd_fd = -1; + _state = WDVD_DONE; + res = 0; + break; + + default: + break; + } + + return res; +} + +s32 WiiDVD_StopMotorAsync(void) { + _state = WDVD_OPEN; + + gprintf("starting DVD motor stop callback chain\n"); + return IOS_OpenAsync(_dvd_path, 0, __WiiDVD_Callback, NULL); +} + +void WiiDVD_ShutDown(void) { + s32 fd = _dvd_fd; + + if (fd > 0) { + _dvd_fd = -1; + _state = WDVD_DONE; + IOS_Close(fd); + gprintf("killed DVD motor stop callback chain\n"); + } +} + diff --git a/channel/channelapp/source/dvd.h b/channel/channelapp/source/dvd.h new file mode 100644 index 0000000..53cb727 --- /dev/null +++ b/channel/channelapp/source/dvd.h @@ -0,0 +1,10 @@ +#ifndef _DVD_H_ +#define _DVD_H_ + +#include + +s32 WiiDVD_StopMotorAsync(void); +void WiiDVD_ShutDown(void); + +#endif + diff --git a/channel/channelapp/source/ecdsa.c b/channel/channelapp/source/ecdsa.c new file mode 100644 index 0000000..46eee59 --- /dev/null +++ b/channel/channelapp/source/ecdsa.c @@ -0,0 +1,413 @@ +// Copyright 2007-2009 Segher Boessenkool +// Licensed under the terms of the GNU GPL, version 2 +// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + +#include + +#include + +#include "sha1.h" +#include "ecdsa.h" + +#include "../config.h" + +#ifdef ENABLE_UPDATES + +// order of the addition group of points +static u8 ec_N[30] = + "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x13\xe9\x74\xe7\x2f\x8a\x69\x22\x03\x1d\x26\x03\xcf\xe0\xd7"; + +// base point +static u8 ec_G[60] = + "\x00\xfa\xc9\xdf\xcb\xac\x83\x13\xbb\x21\x39\xf1\xbb\x75\x5f" + "\xef\x65\xbc\x39\x1f\x8b\x36\xf8\xf8\xeb\x73\x71\xfd\x55\x8b" + "\x01\x00\x6a\x08\xa4\x19\x03\x35\x06\x78\xe5\x85\x28\xbe\xbf" + "\x8a\x0b\xef\xf8\x67\xa7\xca\x36\x71\x6f\x7e\x01\xf8\x10\x52"; + +static const u8 square[16] = + "\x00\x01\x04\x05\x10\x11\x14\x15\x40\x41\x44\x45\x50\x51\x54\x55"; + +static void bn_zero(u8 *d, u32 n) +{ + memset(d, 0, n); +} + +static void bn_copy(u8 *d, const u8 *a, u32 n) +{ + memcpy(d, a, n); +} + +static int bn_compare(const u8 *a, const u8 *b, u32 n) +{ + u32 i; + + for (i = 0; i < n; i++) { + if (a[i] < b[i]) + return -1; + if (a[i] > b[i]) + return 1; + } + + return 0; +} + +static void bn_sub_modulus(u8 *a, const u8 *N, u32 n) +{ + u32 i; + u32 dig; + u8 c; + + c = 0; + for (i = n - 1; i < n; i--) { + dig = N[i] + c; + c = (a[i] < dig); + a[i] -= dig; + } +} + +static void bn_add(u8 *d, const u8 *a, const u8 *b, const u8 *N, u32 n) +{ + u32 i; + u32 dig; + u8 c; + + c = 0; + for (i = n - 1; i < n; i--) { + dig = a[i] + b[i] + c; + c = (dig >= 0x100); + d[i] = dig; + } + + if (c) + bn_sub_modulus(d, N, n); + + if (bn_compare(d, N, n) >= 0) + bn_sub_modulus(d, N, n); +} + +static void bn_mul(u8 *d, const u8 *a, const u8 *b, const u8 *N, u32 n) +{ + u32 i; + u8 mask; + + bn_zero(d, n); + + for (i = 0; i < n; i++) + for (mask = 0x80; mask != 0; mask >>= 1) { + bn_add(d, d, d, N, n); + if ((a[i] & mask) != 0) + bn_add(d, d, b, N, n); + } +} + +static void bn_exp(u8 *d, const u8 *a, const u8 *N, u32 n, const u8 *e, u32 en) +{ + u8 t[512]; + u32 i; + u8 mask; + + bn_zero(d, n); + d[n-1] = 1; + for (i = 0; i < en; i++) + for (mask = 0x80; mask != 0; mask >>= 1) { + bn_mul(t, d, d, N, n); + if ((e[i] & mask) != 0) + bn_mul(d, t, a, N, n); + else + bn_copy(d, t, n); + } +} + +// only for prime N -- stupid but lazy, see if I care +static void bn_inv(u8 *d, const u8 *a, const u8 *N, u32 n) +{ + u8 t[512], s[512]; + + bn_copy(t, N, n); + bn_zero(s, n); + s[n-1] = 2; + bn_sub_modulus(t, s, n); + bn_exp(d, a, N, n, t, n); +} + +static void elt_copy(u8 *d, const u8 *a) +{ + memcpy(d, a, 30); +} + +static void elt_zero(u8 *d) +{ + memset(d, 0, 30); +} + +static int elt_is_zero(const u8 *d) +{ + u32 i; + + for (i = 0; i < 30; i++) + if (d[i] != 0) + return 0; + + return 1; +} + +static void elt_add(u8 *d, u8 *a, const u8 *b) +{ + u32 i; + + for (i = 0; i < 30; i++) + d[i] = a[i] ^ b[i]; +} + +static void elt_mul_x(u8 *d, u8 *a) +{ + u8 carry, x, y; + u32 i; + + carry = a[0] & 1; + + x = 0; + for (i = 0; i < 29; i++) { + y = a[i + 1]; + d[i] = x ^ (y >> 7); + x = y << 1; + } + d[29] = x ^ carry; + + d[20] ^= carry << 2; +} + +static void elt_mul(u8 *d, u8 *a, u8 *b) +{ + u32 i, n; + u8 mask; + + elt_zero(d); + + i = 0; + mask = 1; + for (n = 0; n < 233; n++) { + elt_mul_x(d, d); + + if ((a[i] & mask) != 0) + elt_add(d, d, b); + + mask >>= 1; + if (mask == 0) { + mask = 0x80; + i++; + } + } +} + +static void elt_square_to_wide(u8 *d, u8 *a) +{ + u32 i; + + for (i = 0; i < 30; i++) { + d[2*i] = square[a[i] >> 4]; + d[2*i + 1] = square[a[i] & 15]; + } +} + +static void wide_reduce(u8 *d) +{ + u32 i; + u8 x; + + for (i = 0; i < 30; i++) { + x = d[i]; + + d[i + 19] ^= x >> 7; + d[i + 20] ^= x << 1; + + d[i + 29] ^= x >> 1; + d[i + 30] ^= x << 7; + } + + x = d[30] & ~1; + + d[49] ^= x >> 7; + d[50] ^= x << 1; + + d[59] ^= x >> 1; + + d[30] &= 1; +} + +static void elt_square(u8 *d, u8 *a) +{ + u8 wide[60]; + + elt_square_to_wide(wide, a); + wide_reduce(wide); + + elt_copy(d, wide + 30); +} + +static void itoh_tsujii(u8 *d, u8 *a, u8 *b, u32 j) +{ + u8 t[30]; + + elt_copy(t, a); + while (j--) { + elt_square(d, t); + elt_copy(t, d); + } + + elt_mul(d, t, b); +} + +static void elt_inv(u8 *d, u8 *a) +{ + u8 t[30]; + u8 s[30]; + + itoh_tsujii(t, a, a, 1); + itoh_tsujii(s, t, a, 1); + itoh_tsujii(t, s, s, 3); + itoh_tsujii(s, t, a, 1); + itoh_tsujii(t, s, s, 7); + itoh_tsujii(s, t, t, 14); + itoh_tsujii(t, s, a, 1); + itoh_tsujii(s, t, t, 29); + itoh_tsujii(t, s, s, 58); + itoh_tsujii(s, t, t, 116); + elt_square(d, s); +} + +static int point_is_zero(const u8 *p) +{ + return elt_is_zero(p) && elt_is_zero(p + 30); +} + +static void point_double(u8 *r, u8 *p) +{ + u8 s[30], t[30]; + u8 *px, *py, *rx, *ry; + + px = p; + py = p + 30; + rx = r; + ry = r + 30; + + if (elt_is_zero(px)) { + elt_zero(rx); + elt_zero(ry); + + return; + } + + elt_inv(t, px); + elt_mul(s, py, t); + elt_add(s, s, px); + + elt_square(t, px); + + elt_square(rx, s); + elt_add(rx, rx, s); + rx[29] ^= 1; + + elt_mul(ry, s, rx); + elt_add(ry, ry, rx); + elt_add(ry, ry, t); +} + +static void point_add(u8 *r, u8 *p, const u8 *q) +{ + u8 s[30], t[30], u[30]; + u8 *px, *py, *rx, *ry; + const u8 *qx, *qy; + + px = p; + py = p + 30; + qx = q; + qy = q + 30; + rx = r; + ry = r + 30; + + if (point_is_zero(p)) { + elt_copy(rx, qx); + elt_copy(ry, qy); + return; + } + + if (point_is_zero(q)) { + elt_copy(rx, px); + elt_copy(ry, py); + return; + } + + elt_add(u, px, qx); + + if (elt_is_zero(u)) { + elt_add(u, py, qy); + if (elt_is_zero(u)) + point_double(r, p); + else { + elt_zero(rx); + elt_zero(ry); + } + + return; + } + + elt_inv(t, u); + elt_add(u, py, qy); + elt_mul(s, t, u); + + elt_square(t, s); + elt_add(t, t, s); + elt_add(t, t, qx); + t[29] ^= 1; + + elt_mul(u, s, t); + elt_add(s, u, py); + elt_add(rx, t, px); + elt_add(ry, s, rx); +} + +static void point_mul(u8 *d, u8 *a, const u8 *b) // a is bignum +{ + u32 i; + u8 mask; + + elt_zero(d); + elt_zero(d + 30); + + for (i = 0; i < 30; i++) + for (mask = 0x80; mask != 0; mask >>= 1) { + point_double(d, d); + if ((a[i] & mask) != 0) + point_add(d, d, b); + } +} + +int check_ecdsa(const u8 *Q, u8 *R, u8 *S, u8 *hash) +{ + u8 Sinv[30]; + u8 e[30]; + u8 w1[30], w2[30]; + u8 r1[60], r2[60]; + + bn_inv(Sinv, S, ec_N, 30); + + elt_zero(e); + memcpy(e + 10, hash, 20); + + bn_mul(w1, e, Sinv, ec_N, 30); + bn_mul(w2, R, Sinv, ec_N, 30); + + point_mul(r1, w1, ec_G); + point_mul(r2, w2, Q); + + point_add(r1, r1, r2); + + if (bn_compare(r1, ec_N, 30) >= 0) + bn_sub_modulus(r1, ec_N, 30); + + return (bn_compare(r1, R, 30) == 0); +} + +#endif diff --git a/channel/channelapp/source/ecdsa.h b/channel/channelapp/source/ecdsa.h new file mode 100644 index 0000000..0b3a5f6 --- /dev/null +++ b/channel/channelapp/source/ecdsa.h @@ -0,0 +1,8 @@ +#ifndef _ECDSA_H_ +#define _ECDSA_H_ + +#include + +int check_ecdsa(const u8 *Q, u8 *R, u8 *S, u8 *hash); + +#endif diff --git a/channel/channelapp/source/elf_abi.h b/channel/channelapp/source/elf_abi.h new file mode 100644 index 0000000..c9e705e --- /dev/null +++ b/channel/channelapp/source/elf_abi.h @@ -0,0 +1,594 @@ +/* + * Copyright (c) 1995, 1996, 2001, 2002 + * Erik Theisen. All rights reserved. + * + * 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. + */ + +/* + * This is the ELF ABI header file + * formerly known as "elf_abi.h". + */ + +#ifndef _ELF_ABI_H +#define _ELF_ABI_H + +#include + +/* + * This version doesn't work for 64-bit ABIs - Erik. + */ + +/* + * These typedefs need to be handled better. + */ +typedef u32 Elf32_Addr; /* Unsigned program address */ +typedef u32 Elf32_Off; /* Unsigned file offset */ +typedef s32 Elf32_Sword; /* Signed large integer */ +typedef u32 Elf32_Word; /* Unsigned large integer */ +typedef u16 Elf32_Half; /* Unsigned medium integer */ + +/* e_ident[] identification indexes */ +#define EI_MAG0 0 /* file ID */ +#define EI_MAG1 1 /* file ID */ +#define EI_MAG2 2 /* file ID */ +#define EI_MAG3 3 /* file ID */ +#define EI_CLASS 4 /* file class */ +#define EI_DATA 5 /* data encoding */ +#define EI_VERSION 6 /* ELF header version */ +#define EI_OSABI 7 /* OS/ABI specific ELF extensions */ +#define EI_ABIVERSION 8 /* ABI target version */ +#define EI_PAD 9 /* start of pad bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* e_ident[] magic number */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" /* magic */ +#define SELFMAG 4 /* size of magic */ + +/* e_ident[] file class */ +#define ELFCLASSNONE 0 /* invalid */ +#define ELFCLASS32 1 /* 32-bit objs */ +#define ELFCLASS64 2 /* 64-bit objs */ +#define ELFCLASSNUM 3 /* number of classes */ + +/* e_ident[] data encoding */ +#define ELFDATANONE 0 /* invalid */ +#define ELFDATA2LSB 1 /* Little-Endian */ +#define ELFDATA2MSB 2 /* Big-Endian */ +#define ELFDATANUM 3 /* number of data encode defines */ + +/* e_ident[] OS/ABI specific ELF extensions */ +#define ELFOSABI_NONE 0 /* No extension specified */ +#define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */ +#define ELFOSABI_NETBSD 2 /* NetBSD */ +#define ELFOSABI_LINUX 3 /* Linux */ +#define ELFOSABI_SOLARIS 6 /* Sun Solaris */ +#define ELFOSABI_AIX 7 /* AIX */ +#define ELFOSABI_IRIX 8 /* IRIX */ +#define ELFOSABI_FREEBSD 9 /* FreeBSD */ +#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */ +#define ELFOSABI_MODESTO 11 /* Novell Modesto */ +#define ELFOSABI_OPENBSD 12 /* OpenBSD */ +/* 64-255 Architecture-specific value range */ + +/* e_ident[] ABI Version */ +#define ELFABIVERSION 0 + +/* e_ident */ +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ + (ehdr).e_ident[EI_MAG3] == ELFMAG3) + +/* ELF Header */ +typedef struct elfhdr{ + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ + Elf32_Half e_type; /* object file type */ + Elf32_Half e_machine; /* machine */ + Elf32_Word e_version; /* object file version */ + Elf32_Addr e_entry; /* virtual entry point */ + Elf32_Off e_phoff; /* program header table offset */ + Elf32_Off e_shoff; /* section header table offset */ + Elf32_Word e_flags; /* processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size */ + Elf32_Half e_phentsize; /* program header entry size */ + Elf32_Half e_phnum; /* number of program header entries */ + Elf32_Half e_shentsize; /* section header entry size */ + Elf32_Half e_shnum; /* number of section header entries */ + Elf32_Half e_shstrndx; /* section header table's "section + header string table" entry offset */ +} Elf32_Ehdr; + +/* e_type */ +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* relocatable file */ +#define ET_EXEC 2 /* executable file */ +#define ET_DYN 3 /* shared object file */ +#define ET_CORE 4 /* core file */ +#define ET_NUM 5 /* number of types */ +#define ET_LOOS 0xfe00 /* reserved range for operating */ +#define ET_HIOS 0xfeff /* system specific e_type */ +#define ET_LOPROC 0xff00 /* reserved range for processor */ +#define ET_HIPROC 0xffff /* specific e_type */ + +/* e_machine */ +#define EM_NONE 0 /* No Machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola 68000 */ +#define EM_88K 5 /* Motorola 88000 */ +#if 0 +#define EM_486 6 /* RESERVED - was Intel 80486 */ +#endif +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ +#define EM_S370 9 /* IBM System/370 Processor */ +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ +#if 0 +#define EM_SPARC64 11 /* RESERVED - was SPARC v9 + 64-bit unoffical */ +#endif +/* RESERVED 11-14 for future use */ +#define EM_PARISC 15 /* HPPA */ +/* RESERVED 16 for future use */ +#define EM_VPP500 17 /* Fujitsu VPP500 */ +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ +#define EM_960 19 /* Intel 80960 */ +#define EM_PPC 20 /* PowerPC */ +#define EM_PPC64 21 /* 64-bit PowerPC */ +#define EM_S390 22 /* IBM System/390 Processor */ +/* RESERVED 23-35 for future use */ +#define EM_V800 36 /* NEC V800 */ +#define EM_FR20 37 /* Fujitsu FR20 */ +#define EM_RH32 38 /* TRW RH-32 */ +#define EM_RCE 39 /* Motorola RCE */ +#define EM_ARM 40 /* Advanced Risc Machines ARM */ +#define EM_ALPHA 41 /* Digital Alpha */ +#define EM_SH 42 /* Hitachi SH */ +#define EM_SPARCV9 43 /* SPARC Version 9 */ +#define EM_TRICORE 44 /* Siemens TriCore embedded processor */ +#define EM_ARC 45 /* Argonaut RISC Core */ +#define EM_H8_300 46 /* Hitachi H8/300 */ +#define EM_H8_300H 47 /* Hitachi H8/300H */ +#define EM_H8S 48 /* Hitachi H8S */ +#define EM_H8_500 49 /* Hitachi H8/500 */ +#define EM_IA_64 50 /* Intel Merced */ +#define EM_MIPS_X 51 /* Stanford MIPS-X */ +#define EM_COLDFIRE 52 /* Motorola Coldfire */ +#define EM_68HC12 53 /* Motorola M68HC12 */ +#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/ +#define EM_PCP 55 /* Siemens PCP */ +#define EM_NCPU 56 /* Sony nCPU embeeded RISC */ +#define EM_NDR1 57 /* Denso NDR1 microprocessor */ +#define EM_STARCORE 58 /* Motorola Start*Core processor */ +#define EM_ME16 59 /* Toyota ME16 processor */ +#define EM_ST100 60 /* STMicroelectronic ST100 processor */ +#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ +#define EM_X86_64 62 /* AMD x86-64 */ +#define EM_PDSP 63 /* Sony DSP Processor */ +/* RESERVED 64,65 for future use */ +#define EM_FX66 66 /* Siemens FX66 microcontroller */ +#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ +#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ +#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ +#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ +#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ +#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ +#define EM_SVX 73 /* Silicon Graphics SVx */ +#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ +#define EM_VAX 75 /* Digital VAX */ +#define EM_CHRIS 76 /* Axis Communications embedded proc. */ +#define EM_JAVELIN 77 /* Infineon Technologies emb. proc. */ +#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ +#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX 80 /* Donald Knuth's edu 64-bit proc. */ +#define EM_HUANY 81 /* Harvard University mach-indep objs */ +#define EM_PRISM 82 /* SiTera Prism */ +#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ +#define EM_FR30 84 /* Fujitsu FR30 */ +#define EM_D10V 85 /* Mitsubishi DV10V */ +#define EM_D30V 86 /* Mitsubishi DV30V */ +#define EM_V850 87 /* NEC v850 */ +#define EM_M32R 88 /* Mitsubishi M32R */ +#define EM_MN10300 89 /* Matsushita MN10200 */ +#define EM_MN10200 90 /* Matsushita MN10200 */ +#define EM_PJ 91 /* picoJava */ +#define EM_NUM 92 /* number of machine types */ + +/* Version */ +#define EV_NONE 0 /* Invalid */ +#define EV_CURRENT 1 /* Current */ +#define EV_NUM 2 /* number of versions */ + +/* Section Header */ +typedef struct { + Elf32_Word sh_name; /* name - index into section header + string table section */ + Elf32_Word sh_type; /* type */ + Elf32_Word sh_flags; /* flags */ + Elf32_Addr sh_addr; /* address */ + Elf32_Off sh_offset; /* file offset */ + Elf32_Word sh_size; /* section size */ + Elf32_Word sh_link; /* section header table index link */ + Elf32_Word sh_info; /* extra information */ + Elf32_Word sh_addralign; /* address alignment */ + Elf32_Word sh_entsize; /* section entry size */ +} Elf32_Shdr; + +/* Special Section Indexes */ +#define SHN_UNDEF 0 /* undefined */ +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ +#define SHN_LOPROC 0xff00 /* reserved range for processor */ +#define SHN_HIPROC 0xff1f /* specific section indexes */ +#define SHN_LOOS 0xff20 /* reserved range for operating */ +#define SHN_HIOS 0xff3f /* specific semantics */ +#define SHN_ABS 0xfff1 /* absolute value */ +#define SHN_COMMON 0xfff2 /* common symbol */ +#define SHN_XINDEX 0xffff /* Index is an extra table */ +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ + +/* sh_type */ +#define SHT_NULL 0 /* inactive */ +#define SHT_PROGBITS 1 /* program defined information */ +#define SHT_SYMTAB 2 /* symbol table section */ +#define SHT_STRTAB 3 /* string table section */ +#define SHT_RELA 4 /* relocation section with addends*/ +#define SHT_HASH 5 /* symbol hash table section */ +#define SHT_DYNAMIC 6 /* dynamic section */ +#define SHT_NOTE 7 /* note section */ +#define SHT_NOBITS 8 /* no space section */ +#define SHT_REL 9 /* relation section without addends */ +#define SHT_SHLIB 10 /* reserved - purpose unknown */ +#define SHT_DYNSYM 11 /* dynamic symbol table section */ +#define SHT_INIT_ARRAY 14 /* Array of constructors */ +#define SHT_FINI_ARRAY 15 /* Array of destructors */ +#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ +#define SHT_GROUP 17 /* Section group */ +#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ +#define SHT_NUM 19 /* number of section types */ +#define SHT_LOOS 0x60000000 /* Start OS-specific */ +#define SHT_HIOS 0x6fffffff /* End OS-specific */ +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ +#define SHT_HIPROC 0x7fffffff /* specific section header types */ +#define SHT_LOUSER 0x80000000 /* reserved range for application */ +#define SHT_HIUSER 0xffffffff /* specific indexes */ + +/* Section names */ +#define ELF_BSS ".bss" /* uninitialized data */ +#define ELF_COMMENT ".comment" /* version control information */ +#define ELF_DATA ".data" /* initialized data */ +#define ELF_DATA1 ".data1" /* initialized data */ +#define ELF_DEBUG ".debug" /* debug */ +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ +#define ELF_FINI ".fini" /* termination code */ +#define ELF_FINI_ARRAY ".fini_array" /* Array of destructors */ +#define ELF_GOT ".got" /* global offset table */ +#define ELF_HASH ".hash" /* symbol hash table */ +#define ELF_INIT ".init" /* initialization code */ +#define ELF_INIT_ARRAY ".init_array" /* Array of constuctors */ +#define ELF_INTERP ".interp" /* Pathname of program interpreter */ +#define ELF_LINE ".line" /* Symbolic line numnber information */ +#define ELF_NOTE ".note" /* Contains note section */ +#define ELF_PLT ".plt" /* Procedure linkage table */ +#define ELF_PREINIT_ARRAY ".preinit_array" /* Array of pre-constructors */ +#define ELF_REL_DATA ".rel.data" /* relocation data */ +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ +#define ELF_REL_TEXT ".rel.text" /* relocation code */ +#define ELF_RODATA ".rodata" /* read-only data */ +#define ELF_RODATA1 ".rodata1" /* read-only data */ +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ +#define ELF_STRTAB ".strtab" /* string table */ +#define ELF_SYMTAB ".symtab" /* symbol table */ +#define ELF_SYMTAB_SHNDX ".symtab_shndx"/* symbol table section index */ +#define ELF_TBSS ".tbss" /* thread local uninit data */ +#define ELF_TDATA ".tdata" /* thread local init data */ +#define ELF_TDATA1 ".tdata1" /* thread local init data */ +#define ELF_TEXT ".text" /* code */ + +/* Section Attribute Flags - sh_flags */ +#define SHF_WRITE 0x1 /* Writable */ +#define SHF_ALLOC 0x2 /* occupies memory */ +#define SHF_EXECINSTR 0x4 /* executable */ +#define SHF_MERGE 0x10 /* Might be merged */ +#define SHF_STRINGS 0x20 /* Contains NULL terminated strings */ +#define SHF_INFO_LINK 0x40 /* sh_info contains SHT index */ +#define SHF_LINK_ORDER 0x80 /* Preserve order after combining*/ +#define SHF_OS_NONCONFORMING 0x100 /* Non-standard OS specific handling */ +#define SHF_GROUP 0x200 /* Member of section group */ +#define SHF_TLS 0x400 /* Thread local storage */ +#define SHF_MASKOS 0x0ff00000 /* OS specific */ +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific section attributes */ + +/* Section Group Flags */ +#define GRP_COMDAT 0x1 /* COMDAT group */ +#define GRP_MASKOS 0x0ff00000 /* Mask OS specific flags */ +#define GRP_MASKPROC 0xf0000000 /* Mask processor specific flags */ + +/* Symbol Table Entry */ +typedef struct elf32_sym { + Elf32_Word st_name; /* name - index into string table */ + Elf32_Addr st_value; /* symbol value */ + Elf32_Word st_size; /* symbol size */ + unsigned char st_info; /* type and binding */ + unsigned char st_other; /* 0 - no defined meaning */ + Elf32_Half st_shndx; /* section header index */ +} Elf32_Sym; + +/* Symbol table index */ +#define STN_UNDEF 0 /* undefined */ + +/* Extract symbol info - st_info */ +#define ELF32_ST_BIND(x) ((x) >> 4) +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) +#define ELF32_ST_VISIBILITY(x) ((x) & 0x3) + +/* Symbol Binding - ELF32_ST_BIND - st_info */ +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* like global - lower precedence */ +#define STB_NUM 3 /* number of symbol bindings */ +#define STB_LOOS 10 /* reserved range for operating */ +#define STB_HIOS 12 /* system specific symbol bindings */ +#define STB_LOPROC 13 /* reserved range for processor */ +#define STB_HIPROC 15 /* specific symbol bindings */ + +/* Symbol type - ELF32_ST_TYPE - st_info */ +#define STT_NOTYPE 0 /* not specified */ +#define STT_OBJECT 1 /* data object */ +#define STT_FUNC 2 /* function */ +#define STT_SECTION 3 /* section */ +#define STT_FILE 4 /* file */ +#define STT_NUM 5 /* number of symbol types */ +#define STT_TLS 6 /* Thread local storage symbol */ +#define STT_LOOS 10 /* reserved range for operating */ +#define STT_HIOS 12 /* system specific symbol types */ +#define STT_LOPROC 13 /* reserved range for processor */ +#define STT_HIPROC 15 /* specific symbol types */ + +/* Symbol visibility - ELF32_ST_VISIBILITY - st_other */ +#define STV_DEFAULT 0 /* Normal visibility rules */ +#define STV_INTERNAL 1 /* Processor specific hidden class */ +#define STV_HIDDEN 2 /* Symbol unavailable in other mods */ +#define STV_PROTECTED 3 /* Not preemptible, not exported */ + + +/* Relocation entry with implicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ +} Elf32_Rel; + +/* Relocation entry with explicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ + Elf32_Sword r_addend; +} Elf32_Rela; + +/* Extract relocation info - r_info */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char) (i)) +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) + +/* Program Header */ +typedef struct { + Elf32_Word p_type; /* segment type */ + Elf32_Off p_offset; /* segment offset */ + Elf32_Addr p_vaddr; /* virtual address of segment */ + Elf32_Addr p_paddr; /* physical address - ignored? */ + Elf32_Word p_filesz; /* number of bytes in file for seg. */ + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ + Elf32_Word p_flags; /* flags */ + Elf32_Word p_align; /* memory alignment */ +} Elf32_Phdr; + +/* Segment types - p_type */ +#define PT_NULL 0 /* unused */ +#define PT_LOAD 1 /* loadable segment */ +#define PT_DYNAMIC 2 /* dynamic linking section */ +#define PT_INTERP 3 /* the RTLD */ +#define PT_NOTE 4 /* auxiliary information */ +#define PT_SHLIB 5 /* reserved - purpose undefined */ +#define PT_PHDR 6 /* program header */ +#define PT_TLS 7 /* Thread local storage template */ +#define PT_NUM 8 /* Number of segment types */ +#define PT_LOOS 0x60000000 /* reserved range for operating */ +#define PT_HIOS 0x6fffffff /* system specific segment types */ +#define PT_LOPROC 0x70000000 /* reserved range for processor */ +#define PT_HIPROC 0x7fffffff /* specific segment types */ + +/* Segment flags - p_flags */ +#define PF_X 0x1 /* Executable */ +#define PF_W 0x2 /* Writable */ +#define PF_R 0x4 /* Readable */ +#define PF_MASKOS 0x0ff00000 /* OS specific segment flags */ +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific segment flags */ +/* Dynamic structure */ +typedef struct +{ + Elf32_Sword d_tag; /* controls meaning of d_val */ + union + { + Elf32_Word d_val; /* Multiple meanings - see d_tag */ + Elf32_Addr d_ptr; /* program virtual address */ + } d_un; +} Elf32_Dyn; + +extern Elf32_Dyn _DYNAMIC[]; + +/* Dynamic Array Tags - d_tag */ +#define DT_NULL 0 /* marks end of _DYNAMIC array */ +#define DT_NEEDED 1 /* string table offset of needed lib */ +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ +#define DT_PLTGOT 3 /* address PLT/GOT */ +#define DT_HASH 4 /* address of symbol hash table */ +#define DT_STRTAB 5 /* address of string table */ +#define DT_SYMTAB 6 /* address of symbol table */ +#define DT_RELA 7 /* address of relocation table */ +#define DT_RELASZ 8 /* size of relocation table */ +#define DT_RELAENT 9 /* size of relocation entry */ +#define DT_STRSZ 10 /* size of string table */ +#define DT_SYMENT 11 /* size of symbol table entry */ +#define DT_INIT 12 /* address of initialization func. */ +#define DT_FINI 13 /* address of termination function */ +#define DT_SONAME 14 /* string table offset of shared obj */ +#define DT_RPATH 15 /* string table offset of library + search path */ +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ +#define DT_REL 17 /* address of rel. tbl. w addends */ +#define DT_RELSZ 18 /* size of DT_REL relocation table */ +#define DT_RELENT 19 /* size of DT_REL relocation entry */ +#define DT_PLTREL 20 /* PLT referenced relocation entry */ +#define DT_DEBUG 21 /* bugger */ +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ +#define DT_BIND_NOW 24 /* Process relocations of object */ +#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ +#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ +#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ +#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ +#define DT_RUNPATH 29 /* Library search path */ +#define DT_FLAGS 30 /* Flags for the object being loaded */ +#define DT_ENCODING 32 /* Start of encoded range */ +#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ +#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ +#define DT_NUM 34 /* Number used. */ +#define DT_LOOS 0x60000000 /* reserved range for OS */ +#define DT_HIOS 0x6fffffff /* specific dynamic array tags */ +#define DT_LOPROC 0x70000000 /* reserved range for processor */ +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ + +/* Dynamic Tag Flags - d_un.d_val */ +#define DF_ORIGIN 0x01 /* Object may use DF_ORIGIN */ +#define DF_SYMBOLIC 0x02 /* Symbol resolutions starts here */ +#define DF_TEXTREL 0x04 /* Object contains text relocations */ +#define DF_BIND_NOW 0x08 /* No lazy binding for this object */ +#define DF_STATIC_TLS 0x10 /* Static thread local storage */ + +/* Standard ELF hashing function */ +unsigned long elf_hash(const unsigned char *name); + +#define ELF_TARG_VER 1 /* The ver for which this code is intended */ + +/* + * XXX - PowerPC defines really don't belong in here, + * but we'll put them in for simplicity. + */ + +/* Values for Elf32/64_Ehdr.e_flags. */ +#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ + +/* Cygnus local bits below */ +#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ +#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib + flag */ + +/* PowerPC relocations defined by the ABIs */ +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 /* 32bit absolute address */ +#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ +#define R_PPC_ADDR16 3 /* 16bit absolute address */ +#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ +#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ +#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ +#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 /* PC relative 26 bit */ +#define R_PPC_REL14 11 /* PC relative 16 bit */ +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 +/* Keep this the last entry. */ +#define R_PPC_NUM 37 + +/* The remaining relocs are from the Embedded ELF ABI, and are not + in the SVR4 ELF ABI. */ +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ + +/* Diab tool relocations. */ +#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ +#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ +#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ +#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ +#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ +#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ + +/* This is a phony reloc to handle any old fashioned TOC16 references + that may still be in object files. */ +#define R_PPC_TOC16 255 + +#endif /* _ELF_H */ + diff --git a/channel/channelapp/source/font.c b/channel/channelapp/source/font.c new file mode 100644 index 0000000..c425d06 --- /dev/null +++ b/channel/channelapp/source/font.c @@ -0,0 +1,774 @@ +#include +#include + +#include +#include FT_FREETYPE_H + +#include "../config.h" +#include "panic.h" +#include "theme.h" +#include "font.h" + +#include "droid_ttf.h" +#include "droidbold_ttf.h" + +#define ROUNDUP4B(x) ((x + 4 - 1) & ~(4 - 1)) + +#define X_RATIO (widescreen?WIDESCREEN_RATIO:1.0) + +//#define FONT_CHECKER + +FT_Library library; + +typedef struct { + int codepoint; + int next_idx; + int glyph_index; + int valid; + gfx_entity *texture; + int x, y; + int w, h; + FT_Pos dx, dy; +} font_glyph; + +typedef struct { + const void *data; + u32 data_len; + FT_Face face; + int max_glyphs; + int num_glyphs; + int em_w, em_h; + int em_height; + int ascender; + int descender; + int height; + font_glyph *glyphs; +} font_face; + +static font_face *fonts[FONT_MAX]; + +typedef struct { + int size; + const void *data; + const u32 *data_len; // bin2s stupidity +} font_default; + +const font_default default_fonts[FONT_MAX] = +{ + [FONT_LABEL] = { 16, droidbold_ttf, &droidbold_ttf_size}, + [FONT_DLGTITLE] = { 20, droidbold_ttf, &droidbold_ttf_size}, + [FONT_MEMO] = { 16, droid_ttf, &droid_ttf_size}, + [FONT_APPNAME] = { 20, droidbold_ttf, &droidbold_ttf_size}, + [FONT_APPDESC] = { 16, droidbold_ttf, &droidbold_ttf_size}, + [FONT_BUTTON] = { 20, droidbold_ttf, &droidbold_ttf_size}, + [FONT_BUTTON_DESEL] = { 20, droid_ttf, &droid_ttf_size}, +}; + +#define GLYPH_CACHE_ROOT 64 +#define GLYPH_CACHE_INIT 32 +#define GLYPH_CACHE_GROW 32 + +font_glyph *font_get_char(font_id id, int codepoint); + +#if 0 +static const char *utf8(u32 codepoint) +{ + static char buf[5]; + if (codepoint < 0x80) { + buf[0] = codepoint; + buf[1] = 0; + } else if (codepoint < 0x800) { + buf[0] = 0xC0 | (codepoint>>6); + buf[1] = 0x80 | (codepoint&0x3F); + buf[2] = 0; + } else if (codepoint < 0x10000) { + buf[0] = 0xE0 | (codepoint>>12); + buf[1] = 0x80 | ((codepoint>>6)&0x3F); + buf[2] = 0x80 | (codepoint&0x3F); + buf[3] = 0; + } else if (codepoint < 0x110000) { + buf[0] = 0xF0 | (codepoint>>18); + buf[1] = 0x80 | ((codepoint>>12)&0x3F); + buf[2] = 0x80 | ((codepoint>>6)&0x3F); + buf[3] = 0x80 | (codepoint&0x3F); + buf[4] = 0; + } else { + buf[0] = '?'; + buf[1] = 0; + } + return buf; +} +#endif + +int font_load(font_id id, bool use_theme) +{ + int ret; + int i; + + const void *data; + u32 data_len; + int em; + + font_face *font; + + if (fonts[id]) + return 0; + + gprintf("Loading font ID %d\n", id); + + data = default_fonts[id].data; + data_len = *default_fonts[id].data_len; + em = default_fonts[id].size; + + if (use_theme && theme_fonts[id].data) { + data = theme_fonts[id].data; + data_len = theme_fonts[id].data_len; + } + + if (use_theme && theme_fonts[id].size) + em = theme_fonts[id].size; + + // maybe we can reuse the entire font, look for other fonts + for (i=0; idata == data && fonts[i]->em_h == em) { + gprintf("Cloned font object from font ID %d\n", i); + fonts[id] = fonts[i]; + return 0; + } + } + + font = pmalloc(sizeof(*font)); + memset(font, 0, sizeof(*font)); + + font->data = data; + font->data_len = data_len; + font->em_h = font->em_w = em; + + font->face = NULL; + + // maybe we can reuse the FT_Font object, look for other fonts + for (i=0; idata == font->data) { + gprintf("Reused FreeType font subobject from font ID %d\n", i); + font->face = fonts[i]->face; + break; + } + } + + if (!font->face) { + ret = FT_New_Memory_Face(library, font->data, font->data_len, 0, &font->face); + if (ret != 0) { + gprintf("Failed to load font\n"); + // try to fall back + if (use_theme && theme_fonts[id].data) { + free(font); + theme_fonts[id].data = NULL; + return font_load(id, false); + } + return ret; + } else { + gprintf("Loaded font at %p\n", font->data); + } + } + gprintf("Font contains %ld faces\n", font->face->num_faces); + gprintf("Face contains %ld glyphs\n", font->face->num_glyphs); + + if (widescreen) + font->em_w = (int)(font->em_w / WIDESCREEN_RATIO + 0.5); + + ret = FT_Set_Pixel_Sizes(font->face, font->em_w, font->em_h); + if (ret) { + gprintf("FT_Set_Pixel_Sizes failed: %d\n", ret); + free(font); + return ret; + } + + if (!FT_HAS_KERNING(font->face)) + gprintf("Font has no usable kerning data\n"); + else + gprintf("Font has kerning data\n"); + + font->max_glyphs = GLYPH_CACHE_ROOT+GLYPH_CACHE_INIT; + font->num_glyphs = GLYPH_CACHE_ROOT; //base "hashtable" set + font->glyphs = pmalloc(sizeof(font_glyph) * font->max_glyphs); + memset(font->glyphs, 0, sizeof(font_glyph) * font->max_glyphs); + for(i=0; imax_glyphs; i++) { + font->glyphs[i].codepoint = -1; + font->glyphs[i].next_idx = -1; + } + + fonts[id] = font; + + font_glyph *glyph = font_get_char(id, 'M'); + + font->em_height = glyph->h; // height of capital M + font->ascender = (font->face->size->metrics.ascender+32)>>6; + font->descender = (font->face->size->metrics.descender+32)>>6; + font->height = (font->face->size->metrics.height+32)>>6; + + gprintf("Ascender is %d\n", font->ascender); + gprintf("Descender is %d\n", font->descender); + gprintf("Height is %d\n", font->height); + + gprintf("Font ID %d loaded\n", id); + return 0; +} + +font_glyph *font_get_char(font_id id, int codepoint) +{ + int ret; + font_glyph *glyph; + + font_load(id,1); + font_face *font = fonts[id]; + + glyph = &font->glyphs[codepoint&(GLYPH_CACHE_ROOT-1)]; + + if (glyph->codepoint != -1) { + while(1) { + if (glyph->codepoint == codepoint) { + //gprintf("FONT: Glyph %d (%s) is cached\n", codepoint, utf8(codepoint)); + return glyph; + } + if (glyph->next_idx == -1) { + glyph->next_idx = font->num_glyphs; + if (font->num_glyphs == font->max_glyphs) { + font->glyphs = prealloc(font->glyphs, sizeof(font_glyph) * (font->max_glyphs + GLYPH_CACHE_GROW)); + memset(&font->glyphs[font->max_glyphs], 0, GLYPH_CACHE_GROW*sizeof(font_glyph)); + font->max_glyphs += GLYPH_CACHE_GROW; + gprintf("FONT: expanded glyph cache size to %d\n", font->max_glyphs); + } + glyph = &font->glyphs[font->num_glyphs]; + font->num_glyphs++; + break; + } + glyph = &font->glyphs[glyph->next_idx]; + } + } + + memset(glyph, 0, sizeof(*glyph)); + glyph->codepoint = codepoint; + glyph->next_idx = -1; + glyph->valid = 0; + glyph->texture = pmalloc(sizeof(*glyph->texture)); + glyph->dx = 0; + glyph->dy = 0; + + FT_GlyphSlot slot = font->face->glyph; + FT_UInt glyph_index; + + ret = FT_Set_Pixel_Sizes(font->face, font->em_w, font->em_h); + if (ret) + return glyph; + + glyph_index = FT_Get_Char_Index(font->face, codepoint); + ret = FT_Load_Glyph(font->face, glyph_index, FT_LOAD_DEFAULT); + if (ret) + return glyph; + + ret = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + if (ret) + return glyph; + + glyph->dx = slot->advance.x; + glyph->dy = slot->advance.y; + glyph->glyph_index = glyph_index; + + int cw = slot->bitmap.width; + int ch = slot->bitmap.rows; + + glyph->w = cw; + glyph->h = ch; + + if (!cw || !ch) + return glyph; + + int tw = (cw+7)/8; + int th = (ch+3)/4; + + int tpitch = tw * 32; + + u8 *pix = pmemalign(32, tw*th*32); + memset(pix, 0, tw*th*32); + + int x,y; + u8 *p = slot->bitmap.buffer; + for(y=0; ybitmap.pitch; + } + + gfx_gen_tex (glyph->texture, 8*tw, 4*th, pix, GFXT_A8); + + glyph->x = slot->bitmap_left; + glyph->y = slot->bitmap_top; + glyph->valid = 1; + + //gprintf("FONT: Rendered and cached glyph %d (%s) at pos %d size %dx%d\n", codepoint, utf8(codepoint), glyph-font->glyphs, cw, ch); + //gprintf("Free MEM1: %ld MEM2: %ld\n", SYS_GetArena1Size(), SYS_GetArena2Size()); + return glyph; +} + +void font_kern(font_id id, int left, int right, FT_Pos *dx, FT_Pos *dy) +{ + FT_Vector delta; + if (!FT_HAS_KERNING(fonts[id]->face)) { + return; + } + if (FT_Get_Kerning(fonts[id]->face, left, right, FT_KERNING_UNFITTED, &delta)) + return; + //gprintf("Kern font %d for glyphs %d,%d is %ld,%ld\n", id, left, right, delta.x, delta.y); + *dx += delta.x; + *dy += delta.y; +} + + +void font_init(void) +{ + int ret; + + memset(fonts, 0, sizeof(fonts)); + + ret = FT_Init_FreeType(&library); + if (ret != 0) { + gprintf("FreeType init failed (%d)\n", ret); + return; + } + gprintf("FreeType initialized\n"); +} + +void font_clear (void) { + int id,id2; + for (id=0; idnum_glyphs; g++) { + if (fonts[id]->glyphs[g].texture) + free(fonts[id]->glyphs[g].texture); + fonts[id]->glyphs[g].texture = NULL; + } + free(fonts[id]->glyphs); + fonts[id]->glyphs = NULL; + + if (fonts[id]->face) { + FT_Face face = fonts[id]->face; + FT_Done_Face(face); + // other fonts can share this face object, so nuke all + for (id2=0; id2face == face) + fonts[id2]->face = NULL; + } + } + + free(fonts[id]); + fonts[id] = NULL; + } +} + +void font_deinit (void) { + font_clear(); + FT_Done_FreeType(library); +} + +static u32 utf8_get_char(const char **s) +{ + const char *c = *s; + u32 mbc = '?'; + + if (!c[0]) + return 0; + + if (c[0] <= 0x7f) { + mbc = c[0]; + c++; + } else if (c[0] >= 0xc0 && c[0] <= 0xdf) { + if ((c[1]&0xc0) != 0x80) { + c++; + if (c[0]) + c++; + } else { + mbc = (c[1]&0x3f) | ((c[0]&0x1f)<<6); + c+=2; + } + } else if (c[0] >= 0xe0 && c[0] <= 0xef) { + if (((c[1]&0xc0) != 0x80) || ((c[2]&0xc0) != 0x80)) { + c++; + if (c[0]) + c++; + if (c[0]) + c++; + } else { + mbc = (c[2]&0x3f) | ((c[1]&0x3f)<<6) | ((c[0]&0x1f)<<12); + c+=3; + } + } else if (c[0] >= 0xf0 && c[0] <= 0xf7) { + if (((c[1]&0xc0) != 0x80) || ((c[2]&0xc0) != 0x80) || ((c[3]&0xc0) != 0x80)) { + c++; + if (c[0]) + c++; + if (c[0]) + c++; + if (c[0]) + c++; + } else { + mbc = (c[3]&0x3f) | ((c[2]&0x3f)<<6) | ((c[1]&0x3f)<<12) | ((c[0]&0x1f)<<18); + c+=4; + } + } else { + c++; + } + *s = c; + return mbc; +} + +int font_get_ascender(font_id id) { + font_load(id,1); + + return fonts[id]->ascender; +} + +int font_get_height(font_id id) { + font_load(id,1); + + return fonts[id]->ascender - fonts[id]->descender; +} + +int font_get_em_height(font_id id) { + font_load(id,1); + + return fonts[id]->em_height; +} + +int font_get_y_spacing(font_id id) { + font_load(id,1); + + return fonts[id]->height; +} + +int font_get_min_y(font_id id) { + font_load(id,1); + + return -fonts[id]->descender; +} + +u16 font_get_string_width (font_id id, const char *s, int count) { + int i = 0; + u32 mbc; + int cx = 0; + int cy = 0; + + FT_Pos cdx = 0, cdy = 0; + u32 previous = 0; + + font_load(id,1); + + while((mbc = utf8_get_char(&s))) { + if (mbc == '\n') { + if (*s) + mbc = ' '; + else + continue; + } + if (mbc == '\r') + continue; + font_glyph *glyph = font_get_char(id, mbc); + + if (previous) + font_kern(id, previous, glyph->glyph_index, &cdx, &cdy); + + cx += (cdx+32) >> 6; + cy += (cdy+32) >> 6; + + cdx = glyph->dx; + cdy = glyph->dy; + previous = glyph->glyph_index; + i++; + if (i == count) + break; + } + + cx += (cdx+32) >> 6; + cy += (cdy+32) >> 6; + + return cx; +} + +int font_get_char_count (font_id id, const char *s, u16 max_width) { + //u16 res = 0; + int i = 0; + u32 mbc; + int cx = 0; + int cy = 0; + + FT_Pos cdx = 0, cdy = 0; + u32 previous = 0; + + max_width /= X_RATIO; + + font_load(id,1); + + while((mbc = utf8_get_char(&s))) { + if (mbc == '\n') { + if (*s) + mbc = ' '; + else + continue; + } + if (mbc == '\r') + continue; + font_glyph *glyph = font_get_char(id, mbc); + + if (previous) + font_kern(id, previous, glyph->glyph_index, &cdx, &cdy); + + cx += (cdx+32) >> 6; + cy += (cdy+32) >> 6; + + if (max_width && (cx >= max_width)) + return i; + + cdx = glyph->dx; + cdy = glyph->dy; + previous = glyph->glyph_index; + i++; + } + + return i; +} + +int font_wrap_string (char ***lines, font_id id, const char *s, + u16 max_width) { + const char *p = s; + char **res = NULL; + int line = 0; + int start = 0; + int end = 0; + int ls = -1; + bool lb; + + int cx = 0; + int cy = 0; + + int i = 0; + u32 mbc; + + FT_Pos cdx = 0, cdy = 0; + u32 previous = 0; + + max_width /= X_RATIO; + + font_load(id,1); + + while (true) { + i = p - s; + mbc = utf8_get_char(&p); + lb = false; + + if (mbc == ' ') + ls = p - s; + + if ((mbc == '\n') || mbc == 0) { + lb = true; + end = i; + i = p - s; + } else if (mbc == '\r') { + continue; + } else { + font_glyph *glyph = font_get_char(id, mbc); + + if (previous) + font_kern(id, previous, glyph->glyph_index, &cdx, &cdy); + + cx += (cdx+32) >> 6; + cy += (cdy+32) >> 6; + + int w = (glyph->dx+32) >> 6; + if ((glyph->w + glyph->x) > w) + w = glyph->w + glyph->x; + + if ((cx + w) >= max_width) { + lb = true; + if (ls <= start) { + if (i == start) + i++; + end = i; + p = &s[i]; + } else { + end = ls; + i = ls; + p = &s[i]; + } + } + + cdx = glyph->dx; + cdy = glyph->dy; + previous = glyph->glyph_index; + } + + if (lb) { + res = prealloc (res, (line + 1) * sizeof (char **)); + if (end <= start) + res[line] = NULL; + else { + res[line] = strndup (&s[start], end - start); + } + + line++; + start = i; + cx = 0; + cy = 0; + cdx = 0; + cdy = 0; + previous = 0; + } + + if (mbc == 0) + break; + } + + *lines = res; + return line; +} + +void font_free_lines (char **lines, u32 count) { + int i; + + for (i = 0; i < count; ++i) + free (lines[i]); + + free (lines); +} + +void font_plot_string (gfx_queue_entry *entries, int count, font_id id, + const char *s, u16 x, u16 y, u16 layer, u16 width, + font_xalign xalign, font_yalign yalign) { + int cx; + int cy; + + + if (!count) + return; + + cx = x; + cy = y; + + cx /= X_RATIO; + + switch (xalign) { + case FA_LEFT: + break; + + case FA_CENTERED: + cx += (width/X_RATIO - font_get_string_width (id, s, count)) / 2; + break; + + case FA_RIGHT: + cx += width/X_RATIO - font_get_string_width (id, s, count); + break; + } + + switch (yalign) { + case FA_ASCENDER: + cy += fonts[id]->ascender; + break; + case FA_EM_TOP: + cy += fonts[id]->em_height; + break; + case FA_EM_CENTERED: + cy += fonts[id]->em_height/2; + break; + case FA_BASELINE: + break; + case FA_DESCENDER: + cy += fonts[id]->descender; + break; + } + + FT_Pos cdx = 0, cdy = 0; + u32 previous = 0; + int first = 1; + u32 mbc; + + while ((mbc = utf8_get_char(&s))) { + if (mbc == '\n') { + if (*s) + mbc = ' '; + else + break; + } + if (mbc == '\r') + continue; + font_glyph *glyph = font_get_char(id, mbc); + + if (previous) + font_kern(id, previous, glyph->glyph_index, &cdx, &cdy); + + cx += (cdx+32) >> 6; + cy += (cdy+32) >> 6; + + if (!glyph->valid) { + entries->type = GFXQ_NULL; + goto next_glyph; + } + + // fudgity fudge, helps make text left-align slightly better/nicer, + // especially with differing fonts. + // do this only for chars with glyph->x > 0. Those with glyph->x < 0 + // are usually kerned together and look better a bit to the left anyway. + if(xalign == FA_LEFT && first && glyph->x > 0) + cx -= glyph->x; + + gfx_qe_entity (entries, glyph->texture, + ((float)(cx + glyph->x)) * X_RATIO, + cy - glyph->y, + layer, theme_fonts[id].color); + + //gprintf("Render %d (%s) at %d %d -> %d %d size %d %d\n", mbc, utf8(mbc), cx, cy, cx + glyph->x, cy - glyph->y + fonts[id]->height, glyph->texture->w, glyph->texture->h); + + first = 0; + +next_glyph: + count--; + entries++; + + if (!count) + break; + + cdx = glyph->dx; + cdy = glyph->dy; + previous = glyph->glyph_index; + } + + if (count) { + gprintf("BUG: %d queue entries empty, padding with NULLs\n", count); + while (count--) { + entries->type = GFXQ_NULL; + // this superfluous statement carefully chosen for optimal crashiness + entries++->entity.coords.z = 0; + } + } +} + diff --git a/channel/channelapp/source/font.h b/channel/channelapp/source/font.h new file mode 100644 index 0000000..b6ea154 --- /dev/null +++ b/channel/channelapp/source/font.h @@ -0,0 +1,54 @@ +#ifndef _FONT_H_ +#define _FONT_H_ + +#include + +#include "gfx.h" + +typedef enum { + FONT_LABEL = 0, + FONT_DLGTITLE, + FONT_MEMO, + FONT_APPNAME, + FONT_APPDESC, + FONT_BUTTON, + FONT_BUTTON_DESEL, + + FONT_MAX +} font_id; + +typedef enum { + FA_LEFT = 0, + FA_CENTERED, + FA_RIGHT +} font_xalign; + +typedef enum { + FA_ASCENDER = 0, + FA_EM_TOP, + FA_EM_CENTERED, + FA_BASELINE, + FA_DESCENDER, +} font_yalign; + + +void font_init (void); +void font_clear (void); +void font_deinit (void); + +int font_get_height (font_id id); +int font_get_em_height (font_id id); +int font_get_ascender (font_id id); +int font_get_y_spacing (font_id id); +int font_get_min_y(font_id id); + +int font_get_char_count (font_id id, const char *s, u16 max_width); +int font_wrap_string (char ***lines, font_id id, const char *s, u16 max_width); +void font_free_lines (char **lines, u32 count); + +void font_plot_string (gfx_queue_entry *entries, int count, font_id id, + const char *s, u16 x, u16 y, u16 layer, u16 width, + font_xalign xalign, font_yalign yalign); + +#endif + diff --git a/channel/channelapp/source/gfx.c b/channel/channelapp/source/gfx.c new file mode 100644 index 0000000..d630f5d --- /dev/null +++ b/channel/channelapp/source/gfx.c @@ -0,0 +1,539 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../config.h" +#include "gfx.h" +#include "panic.h" +#include "title.h" + +#define DEFAULT_FIFO_SIZE (256 * 1024) +#define CLIPPING_X (view_width / 2 + 64) +#define CLIPPING_Y (view_height / 2 + 64) + +#define FONT_NEAREST_NEIGHBOR + +static u32 *xfb; +static GXRModeObj *vmode; + +static float px_width, px_height; +static u8 *gp_fifo; + +static Mtx view; + +static u8 origin_stack_size; +static const gfx_coordinates *origin_stack[GFX_ORIGIN_STACK_SIZE]; +static gfx_coordinates origin_current; + +static u32 *efb_buffer = NULL; + +u16 view_width = 0; +u16 view_height = 0; +bool widescreen = false; + +void gfx_init_video (void) { + u8 i; + + VIDEO_Init (); + + vmode = VIDEO_GetPreferredMode (NULL); + +#ifdef ENABLE_WIDESCREEN + if (CONF_GetAspectRatio() == CONF_ASPECT_16_9) { + gprintf("aspect: 16:9\n"); + view_width = 852; // 16:9 + view_height = 480; + + vmode->viWidth = 672; + + widescreen = true; + + if (is_vwii()) { + // poke DMCU to turn off pillarboxing + write32(0xd8006a0, 0x30000004); + mask32(0xd8006a8, 0, 2); + } + } else { +#endif + gprintf("aspect: 4:3\n"); + view_width = 640; + view_height = 480; + + vmode->viWidth = 672; + + if (is_vwii()) { + // poke DMCU to turn on pillarboxing + write32(0xd8006a0, 0x10000002); + mask32(0xd8006a8, 0, 2); + } +#ifdef ENABLE_WIDESCREEN + } +#endif + + if (vmode == &TVPal576IntDfScale || vmode == &TVPal576ProgScale) { + vmode->viXOrigin = (VI_MAX_WIDTH_PAL - vmode->viWidth) / 2; + vmode->viYOrigin = (VI_MAX_HEIGHT_PAL - vmode->viHeight) / 2; + } else { + vmode->viXOrigin = (VI_MAX_WIDTH_NTSC - vmode->viWidth) / 2; + vmode->viYOrigin = (VI_MAX_HEIGHT_NTSC - vmode->viHeight) / 2; + } + + px_width = vmode->fbWidth / (float) view_width; + px_height = vmode->efbHeight / (float) view_height; + + VIDEO_SetBlack (TRUE); + VIDEO_Configure (vmode); + VIDEO_Flush (); + VIDEO_WaitVSync(); + + xfb = (u32 *) SYS_AllocateFramebuffer (vmode); + DCInvalidateRange(xfb, VIDEO_GetFrameBufferSize(vmode)); + xfb = MEM_K0_TO_K1 (xfb); + + VIDEO_ClearFrameBuffer (vmode, xfb, COLOR_BLACK); + + VIDEO_SetNextFramebuffer (xfb); + VIDEO_SetBlack (TRUE); + VIDEO_Flush (); + + gp_fifo = (u8 *) pmemalign (32, DEFAULT_FIFO_SIZE); + + for (i = 0; i < 4; ++i) + VIDEO_WaitVSync(); +} + +void gfx_init () { + Mtx44 p; + + GX_AbortFrame (); + + GXColor gxbackground = { 0, 0, 0, 0xff }; + + memset (gp_fifo, 0, DEFAULT_FIFO_SIZE); + + GX_Init (gp_fifo, DEFAULT_FIFO_SIZE); + GX_SetCopyClear (gxbackground, 0x00ffffff); + + // GX voodoo - properly comment me some day + // the 0.05 fudge factors for some reason help align textures on the pixel grid + // it's still not perfect though + GX_SetViewport (0, 0, vmode->fbWidth+0.05, vmode->efbHeight+0.05, 0, 1); + GX_SetDispCopyYScale ((f32) vmode->xfbHeight / (f32) vmode->efbHeight); + GX_SetScissor (0, 0, vmode->fbWidth, vmode->efbHeight); + GX_SetDispCopySrc (0, 0, vmode->fbWidth, vmode->efbHeight); + GX_SetDispCopyDst (vmode->fbWidth, vmode->xfbHeight); + GX_SetCopyFilter (vmode->aa, vmode->sample_pattern, GX_TRUE, + vmode->vfilter); + GX_SetFieldMode (vmode->field_rendering, + ((vmode->viHeight == 2 * vmode->xfbHeight) ? + GX_ENABLE : GX_DISABLE)); + + GX_SetPixelFmt (GX_PF_RGB8_Z24, GX_ZC_LINEAR); + GX_SetCullMode (GX_CULL_NONE); + + GX_SetDispCopyGamma (GX_GM_1_0); + + guOrtho(p, view_height / 2, -(view_height / 2), + -(view_width / 2), view_width / 2, 100, 1000); + + + GX_LoadProjectionMtx (p, GX_ORTHOGRAPHIC); + + GX_ClearVtxDesc (); + GX_SetVtxDesc (GX_VA_POS, GX_DIRECT); + GX_SetVtxDesc (GX_VA_CLR0, GX_DIRECT); + GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT); + + GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + + memset (&view, 0, sizeof (Mtx)); + guMtxIdentity(view); + + GX_Flush (); + GX_DrawDone (); + + GX_SetColorUpdate (GX_TRUE); + GX_CopyDisp (xfb, GX_TRUE); + GX_Flush (); + GX_DrawDone (); + GX_CopyDisp (xfb, GX_TRUE); + GX_Flush (); + GX_DrawDone (); + + VIDEO_SetBlack (FALSE); + VIDEO_Flush (); +} + +void gfx_deinit (void) { + u8 i; + + GX_AbortFrame (); + VIDEO_SetBlack (TRUE); + VIDEO_Flush(); + + for (i = 0; i < 4; ++i) + VIDEO_WaitVSync(); +} + +void gfx_get_efb_size(u16 *x, u16*y) { + *x = vmode->fbWidth; + *y = vmode->efbHeight; +} + +void gfx_set_efb_buffer(u32 *buffer) { + efb_buffer = buffer; +} + +// entity generators + +void gfx_gen_gradient (gfx_entity *entity, u16 w, u16 h, + u32 c1, u32 c2, u32 c3, u32 c4) { + entity->type = GFXE_GRADIENT; + entity->w = w; + entity->h = h; + + entity->gradient.c1 = c1; + entity->gradient.c2 = c2; + entity->gradient.c3 = c3; + entity->gradient.c4 = c4; +} + +void gfx_gen_tex (gfx_entity *entity, u16 w, u16 h, u8 *pixels, gfx_tex_type type) { + entity->type = GFXE_TEXTURE; + entity->w = w; + entity->h = h; + entity->texture.pixels = pixels; + entity->texture.type = type; + + switch(type) { + case GFXT_RGBA8: + DCFlushRange (pixels, w * h * 4); + GX_InitTexObj (&entity->texture.obj, pixels, w, h, GX_TF_RGBA8, GX_CLAMP, + GX_CLAMP, GX_FALSE); + break; + case GFXT_A8: + DCFlushRange (pixels, w * h); + GX_InitTexObj (&entity->texture.obj, pixels, w, h, GX_TF_I8, GX_CLAMP, + GX_CLAMP, GX_FALSE); +#ifdef FONT_NEAREST_NEIGHBOR + GX_InitTexObjFilterMode(&entity->texture.obj, GX_NEAR, GX_NEAR); +#endif + break; + } +} + +// queue entry generators + +void gfx_qe_origin_push (gfx_queue_entry *entry, gfx_coordinates *coords) { + entry->type = GFXQ_ORIGIN; + entry->origin.coords = coords; +} + +void gfx_qe_origin_pop (gfx_queue_entry *entry) { + entry->type = GFXQ_ORIGIN; + entry->origin.coords = NULL; +} + +void gfx_qe_scissor_reset (gfx_queue_entry *entry) { + entry->type = GFXQ_SCISSOR; + entry->scissor.x = 0; + entry->scissor.y = 0; + entry->scissor.z = 0; + entry->scissor.w = 0; + entry->scissor.h = 0; +} + +void gfx_qe_scissor (gfx_queue_entry *entry, u16 x, u16 y, u16 z, u16 w, u16 h) { + entry->type = GFXQ_SCISSOR; + entry->scissor.x = x; + entry->scissor.y = y; + entry->scissor.z = z; + entry->scissor.w = w; + entry->scissor.h = h; +} + +void gfx_qe_entity (gfx_queue_entry *entry, gfx_entity *entity, f32 x, f32 y, + s16 layer, u32 color) { + entry->type = GFXQ_ENTITY; + entry->entity.coords.x = x; + entry->entity.coords.y = y + entity->h; + entry->entity.coords.z = layer; + entry->entity.scale = 1.0f; + entry->entity.rad = 0.0f; + entry->entity.entity = entity; + entry->entity.color = color; +} + +// helper functions + +static void get_origin (s16 *x, s16 *y, s16 *z, u8 m) { + u8 i; + + *x = -view_width / 2; + *y = view_height / 2; + *z = VIEW_Z_ORIGIN; + + for (i = 0; i < origin_stack_size - m; ++i) { + *x += origin_stack[i]->x; + *y -= origin_stack[i]->y; + *z += origin_stack[i]->z; + } +} + +static void set_scissor (const gfx_queue_entry *entry) { + s16 x, y, z, w, h; + + if (entry->scissor.w != 0 && entry->scissor.h != 0) { + // TODO 1ast parm hardcoded for memo + get_origin (&x, &y, &z, 1); + x = roundf ((float) (x + view_width / 2 + entry->scissor.x) * px_width); + y = roundf ((float) (-y + view_height / 2 + entry->scissor.y) * + px_height); + w = roundf ((float) entry->scissor.w * px_width); + h = roundf ((float) entry->scissor.h * px_height); + + GX_SetScissor (x, y, w, h); + } else { + GX_SetScissor (0, 0, vmode->fbWidth, vmode->efbHeight); + } +} + +static void plot_vert_c (f32 x, f32 y, f32 z, u32 c) { + GX_Position3f32 (x, y, z); + GX_Color1u32 (c); + GX_TexCoord2f32 (0.0f, 0.0f); +} + +static void plot_gradient (const gfx_queue_entry *entry, Mtx v) { + Mtx m, m2; + Mtx mv; + f32 xf, yf, zf, wf, hf; + + xf = origin_current.x + entry->entity.coords.x; + yf = origin_current.y - entry->entity.coords.y; + zf = origin_current.z + entry->entity.coords.z; + + wf = entry->entity.entity->w; + hf = entry->entity.entity->h; + + guMtxIdentity(m); + guMtxTransApply(m, m, -wf/2, -hf/2, 0); + + if (entry->entity.scale != 1.0f) { + guMtxScale(m2, entry->entity.scale, entry->entity.scale, 0.0); + guMtxConcat(m2, m, m); + } + + if (entry->entity.rad != 0.0f) { + guMtxRotRad(m2, 'z', entry->entity.rad); + guMtxConcat(m2, m, m); + } + + guMtxTransApply(m, m, wf/2+xf, hf/2+yf, zf); + guMtxConcat(v, m, mv); + + GX_LoadPosMtxImm (mv, GX_PNMTX0); + + GX_Begin (GX_QUADS, GX_VTXFMT0, 4); + plot_vert_c (0, hf, 0, entry->entity.entity->gradient.c1); + plot_vert_c (wf, hf, 0, entry->entity.entity->gradient.c2); + plot_vert_c (wf, 0, 0, entry->entity.entity->gradient.c3); + plot_vert_c (0, 0, 0, entry->entity.entity->gradient.c4); + GX_End (); +} + +static void plot_vert (f32 x, f32 y, f32 z, f32 s, f32 t, u32 c) { + GX_Position3f32 (x, y, z); + GX_Color1u32 (c); + GX_TexCoord2f32 (s, t); +} + +static void plot_texture (const gfx_queue_entry *entry, Mtx v) { + Mtx m, m2; + Mtx mv; + f32 xf, yf, zf, wf, hf; + + yf = origin_current.y - entry->entity.coords.y; + zf = origin_current.z + entry->entity.coords.z; + hf = entry->entity.entity->h; + + if (widescreen && entry->entity.entity->texture.type == GFXT_A8) { + // align origin to pixel grid + xf = (int)(origin_current.x / WIDESCREEN_RATIO); + xf = xf*WIDESCREEN_RATIO + entry->entity.coords.x; + // width is specified in physical pixels + wf = entry->entity.entity->w * WIDESCREEN_RATIO; + } else { + xf = origin_current.x + entry->entity.coords.x; + + wf = entry->entity.entity->w; + } + + if (yf > CLIPPING_Y) + return; + + if ((yf + hf) < -CLIPPING_Y) + return; + + if (xf > CLIPPING_X) + return; + + if ((xf + wf) < -CLIPPING_X) + return; + + GX_LoadTexObj (&entry->entity.entity->texture.obj, GX_TEXMAP0); + + guMtxIdentity(m); + guMtxTransApply(m, m, -wf/2, -hf/2, 0); + + if (entry->entity.scale != 1.0f) { + guMtxScale(m2, entry->entity.scale, entry->entity.scale, 0.0); + guMtxConcat(m2, m, m); + } + + if (entry->entity.rad != 0.0f) { + guMtxRotRad(m2, 'z', entry->entity.rad); + guMtxConcat(m2, m, m); + } + + guMtxTransApply(m, m, wf/2+xf, hf/2+yf, zf); + guMtxConcat(v, m, mv); + + switch (entry->entity.entity->texture.type) { + case GFXT_RGBA8: + GX_SetTevOp (GX_TEVSTAGE0, GX_MODULATE); + break; + case GFXT_A8: + GX_SetNumTevStages(1); + GX_SetTevColorIn(GX_TEVSTAGE0,GX_CC_ZERO,GX_CC_ZERO,GX_CC_ZERO,GX_CC_RASC); + GX_SetTevAlphaIn(GX_TEVSTAGE0,GX_CA_ZERO,GX_CA_TEXA,GX_CA_RASA,GX_CA_ZERO); + GX_SetTevColorOp(GX_TEVSTAGE0,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); + GX_SetTevAlphaOp(GX_TEVSTAGE0,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); + break; + } + + GX_LoadPosMtxImm (mv, GX_PNMTX0); + + GX_Begin (GX_QUADS, GX_VTXFMT0, 4); + plot_vert (0, hf, 0, 0.0, 0.0, entry->entity.color); + plot_vert (wf, hf, 0, 1.0, 0.0, entry->entity.color); + plot_vert (wf, 0, 0, 1.0, 1.0, entry->entity.color); + plot_vert (0, 0, 0, 0.0, 1.0, entry->entity.color); + GX_End (); +} + +// higher level frame functions + +void gfx_frame_start (void) { + origin_stack_size = 0; + origin_current.x = -view_width / 2; + origin_current.y = view_height / 2; + origin_current.z = VIEW_Z_ORIGIN; + + GX_InvVtxCache (); + GX_InvalidateTexAll (); + + GX_SetNumChans (1); + GX_SetNumTexGens (1); + GX_SetTexCoordGen (GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); + + GX_SetTevOp (GX_TEVSTAGE0, GX_MODULATE); + GX_SetTevOrder (GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + + GX_SetBlendMode (GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, + GX_LO_NOOP); +} + +void gfx_frame_push (const gfx_queue_entry *entries, int count) { + while (count--) { + switch (entries->type) { + case GFXQ_ORIGIN: + if (entries->origin.coords) { + origin_current.x += entries->origin.coords->x; + origin_current.y -= entries->origin.coords->y; + origin_current.z += entries->origin.coords->z; + origin_stack[origin_stack_size] = entries->origin.coords; + origin_stack_size++; + } else { + if (origin_stack_size > 0) { + origin_current.x -= origin_stack[origin_stack_size - 1]->x; + origin_current.y += origin_stack[origin_stack_size - 1]->y; + origin_current.z -= origin_stack[origin_stack_size - 1]->z; + origin_stack_size--; + } else { + origin_current.x += -view_width / 2; + origin_current.y -= view_height / 2; + origin_current.z += view_height / 2; + } + } + break; + + case GFXQ_SCISSOR: + set_scissor (entries); + break; + + case GFXQ_ENTITY: + switch (entries->entity.entity->type) { + case GFXE_GRADIENT: + GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR); + plot_gradient (entries, view); + + break; + + case GFXE_TEXTURE: + plot_texture (entries, view); + break; + } + case GFXQ_NULL: + break; + default: + gprintf("Unknown queue entry type 0x%x\n", entries->type); + break; + } + entries++; + } +} + +void gfx_frame_end (void) { + GX_DrawDone (); + +#ifdef ENABLE_SCREENSHOTS + if (efb_buffer) { + u16 x, y; + GXColor c; + u32 val; + u32 *p = efb_buffer; + + for (y = 0; y < vmode->efbHeight; ++y) { + for (x = 0; x < vmode->fbWidth; ++x) { + GX_PeekARGB(x, y, &c); + val = ((u32) c.a) << 24; + val |= ((u32) c.r) << 16; + val |= ((u32) c.g) << 8; + val |= c.b; + + *p++ = val; + } + } + + efb_buffer = NULL; + } +#endif + + GX_SetZMode (GX_TRUE, GX_LEQUAL, GX_TRUE); + GX_SetColorUpdate (GX_TRUE); + + VIDEO_WaitVSync (); + GX_CopyDisp (xfb, GX_TRUE); + GX_Flush (); +} + diff --git a/channel/channelapp/source/gfx.h b/channel/channelapp/source/gfx.h new file mode 100644 index 0000000..4869d66 --- /dev/null +++ b/channel/channelapp/source/gfx.h @@ -0,0 +1,96 @@ +#ifndef _GFX_H_ +#define _GFX_H_ + +#include + +#define COL_DEFAULT 0xFFFFFFFF + +#define WIDESCREEN_RATIO (852.0/640.0) + +typedef struct { + f32 x, y, z; +} gfx_coordinates; + +typedef enum { + GFXT_RGBA8, + GFXT_A8 +} gfx_tex_type; + +typedef enum { + GFXE_GRADIENT, + GFXE_TEXTURE +} gfx_entity_type; + +typedef struct { + gfx_entity_type type; + u16 w, h; + + union { + struct { + u32 c1, c2, c3, c4; + } gradient; + + struct { + u8 *pixels; + gfx_tex_type type; + GXTexObj obj; + } texture; + }; +} gfx_entity; + +typedef enum { + GFXQ_NULL = -1, + GFXQ_ORIGIN, + GFXQ_SCISSOR, + GFXQ_ENTITY +} gfx_queue_type; + +typedef struct { + gfx_queue_type type; + + union { + struct { + gfx_coordinates *coords; + } origin; + + struct { + u16 x, y, z, w, h; + } scissor; + + struct { + gfx_coordinates coords; + f32 scale; + f32 rad; + gfx_entity *entity; + u32 color; + } entity; + }; +} gfx_queue_entry; + +extern bool widescreen; +extern u16 view_height, view_width; + +void gfx_init_video (void); +void gfx_init (void); +void gfx_deinit (void); + +void gfx_get_efb_size(u16 *x, u16 *y); +void gfx_set_efb_buffer(u32 *buffer); + +void gfx_gen_gradient (gfx_entity *entity, u16 w, u16 h, + u32 c1, u32 c2, u32 c3, u32 c4); +void gfx_gen_tex (gfx_entity *entity, u16 w, u16 h, u8 *pixels, gfx_tex_type type); + +void gfx_qe_origin_push (gfx_queue_entry *entry, gfx_coordinates *coords); +void gfx_qe_origin_pop (gfx_queue_entry *entry); +void gfx_qe_scissor_reset (gfx_queue_entry *entry); +void gfx_qe_scissor (gfx_queue_entry *entry, u16 x, u16 y, u16 z, u16 w, u16 h); +void gfx_qe_entity (gfx_queue_entry *entry, gfx_entity *entity, f32 x, f32 y, + s16 layer, u32 color); + +void gfx_frame_start (void); +void gfx_frame_push (const gfx_queue_entry *entries, int count); +void gfx_frame_end (void); + +#endif + diff --git a/channel/channelapp/source/ggets.c b/channel/channelapp/source/ggets.c new file mode 100644 index 0000000..8db22cd --- /dev/null +++ b/channel/channelapp/source/ggets.c @@ -0,0 +1,67 @@ +/* File ggets.c - goodgets is a safe alternative to gets */ +/* By C.B. Falconer. Public domain 2002-06-22 */ +/* attribution appreciated. */ + +/* Revised 2002-06-26 New prototype. + 2002-06-27 Incomplete final lines + 2006-06-14 Simplified, using getc, not fgets + 2006-06-15 Fixed memory leak at EOF + */ + +/* fggets and ggets [which is fggets(ln, stdin)] set *ln to + a buffer filled with the next complete line from the text + stream f. The storage has been allocated within fggets, + and is normally reduced to be an exact fit. The trailing + \n has been removed, so the resultant line is ready for + dumping with puts. The buffer will be as large as is + required to hold the complete line. + + Note: this means a final file line without a \n terminator + has an effective \n appended, as EOF occurs within the read. + + If no error occurs fggets returns 0. If an EOF occurs on + the input file, EOF is returned. For memory allocation + errors some positive value is returned. In this case *ln + may point to a partial line. For other errors memory is + freed and *ln is set to NULL. + + Freeing of assigned storage is the callers responsibility + */ + +#include +#include +#include "panic.h" +#include "ggets.h" + +#define INITSIZE 112 /* power of 2 minus 16, helps malloc */ +#define DELTASIZE (INITSIZE + 16) + +enum {OK = 0, NOMEM}; + +int fggets(char* *ln, FILE *f) +{ + int cursize, ch, ix; + char *buffer; + + *ln = NULL; /* default */ + buffer = pmalloc(INITSIZE); + cursize = INITSIZE; + + ix = 0; + while ((EOF != (ch = getc(f))) && ('\n' != ch)) { + if (ix >= (cursize - 1)) { /* extend buffer */ + cursize += DELTASIZE; + buffer = prealloc(buffer, (size_t)cursize); + } + buffer[ix++] = ch; + } + if ((EOF == ch) && (0 == ix)) { + free(buffer); + return EOF; + } + + buffer[ix] = '\0'; + *ln = prealloc(buffer, (size_t)ix + 1); + return OK; +} /* fggets */ +/* End of ggets.c */ diff --git a/channel/channelapp/source/ggets.h b/channel/channelapp/source/ggets.h new file mode 100644 index 0000000..db35bb4 --- /dev/null +++ b/channel/channelapp/source/ggets.h @@ -0,0 +1,45 @@ +/* File ggets.h - goodgets is a safe alternative to gets */ +/* By C.B. Falconer. Public domain 2002-06-22 */ +/* attribution appreciated. */ + + +/* Revised 2002-06-26 New prototype. + 2002-06-27 Incomplete final lines + */ + +/* fggets and ggets [which is fggets(ln, stdin)] set *ln to + a buffer filled with the next complete line from the text + stream f. The storage has been allocated within fggets, + and is normally reduced to be an exact fit. The trailing + \n has been removed, so the resultant line is ready for + dumping with puts. The buffer will be as large as is + required to hold the complete line. + + Note: this means a final file line without a \n terminator + has an effective \n appended, as EOF occurs within the read. + + If no error occurs fggets returns 0. If an EOF occurs on + the input file, EOF is returned. For memory allocation + errors some positive value is returned. In this case *ln + may point to a partial line. For other errors memory is + freed and *ln is set to NULL. + + Freeing of assigned storage is the callers responsibility + */ + +#ifndef ggets_h_ +# define ggets_h_ + +# ifdef __cplusplus + extern "C" { +# endif + +int fggets(char* *ln, FILE *f); + +#define ggets(ln) fggets(ln, stdin) + +# ifdef __cplusplus + } +# endif +#endif +/* END ggets.h */ diff --git a/channel/channelapp/source/http.c b/channel/channelapp/source/http.c new file mode 100644 index 0000000..73175e5 --- /dev/null +++ b/channel/channelapp/source/http.c @@ -0,0 +1,455 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../config.h" + +#ifdef ENABLE_UPDATES + +#include "tcp.h" +#include "panic.h" + +#include "http.h" + +extern u32 ms_id; +extern u32 ng_id; + +typedef enum { + HTTPCMD_IDLE = 0, + HTTPCMD_EXIT, + HTTPCMD_FETCH +} http_cmd; + +typedef struct { + bool running; + bool done; + + http_cmd cmd; + char *host; + u16 port; + char *path; + u32 max_size; + + u16 sysmenu_version; + char *region; + char *area; + + mutex_t mutex; + mutex_t cmutex; + cond_t cond; + http_state state; + http_res res; + u32 http_status; + u32 content_length; + u32 progress; + u8 *data; +} http_arg; + +static lwp_t http_thread; +static u8 http_stack[HTTP_THREAD_STACKSIZE] ATTRIBUTE_ALIGN (32); + +static http_arg ta_http; + +static u16 get_tmd_version(u64 title) { + STACK_ALIGN(u8, tmdbuf, 1024, 32); + u32 tmd_view_size = 0; + s32 res; + + res = ES_GetTMDViewSize(title, &tmd_view_size); + if (res < 0) + return 0; + + if (tmd_view_size > 1024) + return 0; + + res = ES_GetTMDView(title, tmdbuf, tmd_view_size); + if (res < 0) + return 0; + + return (tmdbuf[88] << 8) | tmdbuf[89]; +} + +static bool http_split_url (char **host, char **path, const char *url) { + const char *p; + char *c; + + if (strncasecmp (url, "http://", 7)) + return false; + + p = url + 7; + c = strchr (p, '/'); + + if (c[0] == 0) + return false; + + *host = strndup (p, c - p); + *path = pstrdup (c); + + return true; +} + +static void * http_func (void *arg) { + http_arg *ta = (http_arg *) arg; + int s; + char *request, *r; + int linecount; + char *line; + bool b; + s64 t; + + ta->running = true; + LWP_MutexLock (ta->cmutex); + LWP_MutexLock (ta_http.mutex); + ta->state = HTTPS_IDLE; + ta->done = true; + LWP_MutexUnlock (ta_http.mutex); + + while (true) { + while (ta->cmd == HTTPCMD_IDLE) + LWP_CondWait(ta->cond, ta->cmutex); + + if (ta->cmd == HTTPCMD_EXIT) + break; + + ta->cmd = HTTPCMD_IDLE; + + s = tcp_connect (ta->host, ta->port); + + LWP_MutexLock (ta_http.mutex); + if (s < 0) { + ta->state = HTTPS_IDLE; + ta->done = true; + ta->res = HTTPR_ERR_CONNECT; + LWP_MutexUnlock (ta_http.mutex); + continue; + } + + ta->state = HTTPS_REQUESTING; + LWP_MutexUnlock (ta_http.mutex); + + request = (char *) pmalloc (2048); + r = request; + r += sprintf (r, "GET %s HTTP/1.1\r\n", ta->path); + r += sprintf (r, "Host: %s\r\n", ta->host); + r += sprintf (r, "Cache-Control: no-cache\r\n"); + r += sprintf (r, "User-Agent: TheHomebrewChannel/%s Wii/%08lx" + " (%lu; %u; %s-%s)\r\n", CHANNEL_VERSION_STR, + ng_id, ms_id, ta->sysmenu_version, ta->region, + ta->area); + + strcat (r, "\r\n"); + + b = tcp_write (s, (u8 *) request, strlen (request), NULL, NULL); + + free (request); + + if (!b) { + LWP_MutexLock (ta_http.mutex); + ta->state = HTTPS_IDLE; + ta->done = true; + ta->res = HTTPR_ERR_REQUEST; + LWP_MutexUnlock (ta_http.mutex); + net_close (s); + continue; + } + + linecount = 0; + t = gettime (); + while (true) { + line = tcp_readln (s, 0xff, t, HTTP_TIMEOUT); + if (!line) { + LWP_MutexLock (ta_http.mutex); + ta->http_status = 404; + ta->res = HTTPR_ERR_REQUEST; + break; + } + + if (strlen (line) < 1) { + free (line); + LWP_MutexLock (ta_http.mutex); + break; + } + + sscanf (line, "HTTP/1.%*u %lu", &ta->http_status); + sscanf (line, "Content-Length: %lu", &ta->content_length); + + free (line); + + linecount++; + if (linecount == 32) { + LWP_MutexLock (ta_http.mutex); + ta->http_status = 404; + ta->res = HTTPR_ERR_REQUEST; + break; + } + } + + if (ta->content_length < 1) + ta->http_status = 404; + + if (ta->http_status != 200) { + ta->res = HTTPR_ERR_STATUS; + ta->state = HTTPS_IDLE; + ta->done = true; + LWP_MutexUnlock (ta_http.mutex); + net_close (s); + + continue; + } + + if (ta->content_length > ta->max_size) { + ta->res = HTTPR_ERR_TOOBIG; + ta->state = HTTPS_IDLE; + ta->done = true; + LWP_MutexUnlock (ta_http.mutex); + net_close (s); + + continue; + } + + ta->state = HTTPS_RECEIVING; + + // safety, for char[] parsing + ta->data = (u8 *) pmalloc (ta->content_length + 1); + LWP_MutexUnlock (ta_http.mutex); + + b = tcp_read (s, ta->data, ta->content_length, &ta->mutex, + &ta->progress); + + if (!b) { + LWP_MutexLock (ta_http.mutex); + free (ta->data); + ta->data = NULL; + ta->res = HTTPR_ERR_RECEIVE; + ta->state = HTTPS_IDLE; + ta->done = true; + LWP_MutexUnlock (ta_http.mutex); + net_close (s); + + continue; + } + + gprintf("done with download\n"); + + LWP_MutexLock (ta_http.mutex); + ta->data[ta->content_length] = 0; + ta->res = HTTPR_OK; + ta->state = HTTPS_IDLE; + ta->done = true; + LWP_MutexUnlock (ta_http.mutex); + + net_close (s); + } + + LWP_MutexUnlock (ta->cmutex); + + gprintf("http thread done\n"); + + ta->running = false; + + return NULL; +} + +void http_init (void) { + s32 res; + + gprintf ("starting http thread\n"); + + memset (&ta_http, 0, sizeof (http_arg)); + + ta_http.sysmenu_version = get_tmd_version(0x0000000100000002ll); + + switch (CONF_GetRegion()) { + case CONF_REGION_JP: + ta_http.region = pstrdup("JP"); + break; + case CONF_REGION_US: + ta_http.region = pstrdup("US"); + break; + case CONF_REGION_EU: + ta_http.region = pstrdup("EU"); + break; + case CONF_REGION_KR: + ta_http.region = pstrdup("KR"); + break; + case CONF_REGION_CN: + ta_http.region = pstrdup("CN"); + break; + default: + ta_http.region = pstrdup("UNK"); + break; + } + + switch (CONF_GetArea()) { + case CONF_AREA_JPN: + ta_http.area = pstrdup("JPN"); + break; + case CONF_AREA_USA: + ta_http.area = pstrdup("USA"); + break; + case CONF_AREA_EUR: + ta_http.area = pstrdup("EUR"); + break; + case CONF_AREA_AUS: + ta_http.area = pstrdup("AUS"); + break; + case CONF_AREA_BRA: + ta_http.area = pstrdup("BRA"); + break; + case CONF_AREA_TWN: + ta_http.area = pstrdup("TWN"); + break; + case CONF_AREA_ROC: + ta_http.area = pstrdup("ROC"); + break; + case CONF_AREA_KOR: + ta_http.area = pstrdup("KOR"); + break; + case CONF_AREA_HKG: + ta_http.area = pstrdup("HKG"); + break; + case CONF_AREA_ASI: + ta_http.area = pstrdup("ASI"); + break; + case CONF_AREA_LTN: + ta_http.area = pstrdup("LTN"); + break; + case CONF_AREA_SAF: + ta_http.area = pstrdup("SAF"); + break; + case CONF_AREA_CHN: + ta_http.area = pstrdup("CHN"); + break; + default: + ta_http.area = pstrdup("UNK"); + break; + } + + res = LWP_MutexInit (&ta_http.mutex, false); + + if (res) { + gprintf ("error creating mutex: %ld\n", res); + return; + } + + res = LWP_MutexInit (&ta_http.cmutex, false); + + if (res) { + gprintf ("error creating cmutex: %ld\n", res); + return; + } + + res = LWP_CondInit (&ta_http.cond); + + if (res) { + gprintf ("error creating cond: %ld\n", res); + return; + } + + memset (&http_stack, 0, HTTP_THREAD_STACKSIZE); + res = LWP_CreateThread (&http_thread, http_func, &ta_http, http_stack, + HTTP_THREAD_STACKSIZE, HTTP_THREAD_PRIO); + + gprintf("created http thread\n"); + + if (res) { + gprintf ("error creating thread: %ld\n", res); + } +} + +void http_deinit (void) { + int i; + + if (ta_http.running) { + gprintf ("stopping http thread\n"); + + for (i = 0; i < 25; ++i) { + if (LWP_MutexTryLock (ta_http.cmutex) == 0) { + break; + } + usleep (20 * 1000); + } + if (i < 25) { + gprintf ("sending http entry thread the exit cmd\n"); + ta_http.cmd = HTTPCMD_EXIT; + LWP_SetThreadPriority (http_thread, LWP_PRIO_HIGHEST); + LWP_CondBroadcast (ta_http.cond); + LWP_MutexUnlock (ta_http.cmutex); + LWP_JoinThread(http_thread, NULL); + LWP_CondDestroy (ta_http.cond); + LWP_MutexDestroy (ta_http.cmutex); + LWP_MutexDestroy (ta_http.mutex); + free(ta_http.region); + free(ta_http.area); + return; + } + gprintf("http thread didn't shutdown gracefully!\n"); + } + + return; +} + +bool http_ready (void) { + return ta_http.running && ta_http.done; +} + +bool http_request (const char *url, u32 max_size) { + if (!http_ready () || !http_split_url (&ta_http.host, &ta_http.path, url)) + return false; + + LWP_MutexLock (ta_http.cmutex); + ta_http.done = false; + ta_http.cmd = HTTPCMD_FETCH; + ta_http.port = 80; + ta_http.max_size = max_size; + + LWP_CondBroadcast (ta_http.cond); + LWP_MutexUnlock (ta_http.cmutex); + + return true; +} + +bool http_get_state (http_state *state, u32 *content_length, u32 *progress) { + if (!ta_http.running) + return false; + + LWP_MutexLock (ta_http.mutex); + *state = ta_http.state; + *content_length = ta_http.content_length; + *progress = ta_http.progress; + LWP_MutexUnlock (ta_http.mutex); + + return true; +} + +bool http_get_result (http_res *res, u32 *http_status, u8 **content, + u32 *length) { + if (!http_ready()) + return false; + + *res = ta_http.res; + *http_status = ta_http.http_status; + if (ta_http.res == HTTPR_OK) { + *content = ta_http.data; + *length = ta_http.content_length; + } else { + *content = NULL; + *length = 0; + } + + free (ta_http.host); + ta_http.host = NULL; + free (ta_http.path); + ta_http.path = NULL; + + return true; +} + +#endif diff --git a/channel/channelapp/source/http.h b/channel/channelapp/source/http.h new file mode 100644 index 0000000..743bc5f --- /dev/null +++ b/channel/channelapp/source/http.h @@ -0,0 +1,33 @@ +#ifndef _HTTP_H_ +#define _HTTP_H_ + +#include + +typedef enum { + HTTPS_IDLE = 0, + HTTPS_CONNECTING, + HTTPS_REQUESTING, + HTTPS_RECEIVING +} http_state; + +typedef enum { + HTTPR_OK, + HTTPR_ERR_CONNECT, + HTTPR_ERR_REQUEST, + HTTPR_ERR_STATUS, + HTTPR_ERR_TOOBIG, + HTTPR_ERR_RECEIVE +} http_res; + +void http_init (void); +void http_deinit (void); + +bool http_ready (void); + +bool http_request (const char *url, u32 max_size); +bool http_get_state (http_state *state, u32 *content_length, u32 *progress); +bool http_get_result (http_res *res, u32 *http_status, u8 **content, + u32 *length); + +#endif + diff --git a/channel/channelapp/source/i18n.c b/channel/channelapp/source/i18n.c new file mode 100644 index 0000000..bed731c --- /dev/null +++ b/channel/channelapp/source/i18n.c @@ -0,0 +1,86 @@ +#include +#include +#include +#include + +#include "../config.h" + +struct mo_entry { + u32 length; + u32 offset; +} __attribute__((packed)); + +struct mo_hdr { + u32 magic; + u32 revision; + u32 count; + struct mo_entry *source; + struct mo_entry *target; + u32 hash_size; + void *hashes; +} __attribute__((packed)); + +static struct mo_hdr mo; +static int mo_inited = false; +static const char *mo_data = NULL; + +#define MAGIC_SWAB 0xde120495 +#define MAGIC 0x950412de + +#define SWAB16(x) ((((x)>>8)&0xFF) | (((x)&0xFF)<<8)) +#define SWAB32(x) ((SWAB16((x)&0xFFFF)<<16)|(SWAB16(((x)>>16)&0xFFFF))) + +#define ENDIAN(x) ((mo.magic == MAGIC_SWAB) ? SWAB32(x) : (x)) + +void i18n_set_mo(const void *mo_file) { + mo_inited = true; + if(!mo_file) { + mo_data = NULL; + gprintf("i18n: unset mo file\n"); + return; + } + + memcpy(&mo, mo_file, sizeof(struct mo_hdr)); + if(mo.magic == MAGIC_SWAB) { + mo.revision = SWAB32(mo.revision); + mo.count = SWAB32(mo.count); + mo.source = (struct mo_entry*)SWAB32((u32)mo.source); + mo.target = (struct mo_entry*)SWAB32((u32)mo.target); + mo.hash_size = SWAB32(mo.hash_size); + mo.hashes = (void*)SWAB32((u32)mo.magic); + } else if(mo.magic != MAGIC) { + gprintf("i18n: bad mo file magic 0x%08lx\n",mo.magic); + return; + } + + if(mo.revision != 0) + gprintf("i18n: bad mo file revision 0x%08lx\n",mo.revision); + + mo_data = (char*)mo_file; + mo.source = (struct mo_entry*)(mo_data + (u32)mo.source); + gprintf("i18n: configured mo file at %p\n",mo_data); + mo.target = (struct mo_entry*)(mo_data + (u32)mo.target); +} + +const char *i18n(char *english_string) { + int i; + + if(!mo_inited) + gprintf("i18n: warning: attempted to translate '%s' before init\n", english_string); + + if(!mo_data) + return english_string; + + for(i = 0; i < mo.count; i++) { + if(!strcmp(english_string, &mo_data[ENDIAN(mo.source[i].offset)])) + return &mo_data[ENDIAN(mo.target[i].offset)]; + } + + gprintf("i18n: could not find string for %s\n", english_string); + + return english_string; +} + +u32 i18n_have_mo(void) { + return mo_data ? 1 : 0; +} diff --git a/channel/channelapp/source/i18n.h b/channel/channelapp/source/i18n.h new file mode 100644 index 0000000..6891f6d --- /dev/null +++ b/channel/channelapp/source/i18n.h @@ -0,0 +1,13 @@ +#ifndef _I18N_H_ +#define _I18N_H_ + +#include + +#define _(x) i18n(x) + +void i18n_set_mo(const void *mo_file); +const char *i18n(char *english_string); +u32 i18n_have_mo(void); + +#endif + diff --git a/channel/channelapp/source/isfs.c b/channel/channelapp/source/isfs.c new file mode 100644 index 0000000..aa951f9 --- /dev/null +++ b/channel/channelapp/source/isfs.c @@ -0,0 +1,129 @@ +#include +#include +#include + +#include + +#include "../config.h" +#include "blob.h" +#include "panic.h" +#include "isfs.h" + +#define ROUNDUP32B(x) ((x + 32 - 1) & ~(32 - 1)) + +static fstats __st ATTRIBUTE_ALIGN(32); + +s32 isfs_get(const char *path, u8 **buf, u32 expected, u32 maxsize, bool use_blob) { + s32 ret; + s32 fd; + u8 *__buf; + + gprintf("reading %s (expecting %lu bytes)\n", path, expected); + ret = ISFS_Open(path, ISFS_OPEN_READ); + if (ret < 0) { + gprintf("ISFS_Open failed (%ld)\n", ret); + return ret; + } + + fd = ret; + + ret = ISFS_GetFileStats(fd, &__st); + if (ret < 0) { + gprintf("ISFS_GetFileStats failed (%ld)\n", ret); + return ret; + } + DCInvalidateRange(&__st, sizeof(__st)); + + if ((__st.file_length == 0) || + (maxsize && (__st.file_length > maxsize)) || + (expected && (__st.file_length != expected))) { + gprintf("invalid size: %lu\n", __st.file_length); + ISFS_Close(fd); + return -1; + } + + if (use_blob) { + __buf = blob_alloc(ROUNDUP32B(__st.file_length + 1)); + if (!__buf) + panic(); + } else { + __buf = pmemalign(32, ROUNDUP32B(__st.file_length + 1)); + } + + gprintf("reading %lu bytes\n", __st.file_length); + ret = ISFS_Read(fd, __buf, __st.file_length); + if (ret < 0) { + gprintf("ISFS_Read failed (%ld)\n", ret); + free(__buf); + ISFS_Close(fd); + return ret; + } + DCInvalidateRange(__buf, __st.file_length + 1); + __buf[__st.file_length] = 0; + + if (ret != __st.file_length) { + gprintf("ISFS_Read short read (%ld)\n", ret); + free(__buf); + ISFS_Close(fd); + return -1; + } + + ret = ISFS_Close(fd); + if (ret < 0) { + gprintf("ISFS_Close failed (%ld)\n", ret); + free(__buf); + return ret; + } + + *buf = __buf; + return __st.file_length; +} + +s32 isfs_put(const char *path, const void *buf, u32 len) { + s32 fd, ret; + + ISFS_Delete(path); + + gprintf("writing %s (%lu bytes)\n", path, len); + ret = ISFS_CreateFile(path, 0, 3, 3, 0); + if (ret < 0) { + gprintf("ISFS_CreateFile failed (%ld)\n", ret); + return ret; + } + + ret = ISFS_Open(path, 3); + if (ret < 0) { + gprintf("ISFS_Open failed (%ld)\n", ret); + ISFS_Delete(path); + return ret; + } + + fd = ret; + + DCFlushRange((void *) buf, len); + + ret = ISFS_Write(fd, buf, len); + if (ret < 0) { + gprintf("ISFS_Write failed (%ld)\n", ret); + ISFS_Close(fd); + ISFS_Delete(path); + return ret; + } + + if (ret != len) { + gprintf("ISFS_Write short write (%ld)\n", ret); + ISFS_Close(fd); + ISFS_Delete(path); + return -1; + } + + ret = ISFS_Close(fd); + if (ret < 0) { + gprintf("ISFS_Close failed (%ld)\n", ret); + ISFS_Delete(path); + return ret; + } + + return 0; +} + diff --git a/channel/channelapp/source/isfs.h b/channel/channelapp/source/isfs.h new file mode 100644 index 0000000..b01106d --- /dev/null +++ b/channel/channelapp/source/isfs.h @@ -0,0 +1,9 @@ +#ifndef ___ISFS_H__ +#define ___ISFS_H__ + +#include + +s32 isfs_get(const char *path, u8 **buf, u32 expected, u32 maxsize, bool use_blob); +s32 isfs_put(const char *path, const void *buf, u32 len); + +#endif diff --git a/channel/channelapp/source/loader.c b/channel/channelapp/source/loader.c new file mode 100644 index 0000000..7323285 --- /dev/null +++ b/channel/channelapp/source/loader.c @@ -0,0 +1,1009 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../config.h" +#include "blob.h" +#include "tcp.h" +#include "appentry.h" +#include "manage.h" +#include "dialogs.h" +#include "i18n.h" +#include "panic.h" + +#include "loader.h" + +#define USBGECKO_RETRIES 1000 + +static const char *text_err_read; +static const char *text_err_receive; +static const char *text_err_uncompress; +static const char *text_err_invalid_bin; +static const char *text_extract_zip; +static const char *text_err_invalid_zip; +static const char *text_err_extract_zip; +static const char *text_warn_overwrite; +static const char *text_err_oom; + +static inline u16 buf_u16(const u8 *buf, u8 pos) { + return (buf[pos] << 8) | buf[pos + 1]; +} + +static inline u32 buf_u32(const u8 *buf, u8 pos) { + return (buf[pos] << 24) | (buf[pos + 1] << 16) | + (buf[pos + 2] << 8) | buf[pos + 3]; +} + +// gecko handshake thread + +static lwp_t ld_gecko_thread; +static u8 ld_gecko_stack[LD_THREAD_STACKSIZE] ATTRIBUTE_ALIGN (32); + +typedef enum { + LDGECKOCMD_IDLE = 0, + LDGECKOCMD_EXIT, + LDGECKOCMD_POLL, + +} ld_gecko_cmd; + +typedef struct { + bool running; + bool handshaked; + ld_gecko_cmd cmd; + u32 data_len; + u32 data_len_un; + u16 args_len; + mutex_t cmutex; + cond_t cond; +} ld_gecko_arg; + +static void * ld_gecko_func (void *arg) { + ld_gecko_arg *ta = (ld_gecko_arg *) arg; + u8 buf[16]; + u8 left; + int res; + s64 t; + u16 wiiload_version; + + ta->running = true; + + LWP_MutexLock (ta->cmutex); + while (true) { + usb_flush(USBGECKO_CHANNEL); + + while (ta->cmd == LDGECKOCMD_IDLE) + LWP_CondWait(ta->cond, ta->cmutex); + + if (ta->cmd == LDGECKOCMD_EXIT) + break; + + ta->cmd = LDGECKOCMD_IDLE; + + ta->handshaked = false; + + left = 16; + t = gettime (); + while (left) { + res = usb_recvbuffer_safe_ex(USBGECKO_CHANNEL, &buf[16 - left], + left, USBGECKO_RETRIES); + + if (res) { + left -= res; + + continue; + } + + if (ticks_to_millisecs (diff_ticks (t, gettime ())) > LD_TIMEOUT) + break; + } + + if (left) + continue; + + wiiload_version = buf_u16(buf, 4); + ta->args_len = buf_u16(buf, 6); + ta->data_len = buf_u32(buf, 8); + ta->data_len_un = buf_u32(buf, 12); + + if (strncmp((char *) buf, "HAXX", 4) || + (wiiload_version < WIILOAD_MIN_VERSION) || + (ta->args_len > ARGS_MAX_LEN) || + (!ta->data_len || ta->data_len > LD_MAX_SIZE) || + (ta->data_len_un > LD_MAX_SIZE)) { + continue; + } + + gprintf_enable(0); + + ta->handshaked = true; + } + + LWP_MutexUnlock (ta->cmutex); + + gprintf("gecko handshake thread done\n"); + + ta->running = false; + return NULL; +} + +// tcp handshake thread + +static lwp_t ld_tcp_thread; +static u8 ld_tcp_stack[LD_THREAD_STACKSIZE] ATTRIBUTE_ALIGN (32); + +typedef enum { + LDTCPCMD_IDLE = 0, + LDTCPCMD_EXIT, + LDTCPCMD_INIT, + LDTCPCMD_ACCEPT +} ld_tcp_cmd; + +typedef enum { + LDTCPS_UNINITIALIZED = 0, + LDTCPS_INITIALIZING, + LDTCPS_INITIALIZED +} ld_tcp_state; + +typedef struct { + bool running; + ld_tcp_cmd cmd; + ld_tcp_state state; + bool handshaked; + u16 args_len; + u32 data_len; + u32 data_len_un; + int s; + char *client; + mutex_t cmutex; + cond_t cond; +} ld_tcp_arg; + +static void * ld_tcp_func (void *arg) { + ld_tcp_arg *ta = (ld_tcp_arg *) arg; + int s = -1, sn; + struct sockaddr_in sa; + u32 mask, len_sa; + s32 res; + u8 buf[16]; + u16 wiiload_version; + u8 retries; + + mask = 0; + + ta->running = true; + LWP_MutexLock (ta->cmutex); + + ta->cmd = LDTCPCMD_INIT; + ta->state = LDTCPS_UNINITIALIZED; + ta->handshaked = false; + + while (true) { + while (ta->cmd == LDTCPCMD_IDLE) + LWP_CondWait(ta->cond, ta->cmutex); + + ta->handshaked = false; + + if (ta->cmd == LDTCPCMD_EXIT) { + break; + } + + if (ta->cmd == LDTCPCMD_INIT) { + ta->cmd = LDTCPCMD_IDLE; + + if (ta->state == LDTCPS_INITIALIZED) { + gprintf ("reinit net\n"); + net_close (s); + } + + retries = 32; + ta->state = LDTCPS_INITIALIZING; + + while (retries) { + res = net_init_async(NULL, NULL); + + if (res) { + gprintf("net_init_async failed: %ld\n", res); + break; + } + + res = net_get_status(); + while (res == -EBUSY) { + if (ta->cmd == LDTCPCMD_EXIT) { + gprintf("exit while net_init_async still busy\n"); + res = -1; + break; + } + + usleep(50 * 1000); + res = net_get_status(); + } + + if ((res == -EAGAIN) || (res == -ETIMEDOUT)) { + gprintf ("net_init failed: %ld, trying again...\n", res); + retries--; + usleep(50 * 1000); + continue; + } + + break; + } + + if (res < 0) { + gprintf ("net_init failed: %ld\n", res); + ta->state = LDTCPS_UNINITIALIZED; + continue; + } + + gprintf ("net_init success: %ld\n", res); + + mask = net_gethostip () & 0xffff0000; + + s = tcp_listen (LD_TCP_PORT, 3); + + if ((s == -ENETRESET) && retries) { + gprintf("ENETRESET, reiniting\n"); + net_deinit(); + ta->cmd = LDTCPCMD_INIT; + continue; + } + + if (s < 0) { + gprintf ("tcp_listen failed: %d\n",s); + ta->state = LDTCPS_UNINITIALIZED; + continue; + } + + ta->state = LDTCPS_INITIALIZED; + + continue; + } + + if (ta->cmd == LDTCPCMD_ACCEPT) { + ta->cmd = LDTCPCMD_IDLE; + memset (&sa, 0, sizeof (struct sockaddr_in)); + sa.sin_family = AF_INET; + sa.sin_len = sizeof (struct sockaddr_in); + + len_sa = sizeof (struct sockaddr_in); + + sn = net_accept (s, (struct sockaddr *) &sa, &len_sa); + if (sn == -EAGAIN) + continue; + + if (sn == -ENETRESET) { + gprintf("ENETRESET, reiniting\n"); + net_deinit(); + ta->cmd = LDTCPCMD_INIT; + continue; + } + + if (sn < 0) { + gprintf ("net_accept failed: %d\n", sn); + + net_close (s); + ta->state = LDTCPS_UNINITIALIZED; + + continue; + } + + if ((sa.sin_addr.s_addr & 0xffff0000) != mask) { + gprintf ("non local ip (%lx)\n", sa.sin_addr.s_addr); + net_close (sn); + continue; + } + + if (!tcp_read (sn, buf, 16, NULL, NULL)) { + net_close (sn); + continue; + } + + wiiload_version = buf_u16(buf, 4); + ta->args_len = buf_u16(buf, 6); + ta->data_len = buf_u32(buf, 8); + ta->data_len_un = buf_u32(buf, 12); + + if (strncmp((char *) buf, "HAXX", 4) || + (wiiload_version < WIILOAD_MIN_VERSION) || + (ta->args_len > ARGS_MAX_LEN) || + (!ta->data_len || ta->data_len > LD_MAX_SIZE) || + (ta->data_len_un > LD_MAX_SIZE)) { + gprintf ("invalid upload request\n"); + net_close (sn); + continue; + } + + ta->s = sn; + ta->client = inet_ntoa (sa.sin_addr); + ta->handshaked = true; + + continue; + } + } + + if (ta->state == LDTCPS_INITIALIZED) { + gprintf ("net_shutdown\n"); + res = net_shutdown (s, 2); + if (res) + gprintf ("net_shutdown failed: %ld\n", res); + + gprintf ("net_close\n"); + res = net_close (s); + if (res) + gprintf ("net_close failed: %ld\n", res); + } + + gprintf ("tcp thread deiniting\n"); + net_deinit(); + gprintf ("tcp thread exiting\n"); + ta->state = LDTCPS_UNINITIALIZED; + + ta->running = false; + LWP_MutexUnlock (ta->cmutex); + + return NULL; +} + +// thread setup + +static ld_gecko_arg ta_gecko; +static ld_tcp_arg ta_tcp; + +void loader_init (void) { + int res; + + if (usb_isgeckoalive (USBGECKO_CHANNEL)) { + gprintf ("starting gecko thread\n"); + + memset (&ta_gecko, 0, sizeof (ld_gecko_arg)); + + memset (&ld_gecko_stack, 0, LD_THREAD_STACKSIZE); + + res = LWP_MutexInit (&ta_gecko.cmutex, false); + if (res) { + gprintf ("error creating cmutex: %d\n", res); + return; + } + + res = LWP_CondInit (&ta_gecko.cond); + if (res) { + gprintf ("error creating cond: %d\n", res); + return; + } + + res = LWP_CreateThread (&ld_gecko_thread, ld_gecko_func, &ta_gecko, + ld_gecko_stack, LD_THREAD_STACKSIZE, + LD_THREAD_PRIO); + + if (res) { + gprintf ("error creating thread: %d\n", res); + } + } + + gprintf ("starting tcp thread\n"); + + memset (&ta_tcp, 0, sizeof (ld_tcp_arg)); + + memset (&ld_tcp_stack, 0, LD_THREAD_STACKSIZE); + res = LWP_MutexInit (&ta_tcp.cmutex, false); + if (res) { + gprintf ("error creating cmutex: %d\n", res); + return; + } + res = LWP_CondInit (&ta_tcp.cond); + if (res) { + gprintf ("error creating cond: %d\n", res); + return; + } + res = LWP_CreateThread (&ld_tcp_thread, ld_tcp_func, &ta_tcp, ld_tcp_stack, + LD_THREAD_STACKSIZE, LD_THREAD_PRIO); + if (res) { + gprintf ("error creating thread: %d\n", res); + } +} + +void loader_deinit (void) { + u8 i; + + // the tcp thread does stuff on exit; the ideal order is stopping it first + if (ta_tcp.running) { + gprintf ("stopping tcp thread\n"); + + for (i = 0; i < 25; ++i) { + if (LWP_MutexTryLock (ta_tcp.cmutex) == 0) + break; + usleep (20 * 1000); + } + if (i >= 25) { + gprintf("tcp thread didn't shutdown gracefully!\n"); + } else { + gprintf ("sending tcp entry thread the exit cmd\n"); + ta_tcp.cmd = LDTCPCMD_EXIT; + LWP_SetThreadPriority (ld_tcp_thread, LWP_PRIO_HIGHEST); + LWP_CondBroadcast (ta_tcp.cond); + LWP_MutexUnlock (ta_tcp.cmutex); + + for (i = 0; i < 25; ++i) { + if (LWP_MutexTryLock (ta_tcp.cmutex) == 0) { + if (!ta_tcp.running) + break; + LWP_MutexUnlock (ta_tcp.cmutex); + } + usleep (20 * 1000); + } + if (i >= 25) { + gprintf("tcp thread didn't shutdown gracefully!\n"); + } else { + LWP_MutexUnlock (ta_tcp.cmutex); + LWP_JoinThread(ld_tcp_thread, NULL); + LWP_CondDestroy (ta_tcp.cond); + LWP_MutexDestroy (ta_tcp.cmutex); + } + } + } + + if (ta_gecko.running) { + gprintf ("stopping gecko thread\n"); + + for (i = 0; i < 25; ++i) { + if (LWP_MutexTryLock (ta_gecko.cmutex) == 0) + break; + usleep (20 * 1000); + } + if (i < 25) { + gprintf ("sending gecko entry thread the exit cmd\n"); + ta_gecko.cmd = LDGECKOCMD_EXIT; + LWP_SetThreadPriority (ld_gecko_thread, LWP_PRIO_HIGHEST); + LWP_CondBroadcast (ta_gecko.cond); + LWP_MutexUnlock (ta_gecko.cmutex); + LWP_JoinThread(ld_gecko_thread, NULL); + LWP_CondDestroy (ta_gecko.cond); + LWP_MutexDestroy (ta_gecko.cmutex); + } else { + gprintf("gecko thread didn't shutdown gracefully!\n"); + } + } + +} + +void loader_tcp_init (void) { + if (LWP_MutexTryLock(ta_tcp.cmutex) != 0) + return; + + if (ta_tcp.running && ta_tcp.state == LDTCPS_UNINITIALIZED) { + ta_tcp.cmd = LDTCPCMD_INIT; + LWP_CondBroadcast(ta_tcp.cond); + } + LWP_MutexUnlock(ta_tcp.cmutex); +} + +void loader_signal_threads (void) { + if (LWP_MutexTryLock(ta_gecko.cmutex) == 0) { + if (loader_gecko_initialized () && !ta_gecko.handshaked) { + ta_gecko.cmd = LDGECKOCMD_POLL; + LWP_CondBroadcast(ta_gecko.cond); + } + LWP_MutexUnlock(ta_gecko.cmutex); + } + + if (LWP_MutexTryLock(ta_tcp.cmutex) == 0) { + if (loader_tcp_initialized () && !ta_tcp.handshaked) { + ta_tcp.cmd = LDTCPCMD_ACCEPT; + LWP_CondBroadcast(ta_tcp.cond); + } + LWP_MutexUnlock(ta_tcp.cmutex); + } +} + +bool loader_gecko_initialized (void) { + return ta_gecko.running; +} + +bool loader_tcp_initializing (void) { + return ta_tcp.running && ta_tcp.state == LDTCPS_INITIALIZING; +} + +bool loader_tcp_initialized (void) { + return ta_tcp.running && ta_tcp.state == LDTCPS_INITIALIZED; +} + +bool loader_handshaked (void) { + bool handshaked = false; + if (LWP_MutexTryLock(ta_gecko.cmutex) == 0) { + handshaked = handshaked || (ta_gecko.running && ta_gecko.handshaked); + LWP_MutexUnlock(ta_gecko.cmutex); + } + if (LWP_MutexTryLock(ta_tcp.cmutex) == 0) { + handshaked = handshaked || (ta_tcp.running && ta_tcp.handshaked); + LWP_MutexUnlock(ta_tcp.cmutex); + } + + return handshaked; +} + +// loading thread + +static lwp_t ld_load_thread; +static u8 ld_load_stack[LD_THREAD_STACKSIZE] ATTRIBUTE_ALIGN (32); + +typedef enum { + LDC_FILE = 0, + LDC_GECKO, + LDC_TCP +} ld_load_cmd; + +typedef enum { + LDS_RUNNING = 0, + LDS_SUCCESS, + LDS_ERR_READ, + LDS_ERR_RECEIVE, + LDS_ERR_UNCOMPRESS +} ld_load_state; + +typedef struct { + ld_load_cmd cmd; + + u32 data_len; + u8 *data; + + u32 data_len_un; + u8 *data_un; + + u16 args_len; + + int fd; + + mutex_t mutex; + ld_load_state state; + u32 progress; +} ld_load_arg; + +static void * ld_load_func (void *arg) { + ld_load_arg *ta = (ld_load_arg *) arg; + u8 *d; + u32 left, received; + s32 block; + int res; + s64 t; + + d = ta->data; + received = 0; + left = ta->data_len + ta->args_len; + + switch (ta->cmd) { + case LDC_FILE: + while (left) { + block = left; + if (block > 32 * 1024) + block = 32 * 1024; + + block = read (ta->fd, d, block); + + if (block < 0) { + gprintf ("read failed: %ld\n", block); + close (ta->fd); + + LWP_MutexLock (ta->mutex); + ta->state = LDS_ERR_READ; + LWP_MutexUnlock (ta->mutex); + + return NULL; + } else { + d += block; + received += block; + left -= block; + + LWP_MutexLock (ta->mutex); + ta->progress = received; + LWP_MutexUnlock (ta->mutex); + } + } + + close (ta->fd); + + break; + + case LDC_GECKO: + block = 0; + t = gettime (); + + while (left) { + res = usb_recvbuffer_ex(USBGECKO_CHANNEL, d, left, USBGECKO_RETRIES); + + if (res) { + d += res; + received += res; + left -= res; + block += res; + + if (block >= 1024) { + block = 0; + + LWP_MutexLock (ta->mutex); + ta->progress = received; + LWP_MutexUnlock (ta->mutex); + + t = gettime (); + } + } + + if (ticks_to_millisecs (diff_ticks (t, gettime ())) > LD_TIMEOUT) { + LWP_MutexLock (ta->mutex); + ta->state = LDS_ERR_RECEIVE; + LWP_MutexUnlock (ta->mutex); + + gprintf_enable(1); + + return NULL; + } + } + + gprintf_enable(1); + + break; + + case LDC_TCP: + if (!tcp_read (ta->fd, ta->data, left, &ta->mutex, &ta->progress)) { + LWP_MutexLock (ta->mutex); + ta->state = LDS_ERR_RECEIVE; + LWP_MutexUnlock (ta->mutex); + + net_close (ta->fd); + + return NULL; + } + + net_close (ta->fd); + + break; + } + + if (ta->data_un) { + int res; + uLongf len = ta->data_len_un; + + res = uncompress(ta->data_un, &len, ta->data, ta->data_len); + + if (res != Z_OK) { + gprintf("error uncompressing: %d\n", res); + + LWP_MutexLock (ta->mutex); + ta->state = LDS_ERR_UNCOMPRESS; + LWP_MutexUnlock (ta->mutex); + + return NULL; + } + + if (len != ta->data_len_un) { + gprintf("short uncompress: %lu\n", (u32) len); + + LWP_MutexLock (ta->mutex); + ta->state = LDS_ERR_UNCOMPRESS; + LWP_MutexUnlock (ta->mutex); + + return NULL; + } + } + + LWP_MutexLock (ta->mutex); + ta->state = LDS_SUCCESS; + LWP_MutexUnlock (ta->mutex); + + return NULL; +} + +// public loading function + +void loader_load(loader_result *result, view *sub_view, app_entry *entry) { + char caption[MAXPATHLEN + 32]; + char filename[MAXPATHLEN]; + + ld_load_arg ta; + s32 res; + bool running; + u32 progress; + + view *v; + + text_err_read = _("Error while reading the application from the SD card"); + text_err_receive = _("Error while receiving the application"); + text_err_uncompress = _("Error uncompressing the received data"); + text_err_invalid_bin = _("This is not a valid Wii application"); + text_err_invalid_zip = _("This is not a usable ZIP file"); + text_err_oom = _("Not enough memory"); + + memset(result, 0, sizeof (loader_result)); + memset(&ta, 0, sizeof (ld_load_arg)); + memset(filename, 0, sizeof(filename)); + + bool gecko_handshaked = false; + bool tcp_handshaked = false; + + if (LWP_MutexTryLock (ta_gecko.cmutex) == 0) { + gecko_handshaked = ta_gecko.handshaked; + ta_gecko.cmd = LDGECKOCMD_IDLE; + LWP_MutexUnlock (ta_gecko.cmutex); + } + + if (LWP_MutexTryLock (ta_tcp.cmutex) == 0) { + tcp_handshaked = ta_tcp.handshaked; + ta_gecko.cmd = LDTCPCMD_IDLE; + LWP_MutexUnlock (ta_tcp.cmutex); + } + + if (entry) { + char *name; + + if (!app_entry_get_filename(filename, entry)) + return; + + gprintf ("loading %s\n", filename); + + ta.cmd = LDC_FILE; + + ta.fd = open (filename, O_RDONLY); + if (ta.fd < 0) + return; + + ta.data_len = entry->size; + + if (entry->meta && entry->meta->name) + name = entry->meta->name; + else + name = entry->dirname; + + sprintf (caption, _("Loading %s"), name); + } else if (gecko_handshaked) { + ta.cmd = LDC_GECKO; + ta_gecko.handshaked = false; + + ta.data_len = ta_gecko.data_len; + ta.data_len_un = ta_gecko.data_len_un; + ta.args_len = ta_gecko.args_len; + + sprintf (caption, _("Receiving over USBGecko")); + } else if (tcp_handshaked) { + ta.cmd = LDC_TCP; + ta_tcp.handshaked = false; + + ta.data_len = ta_tcp.data_len; + ta.data_len_un = ta_tcp.data_len_un; + ta.args_len = ta_tcp.args_len; + ta.fd = ta_tcp.s; + + sprintf (caption, _("Receiving from %s"), ta_tcp.client); + } else { + return; + } + + if (ta.data_len == ta.data_len_un) + ta.data_len_un = 0; + + if (ta.data_len_un) { + ta.data_un = (u8 *) blob_alloc(ta.data_len_un); + + if (!ta.data_un) { + if (ta.cmd == LDC_TCP) + net_close (ta.fd); + show_message (sub_view, DLGMT_ERROR, DLGB_OK, text_err_oom, 0); + return; + } + } + + ta.data = (u8 *) blob_alloc(ta.data_len + ta.args_len); + + if (!ta.data) { + blob_free(ta.data_un); + if (ta.cmd == LDC_TCP) + net_close (ta.fd); + show_message (sub_view, DLGMT_ERROR, DLGB_OK, text_err_oom, 0); + return; + } + + + res = LWP_MutexInit (&ta.mutex, false); + + if (res) { + gprintf ("error creating mutex: %ld\n", res); + blob_free (ta.data); + blob_free (ta.data_un); + if (ta.cmd == LDC_TCP) + net_close (ta.fd); + panic(); // if this happens, let's find out + return; + } + + memset (&ld_load_stack, 0, LD_THREAD_STACKSIZE); + res = LWP_CreateThread (&ld_load_thread, ld_load_func, &ta, ld_load_stack, + LD_THREAD_STACKSIZE, LD_THREAD_PRIO); + + if (res) { + gprintf ("error creating thread: %ld\n", res); + blob_free (ta.data); + blob_free (ta.data_un); + if (ta.cmd == LDC_TCP) + net_close (ta.fd); + panic(); // if this happens, let's find out + return; + } + + v = dialog_progress (sub_view, caption, ta.data_len + ta.args_len); + + dialog_fade (v, true); + + running = true; + while (running) { + LWP_MutexLock (ta.mutex); + running = ta.state == LDS_RUNNING; + progress = ta.progress; + LWP_MutexUnlock (ta.mutex); + + dialog_set_progress (v, progress); + + view_plot (v, DIALOG_MASK_COLOR, NULL, NULL, NULL); + } + + dialog_fade (v, false); + + view_free (v); + + LWP_MutexDestroy (ta.mutex); + + if (ta.data_len_un) { + if (ta.args_len) { + memcpy(result->args, &ta.data[ta.data_len], ta.args_len); + result->args_len = ta.args_len; + } + + blob_free(ta.data); + ta.data = ta.data_un; + ta.data_len = ta.data_len_un; + ta.data_un = NULL; + ta.data_len_un = 0; + } + + const char *text = NULL; + + switch (ta.state) { + case LDS_RUNNING: + case LDS_SUCCESS: + break; + case LDS_ERR_READ: + text = text_err_read; + break; + case LDS_ERR_RECEIVE: + text = text_err_receive; + break; + case LDS_ERR_UNCOMPRESS: + text = text_err_uncompress; + break; + } + + if (text) { + blob_free(ta.data); + show_message (sub_view, DLGMT_ERROR, DLGB_OK, text, 0); + return; + } + + result->data = ta.data; + result->data_len = ta.data_len; + + if (ta.cmd == LDC_FILE) { + switch(entry->type) { + case AET_BOOT_ELF: + case AET_BOOT_DOL: + break; + + case AET_THEME: + result->type = LT_ZIP_THEME; + return; + } + + result->type = LT_EXECUTABLE; + + strcpy(result->args, filename); + result->args_len = strlen (result->args); + + if (entry->meta && entry->meta->args) { + result->args_len++; + memcpy(result->args + result->args_len, + entry->meta->args, entry->meta->argslen); + result->args_len += entry->meta->argslen; + } + + result->args[result->args_len + 1] = 0; + result->args_len += 2; + + return; + } + + if (manage_is_zip(ta.data)) { + gprintf("we got a .zip\n"); + + if (manage_check_zip_app(ta.data, ta.data_len, result->dirname, + &result->bytes)) + result->type = LT_ZIP_APP; + else if (manage_check_zip_theme(ta.data, ta.data_len)) + result->type = LT_ZIP_THEME; + + if (result->type == LT_UNKNOWN) { + blob_free(ta.data); + ta.data = NULL; + ta.data_len = 0; + show_message (sub_view, DLGMT_ERROR, DLGB_OK, + text_err_invalid_zip, 0); + } + + return; + } + + result->type = LT_EXECUTABLE; +} + +bool loader_load_executable(entry_point *ep, loader_result *result, + view *sub_view) { + bool res = loader_reloc(ep, result->data, result->data_len, + result->args, result->args_len, true); + + if (!res) + show_message (sub_view, DLGMT_ERROR, DLGB_OK, text_err_invalid_bin, 0); + + blob_free(result->data); + + return res; +} + +bool loader_handle_zip_app(loader_result *result, view *sub_view) { + char buf[1024]; + char buf2[1024]; + + text_extract_zip = _("Extract the received ZIP file?\n%s of free space are required."); + text_warn_overwrite = _("WARNING: Files in '%s' will be overwritten"); + text_err_extract_zip = _("Error while extracting the ZIP file"); + + if ((result->bytes / 1024u) > 999) + sprintf(buf2, "%.02f MB", + (float)(result->bytes) / (float)(1024 * 1024)); + else + sprintf(buf2, "%lu KB", result->bytes / 1024u); + sprintf(buf, text_extract_zip, buf2); + + if (!app_entry_get_path(buf2)) { + blob_free(result->data); + return false; + } + + strcat(buf2, ":/"); + strcat(buf2, result->dirname); + if (dir_exists(buf2)) { + strcat(buf, "\n\n"); + sprintf(buf2, text_warn_overwrite, result->dirname); + strcat(buf, buf2); + } + + if (show_message(sub_view, DLGMT_CONFIRM, DLGB_YESNO, + buf, 0) != 0) { + blob_free(result->data); + return false; + } + + if (!manage_run(sub_view, result->dirname, result->data, + result->data_len, result->bytes)) { + show_message (sub_view, DLGMT_ERROR, DLGB_OK, text_err_extract_zip, 0); + blob_free(result->data); + return false; + } + + blob_free(result->data); + + return true; +} + diff --git a/channel/channelapp/source/loader.h b/channel/channelapp/source/loader.h new file mode 100644 index 0000000..3b8158f --- /dev/null +++ b/channel/channelapp/source/loader.h @@ -0,0 +1,48 @@ +#ifndef _LOADER_H_ +#define _LOADER_H_ + +#include + +#include + +#include "loader_reloc.h" +#include "appentry.h" +#include "view.h" + +typedef enum { + LT_UNKNOWN = 0, + LT_EXECUTABLE, + LT_ZIP_APP, + LT_ZIP_THEME +} loader_type; + +typedef struct { + loader_type type; + + u8 *data; + u32 data_len; + + char args[ARGS_MAX_LEN]; + u32 args_len; + + char dirname[MAXPATHLEN]; + u32 bytes; +} loader_result; + +void loader_init (void); +void loader_deinit (void); + +void loader_tcp_init (void); +void loader_signal_threads (void); +bool loader_gecko_initialized (void); +bool loader_tcp_initializing (void); +bool loader_tcp_initialized (void); +bool loader_handshaked (void); + +void loader_load(loader_result *result, view *sub_view, app_entry *entry); +bool loader_load_executable(entry_point *ep, loader_result *result, + view *sub_view); +bool loader_handle_zip_app(loader_result *result, view *sub_view); + +#endif + diff --git a/channel/channelapp/source/loader_reloc.c b/channel/channelapp/source/loader_reloc.c new file mode 100644 index 0000000..d43ef40 --- /dev/null +++ b/channel/channelapp/source/loader_reloc.c @@ -0,0 +1,283 @@ +#include +#include + +#include +#include + +#include "../config.h" +#include "loader.h" + +#include "elf_abi.h" +#include "asm.h" + +extern void __exception_closeall (); + +typedef struct _dolheader { + u32 text_pos[7]; + u32 data_pos[11]; + u32 text_start[7]; + u32 data_start[11]; + u32 text_size[7]; + u32 data_size[11]; + u32 bss_start; + u32 bss_size; + u32 entry_point; +} dolheader; + +static void patch_crt0 (entry_point *ep) { + u8 *p = (u8 *) *ep; + + if (p[0x20] == 0x41) { + gprintf ("patching crt0\n"); + p[0x20] = 0x40; + + DCFlushRange ((void *) &p[0x20], 1); + } +} + +static void set_argv (entry_point *ep, const char *args, u16 arg_len) { + u32 *p = (u32 *) *ep; + struct __argv *argv; + char *cmdline; + + if (p[1] != ARGV_MAGIC) { + gprintf ("application does not support argv\n"); + return; + } + + gprintf ("setting argv\n"); + + argv = (struct __argv *) &p[2]; + cmdline = (char *) LD_ARGS_ADDR; + + memcpy (cmdline, args, arg_len); + +#ifdef DEBUG_APP + size_t i; + + gprintf ("cmdline='"); + for (i = 0; i < arg_len; ++i) + if (cmdline[i] == 0) + gprintf ("\\0"); + else + gprintf ("%c", cmdline[i]); + gprintf ("'\n"); +#endif + + argv->argvMagic = ARGV_MAGIC; + argv->commandLine = cmdline; + argv->length = arg_len; + + DCFlushRange (&p[2], 4); + DCFlushRange ((void *) LD_ARGS_ADDR, arg_len); +} + +static bool reloc_dol (entry_point *ep, const u8 *addr, u32 size, + bool check_overlap) { + u32 i; + dolheader *dolfile; + + dolfile = (dolheader *) addr; + for (i = 0; i < 7; i++) { + if (!dolfile->text_size[i]) + continue; + + gprintf ("loading text section %lu @ 0x%08lx (0x%08lx bytes)\n", i, + dolfile->text_start[i], dolfile->text_size[i]); + + if (dolfile->text_pos[i] + dolfile->text_size[i] > size) + return false; + + if (check_overlap && ((dolfile->text_start[i] < LD_MIN_ADDR) || + ((dolfile->text_start[i] + dolfile->text_size[i] > + LD_MAX_ADDR)))) + return false; + + + memmove ((void *) dolfile->text_start[i], addr + dolfile->text_pos[i], + dolfile->text_size[i]); + + DCFlushRange ((void *) dolfile->text_start[i], dolfile->text_size[i]); + ICInvalidateRange ((void *) dolfile->text_start[i], + dolfile->text_size[i]); + } + + for(i = 0; i < 11; i++) { + if (!dolfile->data_size[i]) + continue; + + gprintf ("loading data section %lu @ 0x%08lx (0x%08lx bytes)\n", i, + dolfile->data_start[i], dolfile->data_size[i]); + + if (dolfile->data_pos[i] + dolfile->data_size[i] > size) + return false; + + if (check_overlap && ((dolfile->data_start[i] < LD_MIN_ADDR) || + (dolfile->data_start[i] + dolfile->data_size[i] > LD_MAX_ADDR))) + return false; + + memmove ((void*) dolfile->data_start[i], addr + dolfile->data_pos[i], + dolfile->data_size[i]); + + DCFlushRange ((void *) dolfile->data_start[i], dolfile->data_size[i]); + } + + *ep = (entry_point) dolfile->entry_point; + + return true; +} + +static s8 is_valid_elf (const u8 *addr, u32 size) { + Elf32_Ehdr *ehdr; /* Elf header structure pointer */ + + ehdr = (Elf32_Ehdr *) addr; + + if (!IS_ELF (*ehdr)) + return 0; + + if (ehdr->e_ident[EI_CLASS] != ELFCLASS32) + return -1; + + if (ehdr->e_ident[EI_DATA] != ELFDATA2MSB) + return -1; + + if (ehdr->e_ident[EI_VERSION] != EV_CURRENT) + return -1; + + if (ehdr->e_type != ET_EXEC) + return -1; + + if (ehdr->e_machine != EM_PPC) + return -1; + + return 1; +} + +static bool reloc_elf (entry_point *ep, const u8 *addr, u32 size, + bool check_overlap) { + Elf32_Ehdr *ehdr; + Elf32_Phdr *phdrs; + u8 *image; + int i; + + ehdr = (Elf32_Ehdr *) addr; + + if(ehdr->e_phoff == 0 || ehdr->e_phnum == 0) { + gprintf("ELF has no phdrs\n"); + return false; + } + if(ehdr->e_phentsize != sizeof(Elf32_Phdr)) { + gprintf("Invalid ELF phdr size\n"); + return false; + } + + phdrs = (Elf32_Phdr*)(addr + ehdr->e_phoff); + + for(i=0;ie_phnum;i++) { + + if(phdrs[i].p_type != PT_LOAD) { + gprintf("skip PHDR %d of type %ld\n", i, phdrs[i].p_type); + } else { + phdrs[i].p_paddr &= 0x3FFFFFFF; + phdrs[i].p_paddr |= 0x80000000; + + gprintf ("PHDR %d 0x%08lx [0x%lx] -> 0x%08lx [0x%lx] <", i, + phdrs[i].p_offset, phdrs[i].p_filesz, + phdrs[i].p_paddr, phdrs[i].p_memsz); + + if(phdrs[i].p_flags & PF_R) + gprintf("R"); + if(phdrs[i].p_flags & PF_W) + gprintf("W"); + if(phdrs[i].p_flags & PF_X) + gprintf("X"); + gprintf(">\n"); + + if(phdrs[i].p_filesz > phdrs[i].p_memsz) { + gprintf ("-> file size > mem size\n"); + return false; + } + + if(phdrs[i].p_filesz) { + if (check_overlap && ((phdrs[i].p_paddr < LD_MIN_ADDR) || + (phdrs[i].p_paddr + phdrs[i].p_filesz) > LD_MAX_ADDR)) { + gprintf ("-> failed overlap check\n"); + return false; + } + gprintf ("-> load 0x%lx\n", phdrs[i].p_filesz); + image = (u8 *) (addr + phdrs[i].p_offset); + memmove ((void *) phdrs[i].p_paddr, (const void *) image, + phdrs[i].p_filesz); + + DCFlushRange ((void *) phdrs[i].p_paddr, phdrs[i].p_memsz); + if(phdrs[i].p_flags & PF_X) + ICInvalidateRange ((void *) phdrs[i].p_paddr, phdrs[i].p_memsz); + } else { + gprintf ("-> skip\n"); + } + } + } + + *ep = (entry_point) ((ehdr->e_entry & 0x3FFFFFFF) | 0x80000000); + + return true; +} + +bool loader_reloc (entry_point *ep, const u8 *addr, u32 size, const char *args, + u16 arg_len, bool check_overlap) { + s8 res; + bool b; + + res = is_valid_elf (addr, size); + + if (res < 0) + return false; + + if (res == 1) + b = reloc_elf (ep, addr, size, check_overlap); + else + b = reloc_dol (ep, addr, size, check_overlap); + + if (b) { + patch_crt0 (ep); + + if (args && arg_len) + set_argv (ep, args, arg_len); + } + + return b; +} + +static const u32 exec_stub[] = { + 0x7c6903a6, // mtctr r3 + 0x3d208133, // lis r9, 0x8133 + 0x3d408180, // lis r10, 0x8180 + 0x90090000, // 1: stw r0, 0(r9) + 0x39290004, // addi r9, r9, 4 + 0x7c295000, // cmpd r9, r10 + 0x4180fff4, // blt 1b + 0x4e800420 // bctr +}; + +void loader_exec (entry_point ep) { + gprintf ("shutting down services and vectoring...\n"); + SYS_ResetSystem (SYS_SHUTDOWN, 0, 0); + + __exception_closeall (); + + // these pokes make ninty SDK dols work, I'm told + *(vu32*)0x800000F8 = 0x0E7BE2C0; // Bus Clock Speed + *(vu32*)0x800000FC = 0x2B73A840; // CPU Clock Speed + + void *target = (void *)((int)(SYS_GetArena2Hi() - sizeof exec_stub) & ~31); + void (*f_exec_stub) (int) = target; + + memcpy(target, exec_stub, sizeof exec_stub); + DCFlushRange(target, sizeof exec_stub); + ICInvalidateRange(target, sizeof exec_stub); + + f_exec_stub((u32)ep); + + gprintf ("this cant be good\n"); +} + diff --git a/channel/channelapp/source/loader_reloc.h b/channel/channelapp/source/loader_reloc.h new file mode 100644 index 0000000..7026ec1 --- /dev/null +++ b/channel/channelapp/source/loader_reloc.h @@ -0,0 +1,13 @@ +#ifndef _LOADER_RELOC_H_ +#define _LOADER_RELOC_H_ + +#include + +typedef void (*entry_point) (void); + +bool loader_reloc (entry_point *ep, const u8 *addr, u32 size, const char *args, + u16 arg_len, bool check_overlap); +void loader_exec (entry_point ep); + +#endif + diff --git a/channel/channelapp/source/m_main.c b/channel/channelapp/source/m_main.c new file mode 100644 index 0000000..534065c --- /dev/null +++ b/channel/channelapp/source/m_main.c @@ -0,0 +1,141 @@ +#include +#include + +#include +#include + +#include "../config.h" +#include "theme.h" +#include "view.h" +#include "loader.h" +#include "i18n.h" +#include "panic.h" + +#include "m_main.h" + +static view *v_m_main; + +static const char *text_no_ip; +static const char *text_has_ip; + +static bool bootmii_ios = false; + +static bool bootmii_is_installed(u64 title_id) { + u32 tmd_view_size; + u8 *tmdbuf; + bool ret; + + if (ES_GetTMDViewSize(title_id, &tmd_view_size) < 0) + return false; + + if (tmd_view_size < 90) + return false; + + if (tmd_view_size > 1024) + return false; + + tmdbuf = pmemalign(32, 1024); + + if (ES_GetTMDView(title_id, tmdbuf, tmd_view_size) < 0) { + free(tmdbuf); + return false; + } + + if (tmdbuf[50] == 'B' && tmdbuf[51] == 'M') + ret = true; + else + ret = false; + + free(tmdbuf); + + return ret; +} + +static bool inited_widgets = false; + +view * m_main_init (void) { + bootmii_ios = bootmii_is_installed(TITLEID_BOOTMII); + + v_m_main = view_new (8, NULL, 0, 0, 0, 0); + + m_main_theme_reinit(); + m_main_update(); + + view_set_focus(v_m_main, 0); + + return v_m_main; +} + +void m_main_deinit(void) { + view_free (v_m_main); + inited_widgets = false; + v_m_main = NULL; +} + +void m_main_theme_reinit(void) { + u16 x, y, yadd; + int i; + char buffer[20]; + + text_no_ip = _("Network not initialized"); + text_has_ip = _("Your Wii's IP is %u.%u.%u.%u"); + + if (inited_widgets) + for (i = 0; i < v_m_main->widget_count; ++i) + widget_free(&v_m_main->widgets[i]); + + if (bootmii_ios) + yadd = 16; + else + yadd = 32; + + x = (view_width - theme_gfx[THEME_BUTTON]->w) / 2; + y = 80; + + widget_button (&v_m_main->widgets[0], x, y, 0, BTN_NORMAL, _("Back")); + y += theme_gfx[THEME_BUTTON]->h + yadd; + widget_button (&v_m_main->widgets[1], x, y, 0, BTN_NORMAL, _("About")); + y += theme_gfx[THEME_BUTTON]->h + yadd; + + if (bootmii_ios) { + widget_button (&v_m_main->widgets[2], x, y, 0, BTN_NORMAL, + _("Launch BootMii")); + y += theme_gfx[THEME_BUTTON]->h + yadd; + } + + widget_button (&v_m_main->widgets[3], x, y, 0, BTN_NORMAL, _("Exit to System Menu")); + y += theme_gfx[THEME_BUTTON]->h + yadd; + + widget_button (&v_m_main->widgets[4], x, y, 0, BTN_NORMAL, _("Shutdown")); + + widget_label (&v_m_main->widgets[5], view_width / 3 * 2 - 16, 32, 0, + CHANNEL_VERSION_STR, view_width / 3 - 32, FA_RIGHT, + FA_ASCENDER, FONT_LABEL); + + sprintf(buffer, "IOS%ld v%ld.%ld", IOS_GetVersion(), IOS_GetRevisionMajor(), + IOS_GetRevisionMinor()); + + widget_label (&v_m_main->widgets[6], view_width / 3 * 2 - 16, + 32 + font_get_y_spacing(FONT_LABEL), 0, buffer, + view_width / 3 - 32, FA_RIGHT, FA_ASCENDER, FONT_LABEL); + + inited_widgets = true; +} + +void m_main_update (void) { + u32 ip; + char buffer[64]; + + if (loader_tcp_initialized ()) { + ip = net_gethostip (); + sprintf (buffer, text_has_ip, (ip >> 24) & 0xff, (ip >> 16) & 0xff, + (ip >> 8) & 0xff, ip & 0xff); + widget_label (&v_m_main->widgets[7], 48, 32, 0, buffer, + view_width / 3 * 2 - 32, FA_LEFT, FA_ASCENDER, FONT_LABEL); + } else { + widget_label (&v_m_main->widgets[7], 48, 32, 0, text_no_ip, + view_width / 3 * 2 - 32, FA_LEFT, FA_ASCENDER, FONT_LABEL); + } + +} + diff --git a/channel/channelapp/source/m_main.h b/channel/channelapp/source/m_main.h new file mode 100644 index 0000000..58ca935 --- /dev/null +++ b/channel/channelapp/source/m_main.h @@ -0,0 +1,15 @@ +#ifndef _M_MAIN_H_ +#define _M_MAIN_H_ + +#include + +#include "view.h" + +view * m_main_init (void); +void m_main_deinit (void); +void m_main_theme_reinit (void); + +void m_main_update (void); + +#endif + diff --git a/channel/channelapp/source/main.c b/channel/channelapp/source/main.c new file mode 100644 index 0000000..29a3bdd --- /dev/null +++ b/channel/channelapp/source/main.c @@ -0,0 +1,825 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../config.h" +#include "controls.h" +#include "appentry.h" +#include "playtime.h" +#include "gfx.h" +#include "tex.h" +#include "theme.h" +#include "cursors.h" +#include "font.h" +#include "widgets.h" +#include "view.h" +#include "bubbles.h" +#include "dialogs.h" +#include "browser.h" +#include "m_main.h" +#include "loader.h" +#ifdef ENABLE_UPDATES +#include "http.h" +#include "update.h" +#endif +#include "i18n.h" +#include "dvd.h" +#include "manage.h" +#include "xml.h" +#include "title.h" + +// Languages +#include "spanish_mo.h" +#include "dutch_mo.h" +#include "german_mo.h" +#include "french_mo.h" +#include "italian_mo.h" +#include "japanese_mo.h" + +#ifdef DEBUG_APP +//#define GDBSTUB +#else +#undef GDBSTUB +#endif + +#define WARN_SPLIT 360 + +extern const u8 stub_bin[]; +extern const u8 stub_bin_end; +extern const u32 stub_bin_size; + +u64 *conf_magic = STUB_ADDR_MAGIC; +u64 *conf_title_id = STUB_ADDR_TITLE; + +static bool should_exit; +static bool shutdown; +#ifdef GDBSTUB +static bool gdb; +#endif +static const char *text_delete; +static const char *text_error_delete; + +s32 __IOS_LoadStartupIOS(void) { +#if 0 + __ES_Init(); + __IOS_LaunchNewIOS(58); +#endif + return 0; +} + +#define MEM2_PROT 0x0D8B420A +#define ES_MODULE_START (u16*)0x939F0000 + +static const u16 ticket_check[] = { + 0x685B, // ldr r3,[r3,#4] ; get TMD pointer + 0x22EC, 0x0052, // movls r2, 0x1D8 + 0x189B, // adds r3, r3, r2; add offset of access rights field in TMD + 0x681B, // ldr r3, [r3] ; load access rights (haxxme!) + 0x4698, // mov r8, r3 ; store it for the DVD video bitcheck later + 0x07DB // lsls r3, r3, #31; check AHBPROT bit +}; + +static int patch_ahbprot_reset(void) +{ + u16 *patchme; + + if ((read32(0x0D800064) == 0xFFFFFFFF) ? 1 : 0) { + write16(MEM2_PROT, 2); + for (patchme=ES_MODULE_START; patchme < ES_MODULE_START+0x4000; ++patchme) { + if (!memcmp(patchme, ticket_check, sizeof(ticket_check))) + { + // write16/uncached poke doesn't work for MEM2 + patchme[4] = 0x23FF; // li r3, 0xFF + DCFlushRange(patchme+4, 2); + return 0; + } + } + return -1; + } else { + return -2; + } +} + +static void reset_cb(void) { +#ifdef GDBSTUB + gdb = true; +#else + should_exit = true; +#endif +} + +static void power_cb(void) { + should_exit = true; + shutdown = true; +} + +void config_language(void) { + s32 language; + const void *mo; + + // this is probably wrong, but we don't let the C library do any UTF-8 text + // processing worth mentioning anyway, and I'm scared of what might happen + // if I change this :P + setlocale(LC_CTYPE, "C-ISO-8859-1"); + +#ifdef FORCE_LANG + language = FORCE_LANG; +#else + language = CONF_GetLanguage(); + if (language < 0) + language = CONF_LANG_ENGLISH; +#endif + + mo = NULL; + + switch (language) { + case CONF_LANG_ENGLISH: + mo = NULL; + break; + + case CONF_LANG_SPANISH: + mo = spanish_mo; + break; + + case CONF_LANG_FRENCH: + mo = french_mo; + break; + + case CONF_LANG_GERMAN: + mo = german_mo; + break; + + case CONF_LANG_DUTCH: + mo = dutch_mo; + break; + + case CONF_LANG_ITALIAN: + mo = italian_mo; + break; + + case CONF_LANG_JAPANESE: + if (theme.langs & TLANG_JA) { + mo = japanese_mo; + } else { + gprintf("language ja disabled due to missing theme support\n"); + language = CONF_LANG_ENGLISH; + } + break; + + default: + gprintf("unsupported language %ld, defaulting to English\n", + language); + language = CONF_LANG_ENGLISH; + } + + gprintf("configuring language: %ld with mo file at %p\n", language, mo); + i18n_set_mo(mo); +} + + +static void main_pre(void) { +#ifdef DEBUG_APP + if(usb_isgeckoalive(USBGECKO_CHANNEL)) + CON_EnableGecko(USBGECKO_CHANNEL, 1); + +#ifdef GDBSTUB + DEBUG_Init(GDBSTUB_DEVICE_USB, USBGECKO_CHANNEL); +#endif +#endif + + AUDIO_Init(NULL); + DSP_Init(); + AUDIO_StopDMA(); + AUDIO_RegisterDMACallback(NULL); + + gfx_init_video(); + PAD_Init(); + + SYS_SetResetCallback(reset_cb); + title_init(); + SYS_SetPowerCallback(power_cb); + + gprintf("installing stub (%lu)\n", stub_bin_size); + +#ifdef DEBUG_APP + if (stub_bin_size > 0x1800) + gprintf("WARNING: stub too big!\n"); +#endif + + memcpy((u32 *) 0x80001800, stub_bin, stub_bin_size); + DCFlushRange((u32 *) 0x80001800, stub_bin_size); + + *conf_magic = 0; + + gprintf ("startup\n"); + gprintf("IOS Version: IOS%ld %ld.%ld\n", + IOS_GetVersion(), IOS_GetRevisionMajor(), IOS_GetRevisionMinor()); + + ISFS_Initialize(); + + WiiDVD_StopMotorAsync(); + + gfx_init(); + app_entry_init(); + theme_xml_init(); + theme_init(NULL, 0); + config_language(); + loader_init(); + controls_init(); + cursors_init(); + font_init(); + widgets_init(); + view_init(); + dialogs_init(); +} + +static void load_text(void) +{ + text_delete = _("Do you really want to delete this application?"); + text_error_delete = _("Error deleting '%s'"); +} + +static void refresh_theme(view *v, app_entry *app, u8 *data, u32 data_len) { + browser_gen_view(BA_REMOVE, NULL); + view_fade(v, TEX_LAYER_CURSOR + 1, 0, 0, 0, 0, 32, 8); + font_clear(); + theme_deinit(); + theme_init(data, data_len); + config_language(); + widgets_theme_reinit(); + bubbles_theme_reinit(); + view_theme_reinit(); + browser_theme_reinit(); + m_main_theme_reinit(); + dialogs_theme_reinit(); + view_fade(v, TEX_LAYER_CURSOR + 1, 0xff, 0xff, 0xff, 0xff, 31, -8); + browser_gen_view(BA_REFRESH, app); + load_text(); +} + +void main_real(void) { + view *v_last, *v_current, *v_m_main, *v_browser, *v_detail, *v_about; + + u8 fhw; + + u32 bd, bh; + s8 clicked; + s16 mm; + +#ifdef ENABLE_UPDATES + s16 update_check = -1; + bool update_in_progress = false; + bool update_available = false; +#endif + + app_entry *app_sel; + bool loading = false; + + loader_result ld_res; + entry_point ep; + bool reloced; + bool ahb_access; + bool launch_bootmii; + + u64 frame; + bool exit_about; + + char charbuf[MAXPATHLEN]; + + load_text(); + + playtime_destroy(); + + if (settings_load()) { + app_entry_set_prefered(settings.device); + app_entry_set_sort(settings.sort_order); + + if (settings.browse_mode == 1) + browser_switch_mode(); + } + +#ifdef ENABLE_UPDATES + update_check = 60; +#endif + + app_sel = NULL; + v_browser = browser_init(); + v_m_main = m_main_init (); + view_bubbles = true; + +#ifdef ENABLE_UPDATES + http_init (); +#endif + + fhw = font_get_y_spacing(FONT_MEMO); + + should_exit = false; + shutdown = false; +#ifdef GDBSTUB + gdb = false; +#endif + + reloced = false; + ahb_access = false; + launch_bootmii = false; + + frame = 0; + exit_about = false; + + v_last = v_current = v_browser; + v_detail = NULL; + v_about = NULL; + + view_fade(v_current, TEX_LAYER_CURSOR + 1, 0xff, 0xff, 0xff, 0xff, 31, -8); + + view_enable_cursor (true); + + while (!should_exit) { +#ifdef GDBSTUB + if (gdb) { + gprintf("attach gdb now!\n"); + _break(); + gdb = false; + SYS_SetResetCallback (reset_cb); + } +#endif + memstats(false); + + if (v_current == v_browser) { + switch (app_entry_action()) { + case AE_ACT_NONE: + break; + + case AE_ACT_REMOVE: + app_sel = browser_sel(); + if (app_sel) { + memset(settings.app_sel, 0, sizeof(settings.app_sel)); + strcpy(settings.app_sel, app_sel->dirname); + } + + bubble_popall(); + browser_gen_view(BA_REMOVE, NULL); + app_entries_free(); + memstats(true); + break; + + case AE_ACT_ADD: + if (strlen(settings.app_sel) > 0) + app_sel = app_entry_find(settings.app_sel); + else + app_sel = NULL; + + view_show_throbber(false); + browser_gen_view(BA_ADD, app_sel); + break; + } + } + + if (loading != app_entry_is_loading()) { + loading = !loading; + + view_show_throbber(loading); + } + + if (loading) + view_throbber_tickle(); + + if ((frame % 30) == 0) + app_entry_scan(); + + view_plot (v_current, DIALOG_MASK_COLOR, &bd, &bh, NULL); + + frame++; + if (v_last != v_current) { + frame = 0; + v_last = v_current; + } + + if (bd & PADS_HOME) { + if (v_current == v_browser) { + m_main_update (); + v_current = v_m_main; + view_set_focus (v_m_main, 0); + + continue; + } else { + if (v_current == v_m_main) + v_current = v_browser; + + continue; + } + } + + if (v_current == v_m_main) { + if (bd & PADS_B) { + v_current = v_browser; + + continue; + } + + if (bd & PADS_UP) + view_set_focus_prev (v_current); + + if (bd & PADS_DOWN) + view_set_focus_next (v_current); + + if (bd & PADS_A) { + switch (v_m_main->focus) { + case 0: + v_current = v_browser; + continue; + + case 1: + v_about = dialog_about (v_m_main); + v_current = v_about; + + view_enable_cursor (false); + + dialog_fade (v_current, true); + + exit_about = false; + + continue; + + case 2: + launch_bootmii = true; + should_exit = true; + break; + + case 3: + should_exit = true; + continue; + + case 4: + should_exit = true; + shutdown = true; + break; + } + } + + continue; + } + + if (v_current == v_browser) { + widget_set_flag (&v_browser->widgets[2], WF_ENABLED, + loader_gecko_initialized ()); + + if (!loader_tcp_initializing ()) + widget_set_flag (&v_browser->widgets[3], WF_ENABLED, + loader_tcp_initialized ()); + + if (loader_tcp_initializing () && (frame % 20 == 0)) + widget_toggle_flag (&v_browser->widgets[3], WF_ENABLED); + + if (bd & PADS_NET_INIT) + loader_tcp_init (); + +#ifdef ENABLE_UPDATES + if (loader_tcp_initialized () && (update_check > 0)) + update_check--; + + if (update_check == 0) { + update_check = -1; + update_in_progress = update_signal (); + } + + if (update_in_progress) { + if (!loading && !update_busy(&update_available)) + update_in_progress = false; + } + + if (update_available) { + update_available = false; + + reloced = update_execute (v_current, &ep); + should_exit = reloced; + + continue; + } +#endif + if (bd & PADS_1) { + dialog_options_result options; + options = show_options_dialog(v_current); + + if (options.confirmed) { + app_entry_set_sort(options.sort); + app_entry_set_device(options.device); + app_entry_set_prefered(options.device); + } + + continue; + } + + if (bd & PADS_2) { + browser_switch_mode(); + continue; + } + + if (bd & PADS_DPAD) { + browser_set_focus(bd); + continue; + } + + if (bd & PADS_A) { + clicked = view_widget_at_ir (v_browser); + + if (clicked == 0) { + browser_gen_view(BA_PREV, NULL); + continue; + } + + if (clicked == 1) { + browser_gen_view(BA_NEXT, NULL); + continue; + } + + if (clicked == 3) { + loader_tcp_init (); + continue; + } + + app_sel = browser_sel(); + + if (!app_sel) + continue; + + v_detail = dialog_app (app_sel, v_browser); + v_current = v_detail; + + dialog_fade (v_current, true); + + continue; + } + + if ((bd | bh) & PADS_MINUS) + browser_gen_view(BA_PREV, NULL); + + if ((bd | bh) & PADS_PLUS) + browser_gen_view(BA_NEXT, NULL); + + if (loader_handshaked ()) { + loader_load (&ld_res, v_browser, NULL); + + switch (ld_res.type) { + case LT_UNKNOWN: + break; + + case LT_EXECUTABLE: + if (loader_load_executable(&ep, &ld_res, v_browser)) { + reloced = true; + ahb_access = true; + should_exit = true; + } + + break; + + case LT_ZIP_APP: + if (loader_handle_zip_app(&ld_res, v_browser)) { + app_sel = app_entry_add(ld_res.dirname); + + if (app_sel) + browser_gen_view(BA_REFRESH, app_sel); + memstats(true); + } + + break; + + case LT_ZIP_THEME: + refresh_theme(v_current, app_sel, ld_res.data, + ld_res.data_len); + fhw = font_get_y_spacing(FONT_MEMO); + memstats(true); + break; + } + + continue; + } + + if (!reloced) + loader_signal_threads (); + + continue; + } + + if (v_current == v_detail) { + if (bd & PADS_LEFT) + view_set_focus_prev (v_current); + + if (bd & PADS_RIGHT) + view_set_focus_next (v_current); + + mm = 0; + if (bd & PADS_UP) + mm += fhw; + + if (bd & PADS_DOWN) + mm -= fhw; + + mm += controls_sticky() / 8; + + if (v_current->drag && (v_current->drag_widget == 6)) { + mm += -v_current->drag_y / 32; + } else if (bd & PADS_B) { + dialog_fade (v_current, false); + + v_current = v_browser; + view_free (v_detail); + v_detail = NULL; + + continue; + } + + widget_scroll_memo_deco (&v_detail->widgets[5], mm); + + if ((bd & PADS_A) && v_detail->focus == 10) { + dialog_fade (v_current, false); + + v_current = v_browser; + view_free (v_detail); + v_detail = NULL; + + continue; + } + + if ((bd & PADS_A) && v_detail->focus == 8) { + dialog_fade (v_current, false); + + v_current = v_browser; + view_free (v_detail); + v_detail = NULL; + + if (show_message (v_current, DLGMT_CONFIRM, DLGB_YESNO, + text_delete, 1) == 1) + continue; + + browser_gen_view(BA_REMOVE, NULL); + if (!manage_run(v_current, app_sel->dirname, NULL, 0, 0)) { + sprintf(charbuf, text_error_delete, app_sel->dirname); + show_message(v_current, DLGMT_ERROR, DLGB_OK, charbuf, 0); + } else { + app_entry_remove(app_sel); + app_sel = NULL; + } + browser_gen_view(BA_REFRESH, NULL); + + continue; + } + + if ((bd & PADS_A) && v_detail->focus == 9) { + dialog_fade (v_current, false); + + v_current = v_browser; + + view_free (v_detail); + v_detail = NULL; + + loader_load(&ld_res, v_browser, app_sel); + + switch (ld_res.type) { + case LT_UNKNOWN: + break; + + case LT_EXECUTABLE: + if (loader_load_executable(&ep, &ld_res, v_browser)) { + reloced = true; + + if (app_sel && app_sel->meta) + ahb_access = app_sel->meta->ahb_access; + + should_exit = true; + } + + break; + + case LT_ZIP_APP: + free(ld_res.data); + break; + + case LT_ZIP_THEME: + refresh_theme(v_current, app_sel, ld_res.data, + ld_res.data_len); + break; + } + + continue; + } + + continue; + } + + if (v_current == v_about) { + if (bd & (PADS_A | PADS_B)) + exit_about = true; + + if (exit_about) { + dialog_fade (v_current, false); + + v_current = v_m_main; + view_free (v_about); + v_about = NULL; + + view_enable_cursor (true); + + continue; + } + + if ((frame > 60 * 2) && (frame % 3) == 0) + widget_scroll_memo (&v_current->widgets[2], -1); + } + } + + gprintf ("exiting\n"); + + view_enable_cursor (false); + + if (v_current->sub_view) + dialog_fade (v_current, false); + + view_fade (v_current, TEX_LAYER_CURSOR + 1, 0, 0, 0, 0, 32, 8); + + WiiDVD_ShutDown(); + controls_deinit(); + + app_sel = browser_sel(); + if (app_sel) { + size_t i, s = strlen(app_sel->dirname); + memset(settings.app_sel, 0, sizeof(settings.app_sel)); + for (i = 0; i < s; ++i) + settings.app_sel[i] = tolower((int) app_sel->dirname[i]); + } + + // because the tcp thread is the only one that can block after the exit + // command is sent, deinit it first. this gives the other threads a chance + // to do any pending work if the tcp thread does block. + loader_deinit (); +#ifdef ENABLE_UPDATES + http_deinit (); +#endif + app_entry_deinit (); + + gfx_deinit (); + cursors_deinit (); + + browser_deinit (); + m_main_deinit (); + + dialogs_deinit (); + view_deinit (); + widgets_deinit (); + font_deinit (); + theme_deinit(); + + settings_save(); + + if (launch_bootmii) { + gprintf ("launching BootMii\n"); + __IOS_LaunchNewIOS(BOOTMII_IOS); + } + + if (reloced) { + if (ahb_access) { + gprintf ("patching IOS for AHB access post-reload...\n"); + int res = patch_ahbprot_reset(); + if (res) + gprintf ("patch failed (%d)\n", res); + } + + gprintf ("reloading to IOS%ld...\n", APPS_IOS_VERSION); + __IOS_LaunchNewIOS(APPS_IOS_VERSION); + + if (ahb_access) { + gprintf ("reenabling DVD access...\n"); + mask32(0x0D800180, 1<<21, 0); + } + + gprintf ("branching to %p\n", ep); + loader_exec (ep); + } + + if (shutdown) { + gprintf ("shutting down\n"); + SYS_ResetSystem(SYS_POWEROFF, 0, 0); + } + + gprintf ("returning to sysmenu\n"); + SYS_ResetSystem (SYS_RETURNTOMENU, 0, 0); +} + +int main(int argc, char *argv[]) { + main_pre(); + main_real(); + gprintf("uh oh\n"); + return 0; +} + diff --git a/channel/channelapp/source/manage.c b/channel/channelapp/source/manage.c new file mode 100644 index 0000000..53644e8 --- /dev/null +++ b/channel/channelapp/source/manage.c @@ -0,0 +1,561 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "../config.h" +#include "appentry.h" +#include "theme.h" +#include "unzip.h" +#include "dialogs.h" +#include "i18n.h" +#include "panic.h" + +#include "manage.h" + +s32 dir_exists(char *dirname) { + struct stat st; + + if (stat(dirname, &st) != 0) + return 0; + + if (S_ISDIR(st.st_mode)) + return 1; + + gprintf("'%s' exists, but is no directory\n", dirname); + + return -1; +} + +static s32 mkdir_hier(char *dirname) { + char dir[MAXPATHLEN]; + size_t i; + s32 res; + + strcpy(dir, dirname); + + if (dir[strlen(dir) - 1] != '/') + strcat(dir, "/"); + + i = 1; + while (dir[i]) { + if (dir[i] == '/') { + dir[i] = 0; + + res = dir_exists(dir); + + if (res < 0) + return res; + + if (!res) { + gprintf("mkdir '%s'\n", dir); + if (mkdir(dir, 0755)) { + gprintf("mkdir failed: %d\n", errno); + return -1; + } + } + + dir[i] = '/'; + } + + i++; + } + + return 0; +} + +static s32 rmdir_hier_iter(const char *dirname) { + s32 res = -1; + DIR* d; + struct dirent *de; + + gprintf("rmdir_hier_iter '%s'\n", dirname); + + d = opendir(dirname); + if (!d) { + gprintf("opendir '%s' failed\n", dirname); + return -1; + } + + char newpath[MAXPATHLEN]; + + while ((de = readdir(d))) { + if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) + continue; + + strcpy(newpath, dirname); + if (newpath[strlen(newpath) - 1] != '/') + strcat(newpath, "/"); + strcat(newpath, de->d_name); + + if (de->d_type == DT_DIR) { + res = rmdir_hier_iter(newpath); + if (res) + goto exit; + } + + gprintf("unlinking '%s'\n", newpath); + res = unlink(newpath); + if (res) { + gprintf("error unlinking '%s'\n", newpath); + goto exit; + } + } + + res = 0; + +exit: + closedir(d); + + return res; +} + +static s32 rmdir_hier(const char *dirname) { + char buf[MAXPATHLEN]; + + sprintf(buf, "%s/%s", app_path, dirname); + + gprintf("rmdir_hier '%s'\n", buf); + s32 res = rmdir_hier_iter(buf); + if (!res) { + gprintf("unlinking dir '%s'\n", (buf)); + res = unlink(buf); + if (res) + gprintf("error unlinking '%s'\n", buf); + } + + return res; +} + +bool manage_is_zip(const u8 *data) { + return memcmp(data, "PK\x03\x04", 4) == 0; +} + +bool manage_check_zip_app(u8 *data, u32 data_len, char *dirname, u32 *bytes) { + unzFile uf; + int res, i; + bool ret = false; + unz_global_info gi; + + uf = unzOpen(data, data_len); + if (!uf) { + gprintf("unzOpen failed\n"); + return false; + } + + res = unzGetGlobalInfo (uf, &gi); + if (res != UNZ_OK) { + gprintf("unzGetGlobalInfo failed: %d\n", res); + goto error; + } + + if ((gi.number_entry < 2) || (gi.number_entry > 1024)) { + gprintf("invalid file count\n"); + goto error; + } + + char filename[256]; + unz_file_info fi; + u8 got_elf = 0; + u8 got_dol = 0; + u8 got_theme = 0; + + dirname[0] = 0; + *bytes = 0; + + for (i = 0; i < gi.number_entry; ++i) { + res = unzGetCurrentFileInfo(uf, &fi, filename, sizeof(filename) ,NULL, 0, NULL, 0); + if (res != UNZ_OK) { + gprintf("unzGetCurrentFileInfo failed: %d\n", res); + goto error; + } + + gprintf("found '%s' %lu -> %lu\n", filename, fi.compressed_size, fi.uncompressed_size); + + if (filename[0] == '/' || strchr(filename, '\\') || strchr(filename, ':')) { + gprintf("invalid char in filename\n"); + goto error; + } + + if (fi.flag & 1) { + gprintf("encrypted entry\n"); + goto error; + } + + if (fi.uncompressed_size > 0) { + *bytes += fi.uncompressed_size; + + if (!dirname[0]) { + char *p = strchr(filename, '/'); + if (p) { + strncpy(dirname, filename, p - filename + 1); + dirname[p - filename + 1] = 0; + + gprintf("dirname='%s'\n", dirname); + } else { + gprintf("missing pathname\n"); + goto error; + } + } else { + if (strncmp(filename, dirname, strlen(dirname))) { + gprintf("additional pathname\n"); + goto error; + } + } + + if (!strcasecmp(filename + strlen(dirname), app_fn_boot_elf)) + got_elf = 1; + else if (!strcasecmp(filename + strlen(dirname), app_fn_boot_dol)) + got_dol = 1; + else if (!strcasecmp(filename + strlen(dirname), app_fn_theme)) + got_theme = 1; + } + + if (i != gi.number_entry - 1) { + res = unzGoToNextFile(uf); + if (res != UNZ_OK) { + gprintf("unzGoToNextFile failed: %d\n", res); + goto error; + } + } + } + + if (strlen(dirname) && ((got_elf + got_dol + got_theme) == 1)) { + ret = true; + dirname[strlen(dirname) - 1] = 0; + } + +error: + res = unzClose(uf); + if (res) + gprintf("unzClose failed: %d\n", res); + + return ret; +} + +bool manage_check_zip_theme(u8 *data, u32 data_len) { + unzFile uf; + int res, i; + bool ret = false; + unz_global_info gi; + + if (data_len > MAX_THEME_ZIP_SIZE) { + gprintf("theme size too big: %lu\n", data_len); + return false; + } + + uf = unzOpen(data, data_len); + if (!uf) { + gprintf("unzOpen failed\n"); + return false; + } + + res = unzGetGlobalInfo (uf, &gi); + if (res != UNZ_OK) { + gprintf("unzGetGlobalInfo failed: %d\n", res); + goto error; + } + + if ((gi.number_entry < 1) || (gi.number_entry > 64)) { + gprintf("invalid file count\n"); + goto error; + } + + char filename[256]; + unz_file_info fi; + bool got_xml = false; + + for (i = 0; i < gi.number_entry; ++i) { + res = unzGetCurrentFileInfo(uf, &fi, filename, sizeof(filename) ,NULL, 0, NULL, 0); + if (res != UNZ_OK) { + gprintf("unzGetCurrentFileInfo failed: %d\n", res); + goto error; + } + + gprintf("found '%s' %lu -> %lu\n", filename, fi.compressed_size, fi.uncompressed_size); + + if (filename[0] == '/' || strchr(filename, '\\') || strchr(filename, ':')) { + gprintf("invalid char in filename\n"); + goto error; + } + + if (fi.flag & 1) { + gprintf("encrypted entry\n"); + goto error; + } + + if (fi.uncompressed_size > 0) { + char *p = strchr(filename, '/'); + if (p) { + gprintf("directories not accepted\n"); + goto error; + } + + if (!strcasecmp(filename, theme_fn_xml)) { + got_xml = true; + } else if (!theme_is_valid_fn(filename)) { + gprintf("not a valid theme filename\n"); + goto error; + } + } + + if (i != gi.number_entry - 1) { + res = unzGoToNextFile(uf); + if (res != UNZ_OK) { + gprintf("unzGoToNextFile failed: %d\n", res); + goto error; + } + } + } + + if (got_xml) + ret = true; + +error: + res = unzClose(uf); + if (res) + gprintf("unzClose failed: %d\n", res); + + return ret; +} + +static bool manage_extract_zip(u8 *data, u32 data_len, + mutex_t *mutex, u32 *progress) { + unzFile uf; + int res, i; + bool ret = false; + unz_global_info gi; + u8 *buf = NULL; + + uf = unzOpen(data, data_len); + if (!uf) { + gprintf("unzOpen failed\n"); + return false; + } + + res = unzGetGlobalInfo (uf, &gi); + if (res != UNZ_OK) { + gprintf("unzGetGlobalInfo failed: %d\n", res); + goto error; + } + + unz_file_info fi; + char filename[256]; + char sd_filename[MAXPATHLEN]; + char *p; + int fd; + + buf = (u8 *) pmalloc(8 * 1024); + + for (i = 0; i < gi.number_entry; ++i) { + res = unzGetCurrentFileInfo(uf, &fi, filename, sizeof(filename) ,NULL, 0, NULL, 0); + if (res != UNZ_OK) { + gprintf("unzGetCurrentFileInfo failed: %d\n", res); + goto error; + } + + gprintf("extracting '%s' %lu -> %lu\n", filename, fi.compressed_size, fi.uncompressed_size); + + if (fi.uncompressed_size > 0) { + res = unzOpenCurrentFile(uf); + if (res != UNZ_OK) { + gprintf("unzOpenCurrentFile failed: %d\n", res); + goto error; + } + + sprintf(sd_filename, "%s/%s", app_path, filename); + + p = strrchr(sd_filename, '/'); + if (!p) { + gprintf("invalid path: %s\n", sd_filename); + goto error; + } + + *p = 0; + res = mkdir_hier(sd_filename); + if (res) { + gprintf("mkdir_hier failed: %d\n", res); + goto error; + } + *p = '/'; + + fd = open(sd_filename, O_CREAT|O_WRONLY|O_TRUNC); + if (fd < 0) { + gprintf("error opening file: %d\n", fd); + goto error; + } + + do { + res = unzReadCurrentFile(uf, buf, 8 * 1024); + + if (res < 0) { + gprintf("unzReadCurrentFile failed: %d\n", res); + break; + } + + if (res > 0) { + if (res != write(fd, buf, res)) { + gprintf("short write"); + res = -1; + break; + } + + LWP_MutexLock (*mutex); + *progress += res; + LWP_MutexUnlock (*mutex); + } + } while (res > 0); + + close(fd); + unzCloseCurrentFile(uf); + + if (res < 0) { + gprintf("error extracting file: %d\n", res); + goto error; + } + } + + if (i != gi.number_entry - 1) { + res = unzGoToNextFile(uf); + if (res != UNZ_OK) { + gprintf("unzGoToNextFile failed: %d\n", res); + goto error; + } + } + } + + ret = true; + +error: + free(buf); + + res = unzClose(uf); + if (res) + gprintf("unzClose failed: %d\n", res); + + return ret; +} + +static lwpq_t manage_queue; +static lwp_t manage_thread; +static u8 manage_stack[MANAGE_THREAD_STACKSIZE] ATTRIBUTE_ALIGN (32); + +typedef struct { + bool running; + + bool extract; + + // extract + u8 *data; + u32 data_len; + mutex_t mutex; + u32 progress; + + // delete + const char *dirname; + + bool success; +} manage_zip_arg; + +static void *manage_func (void *arg) { + manage_zip_arg *ta = (manage_zip_arg *) arg; + + if (ta->extract) + ta->success = manage_extract_zip(ta->data, ta->data_len, &ta->mutex, &ta->progress); + else + ta->success = 0 == rmdir_hier(ta->dirname); + + ta->running = false; + + return NULL; +} + +bool manage_run(view *sub_view, const char *dirname, + u8 *data, u32 data_len, u32 bytes) { + s32 res; + u32 progress = 0; + char caption[MAXPATHLEN]; + + view *v; + + manage_zip_arg ta; + + res = LWP_MutexInit(&ta.mutex, false); + if (res) { + gprintf ("error creating mutex: %ld\n", res); + return false; + } + + ta.running = true; + ta.data = data; + ta.data_len = data_len; + ta.progress = 0; + ta.dirname = dirname; + + ta.extract = data != NULL; + + memset(&manage_stack, 0, MANAGE_THREAD_STACKSIZE); + LWP_InitQueue(&manage_queue); + res = LWP_CreateThread(&manage_thread, manage_func, &ta, manage_stack, + MANAGE_THREAD_STACKSIZE, MANAGE_THREAD_PRIO); + + if (res) { + gprintf ("error creating thread: %ld\n", res); + LWP_CloseQueue(manage_queue); + return false; + } + + const char *text; + + if (data) { + text = _("Extracting"); + sprintf(caption, "%s '%s'...", text, dirname); + v = dialog_progress(sub_view, caption, bytes); + dialog_fade(v, true); + } else { + v = sub_view; + view_show_throbber(true); + } + + while (true) { + LWP_MutexLock(ta.mutex); + if (!ta.running) { + LWP_MutexUnlock(ta.mutex); + break; + } + + progress = ta.progress; + + LWP_MutexUnlock (ta.mutex); + + if (data) + dialog_set_progress(v, progress); + else + view_throbber_tickle(); + + view_plot(v, DIALOG_MASK_COLOR, NULL, NULL, NULL); + } + + if (data) { + dialog_fade(v, false); + view_free(v); + } else { + view_show_throbber(false); + } + + //LWP_SuspendThread(manage_thread); + LWP_CloseQueue(manage_queue); + + LWP_MutexDestroy(ta.mutex); + + return ta.success; +} + + diff --git a/channel/channelapp/source/manage.h b/channel/channelapp/source/manage.h new file mode 100644 index 0000000..013230c --- /dev/null +++ b/channel/channelapp/source/manage.h @@ -0,0 +1,18 @@ +#ifndef _MANAGE_H_ +#define _MANAGE_H_ + +#include + +#include "view.h" + +s32 dir_exists(char *dirname); + +bool manage_is_zip(const u8 *data); +bool manage_check_zip_app(u8 *data, u32 data_len, char *dirname, u32 *bytes); +bool manage_check_zip_theme(u8 *data, u32 data_len); + +bool manage_run(view *sub_view, const char *dirname, + u8 *data, u32 data_len, u32 bytes); + +#endif + diff --git a/channel/channelapp/source/panic.c b/channel/channelapp/source/panic.c new file mode 100644 index 0000000..1f5cd8e --- /dev/null +++ b/channel/channelapp/source/panic.c @@ -0,0 +1,137 @@ +#include +#include + +#include "panic.h" + +// steal from libogc +extern unsigned char console_font_8x16[]; + +#define BLACK 0x00800080 +#define RED 0x4C544CFF + +static vu32 *fb; + +static void pchar(u32 cx, u32 cy, char c) +{ + int x,y; + unsigned char *p = &console_font_8x16[16*c]; + + for (y=0; y<16; y++) { + char v = *p++; + for (x=0; x<4; x++) { + u32 c = RED; + switch (v&0xc0) { + case 0x00: + c = BLACK; + break; + case 0x40: + c = (RED & 0x0000FF00) | (BLACK & 0xFFFF00FF); + break; + case 0x80: + c = (RED & 0xFFFF00FF) | (BLACK & 0x0000FF00); + break; + case 0xc0: + c = RED; + break; + } + fb[320*(cy+y)+cx+x] = c; + v<<=2; + } + } +} + +static void putsc(u32 y, char *s) { + u32 x = (320-strlen(s)*4)/2; + while(*s) { + pchar(x, y, *s++); + x += 4; + } +} + +static void hex(u32 v, char *p) { + int i; + for (i=0; i<8; i++) { + if ((v>>28) >= 10) + *p++ = 'A' + (v>>28) - 10; + else + *p++ = '0' + (v>>28); + v <<= 4; + } +} + +#define HW_REG_BASE 0xd800000 +#define HW_RESETS (HW_REG_BASE + 0x194) + +// written to be as generic and reliable as possible +void _panic(u32 file, u32 line) +{ + u32 level; + u32 fbr; + int count = 30; + int x,y; + u32 bcolor = BLACK; + u16 vtr; + int lines; + char guru[] = "Guru Meditation #00000000.00000000"; + _CPU_ISR_Disable(level); + + fbr = read32(0xc00201c) & 0x1fffffff; + if (fbr&0x10000000) + fbr <<= 5; + + fb = (vu32*)(fbr | 0xC0000000); + + vtr = read16(0xc002000); + if ((vtr & 0xf) > 10) + lines = vtr >> 4; + else + lines = 2 * (vtr >> 4); + + for(y=(lines-1); y>=116; y--) + for(x=0; x<320; x++) + fb[y*320+x] = fb[(y-116)*320+x]; + for(y=0; y<116; y++) + for(x=0; x<320; x++) + fb[y*320+x] = BLACK; + + hex(file, &guru[17]); + hex(line, &guru[26]); + + putsc(42, "Software Failure. Press reset button to continue."); + putsc(62, guru); + + // wait for reset button + while(read32(0xcc003000)&0x10000) { + // blink + if (count >= 25) { + if (bcolor == RED) + bcolor = BLACK; + else + bcolor = RED; + + for(y=28; y<34; y++) + for(x=14; x<306; x++) + fb[y*320+x] = bcolor; + for(y=34; y<84; y++) { + for(x=14; x<17; x++) + fb[y*320+x] = bcolor; + for(x=303; x<306; x++) + fb[y*320+x] = bcolor; + } + for(y=84; y<90; y++) + for(x=14; x<306; x++) + fb[y*320+x] = bcolor; + + count = 0; + } + + // hacky waitvsync + while(read16(0xc00202c) >= 200); + while(read16(0xc00202c) < 200); + count++; + } + + // needs AHBPROT, is evil. so sue me. + write32(HW_RESETS, read32(HW_RESETS)&(~1)); + while(1); +} diff --git a/channel/channelapp/source/panic.h b/channel/channelapp/source/panic.h new file mode 100644 index 0000000..e4c7cb3 --- /dev/null +++ b/channel/channelapp/source/panic.h @@ -0,0 +1,53 @@ +#ifndef _PANIC_H_ +#define _PANIC_H_ + +#include +#include +#include + +// to skip 'source/' +#define FOFF 7 + +#define S2I(s) (((s)[FOFF+0]<<24)|((s)[FOFF+1]<<16)|((s)[FOFF+2]<<8)|((s)[FOFF+3])) + +#define panic() _panic(S2I(__FILE__)^0xDEADBEEF, __LINE__) +void _panic(u32 file, u32 line) __attribute__((noreturn)); + +#define pmalloc(s) _pmalloc(s, S2I(__FILE__)^0xDEADBEEF, __LINE__) +static inline void *_pmalloc(size_t s, u32 file, u32 line) +{ + void *p = malloc(s); + if (!p) + _panic(file, line); + return p; +} + +#define pmemalign(a,s) _pmemalign(a, s, S2I(__FILE__)^0xDEADBEEF, __LINE__) +static inline void *_pmemalign(size_t a, size_t s, u32 file, u32 line) +{ + void *p = memalign(a, s); + if (!p) + _panic(file, line); + return p; +} + +#define prealloc(p,s) _prealloc(p, s, S2I(__FILE__)^0xDEADBEEF, __LINE__) +static inline void *_prealloc(void *p, size_t s, u32 file, u32 line) +{ + p = realloc(p, s); + if (!p) + _panic(file, line); + return p; +} + +#define pstrdup(s) _pstrdup(s, S2I(__FILE__)^0xDEADBEEF, __LINE__) +static inline void *_pstrdup(const char *s, u32 file, u32 line) +{ + char *p; + p = strdup(s); + if (!p) + _panic(file, line); + return p; +} + +#endif diff --git a/channel/channelapp/source/playtime.c b/channel/channelapp/source/playtime.c new file mode 100644 index 0000000..84c64ad --- /dev/null +++ b/channel/channelapp/source/playtime.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "../config.h" +#include "playtime.h" + +static char _playtime_path[] __attribute__((aligned(32))) = + "/title/00000001/00000002/data/play_rec.dat"; + +void playtime_destroy(void) { + s32 res; + s32 pt_fd = -1; + static u8 pt_buf[4] __attribute__((aligned(32))); + + gprintf("destroying playtime\n"); + + pt_fd = IOS_Open(_playtime_path, IPC_OPEN_RW); + if(pt_fd < 0) { + gprintf("playtime open failed: %ld\n", pt_fd); + return; + } + + memset(pt_buf, 0, sizeof(pt_buf)); + + res = IOS_Write(pt_fd, &pt_buf, sizeof(pt_buf)); + if (res != sizeof(pt_buf)) { + IOS_Close(pt_fd); + gprintf("error destroying playtime (%ld)\n", res); + return; + } + + IOS_Close(pt_fd); +} + diff --git a/channel/channelapp/source/playtime.h b/channel/channelapp/source/playtime.h new file mode 100644 index 0000000..e7f681a --- /dev/null +++ b/channel/channelapp/source/playtime.h @@ -0,0 +1,25 @@ +#ifndef _PLAYTIME_H_ +#define _PLAYTIME_H_ + +#include + +typedef union { + struct { + u32 checksum; + u16 name[0x28]; + u32 _pad1; + u64 ticks_boot; + u64 ticks_last; + u32 title_id; + u32 _pad2[5]; + }; + struct { + u32 _checksum; + u32 data[0x1f]; + }; +} __attribute__((packed)) playtime_t; + +void playtime_destroy(void); + +#endif + diff --git a/channel/channelapp/source/sha1.c b/channel/channelapp/source/sha1.c new file mode 100644 index 0000000..614c91b --- /dev/null +++ b/channel/channelapp/source/sha1.c @@ -0,0 +1,172 @@ +/* +SHA-1 in C +By Steve Reid +100% Public Domain + +Test Vectors (from FIPS PUB 180-1) +"abc" + A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D +"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 +A million repetitions of "a" + 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F +*/ + +/* #define LITTLE_ENDIAN * This should be #define'd if true. */ +#define SHA1HANDSOFF + +#include +#include +#include "sha1.h" + +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +/* blk0() and blk() perform the initial expand. */ +/* I got the idea of expanding during the round function from SSLeay */ +#ifdef LITTLE_ENDIAN +#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ + |(rol(block->l[i],8)&0x00FF00FF)) +#else +#define blk0(i) block->l[i] +#endif +#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ + ^block->l[(i+2)&15]^block->l[i&15],1)) + +/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ +#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); +#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); +#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); + + +/* Hash a single 512-bit block. This is the core of the algorithm. */ + +void SHA1Transform(unsigned long state[5], const unsigned char buffer[64]) +{ +unsigned long a, b, c, d, e; +typedef union { + unsigned char c[64]; + unsigned long l[16]; +} CHAR64LONG16; +CHAR64LONG16* block; +#ifdef SHA1HANDSOFF +static unsigned char workspace[64]; + block = (CHAR64LONG16*)workspace; + memcpy(block, buffer, 64); +#else + block = (CHAR64LONG16*)buffer; +#endif + /* Copy context->state[] to working vars */ + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); + R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); + R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); + R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); + R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); + R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); + R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); + R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); + R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); + R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); + R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); + R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); + R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); + R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); + R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); + R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); + R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); + R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); + R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); + R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); + /* Add the working vars back into context.state[] */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + /* Wipe variables */ + a = b = c = d = e = 0; +} + + +/* SHA1Init - Initialize new context */ + +void SHA1Init(SHA1_CTX* context) +{ + /* SHA1 initialization constants */ + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; + context->count[0] = context->count[1] = 0; +} + + +/* Run your data through this. */ + +void SHA1Update(SHA1_CTX* context, const unsigned char* data, unsigned int len) +{ +unsigned int i, j; + + j = (context->count[0] >> 3) & 63; + if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; + context->count[1] += (len >> 29); + if ((j + len) > 63) { + memcpy(&context->buffer[j], data, (i = 64-j)); + SHA1Transform(context->state, context->buffer); + for ( ; i + 63 < len; i += 64) { + SHA1Transform(context->state, &data[i]); + } + j = 0; + } + else i = 0; + memcpy(&context->buffer[j], &data[i], len - i); +} + + +/* Add padding and return the message digest. */ + +void SHA1Final(unsigned char digest[20], SHA1_CTX* context) +{ +unsigned long i, j; +unsigned char finalcount[8]; + + for (i = 0; i < 8; i++) { + finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] + >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ + } + SHA1Update(context, (unsigned char *)"\200", 1); + while ((context->count[0] & 504) != 448) { + SHA1Update(context, (unsigned char *)"\0", 1); + } + SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ + for (i = 0; i < 20; i++) { + digest[i] = (unsigned char) + ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); + } + /* Wipe variables */ + i = j = 0; + memset(context->buffer, 0, 64); + memset(context->state, 0, 20); + memset(context->count, 0, 8); + memset(&finalcount, 0, 8); +#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */ + SHA1Transform(context->state, context->buffer); +#endif +} + +void SHA1(unsigned char *ptr, unsigned int size, unsigned char *outbuf) { + SHA1_CTX ctx; + + SHA1Init(&ctx); + SHA1Update(&ctx, ptr, size); + SHA1Final(outbuf, &ctx); +} + diff --git a/channel/channelapp/source/sha1.h b/channel/channelapp/source/sha1.h new file mode 100644 index 0000000..aae96b8 --- /dev/null +++ b/channel/channelapp/source/sha1.h @@ -0,0 +1,18 @@ +#ifndef __SHA1_H__ +#define __SHA1_H__ + +typedef struct { + unsigned long state[5]; + unsigned long count[2]; + unsigned char buffer[64]; +} SHA1_CTX; + +void SHA1Transform(unsigned long state[5], const unsigned char buffer[64]); +void SHA1Init(SHA1_CTX* context); +void SHA1Update(SHA1_CTX* context, const unsigned char* data, unsigned int len); +void SHA1Final(unsigned char digest[20], SHA1_CTX* context); + +void SHA1(unsigned char *ptr, unsigned int size, unsigned char *outbuf); + +#endif + diff --git a/channel/channelapp/source/tcp.c b/channel/channelapp/source/tcp.c new file mode 100644 index 0000000..a9eae7d --- /dev/null +++ b/channel/channelapp/source/tcp.c @@ -0,0 +1,297 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../config.h" +#include "panic.h" + +#include "tcp.h" + +s32 tcp_socket (void) { + s32 s, res; + u32 val; + + s = net_socket (PF_INET, SOCK_STREAM, 0); + if (s < 0) { + gprintf ("net_socket failed: %ld\n", s); + return s; + } + + val = 1; + net_setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); + + res = net_fcntl (s, F_GETFL, 0); + if (res < 0) { + gprintf ("F_GETFL failed: %ld\n", res); + net_close (s); + return res; + } + + res = net_fcntl (s, F_SETFL, res | 4); + if (res < 0) { + gprintf ("F_SETFL failed: %ld\n", res); + net_close (s); + return res; + } + + return s; +} + +s32 tcp_connect (char *host, u16 port) { + struct hostent *hp; + struct sockaddr_in sa; + s32 s, res; + s64 t; + + hp = net_gethostbyname (host); + if (!hp || !(hp->h_addrtype == PF_INET)) { + gprintf ("net_gethostbyname failed: %d\n", errno); + return errno; + } + + s = tcp_socket (); + if (s < 0) + return s; + + memset (&sa, 0, sizeof (struct sockaddr_in)); + sa.sin_family= PF_INET; + sa.sin_len = sizeof (struct sockaddr_in); + sa.sin_port= htons (port); + memcpy ((char *) &sa.sin_addr, hp->h_addr_list[0], hp->h_length); + + t = gettime (); + while (true) { + if (ticks_to_millisecs (diff_ticks (t, gettime ())) > + TCP_CONNECT_TIMEOUT) { + gprintf ("tcp_connect timeout\n"); + net_close (s); + + return -ETIMEDOUT; + } + + res = net_connect (s, (struct sockaddr *) &sa, + sizeof (struct sockaddr_in)); + + if (res < 0) { + if (res == -EISCONN) + break; + + if (res == -EINPROGRESS || res == -EALREADY) { + usleep (20 * 1000); + + continue; + } + + gprintf ("net_connect failed: %ld\n", res); + net_close (s); + + return res; + } + + break; + } + + return s; +} + +s32 tcp_listen (u16 port, s32 backlog) { + s32 s, res; + struct sockaddr_in sa; + + s = tcp_socket (); + if (s < 0) + return s; + + memset(&sa, 0, sizeof (struct sockaddr_in)); + sa.sin_family = PF_INET; + sa.sin_port = htons (port); + sa.sin_addr.s_addr = net_gethostip (); + sa.sin_len = sizeof (struct sockaddr_in); + + res = net_bind (s, (struct sockaddr *) &sa, sizeof (struct sockaddr_in)); + if (res < 0) { + gprintf ("net_bind failed: %ld\n", res); + net_close (s); + return res; + } + + res = net_listen (s, backlog); + if (res < 0) { + gprintf ("net_listen failed: %ld\n", res); + net_close (s); + return res; + } + + return s; +} + +char * tcp_readln (s32 s, u16 max_length, s64 start_time, u16 timeout) { + char *buf; + u16 c; + s32 res; + char *ret; + + buf = (char *) pmalloc (max_length); + + c = 0; + ret = NULL; + while (true) { + if (ticks_to_millisecs (diff_ticks (start_time, gettime ())) > timeout) + break; + + res = net_read (s, &buf[c], 1); + + if ((res == 0) || (res == -EAGAIN)) { + usleep (20 * 1000); + + continue; + } + + if (res < 0) { + gprintf ("tcp_readln failed: %ld\n", res); + + break; + } + + if ((c > 0) && (buf[c - 1] == '\r') && (buf[c] == '\n')) { + if (c == 1) { + ret = pstrdup (""); + + break; + } + + ret = strndup (buf, c - 1); + + break; + } + + c++; + + if (c == max_length) + break; + } + + free (buf); + return ret; +} + +bool tcp_read (s32 s, u8 *buffer, u32 length, const mutex_t *mutex, u32 *progress) { + u32 step, left, block, received; + s64 t; + s32 res; + + step = 0; + left = length; + received = 0; + + t = gettime (); + while (left) { + if (ticks_to_millisecs (diff_ticks (t, gettime ())) > + TCP_BLOCK_RECV_TIMEOUT) { + gprintf ("tcp_read timeout\n"); + + break; + } + + block = left; + if (block > 2048) + block = 2048; + + res = net_read (s, buffer, block); + + if ((res == 0) || (res == -EAGAIN)) { + usleep (20 * 1000); + + continue; + } + + if (res < 0) { + gprintf ("net_read failed: %ld\n", res); + + break; + } + + received += res; + left -= res; + buffer += res; + + if ((received / TCP_BLOCK_SIZE) > step) { + t = gettime (); + step++; + } + + if (mutex && progress) { + LWP_MutexLock (*mutex); + *progress = received; + LWP_MutexUnlock (*mutex); + } + } + + return left == 0; +} + +bool tcp_write (s32 s, const u8 *buffer, u32 length, const mutex_t *mutex, + u32 *progress) { + const u8 *p; + u32 step, left, block, sent; + s64 t; + s32 res; + + step = 0; + p = buffer; + left = length; + sent = 0; + + t = gettime (); + while (left) { + if (ticks_to_millisecs (diff_ticks (t, gettime ())) > + TCP_BLOCK_SEND_TIMEOUT) { + + gprintf ("tcp_write timeout\n"); + break; + } + + block = left; + if (block > 2048) + block = 2048; + + res = net_write (s, p, block); + + if ((res == 0) || (res == -EAGAIN)) { + usleep (20 * 1000); + continue; + } + + if (res < 0) { + gprintf ("net_write failed: %ld\n", res); + break; + } + + sent += res; + left -= res; + p += res; + + if ((sent / TCP_BLOCK_SIZE) > step) { + t = gettime (); + step++; + } + + if (mutex && progress) { + LWP_MutexLock (*mutex); + *progress = sent; + LWP_MutexUnlock (*mutex); + } + } + + return left == 0; +} + diff --git a/channel/channelapp/source/tcp.h b/channel/channelapp/source/tcp.h new file mode 100644 index 0000000..81e8cf0 --- /dev/null +++ b/channel/channelapp/source/tcp.h @@ -0,0 +1,17 @@ +#ifndef _TCP_H_ +#define _TCP_H_ + +#include +#include + +s32 tcp_socket (void); +s32 tcp_connect (char *host, u16 port); +s32 tcp_listen (u16 port, s32 backlog); + +char * tcp_readln (s32 s, u16 max_length, s64 start_time, u16 timeout); +bool tcp_read (s32 s, u8 *buffer, u32 length, const mutex_t *mutex, u32 *progress); +bool tcp_write (s32 s, const u8 *buffer, u32 length, const mutex_t *mutex, + u32 *progress); + +#endif + diff --git a/channel/channelapp/source/tex.c b/channel/channelapp/source/tex.c new file mode 100644 index 0000000..838edbf --- /dev/null +++ b/channel/channelapp/source/tex.c @@ -0,0 +1,262 @@ +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../config.h" +#include "tex.h" +#include "panic.h" + +#define SCREENSHOT_FILENAME "/hbc-%03lu.png" + +static u32 screenshot_index = 0; + +void tex_free (gfx_entity *entity) { + if (!entity) + return; + + free (entity->texture.pixels); + free (entity); +} + +static void pngcb_error (png_structp png_ptr, png_const_charp error_msg) { + gprintf ("ERROR: Couldn't load PNG image: %s\n", error_msg); +} + +static void pngcb_read (png_structp png_ptr, png_bytep data, + png_size_t length) { + u8 **p = (u8 **) png_get_io_ptr (png_ptr); + memcpy (data, *p, length); + *p += length; +} + +gfx_entity * tex_from_png(const u8 *data, u32 size, u16 width, u16 height) { + int res; + png_structp png_ptr; + png_infop info_ptr; + png_uint_32 w, h; + png_bytepp rows; + + u8 *pixels; + u8 *s, *d; + u32 x, y; + u8 r; + + gfx_entity *entity; + + res = png_sig_cmp ((u8 *) data, 0, 4); + if (res) { + gprintf ("png_sig_cmp failed: %d\n", res); + + return NULL; + } + + png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, pngcb_error, + NULL); + + if (!png_ptr) { + gprintf ("png_create_read_struct failed\n"); + + return NULL; + } + + info_ptr = png_create_info_struct (png_ptr); + if (!info_ptr) { + gprintf ("png_create_info_struct failed\n"); + png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + + return NULL; + } + + if (setjmp (png_jmpbuf (png_ptr))) { + gprintf ("setjmp failed\n"); + png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp)NULL); + + return NULL; + } + + png_set_read_fn (png_ptr, &data, pngcb_read); + png_set_user_limits (png_ptr, width, height); + png_set_add_alpha (png_ptr, 0xff, PNG_FILLER_BEFORE); + png_read_png (png_ptr, info_ptr, PNG_TRANSFORM_PACKING | + PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_SWAP_ALPHA, + (png_voidp)NULL); + + w = png_get_image_width (png_ptr, info_ptr); + h = png_get_image_height (png_ptr, info_ptr); + + if ((w != width) || (h != height)) { + gprintf ("invalid png dimension!\n"); + png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp)NULL); + + return NULL; + } + + rows = png_get_rows (png_ptr, info_ptr); + + pixels = (u8 *) pmemalign (32, w * h * 4); + d = pixels; + + for (y = 0; y < h; y += 4) { + for (x = 0; x < w; x += 4) { + for (r = 0; r < 4; ++r) { + s = &rows[y + r][x << 2]; + + *d++ = s[0]; + *d++ = s[1]; + *d++ = s[4]; + *d++ = s[5]; + *d++ = s[8]; + *d++ = s[9]; + *d++ = s[12]; + *d++ = s[13]; + } + + for (r = 0; r < 4; ++r) { + s = &rows[y + r][x << 2]; + + *d++ = s[2]; + *d++ = s[3]; + *d++ = s[6]; + *d++ = s[7]; + *d++ = s[10]; + *d++ = s[11]; + *d++ = s[14]; + *d++ = s[15]; + } + + CHKBUFACC(d - 1, pixels, w * h * 4); + } + } + + png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp)NULL); + + entity = (gfx_entity *) pmalloc (sizeof (gfx_entity)); + gfx_gen_tex (entity, w, h, pixels, GFXT_RGBA8); + + return entity; +} + +gfx_entity * tex_from_png_file(const char *fn, const struct stat *st, + u16 width, u16 height) { + u8 *buf; + int fd; + gfx_entity *entity; + + fd = open (fn, O_RDONLY); + + if (fd == -1) + return NULL; + + buf = (u8 *) pmalloc (st->st_size); + + if (st->st_size != read (fd, buf, st->st_size)) { + free (buf); + close (fd); + return NULL; + } + + entity = tex_from_png (buf, st->st_size, width, height); + + close (fd); + free (buf); + + return entity; +} + +gfx_entity * tex_from_tex_vsplit(gfx_entity *ge, u16 hstart, u16 hend) +{ + gfx_entity *entity; + u16 h = hend - hstart; + + entity = (gfx_entity *) pmalloc (sizeof (gfx_entity)); + gfx_gen_tex (entity, ge->w, h, ge->texture.pixels + ge->w * hstart * 4, GFXT_RGBA8); + return entity; +} + +void save_rgba_png(u32 *buffer, u16 x, u16 y) { + char fn[16]; + struct stat st; + FILE *fp = NULL; + png_structp png_ptr = NULL; + png_infop info_ptr; + png_bytep *row_pointers; + u16 i; + + while (true) { + if (screenshot_index > 999) + return; + + sprintf(fn, SCREENSHOT_FILENAME, screenshot_index); + if (!stat(fn, &st)) { + screenshot_index++; + continue; + } + + if (errno == ENOENT) + break; + + gprintf("error looking for a screenshot spot %d\n", errno); + return; + } + + row_pointers = (png_bytep *) pmalloc(y * sizeof(png_bytep)); + + fp = fopen(fn, "wb"); + if (!fp) { + gprintf("couldnt open %s for writing\n", fn); + goto exit; + } + + setbuf(fp, NULL); + + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); + if (!png_ptr) { + gprintf ("png_create_write_struct failed\n"); + goto exit; + } + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + gprintf ("png_create_info_struct failed\n"); + goto exit; + } + + if (setjmp(png_jmpbuf(png_ptr))) { + gprintf ("setjmp failed\n"); + goto exit; + } + + png_init_io(png_ptr, fp); + + png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); + png_set_IHDR(png_ptr, info_ptr, x, y, 8, + PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + png_write_info(png_ptr, info_ptr); + + for (i = 0; i < y; ++i) + row_pointers[i] = (png_bytep) (buffer + i * x); + + png_set_swap_alpha(png_ptr); + + png_write_image(png_ptr, row_pointers); + png_write_end(png_ptr, info_ptr); + + gprintf("saved %s\n", fn); + screenshot_index++; + +exit: + if (png_ptr) + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + + free(row_pointers); + fclose(fp); +} + diff --git a/channel/channelapp/source/tex.h b/channel/channelapp/source/tex.h new file mode 100644 index 0000000..afa5da2 --- /dev/null +++ b/channel/channelapp/source/tex.h @@ -0,0 +1,19 @@ +#ifndef _TEX_H_ +#define _TEX_H_ + +#include +#include + +#include "gfx.h" + +void tex_free (gfx_entity *entity); + +gfx_entity * tex_from_png(const u8 *data, u32 size, u16 width, u16 height); +gfx_entity * tex_from_png_file(const char *fn, const struct stat *st, + u16 width, u16 height); +gfx_entity * tex_from_tex_vsplit (gfx_entity *ge, u16 hstart, u16 hend); + +void save_rgba_png(u32 *buffer, u16 x, u16 y); + +#endif + diff --git a/channel/channelapp/source/theme.c b/channel/channelapp/source/theme.c new file mode 100644 index 0000000..21f5c08 --- /dev/null +++ b/channel/channelapp/source/theme.c @@ -0,0 +1,474 @@ +#include +#include +#include +#include +#include + +#include +#include + +#include "../config.h" +#include "tex.h" +#include "unzip.h" +#include "title.h" +#include "appentry.h" +#include "isfs.h" +#include "blob.h" +#include "panic.h" + +#include "theme.h" + +// view.c +#include "background_png.h" +#include "background_wide_png.h" +#include "logo_png.h" +// bubbles.c +#include "bubble1_png.h" +#include "bubble2_png.h" +#include "bubble3_png.h" +// browser.c +#include "apps_previous_png.h" +#include "apps_previous_hover_png.h" +#include "apps_next_png.h" +#include "apps_next_hover_png.h" +#include "icon_usbgecko_png.h" +#include "icon_usbgecko_active_png.h" +#include "icon_network_png.h" +#include "icon_network_active_png.h" +#include "throbber_png.h" +// dialogs.c +#include "about_png.h" +#include "dialog_background_png.h" +#include "dlg_info_png.h" +#include "dlg_confirm_png.h" +#include "dlg_warning_png.h" +#include "dlg_error_png.h" +// widgets.c +#include "button_png.h" +#include "button_focus_png.h" +#include "button_small_png.h" +#include "button_small_focus_png.h" +#include "button_tiny_png.h" +#include "button_tiny_focus_png.h" +#include "apps_list_png.h" +#include "apps_list_hover_png.h" +#include "apps_grid_png.h" +#include "apps_grid_hover_png.h" +#include "progress_png.h" +#include "content_arrow_up_png.h" +#include "content_arrow_down_png.h" + +#define _ENTRY(n, w, h, fn) \ + { \ + n##_png, &n##_png_size, w, h, \ + NULL, NULL, 0, \ + fn \ + } + +#define _ENTRY_WS(n, w, h, w_ws, fn) \ + { \ + n##_png, &n##_png_size, w, h, \ + n##_wide_png, &n##_wide_png_size, w_ws, \ + fn \ + } + +#define ENTRY(n, w, h) _ENTRY(n, w, h, #n) +#define ENTRY_RO(n, w, h) _ENTRY(n, w, h, NULL) +#define ENTRY_WS(n, w, h, w_ws) _ENTRY_WS(n, w, h, w_ws, #n) +#define ENTRY_WS_RO(n, w, h, w_ws) _ENTRY_WS(n, w, h, w_ws, NULL) + +gfx_entity *theme_gfx[THEME_LAST]; + +theme_font theme_fonts[FONT_MAX]; + +const char *theme_fn_xml = "theme.xml"; + +static const struct { + const u8 *data; + const u32 *size; + const u16 width; + const u16 height; + + const u8 *data_ws; + const u32 *size_ws; + const u16 width_ws; + + const char *filename; +} theme_data[THEME_LAST] = { + ENTRY_WS(background, 640, 480, 852), + ENTRY_RO(logo, 320, 64), + + ENTRY(bubble1, 64, 64), + ENTRY(bubble2, 64, 64), + ENTRY(bubble3, 64, 64), + + ENTRY(apps_previous, 64, 64), + ENTRY(apps_previous_hover, 64, 64), + ENTRY(apps_next, 64, 64), + ENTRY(apps_next_hover, 64, 64), + ENTRY(icon_usbgecko, 32, 32), + ENTRY(icon_usbgecko_active, 32, 32), + ENTRY(icon_network, 32, 32), + ENTRY(icon_network_active, 32, 32), + ENTRY(throbber, 64, 64), + + ENTRY_RO(about, 236, 104), + ENTRY(dialog_background, 520, 360), + ENTRY(dlg_info, 32, 32), + ENTRY(dlg_confirm, 32, 32), + ENTRY(dlg_warning, 32, 32), + ENTRY(dlg_error, 32, 32), + + ENTRY(button, 340, 48), + ENTRY(button_focus, 340, 48), + ENTRY(button_small, 200, 48), + ENTRY(button_small_focus, 200, 48), + ENTRY(button_tiny, 132, 48), + ENTRY(button_tiny_focus, 132, 48), + ENTRY(apps_list, 432, 64), + ENTRY(apps_list_hover, 432, 64), + ENTRY(apps_grid, 144, 64), + ENTRY(apps_grid_hover, 144, 64), + ENTRY(progress, 400, 112), + ENTRY(content_arrow_up, 32, 8), + ENTRY(content_arrow_down, 32, 8) +}; + +static bool theme_get_index(u32 *index, bool *ws, const char *filename) { + u32 i; + char buf[64]; + + for (i = 0; i < THEME_LAST; ++i) { + if (theme_data[i].filename) { + strcpy(buf, theme_data[i].filename); + strcat(buf, ".png"); + + if (!strcasecmp(buf, filename)) { + *index = i; + *ws = false; + return true; + } + + if (theme_data[i].data_ws) { + strcpy(buf, theme_data[i].filename); + strcat(buf, "_wide.png"); + + if (!strcasecmp(buf, filename)) { + *index = i; + *ws = true; + return true; + } + } + } + } + + return false; +} + +static void theme_load_fonts(unzFile uf) { + int i,j,res; + for (i=0; i 0) && + ((!strcasecmp(filename, theme_fn_xml)) || + ((theme_get_index(&index, &ws, filename)) && + (!theme_data[index].data_ws || (widescreen == ws))))) { + res = unzOpenCurrentFile(uf); + if (res != UNZ_OK) { + gprintf("unzOpenCurrentFile failed: %d\n", res); + goto error; + } + + buf = (u8 *) pmalloc(fi.uncompressed_size + 1); + + res = unzReadCurrentFile(uf, buf, fi.uncompressed_size); + if (res < 0) { + gprintf("unzReadCurrentFile failed: %d\n", res); + unzCloseCurrentFile(uf); + free(buf); + goto error; + } + + if (!strcasecmp(filename, theme_fn_xml)) { + gprintf("parsing theme.xml\n"); + buf[fi.uncompressed_size] = 0; + load_theme_xml((char *) buf); + } else { + u16 w, h; + + gprintf("loading from theme: %s (%lu @%lu)\n", filename, + (u32) fi.uncompressed_size, index); + + if (ws) { + w = theme_data[index].width_ws; + h = theme_data[index].height; + } else { + w = theme_data[index].width; + h = theme_data[index].height; + } + + theme_gfx[index] = tex_from_png(buf, fi.uncompressed_size, w, h); + } + + free(buf); + } + + if (i != gi.number_entry - 1) { + res = unzGoToNextFile(uf); + if (res != UNZ_OK) { + gprintf("unzGoToNextFile failed: %d\n", res); + goto error; + } + } + } + + theme_load_fonts(uf); + +error: + res = unzClose(uf); + if (res) + gprintf("unzClose failed: %d\n", res); +} + +void theme_init(u8 *data, u32 data_len) { + s32 res; + u32 i; + const char *titlepath; + STACK_ALIGN(char, fn, ISFS_MAXPATH, 32); + + memset(&theme, 0, sizeof(theme)); + + for (i = 0; i < THEME_LAST; ++i) + theme_gfx[i] = NULL; + + for (i = 0; i < FONT_MAX; ++i) { + theme_fonts[i].file = NULL; + theme_fonts[i].data = NULL; + theme_fonts[i].data_len = 0; + theme_fonts[i].size = 0; + theme_fonts[i].color = 0xffffffff; + } + + theme.progress.ul = 0xc8e1edff; + theme.progress.ur = 0xc8e1edff; + theme.progress.lr = 0x183848ff; + theme.progress.ll = 0x183848ff; + + titlepath = title_get_path(); + if (titlepath[0]) + sprintf(fn, "%s/%s", titlepath, app_fn_theme); + else + fn[0] = 0; + + if (data) { + theme_load(data, data_len); + if (fn[0]) + isfs_put(fn, data, data_len); + } else { + res = -1; + + if (fn[0]) { + res = isfs_get(fn, &data, 0, MAX_THEME_ZIP_SIZE, true); + if (res > 0) { + data_len = res; + gprintf("theme loaded from nand (%lu bytes)\n", data_len); + theme_load(data, data_len); + } + } + + if (res <= 0) { + data = NULL; + data_len = 0; + theme.description = pstrdup("Dark Water by drmr"); + } + } + + gprintf("theme.description=%s\n", theme.description); + gprintf("theme.progress ul=0x%08lx\n", theme.progress.ul); + gprintf("theme.progress ur=0x%08lx\n", theme.progress.ur); + gprintf("theme.progress lr=0x%08lx\n", theme.progress.lr); + gprintf("theme.progress ll=0x%08lx\n", theme.progress.ll); + gprintf("theme.langs=0x%x\n", theme.langs); + + for (i = 0; i < THEME_LAST; ++i) { + if (!theme_gfx[i]) { + if (data && theme_data[i].filename) { + gprintf("%s unavailable, using default\n", + theme_data[i].filename); + } + + if (widescreen && theme_data[i].data_ws) + theme_gfx[i] = tex_from_png(theme_data[i].data_ws, + *(theme_data[i].size_ws), + theme_data[i].width_ws, + theme_data[i].height); + else + theme_gfx[i] = tex_from_png(theme_data[i].data, + *(theme_data[i].size), + theme_data[i].width, + theme_data[i].height); + } + + if (!theme_gfx[i]) + gprintf("WARNING: '%s' unavailable!\n", theme_data[i].filename); + } + + if (data) + blob_free(data); +} + +void theme_deinit(void) { + u32 i,j; + + if (theme.description) { + free(theme.description); + theme.description = NULL; + } + + for (i = 0; i < FONT_MAX; ++i) { + // data can be shared... + if (theme_fonts[i].data) { + for (j = 0; j < FONT_MAX; ++j) { + if (i != j && theme_fonts[i].data == theme_fonts[j].data) + theme_fonts[j].data = NULL; + } + free(theme_fonts[i].data); + theme_fonts[i].data = NULL; + } + // filename is owned by xml.c, no need to free here + memset(&theme_fonts[i], 0, sizeof(theme_fonts[i])); + } + + for (i = 0; i < THEME_LAST; ++i) { + tex_free(theme_gfx[i]); + theme_gfx[i] = NULL; + } +} + +bool theme_is_valid_fn(const char *filename) { + u32 index; + bool ws; + + int l = strlen(filename); + + if (l >= 5 && + tolower((unsigned char)filename[l-1]) == 'f' && + tolower((unsigned char)filename[l-2]) == 't' && + tolower((unsigned char)filename[l-3]) == 't' && + filename[l-4] == '.') + return true; + + // allow random txt files (e.g. README.txt) + if (l >= 5 && + tolower((unsigned char)filename[l-1]) == 't' && + tolower((unsigned char)filename[l-2]) == 'x' && + tolower((unsigned char)filename[l-3]) == 't' && + filename[l-4] == '.') + return true; + + return theme_get_index(&index, &ws, filename); +} + diff --git a/channel/channelapp/source/theme.h b/channel/channelapp/source/theme.h new file mode 100644 index 0000000..a13a772 --- /dev/null +++ b/channel/channelapp/source/theme.h @@ -0,0 +1,76 @@ +#ifndef _THEME_H_ +#define _THEME_H_ + +#include + +#include "gfx.h" +#include "xml.h" + +typedef enum { + // view.c + THEME_BACKGROUND = 0, + THEME_LOGO, + + // bubbles.c + THEME_BUBBLE1, + THEME_BUBBLE2, + THEME_BUBBLE3, + + // browser.c + THEME_ARROW_LEFT, + THEME_ARROW_LEFT_FOCUS, + THEME_ARROW_RIGHT, + THEME_ARROW_RIGHT_FOCUS, + THEME_GECKO, + THEME_GECKO_ACTIVE, + THEME_LAN, + THEME_LAN_ACTIVE, + THEME_THROBBER, + + // dialogc.c + THEME_ABOUT, + THEME_DIALOG, + THEME_DLG_INFO, + THEME_DLG_CONFIRM, + THEME_DLG_WARNING, + THEME_DLG_ERROR, + + // widgets.c + THEME_BUTTON, + THEME_BUTTON_FOCUS, + THEME_BUTTON_SMALL, + THEME_BUTTON_SMALL_FOCUS, + THEME_BUTTON_TINY, + THEME_BUTTON_TINY_FOCUS, + THEME_APP_ENTRY, + THEME_APP_ENTRY_FOCUS, + THEME_GRID_APP_ENTRY, + THEME_GRID_APP_ENTRY_FOCUS, + THEME_PROGRESS, + THEME_CONTENT_ARROW_UP, + THEME_CONTENT_ARROW_DOWN, + + THEME_LAST +} theme_entry; + +typedef struct { + const char *file; + void *data; + u32 data_len; + int size; + u32 color; +} theme_font; + +extern gfx_entity *theme_gfx[THEME_LAST]; + +extern theme_font theme_fonts[FONT_MAX]; + +extern const char *theme_fn_xml; + +void theme_init(u8 *data, u32 data_len); +void theme_deinit(void); + +bool theme_is_valid_fn(const char *filename); + +#endif + diff --git a/channel/channelapp/source/title.c b/channel/channelapp/source/title.c new file mode 100644 index 0000000..e1f4966 --- /dev/null +++ b/channel/channelapp/source/title.c @@ -0,0 +1,95 @@ +#include + +#include +#include +#include +#include +#include "title.h" + +u32 ng_id = 0; +u32 ms_id = 0; + +static u64 title_id = 0; +static char title_path[ISFS_MAXPATH] __attribute__((aligned(0x20))); + +static u8 buf[0x1000] __attribute__((aligned(0x20))); + +static void title_get_ngid(void) { + s32 res; + + res = ES_GetDeviceID(&ng_id); + if (res < 0) { + gprintf("ES_GetDeviceID failed: %ld\n", res); + } +} + +static void title_get_msid(void) { + s32 ret; + + // check for dpki + ret = ES_GetDeviceCert(buf); + if (ret < 0) { + gprintf("ES_GetDeviceCert failed: %ld\n", ret); + return; + } + + ms_id = buf[0x99] - '0'; + + if (ms_id == 3) { + gprintf("We're on dpki\n"); + } else if (ms_id == 2) { + gprintf("We're on retail\n"); + } else { + gprintf("Unknown ms-id %ld?\n", ms_id); + } +} + +static void title_get_title_path(void) { + s32 res; + + res = ES_GetTitleID(&title_id); + if (res < 0) { + gprintf("ES_GetTitleID failed: %ld\n", res); + return; + } + + res = ES_GetDataDir(title_id, title_path); + if (res < 0) { + gprintf("ES_GetDataDir failed: %ld\n", res); + return; + } + + gprintf("data path is '%s'\n", title_path); +} + +const char *title_get_path(void) { + return title_path; +} + +static bool title_is_installed(u64 title_id) { + s32 ret; + u32 x; + + ret = ES_GetTitleContentsCount(title_id, &x); + + if (ret < 0) + return false; // title was never installed + + if (x <= 0) + return false; // title was installed but deleted via Channel Management + + return true; +} + +#define TITLEID_200 0x0000000100000200ll + +bool is_vwii(void) { + return title_is_installed(TITLEID_200); +} + +void title_init(void) { + memset(title_path, 0, sizeof(title_path)); + title_get_msid(); + title_get_ngid(); + title_get_title_path(); +} diff --git a/channel/channelapp/source/title.h b/channel/channelapp/source/title.h new file mode 100644 index 0000000..d0b7c1b --- /dev/null +++ b/channel/channelapp/source/title.h @@ -0,0 +1,12 @@ +#ifndef _TITLE_H_ +#define _TITLE_H_ + +#include +#include "../config.h" + +const char *title_get_path(void); +void title_init(void); +bool is_vwii(void); + +#endif + diff --git a/channel/channelapp/source/unzip.c b/channel/channelapp/source/unzip.c new file mode 100644 index 0000000..b806962 --- /dev/null +++ b/channel/channelapp/source/unzip.c @@ -0,0 +1,1576 @@ +/* unzip.c -- IO for uncompress .zip files using zlib + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + Read unzip.h for more info +*/ + +/* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of +compatibility with older software. The following is from the original crypt.c. Code +woven in by Terry Thorsen 1/2003. +*/ +/* + Copyright (c) 1990-2000 Info-ZIP. All rights reserved. + + See the accompanying file LICENSE, version 2000-Apr-09 or later + (the contents of which are also included in zip.h) for terms of use. + If, for some reason, all these files are missing, the Info-ZIP license + also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html +*/ +/* + crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + */ + +/* + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + */ + + +#include +#include +#include +#include + +#include "zlib.h" +#include "unzip.h" +#include "panic.h" + +#define NOUNCRYPT + +#ifndef CASESENSITIVITYDEFAULT_NO +# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) +# define CASESENSITIVITYDEFAULT_NO +# endif +#endif + + +#ifndef UNZ_BUFSIZE +#define UNZ_BUFSIZE (16384) +#endif + +#ifndef UNZ_MAXFILENAMEINZIP +#define UNZ_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (pmalloc(size)) +#endif +#ifndef TRYFREE +# define TRYFREE(p) {if (p) free(p);} +#endif + +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) + +const char unz_copyright[] = + " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; + +/* unz_file_info_interntal contain internal info about a file in zipfile*/ +typedef struct unz_file_info_internal_s +{ + uLong offset_curfile;/* relative offset of local header 4 bytes */ +} unz_file_info_internal; + + +/* file_in_zip_read_info_s contain internal information about a file in zipfile, + when reading and decompress it */ +typedef struct +{ + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + + uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ + uLong stream_initialised; /* flag set if stream structure is initialised*/ + + uLong offset_local_extrafield;/* offset of the local extra field */ + uInt size_local_extrafield;/* size of the local extra field */ + uLong pos_local_extrafield; /* position in the local extra field in read*/ + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + uLong rest_read_compressed; /* number of byte to be decompressed */ + uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ + zlib_filefunc_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + int raw; +} file_in_zip_read_info_s; + + +/* unz_s contain internal information about the zipfile +*/ +typedef struct +{ + zlib_filefunc_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + unz_global_info gi; /* public global information */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + uLong num_file; /* number of the current file in the zipfile*/ + uLong pos_in_central_dir; /* pos of the current file in the central dir*/ + uLong current_file_ok; /* flag about the usability of the current file*/ + uLong central_pos; /* position of the beginning of the central dir*/ + + uLong size_central_dir; /* size of the central directory */ + uLong offset_central_dir; /* offset of start of central directory with + respect to the starting disk number */ + + unz_file_info cur_file_info; /* public info about the current file in zip*/ + unz_file_info_internal cur_file_info_internal; /* private info about it*/ + file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current + file if we are decompressing it */ + int encrypted; +# ifndef NOUNCRYPT + unsigned long keys[3]; /* keys defining the pseudo-random sequence */ + const unsigned long* pcrc_32_tab; +# endif +} unz_s; + + +#ifndef NOUNCRYPT +#include "crypt.h" +#endif + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ + + +static int unzlocal_getByte OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream, + int *pi)); + +static int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; + int *pi; +{ + unsigned char c; + int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); + if (err==1) + { + *pi = (int)c; + return UNZ_OK; + } + else + { + if (ZERROR(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ +static int unzlocal_getShort OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX)); + +static int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; + uLong *pX; +{ + uLong x ; + int i; + int err; + + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +static int unzlocal_getLong OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX)); + +static int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; + uLong *pX; +{ + uLong x ; + int i; + int err; + + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<16; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<24; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + + +/* My own strcmpi / strcasecmp */ +static int strcmpcasenosensitive_internal (fileName1,fileName2) + const char* fileName1; + const char* fileName2; +{ + for (;;) + { + char c1=*(fileName1++); + char c2=*(fileName2++); + if ((c1>='a') && (c1<='z')) + c1 -= 0x20; + if ((c2>='a') && (c2<='z')) + c2 -= 0x20; + if (c1=='\0') + return ((c2=='\0') ? 0 : -1); + if (c2=='\0') + return 1; + if (c1c2) + return 1; + } +} + + +#ifdef CASESENSITIVITYDEFAULT_NO +#define CASESENSITIVITYDEFAULTVALUE 2 +#else +#define CASESENSITIVITYDEFAULTVALUE 1 +#endif + +#ifndef STRCMPCASENOSENTIVEFUNCTION +#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal +#endif + +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) + +*/ +extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) + const char* fileName1; + const char* fileName2; + int iCaseSensitivity; +{ + if (iCaseSensitivity==0) + iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + + if (iCaseSensitivity==1) + return strcmp(fileName1,fileName2); + + return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); +} + +#ifndef BUFREADCOMMENT +#define BUFREADCOMMENT (0x400) +#endif + +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +static uLong unzlocal_SearchCentralDir OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream)); + +static uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; +{ + unsigned char* buf; + uLong uSizeFile; + uLong uBackRead; + uLong uMaxBack=0xffff; /* maximum size of global comment */ + uLong uPosFound=0; + + if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + + uSizeFile = ZTELL(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); + if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + return uPosFound; +} + +/* + Open a Zip file. path contain the full pathname (by example, + If the zipfile cannot be opened (file doesn't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ +extern unzFile ZEXPORT unzOpen (buffer, buf_len) + void* buffer; + size_t buf_len; +{ + unz_s us; + unz_s *s; + uLong central_pos,uL; + + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the the disk with central dir, used + for spaning ZIP, unsupported, always 0*/ + uLong number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + + int err=UNZ_OK; + + if (unz_copyright[0]!=' ') + return NULL; + + mem_simple_create_file(&us.z_filefunc); + + us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque, + buffer, + buf_len, + ZLIB_FILEFUNC_MODE_READ | + ZLIB_FILEFUNC_MODE_EXISTING); + if (us.filestream==NULL) + return NULL; + + central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream); + if (central_pos==0) + err=UNZ_ERRNO; + + if (ZSEEK(us.z_filefunc, us.filestream, + central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* zipfile comment length */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((central_pospfile_in_zip_read!=NULL) + unzCloseCurrentFile(file); + + ZCLOSE(s->z_filefunc, s->filestream); + TRYFREE(s); + return UNZ_OK; +} + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ +extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info) + unzFile file; + unz_global_info *pglobal_info; +{ + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + *pglobal_info=s->gi; + return UNZ_OK; +} + + +/* + Translate date/time from Dos format to tm_unz (readable more easilty) +*/ +static void unzlocal_DosDateToTmuDate (ulDosDate, ptm) + uLong ulDosDate; + tm_unz* ptm; +{ + uLong uDate; + uDate = (uLong)(ulDosDate>>16); + ptm->tm_mday = (uInt)(uDate&0x1f) ; + ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; + ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; + + ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); + ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; + ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; +} + +/* + Get Info about the current file in the zipfile, with internal only info +*/ +static int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, + unz_file_info *pfile_info, + unz_file_info_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +static int unzlocal_GetCurrentFileInfoInternal (file, + pfile_info, + pfile_info_internal, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + unz_file_info_internal *pfile_info_internal; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + unz_s* s; + unz_file_info file_info; + unz_file_info_internal file_info_internal; + int err=UNZ_OK; + uLong uMagic; + long lSeek=0; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (ZSEEK(s->z_filefunc, s->filestream, + s->pos_in_central_dir+s->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + + /* we check the magic */ + if (err==UNZ_OK) { + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x02014b50) + err=UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) + err=UNZ_ERRNO; + + unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + + lSeek+=file_info.size_filename; + if ((err==UNZ_OK) && (szFileName!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_filename0) && (fileNameBufferSize>0)) + if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek -= uSizeRead; + } + + + if ((err==UNZ_OK) && (extraField!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_extraz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) + if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek += file_info.size_file_extra - uSizeRead; + } + else + lSeek+=file_info.size_file_extra; + + + if ((err==UNZ_OK) && (szComment!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_commentz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) + if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek+=file_info.size_file_comment - uSizeRead; + } + else + lSeek+=file_info.size_file_comment; + + if ((err==UNZ_OK) && (pfile_info!=NULL)) + *pfile_info=file_info; + + if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) + *pfile_info_internal=file_info_internal; + + return err; +} + + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. +*/ +extern int ZEXPORT unzGetCurrentFileInfo (file, + pfile_info, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); +} + +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ +extern int ZEXPORT unzGoToFirstFile (file) + unzFile file; +{ + int err=UNZ_OK; + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + s->pos_in_central_dir=s->offset_central_dir; + s->num_file=0; + err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ +extern int ZEXPORT unzGoToNextFile (file) + unzFile file; +{ + unz_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ + if (s->num_file+1==s->gi.number_entry) + return UNZ_END_OF_LIST_OF_FILE; + + s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->num_file++; + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzipStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ +extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) + unzFile file; + const char *szFileName; + int iCaseSensitivity; +{ + unz_s* s; + int err; + + /* We remember the 'current' position in the file so that we can jump + * back there if we fail. + */ + unz_file_info cur_file_infoSaved; + unz_file_info_internal cur_file_info_internalSaved; + uLong num_fileSaved; + uLong pos_in_central_dirSaved; + + + if (file==NULL) + return UNZ_PARAMERROR; + + if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; + + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + /* Save the current state */ + num_fileSaved = s->num_file; + pos_in_central_dirSaved = s->pos_in_central_dir; + cur_file_infoSaved = s->cur_file_info; + cur_file_info_internalSaved = s->cur_file_info_internal; + + err = unzGoToFirstFile(file); + + while (err == UNZ_OK) + { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; + err = unzGetCurrentFileInfo(file,NULL, + szCurrentFileName,sizeof(szCurrentFileName)-1, + NULL,0,NULL,0); + if (err == UNZ_OK) + { + if (unzStringFileNameCompare(szCurrentFileName, + szFileName,iCaseSensitivity)==0) + return UNZ_OK; + err = unzGoToNextFile(file); + } + } + + /* We failed, so restore the state of the 'current file' to where we + * were. + */ + s->num_file = num_fileSaved ; + s->pos_in_central_dir = pos_in_central_dirSaved ; + s->cur_file_info = cur_file_infoSaved; + s->cur_file_info_internal = cur_file_info_internalSaved; + return err; +} + + +/* +/////////////////////////////////////////// +// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net) +// I need random access +// +// Further optimization could be realized by adding an ability +// to cache the directory in memory. The goal being a single +// comprehensive file read to put the file I need in a memory. +*/ + +/* +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; // offset in file + uLong num_of_file; // # of file +} unz_file_pos; +*/ + +extern int ZEXPORT unzGetFilePos(file, file_pos) + unzFile file; + unz_file_pos* file_pos; +{ + unz_s* s; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + file_pos->pos_in_zip_directory = s->pos_in_central_dir; + file_pos->num_of_file = s->num_file; + + return UNZ_OK; +} + +extern int ZEXPORT unzGoToFilePos(file, file_pos) + unzFile file; + unz_file_pos* file_pos; +{ + unz_s* s; + int err; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + /* jump to the right spot */ + s->pos_in_central_dir = file_pos->pos_in_zip_directory; + s->num_file = file_pos->num_of_file; + + /* set the current file */ + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + /* return results */ + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* +// Unzip Helper Functions - should be here? +/////////////////////////////////////////// +*/ + +/* + Read the local header of the current zipfile + Check the coherency of the local header and info in the end of central + directory about this file + store in *piSizeVar the size of extra info in local header + (filename and size of extra field data) +*/ +static int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, + poffset_local_extrafield, + psize_local_extrafield) + unz_s* s; + uInt* piSizeVar; + uLong *poffset_local_extrafield; + uInt *psize_local_extrafield; +{ + uLong uMagic,uData,uFlags; + uLong size_filename; + uLong size_extra_field; + int err=UNZ_OK; + + *piSizeVar = 0; + *poffset_local_extrafield = 0; + *psize_local_extrafield = 0; + + if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + + if (err==UNZ_OK) { + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x04034b50) + err=UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; +/* + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) + err=UNZ_BADZIPFILE; +*/ + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) + err=UNZ_BADZIPFILE; + + if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) + err=UNZ_BADZIPFILE; + + *piSizeVar += (uInt)size_filename; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) + err=UNZ_ERRNO; + *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt)size_extra_field; + + *piSizeVar += (uInt)size_extra_field; + + return err; +} + +/* + Open for reading data the current file in the zipfile. + If there is no error and the file is opened, the return value is UNZ_OK. +*/ +extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) + unzFile file; + int* method; + int* level; + int raw; + const char* password; +{ + int err=UNZ_OK; + uInt iSizeVar; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uLong offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ +# ifndef NOUNCRYPT + char source[12]; +# else + if (password != NULL) + return UNZ_PARAMERROR; +# endif + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_PARAMERROR; + + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); + + if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, + &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + return UNZ_BADZIPFILE; + + pfile_in_zip_read_info = (file_in_zip_read_info_s*) + ALLOC(sizeof(file_in_zip_read_info_s)); + if (pfile_in_zip_read_info==NULL) + return UNZ_INTERNALERROR; + + pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + pfile_in_zip_read_info->pos_local_extrafield=0; + pfile_in_zip_read_info->raw=raw; + + if (pfile_in_zip_read_info->read_buffer==NULL) + { + TRYFREE(pfile_in_zip_read_info); + return UNZ_INTERNALERROR; + } + + pfile_in_zip_read_info->stream_initialised=0; + + if (method!=NULL) + *method = (int)s->cur_file_info.compression_method; + + if (level!=NULL) + { + *level = 6; + switch (s->cur_file_info.flag & 0x06) + { + case 6 : *level = 1; break; + case 4 : *level = 2; break; + case 2 : *level = 9; break; + } + } + + if ((s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; + pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->compression_method = + s->cur_file_info.compression_method; + pfile_in_zip_read_info->filestream=s->filestream; + pfile_in_zip_read_info->z_filefunc=s->z_filefunc; + pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if ((s->cur_file_info.compression_method==Z_DEFLATED) && + (!raw)) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + pfile_in_zip_read_info->stream.next_in = (voidpf)0; + pfile_in_zip_read_info->stream.avail_in = 0; + + err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=1; + else + { + TRYFREE(pfile_in_zip_read_info); + return err; + } + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size ; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size ; + + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + s->pfile_in_zip_read = pfile_in_zip_read_info; + +# ifndef NOUNCRYPT + if (password != NULL) + { + int i; + s->pcrc_32_tab = get_crc_table(); + init_keys(password,s->keys,s->pcrc_32_tab); + if (ZSEEK(s->z_filefunc, s->filestream, + s->pfile_in_zip_read->pos_in_zipfile + + s->pfile_in_zip_read->byte_before_the_zipfile, + SEEK_SET)!=0) + return UNZ_INTERNALERROR; + if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12) + return UNZ_INTERNALERROR; + + for (i = 0; i<12; i++) + zdecode(s->keys,s->pcrc_32_tab,source[i]); + + s->pfile_in_zip_read->pos_in_zipfile+=12; + s->encrypted=1; + } +# endif + + + return UNZ_OK; +} + +extern int ZEXPORT unzOpenCurrentFile (file) + unzFile file; +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); +} + +extern int ZEXPORT unzOpenCurrentFilePassword (file, password) + unzFile file; + const char* password; +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, password); +} + +extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw) + unzFile file; + int* method; + int* level; + int raw; +{ + return unzOpenCurrentFile3(file, method, level, raw, NULL); +} + +/* + Read bytes from the current file. + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ +extern int ZEXPORT unzReadCurrentFile (file, buf, len) + unzFile file; + voidp buf; + unsigned len; +{ + int err=UNZ_OK; + uInt iRead = 0; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->read_buffer == NULL)) + return UNZ_END_OF_LIST_OF_FILE; + if (len==0) + return 0; + + pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt)len; + + if ((len>pfile_in_zip_read_info->rest_read_uncompressed) && + (!(pfile_in_zip_read_info->raw))) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + + if ((len>pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in) && + (pfile_in_zip_read_info->raw)) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in; + + while (pfile_in_zip_read_info->stream.avail_out>0) + { + if ((pfile_in_zip_read_info->stream.avail_in==0) && + (pfile_in_zip_read_info->rest_read_compressed>0)) + { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + if (uReadThis == 0) + return UNZ_EOF; + if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + if (ZREAD(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->read_buffer, + uReadThis)!=uReadThis) + return UNZ_ERRNO; + + +# ifndef NOUNCRYPT + if(s->encrypted) + { + uInt i; + for(i=0;iread_buffer[i] = + zdecode(s->keys,s->pcrc_32_tab, + pfile_in_zip_read_info->read_buffer[i]); + } +# endif + + + pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + pfile_in_zip_read_info->rest_read_compressed-=uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Bytef*)pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; + } + + if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw)) + { + uInt uDoCopy,i ; + + if ((pfile_in_zip_read_info->stream.avail_in == 0) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + return (iRead==0) ? UNZ_EOF : iRead; + + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out ; + else + uDoCopy = pfile_in_zip_read_info->stream.avail_in ; + + for (i=0;istream.next_out+i) = + *(pfile_in_zip_read_info->stream.next_in+i); + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info->stream.next_out, + uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + pfile_in_zip_read_info->stream.avail_in -= uDoCopy; + pfile_in_zip_read_info->stream.avail_out -= uDoCopy; + pfile_in_zip_read_info->stream.next_out += uDoCopy; + pfile_in_zip_read_info->stream.next_in += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; + iRead += uDoCopy; + } + else + { + uLong uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + uLong uOutThis; + int flush=Z_SYNC_FLUSH; + + uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + bufBefore = pfile_in_zip_read_info->stream.next_out; + + /* + if ((pfile_in_zip_read_info->rest_read_uncompressed == + pfile_in_zip_read_info->stream.avail_out) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + flush = Z_FINISH; + */ + err=inflate(&pfile_in_zip_read_info->stream,flush); + + if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) + err = Z_DATA_ERROR; + + uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32,bufBefore, + (uInt)(uOutThis)); + + pfile_in_zip_read_info->rest_read_uncompressed -= + uOutThis; + + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + if (err==Z_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=Z_OK) + break; + } + } + + if (err==Z_OK) + return iRead; + return err; +} + + +/* + Give the current position in uncompressed data +*/ +extern z_off_t ZEXPORT unztell (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + return (z_off_t)pfile_in_zip_read_info->stream.total_out; +} + + +/* + return 1 if the end of file was reached, 0 elsewhere +*/ +extern int ZEXPORT unzeof (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + return 1; + else + return 0; +} + + + +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field that can be read + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ +extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) + unzFile file; + voidp buf; + unsigned len; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uInt read_now; + uLong size_to_read; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); + + if (buf==NULL) + return (int)size_to_read; + + if (len>size_to_read) + read_now = (uInt)size_to_read; + else + read_now = (uInt)len ; + + if (read_now==0) + return 0; + + if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (ZREAD(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + buf,read_now)!=read_now) + return UNZ_ERRNO; + + return (int)read_now; +} + +/* + Close the file in zip opened with unzipOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ +extern int ZEXPORT unzCloseCurrentFile (file) + unzFile file; +{ + int err=UNZ_OK; + + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && + (!pfile_in_zip_read_info->raw)) + { + if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + err=UNZ_CRCERROR; + } + + + TRYFREE(pfile_in_zip_read_info->read_buffer); + pfile_in_zip_read_info->read_buffer = NULL; + if (pfile_in_zip_read_info->stream_initialised) + inflateEnd(&pfile_in_zip_read_info->stream); + + pfile_in_zip_read_info->stream_initialised = 0; + TRYFREE(pfile_in_zip_read_info); + + s->pfile_in_zip_read=NULL; + + return err; +} + + +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ +extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) + unzFile file; + char *szComment; + uLong uSizeBuf; +{ + unz_s* s; + uLong uReadThis ; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + uReadThis = uSizeBuf; + if (uReadThis>s->gi.size_comment) + uReadThis = s->gi.size_comment; + + if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (uReadThis>0) + { + *szComment='\0'; + if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) + return UNZ_ERRNO; + } + + if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) + *(szComment+s->gi.size_comment)='\0'; + return (int)uReadThis; +} + +/* Additions by RX '2004 */ +extern uLong ZEXPORT unzGetOffset (file) + unzFile file; +{ + unz_s* s; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return 0; + if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) + if (s->num_file==s->gi.number_entry) + return 0; + return s->pos_in_central_dir; +} + +extern int ZEXPORT unzSetOffset (file, pos) + unzFile file; + uLong pos; +{ + unz_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + s->pos_in_central_dir = pos; + s->num_file = s->gi.number_entry; /* hack */ + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + diff --git a/channel/channelapp/source/unzip.h b/channel/channelapp/source/unzip.h new file mode 100644 index 0000000..5909b1d --- /dev/null +++ b/channel/channelapp/source/unzip.h @@ -0,0 +1,331 @@ +/* unzip.h -- IO for uncompress .zip files using zlib + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g + WinZip, InfoZip tools and compatible. + + Multi volume ZipFile (span) are not supported. + Encryption compatible with pkzip 2.04g only supported + Old compressions used by old PKZip 1.x are not supported + + + I WAIT FEEDBACK at mail info@winimage.com + Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + +*/ + +/* for more info about .ZIP format, see + http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip + http://www.info-zip.org/pub/infozip/doc/ + PkWare has also a specification at : + ftp://ftp.pkware.com/probdesc.zip +*/ + +#ifndef _UNZIP_H_ +#define _UNZIP_H_ + +#include + +#include "unzip_io.h" + +#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagunzFile__ { int unused; } unzFile__; +typedef unzFile__ *unzFile; +#else +typedef voidp unzFile; +#endif + + +#define UNZ_OK (0) +#define UNZ_END_OF_LIST_OF_FILE (-100) +#define UNZ_ERRNO (Z_ERRNO) +#define UNZ_EOF (0) +#define UNZ_PARAMERROR (-102) +#define UNZ_BADZIPFILE (-103) +#define UNZ_INTERNALERROR (-104) +#define UNZ_CRCERROR (-105) + +/* tm_unz contain date/time info */ +typedef struct tm_unz_s +{ + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour; /* hours since midnight - [0,23] */ + uInt tm_mday; /* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year; /* years - [1980..2044] */ +} tm_unz; + +/* unz_global_info structure contain global data about the ZIPfile + These data comes from the end of central dir */ +typedef struct unz_global_info_s +{ + uLong number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info; + + +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_info_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info; + +extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, + const char* fileName2, + int iCaseSensitivity)); +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) +*/ + +extern unzFile ZEXPORT unzOpen OF((void *buffer, size_t buf_len)); +/* + Open a Zip file. path contain the full pathname (by example, + If the zipfile cannot be opened (file doesn't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ + +extern int ZEXPORT unzClose OF((unzFile file)); +/* + Close a ZipFile opened with unzipOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + these files MUST be closed with unzipCloseCurrentFile before call unzipClose. + return UNZ_OK if there is no problem. */ + +extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, + unz_global_info *pglobal_info)); +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ + + +extern int ZEXPORT unzGetGlobalComment OF((unzFile file, + char *szComment, + uLong uSizeBuf)); +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ + + +/***************************************************************************/ +/* Unzip package allow you browse the directory of the zipfile */ + +extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ + +extern int ZEXPORT unzGoToNextFile OF((unzFile file)); +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ + +extern int ZEXPORT unzLocateFile OF((unzFile file, + const char *szFileName, + int iCaseSensitivity)); +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ + + +/* ****************************************** */ +/* Ryan supplied functions */ +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; /* offset in zip file directory */ + uLong num_of_file; /* # of file */ +} unz_file_pos; + +extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos* file_pos); + +/* ****************************************** */ + +extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); +/* + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain somes info about + the current file + if szFileName!=NULL, the filemane string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) +*/ + +/***************************************************************************/ +/* for reading the content of the current zipfile, you can open it, read data + from it, and close it (you can close it before reading all the file) + */ + +extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); +/* + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file, + const char* password)); +/* + Open for reading data the current file in the zipfile. + password is a crypting password + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, + int* method, + int* level, + int raw)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + +extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, + int* method, + int* level, + int raw, + const char* password)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + + +extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); +/* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ + +extern int ZEXPORT unzReadCurrentFile OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read bytes from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ + +extern z_off_t ZEXPORT unztell OF((unzFile file)); +/* + Give the current position in uncompressed data +*/ + +extern int ZEXPORT unzeof OF((unzFile file)); +/* + return 1 if the end of file was reached, 0 elsewhere +*/ + +extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ + +/***************************************************************************/ + +/* Get the current file offset */ +extern uLong ZEXPORT unzGetOffset (unzFile file); + +/* Set the current file offset */ +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); + +#endif + diff --git a/channel/channelapp/source/unzip_io.c b/channel/channelapp/source/unzip_io.c new file mode 100644 index 0000000..10f2863 --- /dev/null +++ b/channel/channelapp/source/unzip_io.c @@ -0,0 +1,170 @@ +/* ioapi_mem2.c -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + + This version of ioapi is designed to access memory rather than files. + We do use a region of memory to put data in to and take it out of. We do + not have auto-extending buffers and do not inform anyone else that the + data has been written. It is really intended for accessing a zip archive + embedded in an application such that I can write an installer with no + external files. Creation of archives has not been attempted, although + parts of the framework are present. + + Based on Unzip ioapi.c version 0.22, May 19th, 2003 + + Copyright (C) 1998-2003 Gilles Vollant + (C) 2003 Justin Fletcher + + Dynamically allocated memory version. Troels K 2004 + mem_close deletes the data: file is single-session. No filenames. + + This file is under the same license as the Unzip tool it is distributed + with. +*/ + + +#include +#include +#include + +#include + +#include "panic.h" +#include "unzip_io.h" + +static voidpf ZCALLBACK mem_open OF(( + voidpf opaque, + void* buffer, + size_t buf_len, + int mode)); + +static uLong ZCALLBACK mem_read OF(( + voidpf opaque, + voidpf stream, + void* buf, + uLong size)); + +static long ZCALLBACK mem_tell OF(( + voidpf opaque, + voidpf stream)); + +static long ZCALLBACK mem_seek OF(( + voidpf opaque, + voidpf stream, + uLong offset, + int origin)); + +static int ZCALLBACK mem_close OF(( + voidpf opaque, + voidpf stream)); + +static int ZCALLBACK mem_error OF(( + voidpf opaque, + voidpf stream)); + +typedef struct _MEMFILE +{ + void* buffer; /* Base of the region of memory we're using */ + long length; /* Size of the region of memory we're using */ + long position; /* Current offset in the area */ +} MEMFILE; + +static voidpf ZCALLBACK mem_open (opaque, buffer, buf_len, mode) + voidpf opaque; + void* buffer; + size_t buf_len; + int mode; +{ + MEMFILE* handle = pmalloc(sizeof(*handle)); + + handle->position = 0; + handle->buffer = buffer; + handle->length = buf_len; + return handle; +} + +static uLong ZCALLBACK mem_read (opaque, stream, buf, size) + voidpf opaque; + voidpf stream; + void* buf; + uLong size; +{ + MEMFILE* handle = (MEMFILE*) stream; + + if ( (handle->position + size) > handle->length) + { + size = handle->length - handle->position; + } + memcpy(buf, ((char*)handle->buffer) + handle->position, size); + handle->position+=size; + return size; +} + +static long ZCALLBACK mem_tell (opaque, stream) + voidpf opaque; + voidpf stream; +{ + MEMFILE *handle = (MEMFILE *)stream; + return handle->position; +} + +static long ZCALLBACK mem_seek (opaque, stream, offset, origin) + voidpf opaque; + voidpf stream; + uLong offset; + int origin; +{ + MEMFILE* handle = (MEMFILE*)stream; + + int bOK = 1; + switch (origin) + { + case SEEK_SET : + //bOK = (offset >= 0) && (offset <= size); + if (bOK) handle->position = offset; + break; + case SEEK_CUR : + bOK = ((offset + handle->position) >= 0) && (((offset + handle->position) <= handle->length)); + if (bOK) handle->position = offset + handle->position; + break; + case SEEK_END: + bOK = ((handle->length - offset) >= 0) && (((handle->length - offset) <= handle->length)); + if (bOK) handle->position = offset + handle->length - 0; + break; + default: + bOK = 0; + break; + } + return bOK ? 0 : -1; +} + +int ZCALLBACK mem_close (opaque, stream) + voidpf opaque; + voidpf stream; +{ + MEMFILE *handle = (MEMFILE *)stream; + + free (handle); + return 0; +} + +int ZCALLBACK mem_error (opaque, stream) + voidpf opaque; + voidpf stream; +{ + //MEMFILE *handle = (MEMFILE *)stream; + /* We never return errors */ + return 0; +} + +void mem_simple_create_file(zlib_filefunc_def* api) +{ + api->zopen_file = mem_open; + api->zread_file = mem_read; + api->zwrite_file = NULL; + api->ztell_file = mem_tell; + api->zseek_file = mem_seek; + api->zclose_file = mem_close; + api->zerror_file = mem_error; + api->opaque = NULL; +} + diff --git a/channel/channelapp/source/unzip_io.h b/channel/channelapp/source/unzip_io.h new file mode 100644 index 0000000..031cd54 --- /dev/null +++ b/channel/channelapp/source/unzip_io.h @@ -0,0 +1,58 @@ +#ifndef _UNZIP_IO_H_ +#define _UNZIP_IO_H_ + +#define ZLIB_FILEFUNC_SEEK_CUR (1) +#define ZLIB_FILEFUNC_SEEK_END (2) +#define ZLIB_FILEFUNC_SEEK_SET (0) + +#define ZLIB_FILEFUNC_MODE_READ (1) +#define ZLIB_FILEFUNC_MODE_WRITE (2) +#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) + +#define ZLIB_FILEFUNC_MODE_EXISTING (4) +#define ZLIB_FILEFUNC_MODE_CREATE (8) + + +#ifndef ZCALLBACK + +#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) +#define ZCALLBACK CALLBACK +#else +#define ZCALLBACK +#endif + +#endif + +typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, void* buffer, size_t buf_len, int mode)); +typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); +typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); +typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); +typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); +typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); + +typedef struct zlib_filefunc_def_s +{ + open_file_func zopen_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell_file_func ztell_file; + seek_file_func zseek_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; +} zlib_filefunc_def; + + +extern void mem_simple_create_file(zlib_filefunc_def* api); + +#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) +#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) +#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) +#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) +#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) +#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) + + +#endif + diff --git a/channel/channelapp/source/update.c b/channel/channelapp/source/update.c new file mode 100644 index 0000000..bf36480 --- /dev/null +++ b/channel/channelapp/source/update.c @@ -0,0 +1,316 @@ + +#include +#include +#include + +#include + +#include "../config.h" + +#ifdef ENABLE_UPDATES + +#include "view.h" +#include "dialogs.h" +#include "http.h" +#include "i18n.h" +#include "sha1.h" +#include "ecdsa.h" + +#include "update.h" + +#define UPDATE_HEADER "SIG0" +#define UPDATE_OFFSET_R 4 +#define UPDATE_OFFSET_S 4+30 +#define UPDATE_OFFSET_XML 64 + + +static const u8 update_key[] = UPDATE_PUBLIC_KEY; + +static u8 nibble2hex(u8 byte) +{ + byte &= 0xf; + if (byte <= 9) + return '0' + byte; + else + return 'a' + byte - 0xa; +} + +static void hash2ascii(u8 *hash, u8 *ascii) +{ + u32 i; + for (i = 0; i < 20; i++) { + ascii[2*i] = nibble2hex(hash[i] >> 4); + ascii[(2*i) + 1] = nibble2hex(hash[i]); + } + ascii[40] = 0; +} + +typedef struct { + u8 *sha_data; + u32 sha_len; + + u8 *ecdsa_r; + u8 *ecdsa_s; + + bool valid; + bool running; +} update_arg; + +static lwpq_t update_queue; +static lwp_t update_thread; +static u8 update_stack[UPDATE_THREAD_STACKSIZE] ATTRIBUTE_ALIGN (32); +static update_arg ta_ua; + +static void *update_func(void *arg) { + u8 hash[20]; + update_arg *ua = (update_arg *) arg; + + SHA1(ua->sha_data, ua->sha_len, hash); + if (check_ecdsa(update_key, ua->ecdsa_r, ua->ecdsa_s, hash)) + ua->valid = true; + + ua->running = false; + return NULL; +} + +typedef enum { + UPDATE_IDLE = 0, + UPDATE_FETCH_META, + UPDATE_VALIDATE, + UPDATE_NO_UPDATE, + UPDATE_CAN_UPDATE +} update_state; + +static const char *update_url = UPDATE_URL; +static update_state us = UPDATE_IDLE; +static update_info *info = NULL; + +bool update_signal(void) { + if ((us == UPDATE_FETCH_META) || us == UPDATE_CAN_UPDATE) + return false; + + gprintf("starting update check\n"); + + if (http_request(update_url, 8 * 1024)) { + us = UPDATE_FETCH_META; + return true; + } + + return false; +} + +static u8 *update_data = NULL; +static u32 update_len = 0; + +bool update_busy(bool *update_available) { + http_res http_result; + u32 status; + s32 res; + + if ((us != UPDATE_FETCH_META) && (us != UPDATE_VALIDATE)) + return false; + + if (us == UPDATE_FETCH_META) { + if (!http_get_result(&http_result, &status, &update_data, &update_len)) + return true; + + *update_available = false; + us = UPDATE_NO_UPDATE; + + gprintf("update check done, status=%u len=%u\n", status, update_len); + + if (http_result != HTTPR_OK) + return false; + + gprintf("fetched update xml\n"); + + if (update_len < 64) { + gprintf("update.sxml length is invalid\n"); + free(update_data); + return false; + } + + if (memcmp(UPDATE_HEADER, update_data, 4)) { + gprintf("SIG0 header not found.\n"); + free(update_data); + return false; + } + + memset(&ta_ua, 0, sizeof(ta_ua)); + ta_ua.sha_data = update_data + UPDATE_OFFSET_XML; + ta_ua.sha_len = update_len - UPDATE_OFFSET_XML; + ta_ua.ecdsa_r = update_data + UPDATE_OFFSET_R; + ta_ua.ecdsa_s = update_data + UPDATE_OFFSET_S; + ta_ua.running = true; + + memset(&update_stack, 0, UPDATE_THREAD_STACKSIZE); + LWP_InitQueue(&update_queue); + res = LWP_CreateThread(&update_thread, update_func, &ta_ua, + update_stack, UPDATE_THREAD_STACKSIZE, + UPDATE_THREAD_PRIO); + + if (res) { + gprintf("error creating thread: %ld\n", res); + LWP_CloseQueue(update_queue); + free(update_data); + return false; + } + + us = UPDATE_VALIDATE; + return true; + } + + if (ta_ua.running) + return true; + + LWP_CloseQueue(update_queue); + + us = UPDATE_NO_UPDATE; + + if (!ta_ua.valid) { + gprintf("update.sxml signature is invalid.\n"); + free(update_data); + return false; + } + + gprintf("update.sxml signature is valid.\n"); + + info = update_parse((char *) update_data + UPDATE_OFFSET_XML); + free(update_data); + + if (!info) { + gprintf("Failed to parse update.sxml\n"); + return false; + } + + if (!info->hash) { + gprintf("no node in update.sxml\n"); + update_free(info); + info = NULL; + return false; + } + + if (strnlen(info->hash, 40) != 40) { + gprintf("Invalid length\n"); + update_free(info); + info = NULL; + return false; + } + + if (info->date > CHANNEL_VERSION_DATE) { + gprintf("update available\n"); + us = UPDATE_CAN_UPDATE; + *update_available = true; + } else { + gprintf("hbc is up2date\n"); + update_free(info); + info = NULL; + } + + return false; +} + +#define UPDATE_MSG_SIZE 4096 + +bool update_execute (view *sub_view, entry_point *ep) { + http_state state; + http_res res; + u32 status, length, progress; + u8 *data; + view *v = sub_view; + bool downloading = false; + static char text[UPDATE_MSG_SIZE]; + bool b = false; + u8 hash[20]; + u8 ascii_hash[41]; + + if (us != UPDATE_CAN_UPDATE) + return false; + + us = UPDATE_IDLE; + + snprintf (text, UPDATE_MSG_SIZE, _("An update to the Homebrew Channel " + "(version %s, replacing the installed version %s) " + "is available for installation, do you want " + "to update now?\n\n" + "Release notes:\n\n%s"), + info->version, CHANNEL_VERSION_STR, info->notes); + text[UPDATE_MSG_SIZE-1] = 0; + + if (show_message (sub_view, DLGMT_CONFIRM, DLGB_YESNO, text, 0) == 1) { + update_free(info); + info = NULL; + return false; + } + + if (!http_request(info->uri, 4 * 1024 * 1024)) { + gprintf ("error requesting update download\n"); + update_free(info); + info = NULL; + return false; + } + + while (true) { + view_plot (v, DIALOG_MASK_COLOR, NULL, NULL, NULL); + + if (!http_get_state (&state, &length, &progress)) + break; + + if ((!downloading) && (state == HTTPS_RECEIVING)) { + downloading = true; + + snprintf (text, 32, _("Downloading Update (%u kB)"), length / 1024); + + v = dialog_progress (sub_view, text, length); + + dialog_fade (v, true); + } + + if (downloading) + dialog_set_progress (v, progress); + + if (http_get_result (&res, &status, &data, &length)) { + gprintf("update download done, status=%u len=%u\n", status, length); + + if (res == HTTPR_OK) { + SHA1(data, length, hash); + hash2ascii(hash, ascii_hash); + gprintf("Calculated hash : %s\n", ascii_hash); + gprintf("Expected hash : %s\n", info->hash); + + if (memcmp(ascii_hash, info->hash, 40)) { + gprintf("installer.elf hash is invalid.\n"); + free(data); + update_free(info); + info = NULL; + break; + } + + gprintf("installer.elf hash is valid.\n"); + b = true; + } + + break; + } + } + + update_free(info); + info = NULL; + + if (downloading) + dialog_fade (v, false); + + if (!b) { + show_message (sub_view, DLGMT_ERROR, DLGB_OK, _("Download failed"), 0); + + return false; + } + + b = loader_reloc(ep, data, length, + "installer.elf\0-updatehbc\0\0", 26, true); + + free (data); + + return b; +} +#endif diff --git a/channel/channelapp/source/update.h b/channel/channelapp/source/update.h new file mode 100644 index 0000000..ff0c66d --- /dev/null +++ b/channel/channelapp/source/update.h @@ -0,0 +1,13 @@ +#ifndef _UPDATE_H_ +#define _UPDATE_H_ + +#include + +#include "loader_reloc.h" + +bool update_signal(void); +bool update_busy(bool *update_available); +bool update_execute(view *sub_view, entry_point *ep); + +#endif + diff --git a/channel/channelapp/source/view.c b/channel/channelapp/source/view.c new file mode 100644 index 0000000..3d5f362 --- /dev/null +++ b/channel/channelapp/source/view.c @@ -0,0 +1,404 @@ +#include +#include +#include + +#include + +#include "../config.h" +#include "controls.h" +#include "theme.h" +#include "cursors.h" +#include "widgets.h" +#include "bubbles.h" +#include "panic.h" +#include "view.h" + +#define FOCUS_FLAGS (WF_VISIBLE | WF_ENABLED | WF_FOCUSABLE) +#define CURSOR_FLAGS (WF_VISIBLE | WF_ENABLED) + +#define RUMBLE_TIME 3 +#define RUMBLE_DELAY 12 + +u8 *cursor_data; +u32 cursor_data_size; +u8 *cursor_shade_data; +u32 cursor_shade_data_size; + +static gfx_queue_entry entry_bg; +static gfx_queue_entry entry_logo; +static gfx_queue_entry entry_throbber; + +static gfx_entity gradient_subview; +static gfx_queue_entry entry_subview; + +static bool cursor_enabled; +static bool rumble_enabled; +static bool throbber_enabled; + +static gfx_queue_entry cur[2]; + +static s8 rumble_timeout = -RUMBLE_DELAY; + +bool view_bubbles = false; + +void view_init (void) { + cursor_enabled = false; + rumble_enabled = (CONF_GetPadMotorMode() == 0) ? 0 : 1; + throbber_enabled = false; + + view_theme_reinit(); + bubbles_init(); +} + +void view_deinit (void) { + cursor_enabled = false; + bubbles_deinit(); +} + +void view_theme_reinit(void) { + gfx_qe_entity(&entry_bg, theme_gfx[THEME_BACKGROUND], + 0, 0, -3, COL_DEFAULT); + gfx_qe_entity(&entry_logo, theme_gfx[THEME_LOGO], 0, 416, 0, COL_DEFAULT); + gfx_qe_entity(&entry_throbber, theme_gfx[THEME_THROBBER], + (view_width - theme_gfx[THEME_THROBBER]->w) / 2, + (view_height - theme_gfx[THEME_THROBBER]->h) / 2, + 0, COL_DEFAULT); +} + +view * view_new (u8 widget_count, const view *sub_view, s16 x, s16 y, s16 z, + u32 drag_btn) { + view *v; + + v = (view *) pmalloc (sizeof (view)); + memset (v, 0, sizeof (view)); + + v->coords.x = x; + v->coords.y = y; + v->coords.z = z; + gfx_qe_origin_push (&v->qe_coords_push, &v->coords); + gfx_qe_origin_pop (&v->qe_coords_pop); + + v->widget_count = widget_count; + + v->widgets = (widget *) pmalloc (widget_count * sizeof (widget)); + memset (v->widgets, 0, widget_count * sizeof (widget)); + + v->sub_view = sub_view; + + v->focus = -1; + v->cursor = -1; + + v->drag = false; + v->drag_btn = drag_btn; + + return v; +} + +void view_free (view *v) { + u8 i; + + if (!v) + return; + + for (i = 0; i < v->widget_count; ++i) + widget_free(&v->widgets[i]); + + free(v->widgets); + free(v); +} + +static void view_push_view (const view *v, u32 subview_alpha) { + int i, j; + widget *w; + widget_layer *l; + u32 f; + + if (v->sub_view) { + view_push_view (v->sub_view, false); + gfx_gen_gradient (&gradient_subview, view_width + 10, + view_height + 10, subview_alpha, + subview_alpha, subview_alpha, subview_alpha); + + gfx_qe_entity (&entry_subview, &gradient_subview, -5, -5, + v->coords.z - 1, COL_DEFAULT); + + gfx_frame_push (&entry_subview, 1); + } + + gfx_frame_push (&v->qe_coords_push, 1); + + for (i = 0; i < v->widget_count; ++i) { + w = &v->widgets[i]; + + if (w->flags & WF_VISIBLE) { + gfx_frame_push (&w->qe_coords_push, 1); + for (j = 0; j < w->layer_count; ++j) { + l = &w->layers[j]; + + if (l->flags) { + f = w->flags ^ l->flags_invert; + f = f & l->flags & WF_FLAGS_MASK; + + if (!f) + continue; + + if (l->flags & WF_FLAGS_AND && + f != (l->flags & WF_FLAGS_MASK)) + continue; + } + + gfx_frame_push (w->layers[j].gfx_entries, + w->layers[j].gfx_entry_count); + } + + gfx_frame_push (&w->qe_coords_pop, 1); + } + } + + gfx_frame_push (&v->qe_coords_pop, 1); +} + +void view_plot (view *v, u32 alpha, u32 *down, u32 *held, u32 *up) { + u32 bd, bh, bu; + bool wm; + s32 x, y; + f32 roll; + s8 w, c; + cursor_type ct; +#ifdef ENABLE_SCREENSHOTS + u16 ss_x, ss_y; + u32 *ss_buf = NULL; +#endif + + controls_scan (&bd, &bh, &bu); + wm = controls_ir (&x, &y, &roll); + w = view_widget_at_xy (v, x - v->coords.x, y - v->coords.y); + ct = CUR_STD; + + if (v->drag_btn) { + if (bu & v->drag_btn) + v->drag = false; + + if ((w != -1) && (bd & v->drag_btn)) { + v->drag = true; + + v->drag_widget = w; + + v->drag_start_x = x; + v->drag_start_y = y; + } + + if (v->drag && (bh & v->drag_btn)) { + v->drag_x = x - v->drag_start_x; + v->drag_y = y - v->drag_start_y; + + ct = v->widgets[v->drag_widget].cur; + } + } + + c = v->cursor; + + if (v->cursor != -1) { + widget_set_flag (&v->widgets[v->cursor], WF_CURSOR, false); + v->cursor = -1; + } + + wm = wm && cursor_enabled; + + if (wm) { + view_set_focus (v, -1); + + if (w != -1) { + if ((v->widgets[w].flags & CURSOR_FLAGS) == CURSOR_FLAGS) { + widget_set_flag (&v->widgets[w], WF_CURSOR, true); + v->cursor = w; + + if (rumble_enabled && (c != w) && (ct != CUR_DRAG) && + (v->widgets[w].flags & WF_RUMBLE) && + (rumble_timeout == -RUMBLE_DELAY)) { + rumble_timeout = RUMBLE_TIME; + controls_rumble(1); + } + } + + if ((v->widgets[w].flags & FOCUS_FLAGS) == FOCUS_FLAGS) + view_set_focus (v, w); + } + } + + gfx_frame_start (); + + gfx_frame_push (&entry_bg, 1); + + if (view_bubbles) + bubble_update(wm, x, y); + + gfx_frame_push (&entry_logo, 1); + + view_push_view (v, alpha); + + if (throbber_enabled) + gfx_frame_push(&entry_throbber, 1); + + if (wm) { + if ((w != -1) && (ct != CUR_DRAG)) + ct = v->widgets[w].cur; + + cursors_queue (cur, ct, x, y, roll); + + gfx_frame_push (cur, 2); + } + +#ifdef ENABLE_SCREENSHOTS + // ZR + ZL on Classic Controller + if ((bh & PADS_NET_INIT) && (bd & PADS_SCREENSHOT)) { + gfx_get_efb_size(&ss_x, &ss_y); + ss_buf = (u32 *) pmalloc(ss_x * ss_y * sizeof(u32)); + + gfx_set_efb_buffer(ss_buf); + } +#endif + + gfx_frame_end (); + +#ifdef ENABLE_SCREENSHOTS + if (ss_buf) { + save_rgba_png(ss_buf, ss_x, ss_y); + free(ss_buf); + } +#endif + + if (down) + *down = bd; + + if (held) + *held = bh; + + if (up) + *up = bu; + + if (rumble_timeout > -RUMBLE_DELAY) + rumble_timeout--; + + if (rumble_timeout < 1) + controls_rumble(0); +} + +void view_fade (view *v, s16 z, u32 c1, u32 c2, u32 c3, u32 c4, u8 steps, + s8 modifier) { + view *vf; + u8 i; + + vf = view_new (1, v, 0, 0, 0, 0); + + widget_gradient (&vf->widgets[0], -32, -32, z, view_width + 64, + view_height + 64, c1, c2, c3, c4); + + for (i = 0; i < steps; ++i) { + widget_fade_gradient (&vf->widgets[0], modifier); + + view_plot (vf, 0, NULL, NULL, NULL); + } +} + +void view_set_focus (view *v, s8 new_focus) { + if (v->focus != -1) + v->widgets[v->focus].flags &= ~((u32) WF_FOCUSED); + + v->focus = new_focus; + + if (v->focus != -1) + v->widgets[v->focus].flags |= WF_FOCUSED; +} + +u8 view_set_focus_prev (view *v) { + s16 i; + + if (v->focus < 1) + return v->focus; + + for (i = v->focus - 1; i >= 0; --i) + if ((v->widgets[i].flags & FOCUS_FLAGS) == FOCUS_FLAGS) { + view_set_focus (v, i); + + break; + } + + return v->focus; +} + +u8 view_set_focus_next (view *v) { + u8 i; + + if (v->focus == v->widget_count - 1) + return v->focus; + + for (i = v->focus + 1; i < v->widget_count; ++i) + if ((v->widgets[i].flags & FOCUS_FLAGS) == FOCUS_FLAGS) { + view_set_focus (v, i); + + break; + } + + return v->focus; +} + +u8 view_move_focus(view *v, s8 mod) { + if (v->focus + mod < 1) + return v->focus; + + if (v->focus + mod > v->widget_count - 1) + return v->focus; + + if ((v->widgets[v->focus + mod].flags & FOCUS_FLAGS) == FOCUS_FLAGS) + view_set_focus (v, v->focus + mod); + + return v->focus; +} + +void view_enable_cursor (bool enable) { + cursor_enabled = enable; +} + +s8 view_widget_at_xy (const view *v, s32 x, s32 y) { + s16 i; + widget *w; + s16 wx, wy; + + for (i = v->widget_count - 1; i >= 0; --i) { + w = &v->widgets[i]; + + if (w->type == WT_MEMO) { + wx = w->coords.x; + wy = w->memo.y_max; + } else { + wx = w->coords.x; + wy = w->coords.y; + } + + if (w->width && w->height && (x >= wx) && (y >= wy) && + (x <= wx + w->width) && (y <= wy + w->height)) + return i; + } + + return -1; +} + +s8 view_widget_at_ir (const view *v) { + s32 x, y; + + if (!cursor_enabled || !controls_ir (&x, &y, NULL)) + return -1; + + return view_widget_at_xy (v, x - v->coords.x, y - v->coords.y); +} + +void view_show_throbber(bool show) { + entry_throbber.entity.rad = 0; + throbber_enabled = show; +} + +void view_throbber_tickle(void) { + entry_throbber.entity.rad -= 0.1f; +} + diff --git a/channel/channelapp/source/view.h b/channel/channelapp/source/view.h new file mode 100644 index 0000000..63ddd85 --- /dev/null +++ b/channel/channelapp/source/view.h @@ -0,0 +1,54 @@ +#ifndef _VIEW_H_ +#define _VIEW_H_ + +#include + +#include "widgets.h" + +typedef struct _view { + gfx_coordinates coords; + gfx_queue_entry qe_coords_push, qe_coords_pop; + + u8 widget_count; + widget *widgets; + + const struct _view *sub_view; + + s8 focus; + s8 cursor; + + bool drag; + s8 drag_widget; + u32 drag_btn; + s32 drag_start_x, drag_start_y, drag_x, drag_y; +} view; + +extern bool view_bubbles; +extern bool allow_screenshot; + +void view_init (); +void view_deinit (); +void view_theme_reinit(void); + +view * view_new (u8 widget_count, const view *sub_view, s16 x, s16 y, s16 z, + u32 drag_btn); +void view_free (view *v); + +void view_plot (view *v, u32 alpha, u32 *down, u32 *held, u32 *up); +void view_fade (view *v, s16 z, u32 c1, u32 c2, u32 c3, u32 c4, u8 steps, + s8 modifier); + +void view_set_focus (view *v, s8 new_focus); +u8 view_set_focus_prev (view *v); +u8 view_set_focus_next (view *v); +u8 view_move_focus(view *v, s8 mod); + +void view_enable_cursor (bool enable); +s8 view_widget_at_xy (const view *v, s32 x, s32 y); +s8 view_widget_at_ir (const view *v); + +void view_show_throbber(bool show); +void view_throbber_tickle(void); + +#endif + diff --git a/channel/channelapp/source/widgets.c b/channel/channelapp/source/widgets.c new file mode 100644 index 0000000..315b203 --- /dev/null +++ b/channel/channelapp/source/widgets.c @@ -0,0 +1,613 @@ +#include +#include +#include +#include + +#include "../config.h" +#include "theme.h" +#include "i18n.h" +#include "panic.h" + +#include "widgets.h" + +static const char *app_entry_default_description; + +void widgets_theme_reinit (void) { + app_entry_default_description = _(""); +} + +void widgets_init (void) { + widgets_theme_reinit(); +} + +void widgets_deinit (void) { +} + +void widget_free (widget *w) { + u32 i; + + for (i = 0; i < w->layer_count; ++i) + free (w->layers[i].gfx_entries); + + switch (w->type) { + case WT_LABEL: + case WT_BUTTON: + case WT_APP_ENTRY: + case WT_MEMO: + case WT_IMAGE: + break; + + case WT_PROGRESS: + free (w->progress.gradient); + break; + + case WT_GRADIENT: + free (w->gradient.gradient); + break; + } + + free (w->layers); + + memset(w, 0, sizeof(widget)); +} + +void widget_set_flag (widget *w, u32 flag, bool set) { + if (set) + w->flags |= flag; + else + w->flags &= ~((u32) flag); +} + +void widget_toggle_flag (widget *w, u32 flag) { + widget_set_flag (w, flag, (w->flags & flag) ? false : true); +} + +void widget_set_progress (widget *w, u32 progress) { + float m = 0; + char p[5]; + + if (progress > 0) + m = (float) progress / w->progress.max; + + if (m > 1) + m = 1; + + gfx_gen_gradient (w->progress.gradient, roundf ((400 - 36 * 2 + 2) * m), + 112 - 36 * 2 + 2, theme.progress.ul, theme.progress.ur, + theme.progress.lr, theme.progress.ll); + gfx_qe_entity (&w->layers[0].gfx_entries[0], w->progress.gradient, 35, 35, + 0, COL_DEFAULT); + + sprintf (p, "%3.f%%", roundf (100.0 * m)); + font_plot_string (&w->layers[2].gfx_entries[0], 4, FONT_LABEL, p, + 32, theme_gfx[THEME_PROGRESS]->h - 20, 2, + theme_gfx[THEME_PROGRESS]->w - 70, + FA_RIGHT, FA_EM_CENTERED); +} + +#define CCLAMP(x) (((x)>255)?255:(((x)<0)?0:(x))) + +void widget_fade_gradient (widget *w, s8 modifier) { + w->layers[0].gfx_entries[0].entity.entity->gradient.c1 = + CCLAMP(w->layers[0].gfx_entries[0].entity.entity->gradient.c1 + modifier); + w->layers[0].gfx_entries[0].entity.entity->gradient.c2 = + CCLAMP(w->layers[0].gfx_entries[0].entity.entity->gradient.c2 + modifier); + w->layers[0].gfx_entries[0].entity.entity->gradient.c3 = + CCLAMP(w->layers[0].gfx_entries[0].entity.entity->gradient.c3 + modifier); + w->layers[0].gfx_entries[0].entity.entity->gradient.c4 = + CCLAMP(w->layers[0].gfx_entries[0].entity.entity->gradient.c4 + modifier); +} + +bool widget_scroll_memo (widget *w, s16 modifier) { + s16 y; + + y = w->coords.y + modifier; + + if (y < w->memo.y_min) + y = w->memo.y_min; + + if (y > w->memo.y_max) + y = w->memo.y_max; + + if (w->coords.y == y) + return false; + + w->coords.y = y; + + return true; +} + +bool widget_scroll_memo_deco (widget *w, s16 modifier) { + bool res; + + res = widget_scroll_memo (&w[1], modifier); + + widget_set_flag (&w[0], WF_VISIBLE, w[1].coords.y < w[1].memo.y_max); + widget_set_flag (&w[2], WF_VISIBLE, w[1].coords.y > w[1].memo.y_min); + + return res; +} + +static void widget_init (widget *w, widget_type type, u32 focusable, + s16 x, s16 y, s16 z, u16 width, u16 height, + int layer_count) { + w->type = type; + w->flags = WF_VISIBLE | WF_ENABLED; + + w->width = width; + w->height = height; + + w->cur = CUR_STD; + + if (focusable) + w->flags |= WF_FOCUSABLE; + + w->coords.x = x; + w->coords.y = y; + w->coords.z = TEX_LAYER_WIDGETS + z; + gfx_qe_origin_push (&w->qe_coords_push, &w->coords); + gfx_qe_origin_pop (&w->qe_coords_pop); + + w->layer_count = layer_count; + w->layers = (widget_layer *) + pmalloc (w->layer_count * sizeof (widget_layer)); +} + +void widget_label (widget *w, s16 x, s16 y, s16 z, const char *caption, + u16 width, font_xalign xalign, font_yalign yalign, + font_id font) { + widget_layer *l; + + widget_init (w, WT_LABEL, false, x, y, z, 0, 0, 1); + + l = &w->layers[0]; + l->flags = 0; + l->gfx_entry_count = font_get_char_count (font, caption, width); + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + font_plot_string (&l->gfx_entries[0], l->gfx_entry_count, font, caption, + 0, 0, 0, width, xalign, yalign); +} + +void widget_image(widget *w, s16 x, s16 y, s16 z, gfx_entity *image, + gfx_entity *image_disabled, bool rumble, + gfx_entity *image_cursor) { + int c; + widget_layer *l; + + c = 1; + + if (image_disabled) + c++; + + if (image_cursor) + c++; + + widget_init (w, WT_IMAGE, false, x, y, z, image->w, image->h, c); + + if (rumble) + w->flags |= WF_RUMBLE; + + c = 0; + + l = &w->layers[c]; + if(image_cursor) { + l->flags = WF_ENABLED | WF_FLAGS_AND | WF_CURSOR; + l->flags_invert = WF_CURSOR; + } else { + l->flags = WF_ENABLED; + l->flags_invert = 0; + } + + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], image, 0, 0, 0, COL_DEFAULT); + + c++; + + if (image_disabled) { + l = &w->layers[c]; + l->flags = WF_ENABLED; + l->flags_invert = WF_ENABLED; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) pmalloc (l->gfx_entry_count * + sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], image_disabled, 0, 0, 1, COL_DEFAULT); + + c++; + } + + if (image_cursor) { + l = &w->layers[c]; + l->flags = WF_ENABLED | WF_FLAGS_AND | WF_CURSOR; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) pmalloc (l->gfx_entry_count * + sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], image_cursor, 0, 0, 2, COL_DEFAULT); + } +} + +void widget_button (widget *w, s16 x, s16 y, s16 z, button_size size, + const char *caption) { + gfx_entity *tex, *tex_focus; + widget_layer *l; + + switch (size) { + case BTN_SMALL: + tex = theme_gfx[THEME_BUTTON_SMALL]; + tex_focus = theme_gfx[THEME_BUTTON_SMALL_FOCUS]; + break; + + case BTN_TINY: + tex = theme_gfx[THEME_BUTTON_TINY]; + tex_focus = theme_gfx[THEME_BUTTON_TINY_FOCUS]; + break; + + default: + tex = theme_gfx[THEME_BUTTON]; + tex_focus = theme_gfx[THEME_BUTTON_FOCUS]; + break; + } + + widget_init (w, WT_BUTTON, true, x, y, z, tex->w, tex->h, 4); + + w->flags |= WF_RUMBLE; + + l = &w->layers[0]; + l->flags = WF_FOCUSED | WF_FLAGS_AND | WF_ENABLED; + l->flags_invert = WF_FOCUSED; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_entity (&l->gfx_entries[0], tex, 0, 0, 0, COL_DEFAULT); + + l = &w->layers[1]; + l->flags = WF_ENABLED; + l->flags_invert = WF_ENABLED; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_entity (&l->gfx_entries[0], tex, 0, 0, 0, WIDGET_DISABLED_COLOR); + + l = &w->layers[2]; + l->flags = WF_FOCUSED | WF_FLAGS_AND | WF_ENABLED; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], tex_focus, 0, 0, 0, COL_DEFAULT); + + l = &w->layers[3]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 0; + l->gfx_entries = NULL; + + widget_button_set_caption(w, FONT_BUTTON, caption); +} + +void widget_button_set_caption(widget *w, font_id font, const char *caption) { + int c; + u16 bw, bh, oy; + widget_layer *l; + + l = &w->layers[3]; + free(l->gfx_entries); + l->gfx_entry_count = 0; + l->gfx_entries = NULL; + + if (!caption) + return; + + bw = w->layers[0].gfx_entries[0].entity.entity->w; + bh = w->layers[0].gfx_entries[0].entity.entity->h; + + c = font_get_char_count(font, caption, bw - 32); + + oy = bh/2; + + l->gfx_entry_count = c; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + font_plot_string (&l->gfx_entries[0], c, font, caption, 16, oy, 1, + bw - 32, FA_CENTERED, FA_EM_CENTERED); +} + +void widget_grid_app_entry(widget *w, s16 x, s16 y, s16 z, + const app_entry *entry) { + + widget_layer *l; + + if (entry->icon) + widget_init(w, WT_APP_ENTRY, true, x, y, z, + theme_gfx[THEME_GRID_APP_ENTRY]->w, + theme_gfx[THEME_GRID_APP_ENTRY]->h, 4); + else + widget_init(w, WT_APP_ENTRY, true, x, y, z, + theme_gfx[THEME_GRID_APP_ENTRY]->w, + theme_gfx[THEME_GRID_APP_ENTRY]->h, 3); + + // Enable rumbling for this widget + w->flags |= WF_RUMBLE; + + l = &w->layers[0]; + l->flags = WF_FOCUSED | WF_FLAGS_AND | WF_ENABLED; + l->flags_invert = WF_FOCUSED; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], theme_gfx[THEME_GRID_APP_ENTRY], + 0, 0, 0, COL_DEFAULT); + + l = &w->layers[1]; + l->flags = WF_ENABLED; + l->flags_invert = WF_ENABLED; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_entity (&l->gfx_entries[0], theme_gfx[THEME_GRID_APP_ENTRY], + 0, 0, 0, WIDGET_DISABLED_COLOR); + + l = &w->layers[2]; + l->flags = WF_FOCUSED | WF_FLAGS_AND | WF_ENABLED; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], theme_gfx[THEME_GRID_APP_ENTRY_FOCUS], + 0, 0, 0, COL_DEFAULT); + + if (entry->icon) { + l = &w->layers[3]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 1; + + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_entity (&l->gfx_entries[0], entry->icon, GRID_APP_ENTRY_ICON_X, + APP_ENTRY_ICON_Y, 1, COL_DEFAULT); + } +} + +void widget_app_entry (widget *w, s16 x, s16 y, s16 z, const app_entry *entry) { + const char *line1, *line2; + int l1, l2; + + widget_layer *l; + + widget_init (w, WT_APP_ENTRY, true, x, y, z, theme_gfx[THEME_APP_ENTRY]->w, + theme_gfx[THEME_APP_ENTRY]->h, 4); + + w->flags |= WF_RUMBLE; + + l = &w->layers[0]; + l->flags = WF_FOCUSED | WF_FLAGS_AND | WF_ENABLED; + l->flags_invert = WF_FOCUSED; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], theme_gfx[THEME_APP_ENTRY], + 0, 0, 0, COL_DEFAULT); + + l = &w->layers[1]; + l->flags = WF_ENABLED; + l->flags_invert = WF_ENABLED; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_entity (&l->gfx_entries[0], theme_gfx[THEME_APP_ENTRY], + 0, 0, 0, WIDGET_DISABLED_COLOR); + + l = &w->layers[2]; + l->flags = WF_FOCUSED | WF_FLAGS_AND | WF_ENABLED; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], theme_gfx[THEME_APP_ENTRY_FOCUS], + 0, 0, 0, COL_DEFAULT); + + line1 = NULL; + line2 = NULL; + + if (entry->meta) { + line1 = entry->meta->name; + line2 = entry->meta->short_description; + } + + if (!line1) + line1 = entry->dirname; + + if (!line2) + line2 = app_entry_default_description; + + l1 = font_get_char_count(FONT_APPNAME, line1, + theme_gfx[THEME_APP_ENTRY]->w - + APP_ENTRY_TEXT1_X - 16); + l2 = font_get_char_count(FONT_APPDESC, line2, + theme_gfx[THEME_APP_ENTRY]->w - + APP_ENTRY_TEXT2_X - 16); + + l = &w->layers[3]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = l1 + l2; + + if (entry->icon) + l->gfx_entry_count++; + + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + font_plot_string (&l->gfx_entries[0], l1, FONT_APPNAME, line1, + APP_ENTRY_TEXT1_X, APP_ENTRY_TEXT1_Y, 1, + theme_gfx[THEME_APP_ENTRY]->w - APP_ENTRY_TEXT1_X - + 16, FA_LEFT, FA_ASCENDER); + font_plot_string (&l->gfx_entries[l1], l2, FONT_APPDESC, line2, + APP_ENTRY_TEXT2_X, APP_ENTRY_TEXT2_Y, 1, + theme_gfx[THEME_APP_ENTRY]->w - APP_ENTRY_TEXT2_X - + 16, FA_LEFT, FA_DESCENDER); + + if (entry->icon) + gfx_qe_entity (&l->gfx_entries[l1 + l2], entry->icon, + APP_ENTRY_ICON_X, APP_ENTRY_ICON_Y, 1, COL_DEFAULT); +} + +void widget_progress (widget *w, s16 x, s16 y, s16 z, const char *caption, + u32 max) { + widget_layer *l; + + widget_init (w, WT_PROGRESS, false, x, y, z, 0, 0, 3); + + l = &w->layers[0]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + l = &w->layers[1]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + gfx_qe_entity (&l->gfx_entries[0], theme_gfx[THEME_PROGRESS], + 0, 0, 1, COL_DEFAULT); + + int chars = font_get_char_count(FONT_LABEL, caption, + theme_gfx[THEME_PROGRESS]->w - 64); + + l = &w->layers[2]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 4 + chars; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + font_plot_string (&l->gfx_entries[4], chars, FONT_LABEL, caption, 38, 19, 2, + theme_gfx[THEME_PROGRESS]->w - 64, FA_LEFT, FA_EM_CENTERED); + + w->progress.max = max; + w->progress.gradient = (gfx_entity *) pmalloc (sizeof (gfx_entity)); +} + +void widget_gradient (widget *w, s16 x, s16 y, s16 z, + u16 width, u16 height, + u32 c1, u32 c2, u32 c3, + u32 c4) { + widget_layer *l; + + widget_init (w, WT_GRADIENT, false, x, y, z, 0, 0, 1); + + w->gradient.gradient = (gfx_entity *) pmalloc (sizeof (gfx_entity)); + gfx_gen_gradient (w->gradient.gradient, width, height, c1, c2, c3, c4); + + l = &w->layers[0]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_entity (&l->gfx_entries[0], w->gradient.gradient, 0, 0, 0, + COL_DEFAULT); +} + +void widget_memo (widget *w, s16 x, s16 y, s16 z, u16 width, u16 height, + const char *text, font_xalign align) { + widget_layer *l; + int hf; + int count, i, c; + char **lines; + int cl, ot; + int oy; + + hf = font_get_y_spacing(FONT_MEMO); + + count = font_wrap_string (&lines, FONT_MEMO, text, width); + + c = 0; + for (i = 0; i < count; ++i) + if (lines[i]) + c++; + + ot = 0; + cl = (height + hf - 1) / hf; + if (cl > count) + ot = ((cl - count) / 2) * hf; + + widget_init (w, WT_MEMO, false, x, y + ot, z, width, height, c + 2); + + if (c > cl) + w->cur = CUR_DRAG; + + l = &w->layers[0]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_scissor (&l->gfx_entries[0], x, y, z, width, height); + + c = 1; + oy = 0; + + w->memo.y_max = w->coords.y; + + for (i = 0; i < count; ++i) { + if (!lines[i]) { + oy += hf; + continue; + } + + l = &w->layers[c]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = font_get_char_count(FONT_MEMO, lines[i], 0); + l->gfx_entries = (gfx_queue_entry *) pmalloc (l->gfx_entry_count * + sizeof (gfx_queue_entry)); + font_plot_string (&l->gfx_entries[0], l->gfx_entry_count, FONT_MEMO, + lines[i], 0, oy, 0, width, align, FA_ASCENDER); + c++; + oy += hf; + } + + font_free_lines (lines, count); + + l = &w->layers[c]; + l->flags = 0; + l->flags_invert = 0; + l->gfx_entry_count = 1; + l->gfx_entries = (gfx_queue_entry *) + pmalloc (l->gfx_entry_count * sizeof (gfx_queue_entry)); + + gfx_qe_scissor_reset (&l->gfx_entries[0]); + + w->memo.y_min = w->memo.y_max - oy + height; +} + +void widget_memo_deco (widget *w, s16 x, s16 y, s16 z, u16 width, u16 height, + const char *text, font_xalign align) { + widget_image (&w[0], x + (width - theme_gfx[THEME_CONTENT_ARROW_UP]->w) / 2, + y, z, theme_gfx[THEME_CONTENT_ARROW_UP], NULL, false, NULL); + widget_memo (&w[1], x, y + theme_gfx[THEME_CONTENT_ARROW_UP]->h + 8, z, + width, height - theme_gfx[THEME_CONTENT_ARROW_UP]->h - + 8 - theme_gfx[THEME_CONTENT_ARROW_DOWN]->h - 8, text, + align); + widget_image (&w[2], + x + (width - theme_gfx[THEME_CONTENT_ARROW_DOWN]->w) / 2, + y + height - theme_gfx[THEME_CONTENT_ARROW_DOWN]->h, z, + theme_gfx[THEME_CONTENT_ARROW_DOWN], NULL, false, NULL); + widget_scroll_memo_deco (w, 0); +} + diff --git a/channel/channelapp/source/widgets.h b/channel/channelapp/source/widgets.h new file mode 100644 index 0000000..64ea378 --- /dev/null +++ b/channel/channelapp/source/widgets.h @@ -0,0 +1,122 @@ +#ifndef _WIDGETS_H_ +#define _WIDGETS_H_ + +#include + +#include "gfx.h" +#include "cursors.h" +#include "appentry.h" +#include "font.h" + +#define WF_VISIBLE 1 +#define WF_ENABLED 2 +#define WF_FOCUSABLE 4 +#define WF_RUMBLE 8 + +#define WF_CURSOR 32 +#define WF_FOCUSED 64 + +#define WF_FLAGS_MASK 0xff +#define WF_FLAGS_OR 0 +#define WF_FLAGS_AND 256 + +typedef enum { + WT_LABEL, + WT_IMAGE, + WT_BUTTON, + WT_APP_ENTRY, + WT_PROGRESS, + WT_GRADIENT, + WT_MEMO +} widget_type; + +typedef struct { + u32 flags; + u32 flags_invert; + u16 gfx_entry_count; + gfx_queue_entry *gfx_entries; +} widget_layer; + +typedef struct { + widget_type type; + u32 flags; + u16 width, height; + + cursor_type cur; + + gfx_coordinates coords; + gfx_queue_entry qe_coords_push, qe_coords_pop; + + int layer_count; + widget_layer *layers; + + union { + struct { + gfx_entity *mask; + } image; + + struct { + u32 max; + gfx_entity *gradient; + } progress; + + struct { + gfx_entity *gradient; + } gradient; + + struct { + s16 y_min, y_max; + } memo; + }; +} widget; + +typedef enum { + BTN_NORMAL = 0, + BTN_SMALL, + BTN_TINY +} button_size; + +void widgets_init (void); +void widgets_theme_reinit (void); +void widgets_deinit (void); + +void widget_free (widget *w); + +void widget_set_flag (widget *w, u32 flag, bool set); +void widget_toggle_flag (widget *w, u32 flag); +void widget_set_progress (widget *w, u32 progress); +void widget_fade_gradient (widget *w, s8 modifier); +bool widget_scroll_memo (widget *w, s16 modifier); +bool widget_scroll_memo_deco (widget *w, s16 modifier); + +void widget_label (widget *w, s16 x, s16 y, s16 z, const char *caption, + u16 width, font_xalign xalign, font_yalign yalign, + font_id font); + +void widget_image(widget *w, s16 x, s16 y, s16 z, + gfx_entity *image, gfx_entity *image_disabled, + bool rumble, gfx_entity *image_cursor); + +void widget_button (widget *w, s16 x, s16 y, s16 z, + button_size size, const char *caption); +void widget_button_set_caption(widget *w, font_id font, const char *caption); + +void widget_app_entry (widget *w, s16 x, s16 y, s16 z, + const app_entry *entry); +void widget_grid_app_entry (widget *w, s16 x, s16 y, s16 z, + const app_entry *entry); + +void widget_progress (widget *w, s16 x, s16 y, s16 z, + const char *caption, u32 max); +void widget_gradient (widget *w, s16 x, s16 y, s16 z, + u16 width, u16 height, + u32 c1, u32 c2, u32 c3, u32 c4); +void widget_memo (widget *w, s16 x, s16 y, s16 z, + u16 width, u16 height, + const char *text, font_xalign align); +void widget_memo_deco (widget *w, s16 x, s16 y, s16 z, + u16 width, u16 height, + const char *text, font_xalign align); + +#endif + diff --git a/channel/channelapp/source/xml.c b/channel/channelapp/source/xml.c new file mode 100644 index 0000000..4634965 --- /dev/null +++ b/channel/channelapp/source/xml.c @@ -0,0 +1,612 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include "../config.h" +#include "title.h" +#include "isfs.h" +#include "xml.h" +#include "panic.h" + +#include "banner_bin.h" + +#define FN_BANNER "banner.bin" +#define FN_SETTINGS "settings.xml" +#define MAX_SETTINGS_XML_SIZE (16 * 1024) + +settings_t settings; +theme_t theme; + +static settings_t _loaded_settings; +static bool write_banner = true; + +static inline char *_xmldup(const char *str) { + if (!str) + return NULL; + + return pstrdup(str); +} + +static char *_get_cdata(mxml_node_t *node) { + if (!node) + return NULL; + + mxml_node_t *n = node->child; + + while (n) { + if (n->type == MXML_OPAQUE) + return n->value.opaque; + + n = mxmlWalkNext(n, node, MXML_NO_DESCEND); + } + + return NULL; +} + +static char *_get_elem_cdata(mxml_node_t *node, const char *element) { + if (!node) + return NULL; + + return _get_cdata(mxmlFindElement(node, node, element, + NULL, NULL, MXML_DESCEND_FIRST)); +} + +static int _get_elem_int(mxml_node_t *node, const char *element, int std) { + char *cdata; + + if (!node) + return std; + + cdata = _get_cdata(mxmlFindElement(node, node, element, + NULL, NULL, MXML_DESCEND_FIRST)); + + if (!cdata) + return std; + + return atoi(cdata); +} + +static bool _get_color(mxml_node_t *node, const char *element, u32 *color) { + u32 res, i; + int c; + const char *const channel[] = { "red", "green", "blue", "alpha" }; + + if (!node) + return false; + + node = mxmlFindElement(node, node, element, NULL, NULL, MXML_DESCEND_FIRST); + + if (!node) + return false; + + res = 0; + for (i = 0; i < 4; ++i) { + res <<= 8; + c = _get_elem_int(node, channel[i], -1); + if ((c < 0) || (c > 255)) + return false; + res |= c & 0xff; + } + + *color = res; + return true; +} + +static bool _get_gradient(mxml_node_t *node, const char *element, + theme_gradient_t *gradient) { + u32 i, c[4]; + const char *const corner[] = { + "upper_left", "upper_right", "lower_right", "lower_left" + }; + + if (!node) + return false; + + node = mxmlFindElement(node, node, element, NULL, NULL, MXML_DESCEND_FIRST); + + if (!node) + return false; + + for (i = 0; i < 4; ++i) + if (!_get_color(node, corner[i], &c[i])) + return false; + + gradient->ul = c[0]; + gradient->ur = c[1]; + gradient->ll = c[2]; + gradient->lr = c[3]; + + return true; +} + +// sync with font.h +static const char *targets[FONT_MAX] = { + "label", + "dlgtitle", + "memo", + "appname", + "appdesc", + "button", + "button_desel" +}; + +static void _get_font(mxml_node_t *node) { + theme_font_t f; + f.file = _xmldup(_get_elem_cdata(node, "file")); + f.size = _get_elem_int(node, "size", 0); + f.color = NO_COLOR; + _get_color(node, "color", &f.color); + + const char *t = mxmlElementGetAttr(node, "target"); + if (t && t[0]) { + char *trg = pstrdup(t); + char *tok; + tok = strtok(trg, ", "); + while (tok) { + int i; + for (i=0; i ARGS_MAX_LEN) + return NULL; + + char *ret; + + ret = pmalloc(len); + + len = 0; + + for (n = mxmlFindElement(node, node, "arg", NULL, NULL, MXML_DESCEND_FIRST); + n != NULL; n = mxmlFindElement(n, node, "arg", NULL, NULL, + MXML_NO_DESCEND)) { + arg = _get_cdata(n); + + if (arg) { + if (len) { + ret[len] = 0; + len++; + } + + strcpy(ret + len, arg); + len += strlen(arg); + } + } + + ret[len] = 0; + + *length = len; + + return ret; +} + +meta_info *meta_parse(char *fn) { + int fd; + mxml_node_t *root, *node; + meta_info *res; + char *s; + struct tm t; + + fd = open(fn, O_RDONLY); + if (fd < 0) { + gprintf("error opening '%s'\n", fn); + return NULL; + } + + root = mxmlLoadFd(NULL, fd, MXML_OPAQUE_CALLBACK); + + close(fd); + + if (!root) { + gprintf("error parsing '%s'\n", fn); + return NULL; + } + + node = mxmlFindElement(root, root, "app", NULL, NULL, MXML_DESCEND_FIRST); + + if (!node) { + gprintf("no app node '%s'\n", fn); + mxmlDelete(root); + return NULL; + } + + res = (meta_info *) pmalloc(sizeof(meta_info)); + memset(res, 0, sizeof(meta_info)); + + res->name = _xmldup(_get_elem_cdata(node, "name")); + res->coder = _xmldup(_get_elem_cdata(node, "author")); + if (!res->coder) + res->coder = _xmldup(_get_elem_cdata(node, "coder")); + res->version = _xmldup(_get_elem_cdata(node, "version")); + res->short_description = _xmldup(_get_elem_cdata(node, "short_description")); + res->long_description = _xmldup(_get_elem_cdata(node, "long_description")); + + s = _get_elem_cdata(node, "release_date"); + + if (s) { + memset(&t, 0, sizeof(struct tm)); + if (sscanf(s, "%4d%2d%2d%2d%2d%2d", &t.tm_year, &t.tm_mon, &t.tm_mday, + &t.tm_hour, &t.tm_min, &t.tm_sec) == 6) { + t.tm_year -= 1900; + + res->release_date = mktime (&t); + } else if (sscanf(s, "%4d%2d%2d", &t.tm_year, &t.tm_mon, &t.tm_mday) == 3) { + t.tm_hour = 1; + t.tm_min = 0; + t.tm_sec = 0; + t.tm_year -= 1900; + + res->release_date = mktime (&t); + } + } + + res->args = _get_args(&res->argslen, node, "arguments"); + + if (mxmlFindElement(node, node, "ahb_access", NULL, NULL, + MXML_DESCEND_FIRST)) + res->ahb_access = true; + if (mxmlFindElement(node, node, "no_ios_reload", NULL, NULL, + MXML_DESCEND_FIRST)) + res->ahb_access = true; + + mxmlDelete(root); + + return res; +} + +void meta_free(meta_info *info) { + if (!info) + return; + + free(info->name); + free(info->coder); + free(info->version); + free(info->short_description); + free(info->long_description); + free(info->args); + + free(info); +} + +update_info *update_parse(char *buf) { + mxml_node_t *root, *node; + char *s; + update_info *res; + + root = mxmlLoadString(NULL, buf, MXML_OPAQUE_CALLBACK); + + if (!root) { + gprintf("error parsing update.xml!\n"); + return NULL; + } + + node = mxmlFindElement(root, root, "app", NULL, NULL, MXML_DESCEND_FIRST); + + if (!node) { + gprintf("no app node for update.xml!'\n"); + mxmlDelete(root); + return NULL; + } + + res = (update_info *) pmalloc(sizeof(update_info)); + memset(res, 0, sizeof(update_info)); + + res->version = _xmldup(_get_elem_cdata(node, "version")); + + s = _get_elem_cdata(node, "date"); + if (s) { + if (sscanf(s, "%llu", &res->date) != 1) + res->date = 0; + } + + res->notes = _xmldup(_get_elem_cdata(node, "notes")); + res->uri = _xmldup(_get_elem_cdata(node, "uri")); + res->hash = _xmldup(_get_elem_cdata(node, "hash")); + + mxmlDelete(root); + + return res; +} + +void update_free(update_info *info) { + if (!info) + return; + + free(info->version); + free(info->notes); + free(info->uri); + + free(info); +} + +bool settings_load(void) { + s32 res; + u8 *buf; + mxml_node_t *root, *node; + char *s; + const char *titlepath; + STACK_ALIGN(char, fn, ISFS_MAXPATH, 32); + + settings.device = -1; + settings.sort_order = 0; + settings.browse_mode = 0; + memset(settings.app_sel, 0, sizeof(settings.app_sel)); + + memcpy(&_loaded_settings, &settings, sizeof(settings_t)); + + titlepath = title_get_path(); + if (!titlepath[0]) + return false; + + sprintf(fn, "%s/" FN_BANNER, titlepath); + + buf = NULL; + res = isfs_get(fn, &buf, banner_bin_size, 0, false); + if (res < 0) { + gprintf("deleting banner: %ld\n", res); + ISFS_Delete(fn); + } else if (memcmp(buf, banner_bin, banner_bin_size)) { + gprintf("banner.bin mismatch, deleting\n"); + ISFS_Delete(fn); + } else { + write_banner = false; + } + + if (buf) { + free(buf); + buf = NULL; + } + + sprintf(fn, "%s/" FN_SETTINGS, titlepath); + res = isfs_get(fn, &buf, 0, MAX_SETTINGS_XML_SIZE, false); + if (res < 0) { + gprintf("isfs_get failed: %ld\n", res); + return false; + } + + root = mxmlLoadString(NULL, (char *) buf, MXML_OPAQUE_CALLBACK); + free(buf); + buf = NULL; + + if (!root) { + gprintf("error parsing settings.xml!\n"); + return false; + } + + node = mxmlFindElement(root, root, "hbc", NULL, NULL, MXML_DESCEND_FIRST); + + if (!node) { + gprintf("no hbc node for settings.xml!'\n"); + mxmlDelete(root); + return false; + } + + settings.device = _get_elem_int(node, "device", -1); + settings.sort_order = _get_elem_int(node, "sort_order", 0); + settings.browse_mode = _get_elem_int(node, "browse_mode", 0); + s = _get_elem_cdata(node, "app_sel"); + if (s) { + strncpy(settings.app_sel, s, sizeof(settings.app_sel)); + settings.app_sel[sizeof(settings.app_sel) - 1] = 0; + } + + mxmlDelete(root); + + memcpy(&_loaded_settings, &settings, sizeof(settings_t)); + //hexdump(&_loaded_settings,sizeof(settings_t)); + + return true; +} + +bool settings_save(void) { + s32 res; + char *x; + const char *titlepath; + int size; + + STACK_ALIGN(char, fn, ISFS_MAXPATH, 32); + + titlepath = title_get_path(); + if (!titlepath[0]) + return false; + + if (!memcmp(&_loaded_settings, &settings, sizeof(settings_t))) + return false; + + //hexdump(&settings,sizeof(settings_t)); + x = (char *) pmemalign(32, MAX_SETTINGS_XML_SIZE); + + mxml_node_t *xml; + mxml_node_t *data; + mxml_node_t *node; + + xml = mxmlNewXML("1.0"); + + data = mxmlNewElement(xml, "hbc"); + + node = mxmlNewElement(data, "device"); + mxmlNewInteger(node, settings.device); + + node = mxmlNewElement(data, "sort_order"); + mxmlNewInteger(node, settings.sort_order); + + node = mxmlNewElement(data, "browse_mode"); + mxmlNewInteger(node, settings.browse_mode); + + if (strlen(settings.app_sel) > 0) { + node = mxmlNewElement(data, "app_sel"); + mxmlNewText(node, 0, settings.app_sel); + } + + size = mxmlSaveString (xml, x, MAX_SETTINGS_XML_SIZE, MXML_NO_CALLBACK); + x[MAX_SETTINGS_XML_SIZE - 1] = 0; + + if ((size < 16) || (size > MAX_SETTINGS_XML_SIZE - 1)) { + gprintf("mxmlSaveString failed!\n"); + free(x); + return false; + } + + if (write_banner) { + sprintf(fn, "%s/" FN_BANNER, titlepath); + res = isfs_put(fn, banner_bin, banner_bin_size); + if ((res < 0) && (res != -105)) { + gprintf("isfs_put banner failed: %ld\n", res); + free(x); + return false; + } + } + + sprintf(fn, "%s/" FN_SETTINGS, titlepath); + + res = isfs_put(fn, x, strlen(x)); + if (res < 0) { + gprintf("isfs_put xml failed: %ld\n", res); + free(x); + sprintf(fn, "%s/" FN_BANNER, titlepath); + ISFS_Delete(fn); + return false; + } + + free(x); + return true; +} + +void theme_xml_init(void) { + memset(&theme, 0, sizeof(theme)); +} + +bool load_theme_xml(char *buf) { + int i; + mxml_node_t *root, *node, *fnode; + + // free prior theme + if (theme.description) + free(theme.description); + if (theme.default_font.file) + free(theme.default_font.file); + for (i=0; i 64)) + theme.description[64] = 0; + + theme.default_font.color = NO_COLOR; + theme.default_font.file = NULL; + theme.default_font.size = 0; + for (i=0; i + +#include + +#include "font.h" + +#define NO_COLOR 0x0DEADF00 + +typedef struct { + char *name; + char *coder; + char *version; + time_t release_date; + char *short_description; + char *long_description; + char *args; + u16 argslen; + bool ahb_access; +} meta_info; + +typedef struct { + char *version; + u64 date; + char *notes; + char *uri; + char *hash; +} update_info; + +typedef struct { + int device; + int sort_order; + int browse_mode; + char app_sel[64]; +} settings_t; + +typedef struct { + u32 ul, ur, lr, ll; +} theme_gradient_t; + +typedef struct { + char *file; + int size; + u32 color; +} theme_font_t; + +typedef enum { + TLANG_JA = 0x01, + TLANG_KO = 0x02, + TLANG_ZH = 0x04, +} theme_lang_t; + +typedef struct { + theme_gradient_t progress; + char *description; + theme_font_t default_font; + theme_font_t fonts[FONT_MAX]; + theme_lang_t langs; +} theme_t; + +extern settings_t settings; +extern theme_t theme; + +meta_info *meta_parse(char *fn); +void meta_free(meta_info *info); + +update_info *update_parse(char *buf); +void update_free(update_info *info); + +bool settings_load(void); +bool settings_save(void); + +void theme_xml_init(void); +bool load_theme_xml(char *buf); + +#endif + diff --git a/channel/channelapp/stub/asm.h b/channel/channelapp/stub/asm.h new file mode 100644 index 0000000..3404fd4 --- /dev/null +++ b/channel/channelapp/stub/asm.h @@ -0,0 +1,340 @@ +// this file was taken from libogc, see http://www.devkitpro.org/ + +#ifndef __ASM_H__ +#define __ASM_H__ + +#ifdef _LANGUAGE_ASSEMBLY +/* Condition Register Bit Fields */ + +#define cr0 0 +#define cr1 1 +#define cr2 2 +#define cr3 3 +#define cr4 4 +#define cr5 5 +#define cr6 6 +#define cr7 7 + + +/* General Purpose Registers (GPRs) */ + +#define r0 0 +#define r1 1 +#define sp 1 +#define r2 2 +#define toc 2 +#define r3 3 +#define r4 4 +#define r5 5 +#define r6 6 +#define r7 7 +#define r8 8 +#define r9 9 +#define r10 10 +#define r11 11 +#define r12 12 +#define r13 13 +#define r14 14 +#define r15 15 +#define r16 16 +#define r17 17 +#define r18 18 +#define r19 19 +#define r20 20 +#define r21 21 +#define r22 22 +#define r23 23 +#define r24 24 +#define r25 25 +#define r26 26 +#define r27 27 +#define r28 28 +#define r29 29 +#define r30 30 +#define r31 31 + + +/* Floating Point Registers (FPRs) */ + +#define fr0 0 +#define fr1 1 +#define fr2 2 +#define fr3 3 +#define fr4 4 +#define fr5 5 +#define fr6 6 +#define fr7 7 +#define fr8 8 +#define fr9 9 +#define fr10 10 +#define fr11 11 +#define fr12 12 +#define fr13 13 +#define fr14 14 +#define fr15 15 +#define fr16 16 +#define fr17 17 +#define fr18 18 +#define fr19 19 +#define fr20 20 +#define fr21 21 +#define fr22 22 +#define fr23 23 +#define fr24 24 +#define fr25 25 +#define fr26 26 +#define fr27 27 +#define fr28 28 +#define fr29 29 +#define fr30 30 +#define fr31 31 + +#define vr0 0 +#define vr1 1 +#define vr2 2 +#define vr3 3 +#define vr4 4 +#define vr5 5 +#define vr6 6 +#define vr7 7 +#define vr8 8 +#define vr9 9 +#define vr10 10 +#define vr11 11 +#define vr12 12 +#define vr13 13 +#define vr14 14 +#define vr15 15 +#define vr16 16 +#define vr17 17 +#define vr18 18 +#define vr19 19 +#define vr20 20 +#define vr21 21 +#define vr22 22 +#define vr23 23 +#define vr24 24 +#define vr25 25 +#define vr26 26 +#define vr27 27 +#define vr28 28 +#define vr29 29 +#define vr30 30 +#define vr31 31 + +#endif //_LANGUAGE_ASSEMBLY + +#define SPRG0 272 +#define SPRG1 273 +#define SPRG2 274 +#define SPRG3 275 + +#define PMC1 953 +#define PMC2 954 +#define PMC3 957 +#define PMC4 958 + +#define MMCR0 952 +#define MMCR1 956 + + +#define LINK_REGISTER_CALLEE_UPDATE_ROOM 4 +#define EXCEPTION_NUMBER 8 +#define SRR0_OFFSET 12 +#define SRR1_OFFSET 16 +#define GPR0_OFFSET 20 +#define GPR1_OFFSET 24 +#define GPR2_OFFSET 28 +#define GPR3_OFFSET 32 +#define GPR4_OFFSET 36 +#define GPR5_OFFSET 40 +#define GPR6_OFFSET 44 +#define GPR7_OFFSET 48 +#define GPR8_OFFSET 52 +#define GPR9_OFFSET 56 +#define GPR10_OFFSET 60 +#define GPR11_OFFSET 64 +#define GPR12_OFFSET 68 +#define GPR13_OFFSET 72 +#define GPR14_OFFSET 76 +#define GPR15_OFFSET 80 +#define GPR16_OFFSET 84 +#define GPR17_OFFSET 88 +#define GPR18_OFFSET 92 +#define GPR19_OFFSET 96 +#define GPR20_OFFSET 100 +#define GPR21_OFFSET 104 +#define GPR22_OFFSET 108 +#define GPR23_OFFSET 112 +#define GPR24_OFFSET 116 +#define GPR25_OFFSET 120 +#define GPR26_OFFSET 124 +#define GPR27_OFFSET 128 +#define GPR28_OFFSET 132 +#define GPR29_OFFSET 136 +#define GPR30_OFFSET 140 +#define GPR31_OFFSET 144 + +#define GQR0_OFFSET 148 +#define GQR1_OFFSET 152 +#define GQR2_OFFSET 156 +#define GQR3_OFFSET 160 +#define GQR4_OFFSET 164 +#define GQR5_OFFSET 168 +#define GQR6_OFFSET 172 +#define GQR7_OFFSET 176 + +#define CR_OFFSET 180 +#define LR_OFFSET 184 +#define CTR_OFFSET 188 +#define XER_OFFSET 192 +#define MSR_OFFSET 196 +#define DAR_OFFSET 200 + +#define STATE_OFFSET 204 +#define MODE_OFFSET 206 + +#define FPR0_OFFSET 208 +#define FPR1_OFFSET 216 +#define FPR2_OFFSET 224 +#define FPR3_OFFSET 232 +#define FPR4_OFFSET 240 +#define FPR5_OFFSET 248 +#define FPR6_OFFSET 256 +#define FPR7_OFFSET 264 +#define FPR8_OFFSET 272 +#define FPR9_OFFSET 280 +#define FPR10_OFFSET 288 +#define FPR11_OFFSET 296 +#define FPR12_OFFSET 304 +#define FPR13_OFFSET 312 +#define FPR14_OFFSET 320 +#define FPR15_OFFSET 328 +#define FPR16_OFFSET 336 +#define FPR17_OFFSET 344 +#define FPR18_OFFSET 352 +#define FPR19_OFFSET 360 +#define FPR20_OFFSET 368 +#define FPR21_OFFSET 376 +#define FPR22_OFFSET 384 +#define FPR23_OFFSET 392 +#define FPR24_OFFSET 400 +#define FPR25_OFFSET 408 +#define FPR26_OFFSET 416 +#define FPR27_OFFSET 424 +#define FPR28_OFFSET 432 +#define FPR29_OFFSET 440 +#define FPR30_OFFSET 448 +#define FPR31_OFFSET 456 + +#define FPSCR_OFFSET 464 + +#define PSR0_OFFSET 472 +#define PSR1_OFFSET 480 +#define PSR2_OFFSET 488 +#define PSR3_OFFSET 496 +#define PSR4_OFFSET 504 +#define PSR5_OFFSET 512 +#define PSR6_OFFSET 520 +#define PSR7_OFFSET 528 +#define PSR8_OFFSET 536 +#define PSR9_OFFSET 544 +#define PSR10_OFFSET 552 +#define PSR11_OFFSET 560 +#define PSR12_OFFSET 568 +#define PSR13_OFFSET 576 +#define PSR14_OFFSET 584 +#define PSR15_OFFSET 592 +#define PSR16_OFFSET 600 +#define PSR17_OFFSET 608 +#define PSR18_OFFSET 616 +#define PSR19_OFFSET 624 +#define PSR20_OFFSET 632 +#define PSR21_OFFSET 640 +#define PSR22_OFFSET 648 +#define PSR23_OFFSET 656 +#define PSR24_OFFSET 664 +#define PSR25_OFFSET 672 +#define PSR26_OFFSET 680 +#define PSR27_OFFSET 688 +#define PSR28_OFFSET 696 +#define PSR29_OFFSET 704 +#define PSR30_OFFSET 712 +#define PSR31_OFFSET 720 +/* + * maintain the EABI requested 8 bytes aligment + * As SVR4 ABI requires 16, make it 16 (as some + * exception may need more registers to be processed...) + */ +#define EXCEPTION_FRAME_END 728 + +#define IBAT0U 528 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 +#define IBAT4U 560 +#define IBAT4L 561 +#define IBAT5U 562 +#define IBAT5L 563 +#define IBAT6U 564 +#define IBAT6L 565 +#define IBAT7U 566 +#define IBAT7L 567 + +#define DBAT0U 536 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 538 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 +#define DBAT3L 543 +#define DBAT4U 568 +#define DBAT4L 569 +#define DBAT5U 570 +#define DBAT5L 571 +#define DBAT6U 572 +#define DBAT6L 573 +#define DBAT7U 574 +#define DBAT7L 575 + +#define HID0 1008 +#define HID1 1009 +#define HID2 920 +#define HID4 1011 + +#define GQR0 912 +#define GQR1 913 +#define GQR2 914 +#define GQR3 915 +#define GQR4 916 +#define GQR5 917 +#define GQR6 918 +#define GQR7 919 + +#define L2CR 1017 + +#define WPAR 921 + +#define DMAU 922 +#define DMAL 923 + +#define MSR_RI 0x00000002 +#define MSR_DR 0x00000010 +#define MSR_IR 0x00000020 +#define MSR_IP 0x00000040 +#define MSR_SE 0x00000400 +#define MSR_ME 0x00001000 +#define MSR_FP 0x00002000 +#define MSR_POW 0x00004000 +#define MSR_EE 0x00008000 + +#define PPC_ALIGNMENT 8 + +#define PPC_CACHE_ALIGNMENT 32 + +#endif //__ASM_H__ diff --git a/channel/channelapp/stub/cache.h b/channel/channelapp/stub/cache.h new file mode 100644 index 0000000..e75ac18 --- /dev/null +++ b/channel/channelapp/stub/cache.h @@ -0,0 +1,310 @@ +/*------------------------------------------------------------- + + +cache.h -- Cache interface + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#ifndef __CACHE_H__ +#define __CACHE_H__ + +/*! \file cache.h +\brief Cache subsystem + +*/ + +#include + +#define LC_BASEPREFIX 0xe000 +#define LC_BASE (LC_BASEPREFIX<<16) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \fn void DCEnable() + * \brief Enable L1 d-cache + * + * \return none + */ +void DCEnable(); + + +/*! + * \fn void DCDisable() + * \brief Disable L1 d-cache + * + * \return none + */ +void DCDisable(); + + +/*! + * \fn void DCFreeze() + * \brief Current contents of the L1 d-cache are locked down and will not be cast out. + * + * Hits are still serviced, but misses go straight to L2 or 60x bus. Most cache operations, such as DCFlushRange(), will still execute regardless of whether the cache is frozen.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void DCFreeze(); + + +/*! + * \fn void DCUnfreeze() + * \brief Undoes actions of DCFreeze(). + * + * Old cache blocks will now be cast out on subsequent L1 misses.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void DCUnfreeze(); + + +/*! + * \fn void DCFlashInvalidate() + * \brief Invalidate L1 d-cache. + * + * An invalidate operation is issued that marks the state of each data cache block as invalid without writing back modified cache blocks to memory.
+ * Cache access is blocked during this time.Bus accesses to the cache are signaled as a miss during invalidate-all operations. + * + * \return none + */ +void DCFlashInvalidate(); + + +/*! + * \fn void DCInvalidateRange(void *startaddress,u32 len) + * \brief Invalidates a given range of the d-cache. + * + * If any part of the range hits in the d-cache, the corresponding block will be invalidated. + * + * \param[in] startaddress pointer to the startaddress of the memory range to invalidate. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to invalidate. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCInvalidateRange(void *startaddress,u32 len); + + +/*! + * \fn void DCFlushRange(void *startaddress,u32 len) + * \brief Flushes a given range. + * + * If any part of the range hits in the d-cache the corresponding block will be flushed to main memory and invalidated.
+ * NOTE: This function invokes a "sync" after flushing the range. This means the function will stall until the CPU knows that the data has been writen to main memory + * + * \param[in] startaddress pointer to the startaddress of the memory range to flush. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of range to be flushed. NOTE: Should be a multiple of 32 + * + *\return none + */ +void DCFlushRange(void *startaddress,u32 len); + +/*! + * \fn void DCStoreRange(void *startaddress,u32 len) + * \brief Ensures a range of memory is updated with any modified data in the cache. + * + * NOTE: This function invokes a "sync" after storing the range. This means the function will stall until the CPU knows that the data has been writen to main memory + * + * \param[in] startaddress pointer to the startaddress of the memory range to store. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to store. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCStoreRange(void *startaddress,u32 len); + + +/*! + * \fn void DCFlushRangeNoSync(void *startaddress,u32 len) + * \brief Flushes a given range. + * + * If any part of the range hits in the d-cache the corresponding block will be flushed to main memory and invalidated.
+ * NOTE: This routine does not perform a "sync" to ensure that the range has been flushed to memory. That is, the cache blocks are sent to the bus interface unit for storage to main memory, but by the time this function returns, you are not guaranteed that the blocks have been written to memory. + * + * \param[in] startaddress pointer to the startaddress of the memory range to flush. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of range to be flushed. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCFlushRangeNoSync(void *startaddress,u32 len); + + +/*! + * \fn void DCStoreRangeNoSync(void *startaddress,u32 len) + * \brief Ensures a range of memory is updated with any modified data in the cache. + * + * NOTE: This routine does not perform a "sync" to ensure that the range has been flushed to memory. That is, the cache blocks are sent to the bus interface unit for storage to main memory, but by the time this function returns, you are not guaranteed that the blocks have been written to memory + * + * \param[in] startaddress pointer to the startaddress of the memory range to store. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to store. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCStoreRangeNoSync(void *startaddress,u32 len); + + +/*! + * \fn void DCZeroRange(void *startaddress,u32 len) + * \brief Loads a range of memory into cache and zeroes all the cache lines. + * + * \param[in] startaddress pointer to the startaddress of the memory range to load/zero. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to load/zero. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCZeroRange(void *startaddress,u32 len); + + +/*! + * \fn void DCTouchRange(void *startaddress,u32 len) + * \brief Loads a range of memory into cache. + * + * \param[in] startaddress pointer to the startaddress of the memory range to load. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to load. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCTouchRange(void *startaddress,u32 len); + + +/*! + * \fn void ICSync() + * \brief Performs an instruction cache synchronization. + * + * This ensures that all instructions preceding this instruction have completed before this instruction completes. + * + * \return none + */ +void ICSync(); + + +/*! + * \fn void ICFlashInvalidate() + * \brief Invalidate the L1 i-cache. + * + * An invalidate operation is issued that marks the state of each instruction cache block as invalid without writing back modified cache blocks to memory.
+ * Cache access is blocked during this time. Bus accesses to the cache are signaled as a miss during invalidate-all operations. + * + * \return none + */ +void ICFlashInvalidate(); + + +/*! + * \fn void ICEnable() + * \brief Enable L1 i-cache + * + * \return none + */ +void ICEnable(); + + +/*! + * \fn void ICDisable() + * \brief Disable L1 i-cache + * + * \return none + */ +void ICDisable(); + + +/*! + * \fn void ICFreeze() + * \brief Current contents of the L1 i-cache are locked down and will not be cast out. + * + * Hits are still serviced, but misses go straight to L2 or 60x bus.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void ICFreeze(); + + +/*! + * \fn void ICUnfreeze() + * \brief Undoes actions of ICFreeze(). + * + * Old cache blocks will now be cast out on subsequent L1 misses.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void ICUnfreeze(); + + +/*! + * \fn void ICBlockInvalidate(void *startaddress) + * \brief Invalidates a block in the i-cache. + * + * If the block hits in the i-cache, the corresponding block will be invalidated. + * + * \param[in] startaddress pointer to the startaddress of the memory block to invalidate. NOTE: Has to be aligned on a 32byte boundery + * + *\return none + */ +void ICBlockInvalidate(void *startaddress); + + +/*! + * \fn void ICInvalidateRange(void *startaddress,u32 len) + * \brief Invalidate a range in the L1 i-cache. + * + * If any part of the range hits in the i-cache, the corresponding block will be invalidated. + * + * \param[in] startaddress pointer to the startaddress of the memory range to invalidate. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to invalidate. NOTE: Should be a multiple of 32 + * + * \return none + */ +void ICInvalidateRange(void *startaddress,u32 len); + +void LCEnable(); +void LCDisable(); +void LCLoadBlocks(void *,void *,u32); +void LCStoreBlocks(void *,void *,u32); +u32 LCLoadData(void *,void *,u32); +u32 LCStoreData(void *,void *,u32); +u32 LCQueueLength(); +u32 LCQueueWait(u32); +void LCFlushQueue(); +void LCAlloc(void *,u32); +void LCAllocNoInvalidate(void *,u32); +void LCAllocOneTag(BOOL,void *); +void LCAllocTags(BOOL,void *,u32); + +#define LCGetBase() ((void*)LC_BASE) +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/channel/channelapp/stub/cache_asm.S b/channel/channelapp/stub/cache_asm.S new file mode 100644 index 0000000..088ec62 --- /dev/null +++ b/channel/channelapp/stub/cache_asm.S @@ -0,0 +1,465 @@ +/*------------------------------------------------------------- + +cache_asm.S -- Cache interface + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include "asm.h" + + .globl DCFlashInvalidate +DCFlashInvalidate: + mfspr r3,HID0 + ori r3,r3,0x0400 + mtspr HID0,r3 + blr + + .globl DCEnable +DCEnable: + sync + mfspr r3,HID0 + ori r3,r3,0x4000 + mtspr HID0,r3 + blr + +/* .globl DCDisable +DCDisable: + sync + mfspr r3,HID0 + rlwinm r3,r3,0,18,16 + mtspr HID0,r3 + blr +*/ +/* .globl DCFreeze +DCFreeze: + sync + mfspr r3,HID0 + ori r3,r3,0x1000 + mtspr HID0,r3 + blr + + .globl DCUnfreeze +DCUnfreeze: + mfspr r3,HID0 + rlwinm r3,r3,0,20,18 + mtspr HID0,r3 + blr + + .globl DCTouchLoad +DCTouchLoad: + dcbt r0,r3 + blr + + .globl DCBlockZero +DCBlockZero: + dcbz r0,r3 + blr + + .globl DCBlockStore +DCBlockStore: + dcbst r0,r3 + blr + + .globl DCBlockFlush +DCBlockFlush: + dcbf r0,r3 + blr + + .globl DCBlockInvalidate +DCBlockInvalidate: + dcbi r0,r3 + blr +*/ + .globl DCInvalidateRange +DCInvalidateRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbi r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl DCFlushRange +DCFlushRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbf r0, r3 + addi r3, r3, 0x20 + bdnz 2b + sc + blr + +/* .globl DCStoreRange +DCStoreRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbst r0, r3 + addi r3, r3, 0x20 + bdnz 2b + sc + blr +*/ + .globl DCFlushRangeNoSync +DCFlushRangeNoSync: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbf r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + +/* .globl DCStoreRangeNoSync +DCStoreRangeNoSync: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbst r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl DCZeroRange +DCZeroRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbz r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl DCTouchRange +DCTouchRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbt r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr +*/ + .globl ICInvalidateRange +ICInvalidateRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + icbi r0, r3 + addi r3, r3, 0x20 + bdnz 2b + sync + isync + blr + + .globl ICFlashInvalidate +ICFlashInvalidate: + mfspr r3,HID0 + ori r3,r3,0x0800 + mtspr HID0,r3 + blr + + .globl ICEnable +ICEnable: + isync + mfspr r3,HID0 + ori r3,r3,0x8000 + mtspr HID0,r3 + blr + + .globl ICDisable +ICDisable: + isync + mfspr r3,HID0 + rlwinm r3,r3,0,17,15 + mtspr HID0,r3 + blr + +/* .globl ICFreeze +ICFreeze: + isync + mfspr r3,HID0 + ori r3,r3,0x2000 + mtspr HID0,r3 + blr + + .globl ICUnfreeze +ICUnfreeze: + mfspr r3,HID0 + rlwinm r3,r3,0,19,17 + mtspr HID0,r3 + blr + + .globl ICBlockInvalidate +ICBlockInvalidate: + icbi r0,r3 + blr +*/ + .globl ICSync +ICSync: + isync + blr + + .globl L2Init +L2Init: + mflr r0 + stw r0,4(sp) + stwu sp,-16(sp) + stw r31,12(sp) + mfmsr r3 + mr r31,r3 + sync + li r3,48 + mtmsr r3 + sync + bl L2Disable + bl L2GlobalInvalidate + mr r3,r31 + mtmsr r3 + lwz r0,20(sp) + lwz r31,12(sp) + mtlr r0 + blr + + .globl L2Enable +L2Enable: + mfspr r3,L2CR; + oris r0,r3,0x8000 + rlwinm r3,r0,0,11,9 + mtspr L2CR,r3 + blr + + .globl L2Disable +L2Disable: + sync + mfspr r3,L2CR + clrlwi r3,r3,1 + mtspr L2CR,r3 + sync + blr + + .globl L2GlobalInvalidate +L2GlobalInvalidate: + mflr r0 + stw r0,4(sp) + stwu sp,-8(sp) + bl L2Disable + mfspr r3,L2CR + oris r3,r3,0x0020 + mtspr L2CR,r3 +1: mfspr r3,L2CR + clrlwi r0,r3,31 + cmplwi r0,0x0000 + bne 1b + mfspr r3,L2CR + rlwinm r3,r3,0,11,9 + mtspr L2CR,r3 +2: mfspr r3,L2CR + clrlwi r0,r3,31 + cmplwi r0,0x0000 + bne 2b + lwz r0,12(sp) + addi sp,sp,8 + mtlr r0 + blr + +/* .globl __LCEnable +__LCEnable: + mfmsr r5 + ori r5,r5,0x1000 + mtmsr r5 + lis r3,0x8000 + li r4,1024 + mtctr r4 +1: dcbt r0,r3 + dcbst r0,r3 + bdnz 1b + mfspr r4,HID2 + oris r4,r4,0x100f + mtspr HID2,r4 + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + lis r3,0xe000 + ori r3,r3,0x0002 + mtspr DBAT3L,r3 + ori r3,r3,0x01fe + mtspr DBAT3U,r3 + isync + lis r3,0xe000 + li r6,512 + mtctr r6 + li r6,0 +2: dcbz_l r6,r3 + addi r3,r3,32 + bdnz 2b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + blr + + .globl LCDisable +LCDisable: + lis r3,0xe000 + li r4,512 + mtctr r4 +1: dcbi r0,r3 + addi r3,r3,32 + bdnz 1b + mfspr r4,HID2 + rlwinm r4,r4,0,4,2 + mtspr HID2,r4 + blr + + .globl LCAllocOneTag +LCAllocOneTag: + cmpwi r3,0 + beq 1f + dcbi r0,r4 +1: dcbz_l r0,r4 + blr + + .globl LCAllocTags +LCAllocTags: + mflr r6 + cmplwi r5,0 + ble 2f + mtctr r5 + cmpwi r3,0 + beq 3f +1: dcbi r0,r4 + dcbz_l r0,r4 + addi r4,r4,32 + bdnz 1b + b 2f +3: dcbz_l r0,r4 + addi r4,r4,32 + bdnz 3b +2: mtlr r6 + blr + + .globl LCLoadBlocks +LCLoadBlocks: + extrwi r6,r5,5,25 + clrlwi r4,r4,4 + or r6,r6,r4 + mtspr DMAU,r6 + clrlslwi r6,r5,30,2 + or r6,r6,r3 + ori r6,r6,0x0012 + mtspr DMAL,r6 + blr + + .globl LCStoreBlocks +LCStoreBlocks: + extrwi r6,r5,5,25 + clrlwi r4,r4,4 + or r6,r6,r3 + mtspr DMAU,r6 + clrlslwi r6,r5,30,2 + or r6,r6,r4 + ori r6,r6,0x0002 + mtspr DMAL,r6 + blr + +*/ diff --git a/channel/channelapp/stub/crt0.S b/channel/channelapp/stub/crt0.S new file mode 100644 index 0000000..57ff0ec --- /dev/null +++ b/channel/channelapp/stub/crt0.S @@ -0,0 +1,207 @@ +// this file was taken from libogc, see http://www.devkitpro.org/ + +#include "asm.h" + +#define _SDA_BASE_ 32768 +#define _SDA2_BASE_ 32768 + + + .text + .section .init + + # crt0.s file for the GameCube V1.1 by Costis (costis@gbaemu.com)! + # + # Updates: Added support for clearing the BSS section so that global + # variables are cleared to 0 upon start-up. + # + # This is start-up code for initializing the GameCube system and hardware + # before executing the actual user program code. It clears the GPR's, + # initializes the FPR's, initializes the Data, Code, and L2 caches, clears + # and initializes SPR's, and disables exceptions (interrupts). + # + # Have fun!!! Please e-mail any suggestions or bugs to costis@gbaemu.com. + + # Entry Point + + .extern __PSInit + .extern __SyscallInit + .extern __CacheInit + .extern __SystemInit + .extern __sbss_start, __bss_end + .extern __bat_config + .extern _main + .globl _start, __main +_start: + b startup + .ascii "STUB" + .ascii "HAXX" + .long 0 +startup: + # Disable interrupts first thing + mfmsr r3 + rlwinm r4,r3,0,17,15 + rlwinm r4,r4,0,26,24 + mtmsr r4 + + # Go into real mode + isync + lis r3,real@h + ori r3,r3,real@l + clrlwi r3,r3,2 + mtsrr0 r3 + + mfmsr r3 + li r4,0x30 + andc r3,r3,r4 + mtsrr1 r3 + rfi + +real: + # Set up the BATs the way we like them + // HID0 = 00110c64: + // bus checkstops off, sleep modes off, + // caches off, caches invalidate, + // store gathering off, enable data cache + // flush assist, enable branch target cache, + // enable branch history table + lis 3,0x0011 ; ori 3,3,0x0c64 ; mtspr 1008,3 ; isync + + // MSR = 00002000 (FP on) + li 4,0x2000 ; mtmsr 4 + + // HID0 |= 0000c000 (caches on) + ori 3,3,0xc000 ; mtspr 1008,3 ; isync + + // clear all BATs + li 0,0 + mtspr 528,0 ; mtspr 530,0 ; mtspr 532,0 ; mtspr 534,0 // IBATU 0..3 + mtspr 536,0 ; mtspr 538,0 ; mtspr 540,0 ; mtspr 542,0 // DBATU 0..3 + mtspr 560,0 ; mtspr 562,0 ; mtspr 564,0 ; mtspr 566,0 // IBATU 4..7 + mtspr 568,0 ; mtspr 570,0 ; mtspr 572,0 ; mtspr 574,0 // DBATU 4..7 + isync + + // clear all SRs + lis 0,0x8000 + mtsr 0,0 ; mtsr 1,0 ; mtsr 2,0 ; mtsr 3,0 + mtsr 4,0 ; mtsr 5,0 ; mtsr 6,0 ; mtsr 7,0 + mtsr 8,0 ; mtsr 9,0 ; mtsr 10,0 ; mtsr 11,0 + mtsr 12,0 ; mtsr 13,0 ; mtsr 14,0 ; mtsr 15,0 + isync + + // set [DI]BAT0 for 256MB@80000000, + // real 00000000, WIMG=0000, R/W + li 3,2 ; lis 4,0x8000 ; ori 4,4,0x1fff + mtspr IBAT0L,3 ; mtspr IBAT0U,4 ; mtspr DBAT0L,3 ; mtspr DBAT0U,4 ; isync + + // set [DI]BAT4 for 256MB@90000000, + // real 10000000, WIMG=0000, R/W + addis 3,3,0x1000 ; addis 4,4,0x1000 + mtspr IBAT4L,3 ; mtspr IBAT4U,4 ; mtspr DBAT4L,3 ; mtspr DBAT4U,4 ; isync + + // set DBAT1 for 256MB@c0000000, + // real 00000000, WIMG=0101, R/W + li 3,0x2a ; lis 4,0xc000 ; ori 4,4,0x1fff + mtspr DBAT1L,3 ; mtspr DBAT1U,4 ; isync + + // set DBAT5 for 256MB@d0000000, + // real 10000000, WIMG=0101, R/W + addis 3,3,0x1000 ; addis 4,4,0x1000 + mtspr DBAT5L,3 ; mtspr DBAT5U,4 ; isync + + // enable [DI]BAT4-7 in HID4 + lis 3, 0x8200 + mtspr 1011,3 + + // set MSR[DR:IR] = 11, jump to _start + lis 3,virtual@h ; ori 3,3, virtual@l ; mtsrr0 3 + + mfmsr 3 ; ori 3,3,0x30 ; mtsrr1 3 + rfi + +virtual: + + bl InitGPRS # Initialize the General Purpose Registers + bl __CacheInit # Initialize the system caches + bl __SyscallInit # Initialize the System Call handler + bl __SystemInit # Initialize more cache aspects, clear a few SPR's, and disable interrupts. + + # Clear the BSS section! + lis r3,__sbss_start@h + ori r3,r3,__sbss_start@l + li r4,0 + lis r5,__bss_end@h + ori r5,r5,__bss_end@l + sub r5,r5,r3 + bl _memset + + bl _main # Branch to the user code! + +eloop: + b eloop # If the main function returns, which should never happen then just loop endlessly. + +InitGPRS: + # Clear all of the GPR's to 0 + li r0,0 + li r3,0 + li r4,0 + li r5,0 + li r6,0 + li r7,0 + li r8,0 + li r9,0 + li r10,0 + li r11,0 + li r12,0 + li r14,0 + li r15,0 + li r16,0 + li r17,0 + li r18,0 + li r19,0 + li r20,0 + li r21,0 + li r22,0 + li r23,0 + li r24,0 + li r25,0 + li r26,0 + li r27,0 + li r28,0 + li r29,0 + li r30,0 + li r31,0 + + lis sp,__crt0stack@h # we take 0x8173FFF0 as the topmost starting point for our stack,this gives us ~128Kb Stack + ori sp,sp,__crt0stack@l + addi sp,sp,-4 + stw r0,0(sp) + stwu sp,-56(sp) + + lis r2,_SDA2_BASE_@h + ori r2,r2,_SDA2_BASE_@l # Set the Small Data 2 (Read Only) base register. + lis r13,_SDA_BASE_@h + ori r13,r13,_SDA_BASE_@l # Set the Small Data (Read\Write) base register. + blr + + //r3 = ptr, r4 = fill, r5 = size + .globl _memset +_memset: + clrlwi. r6,r5,29 + srwi r5,r5,2 + subi r3,r3,4 + mtctr r5 +1: stwu r4,4(r3) + bdnz 1b + cmplwi r6,0 + beq 3f +2: stbu r4,1(r3) + addic. r6,r6,-1 + bne+ 2b +3: blr + + .section .bss + .balign 8 +__crt0stack_end: + .space 0x8000 +__crt0stack: + diff --git a/channel/channelapp/stub/ios.c b/channel/channelapp/stub/ios.c new file mode 100644 index 0000000..7cfe290 --- /dev/null +++ b/channel/channelapp/stub/ios.c @@ -0,0 +1,290 @@ +/* + * Copyright (C) 2008 segher, #wiidev efnet + * Copyright (C) 2008 bushing, #wiidev efnet + * Copyright (C) 2008 dhewg, #wiidev efnet + * Copyright (C) 2008 marcan, #wiidev efnet + * + * this file is part of the Homebrew Channel + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include "stub_debug.h" +#include "ios.h" +#include "processor.h" +#include "cache.h" +#include "system.h" + +#define virt_to_phys(x) ((u32*)(((u32)(x))&0x7FFFFFFF)) +#define phys_to_virt(x) ((u32*)(((u32)(x))|0x80000000)) + +// Timebase frequency is core frequency / 8. Ignore roundoff, this +// doesn't have to be very accurate. +#define TICKS_PER_USEC (729/8) + +static u32 mftb(void) +{ + u32 x; + + asm volatile("mftb %0" : "=r"(x)); + + return x; +} + +static void __delay(u32 ticks) +{ + u32 start = mftb(); + + while (mftb() - start < ticks) + ; +} + +void udelay(u32 us) +{ + __delay(TICKS_PER_USEC * us); +} + + +// Low-level IPC access. + +static inline u32 read32(u32 addr) +{ + u32 x; + + asm volatile("lwz %0,0(%1) ; sync" : "=r"(x) : "b"(0xc0000000 | addr)); + + return x; +} + +static inline void write32(u32 addr, u32 x) +{ + asm volatile("stw %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); +} + + +static u32 ipc_read(u32 reg) { + return read32(0x0d000000 + 4*reg); +} + +static void ipc_write(u32 reg, u32 value) { + write32(0x0d000000 + 4*reg, value); +} + +static void ipc_bell(u32 w) +{ + ipc_write(1, (ipc_read(1) & 0x30) | w); +} + +static void ipc_wait_ack(void) +{ + while ((ipc_read(1) & 0x22) != 0x22) + ; + udelay(100); +} + +static void ipc_wait_reply(void) +{ + while ((ipc_read(1) & 0x14) != 0x14) + ; + udelay(100); +} + +static void ipc_irq_ack(void) +{ + ipc_write(12, 0x40000000); +} + + +// Mid-level IPC access. + +struct ipc { + u32 cmd; + int result; + int fd; + u32 arg[5]; + + u32 user[8]; +}; + +static struct ipc ipc __attribute__((aligned(64))); + +static void ipc_send_request(void) +{ + DCFlushRange(&ipc, 0x40); + + ipc_write(0, (u32)virt_to_phys(&ipc)); + ipc_bell(1); + + ipc_wait_ack(); + + ipc_bell(2); + ipc_irq_ack(); +} + +void ipc_send_twoack(void) +{ + DCFlushRange(&ipc, 0x40); + + ipc_write(0, (u32)virt_to_phys(&ipc)); + ipc_bell(1); + + ipc_wait_ack(); + ipc_irq_ack(); + ipc_bell(2); + + ipc_wait_ack(); + ipc_irq_ack(); + ipc_bell(2); + ipc_bell(8); +} + +static void ipc_recv_reply(void) +{ + for (;;) { + u32 reply; + + ipc_wait_reply(); + + reply = ipc_read(2); + ipc_bell(4); + + ipc_irq_ack(); + ipc_bell(8); + + if (((u32*)reply) == virt_to_phys(&ipc)) + break; + + debug_string("Ignoring unexpected IPC reply @"); + debug_uint((u32)reply); + debug_string("\n\r"); + } + + DCInvalidateRange(&ipc, sizeof ipc); +} + + +// High-level IPC access. + +int ios_open(const char *filename, u32 mode) +{ + DCFlushRange((void*)filename, strlen(filename) + 1); + memset(&ipc, 0, sizeof ipc); + + ipc.cmd = 1; + ipc.fd = 0; + ipc.arg[0] = (u32)virt_to_phys(filename); + ipc.arg[1] = mode; + + ipc_send_request(); + ipc_recv_reply(); + + return ipc.result; +} + +int ios_close(int fd) +{ + memset(&ipc, 0, sizeof ipc); + + ipc.cmd = 2; + ipc.fd = fd; + + ipc_send_request(); + ipc_recv_reply(); + + return ipc.result; +} + +int _ios_ioctlv(int fd, u32 n, u32 in_count, u32 out_count, struct ioctlv *vec, int reboot) +{ + u32 i; + + memset(&ipc, 0, sizeof ipc); + + for (i = 0; i < in_count + out_count; i++) + if (vec[i].data) { + DCFlushRange(vec[i].data, vec[i].len); + vec[i].data = (void *)virt_to_phys(vec[i].data); + } + + DCFlushRange(vec, (in_count + out_count) * sizeof *vec); + + ipc.cmd = 7; + ipc.fd = fd; + ipc.arg[0] = n; + ipc.arg[1] = in_count; + ipc.arg[2] = out_count; + ipc.arg[3] = (u32)virt_to_phys(vec); + + if(reboot) { + ipc_send_twoack(); + return 0; + } else { + ipc_send_request(); + ipc_recv_reply(); + + for (i = in_count; i < in_count + out_count; i++) + if (vec[i].data) { + vec[i].data = phys_to_virt((u32)vec[i].data); + DCInvalidateRange(vec[i].data, vec[i].len); + } + return ipc.result; + } +} + +int ios_ioctlv(int fd, u32 n, u32 in_count, u32 out_count, struct ioctlv *vec) { + return _ios_ioctlv(fd, n, in_count, out_count, vec, 0); +} + +int ios_ioctlvreboot(int fd, u32 n, u32 in_count, u32 out_count, struct ioctlv *vec) { + return _ios_ioctlv(fd, n, in_count, out_count, vec, 1); +} + +// Cleanup any old state. + +static void ipc_cleanup_reply(void) { + if ((ipc_read(1) & 0x14) != 0x14) + return; + + ipc_read(2); + ipc_bell(4); + + ipc_irq_ack(); + ipc_bell(8); +} + +static void ipc_cleanup_request(void) { + if ((ipc_read(1) & 0x22) == 0x22) + ipc_bell(2); +} + +void reset_ios(void) { + int i; + + debug_string("Flushing IPC transactions"); + for (i = 0; i < 10; i++) { + ipc_cleanup_request(); + ipc_cleanup_reply(); + ipc_irq_ack(); + udelay(1000); + debug_string("."); + } + debug_string(" Done.\n\r"); + + debug_string("Closing file descriptors"); + for (i = 0; i < 32; i++) { + ios_close(i); + debug_string("."); + } + debug_string(" Done.\n\r"); +} diff --git a/channel/channelapp/stub/ios.h b/channel/channelapp/stub/ios.h new file mode 100644 index 0000000..e53fcb4 --- /dev/null +++ b/channel/channelapp/stub/ios.h @@ -0,0 +1,11 @@ + +struct ioctlv { + void *data; + u32 len; +}; + +int ios_open(const char *filename, u32 mode); +int ios_close(int fd); +int ios_ioctlv(int fd, u32 n, u32 in_count, u32 out_count, struct ioctlv *vec); +int ios_ioctlvreboot(int fd, u32 n, u32 in_count, u32 out_count, struct ioctlv *vec); +void reset_ios(void); diff --git a/channel/channelapp/stub/processor.h b/channel/channelapp/stub/processor.h new file mode 100644 index 0000000..7b2f567 --- /dev/null +++ b/channel/channelapp/stub/processor.h @@ -0,0 +1,115 @@ +// this file was taken from libogc, see http://www.devkitpro.org/ + +#ifndef __PROCESSOR_H__ +#define __PROCESSOR_H__ + +#include + +#define __stringify(rn) #rn +#define ATTRIBUTE_ALIGN(v) __attribute__((aligned(v))) + +#define _sync() asm volatile("sync") +#define _nop() asm volatile("nop") +#define ppcsync() asm volatile("sc") +#define ppchalt() ({ \ + asm volatile("sync"); \ + while(1) { \ + asm volatile("nop"); \ + asm volatile("li 3,0"); \ + asm volatile("nop"); \ + } \ +}) + +#define mfdcr(_rn) ({register u32 _rval; \ + asm volatile("mfdcr %0," __stringify(_rn) \ + : "=r" (_rval)); _rval;}) +#define mtdcr(rn, val) asm volatile("mtdcr " __stringify(rn) ",%0" : : "r" (val)) + +#define mfmsr() ({register u32 _rval; \ + asm volatile("mfmsr %0" : "=r" (_rval)); _rval;}) +#define mtmsr(val) asm volatile("mtmsr %0" : : "r" (val)) + +#define mfdec() ({register u32 _rval; \ + asm volatile("mfdec %0" : "=r" (_rval)); _rval;}) +#define mtdec(_val) asm volatile("mtdec %0" : : "r" (_val)) + +#define mfspr(_rn) \ +({ register u32 _rval = 0; \ + asm volatile("mfspr %0," __stringify(_rn) \ + : "=r" (_rval));\ + _rval; \ +}) + +#define mtspr(_rn, _val) asm volatile("mtspr " __stringify(_rn) ",%0" : : "r" (_val)) + +#define mfwpar() mfspr(WPAR) +#define mtwpar(_val) mtspr(WPAR,_val) + +#define mfmmcr0() mfspr(MMCR0) +#define mtmmcr0(_val) mtspr(MMCR0,_val) +#define mfmmcr1() mfspr(MMCR1) +#define mtmmcr1(_val) mtspr(MMCR1,_val) + +#define mfpmc1() mfspr(PMC1) +#define mtpmc1(_val) mtspr(PMC1,_val) +#define mfpmc2() mfspr(PMC2) +#define mtpmc2(_val) mtspr(PMC2,_val) +#define mfpmc3() mfspr(PMC3) +#define mtpmc3(_val) mtspr(PMC3,_val) +#define mfpmc4() mfspr(PMC4) +#define mtpmc4(_val) mtspr(PMC4,_val) + +#define mfhid0() mfspr(HID0) +#define mthid0(_val) mtspr(HID0,_val) +#define mfhid1() mfspr(HID1) +#define mthid1(_val) mtspr(HID1,_val) +#define mfhid2() mfspr(HID2) +#define mthid2(_val) mtspr(HID2,_val) +#define mfhid4() mfspr(HID4) +#define mthid4(_val) mtspr(HID4,_val) + +#define cntlzw(_val) ({register u32 _rval; \ + asm volatile("cntlzw %0, %1" : "=r"((_rval)) : "r"((_val))); _rval;}) + +#define _CPU_MSR_GET( _msr_value ) \ + do { \ + _msr_value = 0; \ + asm volatile ("mfmsr %0" : "=&r" ((_msr_value)) : "0" ((_msr_value))); \ + } while (0) + +#define _CPU_MSR_SET( _msr_value ) \ +{ asm volatile ("mtmsr %0" : "=&r" ((_msr_value)) : "0" ((_msr_value))); } + +#define _CPU_ISR_Enable() \ + { register u32 _val = 0; \ + asm volatile ("mfmsr %0; ori %0,%0,0x8000; mtmsr %0" : \ + "=&r" (_val) : "0" (_val));\ + } + +#define _CPU_ISR_Disable( _isr_cookie ) \ + { register u32 _disable_mask = MSR_EE; \ + _isr_cookie = 0; \ + asm volatile ( \ + "mfmsr %0; andc %1,%0,%1; mtmsr %1" : \ + "=&r" ((_isr_cookie)), "=&r" ((_disable_mask)) : \ + "0" ((_isr_cookie)), "1" ((_disable_mask)) \ + ); \ + } + +#define _CPU_ISR_Restore( _isr_cookie ) \ + { \ + asm volatile ( "mtmsr %0" : \ + "=r" ((_isr_cookie)) : \ + "0" ((_isr_cookie))); \ + } + +#define _CPU_ISR_Flash( _isr_cookie ) \ + { register u32 _disable_mask = MSR_EE; \ + asm volatile ( \ + "mtmsr %0; andc %1,%0,%1; mtmsr %1" : \ + "=r" ((_isr_cookie)), "=r" ((_disable_mask)) : \ + "0" ((_isr_cookie)), "1" ((_disable_mask)) \ + ); \ + } + +#endif diff --git a/channel/channelapp/stub/stub.c b/channel/channelapp/stub/stub.c new file mode 100644 index 0000000..db9978d --- /dev/null +++ b/channel/channelapp/stub/stub.c @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2008 dhewg, #wiidev efnet + * Copyright (C) 2008 marcan, #wiidev efnet + * + * this file is part of the Homebrew Channel + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "system.h" +#include "stub_debug.h" +#include "usb.h" +#include "ios.h" +#include "cache.h" +#include "../config.h" + +#define IOCTL_ES_LAUNCH 0x08 +#define IOCTL_ES_GETVIEWCNT 0x12 +#define IOCTL_ES_GETVIEWS 0x13 + +struct ioctlv vecs[3] __attribute__((aligned(32))); + +u64 *conf_magic = STUB_ADDR_MAGIC; +u64 *conf_titleID = STUB_ADDR_TITLE; + +int es_fd; + +int LaunchTitle(u64 titleID) { + static u64 xtitleID __attribute__((aligned(32))); + static u32 cntviews __attribute__((aligned(32))); + static u8 tikviews[0xd8*4] __attribute__((aligned(32))); + int ret; + + debug_string("LaunchTitle: "); + debug_uint(titleID>>32); + debug_string("-"); + debug_uint(titleID&0xFFFFFFFF); + + xtitleID = titleID; + + debug_string("\n\rGetTicketViewCount: "); + + vecs[0].data = &xtitleID; + vecs[0].len = 8; + vecs[1].data = &cntviews; + vecs[1].len = 4; + ret = ios_ioctlv(es_fd, IOCTL_ES_GETVIEWCNT, 1, 1, vecs); + debug_uint(ret); + debug_string(", views: "); + debug_uint(cntviews); + debug_string("\n\r"); + if(ret<0) return ret; + if(cntviews>4) return -1; + + debug_string("GetTicketViews: "); + vecs[0].data = &xtitleID; + vecs[0].len = 8; + vecs[1].data = &cntviews; + vecs[1].len = 4; + vecs[2].data = tikviews; + vecs[2].len = 0xd8*cntviews; + ret = ios_ioctlv(es_fd, IOCTL_ES_GETVIEWS, 2, 1, vecs); + debug_uint(ret); + debug_string("\n\r"); + if(ret<0) return ret; + debug_string("Attempting to launch...\n\r"); + vecs[0].data = &xtitleID; + vecs[0].len = 8; + vecs[1].data = tikviews; + vecs[1].len = 0xd8; + ret = ios_ioctlvreboot(es_fd, IOCTL_ES_LAUNCH, 2, 0, vecs); + if(ret < 0) { + debug_string("Launch failed: "); + debug_uint(ret); + debug_string("\r\n"); + } + return ret; +} + +s32 IOS_GetVersion() +{ + u32 vercode; + u16 version; + DCInvalidateRange((void*)0x80003140,8); + vercode = *((u32*)0x80003140); + version = vercode >> 16; + if(version == 0) return -1; + if(version > 0xff) return -1; + return version; +} + +void printversion(void) { + debug_string("IOS version: "); + debug_uint(IOS_GetVersion()); + debug_string("\n\r"); +} + +int es_init(void) { + debug_string("Opening /dev/es: "); + es_fd = ios_open("/dev/es", 0); + debug_uint(es_fd); + debug_string("\n\r"); + return es_fd; +} + + +void _main (void) { + int iosver; + u64 titleID = MY_TITLEID; + + debug_string("\n\rHomebrew Channel stub code\n\r"); + + if(*conf_magic == STUB_MAGIC) titleID = *conf_titleID; + + reset_ios(); + + if(es_init() < 0) goto fail; + + iosver = STUB_LOAD_IOS_VERSION; + if(iosver < 0) + iosver = 21; //bah + printversion(); + debug_string("\n\rReloading IOS...\n\r"); + LaunchTitle(0x0000000100000000LL | iosver); + printversion(); + + if(es_init() < 0) goto fail; + debug_string("\n\rLoading requested channel...\n\r"); + LaunchTitle(titleID); + // if fail, try system menu + debug_string("\n\rChannel load failed, trying with system menu...\n\r"); + LaunchTitle(0x0000000100000002LL); + printversion(); + +fail: + debug_string("FAILURE\n\r"); + while(1); +} + diff --git a/channel/channelapp/stub/stub_debug.c b/channel/channelapp/stub/stub_debug.c new file mode 100644 index 0000000..95b41c5 --- /dev/null +++ b/channel/channelapp/stub/stub_debug.c @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2008 dhewg, #wiidev efnet + * + * this file is part of the Homebrew Channel + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "stub_debug.h" +#include "usb.h" + +#ifdef DEBUG_STUB + +static char int2hex[] = "0123456789abcdef"; + +void debug_uint (u32 i) { + int j; + + usb_sendbuffersafe ("0x", 2); + for (j = 0; j < 8; ++j) { + usb_sendbuffersafe (&int2hex[(i >> 28) & 0xf], 1); + i <<= 4; + } +} + +void debug_string (const char *s) { + u32 i = 0; + + while (s[i]) + i++; + + usb_sendbuffersafe (s, i); +} + +#endif + diff --git a/channel/channelapp/stub/stub_debug.h b/channel/channelapp/stub/stub_debug.h new file mode 100644 index 0000000..7fd7e4e --- /dev/null +++ b/channel/channelapp/stub/stub_debug.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2008 dhewg, #wiidev efnet + * + * this file is part of the Homebrew Channel + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _STUB_DEBUG_H_ +#define _STUB_DEBUG_H_ + +#include + +#include "../config.h" + +#ifdef DEBUG_STUB + +void debug_uint (u32 i); +void debug_string (const char *s); + +#else + +#define debug_uint(x) +#define debug_string(x) + +#endif + +#endif + diff --git a/channel/channelapp/stub/system.c b/channel/channelapp/stub/system.c new file mode 100644 index 0000000..b843373 --- /dev/null +++ b/channel/channelapp/stub/system.c @@ -0,0 +1,28 @@ +#include "asm.h" +#include "cache.h" +#include "system.h" +#include "processor.h" + +extern char systemcallhandler_start[], systemcallhandler_end[]; + +void __SyscallInit(void) +{ + memcpy((void*)0x80000c00, systemcallhandler_start, + systemcallhandler_end - systemcallhandler_start); + DCFlushRangeNoSync((void*)0x80000c00, 0x100); + ICInvalidateRange((void*)0x80000c00, 0x100); + _sync(); +} + +void *memcpy(void *ptr, const void *src, int size) { + char* ptr2 = ptr; + const char* src2 = src; + while(size--) *ptr2++ = *src2++; + return ptr; +} + +int strlen(const char *ptr) { + int i=0; + while(*ptr++) i++; + return i; +} diff --git a/channel/channelapp/stub/system.h b/channel/channelapp/stub/system.h new file mode 100644 index 0000000..d5bab8e --- /dev/null +++ b/channel/channelapp/stub/system.h @@ -0,0 +1,24 @@ +// this code was taken from libogc, see http://www.devkitpro.org/ + +#ifndef __SYSTEM_H__ +#define __SYSTEM_H__ + +#include + +void ICInvalidateRange(void *startaddress,u32 len); +void DCInvalidateRange(void *startaddress,u32 len); +void DCFlushRange(void *startaddress,u32 len); +void DCFlushRangeNoSync(void *startaddress,u32 len); + +void dol_relocstart(void *dolstart); + +void* memmove(void *dst0,const void *src0,register int length); +extern void _memset(void *,int,int); +//void *memset(void *ptr, int c, int size); +#define memset _memset +void *memcpy(void *ptr, const void *src, int size); +int strlen(const char *ptr); + +extern void __exception_closeall(); + +#endif diff --git a/channel/channelapp/stub/system_asm.S b/channel/channelapp/stub/system_asm.S new file mode 100644 index 0000000..a8ffa4e --- /dev/null +++ b/channel/channelapp/stub/system_asm.S @@ -0,0 +1,100 @@ +// this code was taken from libogc, see http://www.devkitpro.org/ + +#include "asm.h" + + .extern ICFlashInvalidate + .extern ICEnable + .extern DCEnable + .extern L2Init + .extern L2Enable + .globl __CacheInit +__CacheInit: + mflr r0 + stw r0, 4(sp) + stwu sp, -16(sp) + stw r31, 12(sp) + + mfspr r3,HID0 # (HID0) + rlwinm r0,r3, 0, 16, 16 + cmplwi r0, 0x0000 # Check if the Instruction Cache has been enabled or not. + bne ICEnabled + + bl ICEnable +ICEnabled: + mfspr r3, HID0 # bl PPCMfhid0 + rlwinm r0, r3, 0, 17, 17 + cmplwi r0, 0x0000 # Check if the Data Cache has been enabled or not. + bne DCEnabled + + bl DCEnable +DCEnabled: + + mfspr r3, L2CR # (L2CR) + clrrwi r0, r3, 31 # Clear all of the bits except 31 + cmplwi r0, 0x0000 + bne L2Enabled + + bl L2Init + bl L2Enable + +L2Enabled: + # Restore the non-volatile registers to their previous values and return. + lwz r0, 20(sp) + lwz r31, 12(sp) + addi sp, sp, 16 + mtlr r0 + blr + + .globl __SystemInit +__SystemInit: + mflr r0 + stw r0, 4(sp) + stwu sp, -24(sp) + stw r31, 20(sp) + stw r30, 16(sp) + stw r29, 12(sp) + + # Clear various SPR's + li r3,0 + mtspr 952, r3 + mtspr 956, r3 + mtspr 953, r3 + mtspr 954, r3 + mtspr 957, r3 + mtspr 958, r3 + +#if 0 + lis r3,0x8390 //bits set: H4A(HID4 access), SBE(2nd BAT enabled), SR0(store 0), LPE(PS LE exception), L2CFI(L2 castout prior to L2 inv. flash) + mtspr HID4,r3 +#endif + + # Disable Speculative Bus Accesses to non-guarded space from both caches. + mfspr r3, HID0 + ori r3, r3, 0x0200 + mtspr HID0, r3 + + mfspr r3,HID2 # (HID2) + rlwinm r3, r3, 0, 2, 0 + mtspr HID2,r3 # (HID2) + + # Restore the non-volatile registers to their previous values and return. + lwz r0, 28(sp) + lwz r31,20(sp) + lwz r30,16(sp) + lwz r29,12(sp) + addi sp, sp, 24 + mtlr r0 + blr + + + .global systemcallhandler_start,systemcallhandler_end +systemcallhandler_start: + mfspr r3,HID0 + ori r4,r3,0x0008 + mtspr HID0,r4 + isync + sync + mtspr HID0,r3 + rfi +systemcallhandler_end: + nop diff --git a/channel/channelapp/stub/usb.c b/channel/channelapp/stub/usb.c new file mode 100644 index 0000000..b0e588f --- /dev/null +++ b/channel/channelapp/stub/usb.c @@ -0,0 +1,221 @@ +/*--------------------------------------------------------------------------------------------- + * USB Gecko Development Kit - http://www.usbgecko.com + * -------------------------------------------------------------------------------------------- + * + * + * usb.c - V1.2 functions for the USB Gecko adapter (www.usbgecko.com). + * Now works for Wii Mode - use WIIMODE define in usb.h to set + * Copyright (c) 2008 - Nuke - + * + *---------------------------------------------------------------------------------------------*/ + + +#include // If not using libogc need types +#include "usb.h" + +#ifdef DEBUG_STUB + +/*---------------------------------------------------------------------------------------------* + Name: usb_sendbyte + Description: Send byte to Gamecube/Wii over EXI memory card port +*----------------------------------------------------------------------------------------------*/ + +static int __usb_sendbyte (char sendbyte) +{ + s32 i; + + exi_chan1sr = 0x000000D0; + exi_chan1data = 0xB0000000 | (sendbyte<<20); + exi_chan1cr = 0x19; + while((exi_chan1cr)&1); + i = exi_chan1data; + exi_chan1sr = 0; + if (i&0x04000000){ + return 1; + } + return 0; +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_receivebyte + Description: Receive byte from Gamecube/Wii over EXI memory card port +*----------------------------------------------------------------------------------------------*/ + +static int __usb_receivebyte (char *receivebyte) +{ + s32 i = 0; + + exi_chan1sr = 0x000000D0; + exi_chan1data = 0xA0000000; + exi_chan1cr = 0x19; + while((exi_chan1cr)&1); + i = exi_chan1data; + exi_chan1sr = 0; + if (i&0x08000000){ + *receivebyte=(i>>16)&0xff; + return 1; + } + return 0; +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_checksendstatus + Description: Chesk the FIFO is ready to send +*----------------------------------------------------------------------------------------------*/ + +static int __usb_checksendstatus() +{ + s32 i = 0; + + exi_chan1sr = 0x000000D0; + exi_chan1data = 0xC0000000; + exi_chan1cr = 0x19; + while((exi_chan1cr)&1); + i = exi_chan1data; + exi_chan1sr = 0x0; + if (i&0x04000000){ + return 1; + } + return 0; +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_checkreceivestatus + Description: Check the FIFO is ready to receive +*----------------------------------------------------------------------------------------------*/ + +static int __usb_checkreceivestatus() +{ + s32 i = 0; + exi_chan1sr = 0x000000D0; + exi_chan1data = 0xD0000000; + exi_chan1cr = 0x19; + while((exi_chan1cr)&1); + i = exi_chan1data; + exi_chan1sr = 0x0; + if (i&0x04000000){ + return 1; + } + return 0; +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_sendbuffer + Description: Simple buffer send routine +*----------------------------------------------------------------------------------------------*/ + +void usb_sendbuffer (const void *buffer, int size) +{ + char *sendbyte = (char*) buffer; + s32 bytesleft = size; + s32 returnvalue; + + while (bytesleft > 0) + { + returnvalue = __usb_sendbyte(*sendbyte); + if(returnvalue) { + sendbyte++; + bytesleft--; + } + } +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_receivebuffer + Description: Simple buffer receive routine +*----------------------------------------------------------------------------------------------*/ + +void usb_receivebuffer (void *buffer, int size) +{ + char *receivebyte = (char*)buffer; + s32 bytesleft = size; + s32 returnvalue; + + while (bytesleft > 0) + { + returnvalue = __usb_receivebyte(receivebyte); + if(returnvalue) { + receivebyte++; + bytesleft--; + } + } +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_sendbuffersafe + Description: Simple buffer send routine with fifo check (use for large transfers) +*----------------------------------------------------------------------------------------------*/ + +void usb_sendbuffersafe (const void *buffer, int size) +{ + char *sendbyte = (char*) buffer; + s32 bytesleft = size; + s32 returnvalue; + + while (bytesleft > 0) + { + if(__usb_checksendstatus()){ + returnvalue = __usb_sendbyte(*sendbyte); + if(returnvalue) { + sendbyte++; + bytesleft--; + } + } + } +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_receivebuffersafe + Description: Simple buffer receive routine with fifo check (use for large transfers) +*----------------------------------------------------------------------------------------------*/ + +void usb_receivebuffersafe (void *buffer, int size) +{ + char *receivebyte = (char*)buffer; + s32 bytesleft = size; + s32 returnvalue; + + while (bytesleft > 0) + { + if(__usb_checkreceivestatus()){ + returnvalue = __usb_receivebyte(receivebyte); + if(returnvalue) { + receivebyte++; + bytesleft--; + } + } + } +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_checkgecko + Description: Chesk the Gecko is connected +*----------------------------------------------------------------------------------------------*/ +int usb_checkgecko() +{ + s32 i = 0; + + exi_chan1sr = 0x000000D0; + exi_chan1data = 0x90000000; + exi_chan1cr = 0x19; + while((exi_chan1cr)&1); + i = exi_chan1data; + exi_chan1sr = 0x0; + if (i==0x04700000){ + return 1; + } + return 0; +} + +/*---------------------------------------------------------------------------------------------* + Name: usb_flush + Description: Flushes the FIFO, Use at the start of your program to avoid trash +*----------------------------------------------------------------------------------------------*/ + +void usb_flush() +{ + char tempbyte; + + while (__usb_receivebyte(&tempbyte)); +} +#endif diff --git a/channel/channelapp/stub/usb.h b/channel/channelapp/stub/usb.h new file mode 100644 index 0000000..7ab8af6 --- /dev/null +++ b/channel/channelapp/stub/usb.h @@ -0,0 +1,65 @@ +/*--------------------------------------------------------------------------------------------- + * USB Gecko Development Kit - http://www.usbgecko.com + * -------------------------------------------------------------------------------------------- + * + * + * usb.h - functions for the USB Gecko adapter (www.usbgecko.com). + * + * Copyright (c) 2008 - Nuke - + * + *---------------------------------------------------------------------------------------------*/ + +#ifndef __USB_H__ +#define __USB_H__ + +#include "../config.h" + +#ifdef DEBUG_STUB + +#define WIIMODE +// Wii Mode +#ifdef WIIMODE + #define exi_chan0sr *(volatile unsigned int*) 0xCD006800 // Channel 0 Status Register + #define exi_chan1sr *(volatile unsigned int*) 0xCD006814 // Channel 1 Status Register + #define exi_chan2sr *(volatile unsigned int*) 0xCD006828 // Channel 2 Status Register + #define exi_chan0cr *(volatile unsigned int*) 0xCD00680c // Channel 0 Control Register + #define exi_chan1cr *(volatile unsigned int*) 0xCD006820 // Channel 1 Control Register + #define exi_chan2cr *(volatile unsigned int*) 0xCD006834 // Channel 2 Control Register + #define exi_chan0data *(volatile unsigned int*) 0xCD006810 // Channel 0 Immediate Data + #define exi_chan1data *(volatile unsigned int*) 0xCD006824 // Channel 1 Immediate Data + #define exi_chan2data *(volatile unsigned int*) 0xCD006838 // Channel 2 Immediate Data + #define exi_chan0dmasta *(volatile unsigned int*) 0xCD006804 // Channel 0 DMA Start address + #define exi_chan1dmasta *(volatile unsigned int*) 0xCD006818 // Channel 1 DMA Start address + #define exi_chan2dmasta *(volatile unsigned int*) 0xCD00682c // Channel 2 DMA Start address + #define exi_chan0dmalen *(volatile unsigned int*) 0xCD006808 // Channel 0 DMA Length + #define exi_chan1dmalen *(volatile unsigned int*) 0xCD00681c // Channel 1 DMA Length + #define exi_chan2dmalen *(volatile unsigned int*) 0xCD006830 // Channel 2 DMA Length +#else +// GC Mode + #define exi_chan0sr *(volatile unsigned int*) 0xCC006800 // Channel 0 Status Register + #define exi_chan1sr *(volatile unsigned int*) 0xCC006814 // Channel 1 Status Register + #define exi_chan2sr *(volatile unsigned int*) 0xCC006828 // Channel 2 Status Register + #define exi_chan0cr *(volatile unsigned int*) 0xCC00680c // Channel 0 Control Register + #define exi_chan1cr *(volatile unsigned int*) 0xCC006820 // Channel 1 Control Register + #define exi_chan2cr *(volatile unsigned int*) 0xCC006834 // Channel 2 Control Register + #define exi_chan0data *(volatile unsigned int*) 0xCC006810 // Channel 0 Immediate Data + #define exi_chan1data *(volatile unsigned int*) 0xCC006824 // Channel 1 Immediate Data + #define exi_chan2data *(volatile unsigned int*) 0xCC006838 // Channel 2 Immediate Data + #define exi_chan0dmasta *(volatile unsigned int*) 0xCC006804 // Channel 0 DMA Start address + #define exi_chan1dmasta *(volatile unsigned int*) 0xCC006818 // Channel 1 DMA Start address + #define exi_chan2dmasta *(volatile unsigned int*) 0xCC00682c // Channel 2 DMA Start address + #define exi_chan0dmalen *(volatile unsigned int*) 0xCC006808 // Channel 0 DMA Length + #define exi_chan1dmalen *(volatile unsigned int*) 0xCC00681c // Channel 1 DMA Length + #define exi_chan2dmalen *(volatile unsigned int*) 0xCC006830 // Channel 2 DMA Length +#endif + +// Function prototypes +void usb_flush(); +int usb_checkgecko(); +void usb_sendbuffer (const void *buffer, int size); +void usb_receivebuffer (void *buffer, int size); +void usb_sendbuffersafe (const void *buffer, int size); +void usb_receivebuffersafe (void *buffer, int size); +#endif + +#endif // __USB_H__ diff --git a/channel/title/.gitignore b/channel/title/.gitignore new file mode 100644 index 0000000..5ee97c4 --- /dev/null +++ b/channel/title/.gitignore @@ -0,0 +1,7 @@ +00000000 +00000001 +retail/cetk +retail/tmd +dpki/cetk +dpki/tmd +*.wad diff --git a/channel/title/Makefile b/channel/title/Makefile new file mode 100644 index 0000000..5211b5b --- /dev/null +++ b/channel/title/Makefile @@ -0,0 +1,52 @@ +INSTALLER_VER_MAJOR = 1 +INSTALLER_VER_MINOR = 2 + +TOOLS = $(CURDIR)/../../pywii/pywii-tools +CERTS = $(CURDIR)/dpki/certs +DPKI_ISSUER_TIK = Root-CA00000002-XS00000006 +DPKI_ISSUER_TMD = Root-CA00000002-CP00000007 + +INSTALLERFILES = certs.dpki certs.retail cetk.dpki cetk.retail tmd.dpki tmd.retail 00000000 00000001 + +all: channel_retail.wad + +dpki: channel_dpki.wad + +channel_retail.wad: retail/cetk retail/tmd 00000000 00000001 + @$(TOOLS)/wadpack.py $@ retail/ + +channel_dpki.wad: dpki/cetk dpki/tmd 00000000 00000001 + @$(TOOLS)/wadpack.py -dpki $@ dpki/ + +00000000: ../banner/channel.imet + @cat footer $< > $@ + +00000001: ../channelapp/channelapp-channel.dol + @cp $< $@ + +retail/cetk: cetk.template + @cp $< $@ + @$(TOOLS)/tikfix.py $@ + +dpki/cetk: retail/cetk + @$(TOOLS)/dpkisign.py -cetk $< $@ $(CERTS) $(DPKI_ISSUER_TIK) + +retail/tmd: tmd.template 00000000 00000001 + @cp $< $@ + @$(TOOLS)/tmdupdatecr.py $@ $(CURDIR) + @$(TOOLS)/tmdvers.py $@ $(INSTALLER_VER_MAJOR) $(INSTALLER_VER_MINOR) + +dpki/tmd: retail/tmd + @$(TOOLS)/dpkisign.py -tmd $< $@ $(CERTS) $(DPKI_ISSUER_TMD) + +check: all + @echo ===== RETAIL ===== + @$(TOOLS)/tikinfo.py cetk.retail certs.retail + @$(TOOLS)/tmdinfo.py tmd.retail certs.retail + @echo ===== DPKI ===== + @$(TOOLS)/tikinfo.py -dpki cetk.dpki certs.dpki + @$(TOOLS)/tmdinfo.py -dpki tmd.dpki certs.dpki + +clean: + rm -f retail/cetk dpki/cetk retail/tmd retail/tmd 00000000 00000001 + diff --git a/channel/title/cetk.template b/channel/title/cetk.template new file mode 100644 index 0000000000000000000000000000000000000000..cc5857db071d4f376929071ca534d4e6fd42fbeb GIT binary patch literal 676 zcmZQzWME_%1!RXnP=0=iuCt>71Q_Z@1Vfp|WE)9}#*mCu-~8ed$MV$T{M^*y5(Wn4 k+b${>jNgC_0miMrhm-UF|0qVPq3{TD{u2NM4WL*70AimrCjbBd literal 0 HcmV?d00001 diff --git a/channel/title/dpki/certs b/channel/title/dpki/certs new file mode 100644 index 0000000000000000000000000000000000000000..9368fbbcbee56ab9d336f571c66fe71e057bef9e GIT binary patch literal 3136 zcmb`{_d6Tf9|!P+lo)BXgwjfN5HVAuT&);2Q#9yRqr?h=#$I2ep(Se6UWwXj#Hj6B zRkOsdqE)TiC@MP4QWf9c=idGSx9;cs@cHGuKj%E>c|8XJ1OO7v8n`bZ8N1Jj(@nmC zAim}@#rxPvQfnTsNtcIx)=88LguD>;5mgOCYo4QCcj_%P zS4=?b$s4Iexe%Pa7=6}X354`$> zQso~@uoth1-PAPH@{?fV%+fE(_jhMxN_Z6!?{EZ?KkZ4f<7vW0^MfT^&D;Biyb@bd_AnK7Esu8wl3`s4wF6JE!AMdsJG8*hEK_uI!GOO zvOn3g9=!+MSL>cppu26Hu}I97b?RGry1%C&Qo5QtC%OjW*#OJW(7>KD=y>>0i51PV zn}JMUb==t!pJN(ti)C-;#0Om$8q)!>F@sh!0oksorFK;@q!yc7{-${&uR3omt6U*Z z^YboL#kt2*Y-I_?nKPp*{SJ|!15TE4rD}9=bCOP)=!QFEpT<4C{$fdHc?3NwgAVm+WBMamyBX}x1I@2;nv zASWv#@hndL3OO;M5$cnBg?@RhWre@XYGgWHtzuxpFq?DQqf?}|r`dp~M5ACRlv1Hm zF;r+mskrD$F0qyn>z|&8rWHB$GO^m|#UNjFV*X9<*~>?Di^yLtj^FN}%1Z)(Ki03* zkDL|DqbTclN?dzEmt@}@Rc~Z9hfSxJyQ1p4Ij)v-wZFlucM2jn8b1{93kBegd*itb zT73g_x@;msh_QFfV8$v`*Hes^41LglH;0NUx2SqnJ=W6k7>!$E3P#>uLKNKgalYOZSNTi8Y(dI?)3QPKWa^ z@PS)qQctcJa+F52MpSik=a85J>>ln-9 z+{u^SkpP2k`IKNlcN7>bta2KDB53uHpt%Lal&y~p%VZE~P2RFRZSQvo0#Y#A2WpCO z7<4otl{4l;J>1_O^;qlavUTqXK(NBxvab|=l&=3`9*(IcIL&5NXaziC5((gME4}b! zuY*xU4KITaGaf$kMDIxZVf>T&c8*oOE42jX&tC)i4}idnDO-G>bkf`Q*^=l>yUqz* zl*B4pmRU*bX$p*nahX-ulo%@8BS+Gyf`YUBRnfOcESU<(PLQ z83<9n9<#aTaXaDth0Rha@p2{+@3NWuDNN>%=3Q9uPF-2KFl_xPofci+ri+MTbP4~q zk%Srs2zqI(H>k+!PSr9yAOVaXpyKZjN~7r5;Fnx#+FXJ~hD9#o9{JLotxe&MoE%ob zOQgaTJLu;7=#?~qL;c_Xg@1F?fBawickX}g{^9>2?Nvl zdJFfL&5ISHm}igs6Mz?J*t?gqNOH7_ErJf(ePS2~mm1eWs$DGqjjYvSlayi{v4h)i zvS#B6$)U$5v3@eY5sMVc0nRG9-B;~d>^JHtupEVmFZI`*$ckU`N_jX=pK_a2>UlKz%!%jV0m?2|bHl-0POMTgA!i|Mv;xAy zoG%&w$V~{dtOwnS|L&wEe7pXr`VuSx^5J2vXEhcM(M9K8Uz!aE3&Xy=UX@sVpjvG^ zRzAnYjmqiN|Fq41v^yhNoUg-3ZC;BZBV=-~X MUQd4Q)W1{z2SN)i%K!iX literal 0 HcmV?d00001 diff --git a/channel/title/dpki/footer b/channel/title/dpki/footer new file mode 120000 index 0000000..74c13ec --- /dev/null +++ b/channel/title/dpki/footer @@ -0,0 +1 @@ +../footer \ No newline at end of file diff --git a/channel/title/footer b/channel/title/footer new file mode 100644 index 0000000000000000000000000000000000000000..5dd0f44d3125e7781facba7e4a8c43b74994018a GIT binary patch literal 64 zcmWH^NcG6iO-(9FEqBgH%*#v7VL$>*NNffMMn(pPlJd;Vs??%l2Oyo2TE+kX!EFs; literal 0 HcmV?d00001 diff --git a/channel/title/pywii b/channel/title/pywii new file mode 120000 index 0000000..fe33837 --- /dev/null +++ b/channel/title/pywii @@ -0,0 +1 @@ +../../pywii/Common/pywii \ No newline at end of file diff --git a/channel/title/retail/certs b/channel/title/retail/certs new file mode 100644 index 0000000000000000000000000000000000000000..2184107db41e656e1a40ce57b3898fdebe9ab42e GIT binary patch literal 2560 zcmb`FS5y<&7KRfA0u05B!J&vW1se&{38EkpP*hN&p_jl=!~_H}Bot{9dRMBni9iTN z2sMCoLNC%(Vg#(AhY}((cxTp~d6>65djI{f*IDa)|HED%00;n3%c=67XZ5~Gnd;*X zeKR9WyF~UrD!ZjD$L0f0a9oZ{90uJ_d@DIW9H7)E+AKJF=9vEy2w#Vq&^mgsnCm43 zX4Wox1S2G633&OxEb?>$bBP7osm?QYxib~5UbEb2VPUpJpOexDjO+9)ogOJ$gAwA zP!@#xwJF?NxKM+{q`D z#>(EFQZ4SKn3`>A$jP*a7&j4itWQlhM3g7oGP8;Prj@S6-U8~%5jQQUivV6Dey>Up|#?p(jOMoB94KJ^IKY;&<0u2pR{+l!3*JQI3 zWLu5zn_roe>si<|3$htF)eIUu#M?89@ zibTG=x|F{ygUnnX&w3H(&8r@k+I8kziyEi7NSH2RU)bD@k^QL>!#A2^FcZ(B%Zgng zg`e_hi}M)L1;GK%jxdC>T8Purg*(Z%lV}Zm=c3E-#Z^lTgjO1*4$MBcxH66h0RNcp z$sgP`fCKw{q+fhpj*+wIME2&O9dcw)Ufl;pA<-;eQ1w18u*)+<2efRjMM3nBvMBr{&?B5!yS-viWdtHxjrwzy8(F<>1@!F0ASW z;|_jWOCAM3#PuJqo4r<8Fe7GdP8tihW8vqr34FA-U5| zE#UfxX>n7dgc%b5=vpMlxoe&S~52^*g^HE8-OBqGM0C#NW(j0rJUYq)bD z-bBsTPKbizK_iWC8l6l6cvsy@vHc}-en=KG$T$tv!Yb|7$hr;+#b zsbmgQ+$p@-RMjn&4mE#uL^Gc;-x!oHcMkD*pN!h!=N0k0DMZ!Miwyry5?Ok0Q1ZdK zIHsy|Wa=GoS+QuS#5g?jNBj?ZVo$pf$|&ZugYmo1#L(fx!Q^E2&$xw$3$4 zMh&9;L;wD|V{&Qeo;d^I#*gQj8Do`-x>u@+5lUe`t4aq=i5-?x0qFJG)|@(8T(ktV zn=iWT-qCz{0sZ|e8Kf2%P}l1G2iH53i`LVm)B_vWzSig=2H3R_XwBanOYsdqVr_y4-aE^avSJ62jR0g_fBrxWfPJ*$2sUd6h#Q)9(ffVDL6j z67wRVvs=5wEkzp?JJD5bRCeM}6y~Ie)wN~YUJZ}ft7z@FygpY4IiVpj-uL*dR9d;$ z4YWRs?a&H*8fHE2IKBUOw*B+>|HFSvi@*F=`)Bw6`eHZajg^DQS}_3!go5Zg&vW0@ zs{*1a$Evt@E3L_!mbqi$`&1J`C1qAe1$y~34Y|n1Io&2FIAMecdFV;9DgD&cbFF&Y zj<~q)wk%3AAgj6Bqk^oNl&=WreL#N>>uT3PhE58F0HgkvTiBXou{6rq@r<>v9w3SC z==*WktC{KAV50KYd{JjCjFEtP)8c?wRGN~w!KvV)>sPXR!V0Uh$hDSV7pc*(7W2L> z#${|y_MTCQI{AXQGPB-cc8vN~B>i1x2+>=-qdJ_e;TLGFvU^@7f|OO-cH|SEhgkx| l4R;5JEbUe{{fa&sEGgo literal 0 HcmV?d00001 diff --git a/channel/title/retail/footer b/channel/title/retail/footer new file mode 120000 index 0000000..74c13ec --- /dev/null +++ b/channel/title/retail/footer @@ -0,0 +1 @@ +../footer \ No newline at end of file diff --git a/channel/title/tmd.template b/channel/title/tmd.template new file mode 100644 index 0000000000000000000000000000000000000000..709109e89772c77830521e1fd536b78edf961355 GIT binary patch literal 556 zcmZQzWME_%1!RXnP=0=iuCt>71Q_Z%2SAx7BpC^c19@OfF#3BqIfHb1H~|S}Am#`0 f5I|88!6v|B2Aao&6uXSUP~d?D0L=oW1iWehz7QC+ literal 0 HcmV?d00001 diff --git a/channel/wiiload/.gitignore b/channel/wiiload/.gitignore new file mode 100644 index 0000000..9b0eee4 --- /dev/null +++ b/channel/wiiload/.gitignore @@ -0,0 +1,3 @@ +wiiload +wiiload.exe + diff --git a/channel/wiiload/Makefile b/channel/wiiload/Makefile new file mode 100644 index 0000000..4eda0e0 --- /dev/null +++ b/channel/wiiload/Makefile @@ -0,0 +1,53 @@ +CFLAGS += -Wall -Wextra -Os -g -pipe + +ifeq ($(WIN32), 1) +PREFIX ?= i586-mingw32msvc- +BIN_EXT = .exe +CFLAGS += -Iwin32/include +LDFLAGS += -Lwin32/lib -lws2_32 -lz +else +PREFIX ?= +BIN_EXT = +LDFLAGS += -lz +endif + +ifeq ($(FTDI), 1) +CFLAGS += -DUSE_LIBFTDI +LDFLAGS += -lftdi -lusb +endif + +CC = $(PREFIX)gcc +STRIP = $(PREFIX)strip + +BIN = wiiload$(BIN_EXT) + +OBJS = gecko.o main.o + +all: $(BIN) + +clean: + @rm -f *.o core core.* $(BIN) + +strip: all + $(STRIP) $(BIN) + +install: strip + install -m 755 $(BIN) $(DEVKITPPC)/bin + +$(BIN): $(OBJS) + $(CC) $^ $(CFLAGS) $(LDFLAGS) -o $@ + +%o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +osx: + $(MAKE) clean + PREFIX=/opt/toolchains/powerpc-apple-darwin8-10.2/bin/ppc-apple-darwin8- CFLAGS=-fabi-version=1 $(MAKE) strip + cp $(BIN) $(BIN)_ppc + $(MAKE) clean + PREFIX=/opt/toolchains/i686-apple-darwin9-10.4/bin/i686-apple-darwin9- $(MAKE) strip + cp $(BIN) $(BIN)_intel + $(MAKE) clean + /opt/toolchains/i686-apple-darwin9-10.4/bin/i686-apple-darwin9-lipo -create $(BIN)_ppc $(BIN)_intel -output $(BIN) + rm $(BIN)_ppc $(BIN)_intel + diff --git a/channel/wiiload/gecko.c b/channel/wiiload/gecko.c new file mode 100644 index 0000000..4e90dca --- /dev/null +++ b/channel/wiiload/gecko.c @@ -0,0 +1,245 @@ +/* + * Copyright (C) 2008 dhewg, #wiidev efnet + * + * this file is part of wiifuse + * http://wiibrew.org/index.php?title=Wiifuse + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include + +#ifndef __WIN32__ +#include +#else +#define WIN32_LEAN_AND_MEAN +#include +#endif + +#include "gecko.h" + +#ifndef O_SYNC +#define O_SYNC 0 +#endif + +#define FTDI_PACKET_SIZE 3968 + +#ifndef __WIN32__ +static int fd_gecko = -1; +#else +static HANDLE handle_gecko = NULL; +#endif + +#ifdef USE_LIBFTDI +#include "ftdi.h" +#define DEFAULT_FTDI_VID 0x0403 +#define DEFAULT_FTDI_PID 0x6001 +struct ftdi_context gFTDIContext; +int gUsingFTDI = 0; +#endif + +int gecko_open(const char *dev) { +#ifdef USE_LIBFTDI + int err; + ftdi_init(&gFTDIContext); + if((err = ftdi_usb_open(&gFTDIContext, DEFAULT_FTDI_VID, DEFAULT_FTDI_PID) < 0)) { + fprintf(stderr, "ftdi_usb_open_desc failed: %d (%s)\n", err, ftdi_get_error_string(&gFTDIContext)); + fprintf(stderr, "Perhaps you need to unload the FTDI kext with e.g.\n"); + fprintf(stderr, "\tsudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver\n"); + } else { + gUsingFTDI=1; + fprintf(stderr, "Found libftdi device\n"); + goto done; + } +#endif +#ifndef __WIN32__ + struct termios newtio; + + fd_gecko = open(dev, O_RDWR | O_NOCTTY | O_SYNC | O_NONBLOCK); + + if (fd_gecko == -1) { + perror("gecko_open"); + return 1; + } + + if (fcntl(fd_gecko, F_SETFL, 0)) { + perror("F_SETFL on serial port"); + return 1; + } + + if (tcgetattr(fd_gecko, &newtio)) { + perror("tcgetattr"); + return 1; + } + + cfmakeraw(&newtio); + + newtio.c_cflag |= CRTSCTS | CS8 | CLOCAL | CREAD; + + if (tcsetattr(fd_gecko, TCSANOW, &newtio)) { + perror("tcsetattr"); + return 1; + } +#else + COMMTIMEOUTS timeouts; + + handle_gecko = CreateFile(dev, GENERIC_READ | GENERIC_WRITE, 0, 0, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + + GetCommTimeouts(handle_gecko, &timeouts); + + timeouts.ReadIntervalTimeout = MAXDWORD; + timeouts.ReadTotalTimeoutMultiplier = 0; + timeouts.ReadTotalTimeoutConstant = 0; + timeouts.WriteTotalTimeoutMultiplier = 0; + timeouts.WriteTotalTimeoutConstant = 0; + + if (!SetCommTimeouts(handle_gecko, &timeouts)) { + fprintf(stderr, "error setting timeouts on port\n"); + return 1; + } + + if (!SetCommMask(handle_gecko, 0)) { + fprintf(stderr, "error setting communications event mask\n"); + return 1; + } +#endif +done: + gecko_flush(); + + return 0; +} + +void gecko_close() { +#ifdef USE_LIBFTDI + if (gUsingFTDI) { + ftdi_usb_close(&gFTDIContext); + return; + } +#endif +#ifndef __WIN32__ + if (fd_gecko > 0) + close(fd_gecko); +#else + CloseHandle(handle_gecko); +#endif +} + +void gecko_flush() { +#ifdef USE_LIBFTDI + if (gUsingFTDI) { + ftdi_usb_purge_buffers(&gFTDIContext); + return; + } +#endif +#ifndef __WIN32__ + tcflush(fd_gecko, TCIOFLUSH); +#else + PurgeComm(handle_gecko, PURGE_RXCLEAR | PURGE_TXCLEAR | + PURGE_TXABORT | PURGE_RXABORT); + +#endif +} + +int gecko_read(void *buf, size_t count) { + size_t left, chunk; +#ifndef __WIN32__ + size_t res; +#else + DWORD res; +#endif + + left = count; + while (left) { + chunk = left; + if (chunk > FTDI_PACKET_SIZE) + chunk = FTDI_PACKET_SIZE; +#ifdef USE_LIBFTDI + if (gUsingFTDI) + res = ftdi_read_data(&gFTDIContext, buf, chunk); + else +#endif +#ifndef __WIN32__ + res = read(fd_gecko, buf, chunk); + if (res < 1) { + perror("gecko_read"); + return 1; + } +#else + if (!ReadFile(handle_gecko, buf, chunk, &res, NULL)) { + fprintf(stderr, "gecko_read\n"); + return 1; + } +#endif + + left -= res; + buf += res; + } + + return 0; +} + +int gecko_write(const void *buf, size_t count) { + size_t left, chunk; +#ifndef __WIN32__ + size_t res; +#else + DWORD res; +#endif + + left = count; + + while (left) { + chunk = left; + if (chunk > FTDI_PACKET_SIZE) + chunk = FTDI_PACKET_SIZE; + +#ifdef USE_LIBFTDI + if (gUsingFTDI) + res = ftdi_write_data(&gFTDIContext, (unsigned char *)buf, chunk); + else +#endif +#ifndef __WIN32__ + res = write(fd_gecko, buf, count); + if (res < 1) { + perror("gecko_write"); + return 1; + } +#else + if (!WriteFile(handle_gecko, buf, chunk, &res, NULL)) { + fprintf (stderr, "gecko_write\n"); + return 1; + } +#endif + + left -= res; + buf += res; + +#if !defined(__WIN32__) && !defined(USE_LIBFTDI) + // does this work with ftdi-sio? + if (tcdrain(fd_gecko)) { + perror ("gecko_drain"); + return 1; + } +#endif + } + + return 0; +} + diff --git a/channel/wiiload/gecko.h b/channel/wiiload/gecko.h new file mode 100644 index 0000000..e92991a --- /dev/null +++ b/channel/wiiload/gecko.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2008 dhewg, #wiidev efnet + * + * this file is part of wiifuse + * http://wiibrew.org/index.php?title=Wiifuse + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _GECKO_H_ +#define _GECKO_H_ + +int gecko_open (const char *dev); +void gecko_close (); +void gecko_flush (); +int gecko_read (void *buf, size_t count); +int gecko_write (const void *buf, size_t count); + +#endif + diff --git a/channel/wiiload/main.c b/channel/wiiload/main.c new file mode 100644 index 0000000..f28199a --- /dev/null +++ b/channel/wiiload/main.c @@ -0,0 +1,525 @@ +/* + * Copyright (C) 2008 dhewg, #wiidev efnet + * + * this file is part of geckoloader + * http://wiibrew.org/index.php?title=Geckoloader + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#include +#include +#else +#include +#endif + +#include + +#include "gecko.h" + +#define WIILOAD_VERSION_MAYOR 0 +#define WIILOAD_VERSION_MINOR 5 + +#define LD_TCP_PORT 4299 + +#define MAX_ARGS_LEN 1024 + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +typedef unsigned long long u64; +typedef signed char s8; +typedef signed short s16; +typedef signed int s32; +typedef signed long long s64; + +typedef enum { false, true } bool; + +#ifndef __WIN32__ +static const char *desc_export = "export"; +#ifndef __APPLE__ +static const char *desc_gecko = "/dev/ttyUSB0"; +#else +static const char *desc_gecko = "/dev/tty.usbserial-GECKUSB0"; +#endif +#else +static const char *desc_export = "set"; +static const char *desc_gecko = "COM4"; +#endif + +static const char *envvar = "WIILOAD"; + +static bool send_gecko (const char *dev, const u8 *buf, u32 len, u32 len_un, + const char *args, u16 args_len) { + u8 b[4]; + u32 left, block; + const u8 *p; + + if (gecko_open (dev)) { + fprintf (stderr, "unable to open the device '%s'\n", dev); + return false; + } + + printf ("sending upload request\n"); + + b[0] = 'H'; + b[1] = 'A'; + b[2] = 'X'; + b[3] = 'X'; + + if (gecko_write (b, 4)) { + gecko_close (); + fprintf (stderr, "error sending data\n"); + return false; + } + + b[0] = WIILOAD_VERSION_MAYOR; + b[1] = WIILOAD_VERSION_MINOR; + b[2] = (args_len >> 8) & 0xff; + b[3] = args_len & 0xff; + + if (gecko_write (b, 4)) { + gecko_close (); + fprintf (stderr, "error sending data\n"); + return false; + } + + printf ("sending file size (%u bytes)\n", len); + + b[0] = (len >> 24) & 0xff; + b[1] = (len >> 16) & 0xff; + b[2] = (len >> 8) & 0xff; + b[3] = len & 0xff; + + if (gecko_write (b, 4)) { + gecko_close (); + fprintf (stderr, "error sending data\n"); + return false; + } + + b[0] = (len_un >> 24) & 0xff; + b[1] = (len_un >> 16) & 0xff; + b[2] = (len_un >> 8) & 0xff; + b[3] = len_un & 0xff; + + if (gecko_write (b, 4)) { + gecko_close (); + fprintf (stderr, "error sending data\n"); + return false; + } + + printf ("sending data"); + fflush (stdout); + + left = len; + p = buf; + while (left) { + block = left; + if (block > 63488) + block = 63488; + left -= block; + + if (gecko_write (p, block)) { + fprintf (stderr, "error sending block\n"); + break; + } + p += block; + + printf ("."); + fflush (stdout); + + } + printf ("\n"); + + if (args_len) { + printf ("sending arguments (%u bytes)\n", args_len); + + if (gecko_write ((u8 *) args, args_len)) { + gecko_close (); + return false; + } + } + + gecko_close (); + + return true; +} + +static bool tcp_write (int s, const u8 *buf, u32 len) { + s32 left, block; + const u8 *p; + + left = len; + p = buf; + while (left) { + block = send (s, p, left, 0); + + if (block < 0) { + perror ("send failed"); + return false; + } + + left -= block; + p += block; + } + + return true; +} + +static bool send_tcp (const char *host, const u8 *buf, u32 len, u32 len_un, + const char *args, u16 args_len) { + struct sockaddr_in sa; + struct hostent *he; + int s, bc; + u8 b[4]; + off_t left, block; + const u8 *p; + +#ifdef __WIN32__ + WSADATA wsa_data; + if (WSAStartup (MAKEWORD(2,2), &wsa_data)) { + printf ("WSAStartup failed\n"); + return false; + } +#endif + + memset (&sa, 0, sizeof (sa)); + + sa.sin_addr.s_addr = inet_addr (host); + + if (sa.sin_addr.s_addr == INADDR_NONE) { + printf ("resolving %s\n", host); + + he = gethostbyname (host); + + if (!he) { +#ifndef __WIN32__ + herror ("error resolving hostname"); +#else + fprintf (stderr, "error resolving hostname\n"); +#endif + return false; + } + + if (he->h_addrtype != AF_INET) { + fprintf (stderr, "unsupported address"); + return false; + } + + sa.sin_addr.s_addr = *((u32 *) he->h_addr); + } + + s = socket (PF_INET, SOCK_STREAM, 0); + + if (s < 0) { + perror ("error creating socket"); + return false; + } + + sa.sin_port = htons (LD_TCP_PORT); + sa.sin_family = AF_INET; + + printf ("connecting to %s:%d\n", inet_ntoa (sa.sin_addr), LD_TCP_PORT); + + if (connect (s, (struct sockaddr *) &sa, sizeof (sa)) == -1) { + perror ("error connecting"); + close (s); + return false; + } + + printf ("sending upload request\n"); + + b[0] = 'H'; + b[1] = 'A'; + b[2] = 'X'; + b[3] = 'X'; + + if (!tcp_write (s, b, 4)) { + close (s); + return false; + } + + b[0] = WIILOAD_VERSION_MAYOR; + b[1] = WIILOAD_VERSION_MINOR; + b[2] = (args_len >> 8) & 0xff; + b[3] = args_len & 0xff; + + if (!tcp_write (s, b, 4)) { + close (s); + return false; + } + + printf ("sending file size (%u bytes)\n", len); + + b[0] = (len >> 24) & 0xff; + b[1] = (len >> 16) & 0xff; + b[2] = (len >> 8) & 0xff; + b[3] = len & 0xff; + + if (!tcp_write (s, b, 4)) { + close (s); + return false; + } + + b[0] = (len_un >> 24) & 0xff; + b[1] = (len_un >> 16) & 0xff; + b[2] = (len_un >> 8) & 0xff; + b[3] = len_un & 0xff; + + if (!tcp_write (s, b, 4)) { + close (s); + return false; + } + + printf ("sending data"); + fflush (stdout); + + left = len; + p = buf; + bc = 0; + while (left) { + block = left; + if (block > 4 * 1024) + block = 4 * 1024; + left -= block; + + if (!tcp_write (s, p, block)) { + close (s); + return false; + } + + p += block; + bc++; + + if (!(bc % 16)) { + printf ("."); + fflush (stdout); + } + } + + printf ("\n"); + + if (args_len) { + printf ("sending arguments (%u bytes)\n", args_len); + + if (!tcp_write (s, (u8 *) args, args_len)) { + close (s); + return false; + } + } + +#ifndef __WIN32__ + close (s); +#else + shutdown (s, SD_SEND); + closesocket (s); + WSACleanup (); +#endif + + return true; +} + +static void usage (const char *argv0) { + fprintf (stderr, "set the environment variable %s to a valid " + "destination.\n\n" + "examples:\n" + "\tusbgecko mode:\n" + "\t\t%s %s=%s\n\n" + "\ttcp mode:\n" + "\t\t%s %s=tcp:wii\n" + "\t\t%s %s=tcp:192.168.0.30\n\n" + "usage:\n" + "\t%s \n\n", + envvar, + desc_export, envvar, desc_gecko, + desc_export, envvar, + desc_export, envvar, + argv0); + exit (EXIT_FAILURE); +} + +int main (int argc, char **argv) { + int fd; + struct stat st; + char *ev; + bool compress = true; + u8 *buf, *bufz; + off_t fsize; + uLongf bufzlen = 0; + u32 len, len_un; + + int i, c; + char args[MAX_ARGS_LEN]; + char *arg_pos; + u16 args_len, args_left; + + bool res; + + printf ("wiiload v%u.%u\n" + "coded by dhewg, #wiidev efnet\n\n", + WIILOAD_VERSION_MAYOR, WIILOAD_VERSION_MINOR); + + if (argc < 2) + usage (*argv); + + ev = getenv (envvar); + if (!ev) + usage (*argv); + + fd = open (argv[1], O_RDONLY | O_BINARY); + if (fd < 0) { + perror ("error opening the file"); + exit (EXIT_FAILURE); + } + + if (fstat (fd, &st)) { + close (fd); + perror ("error stat'ing the file"); + exit (EXIT_FAILURE); + } + + fsize = st.st_size; + + if (fsize < 64 || fsize > 20 * 1024 * 1024) { + close (fd); + fprintf (stderr, "error: invalid file size\n"); + exit (EXIT_FAILURE); + } + + buf = malloc (fsize); + if (!buf) { + close (fd); + fprintf (stderr, "out of memory\n"); + exit (EXIT_FAILURE); + } + + if (read (fd, buf, fsize) != fsize) { + close (fd); + free (buf); + perror ("error reading the file"); + exit (EXIT_FAILURE); + } + close (fd); + + len = fsize; + len_un = 0; + + if (!memcmp(buf, "PK\x03\x04", 4)) + compress = false; + + if (compress) { + bufzlen = (uLongf) ((float) fsize * 1.02); + + bufz = malloc (bufzlen); + if (!bufz) { + fprintf (stderr, "out of memory\n"); + exit (EXIT_FAILURE); + } + + printf("compressing %u bytes...", (u32) fsize); + fflush(stdout); + + res = compress2 (bufz, &bufzlen, buf, fsize, 6); + if (res != Z_OK) { + free(buf); + free(bufz); + fprintf (stderr, "error compressing data: %d\n", res); + exit (EXIT_FAILURE); + } + + if (bufzlen < (u32) fsize) { + printf(" %.2f%%\n", 100.0f * (float) bufzlen / (float) fsize); + + len = bufzlen; + len_un = fsize; + free(buf); + buf = bufz; + } else { + printf(" compressed size gained size, discarding\n"); + free(bufz); + } + } + + args_len = 0; + + arg_pos = args; + args_left = MAX_ARGS_LEN; + + c = snprintf (arg_pos, args_left, "%s", basename (argv[1])); + arg_pos += c + 1; + args_left -= c + 1; + + if (argc > 2) { + for (i = 2; i < argc; ++i) { + c = snprintf (arg_pos, args_left, "%s", argv[i]); + + if (c >= args_left) { + free (buf); + fprintf (stderr, "argument string too long\n"); + exit (EXIT_FAILURE); + } + + arg_pos += c + 1; + args_left -= c + 1; + } + + if (args_left < 1) { + free (buf); + fprintf (stderr, "argument string too long\n"); + exit (EXIT_FAILURE); + } + } + + arg_pos[0] = 0; + args_len = MAX_ARGS_LEN - args_left + 1; + + if (strncmp (ev, "tcp:", 4)) { + if (stat (ev, &st)) + usage (*argv); + + res = send_gecko (ev, buf, len, len_un, args, args_len); + } else { + if (strlen (ev) < 5) + usage (*argv); + + res = send_tcp (&ev[4], buf, len, len_un, args, args_len); + } + + if (res) + printf ("done.\n"); + else + printf ("transfer failed.\n"); + + free (buf); + + return 0; +} + diff --git a/channel/wiiload/win32/include/zconf.h b/channel/wiiload/win32/include/zconf.h new file mode 100644 index 0000000..6d450fc --- /dev/null +++ b/channel/wiiload/win32/include/zconf.h @@ -0,0 +1,279 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-1998 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef _ZCONF_H +#define _ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateReset z_inflateReset +# define compress z_compress +# define compress2 z_compress2 +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table + +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) +# define WIN32 +#endif +#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386) +# ifndef __32BIT__ +# define __32BIT__ +# endif +#endif +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#if defined(MSDOS) && !defined(__32BIT__) +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC) +# define STDC +#endif +#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__) +# ifndef STDC +# define STDC +# endif +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Old Borland C incorrectly complains about missing returns: */ +#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500) +# define NEED_DUMMY_RETURN +#endif + + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +#endif +#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__)) +# ifndef __32BIT__ +# define SMALL_MEDIUM +# define FAR _far +# endif +#endif + +/* Compile with -DZLIB_DLL for Windows DLL support */ +#if defined(ZLIB_DLL) +# if defined(_WINDOWS) || defined(WINDOWS) +# ifdef FAR +# undef FAR +# endif +# include +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR _cdecl _export +# endif +# endif +# if defined (__BORLANDC__) +# if (__BORLANDC__ >= 0x0500) && defined (WIN32) +# include +# define ZEXPORT __declspec(dllexport) WINAPI +# define ZEXPORTRVA __declspec(dllexport) WINAPIV +# else +# if defined (_Windows) && defined (__DLL__) +# define ZEXPORT _export +# define ZEXPORTVA _export +# endif +# endif +# endif +#endif + +#if defined (__BEOS__) +# if defined (ZLIB_DLL) +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +#endif + +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif +#ifndef ZEXTERN +# define ZEXTERN extern +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(MACOS) && !defined(TARGET_OS_MAC) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#ifdef HAVE_UNISTD_H +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(inflate_blocks,"INBL") +# pragma map(inflate_blocks_new,"INBLNE") +# pragma map(inflate_blocks_free,"INBLFR") +# pragma map(inflate_blocks_reset,"INBLRE") +# pragma map(inflate_codes_free,"INCOFR") +# pragma map(inflate_codes,"INCO") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_flush,"INFLU") +# pragma map(inflate_mask,"INMA") +# pragma map(inflate_set_dictionary,"INSEDI2") +# pragma map(inflate_copyright,"INCOPY") +# pragma map(inflate_trees_bits,"INTRBI") +# pragma map(inflate_trees_dynamic,"INTRDY") +# pragma map(inflate_trees_fixed,"INTRFI") +# pragma map(inflate_trees_free,"INTRFR") +#endif + +#endif /* _ZCONF_H */ diff --git a/channel/wiiload/win32/include/zlib.h b/channel/wiiload/win32/include/zlib.h new file mode 100644 index 0000000..49f56b4 --- /dev/null +++ b/channel/wiiload/win32/include/zlib.h @@ -0,0 +1,893 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.1.3, July 9th, 1998 + + Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef _ZLIB_H +#define _ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.1.3" + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: ascii or binary */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +/* Allowed flush values; see deflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_ASCII 1 +#define Z_UNKNOWN 2 +/* Possible values of the data_type field */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + the compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + 0.1% larger than avail_in plus 12 bytes. If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update data_type if it can make a good guess about + the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may some + introduce some output latency (reading input without producing any output) + except when forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much + output as possible to the output buffer. The flushing behavior of inflate is + not specified for values of the flush parameter other than Z_SYNC_FLUSH + and Z_FINISH, but the current implementation actually flushes as much output + as possible anyway. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster routine + may be used for the single inflate() call. + + If a preset dictionary is needed at this point (see inflateSetDictionary + below), inflate sets strm-adler to the adler32 checksum of the + dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise + it sets strm->adler to the adler32 checksum of all output produced + so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or + an error code as described below. At the end of the stream, inflate() + checks that its computed adler32 checksum is equal to that saved by the + compressor and returns Z_STREAM_END only if the checksum is correct. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect + adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent + (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if no progress is possible or if there was not + enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR + case, the application may then call inflateSync to look for a good + compression block. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match). Filtered data consists mostly of small values with a + somewhat random distribution. In this case, the compression algorithm is + tuned to compress them better. The effect of Z_FILTERED is to force more + Huffman coding and less string matching; it is somewhat intermediate + between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects + the compression ratio but not the correctness of the compressed output even + if it is not set appropriately. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. + + Upon return of this function, strm->adler is set to the Adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. If a compressed stream with a larger window size is given as + input, inflate() will return with the error code Z_DATA_ERROR instead of + trying to allocate a larger window. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative + memLevel). msg is set to null if there is no error message. inflateInit2 + does not perform any decompression apart from reading the zlib header if + present: this will be done by inflate(). (So next_in and avail_in may be + modified, but next_out and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate + if this call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler32 value returned by this call of + inflate. The compressor and decompressor must use exactly the same + dictionary (see deflateSetDictionary). + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least 0.1% larger than + sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h". (See the description + of deflateInit2 for more information about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + const voidp buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); + +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running crc with the bytes buf[0..len-1] and return the updated + crc. If buf is NULL, this function returns the required initial value + for the crc. Pre- and post-conditioning (one's complement) is performed + within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int err)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZLIB_H */ diff --git a/channel/wiiload/win32/lib/libz.a b/channel/wiiload/win32/lib/libz.a new file mode 100644 index 0000000000000000000000000000000000000000..12117e055476de4f3ff7e1d2fe6ad2d596b5b847 GIT binary patch literal 73320 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 `(echo $(> `(echo $(> `(echo $(> 4) + 3 + inp += 1 + repOff = ord(data[inp]) | ((rep & 0x0F) << 8) + inp += 1 + + assert repOff <= len(ret) + + while repLength > 0: + ret.append(ret[-repOff - 1]) + repLength -= 1 + else: + ret.append(data[inp]) + inp += 1 + + bitmask <<= 1 + + return ''.join(ret) + +class U8(object): + class U8Header(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Tag = Struct.string(4) + self.RootNode = Struct.uint32 + self.HeaderSize = Struct.uint32 + self.DataOffset = Struct.uint32 + self.Zeroes = Struct.uint8[0x10] + + class U8Node(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Type = Struct.uint16 + self.NameOffset = Struct.uint16 + self.DataOffset = Struct.uint32 + self.Size = Struct.uint32 + + def __init__(self, data=None): + self.Files = {} + + if data != None: + self.Unpack(data) + + def Unpack(self, data): + pos = 0 + u8 = self.U8Header() + u8.unpack(data[pos:pos+len(u8)]) + pos += len(u8) + + assert u8.Tag == 'U\xAA8-' + pos += u8.RootNode - 0x20 + + root = self.U8Node() + root.unpack(data[pos:pos+len(root)]) + pos += len(root) + + children = [] + for i in xrange(root.Size - 1): + child = self.U8Node() + child.unpack(data[pos:pos+len(child)]) + pos += len(child) + children.append(child) + + stringTable = data[pos:pos + u8.DataOffset - len(u8) - root.Size * len(root)] + pos += len(stringTable) + + currentOffset = u8.DataOffset + + path = ['.'] + pathDepth = [root.Size - 1] + for offset,child in enumerate(children): + name = stringTable[child.NameOffset:].split('\0', 1)[0] + if child.Type == 0x0100: + path.append(name) + pathDepth.append(child.Size-offset-1) + elif child.Type == 0: + name = '/'.join(path + [name]) + + if currentOffset < child.DataOffset: + diff = child.DataOffset - currentOffset + assert diff <= 32 + + pos += diff + currentOffset += diff + + currentOffset += child.Size + + self.Files[name.lower()] = data[pos:pos+child.Size] + pos += child.Size + + pathDepth[-1] -= 1 + if pathDepth[-1] == 0: + path = path[:-1] + pathDepth = pathDepth[:-1] + +class IMD5Header(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Tag = Struct.string(4) + self.Size = Struct.uint32 + self.Zeroes = Struct.uint8[8] + self.MD5 = Struct.uint8[0x10] + +def IMD5(data): + imd5 = IMD5Header() + imd5.unpack(data[:len(imd5)]) + assert imd5.Tag == 'IMD5' + pos = len(imd5) + + if data[pos:pos+4] == 'LZ77': + return LZ77Decompress(data[pos+8:]) + else: + return data[pos:] + +class TPL(object): + class TPLHeader(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Magic = Struct.string(4) + self.Count = Struct.uint32 + self.Size = Struct.uint32 + + class TexOffsets(Struct): + __endian__ = Struct.BE + def __format__(self): + self.HeaderOff = Struct.uint32 + self.PaletteOff = Struct.uint32 + + class TexHeader(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Size = Struct.uint16[2] + self.Format = Struct.uint32 + self.DataOff = Struct.uint32 + self.Wrap = Struct.uint32[2] + self.Filter = Struct.uint32[2] + self.LODBias = Struct.float + self.EdgeLOD = Struct.uint8 + self.LOD = Struct.uint8[2] + self.Unpacked = Struct.uint8 + + class PalHeader(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Count = Struct.uint16 + self.Unpacked = Struct.uint8 + self.Pad = Struct.uint8 + self.Format = Struct.uint32 + self.DataOff = Struct.uint32 + + def __init__(self, data=None): + self.Textures = [] + + if data != None: + self.Unpack(data) + + def Unpack(self, data): + header = self.TPLHeader() + header.unpack(data[:len(header)]) + pos = len(header) + + assert header.Magic == '\x00\x20\xAF\x30' + assert header.Size == 0xc + + for i in xrange(header.Count): + offs = self.TexOffsets() + offs.unpack(data[pos:pos+len(offs)]) + pos += len(offs) + + self.Textures.append(self.ParseTexture(data, offs)) + + def ParseTexture(self, data, offs): + texHeader = self.TexHeader() + texHeader.unpack(data[offs.HeaderOff:offs.HeaderOff+len(texHeader)]) + format = texHeader.Format + self.format = format + rgba = None + if format == 0: + rgba = self.I4(data[texHeader.DataOff:], texHeader.Size) + elif format == 1: + rgba = self.I8(data[texHeader.DataOff:], texHeader.Size) + elif format == 2: + rgba = self.IA4(data[texHeader.DataOff:], texHeader.Size) + elif format == 3: + rgba = self.IA8(data[texHeader.DataOff:], texHeader.Size) + elif format == 4: + rgba = self.RGB565(data[texHeader.DataOff:], texHeader.Size) + elif format == 5: + rgba = self.RGB5A3(data[texHeader.DataOff:], texHeader.Size) + elif format == 6: + rgba = self.RGBA8(data[texHeader.DataOff:], texHeader.Size) + elif format == 14: + rgba = self.S3TC(data[texHeader.DataOff:], texHeader.Size) + else: + print 'Unknown texture format', format + + if rgba == None: + rgba = '\0\0\0\0' * texHeader.Size[0] * texHeader.Size[1] + + image = ImageData(texHeader.Size[1], texHeader.Size[0], 'RGBA', rgba) + print format + return image + + def I4(self, data, (y, x)): + out = [0 for i in xrange(x * y)] + outp = 0 + inp = 0 + for i in xrange(0, y, 8): + for j in xrange(0, x, 8): + ofs = 0 + for k in xrange(8): + off = min(x - j, 8) + for sub in xrange(0, off, 2): + texel = ord(data[inp]) + high, low = texel >> 4, texel & 0xF + if (outp + ofs + sub) < (x*y): + out[outp + ofs + sub] = (high << 4) | (high << 20) | (high << 12) | 0xFF<<24 + + if sub + 1 < off: + if (outp + ofs + sub + 1) < (x*y): + out[outp + ofs + sub + 1] = (low << 4) | (low << 20) | (low << 12) | 0xFF<<24 + + inp += 1 + + ofs += x + inp += (8 - off) / 2 + outp += off + outp += x * 7 + + return ''.join(Struct.uint32(p) for p in out) + + def I8(self, data, (y, x)): + out = [0 for i in xrange(x * y*2)] + outp = 0 + inp = 0 + for i in xrange(0, y, 4): + for j in xrange(0, x, 4): + ofs = 0 + for k in xrange(4): + off = min(x - j, 4) + for sub in xrange(off): + texel = ord(data[inp]) + out[outp + ofs + sub] = (texel << 24) | (texel << 16) | (texel << 8) | 0xFF + inp += 1 + + ofs += x + inp += 4 - off * 2 + outp += off + outp += x * 3 + + return ''.join(Struct.uint32(p) for p in out) + + def IA4(self, data, (y, x)): + out = [0 for i in xrange(x * y)] + outp = 0 + inp = 0 + for i in xrange(0, y, 4): + for j in xrange(0, x, 8): + ofs = 0 + for k in xrange(4): + off = min(x - j, 8) + for sub in xrange(off): + texel = ord(data[inp]) + alpha, inte = texel >> 4, texel & 0xF + if (outp + ofs + sub) < (x*y): + out[outp + ofs + sub] = (inte << 4) | (inte << 12) | (inte << 20) | (alpha << 28) + inp += 1 + + ofs += x + inp += 8 - off + outp += off + outp += x * 3 + + return ''.join(Struct.uint32(p) for p in out) + + def IA8(self, data, (y, x)): + out = [0 for i in xrange(x * y)] + outp = 0 + inp = 0 + for i in xrange(0, y, 4): + for j in xrange(0, x, 4): + ofs = 0 + for k in xrange(4): + off = min(x - j, 4) + for sub in xrange(off): + if (outp + ofs + sub) < (x*y): + texel = Struct.uint16(data[inp:inp + 2], endian='>') + p = (texel & 0xFF) + p |= (texel & 0xFF) << 8 + p |= (texel & 0xFF) << 16 + p |= (texel >> 8) << 24 + out[outp + ofs + sub] = p + inp += 2 + + ofs += x + inp += (4 - off) * 2 + outp += off + outp += x * 3 + + return ''.join(Struct.uint32(p) for p in out) + + def RGB565(self, data, (y, x)): + out = [0 for i in xrange(x * y)] + outp = 0 + inp = 0 + for i in xrange(0, y, 4): + for j in xrange(0, x, 4): + ofs = 0 + for k in xrange(4): + off = min(x - j, 4) + for sub in xrange(off): + if (outp + ofs + sub) < (x*y): + texel = Struct.uint16(data[inp:inp + 2], endian='>') + p = ((texel >> 11) & 0x1F) << 3 + p |= ((texel >> 5) & 0x3F) << 10 + p |= ( texel & 0x1F) << 19 + p |= 0xFF<<24 + out[outp + ofs + sub] = p + inp += 2 + + ofs += x + inp += (4 - off) * 2 + outp += off + outp += x * 3 + + return ''.join(Struct.uint32(p) for p in out) + + def RGB5A3(self, data, (y, x)): + out = [0 for i in xrange(x * y)] + outp = 0 + inp = 0 + for i in xrange(0, y, 4): + for j in xrange(0, x, 4): + ofs = 0 + for k in xrange(4): + off = min(x - j, 4) + for sub in xrange(off): + texel = Struct.uint16(data[inp:inp + 2], endian='>') + if texel & 0x8000: + p = ((texel >> 10) & 0x1F) << 3 + p |= ((texel >> 5) & 0x1F) << 11 + p |= ( texel & 0x1F) << 19 + p |= 0xFF<<24 + else: + p = ((texel >> 12) & 0x07) << 29 + p |= ((texel >> 8) & 0x0F) << 4 + p |= ((texel >> 4) & 0x0F) << 12 + p |= (texel & 0x0F) << 20 + if (outp + ofs + sub) < (x*y): + out[outp + ofs + sub] = p + inp += 2 + + ofs += x + inp += (4 - off) * 2 + outp += off + outp += x * 3 + + return ''.join(Struct.uint32(p) for p in out) + + def RGBA8(self, data, (y, x)): + out = [0 for i in xrange(x * y)] + outp = 0 + inp = 0 + for i in xrange(0, y, 4): + for j in xrange(0, x, 4): + ofs = 0 + for k in xrange(4): + off = min(x - j, 4) + for sub in xrange(off): + texel = Struct.uint16(data[inp:inp + 2], endian='>')<<16 + texel |= Struct.uint16(data[inp+32:inp + 34], endian='>') + if (outp + ofs + sub) < (x*y): + out[outp + ofs + sub] = texel&0xff000000 | ((texel>>16)&0xff) | (texel&0xff00) | ((texel<<16)&0xff0000) + inp += 2 + + ofs += x + inp += (4 - off) * 2 + outp += off + inp += 32 + outp += x * 3 + + return ''.join(Struct.uint32(p) for p in out) + + def unpack_rgb565(self,texel): + b = (texel&0x1f)<<3 + g = ((texel>>5)&0x3f)<<2 + r = ((texel>>11)&0x1f)<<3 + b |= b>>5 + g |= g>>6 + r |= r>>5 + return (0xff<<24) | (b<<16) | (g<<8) | r + def icolor(self,a,b,fa,fb,fc): + c = 0 + for i in xrange(0,32,8): + xa = (a>>i)&0xff + xb = (b>>i)&0xff + xc = min(255,max(0,int((xa*fa + xb*fb)/fc))) + c |= xc< texel2: + rgb[2] = self.icolor (rgb[0], rgb[1], 2, 1, 3) | 0xff000000 + rgb[3] = self.icolor (rgb[1], rgb[0], 2, 1, 3) | 0xff000000 + else: + rgb[2] = self.icolor (rgb[0], rgb[1], 0.5, 0.5, 1) | 0xff000000 + rgb[3] = 0 + + # color selection (00, 01, 10, 11) + cm = map(ord,data[inp+4:inp+8]) + ofs = l*4 + for n in range(4): + if (ofs + outp)<(x*y): + # one row (4 texels) + if maxw > (0 + l*4): + out[ofs + 0 + outp] = rgb[(cm[n] & 0xc0) >> 6]; + if maxw > (1 + l*4): + out[ofs + 1 + outp] = rgb[(cm[n] & 0x30) >> 4]; + if maxw > (2 + l*4): + out[ofs + 2 + outp] = rgb[(cm[n] & 0x0c) >> 2]; + if maxw > (3 + l*4): + out[ofs + 3 + outp] = rgb[(cm[n] & 0x03) >> 0]; + ofs += x + inp += 8 + outp += x * 4 + outp += maxw - x * 8 + outp += x * (TILE_HEIGHT - 1) + + return ''.join(Struct.uint32(p) for p in out) + +class Object(object): + def __init__(self, name): + self.Frame = 0 + self.Name = name + self.Alpha = 255 + self.Animations = 0 + def __str__(self): + return self.Name + +class Pane(Object): + def __init__(self, name, flags=0x104, alpha=255, coords=[0,0,0,0,0,0,1,1,0,0]): + Object.__init__(self, name) + self.Flags = flags + self.Alpha = alpha + self.Coords = list(coords) + self.Children = [] + self.Enabled = True + + def getX(self): return self.Coords[0] + def setX(self,v): self.Coords[0] = v + def getY(self): return self.Coords[1] + def setY(self,v): self.Coords[1] = v + def getMagX(self): return self.Coords[6] + def setMagX(self,v): self.Coords[6] = v + def getMagY(self): return self.Coords[7] + def setMagY(self,v): self.Coords[7] = v + def getW(self): return self.Coords[8] + def setW(self,v): self.Coords[8] = v + def getH(self): return self.Coords[9] + def setH(self,v): self.Coords[9] = v + def getRot(self): return self.Coords[5] + def setRot(self,v): self.Coords[5] = v + + X = property(getX,setX) + Y = property(getY,setY) + MagX = property(getMagX,setMagX) + MagY = property(getMagY,setMagY) + Width = property(getW,setW) + Height = property(getH,setH) + Rot = property(getRot,setRot) + + def Add(self, child): + self.Children.append(child) + + def AnimDone(self): + if not Object.AnimDone(self): + return False + + for child in self.Children: + if not child.AnimDone(): + return False + + return True + +class Picture(Pane): + def __init__(self, name, flags=0x504, alpha=255, coords=[0,0,0,0,0,0,1,1,0,0], unk=[0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff], mat=0, flags2=0x100, matcoord=[(0,0),(1,0),(0,1),(1,1)]): + Pane.__init__(self, name, flags, alpha, coords) + self.Unk = unk + self.Material = mat + self.Flags2 = flags2 + self.MaterialCoords = list(matcoord) + +class ItemList(object): + HDRLEN=4 + LSIZE=4 + OFFSET=0 + IS_ATOM=True + def __init__(self, data=None): + self.Items = [] + if data is not None: + self.unpack(data) + + def add(self,n): + self.Items.append(n) + + def unpack(self, data): + pos = 0 + if self.IS_ATOM: + pos = 8 + count = self.__unpkcnt__(data[pos:]) + pos = self.__getlistoff__(data[pos:]) + for i in xrange(count): + off = Struct.uint32(data[pos:pos+4], endian='>') + self.OFFSET + if i == (count-1): + next = len(data) + else: + next = Struct.uint32(data[pos+self.LSIZE:pos+self.LSIZE+4], endian='>') + self.OFFSET + pos += self.LSIZE + self.unpack_item(i, data[off:next]) + # sanity check + #dp = self.pack() + #assert dp == data + + def pack(self,extra=None): + + extradata = "" + if extra is not None: + extradata = extra.pack() + + data = "" + + offsets = [] + + for n,i in enumerate(self.Items): + offsets.append(len(data)) + data += self.pack_item(n,i) + + listlen = len(self.Items) * self.LSIZE + + head = self.__mkheader__() + outdata = "" + if self.IS_ATOM: + outdata += self.FOURCC + Struct.uint32((len(extradata) + listlen + len(data) + 8 + len(head) + 3) &(~3), endian='>') + outdata += head + + dataoff = len(outdata) + listlen - self.OFFSET + assert dataoff >= 0 + + for n in offsets: + outdata += Struct.uint32(n + dataoff, endian='>') + if self.LSIZE > 4: + outdata += (self.LSIZE-4)*"\x00" + + outdata += data + outdata += extradata + + if len(outdata)%4 != 0: + outdata += (4-len(outdata)%4)*"\x00" + + return outdata + + def __mkheader__(self): + return Struct.uint16(len(self.Items), endian='>') + "\x00\x00" + + def __unpkcnt__(self, data): + return Struct.uint16(data[0:2], endian='>') + + def __getlistoff__(self, data): + off=self.HDRLEN + if self.IS_ATOM: + off += 8 + return off + + def __getitem__(self, n): + return self.Items[n] + + def __len__(self): + return len(self.Items) + +class StdAtom(Struct): + __endian__ = Struct.BE + def __format__(self): + self.FourCC = Struct.string(4) + self.Size = Struct.uint32 + def pack(self): + self.FourCC = self.FOURCC + self.Size = len(self) + return Struct.pack(self) + +class Brlyt(object): + class BrlytHeader(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Magic = Struct.string(4) + self.Unk = Struct.uint32 + self.Size = Struct.uint32 + self.UnkCount = Struct.uint16 + self.AtomCount = Struct.uint16 + + class BrlytLYT1(StdAtom): + FOURCC = "lyt1" + def __format__(self): + StdAtom.__format__(self) + self.Flag = Struct.uint8 + self.pad = Struct.uint8[3] + self.Width = Struct.float + self.Height = Struct.float + + class BrlytTexture(object): + def __init__(self, name, texture=None): + self.Name = name + self.Texture = texture + self.GLTexture = None + def create_texture(self): + self.GLTexture = self.Texture.create_texture(Texture) + + class BrlytTXL1(ItemList): + LSIZE = 8 + OFFSET = 12 + FOURCC = "txl1" + def __init__(self, archive=None, data=None): + self.Archive = archive + ItemList.__init__(self, data) + + def unpack_item(self, i, data): + fn = data.split('\0', 1)[0] + print fn + tex = TPL(self.Archive.Files['./arc/timg/' + fn.lower()]).Textures[0] + self.Items.append(Brlyt.BrlytTexture(fn, tex)) + def pack_item(self, i, item): + return item.Name + "\0" + + class BrlytMAT1(ItemList): + LSIZE = 4 + OFFSET = 0 + FOURCC = "mat1" + def __init__(self, data=None): + ItemList.__init__(self, data) + + def unpack_item(self, num, data): + mtl = Brlyt.BrlytMaterial() + mtl.unpack(data) + self.Items.append(mtl) + + def pack_item(self, i, item): + return item.pack() + + class BrlytMaterialFlags(object): + def __init__(self,value=None): + if value is not None: + self.unpack(value) + def unpack(self,value): + self.value = value + self.NumTextures = value & 15 + self.NumCoords = (value>>4) & 15 + self.m_2 = (value>>8) & 15 + self.m_4 = bool((value>>12) & 1) + self.m_6 = (value>>13) & 3 + self.m_5 = (value>>15) & 7 + self.m_3 = (value>>18) & 31 + self.m_9 = bool((value>>23) & 1) + self.m_10 = bool((value>>24) & 1) + self.m_7 = bool((value>>25) & 1) + self.m_8 = bool((value>>27) & 1) + + def show(self): + print "Flags: %08x"%self.value + print "ReserveGXMem(" + print " r4 =",self.NumTextures + print " r5 =",self.NumCoords + print " r6 =",self.m_2 + print " r7 =",self.m_3 + print " r8 =",self.m_4 + print " r9 =",self.m_5 + print " r10 =",self.m_6 + print " 0x8(%sp) =",self.m_7 + print " 0xC(%sp) =",self.m_8 + print " 0x10(%sp) =",self.m_9 + print " 0x14(%sp) =",self.m_10 + print ")" + + def pack(self): + val = 0 + val |= self.NumTextures + val |= self.NumCoords << 4 + val |= self.m_2 << 8 + val |= self.m_4 << 12 + val |= self.m_6 << 13 + val |= self.m_5 << 15 + val |= self.m_3 << 18 + val |= self.m_9 << 23 + val |= self.m_10 << 24 + val |= self.m_7 << 25 + val |= self.m_8 << 27 + return val + + class BrlytMatHeader(Struct): + __endian__ = Struct.BE + + def __format__(self): + self.Name = Struct.string(0x14) + self.Color1 = Struct.uint16[4] + self.Color2 = Struct.uint16[4] + self.Color3 = Struct.uint16[4] + self.Blah = Struct.uint32[4] + self.Flags = Struct.uint32 + + # 0-3 num 0-8 + # 4-7 num 0-10 + # 8-11 num 0-8 + # 12 bool + # 13-14 num 0-3 + # 15-17 num 0-4 + # 18-22 num 0-16 + # 23 bool + # 24 bool + # 25 bool a + # 27 bool + + + # if 25, xtra word + # if 27, xtra word + # if 12, xtra word + # 13-14 * 0x14 + # 15-17 * 4 + # 18-22 * 16 + # if 23, xtra word + # if 24, xtra word + + class BrlytMaterial(object): + + def __init__(self, name=None): + if name is not None: + self.Name = name + self.Color1 = [0,0,0,0] + self.Color2 = [255,255,255,255] + self.Color3 = [255,255,255,255] + self.Blah = [0xffffffff,0xffffffff,0xffffffff,0xffffffff] + self.Textures = [] + self.TextureCoords = [] + self.SthB = [] + self.SthI = None + self.SthJ = None + self.SthC = None + self.SthD = [] + self.SthE = [] + self.SthF = [] + self.SthG = 0x77000000 + self.SthH = None + + def unpack(self, data): + wii.chexdump(data) + hdr = Brlyt.BrlytMatHeader() + hdr.unpack(data) + self.FlagData = Brlyt.BrlytMaterialFlags(hdr.Flags) + self.FlagData.show() + + self.Name = hdr.Name.split("\0",1)[0] + self.Color1 = hdr.Color1 + self.Color2 = hdr.Color2 + self.Color3 = hdr.Color3 + self.Blah = hdr.Blah + + ptr = 0x40 + + self.Textures = [] + self.TextureCoords = [] + self.SthB = [] + self.SthI = None + self.SthJ = None + self.SthC = None + self.SthD = [] + self.SthE = [] + self.SthF = [] + self.SthG = None + self.SthH = None + + for i in range(self.FlagData.NumTextures): + texid = Struct.uint16(data[ptr:ptr+2], endian='>') + texcs = Struct.uint8(data[ptr+2], endian='>') + texct = Struct.uint8(data[ptr+3], endian='>') + print " * Texture: %04x %d %d"%(texid,texcs,texct) + self.Textures.append((texid,texcs,texct)) + ptr += 4 + for i in range(self.FlagData.NumCoords): + dat = [] + for j in range(5): + dat.append(Struct.float(data[ptr+j*4:ptr+j*4+4], endian='>')) + print " * Coords: [",', '.join(["%f"%x for x in dat]),"]" + ptr += 0x14 + self.TextureCoords.append(dat) + for i in range(self.FlagData.m_2): + dat = Struct.uint32(data[ptr:ptr+4], endian='>') + self.SthB.append(dat) + print " * SthB: %08x"%dat + ptr += 0x04 + if self.FlagData.m_7: + self.SthI = Struct.uint32(data[ptr:ptr+4], endian='>') + print " SthI: %08x"%self.SthI + ptr += 0x04 + if self.FlagData.m_8: + self.SthJ = Struct.uint32(data[ptr:ptr+4], endian='>') + print " SthJ: %08x"%self.SthJ + ptr += 0x04 + if self.FlagData.m_4: + self.SthC = Struct.uint32(data[ptr:ptr+4], endian='>') + print " SthC: %08x"%self.SthC + ptr += 0x04 + for i in range(self.FlagData.m_6): + dat = [] + for j in range(5): + dat.append(Struct.float(data[ptr+j*4:ptr+j*4+4], endian='>')) + self.SthD.append(dat) + print " * SthD: [",', '.join(["%f"%x for x in dat]),"]" + ptr += 0x14 + for i in range(self.FlagData.m_5): + dat = Struct.uint32(data[ptr:ptr+4], endian='>') + self.SthE.append(dat) + print " * SthE: %08x"%dat + ptr += 0x04 + for i in range(self.FlagData.m_3): + dat = [] + for j in range(4): + dat.append(Struct.uint32(data[ptr+j*4:ptr+j*4+4], endian='>')) + self.SthF.append(dat) + print " * SthF: [",', '.join(["%08x"%x for x in dat]),"]" + ptr += 0x10 + if self.FlagData.m_9: + dat = Struct.uint32(data[ptr:ptr+4], endian='>') + self.SthG = dat + print " SthG: %08x"%dat + ptr += 0x04 + if self.FlagData.m_10: + dat = Struct.uint32(data[ptr:ptr+4], endian='>') + self.SthH = dat + print " SthH: %08x"%dat + ptr += 0x04 + + #assert ptr == len(data) + + def pack(self): + + self.FlagData = Brlyt.BrlytMaterialFlags() + + self.FlagData.NumTextures = len(self.Textures) + self.FlagData.NumCoords = len(self.TextureCoords) + self.FlagData.m_2 = len(self.SthB) + self.FlagData.m_7 = self.SthI is not None + self.FlagData.m_8 = self.SthJ is not None + self.FlagData.m_4 = self.SthC is not None + self.FlagData.m_6 = len(self.SthD) + self.FlagData.m_5 = len(self.SthE) + self.FlagData.m_3 = len(self.SthF) + self.FlagData.m_9 = self.SthG is not None + self.FlagData.m_10 = self.SthH is not None + + self.Flags = self.FlagData.pack() + + hdr = Brlyt.BrlytMatHeader() + + hdr.Name = self.Name + "\x00"*(0x14-len(self.Name)) + hdr.Color1 = self.Color1 + hdr.Color2 = self.Color2 + hdr.Color3 = self.Color3 + hdr.Blah = self.Blah + hdr.Flags = self.Flags + + data = hdr.pack() + + for i in self.Textures: + data += Struct.uint16(i[0], endian='>') + data += Struct.uint8(i[1], endian='>') + data += Struct.uint8(i[2], endian='>') + for i in self.TextureCoords: + for j in i: + data += Struct.float(j, endian='>') + for i in self.SthB: + data += Struct.uint32(i, endian='>') + if self.SthI is not None: + data += Struct.uint32(self.SthI, endian='>') + if self.SthJ is not None: + data += Struct.uint32(self.SthJ, endian='>') + if self.SthC is not None: + data += Struct.uint32(self.SthC, endian='>') + for i in self.SthD: + for j in i: + data += Struct.float(j, endian='>') + for i in self.SthE: + data += Struct.uint32(i, endian='>') + for i in self.SthF: + for j in i: + data += Struct.uint32(j, endian='>') + if self.SthG is not None: + data += Struct.uint32(self.SthG, endian='>') + if self.SthH is not None: + data += Struct.uint32(self.SthH, endian='>') + return data + + class BrlytPAN1(StdAtom): + FOURCC = "pan1" + def __format__(self): + StdAtom.__format__(self) + self.Flags = Struct.uint16 + self.Alpha = Struct.uint16 + self.Name = Struct.string(0x18) + self.Coords = Struct.float[10] + + class BrlytPIC1(BrlytPAN1): + FOURCC = "pic1" + def __format__(self): + Brlyt.BrlytPAN1.__format__(self) + self.unk = Struct.uint8[16] + self.Material = Struct.uint16 + self.Flags2 = Struct.uint16 + self.MaterialCoords = Struct.float[8] + + def __init__(self, archive, data, renderer): + self.Archive = archive + self.Textures = Brlyt.BrlytTXL1() + self.Materials = Brlyt.BrlytMAT1() + self.LastPic = None + self.RootPane = None + self.RootPaneName = None + self.Objects = {} + self.PanePath = [] + self.PaneId = 0 + self.Language = "ENG" + self.Renderer = renderer + + if data != None: + self.Unpack(data) + + def Unpack(self, data): + pos = 0 + header = self.BrlytHeader() + header.unpack(data[:len(header)]) + print "BRLYT header:" + wii.chexdump(data[:len(header)]) + print " unk1: %08x"%header.Unk + print " unkc: %08x"%header.UnkCount + pos += len(header) + + print " %d atoms"%header.AtomCount + + assert header.Magic == 'RLYT' + + for i in xrange(header.AtomCount): + atom = StdAtom() + atom.unpack(data[pos:pos+len(atom)]) + + atomdata = data[pos:pos+atom.Size] + if atom.FourCC == 'txl1': + self.TXL1(atomdata) + elif atom.FourCC == 'lyt1': + self.LYT1(atomdata) + elif atom.FourCC == 'mat1': + self.MAT1(atomdata) + elif atom.FourCC == 'pan1': + self.PAN1(atomdata) + elif atom.FourCC == 'pas1': + self.PAS1(atomdata) + elif atom.FourCC == 'pae1': + self.PAE1(atomdata) + elif atom.FourCC == 'pic1': + self.PIC1(atomdata) + elif atom.FourCC == "grp1": + self.GRP1(atomdata) + else: + print "Unknown FOURCC:",atom.FourCC + wii.chexdump(atomdata) + + pos += atom.Size + + def _PackObject(self, object): + atoms = 0 + if isinstance(object,Pane): + atoms += 1 + if isinstance(object,Picture): + atom = Brlyt.BrlytPIC1() + else: + atom = Brlyt.BrlytPAN1() + atom.Name = object.Name + "\x00"*(0x18-len(object.Name)) + atom.Alpha = int(object.Alpha * 256) + atom.Flags = object.Flags + atom.Coords = object.Coords + if isinstance(object,Picture): + atom.Flags2 = object.Flags2 + atom.Material = object.Material + atom.unk = object.Unk + atom.MaterialCoords = sum(map(list,object.MaterialCoords),[]) + data = atom.pack() + + if len(object.Children) > 0: + atoms += 2 + data += "pas1\x00\x00\x00\x08" + for child in object.Children: + ac, dc = self._PackObject(child) + data += dc + atoms += ac + data += "pae1\x00\x00\x00\x08" + return atoms, data + else: + raise ValueError("Unknown object: "+repr(object)) + + def Pack(self, extra=None): + + header = self.BrlytHeader() + header.Unk = 0xfeff0008 + header.UnkCount = 0x10 + header.Magic = "RLYT" + header.AtomCount = 0 + + data = "" + data += self.mkLYT1() + header.AtomCount+=1 + + data += self.mkTXL1() + header.AtomCount+=1 + + data += self.mkMAT1(extra) + header.AtomCount+=1 + + atoms, ndata = self._PackObject(self.RootPane) + data += ndata + header.AtomCount += atoms + + #uuugly. TODO: fix this crap. + data += "grp1\x00\x00\x00\x1cRootGroup\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + header.AtomCount += 1 + + header.Size = len(data) + len(header) + data = header.pack() + data + + return data + + def mkLYT1(self): + lyt1 = self.BrlytLYT1() + lyt1.Width = self.Width + lyt1.Height = self.Height + lyt1.Flag = 1 + for n in range(3): + lyt1.pad[n] = 0 + return lyt1.pack() + + def mkTXL1(self): + return self.Textures.pack() + + def mkMAT1(self, extra=None): + return self.Materials.pack(extra) + + def LYT1(self, data): + lyt1 = self.BrlytLYT1() + lyt1.unpack(data) + self.Width = lyt1.Width + self.Height = lyt1.Height + print "LYT1: %f x %f, flag %d"%(self.Width, self.Height, lyt1.Flag) + self.Renderer.Create(int(self.Width), int(self.Height)) + + def TXL1(self, data): + self.Textures = self.BrlytTXL1(self.Archive, data) + for i in self.Textures: + i.create_texture() + + def ApplyMask(self, image, mask): + print "Making mask:",image,mask + print image.width,image.height,mask.width,mask.height + if image.height != mask.height or image.width != mask.width: + raise ValueError("Mask dimensions must be equal to mask dimensions") + newdata = [0 for x in xrange(image.height * image.width * 4)] + + for pix in xrange(image.height * image.width): + newdata[pix*4 + 0] = image.data[pix*4 + 0] + newdata[pix*4 + 1] = image.data[pix*4 + 1] + newdata[pix*4 + 2] = image.data[pix*4 + 2] + newdata[pix*4 + 3] = mask.data[pix*4 + 0] + + return ImageData(image.width, image.height, 'RGBA', ''.join(newdata)) + + def MAT1(self, data): + self.Materials = self.BrlytMAT1(data) + + def _addpane(self, p): + self.CurPane = p + self.Objects[p.Name] = p + if self.RootPane is None: + self.RootPane = p + else: + self.PanePath[-1].Add(p) + + def PAN1(self, data): + wii.chexdump(data) + pane = Brlyt.BrlytPAN1() + pane.unpack(data) + p = Pane(pane.Name.split('\0',1)[0], pane.Flags, pane.Alpha/256.0, pane.Coords) + print 'Pane %s (flags %04x, alpha %f): ' % (p.Name, pane.Flags, pane.Alpha),pane.Coords + self._addpane(p) + + def PAS1(self, data): + wii.chexdump(data) + if self.CurPane is None: + raise ValueError("No current pane!") + self.PanePath.append(self.CurPane) + print "Pane start:",'.'.join(map(str,self.PanePath)) + self.CurPane = None + + def PAE1(self, data): + print "Pane end:",'.'.join(map(str,self.PanePath)) + self.PanePath = self.PanePath[:-1] + + def PIC1(self, data): + wii.chexdump(data) + pic = Brlyt.BrlytPIC1() + pic.unpack(data) + mc = [] + for i in range(4): + mc.append(pic.MaterialCoords[i*2:i*2+2]) + print mc + p = Picture(pic.Name.split("\0",1)[0], pic.Flags, pic.Alpha/256.0, pic.Coords, pic.unk, pic.Material, pic.Flags2, mc) + print repr(p.Name) + mat = self.Materials[pic.Material] + if mat is not None: + self._addpane(p) + else: + print 'Picture %s with null material!' + + def GRP1(self, data): + wii.chexdump(data) + if len(data) < 0x1c: + pass + lang = data[0x8:0x18].split('\0', 1)[0] + nitems = Struct.uint16(data[0x18:0x1a], endian='>') + p = 0x1c + items = [] + for i in xrange(nitems): + items.append(data[p:].split('\0', 1)[0]) + p += 0x10 + for i in items: + try: + if lang != self.Language: + self.Objects[i].Enabled = False + else: + self.Objects[i].Enabled = True + except: + pass + +class Brlan(object): + A_COORD = "RLPA" + A_PARM = "RLVC" + C_X = 0 + C_Y = 1 + C_ANGLE = 5 + C_MAGX = 6 + C_MAGY = 7 + C_WIDTH = 8 + C_HEIGHT = 9 + P_ALPHA = 0x10 + class BrlanHeader(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Magic = Struct.string(4) + self.Unk = Struct.uint32 + self.Size = Struct.uint32 + self.UnkCount = Struct.uint16 + self.AtomCount = Struct.uint16 + + def __init__(self, data=None): + self.Anim = None + if data != None: + self.Unpack(data) + else: + self.Anim = Brlan.BrlanPAI1() + + def Unpack(self, data): + header = self.BrlanHeader() + header.unpack(data[:len(header)]) + pos = len(header) + + assert header.Magic == 'RLAN' + + for i in xrange(header.AtomCount): + atom = StdAtom() + atom.unpack(data[pos:pos+len(atom)]) + atomdata = data[pos:pos+atom.Size] + pos += atom.Size + + if atom.FourCC == 'pai1': + self.PAI1(atomdata) + else: + print "Unknown animation atom: %s"%atom.FourCC + + class BrlanPAI1(ItemList): + LSIZE=4 + OFFSET=0 + FOURCC="pai1" + HDRLEN=12 + def unpack(self, data): + self.FrameCount = Struct.uint16(data[8:10], endian='>') + print self.FrameCount + ItemList.unpack(self, data) + def __mkheader__(self): + hdr = Struct.uint16(self.FrameCount, endian='>') + hdr += Struct.uint16(0x100, endian='>') + hdr += Struct.uint32(len(self.Items), endian='>') + hdr += Struct.uint32(0x14, endian='>') + return hdr + def __unpkcnt__(self, data): + return Struct.uint32(data[4:8], endian='>') + def __getlistoff__(self, data): + return Struct.uint32(data[8:12], endian='>') + def unpack_item (self, num, data): + self.Items.append(Brlan.BrlanAnimSet(data)) + def pack(self, offset, count): + self.FrameCount = count + self.Offset = offset + return ItemList.pack(self) + def pack_item (self, num, item): + return item.pack(self.Offset) + def __getitem__(self, n): + if isinstance(n,str): + for i in self.Items: + if i.Name == n: + return i + raise KeyError("Key %s not found"%n) + else: + return ItemList.__getitem__(self, n) + + def __contains__(self, n): + if isinstance(n,str): + for i in self.Items: + if i.Name == n: + return True + return False + else: + return n in self.Items + + + + class BrlanAnimSet(ItemList): + LSIZE=4 + OFFSET=0 + HDRLEN=0x18 + IS_ATOM=False + def __init__(self, data=None): + if data is not None and len(data)<0x14: + self.Name = data + ItemList.__init__(self, None) + else: + ItemList.__init__(self, data) + def unpack(self, data): + self.Name = data[:0x14].split("\0",1)[0] + print self.Name + ItemList.unpack(self, data) + def __mkheader__(self): + hdr = self.Name + "\x00" * (0x14-len(self.Name)) + hdr += Struct.uint8(len(self.Items), endian='>') + hdr += "\x00\x00\x00" + return hdr + def __unpkcnt__(self, data): + return Struct.uint8(data[0x14:0x15], endian='>') + def unpack_item (self, num, data): + self.Items.append(Brlan.BrlanAnimClass(data)) + def pack_item (self, num, item): + return item.pack(self.Offset) + def pack(self, offset): + self.Offset = offset + return ItemList.pack(self) + def __getitem__(self, n): + if isinstance(n,str): + for i in self.Items: + if i.Type == n: + return i + raise KeyError("Key %s not found"%n) + else: + return ItemList.__getitem__(self, n) + + class BrlanAnimClass(ItemList): + LSIZE=4 + OFFSET=0 + HDRLEN=8 + IS_ATOM=False + + class BrlanAnimClassIterator(object): + def __init__(self, cl): + self.cl = cl + self.item = 0 + def __iter__(self): + return self + def next(self): + if self.item == len(self.cl.Items): + raise StopIteration() + else: + self.item += 1 + return self.cl.Items[self.item-1] + + def __init__(self, data=None): + if data is not None and len(data) == 4: + self.Type = data + ItemList.__init__(self, None) + else: + ItemList.__init__(self, data) + def unpack(self, data): + self.Type = data[0:4] + print " ",self.Type + ItemList.unpack(self, data) + def __mkheader__(self): + hdr = self.Type + hdr += Struct.uint8(len(self.Items), endian='>') + hdr += "\x00\x00\x00" + return hdr + def __unpkcnt__(self, data): + return Struct.uint8(data[4:5], endian='>') + def unpack_item (self, num, data): + self.Items.append(Brlan.BrlanAnim(data)) + def pack(self, offset): + self.Offset = offset + return ItemList.pack(self) + def pack_item (self, num, item): + return item.pack(self.Offset) + def __getitem__(self, n): + for i in self.Items: + if i.Type == n: + return i + raise KeyError("Key %d not found"%n) + def __iter__(self): + return self.BrlanAnimClassIterator(self) + + class BrlanAnim(object): + def __init__(self, data=None): + self.Triplets = [] + self.Unk = 0x200 + self.Type = 0 + if data is not None and isinstance(data,int): + self.Type = data + else: + self.unpack(data) + def unpack(self, data): + self.Type = Struct.uint16(data[0:2], endian='>') + self.Unk = Struct.uint16(data[2:4], endian='>') + count = Struct.uint16(data[4:6], endian='>') + pos = Struct.uint32(data[8:12], endian='>') + print " ",self.Type + if self.Unk == 0x200: + print " Triplets:" + for i in range(count): + F = Struct.float(data[pos+0:pos+4], endian='>') + P = Struct.float(data[pos+4:pos+8], endian='>') + D = Struct.float(data[pos+8:pos+12], endian='>') + print " %11f %11f %11f"%(F,P,D) + self.Triplets.append((F,P,D)) + pos += 12 + else: + print " Unknown format: %04x"%self.Unk + def pack(self, offset): + self.Triplets.sort(key=lambda x: x[0]) + t = self.Triplets + self.Triplets = [] + lt = (None, None, None) + for i in t: + if i == lt: + pass + elif i[0] == lt[0]: + raise ValueError("Duplicate triplet frame numbers with different data") + else: + self.Triplets.append(i) + + out = Struct.uint16(self.Type, endian='>') + out += Struct.uint16(self.Unk, endian='>') + out += Struct.uint16(len(self.Triplets), endian='>') + out += "\x00\x00" + out += Struct.uint32(0xc, endian='>') + for F,P,D in self.Triplets: + out += Struct.float(F-offset, endian='>') + out += Struct.float(P, endian='>') + out += Struct.float(D, endian='>') + return out + def add(self, F, P=None, D=None): + if isinstance(F,tuple): + self.Triplets.append(F) + else: + self.Triplets.append((F,P,D)) + def rep(self, start, end, times): + replist = [] + for i in self.Triplets: + if i[0] >= start and i[0] <= end: + replist.append(i) + if len(replist) == 0: + return + off = end-start + for i in range(times-1): + for a,b,c in replist: + self.Triplets.append((a+off,b,c)) + off += end-start + a,b,c = replist[0] + if a == start: + self.Triplets.append((a+off,b,c)) + def repsimple(self, start, end, times, sp, sd, ep, ed): + step = float(end-start) / times + self.Triplets.append((start, sp, sd)) + self.Triplets.append((start+step/2.0, ep, ed)) + self.rep(start, start+step, times) + def calc(self, frame): + for tn in range(len(self.Triplets)): + if self.Triplets[tn][0] > frame: + if tn == 0: + return self.Triplets[0][1] + else: + start, value1, coef1 = self.Triplets[tn-1] + end, value2, coef2 = self.Triplets[tn] + t = (frame - start) / (end - start) + nf = end - start + return \ + coef1 * 1 * nf * (t + t**3 - 2*t**2) + \ + coef2 * 1 * nf * (t**3 - t**2) + \ + value1 * (1 + (2*t**3 - 3*t**2)) + \ + value2 * (-2*t**3 + 3*t**2) + else: + return self.Triplets[-1][1] + def __getitem__(self, n): + return self.Triplets[n] + def PAI1(self, data): + assert self.Anim is None + self.Anim = self.BrlanPAI1(data) + return + def Pack(self, a=None, b=None): + + if a is None and b is None: + frames = self.FrameCount + offset = 0 + elif a is not None and b is None: + frames = a + offset = 0 + elif a is not None and b is not None: + frames = b-a + offset = a + else: + raise ValueError("WTF are you doing") + + header = self.BrlanHeader() + header.Unk = 0xfeff0008 + header.UnkCount = 0x10 + header.Magic = "RLAN" + header.AtomCount = 1 + + data = self.Anim.pack(offset, frames) + + header.Size = len(data) + len(header) + data = header.pack() + data + + return data + +if have_pyglet: + class BannerWindow(window.Window): + def on_resize(self, width, height): + glViewport(0, 0, width, height) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glOrtho(-width/2, width/2, -height/2, height/2, -1, 1) + glMatrixMode(GL_MODELVIEW) + + +class Renderer(object): + def __init__(self): + self.Brlyt = None + self.Brlan = None + + def Create(self, width, height): + self.Width = width + self.Height = height + print "Render: %f x %f"%(self.Width,self.Height) + self.Window = BannerWindow(self.Width, self.Height) + self.Window.set_exclusive_mouse(False) + + glClearColor(0.0, 0.0, 0.0, 0.0) + glClearDepth(1.0) + glDepthFunc(GL_LEQUAL) + glEnable(GL_DEPTH_TEST) + + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) + glEnable(GL_BLEND) + glEnable(GL_TEXTURE_2D) + clock.set_fps_limit(60) + + + def Render(self, item, wireframe=False): + if not item.Enabled: + return + if isinstance(item, Picture): + + mat = self.Brlyt.Materials[item.Material] + texture = self.Brlyt.Textures[mat.Textures[0][0]].GLTexture + mtc = mat.TextureCoords[0] + x, y, a, b, c, rot, xsc, ysc, xs, ys = item.Coords[:10] + + xs *= xsc + ys *= ysc + #print item.Name,x,y,xs,ys + xc, yc = x-(xs/2),y-(ys/2) + + glPushMatrix() + glMatrixMode( GL_MODELVIEW ) + glTranslatef( x, y, 0) + glRotatef(rot,0,0,1) + glScalef(xs,ys,0) + + if not wireframe: + col = [x/255.0 for x in list(mat.Color2)] + col[3] = col[3] * item.Alpha / 255.0 + + tw = texture.tex_coords[6] + th = texture.tex_coords[7] + + mc = item.MaterialCoords + + glMatrixMode( GL_TEXTURE ) + glPushMatrix() + glTranslatef(0.5,0.5,0) + glTranslatef(mtc[0],mtc[1],0) + glScalef(mtc[3],mtc[4],0) + glTranslatef(-0.5,-0.5,0) + array = (GLfloat * 32)( + mc[0][0] * tw, mc[0][1] * th, 0, 1., + -0.5, 0.5, 0, 1., + mc[1][0] * tw, mc[1][1] * th, 0, 1., + 0.5, 0.5, 0, 1., + mc[3][0] * tw, mc[3][1] * th, 0, 1., + 0.5, -0.5, 0, 1., + mc[2][0] * tw, mc[2][1] * th, 0, 1., + -0.5, -0.5, 0, 1.) + + glColor4f(*col) + glPushAttrib(GL_ENABLE_BIT) + glEnable(texture.target) + glBindTexture(texture.target, texture.id) + if mat.Textures[0][1] == 0x0: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_S, GL_CLAMP) + elif mat.Textures[0][1] == 0x1: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_S, GL_REPEAT) + elif mat.Textures[0][1] == 0x2: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT) + else: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_S, GL_CLAMP) + if mat.Textures[0][2] == 0x0: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_T, GL_CLAMP) + elif mat.Textures[0][2] == 0x1: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_T, GL_REPEAT) + elif mat.Textures[0][2] == 0x2: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT) + else: + glTexParameteri(texture.target, GL_TEXTURE_WRAP_T, GL_CLAMP) + + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glInterleavedArrays(GL_T4F_V4F, 0, array) + glDrawArrays(GL_QUADS, 0, 4) + glPopClientAttrib() + glPopAttrib() + + glBindTexture(texture.target, 0) + glPopMatrix() + glMatrixMode( GL_MODELVIEW ) + + else: + + glColor3f(1,0,0) + glBegin(GL_LINE_STRIP) + glVertex2f(-0.5,-0.5) + glVertex2f(0.5,-0.5) + glVertex2f(0.5,0.5) + glVertex2f(-0.5,0.5) + glVertex2f(-0.5,-0.5) + glColor3f(1,1,1) + glEnd() + pass + + glPopMatrix() + if isinstance(item, Pane): + if item.Coords is not None: + x, y, a, b, c, rot, xsc, ysc, xs, ys = item.Coords[:10] + else: + x = y = 0 + xs = ys = 0 + xsc = 1 + ysc = 1 + glPushMatrix() + glTranslatef(x, y, 0) + glRotatef(rot,0,0,1) + glScalef(xsc,ysc,0) + #glScalef(xs,ys,1) + for child in item.Children: + self.Render(child,wireframe) + glPopMatrix() + + def Animate(self, frame): + for set in self.Brlan.Anim: + for clss in set: + for anim in clss: + #print set.Name, clss.Type, anim.Type, anim.calc(frame), frame + if clss.Type == Brlan.A_COORD: + self.Brlyt.Objects[set.Name].Coords[anim.Type] = anim.calc(frame) + elif clss.Type == Brlan.A_PARM: + if anim.Type == Brlan.P_ALPHA: + self.Brlyt.Objects[set.Name].Alpha = anim.calc(frame) + + def MainLoop(self, loop): + frame = 0 + print "Starting mainloop: loop =",loop + print "Length in frames:",self.Brlan.Anim.FrameCount + while not self.Window.has_exit: + self.Window.dispatch_events() + self.Window.clear() + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + glLoadIdentity() + glColor4f(1.0, 1.0, 1.0, 1.0) + + self.Render(self.Brlyt.RootPane,False) + #self.Render(self.Brlyt.RootPane,True) + + #clock.tick() + + self.Window.flip() + if self.Brlan is not None: + self.Animate(frame) + if frame >= self.Brlan.Anim.FrameCount: + if not loop: + print "Animation done!" + return True + else: + print "Looping..." + frame = -1 + frame += 1 + +class Alameda(object): + class IMETHeader(Struct): + __endian__ = Struct.BE + def __format__(self): + self.Zeroes = Struct.uint8[0x40] + self.IMET = Struct.string(4) + self.Fixed = Struct.uint8[8] + self.Sizes = Struct.uint32[3] + self.Flag1 = Struct.uint32 + self.Names = Struct.string(0x2A<<1, encoding='utf-16-be', stripNulls=True)[7] + self.Zeroes = Struct.uint8[0x348] + self.MD5 = Struct.uint8[0x10] + + def __init__(self, fn, type='icon'): + renderer = Renderer() + + fp = file(fn, 'rb') + + imet = self.IMETHeader() + try: + imet.unpack(fp.read(len(imet))) + except: + imet = None + if imet is None or imet.IMET != 'IMET': + imet = self.IMETHeader() + fp.seek(0x40) + imet.unpack(fp.read(len(imet))) + assert imet.IMET == 'IMET' + + print 'English title: %s' % imet.Names[1] + + + root = U8(fp.read()) + if type == 'icon': + banner = U8(IMD5(root.Files['./meta/icon.bin'])) + renderer.Brlyt = Brlyt(banner, banner.Files['./arc/blyt/icon.brlyt'], renderer) + fd = None + try: + fd = banner.Files['./arc/anim/icon.brlan'] + except: + pass + if fd is not None: + renderer.Brlan = Brlan(fd) + + loop = True + else: + banner = U8(IMD5(root.Files['./meta/banner.bin'])) + renderer.Brlyt = Brlyt(banner, banner.Files['./arc/blyt/banner.brlyt'], renderer) + loop = not banner.Files.has_key('./arc/anim/banner_start.brlan') + if not loop: + renderer.Brlan = Brlan(banner.Files['./arc/anim/banner_start.brlan']) + else: + renderer.Brlan = Brlan(banner.Files['./arc/anim/banner.brlan']) + + if renderer.MainLoop(loop) and type == 'banner' and not loop: + renderer.Brlan = Brlan(banner.Files['./arc/anim/banner_loop.brlan']) + renderer.MainLoop(True) + +if __name__=='__main__': + Alameda(*sys.argv[1:]) diff --git a/pywii/Common/Struct.py b/pywii/Common/Struct.py new file mode 100644 index 0000000..4acb44f --- /dev/null +++ b/pywii/Common/Struct.py @@ -0,0 +1,335 @@ +import struct, sys + +class StructType(tuple): + def __getitem__(self, value): + return [self] * value + def __call__(self, value, endian='<'): + if isinstance(value, str): + return struct.unpack(endian + tuple.__getitem__(self, 0), value[:tuple.__getitem__(self, 1)])[0] + else: + return struct.pack(endian + tuple.__getitem__(self, 0), value) + +class StructException(Exception): + pass + +class Struct(object): + __slots__ = ('__attrs__', '__baked__', '__defs__', '__endian__', '__next__', '__sizes__', '__values__') + int8 = StructType(('b', 1)) + uint8 = StructType(('B', 1)) + + int16 = StructType(('h', 2)) + uint16 = StructType(('H', 2)) + + int32 = StructType(('l', 4)) + uint32 = StructType(('L', 4)) + + int64 = StructType(('q', 8)) + uint64 = StructType(('Q', 8)) + + float = StructType(('f', 4)) + + @classmethod + def string(cls, len, offset=0, encoding=None, stripNulls=False, value=''): + return StructType(('string', (len, offset, encoding, stripNulls, value))) + + LE = '<' + BE = '>' + __endian__ = '<' + + def __init__(self, func=None, unpack=None, **kwargs): + self.__defs__ = [] + self.__sizes__ = [] + self.__attrs__ = [] + self.__values__ = {} + self.__next__ = True + self.__baked__ = False + + if func == None: + self.__format__() + else: + sys.settrace(self.__trace__) + func() + for name in func.func_code.co_varnames: + value = self.__frame__.f_locals[name] + self.__setattr__(name, value) + + self.__baked__ = True + + if unpack != None: + if isinstance(unpack, tuple): + self.unpack(*unpack) + else: + self.unpack(unpack) + + if len(kwargs): + for name in kwargs: + self.__values__[name] = kwargs[name] + + def __trace__(self, frame, event, arg): + self.__frame__ = frame + sys.settrace(None) + + def __setattr__(self, name, value): + if name in self.__slots__: + return object.__setattr__(self, name, value) + + if self.__baked__ == False: + if not isinstance(value, list): + value = [value] + attrname = name + else: + attrname = '*' + name + + self.__values__[name] = None + + for sub in value: + if isinstance(sub, Struct): + sub = sub.__class__ + try: + if issubclass(sub, Struct): + sub = ('struct', sub) + except TypeError: + pass + type_, size = tuple(sub) + if type_ == 'string': + self.__defs__.append(Struct.string) + self.__sizes__.append(size) + self.__attrs__.append(attrname) + self.__next__ = True + + if attrname[0] != '*': + self.__values__[name] = size[3] + elif self.__values__[name] == None: + self.__values__[name] = [size[3] for val in value] + elif type_ == 'struct': + self.__defs__.append(Struct) + self.__sizes__.append(size) + self.__attrs__.append(attrname) + self.__next__ = True + + if attrname[0] != '*': + self.__values__[name] = size() + elif self.__values__[name] == None: + self.__values__[name] = [size() for val in value] + else: + if self.__next__: + self.__defs__.append('') + self.__sizes__.append(0) + self.__attrs__.append([]) + self.__next__ = False + + self.__defs__[-1] += type_ + self.__sizes__[-1] += size + self.__attrs__[-1].append(attrname) + + if attrname[0] != '*': + self.__values__[name] = 0 + elif self.__values__[name] == None: + self.__values__[name] = [0 for val in value] + else: + try: + self.__values__[name] = value + except KeyError: + raise AttributeError(name) + + def __getattr__(self, name): + if self.__baked__ == False: + return name + else: + try: + return self.__values__[name] + except KeyError: + raise AttributeError(name) + + def __len__(self): + ret = 0 + arraypos, arrayname = None, None + + for i in range(len(self.__defs__)): + sdef, size, attrs = self.__defs__[i], self.__sizes__[i], self.__attrs__[i] + + if sdef == Struct.string: + size, offset, encoding, stripNulls, value = size + if isinstance(size, str): + size = self.__values__[size] + offset + elif sdef == Struct: + if attrs[0] == '*': + if arrayname != attrs: + arrayname = attrs + arraypos = 0 + size = len(self.__values__[attrs[1:]][arraypos]) + size = len(self.__values__[attrs]) + + ret += size + + return ret + + def unpack(self, data, pos=0): + for name in self.__values__: + if not isinstance(self.__values__[name], Struct): + self.__values__[name] = None + elif self.__values__[name].__class__ == list and len(self.__values__[name]) != 0: + if not isinstance(self.__values__[name][0], Struct): + self.__values__[name] = None + + arraypos, arrayname = None, None + + for i in range(len(self.__defs__)): + sdef, size, attrs = self.__defs__[i], self.__sizes__[i], self.__attrs__[i] + + if sdef == Struct.string: + size, offset, encoding, stripNulls, value = size + if isinstance(size, str): + size = self.__values__[size] + offset + + temp = data[pos:pos+size] + if len(temp) != size: + raise StructException('Expected %i byte string, got %i' % (size, len(temp))) + + if encoding != None: + temp = temp.decode(encoding) + + if stripNulls: + temp = temp.rstrip('\0') + + if attrs[0] == '*': + name = attrs[1:] + if self.__values__[name] == None: + self.__values__[name] = [] + self.__values__[name].append(temp) + else: + self.__values__[attrs] = temp + pos += size + elif sdef == Struct: + if attrs[0] == '*': + if arrayname != attrs: + arrayname = attrs + arraypos = 0 + name = attrs[1:] + self.__values__[attrs][arraypos].unpack(data, pos) + pos += len(self.__values__[attrs][arraypos]) + arraypos += 1 + else: + self.__values__[attrs].unpack(data, pos) + pos += len(self.__values__[attrs]) + else: + values = struct.unpack(self.__endian__+sdef, data[pos:pos+size]) + pos += size + j = 0 + for name in attrs: + if name[0] == '*': + name = name[1:] + if self.__values__[name] == None: + self.__values__[name] = [] + self.__values__[name].append(values[j]) + else: + self.__values__[name] = values[j] + j += 1 + + return self + + def pack(self): + arraypos, arrayname = None, None + + ret = '' + for i in range(len(self.__defs__)): + sdef, size, attrs = self.__defs__[i], self.__sizes__[i], self.__attrs__[i] + + if sdef == Struct.string: + size, offset, encoding, stripNulls, value = size + if isinstance(size, str): + size = self.__values__[size]+offset + + if attrs[0] == '*': + if arrayname != attrs: + arraypos = 0 + arrayname = attrs + temp = self.__values__[attrs[1:]][arraypos] + arraypos += 1 + else: + temp = self.__values__[attrs] + + if encoding != None: + temp = temp.encode(encoding) + + temp = temp[:size] + ret += temp + ('\0' * (size - len(temp))) + elif sdef == Struct: + if attrs[0] == '*': + if arrayname != attrs: + arraypos = 0 + arrayname = attrs + ret += self.__values__[attrs[1:]][arraypos].pack() + arraypos += 1 + else: + ret += self.__values__[attrs].pack() + else: + values = [] + for name in attrs: + if name[0] == '*': + if arrayname != name: + arraypos = 0 + arrayname = name + values.append(self.__values__[name[1:]][arraypos]) + arraypos += 1 + else: + values.append(self.__values__[name]) + + ret += struct.pack(self.__endian__+sdef, *values) + return ret + + def __getitem__(self, value): + return [('struct', self.__class__)] * value + +if __name__=='__main__': + class TestStruct(Struct): + __endian__ = Struct.LE + def __format__(self): + self.foo, self.bar = Struct.uint32, Struct.float + self.baz = Struct.string(8) + + self.omg = Struct.uint32 + self.wtf = Struct.string(self.omg) + + class HaxStruct(Struct): + __endian__ = Struct.LE + def __format__(self): + self.thing1 = Struct.uint32 + self.thing2 = Struct.uint32 + self.hax = HaxStruct + + test = TestStruct() + test.unpack('\xEF\xBE\xAD\xDE\x00\x00\x80\x3Fdeadbeef\x04\x00\x00\x00test\xCA\xFE\xBA\xBE\xBE\xBA\xFE\xCA') + assert test.foo == 0xDEADBEEF + assert test.bar == 1.0 + assert test.baz == 'deadbeef' + assert test.omg == 4 + assert test.wtf == 'test' + assert test.hax.thing1 == 0xBEBAFECA + assert test.hax.thing2 == 0xCAFEBABE + + print 'Tests successful' + + """ + @Struct.LE + def TestStruct(): + foo, bar = Struct.uint32, Struct.float + baz = Struct.string(8) + + omg = Struct.uint32 + wtf = Struct.string(omg) + + @Struct.LE + def HaxStruct(): + thing1 = Struct.uint32 + thing2 = Struct.uint32 + hax = HaxStruct() + + test = TestStruct() + test.foo = 0xCAFEBABE + test.bar = 0.0 + thing = test.hax.thing1 + test.hax.thing1 = test.hax.thing2 + test.hax.thing2 = thing + assert test.pack() == '\xBE\xBA\xFE\xCA\0\0\0\0deadbeef\x04\x00\x00\x00test\xBE\xBA\xFE\xCA\xCA\xFE\xBA\xBE' + """ diff --git a/pywii/Common/pywii/__init__.py b/pywii/Common/pywii/__init__.py new file mode 100644 index 0000000..da598aa --- /dev/null +++ b/pywii/Common/pywii/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python + +from wii import * diff --git a/pywii/Common/pywii/ec.py b/pywii/Common/pywii/ec.py new file mode 100644 index 0000000..d7058dd --- /dev/null +++ b/pywii/Common/pywii/ec.py @@ -0,0 +1,367 @@ +#!/usr/bin/python +# Copyright 2007,2008 Segher Boessenkool +# Copyright 2008 Hector Martin +# Licensed under the terms of the GNU GPL, version 2 +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + +from array import array +from struct import pack, unpack +from Crypto.Util.number import bytes_to_long, long_to_bytes + +# y**2 + x*y = x**3 + x + b +ec_b = "\x00\x66\x64\x7e\xde\x6c\x33\x2c\x7f\x8c\x09\x23\xbb\x58\x21"+\ + "\x3b\x33\x3b\x20\xe9\xce\x42\x81\xfe\x11\x5f\x7d\x8f\x90\xad" + +def hexdump(s,sep=""): + return sep.join(map(lambda x: "%02x"%ord(x),s)) + +def bhex(s,sep=""): + return hexdump(long_to_bytes(s,30),sep) + +fastelt = False +try: + import _ec + fastelt = True +except ImportError: + #print "C Elliptic Curve functions not available. EC certificate checking will be much slower." + pass + + +class ByteArray(array): + def __new__(cls, initializer=None): + return super(ByteArray, cls) .__new__(cls,'B',initializer) + def __init__(self,initializer=None): + array.__init__(self) + def __setitem__(self,item,value): + if isinstance(item, slice): + array.__setitem__(self, item, [x & 0xFF for x in value]) + else: + array.__setitem__(self, item, value & 0xFF) + def __long__(self): + return bytes_to_long(self.tostring()) + def __str__(self): + return ''.join(["%02x"%ord(x) for x in self.tostring()]) + def __repr__(self): + return "ByteArray('%s')"%''.join(["\\x%02x"%ord(x) for x in self.tostring()]) + +class ELT_PY: + SIZEBITS=233 + SIZE=(SIZEBITS+7)/8 + square = ByteArray("\x00\x01\x04\x05\x10\x11\x14\x15\x40\x41\x44\x45\x50\x51\x54\x55") + def __init__(self, initializer=None): + if isinstance(initializer, long) or isinstance(initializer, int): + self.d = ByteArray(long_to_bytes(initializer,self.SIZE)) + elif isinstance(initializer, str): + self.d = ByteArray(initializer) + elif isinstance(initializer, ByteArray): + self.d = ByteArray(initializer) + elif isinstance(initializer, array): + self.d = ByteArray(initializer) + elif isinstance(initializer, ELT): + self.d = ByteArray(initializer.d) + elif initializer is None: + self.d = ByteArray([0]*self.SIZE) + else: + raise TypeError("Invalid initializer type") + if len(self.d) != self.SIZE: + raise ValueError("ELT size must be 30") + + def __cmp__(self, other): + if other == 0: #exception + if self: + return 1 + else: + return 0 + if not isinstance(other,ELT): + return NotImplemented + return cmp(self.d,other.d) + + def __long__(self): + return long(self.d) + def __repr__(self): + return repr(self.d).replace("ByteArray","ELT") + def __str__(self): + return str(self.d) + def __nonzero__(self): + for x in self.d: + if x != 0: + return True + return False + def __len__(self): + return self.SIZE + def __add__(self,other): + if not isinstance(other,ELT): + return NotImplemented + new = ELT(self) + for x in range(self.SIZE): + new[x] ^= other[x] + return new + def _mul_x(self): + carry = self[0]&1 + x = 0 + d = ELT() + for i in range(self.SIZE-1): + y = self[i + 1] + d[i] = x ^ (y >> 7) + x = y << 1 + d[29] = x ^ carry + d[20] ^= carry << 2 + return d + def __mul__(self,other): + if not isinstance(other,ELT): + return NotImplemented + d = ELT() + i = 0 + mask = 1 + for n in range(self.SIZEBITS): + d = d._mul_x() + if (self[i] & mask) != 0: + d += other + mask >>= 1 + if mask == 0: + mask = 0x80 + i+=1 + return d + def __pow__(self,other): + if other == -1: + return 1/self + if other < 1: + return NotImplemented + if other % 2 == 0: + return self._square()**(other/2) + x = self + for i in range(other-1): + x *= self + return x + def _square(self): + wide = ByteArray([0]*self.SIZE*2) + for i in range(self.SIZE): + wide[2*i] = self.square[self[i] >> 4] + wide[2*i + 1] = self.square[self[i] & 0xf] + for i in range(self.SIZE): + x = wide[i] + + wide[i + 19] ^= x >> 7; + wide[i + 20] ^= x << 1; + + wide[i + 29] ^= x >> 1; + wide[i + 30] ^= x << 7; + x = wide[30] & 0xFE; + + wide[49] ^= x >> 7; + wide[50] ^= x << 1; + + wide[59] ^= x >> 1; + + wide[30] &= 1; + return ELT(wide[self.SIZE:]) + def _itoh_tsujii(self,b,j): + t = ELT(self) + return t**(2**j) * b + def __rdiv__(self,other): + if isinstance(other,ELT): + return 1/self * other + elif other == 1: + t = self._itoh_tsujii(self, 1) + s = t._itoh_tsujii(self, 1) + t = s._itoh_tsujii(s, 3) + s = t._itoh_tsujii(self, 1) + t = s._itoh_tsujii(s, 7) + s = t._itoh_tsujii(t, 14) + t = s._itoh_tsujii(self, 1) + s = t._itoh_tsujii(t, 29) + t = s._itoh_tsujii(s, 58) + s = t._itoh_tsujii(t, 116) + return s**2 + else: + return NotImplemented + + def __getitem__(self,item): + return self.d[item] + def __setitem__(self,item,value): + self.d[item] = value + def tobignum(self): + return bytes_to_long(self.d.tostring()) + def tobytes(self): + return self.d.tostring() + +class ELT_C(ELT_PY): + def __mul__(self,other): + if not isinstance(other,ELT): + return NotImplemented + return ELT(_ec.elt_mul(self.d.tostring(),other.d.tostring())) + def __rdiv__(self,other): + if other != 1: + return ELT_PY.__rdiv__(self,other) + return ELT(_ec.elt_inv(self.d.tostring())) + def _square(self): + return ELT(_ec.elt_square(self.d.tostring())) + +if fastelt: + ELT = ELT_C +else: + ELT = ELT_PY + +class Point: + def __init__(self,x,y=None): + if isinstance(x,str) and (y is None) and (len(x) == 60): + self.x = ELT(x[:30]) + self.y = ELT(x[30:]) + elif isinstance(x,Point): + self.x = ELT(x.x) + self.y = ELT(x.y) + else: + self.x = ELT(x) + self.y = ELT(y) + def on_curve(self): + return (self.x**3 + self.x**2 + self.y**2 + self.x*self.y + ELT(ec_b)) == 0 + def __cmp__(self, other): + if other == 0: + if self.x or self.y: + return 1 + else: + return 0 + elif isinstance(other, Point): + ca = cmp(self.x,other.x) + if ca != 0: + return ca + return cmp(self.y,other.y) + return NotImplemented + def _double(self): + if self.x == 0: + return Point(0,0) + + s = self.y/self.x + self.x + rx = s**2 + s + rx[29] ^= 1; + ry = s * rx + rx + self.x**2 + return Point(rx,ry) + def __add__(self, other): + if not isinstance(other,Point): + return NotImplemented + if self == 0: + return Point(other) + if other == 0: + return Point(self) + u = self.x + other.x + if u == 0: + u = self.y + other.y + if u == 0: + return self._double() + else: + return Point(0,0) + + s = (self.y + other.y) / u + t = s**2 + s + other.x + t[29] ^= 1 + + rx = t+self.x + ry = s*t+self.y+rx + return Point(rx,ry) + + def __mul__(self, other): + bts = long_to_bytes(other,30) + d = Point(0,0) + for i in range(30): + mask = 0x80 + while mask != 0: + d = d._double() + if ((ord(bts[i]) & mask) != 0): + d += self + mask >>=1 + return d + #def __mul__(self, other): + #if not (isinstance(other,long) or isinstance(other,int)): + #return NotImplemented + + #d = Point(0,0) + #s = Point(self) + + #while other != 0: + #if other & 1: + #d += s + #s = s._double() + #other >>= 1 + #return d + def __rmul__(self, other): + return self * other + def __str__(self): + return "(%s,%s)"%(str(self.x),str(self.y)) + def __repr__(self): + return "Point"+str(self) + def __nonzero__(self): + return self.x or self.y + def tobytes(self): + return self.x.tobytes() + self.y.tobytes() + +#only for prime N +#segher, your math makes my head hurt. But it works. +def bn_inv(a,N): + return pow(a,N-2,N) + + +# order of the addition group of points +ec_N = bytes_to_long( + "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ + "\x13\xe9\x74\xe7\x2f\x8a\x69\x22\x03\x1d\x26\x03\xcf\xe0\xd7") + +# base point +ec_G = Point( + "\x00\xfa\xc9\xdf\xcb\xac\x83\x13\xbb\x21\x39\xf1\xbb\x75\x5f"+ + "\xef\x65\xbc\x39\x1f\x8b\x36\xf8\xf8\xeb\x73\x71\xfd\x55\x8b"+ + "\x01\x00\x6a\x08\xa4\x19\x03\x35\x06\x78\xe5\x85\x28\xbe\xbf"+ + "\x8a\x0b\xef\xf8\x67\xa7\xca\x36\x71\x6f\x7e\x01\xf8\x10\x52") + +def generate_ecdsa(k, sha): + k = bytes_to_long(k) + + if k >= ec_N: + raise Exception("Invalid private key") + + e = bytes_to_long(sha) + + m = open("/dev/random","rb").read(30) + if len(m) != 30: + raise Exception("Failed to get random data") + m = bytes_to_long(m) % ec_N + + r = (m * ec_G).x.tobignum() % ec_N + + kk = ((r*k)+e)%ec_N + s = (bn_inv(m,ec_N) * kk)%ec_N + + r = long_to_bytes(r,30) + s = long_to_bytes(s,30) + return r,s + +def check_ecdsa(q,r,s,sha): + + q = Point(q) + r = bytes_to_long(r) + s = bytes_to_long(s) + e = bytes_to_long(sha) + + s_inv = bn_inv(s,ec_N) + + w1 = (e*s_inv)%ec_N + w2 = (r*s_inv)%ec_N + + r1 = w1 * ec_G + w2 * q + + rx = r1.x.tobignum()%ec_N + + return rx == r + +def priv_to_pub(k): + k = bytes_to_long(k) + q = k * ec_G + return q.tobytes() + +def gen_priv_key(): + k = open("/dev/random","rb").read(30) + if len(k) != 30: + raise Exception("Failed to get random data") + + k = bytes_to_long(k) + k = k % ec_N + return long_to_bytes(k,30) diff --git a/pywii/Common/pywii/wii.py b/pywii/Common/pywii/wii.py new file mode 100644 index 0000000..19ad366 --- /dev/null +++ b/pywii/Common/pywii/wii.py @@ -0,0 +1,1757 @@ +#!/usr/bin/env python +# Copyright 2008 Hector Martin +# Licensed under the terms of the GNU GPL, version 2 +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + +from struct import unpack, pack + +import os, os.path +import sys + +from Crypto.Cipher import AES +from Crypto.Hash import SHA +from Crypto.PublicKey import RSA +from Crypto.Util.number import bytes_to_long, long_to_bytes +from Crypto.Signature import pkcs1_15 + +import ec + +WII_RSA4096 = 0 +WII_RSA2048 = 1 +WII_ECDSA = 2 + +sigtypes = [ "RSA-4096", "RSA-2048", "EC-DSA" ] + +def load_rsa_key(issuer): + print "Loading private key for %s" % issuer + path = os.path.join(os.environ["HOME"], ".wii", "dpki", issuer + ".pem") + return RSA.importKey(open(path, "r").read()) + +signkeyfuncs = [ load_rsa_key, load_rsa_key, None ] + +NULL_IV = "\x00"*16 + +keylist = [ + "common-key", + "sd-key", + "sd-iv", + "md5-blanker", + "root-key", + "korean-key", +] + +keys = {} + +known_titles = { + 0x0000000100000001 : [ "boot2", "boot2" ], + 0x0000000100000002 : [ "System Menu", "SystemMenu" ], + 0x0000000100000100 : [ "BC", "BC" ], + 0x0000000100000101 : [ "MIOS", "MIOS" ], + 0x0001000148415858 : [ "The Homebrew Channel (HAXX)", "HBC1" ], + 0x000100014a4f4449 : [ "The Homebrew Channel (JODI)", "HBC2" ], + 0x00010001af1bf516 : [ "The Homebrew Channel (new)", "HBC3" ], + 0x000100014c554c5a : [ "The Homebrew Channel (LULZ)", "HBC4" ], + 0x0001000148424330 : [ "The Homebrew Channel OSS release (OHBC)", "OpenHBC" ], + 0x0001000844564458 : [ "DVDX (DVDX)", "DVDX1" ], + 0x0001000844495343 : [ "DVDX (DISC)", "DVDX2" ] +} + +known_titles_noregion = { + 0x0001000148414400 : [ "Internet Channel", "Internet" ], + 0x0001000148414a00 : [ "Everybody Votes Channel", "Votes" ], + 0x0001000148415000 : [ "Check Mii Out Channel", "CheckMii" ], + 0x0001000148415400 : [ "Nintendo Channel", "Nintendo" ], + 0x0001000148415600 : [ "Today and Tomorrow Channel", "Today" ], + 0x0001000148415700 : [ "Metroid Prime 3 Preview", "Metroid" ], + 0x0001000148434400 : [ "Digicam Print Channel", "Digicam" ], + 0x0001000148434600 : [ "Wii Speak Channel", "Speak", ], + + 0x0001000248414100 : [ "Photo Channel", "Photo" ], + 0x0001000248414200 : [ "Wii Shop Channel", "Shop" ], + 0x0001000248414300 : [ "Mii Channel", "Mii" ], + 0x0001000248414600 : [ "Weather Channel", "Weather" ], + 0x0001000248414700 : [ "News Channel", "News" ], + 0x0001000248415900 : [ "Photo Channel (1.1)", "Photo2" ], + + 0x0001000848414b00 : [ "EULA hidden channel", "EULA" ], + 0x0001000848414c00 : [ "Region Selection hidden channel", "Region" ], + 0x0001000848434300 : [ "Set Personal Data hidden channel", "Personal" ] +} + +def hexdump(s,sep=" "): + return sep.join(map(lambda x: "%02x"%ord(x),s)) + +def strcmp(s1,s2): + clen = min(len(s1),len(s2)) + + for i in range(clen): + if s1[i] == "\0" and s2[i] == "\0": + return True + if s1[i] != s2[i]: + return False + return False + +def ascii(s): + s2 = "" + for c in s: + if ord(c)<0x20 or ord(c)>0x7e: + s2 += "." + else: + s2 += c + return s2 + +def pad(s,c,l): + if len(s)= 0") + if size < 0: + raise ValueError("size must be >= 0") + if blocksize <= 0: + raise ValueError("blocksize must be > 0") + header = 0 + hdroffset = start % blocksize + startblock = start / blocksize + if hdroffset != 0: + startblock+=1 + header = blocksize - hdroffset + if size < header: + return (startblock, 0, hdroffset, size, 0) + start += header + size -= header + nblocks = size / blocksize + footer = size % blocksize + return (startblock, nblocks, hdroffset, header, footer) + +def get_readable_title(titleid, shortname = False): + if titleid in known_titles: + if shortname: + return known_titles[titleid][1] + return known_titles[titleid][0] + + if (titleid & ~0xFF) in known_titles_noregion: + if shortname: + return known_titles_noregion[titleid & ~0xFF][1] + return known_titles_noregion[titleid & ~0xFF][0] + + type = titleid >> 32 + id = titleid & 0xFFFFFFFF + if type == 0x00000001: # IOS + return "IOS%d" % id + + s = "%c%c%c%c" % (id >> 24, (id >> 16) & 0xFF, + (id >> 8) & 0xFF, id & 0xFF) + + if shortname: + return s + + if type == 0x00010002: # channel + return "Channel '%s'" % s + + if type == 0x00010008: # channel + return "System Channel '%s'" % s + + return "Unknown title type" + +def loadkeys(path = None): + keys.clear() + if path is None: + path = os.path.join(os.environ["HOME"], ".wii") + + for key in keylist: + try: + keys[key] = open(path + os.sep + key, "rb").read() + except: + print "Warning: failed to load key %s"%key + +def loadkeys_dpki(path = None): + if path is None: + path = os.path.join(os.environ["HOME"], ".wii", "dpki") + loadkeys(path) + +def parse_certs(blob): + certs = {} + certlist = [] + while blob != "": + cert = WiiCert(blob) + certs[cert.name] = cert + certlist.append(cert) + blob = blob[align(len(cert.data),0x40):] + + return (certs, certlist) + + +class HashError(RuntimeError): + def __init__(self, msg, expected, got): + RuntimeError.__init__(self, msg) + self.msg = msg + self.expected = expected + self.got = got + def __str__(self): + return "%s: expected %s, got %s"%(self.msg, hexdump(self.expected,''), hexdump(self.got,'')) + +class WiiPKAlgo: + def __init__(self,key): + self.key = key + + def get_digest(self, signature): + raise NotImplementedError("WiiPKAlgo is abstract") + + def check_digest(self, signature, expected): + return self.get_digest(signature) == expected + + def sign(self, data, key): + raise NotImplementedError("WiiPKAlgo is abstract") + + def bruteforce(self, signature, bytes, match): + codes = {1: "B", 2:"H", 4:"I", 8:"Q"} + + if bytes not in codes: + raise ValueError("Bytes must be 1,2,4, or 8") + + code = ">"+codes[bytes] + matchlen = len(match) + + for pad in xrange(0, 256**bytes): + pad += 0x4612512415125316 + pad %= 256**bytes + padsig = signature + pack(code, pad) + dig = self.get_digest(padsig) + if dig[:matchlen] == match: + return padsig + raise RuntimeError("Bruteforce failed") + +class WiiRSA(WiiPKAlgo): + def __init__(self,key): + WiiPKAlgo.__init__(self, key) + self.n = bytes_to_long(self.key[:-4]) + self.e = bytes_to_long(self.key[-4:]) + self.rsa = RSA.construct((self.n, self.e)) + self.can_get_digest = True + + def get_digest(self, signature): + lsig = bytes_to_long(signature) + if lsig >= self.n: + print "Warning: signature larger than modulus, using sig%modulus as signature" + ldec = pow(lsig, self.e, self.n) + dec = long_to_bytes(ldec) + pad = len(signature) - len(dec) + dec = "\x00"*pad+dec + return dec[-20:] + + def sign(self, data, key): + # Wrapper class to make PyCryptodome happy + class H(object): + oid = "1.3.14.3.2.26" + h = H() + h.digest = lambda: data + return pkcs1_15.new(key).sign(h) + +class WiiECDSA(WiiPKAlgo): + def __init__(self,key): + WiiPKAlgo.__init__(self, key) + self.can_get_digest = False + + def get_digest(self, signature): + raise NotImplementedError("EC-DSA cannot read message digest") + + def check_digest(self, signature, expected): + return ec.check_ecdsa(self.key,signature[0:30],signature[30:60],expected) + + def sign(self, data, key): + raise NotImplementedError("EC-DSA signing not implemented") + +class WiiDisc: + def __init__(self, iso, readonly=False): + self.fname = iso + self.readonly = readonly + self.f = open(self.fname, "rb") + + self.partitions = None + + self.read_header() + + def read_header(self): + self.f.seek(0) + self.gamecode = self.f.read(4) + self.makercode = self.f.read(2) + self.f.seek(0x18) + self.magic = unpack(">I",self.f.read(4))[0] + if self.magic != 0x5d1c9ea3: + raise RuntimeError("Not a Wii ISO!") + self.f.seek(0x20) + self.gamename = getcstring(self.f.read(0x60)) + + def read_partitions(self): + if self.partitions is not None: + return self.partitions + self.f.seek(0x40000) + pt_num, pt_start, p2_num, p2_start = unpack(">IIII",self.f.read(16)) + self.f.seek(pt_start<<2) + partitions = [] + for i in range(pt_num): + p_off, p_type = unpack(">II",self.f.read(8)) + partitions.append((p_off<<2, p_type)) + if p2_num > 0: + self.f.seek(p2_start<<2) + for i in range(p2_num): + p_off, p_type = unpack(">II",self.f.read(8)) + partitions.append((p_off<<2, p_type)) + + self.partitions = partitions + return self.partitions + + def showinfo(self): + print "Game %s, maker %s, magic %08x: %s"%(self.gamecode, self.makercode, self.magic, self.gamename) + self.read_partitions() + print "%d partitions in ISO:"%len(self.partitions) + for p_num,p_dat in enumerate(self.partitions): + print " [%2d] 0x%010x (%08x)"%(p_num,p_dat[0],p_dat[1]) + +class WiiSigned: + sigsizes = [512, 256, 60] + sigblocks = [0x240, 0x140, 0x80] + + def __init__(self, data): + self.type = "UNKNOWN" + if len(data) < 4: + raise ValueError("Data too short") + self.sigtype = unpack(">I",data[:4])[0] - 0x10000 + + if 0 <= self.sigtype < len(sigtypes): + self.signature = data[4:4+self.sigsizes[self.sigtype]] + self.body_offset = self.sigblocks[self.sigtype] + else: + raise ValueError("Unknown signature type %08x"%self.sigtype) + self.data = data + self.body = self.data[self.body_offset:] + self.data = data[:self._getbodysize() + self.body_offset] + self.body = self.body[:self._getbodysize()] + self.issuer = getcstring(self.body[:0x40]).split("-") + self.fillshort = None + + def update(self): + self.data = pack(">I",self.sigtype+0x10000) + self.signature + self.data += "\x00" * (self.body_offset - len(self.data)) + self.data += self.body + + def parse(self): + pass + + def _getbodysize(self): + return len(self.body) + + def get_hash(self): + return SHA.new(self.body).digest() + + def get_signature_hash(self,certs,): + cert = certs[self.issuer[-1]] + if cert.key_type != self.sigtype: + raise ValueError("Signature type %s does not match certificate type %s!"%(sigtypes[self.sigtype],sigtypes[cert.key_type])) + return cert.pkalgo.get_digest(self.sigtype, self.signature) + + def brute_sha(self, match = "\x00", fillshort = None): + l = len(match) + + if fillshort is None: + fillshort = self.fillshort + if fillshort is None: + raise ValueError("No fill short specified!") + + for cnt in range(65536): + self.body = self.body[:fillshort] + pack(">H",cnt) + self.body[fillshort+2:] + if self.get_hash()[:l] == match: + WiiSigned.update(self) + self.parse() + return + raise RuntimeError("SHA Bruteforce failed") + + def update_issuer(self, issuer): + if len(issuer) > 39: + raise ValueError("issuer name too long!") + self.issuer = issuer.split("-") + self.body = issuer + "\x00" * (0x40 - len(issuer)) + self.body[0x40:] + self.update() + + def update_signature(self, sig): + self.signature = sig + self.data = pack(">I",self.sigtype+0x10000) + self.signature + self.data[len(sig) + 4:] + + def null_signature(self): + self.signature = "\x00"*len(self.signature) + self.data = pack(">I",self.sigtype+0x10000) + self.signature + self.data[len(self.signature) + 4:] + + def sign(self,certs): + keyfunc = signkeyfuncs[self.sigtype] + if keyfunc is None: + raise ValueError("signing with %s not available" % sigtypes[self.sigtype]) + key = keyfunc(self.issuer[-1]) + if key is None: + raise ValueError("no key for %s available" % self.issuer[-1]) + cert = certs[self.issuer[-1]] + sig = cert.pkalgo.sign(self.get_hash(), key) + self.update_signature(sig) + return self.signcheck(certs) + + def signcheck(self,certs): + myhash = self.get_hash() + cert = certs[self.issuer[-1]] + return cert.pkalgo.check_digest(self.signature,myhash) + + def findcert(self, certs): + if self.issuer[-1] == "Root": + cert = WiiRootCert(keys['root-key']) + else: + cert = certs[self.issuer[-1]] + return cert + + def showsig(self,certs,it=""): + myhash = self.get_hash() + try: + if self.issuer[-1] == "Root": + cert = WiiRootCert(keys['root-key']) + else: + cert = certs[self.issuer[-1]] + if cert.pkalgo.can_get_digest: + signhash = cert.pkalgo.get_digest(self.signature) + if myhash == signhash: + print it+"%s signed by %s using %s: %s [OK]"%(self.type, "-".join(self.issuer), sigtypes[self.sigtype], hexdump(myhash)) + elif strcmp(myhash, signhash): + print it+"%s signed by %s using %s: %s [BUG]"%(self.type, "-".join(self.issuer), sigtypes[self.sigtype], hexdump(myhash)) + print it+" Signature hash: %s"%hexdump(signhash) + else: + print it+"%s signed by %s using %s: %s [FAIL]"%(self.type, "-".join(self.issuer), sigtypes[self.sigtype], hexdump(myhash)) + print it+" Signature hash: %s"%hexdump(signhash) + else: + sigok = cert.pkalgo.check_digest(self.signature,myhash) + if sigok: + print it+"%s signed by %s using %s: %s [OK]"%(self.type, "-".join(self.issuer), sigtypes[self.sigtype], hexdump(myhash)) + else: + print it+"%s signed by %s using %s: %s [FAIL]"%(self.type, "-".join(self.issuer), sigtypes[self.sigtype], hexdump(myhash)) + + except KeyError: + print it+"%s signed by %s using %s: %s [ISSUER NOT FOUND]"%(self.type, "-".join(self.issuer), sigtypes[self.sigtype], hexdump(myhash)) + +class WiiTik(WiiSigned): + def __init__(self, data): + WiiSigned.__init__(self, data) + self.type = "ETicket" + self.fillshort = 0xb2 + self.parse() + + def parse(self): + self.title_key_enc = self.body[0x7f:0x8f] + self.title_id = self.body[0x9c:0xa4] + self.title_key_iv = self.title_id + "\x00"*8 + self.common_key_index = ord(self.body[0xb1:0xb2]) + + try: + if self.common_key_index == 0: + key = keys["common-key"] + elif self.common_key_index == 1: + key = keys["korean-key"] + else: + print "WARNING: OLD FAKESIGNED TICKET WITH BAD KEY OFFSET, ASSUMING NORMAL COMMON KEY" + key = keys["common-key"] + aes = AES.new(key, AES.MODE_CBC, self.title_key_iv) + self.title_key = aes.decrypt(self.title_key_enc) + except: + self.title_key = None + + def update(self): + self.body = self.body[:0x9c] + self.title_id + self.body[0xa4:] + self.parse() + WiiSigned.update(self) + + def _getbodysize(self): + return 0x164 + + def showinfo(self, it=""): + print it+"ETicket: " + print it+" Title ID: "+repr(self.title_id) + print it+" Title key IV: "+hexdump(self.title_key_iv) + print it+" Title key (encrypted): "+hexdump(self.title_key_enc) + print it+" Common key index: %d" % self.common_key_index + if self.title_key is not None: + print it+" Title key (decrypted): "+hexdump(self.title_key) + +class WiiPartitionOffsets: + def __init__(self, data): + self.data = data + self.parse() + + def parse(self): + self.tmd_size = unpack(">I",self.data[0x0:0x4])[0] + self.tmd_offset = unpack(">I",self.data[0x4:0x8])[0]<<2 + self.cert_size = unpack(">I",self.data[0x8:0xc])[0] + self.cert_offset = unpack(">I",self.data[0xc:0x10])[0]<<2 + self.h3_offset = unpack(">I",self.data[0x10:0x14])[0]<<2 + self.data_offset = unpack(">I",self.data[0x14:0x18])[0]<<2 + self.data_size = unpack(">I",self.data[0x18:0x1c])[0]<<2 + + def showinfo(self, it=""): + print it+"TMD @ 0x%x [0x%x], Certs @ 0x%x [0x%x], H3 @ 0x%x, Data @ 0x%x [0x%x]"%( + self.tmd_offset, self.tmd_size, self.cert_offset, self.cert_size, + self.h3_offset, self.data_offset, self.data_size) + + def update(self): + self.data = pack(">II",self.tmd_size, self.tmd_offset>>2) + self.data += pack(">II",self.cert_size, self.cert_offset>>2) + self.data += pack(">I",self.h3_offset>>2) + self.data += pack(">II",self.data_offset>>2,self.data_size>>2) + +class WiiTmdContentRecord: + def __init__(self, data): + self.cid, self.index, self.ftype, self.size, self.sha = unpack(">IHHQ20s",data) + self.data = data + self.shared = (self.ftype & 0x8000) != 0 + + def update(self): + self.data = pack(">IHHQ20s", self.cid, self.index, self.ftype, self.size, self.sha) + +class WiiTmd(WiiSigned): + def __init__(self, data): + WiiSigned.__init__(self, data) + self.type = "TMD" + self.fillshort = 0x70 + self.parse() + + def parse(self): + self.version, self.ca_crl_version, self.signer_crl_version, \ + self.fill2, self.sys_version, self.title_id, self.title_type, \ + self.group_id, self.reserved, self.access_rights, \ + self.title_version, self.num_contents, self.boot_index = \ + unpack(">BBBBQ8sI2s62sIHHH",self.body[0x40:0xa2]) + + def _getbodysize(self): + self.parse() + return 0xa4+self.num_contents*36 + + def update(self): + hdr = pack(">BBBBQ8sI2s62sIHHH", \ + self.version, self.ca_crl_version, self.signer_crl_version, \ + self.fill2, self.sys_version, self.title_id, self.title_type, \ + self.group_id, self.reserved, self.access_rights, \ + self.title_version, self.num_contents, self.boot_index \ + ) + self.body = self.body[:0x40] + hdr + self.body[0xa2:] + WiiSigned.update(self) + + def get_content_records(self): + cts = [] + for i in range(self.num_contents): + ctr = WiiTmdContentRecord(self.body[0xa4+36*i:0xa4+36*(i+1)]) + cts.append(ctr) + return cts + + def find_cr_by_index(self, index): + for i,ct in enumerate(self.get_content_records()): + if ct.index == index: + return i + raise ValueError("Index %d not found"%index) + + def find_cr_by_cid(self, cid): + for i,ct in enumerate(self.get_content_records()): + if ct.cid == cid: + return i + raise ValueError("CID %08X not found"%cid) + + def update_content_record(self, num, cr): + cr.update() + self.body = self.body[:0xa4+36*num] + cr.data + self.body[0xa4+36*(num+1):] + self.update() + + def showinfo(self,it=""): + print it+"TMD: " + print it+" Versions: %d, CA CRL %d, Signer CRL %d, System %d-%d"%( + self.version,self.ca_crl_version,self.signer_crl_version,self.sys_version>>32,self.sys_version&0xffffffff) + print it+" Title ID: %s-%s (%s-%s)"%(hexdump(self.title_id[:4],''),hexdump(self.title_id[4:],''),repr(self.title_id[:4]),repr(self.title_id[4:])) + print it+" Title Type: %d"%self.title_type + print it+" Group ID: %s"%repr(self.group_id) + print it+" Access Rights: 0x%08x"%self.access_rights + print it+" Title Version: 0x%x"%self.title_version + print it+" Boot Index: %d"%self.boot_index + print it+" Contents:" + print it+" ID Index Type Size Hash" + for ct in self.get_content_records(): + + print it+" %08X %-5d 0x%-5x %-12s %s"%(ct.cid, ct.index, ct.ftype, "0x%x"%ct.size,hexdump(ct.sha)) + +class WiiCert(WiiSigned): + key_sizes = [516, 260, 60] + pk_types = [WiiRSA, WiiRSA, WiiECDSA] + + def __init__(self, data): + WiiSigned.__init__(self, data) + self.type = "Certificate" + self.parse() + + def _getbodysize(self): + keytype = unpack(">I",self.body[0x40:0x44])[0] + keysize = self.key_sizes[keytype] + return align(keysize + 0x8c,64) + + def parse(self): + self.key_type = unpack(">I",self.body[0x40:0x44])[0] + self.key_size = self.key_sizes[self.key_type] + self.name = getcstring(self.body[0x44:0x84]) + self.unk2 = self.body[0x84:0x88] + self.key = self.body[0x88:0x88 + self.key_size] + self.pkalgo = self.pk_types[self.key_type](self.key) + + def showinfo(self,it=""): + print it+"%s (%s)"%(self.name,sigtypes[self.key_type]) + +class WiiRootCert: + def __init__(self, data): + self.type = "Certificate" + self.key = data + self.pkalgo = WiiRSA(self.key) + self.name = "Root" + self.key_size = 516 + self.key_type = 0 + + def showinfo(self,it=""): + print it+"%s (%s)"%(self.name,sigtypes[self.key_type]) + +class WiiPartition: + BLOCKS_PER_SUBGROUP = 8 + SUBGROUPS_PER_GROUP = 8 + BLOCKS_PER_GROUP = BLOCKS_PER_SUBGROUP * SUBGROUPS_PER_GROUP + CIPHER_BLOCK_SIZE = 0x8000 + CIPHER_SUBGROUP_SIZE = BLOCKS_PER_SUBGROUP*CIPHER_BLOCK_SIZE + CIPHER_GROUP_SIZE = SUBGROUPS_PER_GROUP*CIPHER_SUBGROUP_SIZE + SHA_SIZE = 0x400 + DATA_SIZE = CIPHER_BLOCK_SIZE - SHA_SIZE + DATA_CHUNK_SIZE = 0x400 + DATA_CHUNKS_PER_BLOCK = DATA_SIZE / DATA_CHUNK_SIZE + PLAIN_BLOCK_SIZE = DATA_SIZE + PLAIN_SUBGROUP_SIZE = BLOCKS_PER_SUBGROUP*PLAIN_BLOCK_SIZE + PLAIN_GROUP_SIZE = SUBGROUPS_PER_GROUP*PLAIN_SUBGROUP_SIZE + NUM_H3,TAIL_H3 = divmod(0x18000,20) #the division has a remainder, so there is some dead space + + def __init__(self, disc, number, checkhash = True): + if disc.readonly: + self.f = open(disc.fname,"rb") + else: + self.f = open(disc.fname,"r+b") + self.offset = disc.read_partitions()[number][0] + + self.read_headers() + + self.checkhash = checkhash + + if checkhash and not self.checkh4hash(): + raise HashError("H4 hash check failed",self.tmd.get_content_records()[0].sha, self.geth4hash()) + + def _seek(self,n): + self.f.seek(self.offset + n) + + def read_headers(self): + + self._seek(0) + self.tik = WiiTik(self.f.read(0x2a4)) + self.offsets = WiiPartitionOffsets(self.f.read(0x1c)) + self._seek(self.offsets.tmd_offset) + self.tmd = WiiTmd(self.f.read(self.offsets.tmd_size)) + self.certs = {} + self._seek(self.offsets.cert_offset) + certdata = self.f.read(self.offsets.cert_size) + self.certlist = [] + while certdata != "": + cert = WiiCert(certdata) + self.certs[cert.name] = cert + self.certlist.append(cert) + certdata = certdata[align(len(cert.data),0x40):] + self._seek(self.offsets.h3_offset) + h3data = self.f.read(0x18000) + self.h3 = [] + for i in range(self.NUM_H3): + self.h3.append(h3data[20*i:20*(i+1)]) + self.data_offset = self.offsets.data_offset + self.offset + self.data_blocks = self.offsets.data_size / self.CIPHER_BLOCK_SIZE + if self.offsets.data_size % self.CIPHER_BLOCK_SIZE != 0: + raise ValueError("Data size (0x%x) not a multiple of block size (0x%x)"%( + self.offsets.data_size, self.CIPHER_BLOCK_SIZE)) + self.data_bytes = self.data_blocks * self.PLAIN_BLOCK_SIZE + self.data_subgroups = self.data_blocks / self.BLOCKS_PER_SUBGROUP + self.data_groups = self.data_subgroups / self.SUBGROUPS_PER_GROUP + self.extra_subgroup_blocks = self.data_blocks % self.BLOCKS_PER_SUBGROUP + self.extra_group_blocks = self.data_blocks % self.BLOCKS_PER_GROUP + self.partition_end = self.data_offset + self.data_blocks * self.CIPHER_BLOCK_SIZE + + def updatetmd(self): + self._seek(self.offsets.tmd_offset) + self.f.write(self.tmd.data) + + def updatetik(self): + self._seek(0) + self.f.write(self.tik.data) + + def updateoffsets(self): + self.offsets.update() + self._seek(0x2a4) + self.f.write(self.offsets.data) + + def showinfo(self,it=""): + print it+"Wii Partition at 0x%010x:"%(self.offset) + self.offsets.showinfo(" ") + self.tik.showinfo(it+" ") + self.tik.showsig(self.certs,it+" ") + self.tmd.showinfo(it+" ") + self.tmd.showsig(self.certs,it+" ") + if self.checkh4hash(): + print it+" H4 hash check passed" + else: + print it+" H4 check failed: SHA1(H3) = "+hexdump(self.geth4hash()) + print it+" Data:" + print it+" Blocks: %d"%self.data_blocks + print it+" Subgroups: %d (plus %d blocks)"%(self.data_subgroups,self.extra_subgroup_blocks) + print it+" Groups: %d (plus %d blocks)"%(self.data_groups,self.extra_group_blocks) + self.showcerts(it+" ") + + def showcerts(self,it=""): + print it+"Certificates: " + for cert in self.certlist: + cert.showinfo(it+" - ") + cert.showsig(self.certs,it+" ") + + def geth4hash(self): + return SHA.new(''.join(self.h3) + "\x00"*self.TAIL_H3).digest() + + def checkh4hash(self): + return self.geth4hash() == self.tmd.get_content_records()[0].sha + + def updateh3(self): + self._seek(self.offsets.h3_offset) + self.f.write(''.join(self.h3)) + + def updateh4(self): + cr = self.tmd.get_content_records()[0] + cr.sha = self.geth4hash() + self.tmd.update_content_record(0,cr) + self.updatetmd() + + def readc(self, start, length): + '''Read raw data from the partition''' + if (start + length) > self.offsets.data_size: + raise ValueError("Attempted to read past the end of the partition data") + if start < 0: + raise ValueError("start must be >= 0") + self.f.seek(self.data_offset + start) + return self.f.read(length) + + def readblockc(self, block): + '''Read a raw block (0x8000 bytes) from the partition''' + if block >= self.data_blocks: + raise ValueError("Attempted to read block past the end of the partition data") + if block < 0: + raise ValueError("block must be >= 0") + self.f.seek(self.data_offset + block * self.CIPHER_BLOCK_SIZE) + return self.f.read(self.CIPHER_BLOCK_SIZE) + + def readsubgroupc(self, subgroup): + '''Read a raw subgroup (0x40000 bytes) from the partition''' + if subgroup >= self.data_subgroups: + raise ValueError("Attempted to read subgroup past the end of the partition data") + if subgroup < 0: + raise ValueError("block must be >= 0") + self.f.seek(self.data_offset + subgroup * self.CIPHER_SUBGROUP_SIZE) + return self.f.read(self.CIPHER_SUBGROUP_SIZE) + + def readgroupc(self, group): + '''Read a raw group (0x200000 bytes) from the partition''' + if group >= self.data_groups: + raise ValueError("Attempted to read group past the end of the partition data") + if group < 0: + raise ValueError("block must be >= 0") + self.f.seek(self.data_offset + group * self.CIPHER_GROUP_SIZE) + return self.f.read(self.CIPHER_GROUP_SIZE) + + def read(self, start, length): + '''Read data from an arbitrary offset into the partition''' + if (start+length) > (self.data_blocks*self.PLAIN_BLOCK_SIZE): + raise ValueError("Attempted to read past the end of the partition data (0x%x + 0x%x)"%(start,length)) + if start < 0: + raise ValueError("start must be >= 0") + + bstart, bnum, hdroff, header, footer = toblocks(start, length, self.PLAIN_BLOCK_SIZE) + + if header: + data = self.readblock(bstart - 1)[hdroff:hdroff+header] + else: + data = "" + for block in xrangel(bstart, bnum): + data += self.readblock(block) + if footer: + data += self.readblock(bstart + bnum)[:footer] + return data + + def _check_hash_chain(self, blocknum, data, sha): + h0 = sha[:0x26c] + h1 = sha[0x280:0x320] + h2 = sha[0x340:0x3e0] + for i in range(self.DATA_CHUNKS_PER_BLOCK): + h0i = SHA.new(data[i*self.DATA_CHUNK_SIZE:(i+1)*self.DATA_CHUNK_SIZE]).digest() + if h0i != h0[i*20:(i+1)*20]: + raise HashError("Failed to verify data chunk %d against H0"%i,h0[i*20:(i+1)*20],h0i) + h1i = SHA.new(h0).digest() + rem,block = divmod(blocknum, self.BLOCKS_PER_SUBGROUP) + if h1i != h1[block*20:(block+1)*20]: + raise HashError("Failed to verify H0 %d against H1"%block,h1[block*20:(block+1)*20],h1i) + h2i = SHA.new(h1).digest() + group,subgroup = divmod(rem, self.SUBGROUPS_PER_GROUP) + if h2i != h2[subgroup*20:(subgroup+1)*20]: + raise HashError("Failed to verify H1 %d against H2"%subgroup,h2[subgroup*20:(subgroup+1)*20],h2i) + h3i = SHA.new(h2).digest() + if h3i != self.h3[group]: + raise HashError("Failed to verify H2 %d against H3"%group,self.h3[group],h3i) + + def _decrypt_block(self, block, blocknum): + if self.tik.title_key is None: + raise RuntimeError("Title key is missing (you probably don't have the common key)") + data_iv = block[0x3d0:0x3e0] + aes = AES.new(self.tik.title_key, AES.MODE_CBC, data_iv) + data = aes.decrypt(block[self.SHA_SIZE:]) + if self.checkhash: + aes = AES.new(self.tik.title_key, AES.MODE_CBC, NULL_IV) + shablock = aes.decrypt(block[:self.SHA_SIZE]) + self._check_hash_chain(blocknum, data, shablock) + return data + + def readblock(self, blocknum): + '''Read one block of data (0x7C00 bytes) from the partition''' + if blocknum >= self.data_blocks: + raise ValueError("Attempted to read block past the end of the partition data") + if blocknum < 0: + raise ValueError("blocknum must be >= 0") + + rawblock = self.readblockc(blocknum) + return self._decrypt_block(rawblock, blocknum) + + def readsubgroup(self, subgroupnum): + '''Read one subgroup of data (0x3E000 bytes) from the partition''' + if subgroupnum > self.data_subgroups : + raise ValueError("Attempted to read subgroup past the end of the partition data") + if subgroupnum < 0: + raise ValueError("subgroupnum must be >= 0") + + nblocks = self.BLOCKS_PER_SUBGROUP + blockoff = subgroupnum * self.BLOCKS_PER_SUBGROUP + if subgroupnum == self.data_subgroups: + if self.extra_subgroup_blocks != 0: + nblocks = self.extra_subgroup_blocks + blocknum = subgroupnum * self.BLOCKS_PER_SUBGROUP + else: + raise ValueError("Attempted to read subgroup past the end of the partition data") + + data = "" + for i in range(nblocks): + data += self.readblock(blockoff+i) + return data + + def readgroup(self, groupnum): + if groupnum > self.data_groups: + raise ValueError("Attempted to read group past the end of the partition data") + if groupnum < 0: + raise ValueError("groupnum must be >= 0") + + nblocks = self.BLOCKS_PER_GROUP + blockoff = groupnum * self.BLOCKS_PER_GROUP + if groupnum == self.data_groups: + if self.extra_group_blocks != 0: + nblocks = self.extra_group_blocks + blockoff = groupnum * self.BLOCKS_PER_GROUP + else: + raise ValueError("Attempted to read group past the end of the partition data") + + data = "" + for i in range(nblocks): + data += self.readblock(blockoff+i) + return data + + def writegroup(self, groupnum, data): + '''Write a group of data (0x1F0000 bytes) to the partition''' + + if self.tik.title_key is None: + raise RuntimeError("Title key is missing (you probably don't have the common key)") + + if groupnum >= self.data_groups: + # tolerate writing last incomplete group if data is of the right size + if groupnum == self.data_groups and self.extra_group_blocks > 0 and len(data) == (self.extra_group_blocks * self.PLAIN_BLOCK_SIZE): + blocks = self.extra_group_blocks + writesize = blocks * self.CIPHER_BLOCK_SIZE + data += "\x00" * (self.PLAIN_BLOCK_SIZE * self.BLOCKS_PER_GROUP - blocks) + else: + raise ValueError("Attempted to write group past the end of the partition data") + else: + blocks = self.BLOCKS_PER_GROUP + writesize = self.CIPHER_GROUP_SIZE + if len(data) != self.PLAIN_GROUP_SIZE: + raise ValueError("Data size must be equal to group size") + + h0 = [] + h1 = [] + h2 = "" + for subgroup in range(self.SUBGROUPS_PER_GROUP): + bh1 = "" + sh0 = [] + for block in range(self.BLOCKS_PER_SUBGROUP): + bh0 = "" + for chunk in range(self.DATA_CHUNKS_PER_BLOCK): + offset = subgroup * self.PLAIN_SUBGROUP_SIZE + block * self.PLAIN_BLOCK_SIZE + chunk * self.DATA_CHUNK_SIZE + bh0 += SHA.new(data[offset:offset+self.DATA_CHUNK_SIZE]).digest() + sh0.append(bh0) + bh1 += SHA.new(bh0).digest() + h0.append(sh0) + h1.append(bh1) + h2 += SHA.new(bh1).digest() + h3 = SHA.new(h2).digest() + + data_out = "" + for subgroup in range(self.SUBGROUPS_PER_GROUP): + for block in range(self.BLOCKS_PER_SUBGROUP): + shablock = "" + shablock += h0[subgroup][block] + shablock += "\x00"*20 + shablock += h1[subgroup] + shablock += "\x00"*32 + shablock += h2 + shablock += "\x00"*32 + assert len(shablock) == self.SHA_SIZE, "sha block size messed up" + aes = AES.new(self.tik.title_key, AES.MODE_CBC, NULL_IV) + shablock = aes.encrypt(shablock) + data_out += shablock + aes = AES.new(self.tik.title_key, AES.MODE_CBC, shablock[0x3d0:0x3e0]) + offset = subgroup * self.PLAIN_SUBGROUP_SIZE + block * self.PLAIN_BLOCK_SIZE + data_out += aes.encrypt(data[offset:offset+self.PLAIN_BLOCK_SIZE]) + + assert len(data_out) == self.CIPHER_GROUP_SIZE, "group size messed up" + + self.f.seek(self.data_offset + groupnum * self.CIPHER_GROUP_SIZE) + self.f.write(data_out[:writesize]) + + self.h3[groupnum] = h3 + + def write(self, start, data): + if (start+len(data)) > self.data_blocks*self.PLAIN_BLOCK_SIZE: + raise ValueError("Attempted to write past the end of the partition data") + if start < 0: + raise ValueError("start must be >= 0") + + gstart, gnum, hdroff, header, footer = toblocks(start, len(data), self.PLAIN_GROUP_SIZE) + + if header != 0: + g = self.readgroup(gstart-1) + g2 = g[:hdroff] + data[:header] + g[hdroff+header:] + assert len(g) == len(g2), "group length mismatch in header" + self.writegroup(gstart-1,g2) + for group in xrangel(gstart,gnum): + self.writegroup(group,data[header+self.PLAIN_GROUP_SIZE*group:header+self.PLAIN_GROUP_SIZE*(group+1)]) + if footer != 0: + g = self.readgroup(gstart+gnum) + g2 = data[header+self.PLAIN_GROUP_SIZE*gnum:] + g[footer:] + assert len(g) == len(g2), "group length mismatch in footer" + self.writegroup(gstart+gnum,g2) + + def update(self): + self.updateh3() + self.updateh4() + self.updatetmd() + self.updatetik() + +class CacheEntry: + def __init__(self, data, lastuse, dirty=False): + self.data = data + self.lastuse = lastuse + self.dirty = dirty + + def __repr__(self): + return "CacheEntry([0x%x bytes], %d, %s)"%(len(self.data),self.lastuse,repr(self.dirty)) + def __str__(self): + return repr(self) + +class WiiCachedPartition(WiiPartition): + def __init__(self, disc, number, checkhash = True, cachesize=16, debug=False): + WiiPartition.__init__(self, disc, number, checkhash) + self.cachesectors = cachesize * 32 + self.cache = {} + self.opnum = 0 + self.debug = debug + + def _dprint(self, s, *args): + if self.debug: + print s%tuple(args) + + def _readblock(self, blocknum): + self._dprint("_readblock(0x%x)",blocknum) + d=WiiPartition.readblock(self, blocknum) + self._dprint(" -> [0x%x]",len(d)) + return d + + def _flushgroup(self, groupno): + self._dprint("_flushgroup(0x%x)",groupno) + groupdata = "" + startblock = groupno * self.BLOCKS_PER_GROUP + if groupno == self.data_groups and self.extra_group_blocks > 0: + self._dprint(" Last group") + numblocks = self.extra_group_blocks + else: + numblocks = self.BLOCKS_PER_GROUP + self._dprint(" numblocks = 0x%x",numblocks) + for block in range(numblocks): + self._dprint(" block 0x%x",block+startblock) + if (block+startblock) in self.cache: + self._dprint(" in cache: %s",repr(self.cache[block+startblock])) + groupdata += self.cache[block+startblock].data + else: + self._dprint(" not in cache") + groupdata += self._readblock(block+startblock) + + self._dprint(" writegroup(0x%x, [0x%x])",groupno,len(groupdata)) + WiiPartition.writegroup(self, groupno, groupdata) + + for block in range(self.BLOCKS_PER_GROUP): + if (block+startblock) in self.cache: + self._dprint(" cache undirty: 0x%x",block+startblock) + self.cache[block+startblock].dirty = False + + def _freecache(self, num): + self._dprint("_freecache(%d)",num) + while (len(self.cache)+num) > self.cachesectors: + self._dprint(" want %d, have %d, freeing",num,self.cachesectors-len(self.cache)) + # dirty group lastops + groups = {} + for key in self.cache: + if self.cache[key].dirty: + grnum = key/self.BLOCKS_PER_GROUP + if grnum in groups: + groups[grnum] = max(groups[grnum], self.cache[key].lastuse) + else: + groups[grnum] = self.cache[key].lastuse + + lruop = self.opnum + lru = -1 + lrugroup = None + for key in self.cache: + # if dirty, return the lastop of the entire group + if self.cache[key].dirty: + groupno = key/self.BLOCKS_PER_GROUP + if groups[groupno] < lruop: + lru = key + lruop = groups[groupno] + lrugroup = groupno + # otherwise return the lastop of the sector only + else: + if self.cache[key].lastuse < lruop: + lrugroup = None + lru = key + lruop = self.cache[key].lastuse + self._dprint(" LRU cache entry: [0x%x, %d]: %s",lru,lruop,self.cache[lru]) + if lrugroup is not None: + self._dprint(" dirty, in group 0x%x",lrugroup) + # if not dirty, delete it and continue + if lrugroup is None: + del self.cache[lru] + continue + # otherwise flush entire group and try again + else: + self._flushgroup(lrugroup) + + def readblock(self, blocknum): + '''Read one block of data (0x7C00 bytes) from the partition''' + self._dprint("readblock(0x%x)",blocknum) + if blocknum >= self.data_blocks: + raise ValueError("Attempted to read block past the end of the partition data") + if blocknum < 0: + raise ValueError("blocknum must be >= 0") + + self.opnum += 1 + if blocknum in self.cache: + self._dprint(" cached: %s",self.cache[blocknum]) + self.cache[blocknum].lastuse = self.opnum + return self.cache[blocknum].data + else: + self._dprint(" not cached") + self._freecache(1) + decblock = self._readblock(blocknum) + self.cache[blocknum] = CacheEntry(decblock, self.opnum, False) + return decblock + + def writeblock(self, blocknum, data): + self._dprint("writeblock(0x%x,[0x%x])",blocknum, len(data)) + if self.tik.title_key is None: + raise RuntimeError("Title key is missing (you probably don't have the common key)") + + if blocknum >= self.data_blocks: + raise ValueError("Attempted to write block past the end of the partition data") + if blocknum < 0: + raise ValueError("blocknum must be >= 0") + if len(data) != self.PLAIN_BLOCK_SIZE: + raise ValueError("Data size must be equal to block size") + + self.opnum += 1 + + if blocknum not in self.cache: + self._dprint(" not in cache, freeing") + self._freecache(1) + self.cache[blocknum]=CacheEntry(data,self.opnum,True) + + # writegroup is not cached, since we already have the entire block + # but we update the cache, for stuff already in cache + def writegroup(self, groupnum, data): + self._dprint("writegroup(0x%x,[0x%x])",groupnum, len(data)) + self.opnum += 1 + WiiPartition.writegroup(self, groupnum, data) + + if groupnum == self.data_groups: + nblocks = self.extra_group_blocks + else: + nblocks = self.BLOCKS_PER_GROUP + + blockoff = groupnum * self.BLOCKS_PER_GROUP + self._dprint(" nblocks=0x%x",nblocks) + self._dprint(" blockoff=0x%x",blockoff) + for blockno in range(nblocks): + if (blockno+blockoff) in self.cache: + self._dprint(" updating cache entry for block 0x%x",blockno+blockoff) + self.cache[blockno+blockoff].data = data[blockno*self.PLAIN_BLOCK_SIZE:(1+blockno)*self.PLAIN_BLOCK_SIZE:] + self.cache[blockno+blockoff].lastuse = self.opnum + self.cache[blockno+blockoff].dirty = False + self._dprint(" --> %s",self.cache[blockno+blockoff]) + + def write(self, start, data): + '''Write data to an arbitrary offset into the partition''' + self._dprint("write(0x%x,[0x%x])",start, len(data)) + if (start+len(data)) > self.data_blocks*self.PLAIN_BLOCK_SIZE: + raise ValueError("Attempted to write past the end of the partition data") + if start < 0: + raise ValueError("start must be >= 0") + + bstart, bnum, hdroff, header, footer = toblocks(start, len(data), self.PLAIN_BLOCK_SIZE) + + self._dprint(" bstart=0x%x bnum=0x%x hdroff=0x%x header=0x%x footer=0x%x",bstart,bnum,hdroff,header,footer) + + if header: + hb = self.readblock(bstart - 1) + hb = hb[:hdroff] + data[:header] + hb[hdroff+header:] + self.writeblock(bstart - 1, hb) + for block in xrange(bnum): + self.writeblock(block+bstart, data[header+block*self.PLAIN_BLOCK_SIZE:header+(block+1)*self.PLAIN_BLOCK_SIZE]) + if footer: + fb = self.readblock(bstart+bnum) + df = data[header+bnum*self.PLAIN_BLOCK_SIZE:] + self._dprint(" df: [0x%x]",len(df)) + fb = df + fb[footer:] + self.writeblock(bstart + bnum, fb) + + def flush(self): + self._dprint("flush()") + # dirty groups + groups = [] + for key in self.cache: + if self.cache[key].dirty: + grnum = key/self.BLOCKS_PER_GROUP + if grnum not in groups: + groups.append(grnum) + for group in groups: + self._flushgroup(group) + +class WiiPartitionFile: + def __init__(self, part, offset=0, size=None): + self.part = part + self.pointer = 0 + self.offset = offset + if size is None: + self.size = part.data_bytes - offset + else: + self.size = size + def read(self, n=None): + leftn = self.size - self.pointer + if n is None: + n = leftn + if n > leftn: + n = leftn + if n < 0: + return "" + d = self.part.read(self.pointer + self.offset, n) + self.pointer += len(d) + return d + + def write(self, d): + self.part.write(self.pointer + self.offset,d) + self.pointer += len(d) + + def tell(self): + return self.pointer + + def seek(self, where, whence=0): + if whence == 1: + where += self.pointer + elif whence == 2: + where += self.size + elif whence == 0: + pass + else: + raise ValueError("Invalid value for whence: %d"%whence) + self.pointer = where + + def close(self): + self.part = None + +class WiiApploader: + def __init__(self, data): + self.date = getcstring(data[:0x10]) + self.entry, self.textsize, self.trailersize = unpack(">III",data[0x10:0x1c]) + self.text = data[0x20:0x20+self.textsize] + self.trailer = data[0x20+self.textsize:0x20+self.textsize+self.trailersize] + self.extrafooter = data[0x20+self.textsize+self.trailersize:] + + def showinfo(self, it=""): + print it+"Apploader:" + print it+" Date: %s"%self.date + print it+" Entrypoint: 0x%08x"%self.entry + print it+" Text size: 0x%x"%self.textsize + print it+" Trailer size: 0x%x"%self.trailersize + +class WiiPartitionData: + def __init__(self, partition): + self.part = partition + self.hdr = self.part.read(0, 0x440) + self.bi2 = self.part.read(0x440, 0x20) + + self.gamecode, self.maker, self.diskid, self.version, self.streaming, self.strbufsize = unpack(">4s2sBBBB",self.hdr[:10]) + self.magic = unpack(">I",self.hdr[0x18:0x1c])[0] + if self.magic != 0x5d1c9ea3: + raise RuntimeError("Not a Wii partition!") + + self.gamename = getcstring(self.part.read(0x20,0x60)) + + self.dbgoff, self.dbgaddr, self.rsvd1, self.doloff, self.fstoff, self.fstsize, self.fstmax, self.usrpos, self.usrlen, self.unk1, self.rsvd2 = unpack(">II24sIIIIIIII", self.hdr[0x400:0x440]) + self.fstoff *= 4 + self.fstsize *= 4 + self.doloff *= 4 + self.dbgoff *= 4 + + apphdr = self.part.read(0x2440,32) + appsiz, apptr = unpack(">II",apphdr[0x14:0x1c]) + self.apploadersize = align(appsiz + apptr,32) + 32 + self.apploader = WiiApploader(self.part.read(0x2440, self.apploadersize)) + + self.dolsize = 0x100 + dolhdr = self.part.read(self.doloff, 0x100) + for i in range(0,0x48,4): + self.dolsize += unpack(">I",dolhdr[0x90+i:0x94+i])[0] + self.dol = self.part.read(self.doloff, self.dolsize) + + fstd = self.part.read(self.fstoff,self.fstsize) + self.fst = WiiFST(fstd, wiigcm=True) + + def replacedol(self, dol): + if len(dol) > self.dolsize: + raise ValueError("dol must be smaller than preexisting dol") + self.dol = dol + self.part.write(self.doloff, dol) + def showinfo(self,it=""): + print it+"Partition data:" + print it+" Game Name: %s"%self.gamename + print it+" Offsets: DOL @ 0x%x [0x%x], Apploader @ 0x%x [0x%x], FST @ 0x%x [0x%x]"%(self.doloff, self.dolsize, 0x2440, self.apploadersize, self.fstoff, self.fstsize) + self.apploader.showinfo(it+" ") + print it+"FST:" + self.fst.show(it+" ") + +class FakeFile: + def __init__(self, data): + self.data = data + self.offset = 0 + def close(self): + pass + def flush(self): + pass + def write(self, data): + raise NotImplementedError("Writes not implemented") + def read(self, size=None): + if size is None: + return self.data[self.offset:] + r = self.data[self.offset:self.offset+size] + self.offset=min(len(self.data),self.offset+size) + def tell(self): + return self.offset + def seek(self, offset, whence=0): + if whence == 0: + pass + elif whence == 1: + offset += self.offset + elif whence == 2: + offset += len(self.data) + else: + raise ValueError("Invalid whence") + self.offset=max(0,min(len(self.data),offset)) + +class WiiWad: + def __init__(self, file, readonly = True): + self.ALIGNMENT = 0x40 + if readonly: + self.f = open(file, "rb") + else: + self.f = open(file, "r+b") + self.read_headers() + + def read_hdr(self): + + self.f.seek(0) + + hdr = unpack(">I2sHIIIIII",self.f.read(0x20)) + if hdr[0] != 0x20: + raise ValueError("Invalid header length!") + + self.hdr_len = hdr[0] + self.wadtype = hdr[1] + self.cert_len = hdr[3] + self.tik_len = hdr[5] + self.tmd_len = hdr[6] + self.data_len = hdr[7] + self.footer_len = hdr[8] + + falign(self.f, self.ALIGNMENT) + + def read_boot2hdr(self): + + self.ALIGNMENT = 0 + self.f.seek(0) + + hdr = unpack(">IHHIIIIII",self.f.read(0x20)) + if hdr[0] != 0x20: + raise ValueError("Invalid header length!") + + self.hdr_len = hdr[0] + self.wadtype = hdr[1] + self.cert_len = hdr[3] + self.tik_len = hdr[4] + self.tmd_len = hdr[5] + + self.f.seek(0,os.SEEK_END) + size = self.f.tell() + self.f.seek(0x20) + + self.data_len = size - 0x20 - self.tmd_len - self.tik_len - self.cert_len + self.data_off = align(0x20 + self.tmd_len + self.tik_len + self.cert_len, 0x40) + self.footer_len = 0 + + def read_headers(self): + self.data_off = None + + self.f.seek(4) + wt = self.f.read(2) + if wt == "\x00\x00": + self.read_boot2hdr() + else: + self.read_hdr() + + certdata = self.f.read(self.cert_len) + self.certlist = [] + self.certs = {} + while certdata != "": + cert = WiiCert(certdata) + self.certs[cert.name] = cert + self.certlist.append(cert) + certdata = certdata[align(len(cert.data),0x40):] + + falign(self.f, self.ALIGNMENT) + self.tik_offset = self.f.tell() + self.tik = WiiTik(self.f.read(self.tik_len)) + falign(self.f, self.ALIGNMENT) + self.tmd_offset = self.f.tell() + self.tmd = WiiTmd(self.f.read(self.tmd_len)) + falign(self.f, 0x40) + self.data_off = self.f.tell() + self.f.seek(self.data_len,1) + falign(self.f, self.ALIGNMENT) + self.footer = self.f.read(self.footer_len) + + def updatetmd(self): + self.f.seek(self.tmd_offset) + self.f.write(self.tmd.data) + def updatetik(self): + self.f.seek(self.tik_offset) + self.f.write(self.tik.data) + + def showinfo(self,it=""): + print it+"Wii Wad:" + print it+" Header 0x%x Type %s Certs 0x%x Tik 0x%x TMD 0x%x Data 0x%x @ 0x%x Footer 0x%x"%(self.hdr_len, repr(self.wadtype), self.cert_len, self.tik_len, self.tmd_len, self.data_len, self.data_off, self.footer_len) + self.tik.showinfo(it+" ") + self.tik.showsig(self.certs,it+" ") + self.tmd.showinfo(it+" ") + self.tmd.showsig(self.certs,it+" ") + allok=True + for ct in self.tmd.get_content_records(): + d = self.getcontent(ct.index) + sha = SHA.new(d).digest() + if sha != ct.sha: + print it+" SHA-1 for content %08x is invalid:"%ct.cid, hexdump(sha) + print it+" Expected:",hexdump(ct.sha) + allok=False + if allok: + print it+" All content SHA-1 hashes are valid" + self.showcerts(it+" ") + + def showcerts(self,it=""): + print it+"Certificates: " + for cert in self.certlist: + cert.showinfo(it+" - ") + cert.showsig(self.certs,it+" ") + + def getcontent(self, index, encrypted=False): + self.f.seek(self.data_off) + for ct in self.tmd.get_content_records(): + if ct.index == index: + data = self.f.read(align(ct.size,0x10)) + if encrypted: + return data + + iv = pack(">H",index)+"\x00"*14 + aes = AES.new(self.tik.title_key, AES.MODE_CBC, iv) + return aes.decrypt(data)[:ct.size] + + self.f.seek(ct.size,1) + falign(self.f, 0x40) + +class WiiWadMaker(WiiWad): + def __init__(self, file, tmd, tik, certs, footer, nandwad=False): + self.ALIGNMENT = 0x40 + self.tmd = tmd + self.tik = tik + self.certlist = certs + self.certs = {} + for cert in certs: + self.certs[cert.name] = cert + self.f = open(file, "wb") + self.hdr_len = 0x20 + self.cert_len = sum([len(c.data) for c in self.certlist]) + self.tmd_len = len(self.tmd.data) + self.tik_len = len(self.tik.data) + + # if boot2, set type to "ib" + if self.tmd.title_id == "\x00\x00\x00\x01\x00\x00\x00\x01": + if nandwad: + self.wadtype = 0 + self.ALIGNMENT = 0 + else: + self.wadtype = "ib" + else: + self.wadtype = "Is" + + self.data_len = 0 + self.footer = footer + self.footer_len = len(footer) + if self.wadtype == 0: + hdr = pack(">IHHIII12x",self.hdr_len, self.wadtype, 0xf00, self.cert_len, self.tik_len, self.tmd_len) + self.f.write(hdr) + else: + hdr = pack(">I2sHIIIIII",self.hdr_len, self.wadtype, 0, self.cert_len, 0, self.tik_len, self.tmd_len, self.data_len, self.footer_len) + self.f.write(hdr) + falign(self.f,self.ALIGNMENT) + for cert in self.certlist: + self.f.write(cert.data) + falign(self.f,self.ALIGNMENT) + self.tik_offset = self.f.tell() + self.f.write(self.tik.data) + falign(self.f,self.ALIGNMENT) + self.tmd_offset = self.f.tell() + self.f.write(self.tmd.data) + falign(self.f,0x40) + self.data_off = self.f.tell() + + def adddata(self, data, cid): + i = self.tmd.find_cr_by_cid(cid) + cr = self.tmd.get_content_records()[i] + cr.sha = SHA.new(data).digest() + cr.size = len(data) + self.tmd.update_content_record(i,cr) + if len(data)%16 != 0: + data += "\x00"*(16-len(data)%16) + falign(self.f,0x40) + iv = pack(">H",cr.index)+"\x00"*14 + aes = AES.new(self.tik.title_key, AES.MODE_CBC, iv) + self.f.write(aes.encrypt(data)) + falign(self.f,0x40) + + def adddata_encrypted(self, data): + if len(data)%16 != 0: + data += "\x00"*(16-len(data)%16) + falign(self.f,0x40) + self.f.write(data) + falign(self.f,0x40) + + def finish(self,pad=False): + self.data_end = self.f.tell() + self.data_len = self.data_end - self.data_off + falign(self.f,self.ALIGNMENT) + self.f.write(self.footer) + falign(self.f,self.ALIGNMENT) + self.f.truncate() + if pad: + self.f.write("\x00"*0x40) + self.updatetmd() + self.f.seek(0) + if self.wadtype == 0: + hdr = pack(">IHHIII12x",self.hdr_len, self.wadtype, 0xf00, self.cert_len, self.tik_len, self.tmd_len) + self.f.write(hdr) + else: + hdr = pack(">I2sHIIIIII",self.hdr_len, self.wadtype, 0, self.cert_len, 0, self.tik_len, self.tmd_len, self.data_len, self.footer_len) + self.f.write(hdr) + +class WiiLZSS: + TYPE_LZSS = 1 + def __init__(self, file, offset): + self.file = file + self.offset = offset + + self.file.seek(offset) + + hdr = unpack(">8 + self.compression_type = hdr>4 & 0xF + + if self.compression_type != self.TYPE_LZSS: + raise ValueError("Unsupported compression method %d"%self.compression_type) + + def uncompress(self): + dout = "" + + self.file.seek(self.offset + 0x4) + while len(dout) < self.uncompressed_length: + flags = unpack(">B",self.file.read(1))[0] + + for i in range(8): + if flags & 0x80: + info = unpack(">B",self.file.read(1))[0] + if (info>>4) == 1: + self.file.seek(-1, 1) + info = unpack(">L",self.file.read(4))[0] + num = ((info>>12)&0xffff) + 0x111 + elif (info>>4) == 0: + info = (info<<16) + unpack(">H", self.file.read(2))[0] + num = ((info>>12)&0xff) + 0x11 + else: + self.file.seek(-1, 1) + info = unpack(">H", self.file.read(2))[0] + num = ((info>>12)&0xf) + 0x1 + ptr = len(dout) - (info&0xfff) - 1 + for i in range(num): + dout += dout[ptr] + ptr+=1 + if len(dout) >= self.uncompressed_length: + break + else: + dout += self.file.read(1) + flags <<= 1 + if len(dout) >= self.uncompressed_length: + break + + self.data = dout + return self.data + +class WiiLZ77: + TYPE_LZ77 = 1 + def __init__(self, file, offset): + self.file = file + self.offset = offset + + self.file.seek(offset) + + hdr = unpack(">8 + self.compression_type = hdr>4 & 0xF + + if self.compression_type != self.TYPE_LZ77: + raise ValueError("Unsupported compression method %d"%self.compression_type) + + def uncompress(self): + dout = "" + + self.file.seek(self.offset + 0x4) + + while len(dout) < self.uncompressed_length: + flags = unpack(">B",self.file.read(1))[0] + + for i in range(8): + if flags & 0x80: + info = unpack(">H",self.file.read(2))[0] + num = 3 + ((info>>12)&0xF) + disp = info & 0xFFF + ptr = len(dout) - (info & 0xFFF) - 1 + for i in range(num): + dout += dout[ptr] + ptr+=1 + if len(dout) >= self.uncompressed_length: + break + else: + dout += self.file.read(1) + flags <<= 1 + if len(dout) >= self.uncompressed_length: + break + + self.data = dout + return self.data + +class WiiFSTFile: + def __init__(self, name=None, off=None, size=None): + self.name = name + self.off = off + self.size = size + def show(self, it=""): + print "%s%s @ 0x%x [0x%x]"%(it,self.name,self.off,self.size) + def generate(self, offset, stringoff, parent, dataoff, wiigcm=False): + stringdata = self.name + "\x00" + off = self.off+dataoff + if wiigcm: + off >>= 2 + entry = pack(">III", stringoff, off, self.size) + return (entry,stringdata) + +class WiiFSTDir: + def __init__(self, name=None, offset=0, data=None, stringtable=None, wiigcm=False): + if (data is None) != (stringtable is None): + raise ValueError("data and stringtable go together") + if data is not None: + self.load(data, stringtable, offset, wiigcm) + else: + self.entries = [] + if name is not None: + self.name = name + if self.name is None: + raise ValueError("No name specified") + def load(self, data, stringtable, offset, wiigcm=False): + etype, poff, nextoff = unpack(">III",data[:12]) + if (etype>>24) != 1: + raise ValueError("Entry is not a dir") + self.name = getcstring(stringtable[etype&0xFFFFFF:]) + if nextoff < offset: + raise ValueError("Negative directory size") + size = nextoff - offset + off = 1 + self.entries = [] + while off < size: + etype, a, b = unpack(">III",data[off*12:off*12+12]) + if (etype>>24) == 1: + self.entries.append(WiiFSTDir(None, off+offset, data[off*12:], stringtable, wiigcm)) + off = b-offset + elif (etype>>24) == 0: + if wiigcm: + a <<= 2 + self.entries.append(WiiFSTFile(getcstring(stringtable[etype&0xFFFFFF:]), a, b)) + off += 1 + else: + raise ValueError("Bad file/dir type: %d"%etype>>24) + if off != size: + raise ValueError("WTF") + def show(self, it=""): + if self.name == "": + print it+"/" + else: + print it+self.name+"/" + for i in self.entries: + i.show(it+self.name+"/") + def dump(self): + pass + def add(self,x): + self.entries.append(x) + def generate(self, offset, stringoff, parent, dataoff, wiigcm=False): + stringdata = self.name + "\x00" + myoff = offset + mysoff = stringoff + stringoff+=len(stringdata) + offset += 1 + subdata="" + for e in self.entries: + d, s = e.generate(offset, stringoff, myoff, dataoff, wiigcm) + offset += len(d)/12 + stringoff += len(s) + stringdata += s + subdata += d + entry = pack(">III", mysoff+0x1000000, parent, offset) + return (entry+subdata, stringdata) + +class WiiFST: + def __init__(self, data=None, wiigcm=False): + if data is not None: + self.load(data, wiigcm) + else: + self.root = WiiFSTDir('') + + def load(self, data, wiigcm=False): + size = unpack(">I",data[8:12])[0] + stringtable = data[size*12:] + self.root = WiiFSTDir('', 0, data, stringtable, wiigcm) + + def generate(self, dataoff=0, wiigcm=False): + d,s = self.root.generate(0,0,0,dataoff, wiigcm) + return d+s + + def show(self,it=""): + self.root.show(it) + +class WiiFSTBuilder: + def __init__(self,alignment=0,offset=0): + self.align=alignment + self.offset=offset + self.files = [] + self.offset = 0 + self.fst = WiiFST() + + def addfrom(self, path, fstdir=None): + if fstdir is None: + fstdir = self.fst.root + names = os.listdir(path) + names.sort() + for n in names: + self.add(fstdir, os.path.join(path,n)) + + def add(self, fstdir, path): + if os.path.isfile(path): + size = os.stat(path).st_size + if size != 0: + fstdir.add(WiiFSTFile(os.path.basename(path),self.offset,size)) + self.files.append(path) + else: + fstdir.add(WiiFSTFile(os.path.basename(path),0,0)) + self.offset = align(self.offset+size, self.align) + elif os.path.isdir(path): + d = WiiFSTDir(os.path.basename(path)) + self.addfrom(path,d) + fstdir.add(d) + else: + raise ValueError("Bad file: %s"%path) + diff --git a/pywii/README b/pywii/README new file mode 100644 index 0000000..34f5cb7 --- /dev/null +++ b/pywii/README @@ -0,0 +1,10 @@ +Python library to deal with Wii formats. + +Currently has decent support for discs, partitions (including +accessing the partition data using read() and write(), with +caching), wads, and the structures contained within (certs, +tiks, tmds, etc) + +Stuff may be broken. Some things are unfinished. + +It also makes breakfast. diff --git a/pywii/breakfast.py b/pywii/breakfast.py new file mode 100644 index 0000000..b072f3f --- /dev/null +++ b/pywii/breakfast.py @@ -0,0 +1,94 @@ +import zlib, time, base64, sys + +class WaffleBatter: + def __init__(self): + self.cooking_time = 100 + self.batter = "eNp9VbGu3DgM7PMVhBs2sq4VDnHKwxUu1DLehQhBxeukD7iPvyEl78tLXuJisbbJ4Qw5lIn+dJUfri+/i+n92Lbr70siblreWFLejtE/zQhHZpW4C+OGW0pKoWuOUvVb6VlG/DUtJAsO8tC3SGFkpvKUy19xyO0ynlHl54LhYEIpteTnyOmiIcwa9BHLGIzHWvFSN0D+lFwaFzyM2ks4NjaKdb04NujEPWe8NTV4SPohvSWvSe3IUsn4kkQ5V3DRt+JtQyNq7GiEUpT+nt84SnSZqBOtq+SqpZsAoq1K97fPEbWWCcUSXwjJyBvNoR7+rN3lht1nRNDEF2r7DIRTR3+RsT/PBRFsini0VHsPEL9bUSXAOTeBqO59RrDWv1yz1IkRKHXtVhVqJt0ydoz5VV9i9oxHTIYXEGz9tri8QKSZV8gfmcLggEqcJoO2nXcGXyR9ekL4uymiuyM50QNsDnYOdU0SrMHhnBy2iQgcmEPOd1GReXG5xB/JuQ9vG8LmiNpe50SDVZA+Z6/fIOsfG5K4jeRGuWwO8SbRsC3nPkkILVkHyySxLHzu8335niZKdeOidXST6IvDXI+bBHo/IdH6OjtpJNN/q720zAVjypwuZTcqhMK3j5ni7QWLr+zCzU4Mh9E9JarAcYc1GLKvPQHkGZ2crdlj/rUdfsyazZcTOXQtGI0ko3icBvh+/i19sUBOzbYxE/PUat1BEEV9a9xu+yN6Ns/W/sgJ22pGz07NpZUR7wjQ0OprQsoNp8lricDGqfpUL7o5KHc7SYrJNa9Emizkkr62l95ByOas/16rh+8zIHqpIiCCzuDbVrFl+oHIlGTxy97LJjgL8vJRGPOIKjciEEDkw3E4+649OhcIOpdRw8TzJt0qnOFHDi8IMMFpqTDUrFeC7ebJd+2Y5tQB+OsHQPrkyPaB6OksLkWEzb6lhIH5ONLIn309dBt31whH+WbXvtsv803g07orZaNeyudfMRx2v81bk9d9H/vr6mNX5i//A5YHk94=" + +class Waffle: + def __init__(self, waffle): + self.waffle = waffle + def display(self, file=sys.stdout): + file.write(self.waffle) + +class WaffleIron: + def __init__(self): + self.power = False + self.time = 0 + self.full = False + self.contents = False + pass + def switchPower(self, power): + self.power = power + def fill(self, contents): + if not self.power: + raise RuntimeError("Turn on the iron first!") + if not isinstance(contents, WaffleBatter): + raise ValueError("Iron can only be filled with batter!") + self.contents = contents + self.time = time.time() + return self.contents.cooking_time + def contentsAreCooked(self): + return time.time() > (self.time+self.contents.cooking_time) + def getTimeLeft(self): + return max(0,(self.time+self.contents.cooking_time) - time.time()) + def getContents(self): + if self.contentsAreCooked(): + batter = self.contents.batter + cookedbatter = zlib.decompress(base64.b64decode(batter)) + self.contents = Waffle(cookedbatter) + else: + raise RuntimeError("Waffle is not yet cooked!") + return self.contents + +class BreakfastType: + def __init__(self): + raise NotImplementedError("BreakfastType is abstract") + +class Waffles(BreakfastType): + def __init__(self): + pass + def make(self): + batter = WaffleBatter() + iron = WaffleIron() + iron.switchPower(True) + cooktime = iron.fill(batter) + cm, cs = divmod(cooktime,60) + if cm > 0: + print "Cooking time will be approximately %d minute%s and %d second%s"%(cm, 's'*(cm!=1), cs, 's'*(cs!=1)) + else: + print "Cooking time will be approximately %d second%s"%(cs, 's'*(cs!=1)) + while not iron.contentsAreCooked(): + left = iron.getTimeLeft() + m,s = divmod(left+0.99,60) + sys.stdout.write("%02d:%02d"%(m,s)) + sys.stdout.flush() + time.sleep(0.5) + sys.stdout.write("\x08"*5) + sys.stdout.flush() + print + waffle = iron.getContents() + iron.switchPower(False) + return waffle + +class BreakfastMaker: + preferredBreakfasts = {'bushing':Waffles} + def __init__(self): + pass + def makeBreakfastFor(self, user): + if not user in self.preferredBreakfasts: + raise ValueError("I don't know how to make breakfast for %s!"%user) + maker = self.preferredBreakfasts[user] + breakfast = maker().make() + return breakfast + +print "Breakfast Maker v0.2" +user = raw_input("Please enter your username: ") +maker = BreakfastMaker() +print "Making breakfast for %s..."%user +breakfast = maker.makeBreakfastFor(user) +print +print "Your breakfast is ready!" +print +breakfast.display() +print "\a" diff --git a/pywii/ecmodule/_ecmodule.c b/pywii/ecmodule/_ecmodule.c new file mode 100644 index 0000000..6294ee9 --- /dev/null +++ b/pywii/ecmodule/_ecmodule.c @@ -0,0 +1,248 @@ +// Copyright 2007,2008 Segher Boessenkool +// Copyright 2008 Hector Martin +// Licensed under the terms of the GNU GPL, version 2 +// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt +#include "Python.h" +#include + +typedef uint8_t u8; +typedef uint32_t u32; + +/* ----------------------------------------------------- */ + +static void elt_copy(u8 *d, const u8 *a) +{ + memcpy(d, a, 30); +} + +static void elt_zero(u8 *d) +{ + memset(d, 0, 30); +} + +static int elt_is_zero(const u8 *d) +{ + u32 i; + + for (i = 0; i < 30; i++) + if (d[i] != 0) + return 0; + + return 1; +} + +static void elt_add(u8 *d, const u8 *a, const u8 *b) +{ + u32 i; + + for (i = 0; i < 30; i++) + d[i] = a[i] ^ b[i]; +} + +static void elt_mul_x(u8 *d, const u8 *a) +{ + u8 carry, x, y; + u32 i; + + carry = a[0] & 1; + + x = 0; + for (i = 0; i < 29; i++) { + y = a[i + 1]; + d[i] = x ^ (y >> 7); + x = y << 1; + } + d[29] = x ^ carry; + + d[20] ^= carry << 2; +} + +static void elt_mul(u8 *d, const u8 *a, const u8 *b) +{ + u32 i, n; + u8 mask; + + elt_zero(d); + + i = 0; + mask = 1; + for (n = 0; n < 233; n++) { + elt_mul_x(d, d); + + if ((a[i] & mask) != 0) + elt_add(d, d, b); + + mask >>= 1; + if (mask == 0) { + mask = 0x80; + i++; + } + } +} + +static const u8 square[16] = + "\x00\x01\x04\x05\x10\x11\x14\x15\x40\x41\x44\x45\x50\x51\x54\x55"; + +static void elt_square_to_wide(u8 *d, const u8 *a) +{ + u32 i; + + for (i = 0; i < 30; i++) { + d[2*i] = square[a[i] >> 4]; + d[2*i + 1] = square[a[i] & 15]; + } +} + +static void wide_reduce(u8 *d) +{ + u32 i; + u8 x; + + for (i = 0; i < 30; i++) { + x = d[i]; + + d[i + 19] ^= x >> 7; + d[i + 20] ^= x << 1; + + d[i + 29] ^= x >> 1; + d[i + 30] ^= x << 7; + } + + x = d[30] & ~1; + + d[49] ^= x >> 7; + d[50] ^= x << 1; + + d[59] ^= x >> 1; + + d[30] &= 1; +} + +static void elt_square(u8 *d, const u8 *a) +{ + u8 wide[60]; + + elt_square_to_wide(wide, a); + wide_reduce(wide); + + elt_copy(d, wide + 30); +} + +static void itoh_tsujii(u8 *d, const u8 *a, const u8 *b, u32 j) +{ + u8 t[30]; + + elt_copy(t, a); + while (j--) { + elt_square(d, t); + elt_copy(t, d); + } + + elt_mul(d, t, b); +} + +static void elt_inv(u8 *d, const u8 *a) +{ + u8 t[30]; + u8 s[30]; + + itoh_tsujii(t, a, a, 1); + itoh_tsujii(s, t, a, 1); + itoh_tsujii(t, s, s, 3); + itoh_tsujii(s, t, a, 1); + itoh_tsujii(t, s, s, 7); + itoh_tsujii(s, t, t, 14); + itoh_tsujii(t, s, a, 1); + itoh_tsujii(s, t, t, 29); + itoh_tsujii(t, s, s, 58); + itoh_tsujii(s, t, t, 116); + elt_square(d, s); +} + +/* ----------------------------------------------------- */ + +static PyObject * +_ec_elt_mul(PyObject *self /* Not used */, PyObject *args) +{ + const char *a, *b; + char d[30]; + int la, lb; + if (!PyArg_ParseTuple(args, "s#s#", &a, &la, &b, &lb)) + return NULL; + + if(la != 30 || lb != 30) { + PyErr_SetString(PyExc_ValueError, "ELT lengths must be 30"); + return NULL; + } + elt_mul(d,a,b); + return Py_BuildValue("s#", d, 30); +} + +static PyObject * +_ec_elt_inv(PyObject *self /* Not used */, PyObject *args) +{ + const char *a; + char d[30]; + int la; + + if (!PyArg_ParseTuple(args, "s#", &a, &la)) + return NULL; + + if(la != 30) { + PyErr_SetString(PyExc_ValueError, "ELT length must be 30"); + return NULL; + } + elt_inv(d,a); + return Py_BuildValue("s#", d, 30); +} + +static PyObject * +_ec_elt_square(PyObject *self /* Not used */, PyObject *args) +{ + const char *a; + char d[30]; + int la; + + if (!PyArg_ParseTuple(args, "s#", &a, &la)) + return NULL; + + if(la != 30) { + PyErr_SetString(PyExc_ValueError, "ELT length must be 30"); + return NULL; + } + elt_square(d,a); + return Py_BuildValue("s#", d, 30); +} + +/* List of methods defined in the module */ + +static struct PyMethodDef _ec_methods[] = { + {"elt_mul", (PyCFunction)_ec_elt_mul, METH_VARARGS, "Multiply two ELTs"}, + {"elt_inv", (PyCFunction)_ec_elt_inv, METH_VARARGS, "Take the inverse of an ELT"}, + {"elt_square", (PyCFunction)_ec_elt_square, METH_VARARGS, "Efficiently square an ELT"}, + + {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */ +}; + + +/* Initialization function for the module (*must* be called init_ec) */ + +static char _ec_module_documentation[] = +"Faster C versions of some ELT functions" +; + +void +init_ec() +{ + PyObject *m, *d; + + /* Create the module and add the functions */ + m = Py_InitModule4("_ec", _ec_methods, + _ec_module_documentation, + (PyObject*)NULL,PYTHON_API_VERSION); + + /* Check for errors */ + if (PyErr_Occurred()) + Py_FatalError("can't initialize module _ec"); +} + diff --git a/pywii/ecmodule/setup.py b/pywii/ecmodule/setup.py new file mode 100644 index 0000000..2896642 --- /dev/null +++ b/pywii/ecmodule/setup.py @@ -0,0 +1,9 @@ +from distutils.core import setup, Extension + +module1 = Extension('_ec', + sources = ['_ecmodule.c']) + +setup (name = 'ELT_C', + version = '0.1', + description = 'C ELT functions', + ext_modules = [module1]) \ No newline at end of file diff --git a/pywii/pywii-tools/addhash.py b/pywii/pywii-tools/addhash.py new file mode 100755 index 0000000..1c41b44 --- /dev/null +++ b/pywii/pywii-tools/addhash.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +import sys +import re +import pywii as wii + +hash = wii.SHA.new(open(sys.argv[2]).read()).digest().encode("hex") +f = open(sys.argv[1], "r") +data = f.read() +f.close() +data = re.sub('@SHA1SUM@', hash, data) +open(sys.argv[3], "w").write(data) diff --git a/pywii/pywii-tools/arclist.py b/pywii/pywii-tools/arclist.py new file mode 100755 index 0000000..e9330d3 --- /dev/null +++ b/pywii/pywii-tools/arclist.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +import sys, os, os.path, struct +import pywii as wii + +arc = open(sys.argv[1], "rb") + +tag, fstoff, fstsize, dataoff = struct.unpack(">IIII16x",arc.read(0x20)) + +arc.seek(fstoff) +fst = arc.read(fstsize) + +fst = wii.WiiFST(fst) + +fst.show() diff --git a/pywii/pywii-tools/arcpack.py b/pywii/pywii-tools/arcpack.py new file mode 100755 index 0000000..a28803e --- /dev/null +++ b/pywii/pywii-tools/arcpack.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +import sys, os, os.path, struct +import pywii as wii + +fstb = wii.WiiFSTBuilder(0x20) + +fstb.addfrom(sys.argv[2]) + +arc = open(sys.argv[1],"wb") +# dummy generate to get length +fstlen = len(fstb.fst.generate()) +dataoff = wii.align(0x20+fstlen,0x20) +fst = fstb.fst.generate(dataoff) + +hdr = struct.pack(">IIII16x",0x55AA382d,0x20,fstlen,dataoff) +arc.write(hdr) + +arc.write(fst) +wii.falign(arc,0x20) +for f in fstb.files: + data = open(f, "rb").read() + arc.write(data) + wii.falign(arc,0x20) + +arc.close() diff --git a/pywii/pywii-tools/certinfo.py b/pywii/pywii-tools/certinfo.py new file mode 100755 index 0000000..3d93844 --- /dev/null +++ b/pywii/pywii-tools/certinfo.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +args = sys.argv[1:] + +if args[0] == "-dpki": + wii.loadkeys_dpki() + args.pop(0) +else: + wii.loadkeys() + +certfile = args.pop(0) + +certs, certlist = wii.parse_certs(open(args.pop(0), "rb").read()) + +print "Certification file %s: " % certfile +cert = wii.WiiCert(open(certfile, "rb").read()) +cert.showinfo(" ") +cert.showsig(certs," ") + +print "Certificates:" +for cert in certlist: + cert.showinfo(" - ") + cert.showsig(certs," ") diff --git a/pywii/pywii-tools/discinfo.py b/pywii/pywii-tools/discinfo.py new file mode 100755 index 0000000..ae447e3 --- /dev/null +++ b/pywii/pywii-tools/discinfo.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +isofile = sys.argv[1] +disc = wii.WiiDisc(isofile,readonly=True) +disc.showinfo() + +partitions = disc.read_partitions() + +parts = range(len(partitions)) + +try: + pnum = int(sys.argv[2]) + partitions[pnum] + parts = [pnum] +except: + pass + +for partno in parts: + part = wii.WiiCachedPartition(disc,partno) + part.showinfo() + pdat = wii.WiiPartitionData(part) + pdat.showinfo() + diff --git a/pywii/pywii-tools/dpkisign.py b/pywii/pywii-tools/dpkisign.py new file mode 100755 index 0000000..2c0a2b8 --- /dev/null +++ b/pywii/pywii-tools/dpkisign.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii + +pywii.loadkeys_dpki() + +args = sys.argv[1:] +mode = args.pop(0) +infile = args.pop(0) +outfile = args.pop(0) +certfile = args.pop(0) +issuer = args.pop(0) + +if sys.argv[1] == "-cetk": + signed = pywii.WiiTik(open(infile, "rb").read()) +elif sys.argv[1] == "-tmd": + signed = pywii.WiiTmd(open(infile, "rb").read()) +else: + print "EYOUFAILIT" + sys.exit(1) + +certs, certlist = pywii.parse_certs(open(certfile).read()) + +signed.update_issuer(issuer) + +if not signed.sign(certs): + print "dpki signing failed" + sys.exit(1) + +open(outfile, "wb").write(signed.data) + +print "successfully signed %s" % outfile +sys.exit(0) + diff --git a/pywii/pywii-tools/ecchecksig.py b/pywii/pywii-tools/ecchecksig.py new file mode 100755 index 0000000..4fe78f2 --- /dev/null +++ b/pywii/pywii-tools/ecchecksig.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +import sys +import pywii as wii + +if len(sys.argv) != 3: + print "Usage: %s keyfile.[priv|pub] infile"%sys.argv[0] + sys.exit(1) + +if sys.argv[1] == "-": + k = sys.stdin.read() +else: + k = open(sys.argv[1],"rb").read() +if len(k) not in (30,60): + print "Failed to read key" + sys.exit(2) + +if len(k) == 30: + print "Key is a private key, generating public key..." + q = wii.ec.priv_to_pub(k) +else: + q = k + +print "Public key:" +pq = q.encode('hex') +print "X =",pq[:30] +print " ",pq[30:60] +print "Y =",pq[60:90] +print " ",pq[90:] +print + +indata = open(sys.argv[2],"rb").read() + +if len(indata) < 64 or indata[:4] != "SIG0": + print "Invalid header" + sys.exit(3) + +r = indata[4:34] +s = indata[34:64] + +sha = wii.SHA.new(indata[64:]).digest() +print "SHA1: %s"%sha.encode('hex') + +print +print "Signature:" +print "R =",r[:15].encode('hex') +print " ",r[15:].encode('hex') +print "S =",s[:15].encode('hex') +print " ",s[15:].encode('hex') +print + +if wii.ec.check_ecdsa(q,r,s,sha): + print "Signature is VALID" +else: + print "Signature is INVALID" + sys.exit(4) + diff --git a/pywii/pywii-tools/ecgenpriv.py b/pywii/pywii-tools/ecgenpriv.py new file mode 100755 index 0000000..b4d9dbf --- /dev/null +++ b/pywii/pywii-tools/ecgenpriv.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +import sys, os +import pywii as wii + +if len(sys.argv) != 2: + print "Usage: %s keyfile.priv"%sys.argv[0] + sys.exit(1) + +print "Generating private key..." + +k = wii.ec.gen_priv_key() + +print "Private key:" +pk = k.encode('hex') +print "K =",pk[:30] +print " ",pk[30:] + +print +print "Corresponding public key:" +q = wii.ec.priv_to_pub(k) +pq = q.encode('hex') +print "X =",pq[:30] +print " ",pq[30:60] +print "Y =",pq[60:90] +print " ",pq[90:] + +fd = open(sys.argv[1],"wb") +os.fchmod(fd.fileno(), 0o600) +fd.write(k) +fd.close() + +print "Saved private key to %s"%sys.argv[1] diff --git a/pywii/pywii-tools/ecpriv2pub.py b/pywii/pywii-tools/ecpriv2pub.py new file mode 100755 index 0000000..8981b47 --- /dev/null +++ b/pywii/pywii-tools/ecpriv2pub.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +import sys +import pywii as wii + +if len(sys.argv) not in (2,3): + print "Usage: %s keyfile.priv [keyfile.pub]"%sys.argv[0] + sys.exit(1) + +if sys.argv[1] == "-": + k = sys.stdin.read() +else: + k = open(sys.argv[1],"rb").read() +if len(k) != 30: + print "Failed to read private key" + sys.exit(2) + +print "Public key:" +q = wii.ec.priv_to_pub(k) +pq = q.encode('hex') +print "X =",pq[:30] +print " ",pq[30:60] +print "Y =",pq[60:90] +print " ",pq[90:] + +if len(sys.argv) == 3: + fd = open(sys.argv[2],"wb") + fd.write(q) + fd.close() + print "Saved public key to %s"%sys.argv[2] diff --git a/pywii/pywii-tools/ecsign.py b/pywii/pywii-tools/ecsign.py new file mode 100755 index 0000000..1209dfd --- /dev/null +++ b/pywii/pywii-tools/ecsign.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +import sys +import pywii as wii + +if len(sys.argv) != 4: + print "Usage: %s keyfile.priv infile outfile"%sys.argv[0] + sys.exit(1) + +if sys.argv[1] == "-": + k = sys.stdin.read() +else: + k = open(sys.argv[1],"rb").read() + +if len(k) != 30: + print "Failed to read private key" + sys.exit(2) + +indata = open(sys.argv[2],"rb").read() +sha = wii.SHA.new(indata).digest() + +print "SHA1: %s"%sha.encode('hex') +print +print "Signature:" +r,s = wii.ec.generate_ecdsa(k,sha) +print "R =",r[:15].encode('hex') +print " ",r[15:].encode('hex') +print "S =",s[:15].encode('hex') +print " ",s[15:].encode('hex') + +outdata = "SIG0" + r + s + indata + +fd = open(sys.argv[3],"wb") +fd.write(outdata) +fd.close() diff --git a/pywii/pywii-tools/extract.py b/pywii/pywii-tools/extract.py new file mode 100755 index 0000000..7944007 --- /dev/null +++ b/pywii/pywii-tools/extract.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +def parseint(d): + if len(d) > 2 and d[0:2].lower()=='0x': + return int(d,16) + return int(d) + +if len(sys.argv) < 4 or len(sys.argv) > 7: + print "Usage:" + print " python %s [Partition offset] [length]"%sys.argv[0] + sys.exit(1) + +iso_name, partno, data_name = sys.argv[1:4] +partno = int(partno) +part_offset = 0 +data_offset = 0 +copy_length = None + +if len(sys.argv) >= 5: + part_offset = parseint(sys.argv[4]) +if len(sys.argv) == 6: + copy_length = parseint(sys.argv[5]) + +if copy_length is not None and copy_length < 0: + print "Error: negative copy length" + sys.exit(1) + +disc = wii.WiiDisc(iso_name) +disc.showinfo() +part = wii.WiiCachedPartition(disc, partno, cachesize=32, debug=False, checkhash=False) +if part_offset >= part.data_bytes: + print "Error: Offset past end of partition" + sys.exit(1) +if copy_length is None: + copy_length = part.data_bytes - part_offset +if copy_length > (part.data_bytes - part_offset): + print "Error: Length too large" + sys.exit(1) + +dataf = open(data_name, "wb") +left = copy_length +offset = part_offset +while left > 0: + blocklen = min(left, 4*1024*1024) + d = part.read(offset, blocklen) + if len(d) != blocklen: + print "Part EOF reached!" + sys.exit(1) + dataf.write(d) + offset += blocklen + left -= blocklen + +dataf.close() + diff --git a/pywii/pywii-tools/extractdol.py b/pywii/pywii-tools/extractdol.py new file mode 100755 index 0000000..b7b7c4f --- /dev/null +++ b/pywii/pywii-tools/extractdol.py @@ -0,0 +1,26 @@ +#!/usr/bin/python + +import sys, os, os.path +sys.path.append(os.path.realpath(os.path.dirname(sys.argv[0]))+"/../Common") +import pywii as wii + +wii.loadkeys(os.environ["HOME"]+os.sep+".wii") + +if len(sys.argv) != 4: + print "Usage:" + print " python %s "%sys.argv[0] + sys.exit(1) + +iso_name, partno, dol_name = sys.argv[1:4] +partno = int(partno) + +disc = wii.WiiDisc(iso_name) +disc.showinfo() +part = wii.WiiCachedPartition(disc, partno, cachesize=32, debug=False) +partdata = wii.WiiPartitionData(part) + +dolf = open(dol_name, "wb") +dolf.write(partdata.dol) +dolf.close() + + diff --git a/pywii/pywii-tools/extractfiles.py b/pywii/pywii-tools/extractfiles.py new file mode 100644 index 0000000..f7d8f73 --- /dev/null +++ b/pywii/pywii-tools/extractfiles.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +def parseint(d): + if len(d) > 2 and d[0:2].lower()=='0x': + return int(d,16) + return int(d) + +if len(sys.argv) < 4 or len(sys.argv) > 7: + print "Usage:" + print " python %s "%sys.argv[0] + sys.exit(1) + +iso_name, partno, data_name = sys.argv[1:4] +partno = int(partno) +part_offset = 0 +data_offset = 0 +copy_length = None + +if len(sys.argv) >= 5: + part_offset = parseint(sys.argv[4]) +if len(sys.argv) == 6: + copy_length = parseint(sys.argv[5]) + +if copy_length is not None and copy_length < 0: + print "Error: negative copy length" + sys.exit(1) + +disc = wii.WiiDisc(iso_name) +disc.showinfo() +part = wii.WiiCachedPartition(disc, partno, cachesize=32, debug=False, checkhash=False) +if part_offset >= part.data_bytes: + print "Error: Offset past end of partition" + sys.exit(1) +if copy_length is None: + copy_length = part.data_bytes - part_offset +if copy_length > (part.data_bytes - part_offset): + print "Error: Length too large" + sys.exit(1) + +dataf = open(data_name, "wb") +left = copy_length +offset = part_offset +while left > 0: + blocklen = min(left, 4*1024*1024) + d = part.read(offset, blocklen) + if len(d) != blocklen: + print "Part EOF reached!" + sys.exit(1) + dataf.write(d) + offset += blocklen + left -= blocklen + +dataf.close() + diff --git a/pywii/pywii-tools/getappldr.py b/pywii/pywii-tools/getappldr.py new file mode 100755 index 0000000..602abf4 --- /dev/null +++ b/pywii/pywii-tools/getappldr.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +if len(sys.argv) != 5: + print "Usage:" + print " python %s "%sys.argv[0] + sys.exit(1) + +iso_name, partno, app_name, trail_name = sys.argv[1:5] +partno = int(partno) + +disc = wii.WiiDisc(iso_name) +disc.showinfo() +part = wii.WiiCachedPartition(disc, partno, cachesize=32, debug=False) +partdata = wii.WiiPartitionData(part) + +apploader = partdata.apploader +apploader.showinfo() +open(app_name,"wb").write(apploader.text) +open(trail_name,"wb").write(apploader.trailer) diff --git a/pywii/pywii-tools/inject.py b/pywii/pywii-tools/inject.py new file mode 100755 index 0000000..d489e30 --- /dev/null +++ b/pywii/pywii-tools/inject.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +def parseint(d): + if len(d) > 2 and d[0:2].lower()=='0x': + return int(d,16) + return int(d) + +if len(sys.argv) < 4 or len(sys.argv) > 7: + print "Usage:" + print " python %s [Partition offset] [data offset] [length]"%sys.argv[0] + sys.exit(1) + +iso_name, partno, data_name = sys.argv[1:4] +partno = int(partno) +part_offset = 0 +data_offset = 0 +copy_length = None + +if len(sys.argv) >= 5: + part_offset = parseint(sys.argv[4]) +if len(sys.argv) >= 6: + data_offset = parseint(sys.argv[5]) +if len(sys.argv) == 7: + copy_length = parseint(sys.argv[6]) + +data_len = os.stat(data_name).st_size + +if copy_length == None: + copy_length = data_len - data_offset +copy_end = data_offset + copy_length +if copy_length < 0: + print "Error: negative copy length" + sys.exit(1) +if copy_end > data_len: + print "Error: data file is too small" + sys.exit(1) + +disc = wii.WiiDisc(iso_name) +disc.showinfo() +part = wii.WiiCachedPartition(disc, partno, cachesize=32, debug=False, checkhash=False) + +dataf = open(data_name, "rb") +dataf.seek(data_offset) +left = copy_length +offset = part_offset +while left > 0: + blocklen = min(left, 4*1024*1024) + d = dataf.read(blocklen) + if len(d) != blocklen: + print "File EOF reached!" + sys.exit(1) + part.write(offset, d) + offset += blocklen + left -= blocklen + +part.flush() +part.update() +part.tmd.null_signature() +part.tmd.brute_sha() +part.updatetmd() + + + diff --git a/pywii/pywii-tools/injectdol.py b/pywii/pywii-tools/injectdol.py new file mode 100755 index 0000000..d06ebde --- /dev/null +++ b/pywii/pywii-tools/injectdol.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +if len(sys.argv) != 4: + print "Usage:" + print " python %s "%sys.argv[0] + sys.exit(1) + +iso_name, partno, dol_name = sys.argv[1:4] +partno = int(partno) + +doldata = open(dol_name, "rb").read() + +disc = wii.WiiDisc(iso_name) +disc.showinfo() +part = wii.WiiCachedPartition(disc, partno, cachesize=32, debug=False) +partdata = wii.WiiPartitionData(part) +partdata.replacedol(doldata) + +part.flush() +part.update() +part.tmd.null_signature() +part.tmd.brute_sha() +part.updatetmd() +part.showinfo() + + diff --git a/pywii/pywii-tools/partsetios.py b/pywii/pywii-tools/partsetios.py new file mode 100755 index 0000000..f2c81dd --- /dev/null +++ b/pywii/pywii-tools/partsetios.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +if len(sys.argv) != 4: + print "Usage:" + print " python %s "%sys.argv[0] + print " IOS version should be just the minor number (16, 33, etc) in decimal" + sys.exit(1) + +iso_name, partno, ios = sys.argv[1:4] +partno = int(partno) +iosno = int(ios) + +disc = wii.WiiDisc(iso_name) +disc.showinfo() +part = wii.WiiCachedPartition(disc, partno, cachesize=32, debug=False) +part.tmd.sys_version = 0x100000000 + iosno +part.tmd.update() +part.tmd.null_signature() +part.tmd.brute_sha() +part.updatetmd() +part.showinfo() + + diff --git a/pywii/pywii-tools/pywii b/pywii/pywii-tools/pywii new file mode 120000 index 0000000..51fbba6 --- /dev/null +++ b/pywii/pywii-tools/pywii @@ -0,0 +1 @@ +../Common/pywii \ No newline at end of file diff --git a/pywii/pywii-tools/rsapatch.py b/pywii/pywii-tools/rsapatch.py new file mode 100755 index 0000000..75a9a6c --- /dev/null +++ b/pywii/pywii-tools/rsapatch.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +def hexdump(s): + return ' '.join(map(lambda x: "%02x"%x,map(ord,s))) + +isofile = sys.argv[1] +disc = WiiDisc(isofile) +disc.showinfo() +part = WiiPartition(disc,int(sys.argv[2])) +part.showinfo() + +part.tmd.update_signature(file("signthree.bin").read()) +part.tmd.brute_sha() +part.updatetmd() + +part.showinfo() + diff --git a/pywii/pywii-tools/saveinfo.py b/pywii/pywii-tools/saveinfo.py new file mode 100755 index 0000000..ba64b30 --- /dev/null +++ b/pywii/pywii-tools/saveinfo.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +savefile = sys.argv[1] +save = wii.WiiSave(savefile) +save.showcerts() diff --git a/pywii/pywii-tools/tikfix.py b/pywii/pywii-tools/tikfix.py new file mode 100755 index 0000000..e790efe --- /dev/null +++ b/pywii/pywii-tools/tikfix.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +tikfile = sys.argv[1] +print "fixing Tik file %s " % tikfile +tik = wii.WiiTik(open(tikfile, "rb").read()) +tik.null_signature() +tik.brute_sha() +tik.update() +f = open(tikfile,"wb") +f.write(tik.data) +f.close() + diff --git a/pywii/pywii-tools/tikinfo.py b/pywii/pywii-tools/tikinfo.py new file mode 100755 index 0000000..8fe7ac3 --- /dev/null +++ b/pywii/pywii-tools/tikinfo.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +args = sys.argv[1:] + +if args[0] == "-dpki": + wii.loadkeys_dpki() + args.pop(0) +else: + wii.loadkeys() + +tikfile = args.pop(0) + +certs = None +if len(args) > 0: + certs, certlist = wii.parse_certs(open(args.pop(0), "rb").read()) + +print "ETicket file %s:"%tikfile +tik = wii.WiiTik(open(tikfile, "rb").read()) +tik.showinfo(" ") +if certs is not None: + tik.showsig(certs," ") + print "Certificates:" + for cert in certlist: + cert.showinfo(" - ") + cert.showsig(certs," ") diff --git a/pywii/pywii-tools/tmdfix.py b/pywii/pywii-tools/tmdfix.py new file mode 100755 index 0000000..0258f5f --- /dev/null +++ b/pywii/pywii-tools/tmdfix.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +tmdfile = sys.argv[1] +print "TMD file %s:"%tmdfile +tmd = wii.WiiTmd(open(tmdfile, "rb").read()) +tmd.null_signature() +tmd.brute_sha() +tmd.update() +tmd.parse() +tmd.showinfo(" ") +f = open(tmdfile,"wb") +f.write(tmd.data) +f.close() diff --git a/pywii/pywii-tools/tmdinfo.py b/pywii/pywii-tools/tmdinfo.py new file mode 100755 index 0000000..abcc30b --- /dev/null +++ b/pywii/pywii-tools/tmdinfo.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +args = sys.argv[1:] + +if args[0] == "-dpki": + wii.loadkeys_dpki() + args.pop(0) +else: + wii.loadkeys() + +tmdfile = args.pop(0) + +certs = None +if len(args) > 0: + certs, certlist = wii.parse_certs(open(args.pop(0), "rb").read()) + +print "TMD file %s:"%tmdfile +tmd = wii.WiiTmd(open(tmdfile, "rb").read()) +tmd.showinfo(" ") +if certs is not None: + tmd.showsig(certs," ") + print "Certificates:" + for cert in certlist: + cert.showinfo(" - ") + cert.showsig(certs," ") diff --git a/pywii/pywii-tools/tmdupdatecr.py b/pywii/pywii-tools/tmdupdatecr.py new file mode 100755 index 0000000..3359d45 --- /dev/null +++ b/pywii/pywii-tools/tmdupdatecr.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii +from Crypto.Hash import SHA + +wii.loadkeys() + +args = sys.argv[1:] + +tmdfile = args.pop(0) +indir = args.pop(0) + +print "updating content records of TMD file %s" % tmdfile +tmd = wii.WiiTmd(open(tmdfile, "rb").read()) + +for i, cr in enumerate(tmd.get_content_records()): + data = open(os.path.join(indir, "%08X" % cr.cid), "rb").read() + cr.sha = SHA.new(data).digest() + cr.size = len(data) + tmd.update_content_record(i, cr) + +tmd.null_signature() +tmd.brute_sha() +tmd.update() +f = open(tmdfile, "wb") +f.write(tmd.data) +f.close() + diff --git a/pywii/pywii-tools/tmdvers.py b/pywii/pywii-tools/tmdvers.py new file mode 100755 index 0000000..9863b6a --- /dev/null +++ b/pywii/pywii-tools/tmdvers.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +args = sys.argv[1:] + +tmdfile = args.pop(0) + +if len(args) == 2: + newvers = int(args.pop(0)) << 8 | int(args.pop(0)) +else: + newvers = int(args.pop(0), 16) + +print "setting version of TMD file %s to 0x%04x" % (tmdfile, newvers) +tmd = wii.WiiTmd(open(tmdfile, "rb").read()) +tmd.title_version = newvers +tmd.update() +f = open(tmdfile,"wb") +f.write(tmd.data) +f.close() diff --git a/pywii/pywii-tools/wadinfo.py b/pywii/pywii-tools/wadinfo.py new file mode 100755 index 0000000..3eb16f9 --- /dev/null +++ b/pywii/pywii-tools/wadinfo.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +args = sys.argv[1:] + +if args[0] == "-dpki": + wii.loadkeys_dpki() + args.pop(0) +else: + wii.loadkeys() + +wadfile = args.pop(0) +wad = wii.WiiWad(wadfile) +wad.showinfo() diff --git a/pywii/pywii-tools/wadpack-boot2.py b/pywii/pywii-tools/wadpack-boot2.py new file mode 100755 index 0000000..94fb95e --- /dev/null +++ b/pywii/pywii-tools/wadpack-boot2.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +wii.loadkeys() + +wadfile = sys.argv[1] +indir = sys.argv[2] + +tmd = wii.WiiTmd(open(indir+os.sep+"tmd", "rb").read()) +tik = wii.WiiTik(open(indir+os.sep+"cetk", "rb").read()) + +certs, certlist = wii.parse_certs(open(os.path.join(indir, "certs"), "rb").read()) + +footer = open(indir+os.sep+"footer", "rb").read() + +wad = wii.WiiWadMaker(wadfile, tmd, tik, certlist, footer, nandwad=True) + +for i,ct in enumerate(tmd.get_content_records()): + data = open(indir+os.sep+"%08X"%ct.cid, "rb").read() + wad.adddata(data,ct.cid) + +wad.finish() + +if not wad.tik.signcheck(wad.certs): + wad.tik.null_signature() + wad.tik.brute_sha() + wad.updatetik() + +if not wad.tmd.signcheck(wad.certs): + wad.tmd.null_signature() + wad.tmd.brute_sha() + wad.updatetmd() diff --git a/pywii/pywii-tools/wadpack.py b/pywii/pywii-tools/wadpack.py new file mode 100755 index 0000000..0f34182 --- /dev/null +++ b/pywii/pywii-tools/wadpack.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +args = sys.argv[1:] + +if args[0] == "-dpki": + wii.loadkeys_dpki() + args.pop(0) +else: + wii.loadkeys() + +wadfile = args.pop(0) +indir = args.pop(0) + +tmd = wii.WiiTmd(open(os.path.join(indir, "tmd"), "rb").read()) +tik = wii.WiiTik(open(os.path.join(indir, "cetk"), "rb").read()) + +certs, certlist = wii.parse_certs(open(os.path.join(indir, "certs"), "rb").read()) + +footer = open(os.path.join(indir, "footer"), "rb").read() + +wad = wii.WiiWadMaker(wadfile, tmd, tik, certlist, footer) + +for i,ct in enumerate(tmd.get_content_records()): + data = open(os.path.join(indir, "%08X" % ct.cid), "rb").read() + wad.adddata(data,ct.cid) + +wad.finish() + +if not wad.tik.signcheck(wad.certs): + wad.tik.null_signature() + wad.tik.brute_sha() + wad.updatetik() + +if not wad.tmd.signcheck(wad.certs): + wad.tmd.null_signature() + wad.tmd.brute_sha() + wad.updatetmd() diff --git a/pywii/pywii-tools/wadunpack.py b/pywii/pywii-tools/wadunpack.py new file mode 100755 index 0000000..f1a40c9 --- /dev/null +++ b/pywii/pywii-tools/wadunpack.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import sys, os, os.path +import pywii as wii + +args = sys.argv[1:] + +if args[0] == "-dpki": + wii.loadkeys_dpki() + args.pop(0) +else: + wii.loadkeys() + +wadfile = args.pop(0) +outdir = args.pop(0) +wad = wii.WiiWad(wadfile) +wad.showinfo() + +if not os.path.isdir(outdir): + os.mkdir(outdir) + +for ct in wad.tmd.get_content_records(): + data = wad.getcontent(ct.index) + f = open(os.path.join(outdir, "%08X" % ct.cid),"wb") + f.write(data) + f.close() + +f = open(os.path.join(outdir, "cetk"),"wb") +f.write(wad.tik.data) +f.close() + +f = open(os.path.join(outdir, "tmd"),"wb") +f.write(wad.tmd.data) +f.close() + +f = open(os.path.join(outdir, "certs"),"wb") +for cert in wad.certlist: + f.write(cert.data) + wii.falign(f,0x40) +f.close() + +f = open(os.path.join(outdir, "footer"),"wb") +f.write(wad.footer) +f.close() diff --git a/wiipax/.gitignore b/wiipax/.gitignore new file mode 100644 index 0000000..9251773 --- /dev/null +++ b/wiipax/.gitignore @@ -0,0 +1,2 @@ +*.map + diff --git a/wiipax/Makefile b/wiipax/Makefile new file mode 100644 index 0000000..6d69506 --- /dev/null +++ b/wiipax/Makefile @@ -0,0 +1,11 @@ +all: + $(MAKE) -C stub release + $(MAKE) -C client + +clean distclean: + $(MAKE) -C stub distclean + $(MAKE) -C client clean + +install: + $(MAKE) -C client install + diff --git a/wiipax/client/.gitignore b/wiipax/client/.gitignore new file mode 100644 index 0000000..774e86f --- /dev/null +++ b/wiipax/client/.gitignore @@ -0,0 +1,4 @@ +wiipax +out.elf +x.lzma + diff --git a/wiipax/client/LzFind.c b/wiipax/client/LzFind.c new file mode 100644 index 0000000..e0ebe62 --- /dev/null +++ b/wiipax/client/LzFind.c @@ -0,0 +1,751 @@ +/* LzFind.c -- Match finder for LZ algorithms +2008-10-04 : Igor Pavlov : Public domain */ + +#include + +#include "LzFind.h" +#include "LzHash.h" + +#define kEmptyHashValue 0 +#define kMaxValForNormalize ((UInt32)0xFFFFFFFF) +#define kNormalizeStepMin (1 << 10) /* it must be power of 2 */ +#define kNormalizeMask (~(kNormalizeStepMin - 1)) +#define kMaxHistorySize ((UInt32)3 << 30) + +#define kStartMaxLen 3 + +static void LzInWindow_Free(CMatchFinder *p, ISzAlloc *alloc) +{ + if (!p->directInput) + { + alloc->Free(alloc, p->bufferBase); + p->bufferBase = 0; + } +} + +/* keepSizeBefore + keepSizeAfter + keepSizeReserv must be < 4G) */ + +static int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAlloc *alloc) +{ + UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv; + if (p->directInput) + { + p->blockSize = blockSize; + return 1; + } + if (p->bufferBase == 0 || p->blockSize != blockSize) + { + LzInWindow_Free(p, alloc); + p->blockSize = blockSize; + p->bufferBase = (Byte *)alloc->Alloc(alloc, (size_t)blockSize); + } + return (p->bufferBase != 0); +} + +Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; } +Byte MatchFinder_GetIndexByte(CMatchFinder *p, Int32 index) { return p->buffer[index]; } + +UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; } + +void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue) +{ + p->posLimit -= subValue; + p->pos -= subValue; + p->streamPos -= subValue; +} + +static void MatchFinder_ReadBlock(CMatchFinder *p) +{ + if (p->streamEndWasReached || p->result != SZ_OK) + return; + for (;;) + { + Byte *dest = p->buffer + (p->streamPos - p->pos); + size_t size = (p->bufferBase + p->blockSize - dest); + if (size == 0) + return; + p->result = p->stream->Read(p->stream, dest, &size); + if (p->result != SZ_OK) + return; + if (size == 0) + { + p->streamEndWasReached = 1; + return; + } + p->streamPos += (UInt32)size; + if (p->streamPos - p->pos > p->keepSizeAfter) + return; + } +} + +void MatchFinder_MoveBlock(CMatchFinder *p) +{ + memmove(p->bufferBase, + p->buffer - p->keepSizeBefore, + (size_t)(p->streamPos - p->pos + p->keepSizeBefore)); + p->buffer = p->bufferBase + p->keepSizeBefore; +} + +int MatchFinder_NeedMove(CMatchFinder *p) +{ + /* if (p->streamEndWasReached) return 0; */ + return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter); +} + +void MatchFinder_ReadIfRequired(CMatchFinder *p) +{ + if (p->streamEndWasReached) + return; + if (p->keepSizeAfter >= p->streamPos - p->pos) + MatchFinder_ReadBlock(p); +} + +static void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p) +{ + if (MatchFinder_NeedMove(p)) + MatchFinder_MoveBlock(p); + MatchFinder_ReadBlock(p); +} + +static void MatchFinder_SetDefaultSettings(CMatchFinder *p) +{ + p->cutValue = 32; + p->btMode = 1; + p->numHashBytes = 4; + /* p->skipModeBits = 0; */ + p->directInput = 0; + p->bigHash = 0; +} + +#define kCrcPoly 0xEDB88320 + +void MatchFinder_Construct(CMatchFinder *p) +{ + UInt32 i; + p->bufferBase = 0; + p->directInput = 0; + p->hash = 0; + MatchFinder_SetDefaultSettings(p); + + for (i = 0; i < 256; i++) + { + UInt32 r = i; + int j; + for (j = 0; j < 8; j++) + r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); + p->crc[i] = r; + } +} + +static void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->hash); + p->hash = 0; +} + +void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc) +{ + MatchFinder_FreeThisClassMemory(p, alloc); + LzInWindow_Free(p, alloc); +} + +static CLzRef* AllocRefs(UInt32 num, ISzAlloc *alloc) +{ + size_t sizeInBytes = (size_t)num * sizeof(CLzRef); + if (sizeInBytes / sizeof(CLzRef) != num) + return 0; + return (CLzRef *)alloc->Alloc(alloc, sizeInBytes); +} + +int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, + ISzAlloc *alloc) +{ + UInt32 sizeReserv; + if (historySize > kMaxHistorySize) + { + MatchFinder_Free(p, alloc); + return 0; + } + sizeReserv = historySize >> 1; + if (historySize > ((UInt32)2 << 30)) + sizeReserv = historySize >> 2; + sizeReserv += (keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) / 2 + (1 << 19); + + p->keepSizeBefore = historySize + keepAddBufferBefore + 1; + p->keepSizeAfter = matchMaxLen + keepAddBufferAfter; + /* we need one additional byte, since we use MoveBlock after pos++ and before dictionary using */ + if (LzInWindow_Create(p, sizeReserv, alloc)) + { + UInt32 newCyclicBufferSize = (historySize /* >> p->skipModeBits */) + 1; + UInt32 hs; + p->matchMaxLen = matchMaxLen; + { + p->fixedHashSize = 0; + if (p->numHashBytes == 2) + hs = (1 << 16) - 1; + else + { + hs = historySize - 1; + hs |= (hs >> 1); + hs |= (hs >> 2); + hs |= (hs >> 4); + hs |= (hs >> 8); + hs >>= 1; + /* hs >>= p->skipModeBits; */ + hs |= 0xFFFF; /* don't change it! It's required for Deflate */ + if (hs > (1 << 24)) + { + if (p->numHashBytes == 3) + hs = (1 << 24) - 1; + else + hs >>= 1; + } + } + p->hashMask = hs; + hs++; + if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size; + if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size; + if (p->numHashBytes > 4) p->fixedHashSize += kHash4Size; + hs += p->fixedHashSize; + } + + { + UInt32 prevSize = p->hashSizeSum + p->numSons; + UInt32 newSize; + p->historySize = historySize; + p->hashSizeSum = hs; + p->cyclicBufferSize = newCyclicBufferSize; + p->numSons = (p->btMode ? newCyclicBufferSize * 2 : newCyclicBufferSize); + newSize = p->hashSizeSum + p->numSons; + if (p->hash != 0 && prevSize == newSize) + return 1; + MatchFinder_FreeThisClassMemory(p, alloc); + p->hash = AllocRefs(newSize, alloc); + if (p->hash != 0) + { + p->son = p->hash + p->hashSizeSum; + return 1; + } + } + } + MatchFinder_Free(p, alloc); + return 0; +} + +static void MatchFinder_SetLimits(CMatchFinder *p) +{ + UInt32 limit = kMaxValForNormalize - p->pos; + UInt32 limit2 = p->cyclicBufferSize - p->cyclicBufferPos; + if (limit2 < limit) + limit = limit2; + limit2 = p->streamPos - p->pos; + if (limit2 <= p->keepSizeAfter) + { + if (limit2 > 0) + limit2 = 1; + } + else + limit2 -= p->keepSizeAfter; + if (limit2 < limit) + limit = limit2; + { + UInt32 lenLimit = p->streamPos - p->pos; + if (lenLimit > p->matchMaxLen) + lenLimit = p->matchMaxLen; + p->lenLimit = lenLimit; + } + p->posLimit = p->pos + limit; +} + +void MatchFinder_Init(CMatchFinder *p) +{ + UInt32 i; + for (i = 0; i < p->hashSizeSum; i++) + p->hash[i] = kEmptyHashValue; + p->cyclicBufferPos = 0; + p->buffer = p->bufferBase; + p->pos = p->streamPos = p->cyclicBufferSize; + p->result = SZ_OK; + p->streamEndWasReached = 0; + MatchFinder_ReadBlock(p); + MatchFinder_SetLimits(p); +} + +static UInt32 MatchFinder_GetSubValue(CMatchFinder *p) +{ + return (p->pos - p->historySize - 1) & kNormalizeMask; +} + +void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems) +{ + UInt32 i; + for (i = 0; i < numItems; i++) + { + UInt32 value = items[i]; + if (value <= subValue) + value = kEmptyHashValue; + else + value -= subValue; + items[i] = value; + } +} + +static void MatchFinder_Normalize(CMatchFinder *p) +{ + UInt32 subValue = MatchFinder_GetSubValue(p); + MatchFinder_Normalize3(subValue, p->hash, p->hashSizeSum + p->numSons); + MatchFinder_ReduceOffsets(p, subValue); +} + +static void MatchFinder_CheckLimits(CMatchFinder *p) +{ + if (p->pos == kMaxValForNormalize) + MatchFinder_Normalize(p); + if (!p->streamEndWasReached && p->keepSizeAfter == p->streamPos - p->pos) + MatchFinder_CheckAndMoveAndRead(p); + if (p->cyclicBufferPos == p->cyclicBufferSize) + p->cyclicBufferPos = 0; + MatchFinder_SetLimits(p); +} + +static UInt32 * Hc_GetMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *distances, UInt32 maxLen) +{ + son[_cyclicBufferPos] = curMatch; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + return distances; + { + const Byte *pb = cur - delta; + curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)]; + if (pb[maxLen] == cur[maxLen] && *pb == *cur) + { + UInt32 len = 0; + while (++len != lenLimit) + if (pb[len] != cur[len]) + break; + if (maxLen < len) + { + *distances++ = maxLen = len; + *distances++ = delta - 1; + if (len == lenLimit) + return distances; + } + } + } + } +} + +UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *distances, UInt32 maxLen) +{ + CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; + CLzRef *ptr1 = son + (_cyclicBufferPos << 1); + UInt32 len0 = 0, len1 = 0; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + { + *ptr0 = *ptr1 = kEmptyHashValue; + return distances; + } + { + CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); + const Byte *pb = cur - delta; + UInt32 len = (len0 < len1 ? len0 : len1); + if (pb[len] == cur[len]) + { + if (++len != lenLimit && pb[len] == cur[len]) + while (++len != lenLimit) + if (pb[len] != cur[len]) + break; + if (maxLen < len) + { + *distances++ = maxLen = len; + *distances++ = delta - 1; + if (len == lenLimit) + { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return distances; + } + } + } + if (pb[len] < cur[len]) + { + *ptr1 = curMatch; + ptr1 = pair + 1; + curMatch = *ptr1; + len1 = len; + } + else + { + *ptr0 = curMatch; + ptr0 = pair; + curMatch = *ptr0; + len0 = len; + } + } + } +} + +static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue) +{ + CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; + CLzRef *ptr1 = son + (_cyclicBufferPos << 1); + UInt32 len0 = 0, len1 = 0; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + { + *ptr0 = *ptr1 = kEmptyHashValue; + return; + } + { + CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); + const Byte *pb = cur - delta; + UInt32 len = (len0 < len1 ? len0 : len1); + if (pb[len] == cur[len]) + { + while (++len != lenLimit) + if (pb[len] != cur[len]) + break; + { + if (len == lenLimit) + { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return; + } + } + } + if (pb[len] < cur[len]) + { + *ptr1 = curMatch; + ptr1 = pair + 1; + curMatch = *ptr1; + len1 = len; + } + else + { + *ptr0 = curMatch; + ptr0 = pair; + curMatch = *ptr0; + len0 = len; + } + } + } +} + +#define MOVE_POS \ + ++p->cyclicBufferPos; \ + p->buffer++; \ + if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p); + +#define MOVE_POS_RET MOVE_POS return offset; + +static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; } + +#define GET_MATCHES_HEADER2(minLen, ret_op) \ + UInt32 lenLimit; UInt32 hashValue; const Byte *cur; UInt32 curMatch; \ + lenLimit = p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \ + cur = p->buffer; + +#define GET_MATCHES_HEADER(minLen) GET_MATCHES_HEADER2(minLen, return 0) +#define SKIP_HEADER(minLen) GET_MATCHES_HEADER2(minLen, continue) + +#define MF_PARAMS(p) p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue + +#define GET_MATCHES_FOOTER(offset, maxLen) \ + offset = (UInt32)(GetMatchesSpec1(lenLimit, curMatch, MF_PARAMS(p), \ + distances + offset, maxLen) - distances); MOVE_POS_RET; + +#define SKIP_FOOTER \ + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS; + +static UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(2) + HASH2_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = 0; + GET_MATCHES_FOOTER(offset, 1) +} + +UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = 0; + GET_MATCHES_FOOTER(offset, 2) +} + +static UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, delta2, maxLen, offset; + GET_MATCHES_HEADER(3) + + HASH3_CALC; + + delta2 = p->pos - p->hash[hash2Value]; + curMatch = p->hash[kFix3HashSize + hashValue]; + + p->hash[hash2Value] = + p->hash[kFix3HashSize + hashValue] = p->pos; + + + maxLen = 2; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[0] = maxLen; + distances[1] = delta2 - 1; + offset = 2; + if (maxLen == lenLimit) + { + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); + MOVE_POS_RET; + } + } + GET_MATCHES_FOOTER(offset, maxLen) +} + +static UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; + GET_MATCHES_HEADER(4) + + HASH4_CALC; + + delta2 = p->pos - p->hash[ hash2Value]; + delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; + curMatch = p->hash[kFix4HashSize + hashValue]; + + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + + maxLen = 1; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + distances[0] = maxLen = 2; + distances[1] = delta2 - 1; + offset = 2; + } + if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) + { + maxLen = 3; + distances[offset + 1] = delta3 - 1; + offset += 2; + delta2 = delta3; + } + if (offset != 0) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[offset - 2] = maxLen; + if (maxLen == lenLimit) + { + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); + MOVE_POS_RET; + } + } + if (maxLen < 3) + maxLen = 3; + GET_MATCHES_FOOTER(offset, maxLen) +} + +static UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; + GET_MATCHES_HEADER(4) + + HASH4_CALC; + + delta2 = p->pos - p->hash[ hash2Value]; + delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; + curMatch = p->hash[kFix4HashSize + hashValue]; + + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + + maxLen = 1; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + distances[0] = maxLen = 2; + distances[1] = delta2 - 1; + offset = 2; + } + if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) + { + maxLen = 3; + distances[offset + 1] = delta3 - 1; + offset += 2; + delta2 = delta3; + } + if (offset != 0) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[offset - 2] = maxLen; + if (maxLen == lenLimit) + { + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS_RET; + } + } + if (maxLen < 3) + maxLen = 3; + offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), + distances + offset, maxLen) - (distances)); + MOVE_POS_RET +} + +UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), + distances, 2) - (distances)); + MOVE_POS_RET +} + +static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(2) + HASH2_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value; + SKIP_HEADER(3) + HASH3_CALC; + curMatch = p->hash[kFix3HashSize + hashValue]; + p->hash[hash2Value] = + p->hash[kFix3HashSize + hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value, hash3Value; + SKIP_HEADER(4) + HASH4_CALC; + curMatch = p->hash[kFix4HashSize + hashValue]; + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = p->pos; + p->hash[kFix4HashSize + hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value, hash3Value; + SKIP_HEADER(4) + HASH4_CALC; + curMatch = p->hash[kFix4HashSize + hashValue]; + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS + } + while (--num != 0); +} + +void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS + } + while (--num != 0); +} + +void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable) +{ + vTable->Init = (Mf_Init_Func)MatchFinder_Init; + vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinder_GetIndexByte; + vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes; + vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos; + if (!p->btMode) + { + vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip; + } + else if (p->numHashBytes == 2) + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip; + } + else if (p->numHashBytes == 3) + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip; + } + else + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip; + } +} diff --git a/wiipax/client/LzFind.h b/wiipax/client/LzFind.h new file mode 100644 index 0000000..423d67e --- /dev/null +++ b/wiipax/client/LzFind.h @@ -0,0 +1,107 @@ +/* LzFind.h -- Match finder for LZ algorithms +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZFIND_H +#define __LZFIND_H + +#include "Types.h" + +typedef UInt32 CLzRef; + +typedef struct _CMatchFinder +{ + Byte *buffer; + UInt32 pos; + UInt32 posLimit; + UInt32 streamPos; + UInt32 lenLimit; + + UInt32 cyclicBufferPos; + UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */ + + UInt32 matchMaxLen; + CLzRef *hash; + CLzRef *son; + UInt32 hashMask; + UInt32 cutValue; + + Byte *bufferBase; + ISeqInStream *stream; + int streamEndWasReached; + + UInt32 blockSize; + UInt32 keepSizeBefore; + UInt32 keepSizeAfter; + + UInt32 numHashBytes; + int directInput; + int btMode; + /* int skipModeBits; */ + int bigHash; + UInt32 historySize; + UInt32 fixedHashSize; + UInt32 hashSizeSum; + UInt32 numSons; + SRes result; + UInt32 crc[256]; +} CMatchFinder; + +#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer) +#define Inline_MatchFinder_GetIndexByte(p, index) ((p)->buffer[(Int32)(index)]) + +#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos) + +int MatchFinder_NeedMove(CMatchFinder *p); +Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p); +void MatchFinder_MoveBlock(CMatchFinder *p); +void MatchFinder_ReadIfRequired(CMatchFinder *p); + +void MatchFinder_Construct(CMatchFinder *p); + +/* Conditions: + historySize <= 3 GB + keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB +*/ +int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, + ISzAlloc *alloc); +void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc); +void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems); +void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue); + +UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue, + UInt32 *distances, UInt32 maxLen); + +/* +Conditions: + Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func. + Mf_GetPointerToCurrentPos_Func's result must be used only before any other function +*/ + +typedef void (*Mf_Init_Func)(void *object); +typedef Byte (*Mf_GetIndexByte_Func)(void *object, Int32 index); +typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object); +typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object); +typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances); +typedef void (*Mf_Skip_Func)(void *object, UInt32); + +typedef struct _IMatchFinder +{ + Mf_Init_Func Init; + Mf_GetIndexByte_Func GetIndexByte; + Mf_GetNumAvailableBytes_Func GetNumAvailableBytes; + Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos; + Mf_GetMatches_Func GetMatches; + Mf_Skip_Func Skip; +} IMatchFinder; + +void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable); + +void MatchFinder_Init(CMatchFinder *p); +UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); +UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); +void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); +void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); + +#endif diff --git a/wiipax/client/LzHash.h b/wiipax/client/LzHash.h new file mode 100644 index 0000000..c923417 --- /dev/null +++ b/wiipax/client/LzHash.h @@ -0,0 +1,54 @@ +/* LzHash.h -- HASH functions for LZ algorithms +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZHASH_H +#define __LZHASH_H + +#define kHash2Size (1 << 10) +#define kHash3Size (1 << 16) +#define kHash4Size (1 << 20) + +#define kFix3HashSize (kHash2Size) +#define kFix4HashSize (kHash2Size + kHash3Size) +#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size) + +#define HASH2_CALC hashValue = cur[0] | ((UInt32)cur[1] << 8); + +#define HASH3_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hashValue = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; } + +#define HASH4_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ + hashValue = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & p->hashMask; } + +#define HASH5_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ + hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)); \ + hashValue = (hash4Value ^ (p->crc[cur[4]] << 3)) & p->hashMask; \ + hash4Value &= (kHash4Size - 1); } + +/* #define HASH_ZIP_CALC hashValue = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */ +#define HASH_ZIP_CALC hashValue = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF; + + +#define MT_HASH2_CALC \ + hash2Value = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1); + +#define MT_HASH3_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); } + +#define MT_HASH4_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + hash2Value = temp & (kHash2Size - 1); \ + hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ + hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); } + +#endif diff --git a/wiipax/client/LzmaDec.c b/wiipax/client/LzmaDec.c new file mode 100644 index 0000000..eb52501 --- /dev/null +++ b/wiipax/client/LzmaDec.c @@ -0,0 +1,1007 @@ +/* LzmaDec.c -- LZMA Decoder +2008-11-06 : Igor Pavlov : Public domain */ + +#include "LzmaDec.h" + +#include + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_INIT_SIZE 5 + +#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); +#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ + { UPDATE_0(p); i = (i + i); A0; } else \ + { UPDATE_1(p); i = (i + i) + 1; A1; } +#define GET_BIT(p, i) GET_BIT2(p, i, ; , ;) + +#define TREE_GET_BIT(probs, i) { GET_BIT((probs + i), i); } +#define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +/* #define _LZMA_SIZE_OPT */ + +#ifdef _LZMA_SIZE_OPT +#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) +#else +#define TREE_6_DECODE(probs, i) \ + { i = 1; \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + i -= 0x40; } +#endif + +#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0_CHECK range = bound; +#define UPDATE_1_CHECK range -= bound; code -= bound; +#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ + { UPDATE_0_CHECK; i = (i + i); A0; } else \ + { UPDATE_1_CHECK; i = (i + i) + 1; A1; } +#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) +#define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + + +#define kNumStates 12 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 +#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#define LZMA_BASE_SIZE 1846 +#define LZMA_LIT_SIZE 768 + +#define LzmaProps_GetNumProbs(p) ((UInt32)LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) + +#if Literal != LZMA_BASE_SIZE +StopCompilingDueBUG +#endif + +static const Byte kLiteralNextStates[kNumStates * 2] = +{ + 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5, + 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10 +}; + +#define LZMA_DIC_MIN (1 << 12) + +/* First LZMA-symbol is always decoded. +And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization +Out: + Result: + SZ_OK - OK + SZ_ERROR_DATA - Error + p->remainLen: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished + = kMatchSpecLenStart + 1 : Flush marker + = kMatchSpecLenStart + 2 : State Init Marker +*/ + +static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + CLzmaProb *probs = p->probs; + + unsigned state = p->state; + UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; + unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; + unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1; + unsigned lc = p->prop.lc; + + Byte *dic = p->dic; + SizeT dicBufSize = p->dicBufSize; + SizeT dicPos = p->dicPos; + + UInt32 processedPos = p->processedPos; + UInt32 checkDicSize = p->checkDicSize; + unsigned len = 0; + + const Byte *buf = p->buf; + UInt32 range = p->range; + UInt32 code = p->code; + + do + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = processedPos & pbMask; + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + unsigned symbol; + UPDATE_0(prob); + prob = probs + Literal; + if (checkDicSize != 0 || processedPos != 0) + prob += (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + + (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc)))); + + if (state < kNumLitStates) + { + symbol = 1; + do { GET_BIT(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + unsigned offs = 0x100; + symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + dic[dicPos++] = (Byte)symbol; + processedPos++; + + state = kLiteralNextStates[state]; + /* if (state < 4) state = 0; else if (state < 10) state -= 3; else state -= 6; */ + continue; + } + else + { + UPDATE_1(prob); + prob = probs + IsRep + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + state += kNumStates; + prob = probs + LenCoder; + } + else + { + UPDATE_1(prob); + if (checkDicSize == 0 && processedPos == 0) + return SZ_ERROR_DATA; + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + UPDATE_0(prob); + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + processedPos++; + state = state < kNumLitStates ? 9 : 11; + continue; + } + UPDATE_1(prob); + } + else + { + UInt32 distance; + UPDATE_1(prob); + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep1; + } + else + { + UPDATE_1(prob); + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep2; + } + else + { + UPDATE_1(prob); + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + state = state < kNumLitStates ? 8 : 11; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = (1 << kLenNumMidBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = (1 << kLenNumHighBits); + } + } + TREE_DECODE(probLen, limit, len); + len += offset; + } + + if (state >= kNumStates) + { + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); + TREE_6_DECODE(prob, distance); + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; + int numDirectBits = (int)(((distance >> 1) - 1)); + distance = (2 | (distance & 1)); + if (posSlot < kEndPosModelIndex) + { + distance <<= numDirectBits; + prob = probs + SpecPos + distance - posSlot - 1; + { + UInt32 mask = 1; + unsigned i = 1; + do + { + GET_BIT2(prob + i, i, ; , distance |= mask); + mask <<= 1; + } + while (--numDirectBits != 0); + } + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE + range >>= 1; + + { + UInt32 t; + code -= range; + t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ + distance = (distance << 1) + (t + 1); + code += range & t; + } + /* + distance <<= 1; + if (code >= range) + { + code -= range; + distance |= 1; + } + */ + } + while (--numDirectBits != 0); + prob = probs + Align; + distance <<= kNumAlignBits; + { + unsigned i = 1; + GET_BIT2(prob + i, i, ; , distance |= 1); + GET_BIT2(prob + i, i, ; , distance |= 2); + GET_BIT2(prob + i, i, ; , distance |= 4); + GET_BIT2(prob + i, i, ; , distance |= 8); + } + if (distance == (UInt32)0xFFFFFFFF) + { + len += kMatchSpecLenStart; + state -= kNumStates; + break; + } + } + } + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance + 1; + if (checkDicSize == 0) + { + if (distance >= processedPos) + return SZ_ERROR_DATA; + } + else if (distance >= checkDicSize) + return SZ_ERROR_DATA; + state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; + /* state = kLiteralNextStates[state]; */ + } + + len += kMatchMinLen; + + if (limit == dicPos) + return SZ_ERROR_DATA; + { + SizeT rem = limit - dicPos; + unsigned curLen = ((rem < len) ? (unsigned)rem : len); + SizeT pos = (dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0); + + processedPos += curLen; + + len -= curLen; + if (pos + curLen <= dicBufSize) + { + Byte *dest = dic + dicPos; + ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; + const Byte *lim = dest + curLen; + dicPos += curLen; + do + *(dest) = (Byte)*(dest + src); + while (++dest != lim); + } + else + { + do + { + dic[dicPos++] = dic[pos]; + if (++pos == dicBufSize) + pos = 0; + } + while (--curLen != 0); + } + } + } + } + while (dicPos < limit && buf < bufLimit); + NORMALIZE; + p->buf = buf; + p->range = range; + p->code = code; + p->remainLen = len; + p->dicPos = dicPos; + p->processedPos = processedPos; + p->reps[0] = rep0; + p->reps[1] = rep1; + p->reps[2] = rep2; + p->reps[3] = rep3; + p->state = state; + + return SZ_OK; +} + +static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) +{ + if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) + { + Byte *dic = p->dic; + SizeT dicPos = p->dicPos; + SizeT dicBufSize = p->dicBufSize; + unsigned len = p->remainLen; + UInt32 rep0 = p->reps[0]; + if (limit - dicPos < len) + len = (unsigned)(limit - dicPos); + + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) + p->checkDicSize = p->prop.dicSize; + + p->processedPos += len; + p->remainLen -= len; + while (len-- != 0) + { + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + } + p->dicPos = dicPos; + } +} + +static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + do + { + SizeT limit2 = limit; + if (p->checkDicSize == 0) + { + UInt32 rem = p->prop.dicSize - p->processedPos; + if (limit - p->dicPos > rem) + limit2 = p->dicPos + rem; + } + RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit)); + if (p->processedPos >= p->prop.dicSize) + p->checkDicSize = p->prop.dicSize; + LzmaDec_WriteRem(p, limit); + } + while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); + + if (p->remainLen > kMatchSpecLenStart) + { + p->remainLen = kMatchSpecLenStart; + } + return 0; +} + +typedef enum +{ + DUMMY_ERROR, /* unexpected end of input stream */ + DUMMY_LIT, + DUMMY_MATCH, + DUMMY_REP +} ELzmaDummy; + +static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) +{ + UInt32 range = p->range; + UInt32 code = p->code; + const Byte *bufLimit = buf + inSize; + CLzmaProb *probs = p->probs; + unsigned state = p->state; + ELzmaDummy res; + + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1); + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK + + /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ + + prob = probs + Literal; + if (p->checkDicSize != 0 || p->processedPos != 0) + prob += (LZMA_LIT_SIZE * + ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); + + if (state < kNumLitStates) + { + unsigned symbol = 1; + do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[p->dicPos - p->reps[0] + + ((p->dicPos < p->reps[0]) ? p->dicBufSize : 0)]; + unsigned offs = 0x100; + unsigned symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + res = DUMMY_LIT; + } + else + { + unsigned len; + UPDATE_1_CHECK; + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { + UPDATE_1_CHECK; + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + NORMALIZE_CHECK; + return DUMMY_REP; + } + else + { + UPDATE_1_CHECK; + } + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + } + } + } + state = kNumStates; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumMidBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = 1 << kLenNumHighBits; + } + } + TREE_DECODE_CHECK(probLen, limit, len); + len += offset; + } + + if (state < 4) + { + unsigned posSlot; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); + TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); + if (posSlot >= kStartPosModelIndex) + { + int numDirectBits = ((posSlot >> 1) - 1); + + /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ + + if (posSlot < kEndPosModelIndex) + { + prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1; + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE_CHECK + range >>= 1; + code -= range & (((code - range) >> 31) - 1); + /* if (code >= range) code -= range; */ + } + while (--numDirectBits != 0); + prob = probs + Align; + numDirectBits = kNumAlignBits; + } + { + unsigned i = 1; + do + { + GET_BIT_CHECK(prob + i, i); + } + while (--numDirectBits != 0); + } + } + } + } + } + NORMALIZE_CHECK; + return res; +} + + +static void LzmaDec_InitRc(CLzmaDec *p, const Byte *data) +{ + p->code = ((UInt32)data[1] << 24) | ((UInt32)data[2] << 16) | ((UInt32)data[3] << 8) | ((UInt32)data[4]); + p->range = 0xFFFFFFFF; + p->needFlush = 0; +} + +void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) +{ + p->needFlush = 1; + p->remainLen = 0; + p->tempBufSize = 0; + + if (initDic) + { + p->processedPos = 0; + p->checkDicSize = 0; + p->needInitState = 1; + } + if (initState) + p->needInitState = 1; +} + +void LzmaDec_Init(CLzmaDec *p) +{ + p->dicPos = 0; + LzmaDec_InitDicAndState(p, True, True); +} + +static void LzmaDec_InitStateReal(CLzmaDec *p) +{ + UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (p->prop.lc + p->prop.lp)); + UInt32 i; + CLzmaProb *probs = p->probs; + for (i = 0; i < numProbs; i++) + probs[i] = kBitModelTotal >> 1; + p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; + p->state = 0; + p->needInitState = 0; +} + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, + ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + (*srcLen) = 0; + LzmaDec_WriteRem(p, dicLimit); + + *status = LZMA_STATUS_NOT_SPECIFIED; + + while (p->remainLen != kMatchSpecLenStart) + { + int checkEndMarkNow; + + if (p->needFlush != 0) + { + for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) + p->tempBuf[p->tempBufSize++] = *src++; + if (p->tempBufSize < RC_INIT_SIZE) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (p->tempBuf[0] != 0) + return SZ_ERROR_DATA; + + LzmaDec_InitRc(p, p->tempBuf); + p->tempBufSize = 0; + } + + checkEndMarkNow = 0; + if (p->dicPos >= dicLimit) + { + if (p->remainLen == 0 && p->code == 0) + { + *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; + return SZ_OK; + } + if (finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + if (p->remainLen != 0) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + checkEndMarkNow = 1; + } + + if (p->needInitState) + LzmaDec_InitStateReal(p); + + if (p->tempBufSize == 0) + { + SizeT processed; + const Byte *bufLimit; + if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, src, inSize); + if (dummyRes == DUMMY_ERROR) + { + memcpy(p->tempBuf, src, inSize); + p->tempBufSize = (unsigned)inSize; + (*srcLen) += inSize; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + bufLimit = src; + } + else + bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; + p->buf = src; + if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) + return SZ_ERROR_DATA; + processed = (SizeT)(p->buf - src); + (*srcLen) += processed; + src += processed; + inSize -= processed; + } + else + { + unsigned rem = p->tempBufSize, lookAhead = 0; + while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) + p->tempBuf[rem++] = src[lookAhead++]; + p->tempBufSize = rem; + if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); + if (dummyRes == DUMMY_ERROR) + { + (*srcLen) += lookAhead; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + } + p->buf = p->tempBuf; + if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) + return SZ_ERROR_DATA; + lookAhead -= (rem - (unsigned)(p->buf - p->tempBuf)); + (*srcLen) += lookAhead; + src += lookAhead; + inSize -= lookAhead; + p->tempBufSize = 0; + } + } + if (p->code == 0) + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA; +} + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT outSize = *destLen; + SizeT inSize = *srcLen; + *srcLen = *destLen = 0; + for (;;) + { + SizeT inSizeCur = inSize, outSizeCur, dicPos; + ELzmaFinishMode curFinishMode; + SRes res; + if (p->dicPos == p->dicBufSize) + p->dicPos = 0; + dicPos = p->dicPos; + if (outSize > p->dicBufSize - dicPos) + { + outSizeCur = p->dicBufSize; + curFinishMode = LZMA_FINISH_ANY; + } + else + { + outSizeCur = dicPos + outSize; + curFinishMode = finishMode; + } + + res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status); + src += inSizeCur; + inSize -= inSizeCur; + *srcLen += inSizeCur; + outSizeCur = p->dicPos - dicPos; + memcpy(dest, p->dic + dicPos, outSizeCur); + dest += outSizeCur; + outSize -= outSizeCur; + *destLen += outSizeCur; + if (res != 0) + return res; + if (outSizeCur == 0 || outSize == 0) + return SZ_OK; + } +} + +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->probs); + p->probs = 0; +} + +static void LzmaDec_FreeDict(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->dic); + p->dic = 0; +} + +void LzmaDec_Free(CLzmaDec *p, ISzAlloc *alloc) +{ + LzmaDec_FreeProbs(p, alloc); + LzmaDec_FreeDict(p, alloc); +} + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) +{ + UInt32 dicSize; + Byte d; + + if (size < LZMA_PROPS_SIZE) + return SZ_ERROR_UNSUPPORTED; + else + dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); + + if (dicSize < LZMA_DIC_MIN) + dicSize = LZMA_DIC_MIN; + p->dicSize = dicSize; + + d = data[0]; + if (d >= (9 * 5 * 5)) + return SZ_ERROR_UNSUPPORTED; + + p->lc = d % 9; + d /= 9; + p->pb = d / 5; + p->lp = d % 5; + + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc) +{ + UInt32 numProbs = LzmaProps_GetNumProbs(propNew); + if (p->probs == 0 || numProbs != p->numProbs) + { + LzmaDec_FreeProbs(p, alloc); + p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); + p->numProbs = numProbs; + if (p->probs == 0) + return SZ_ERROR_MEM; + } + return SZ_OK; +} + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + SizeT dicBufSize; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + dicBufSize = propNew.dicSize; + if (p->dic == 0 || dicBufSize != p->dicBufSize) + { + LzmaDec_FreeDict(p, alloc); + p->dic = (Byte *)alloc->Alloc(alloc, dicBufSize); + if (p->dic == 0) + { + LzmaDec_FreeProbs(p, alloc); + return SZ_ERROR_MEM; + } + } + p->dicBufSize = dicBufSize; + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc) +{ + CLzmaDec p; + SRes res; + SizeT inSize = *srcLen; + SizeT outSize = *destLen; + *srcLen = *destLen = 0; + if (inSize < RC_INIT_SIZE) + return SZ_ERROR_INPUT_EOF; + + LzmaDec_Construct(&p); + res = LzmaDec_AllocateProbs(&p, propData, propSize, alloc); + if (res != 0) + return res; + p.dic = dest; + p.dicBufSize = outSize; + + LzmaDec_Init(&p); + + *srcLen = inSize; + res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status); + + if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) + res = SZ_ERROR_INPUT_EOF; + + (*destLen) = p.dicPos; + LzmaDec_FreeProbs(&p, alloc); + return res; +} diff --git a/wiipax/client/LzmaDec.h b/wiipax/client/LzmaDec.h new file mode 100644 index 0000000..ad7d705 --- /dev/null +++ b/wiipax/client/LzmaDec.h @@ -0,0 +1,223 @@ +/* LzmaDec.h -- LZMA Decoder +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZMADEC_H +#define __LZMADEC_H + +#include "Types.h" + +/* #define _LZMA_PROB32 */ +/* _LZMA_PROB32 can increase the speed on some CPUs, + but memory usage for CLzmaDec::probs will be doubled in that case */ + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + + +/* ---------- LZMA Properties ---------- */ + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaProps +{ + unsigned lc, lp, pb; + UInt32 dicSize; +} CLzmaProps; + +/* LzmaProps_Decode - decodes properties +Returns: + SZ_OK + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size); + + +/* ---------- LZMA Decoder state ---------- */ + +/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case. + Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */ + +#define LZMA_REQUIRED_INPUT_MAX 20 + +typedef struct +{ + CLzmaProps prop; + CLzmaProb *probs; + Byte *dic; + const Byte *buf; + UInt32 range, code; + SizeT dicPos; + SizeT dicBufSize; + UInt32 processedPos; + UInt32 checkDicSize; + unsigned state; + UInt32 reps[4]; + unsigned remainLen; + int needFlush; + int needInitState; + UInt32 numProbs; + unsigned tempBufSize; + Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; +} CLzmaDec; + +#define LzmaDec_Construct(p) { (p)->dic = 0; (p)->probs = 0; } + +void LzmaDec_Init(CLzmaDec *p); + +/* There are two types of LZMA streams: + 0) Stream with end mark. That end mark adds about 6 bytes to compressed size. + 1) Stream without end mark. You must know exact uncompressed size to decompress such stream. */ + +typedef enum +{ + LZMA_FINISH_ANY, /* finish at any point */ + LZMA_FINISH_END /* block must be finished at the end */ +} ELzmaFinishMode; + +/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!! + + You must use LZMA_FINISH_END, when you know that current output buffer + covers last bytes of block. In other cases you must use LZMA_FINISH_ANY. + + If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK, + and output value of destLen will be less than output buffer size limit. + You can check status result also. + + You can use multiple checks to test data integrity after full decompression: + 1) Check Result and "status" variable. + 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. + 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. + You must use correct finish mode in that case. */ + +typedef enum +{ + LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */ + LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ + LZMA_STATUS_NOT_FINISHED, /* stream was not finished */ + LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */ +} ELzmaStatus; + +/* ELzmaStatus is used only as output value for function call */ + + +/* ---------- Interfaces ---------- */ + +/* There are 3 levels of interfaces: + 1) Dictionary Interface + 2) Buffer Interface + 3) One Call Interface + You can select any of these interfaces, but don't mix functions from different + groups for same object. */ + + +/* There are two variants to allocate state for Dictionary Interface: + 1) LzmaDec_Allocate / LzmaDec_Free + 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs + You can use variant 2, if you set dictionary buffer manually. + For Buffer Interface you must always use variant 1. + +LzmaDec_Allocate* can return: + SZ_OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc); + +SRes LzmaDec_Allocate(CLzmaDec *state, const Byte *prop, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_Free(CLzmaDec *state, ISzAlloc *alloc); + +/* ---------- Dictionary Interface ---------- */ + +/* You can use it, if you want to eliminate the overhead for data copying from + dictionary to some other external buffer. + You must work with CLzmaDec variables directly in this interface. + + STEPS: + LzmaDec_Constr() + LzmaDec_Allocate() + for (each new stream) + { + LzmaDec_Init() + while (it needs more decompression) + { + LzmaDec_DecodeToDic() + use data from CLzmaDec::dic and update CLzmaDec::dicPos + } + } + LzmaDec_Free() +*/ + +/* LzmaDec_DecodeToDic + + The decoding to internal dictionary buffer (CLzmaDec::dic). + You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!! + +finishMode: + It has meaning only if the decoding reaches output limit (dicLimit). + LZMA_FINISH_ANY - Decode just dicLimit bytes. + LZMA_FINISH_END - Stream must be finished after dicLimit. + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_NEEDS_MORE_INPUT + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error +*/ + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- Buffer Interface ---------- */ + +/* It's zlib-like interface. + See LzmaDec_DecodeToDic description for information about STEPS and return results, + but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need + to work with CLzmaDec variables manually. + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). +*/ + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- One Call Interface ---------- */ + +/* LzmaDecode + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties + SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). +*/ + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc); + +#endif diff --git a/wiipax/client/LzmaEnc.c b/wiipax/client/LzmaEnc.c new file mode 100644 index 0000000..529fd98 --- /dev/null +++ b/wiipax/client/LzmaEnc.c @@ -0,0 +1,2281 @@ +/* LzmaEnc.c -- LZMA Encoder +2009-02-02 : Igor Pavlov : Public domain */ + +#include + +/* #define SHOW_STAT */ +/* #define SHOW_STAT2 */ + +#if defined(SHOW_STAT) || defined(SHOW_STAT2) +#include +#endif + +#include "LzmaEnc.h" + +#include "LzFind.h" +#ifdef COMPRESS_MF_MT +#include "LzFindMt.h" +#endif + +#ifdef SHOW_STAT +static int ttt = 0; +#endif + +#define kBlockSizeMax ((1 << LZMA_NUM_BLOCK_SIZE_BITS) - 1) + +#define kBlockSize (9 << 10) +#define kUnpackBlockSize (1 << 18) +#define kMatchArraySize (1 << 21) +#define kMatchRecordMaxSize ((LZMA_MATCH_LEN_MAX * 2 + 3) * LZMA_MATCH_LEN_MAX) + +#define kNumMaxDirectBits (31) + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 +#define kProbInitValue (kBitModelTotal >> 1) + +#define kNumMoveReducingBits 4 +#define kNumBitPriceShiftBits 4 +#define kBitPrice (1 << kNumBitPriceShiftBits) + +void LzmaEncProps_Init(CLzmaEncProps *p) +{ + p->level = 5; + p->dictSize = p->mc = 0; + p->lc = p->lp = p->pb = p->algo = p->fb = p->btMode = p->numHashBytes = p->numThreads = -1; + p->writeEndMark = 0; +} + +void LzmaEncProps_Normalize(CLzmaEncProps *p) +{ + int level = p->level; + if (level < 0) level = 5; + p->level = level; + if (p->dictSize == 0) p->dictSize = (level <= 5 ? (1 << (level * 2 + 14)) : (level == 6 ? (1 << 25) : (1 << 26))); + if (p->lc < 0) p->lc = 3; + if (p->lp < 0) p->lp = 0; + if (p->pb < 0) p->pb = 2; + if (p->algo < 0) p->algo = (level < 5 ? 0 : 1); + if (p->fb < 0) p->fb = (level < 7 ? 32 : 64); + if (p->btMode < 0) p->btMode = (p->algo == 0 ? 0 : 1); + if (p->numHashBytes < 0) p->numHashBytes = 4; + if (p->mc == 0) p->mc = (16 + (p->fb >> 1)) >> (p->btMode ? 0 : 1); + if (p->numThreads < 0) + p->numThreads = + #ifdef COMPRESS_MF_MT + ((p->btMode && p->algo) ? 2 : 1); + #else + 1; + #endif +} + +UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2) +{ + CLzmaEncProps props = *props2; + LzmaEncProps_Normalize(&props); + return props.dictSize; +} + +/* #define LZMA_LOG_BSR */ +/* Define it for Intel's CPU */ + + +#ifdef LZMA_LOG_BSR + +#define kDicLogSizeMaxCompress 30 + +#define BSR2_RET(pos, res) { unsigned long i; _BitScanReverse(&i, (pos)); res = (i + i) + ((pos >> (i - 1)) & 1); } + +UInt32 GetPosSlot1(UInt32 pos) +{ + UInt32 res; + BSR2_RET(pos, res); + return res; +} +#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } +#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res); } + +#else + +#define kNumLogBits (9 + (int)sizeof(size_t) / 2) +#define kDicLogSizeMaxCompress ((kNumLogBits - 1) * 2 + 7) + +void LzmaEnc_FastPosInit(Byte *g_FastPos) +{ + int c = 2, slotFast; + g_FastPos[0] = 0; + g_FastPos[1] = 1; + + for (slotFast = 2; slotFast < kNumLogBits * 2; slotFast++) + { + UInt32 k = (1 << ((slotFast >> 1) - 1)); + UInt32 j; + for (j = 0; j < k; j++, c++) + g_FastPos[c] = (Byte)slotFast; + } +} + +#define BSR2_RET(pos, res) { UInt32 i = 6 + ((kNumLogBits - 1) & \ + (0 - (((((UInt32)1 << (kNumLogBits + 6)) - 1) - pos) >> 31))); \ + res = p->g_FastPos[pos >> i] + (i * 2); } +/* +#define BSR2_RET(pos, res) { res = (pos < (1 << (kNumLogBits + 6))) ? \ + p->g_FastPos[pos >> 6] + 12 : \ + p->g_FastPos[pos >> (6 + kNumLogBits - 1)] + (6 + (kNumLogBits - 1)) * 2; } +*/ + +#define GetPosSlot1(pos) p->g_FastPos[pos] +#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } +#define GetPosSlot(pos, res) { if (pos < kNumFullDistances) res = p->g_FastPos[pos]; else BSR2_RET(pos, res); } + +#endif + + +#define LZMA_NUM_REPS 4 + +typedef unsigned CState; + +typedef struct _COptimal +{ + UInt32 price; + + CState state; + int prev1IsChar; + int prev2; + + UInt32 posPrev2; + UInt32 backPrev2; + + UInt32 posPrev; + UInt32 backPrev; + UInt32 backs[LZMA_NUM_REPS]; +} COptimal; + +#define kNumOpts (1 << 12) + +#define kNumLenToPosStates 4 +#define kNumPosSlotBits 6 +#define kDicLogSizeMin 0 +#define kDicLogSizeMax 32 +#define kDistTableSizeMax (kDicLogSizeMax * 2) + + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) +#define kAlignMask (kAlignTableSize - 1) + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumPosModels (kEndPosModelIndex - kStartPosModelIndex) + +#define kNumFullDistances (1 << (kEndPosModelIndex / 2)) + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + +#define LZMA_PB_MAX 4 +#define LZMA_LC_MAX 8 +#define LZMA_LP_MAX 4 + +#define LZMA_NUM_PB_STATES_MAX (1 << LZMA_PB_MAX) + + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define kLenNumSymbolsTotal (kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define LZMA_MATCH_LEN_MIN 2 +#define LZMA_MATCH_LEN_MAX (LZMA_MATCH_LEN_MIN + kLenNumSymbolsTotal - 1) + +#define kNumStates 12 + +typedef struct +{ + CLzmaProb choice; + CLzmaProb choice2; + CLzmaProb low[LZMA_NUM_PB_STATES_MAX << kLenNumLowBits]; + CLzmaProb mid[LZMA_NUM_PB_STATES_MAX << kLenNumMidBits]; + CLzmaProb high[kLenNumHighSymbols]; +} CLenEnc; + +typedef struct +{ + CLenEnc p; + UInt32 prices[LZMA_NUM_PB_STATES_MAX][kLenNumSymbolsTotal]; + UInt32 tableSize; + UInt32 counters[LZMA_NUM_PB_STATES_MAX]; +} CLenPriceEnc; + +typedef struct _CRangeEnc +{ + UInt32 range; + Byte cache; + UInt64 low; + UInt64 cacheSize; + Byte *buf; + Byte *bufLim; + Byte *bufBase; + ISeqOutStream *outStream; + UInt64 processed; + SRes res; +} CRangeEnc; + +typedef struct _CSeqInStreamBuf +{ + ISeqInStream funcTable; + const Byte *data; + SizeT rem; +} CSeqInStreamBuf; + +static SRes MyRead(void *pp, void *data, size_t *size) +{ + size_t curSize = *size; + CSeqInStreamBuf *p = (CSeqInStreamBuf *)pp; + if (p->rem < curSize) + curSize = p->rem; + memcpy(data, p->data, curSize); + p->rem -= curSize; + p->data += curSize; + *size = curSize; + return SZ_OK; +} + +typedef struct +{ + CLzmaProb *litProbs; + + CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; + CLzmaProb isRep[kNumStates]; + CLzmaProb isRepG0[kNumStates]; + CLzmaProb isRepG1[kNumStates]; + CLzmaProb isRepG2[kNumStates]; + CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; + + CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; + CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; + CLzmaProb posAlignEncoder[1 << kNumAlignBits]; + + CLenPriceEnc lenEnc; + CLenPriceEnc repLenEnc; + + UInt32 reps[LZMA_NUM_REPS]; + UInt32 state; +} CSaveState; + +typedef struct _CLzmaEnc +{ + IMatchFinder matchFinder; + void *matchFinderObj; + + #ifdef COMPRESS_MF_MT + Bool mtMode; + CMatchFinderMt matchFinderMt; + #endif + + CMatchFinder matchFinderBase; + + #ifdef COMPRESS_MF_MT + Byte pad[128]; + #endif + + UInt32 optimumEndIndex; + UInt32 optimumCurrentIndex; + + UInt32 longestMatchLength; + UInt32 numPairs; + UInt32 numAvail; + COptimal opt[kNumOpts]; + + #ifndef LZMA_LOG_BSR + Byte g_FastPos[1 << kNumLogBits]; + #endif + + UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits]; + UInt32 matches[LZMA_MATCH_LEN_MAX * 2 + 2 + 1]; + UInt32 numFastBytes; + UInt32 additionalOffset; + UInt32 reps[LZMA_NUM_REPS]; + UInt32 state; + + UInt32 posSlotPrices[kNumLenToPosStates][kDistTableSizeMax]; + UInt32 distancesPrices[kNumLenToPosStates][kNumFullDistances]; + UInt32 alignPrices[kAlignTableSize]; + UInt32 alignPriceCount; + + UInt32 distTableSize; + + unsigned lc, lp, pb; + unsigned lpMask, pbMask; + + CLzmaProb *litProbs; + + CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; + CLzmaProb isRep[kNumStates]; + CLzmaProb isRepG0[kNumStates]; + CLzmaProb isRepG1[kNumStates]; + CLzmaProb isRepG2[kNumStates]; + CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; + + CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; + CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; + CLzmaProb posAlignEncoder[1 << kNumAlignBits]; + + CLenPriceEnc lenEnc; + CLenPriceEnc repLenEnc; + + unsigned lclp; + + Bool fastMode; + + CRangeEnc rc; + + Bool writeEndMark; + UInt64 nowPos64; + UInt32 matchPriceCount; + Bool finished; + Bool multiThread; + + SRes result; + UInt32 dictSize; + UInt32 matchFinderCycles; + + ISeqInStream *inStream; + CSeqInStreamBuf seqBufInStream; + + CSaveState saveState; +} CLzmaEnc; + +void LzmaEnc_SaveState(CLzmaEncHandle pp) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + CSaveState *dest = &p->saveState; + int i; + dest->lenEnc = p->lenEnc; + dest->repLenEnc = p->repLenEnc; + dest->state = p->state; + + for (i = 0; i < kNumStates; i++) + { + memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i])); + memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i])); + } + for (i = 0; i < kNumLenToPosStates; i++) + memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i])); + memcpy(dest->isRep, p->isRep, sizeof(p->isRep)); + memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0)); + memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1)); + memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2)); + memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders)); + memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder)); + memcpy(dest->reps, p->reps, sizeof(p->reps)); + memcpy(dest->litProbs, p->litProbs, (0x300 << p->lclp) * sizeof(CLzmaProb)); +} + +void LzmaEnc_RestoreState(CLzmaEncHandle pp) +{ + CLzmaEnc *dest = (CLzmaEnc *)pp; + const CSaveState *p = &dest->saveState; + int i; + dest->lenEnc = p->lenEnc; + dest->repLenEnc = p->repLenEnc; + dest->state = p->state; + + for (i = 0; i < kNumStates; i++) + { + memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i])); + memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i])); + } + for (i = 0; i < kNumLenToPosStates; i++) + memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i])); + memcpy(dest->isRep, p->isRep, sizeof(p->isRep)); + memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0)); + memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1)); + memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2)); + memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders)); + memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder)); + memcpy(dest->reps, p->reps, sizeof(p->reps)); + memcpy(dest->litProbs, p->litProbs, (0x300 << dest->lclp) * sizeof(CLzmaProb)); +} + +SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + CLzmaEncProps props = *props2; + LzmaEncProps_Normalize(&props); + + if (props.lc > LZMA_LC_MAX || props.lp > LZMA_LP_MAX || props.pb > LZMA_PB_MAX || + props.dictSize > (1 << kDicLogSizeMaxCompress) || props.dictSize > (1 << 30)) + return SZ_ERROR_PARAM; + p->dictSize = props.dictSize; + p->matchFinderCycles = props.mc; + { + unsigned fb = props.fb; + if (fb < 5) + fb = 5; + if (fb > LZMA_MATCH_LEN_MAX) + fb = LZMA_MATCH_LEN_MAX; + p->numFastBytes = fb; + } + p->lc = props.lc; + p->lp = props.lp; + p->pb = props.pb; + p->fastMode = (props.algo == 0); + p->matchFinderBase.btMode = props.btMode; + { + UInt32 numHashBytes = 4; + if (props.btMode) + { + if (props.numHashBytes < 2) + numHashBytes = 2; + else if (props.numHashBytes < 4) + numHashBytes = props.numHashBytes; + } + p->matchFinderBase.numHashBytes = numHashBytes; + } + + p->matchFinderBase.cutValue = props.mc; + + p->writeEndMark = props.writeEndMark; + + #ifdef COMPRESS_MF_MT + /* + if (newMultiThread != _multiThread) + { + ReleaseMatchFinder(); + _multiThread = newMultiThread; + } + */ + p->multiThread = (props.numThreads > 1); + #endif + + return SZ_OK; +} + +static const int kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; +static const int kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; +static const int kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; +static const int kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; + +#define IsCharState(s) ((s) < 7) + +#define GetLenToPosState(len) (((len) < kNumLenToPosStates + 1) ? (len) - 2 : kNumLenToPosStates - 1) + +#define kInfinityPrice (1 << 30) + +static void RangeEnc_Construct(CRangeEnc *p) +{ + p->outStream = 0; + p->bufBase = 0; +} + +#define RangeEnc_GetProcessed(p) ((p)->processed + ((p)->buf - (p)->bufBase) + (p)->cacheSize) + +#define RC_BUF_SIZE (1 << 16) +static int RangeEnc_Alloc(CRangeEnc *p, ISzAlloc *alloc) +{ + if (p->bufBase == 0) + { + p->bufBase = (Byte *)alloc->Alloc(alloc, RC_BUF_SIZE); + if (p->bufBase == 0) + return 0; + p->bufLim = p->bufBase + RC_BUF_SIZE; + } + return 1; +} + +static void RangeEnc_Free(CRangeEnc *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->bufBase); + p->bufBase = 0; +} + +static void RangeEnc_Init(CRangeEnc *p) +{ + /* Stream.Init(); */ + p->low = 0; + p->range = 0xFFFFFFFF; + p->cacheSize = 1; + p->cache = 0; + + p->buf = p->bufBase; + + p->processed = 0; + p->res = SZ_OK; +} + +static void RangeEnc_FlushStream(CRangeEnc *p) +{ + size_t num; + if (p->res != SZ_OK) + return; + num = p->buf - p->bufBase; + if (num != p->outStream->Write(p->outStream, p->bufBase, num)) + p->res = SZ_ERROR_WRITE; + p->processed += num; + p->buf = p->bufBase; +} + +static void MY_FAST_CALL RangeEnc_ShiftLow(CRangeEnc *p) +{ + if ((UInt32)p->low < (UInt32)0xFF000000 || (int)(p->low >> 32) != 0) + { + Byte temp = p->cache; + do + { + Byte *buf = p->buf; + *buf++ = (Byte)(temp + (Byte)(p->low >> 32)); + p->buf = buf; + if (buf == p->bufLim) + RangeEnc_FlushStream(p); + temp = 0xFF; + } + while (--p->cacheSize != 0); + p->cache = (Byte)((UInt32)p->low >> 24); + } + p->cacheSize++; + p->low = (UInt32)p->low << 8; +} + +static void RangeEnc_FlushData(CRangeEnc *p) +{ + int i; + for (i = 0; i < 5; i++) + RangeEnc_ShiftLow(p); +} + +static void RangeEnc_EncodeDirectBits(CRangeEnc *p, UInt32 value, int numBits) +{ + do + { + p->range >>= 1; + p->low += p->range & (0 - ((value >> --numBits) & 1)); + if (p->range < kTopValue) + { + p->range <<= 8; + RangeEnc_ShiftLow(p); + } + } + while (numBits != 0); +} + +static void RangeEnc_EncodeBit(CRangeEnc *p, CLzmaProb *prob, UInt32 symbol) +{ + UInt32 ttt = *prob; + UInt32 newBound = (p->range >> kNumBitModelTotalBits) * ttt; + if (symbol == 0) + { + p->range = newBound; + ttt += (kBitModelTotal - ttt) >> kNumMoveBits; + } + else + { + p->low += newBound; + p->range -= newBound; + ttt -= ttt >> kNumMoveBits; + } + *prob = (CLzmaProb)ttt; + if (p->range < kTopValue) + { + p->range <<= 8; + RangeEnc_ShiftLow(p); + } +} + +static void LitEnc_Encode(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol) +{ + symbol |= 0x100; + do + { + RangeEnc_EncodeBit(p, probs + (symbol >> 8), (symbol >> 7) & 1); + symbol <<= 1; + } + while (symbol < 0x10000); +} + +static void LitEnc_EncodeMatched(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol, UInt32 matchByte) +{ + UInt32 offs = 0x100; + symbol |= 0x100; + do + { + matchByte <<= 1; + RangeEnc_EncodeBit(p, probs + (offs + (matchByte & offs) + (symbol >> 8)), (symbol >> 7) & 1); + symbol <<= 1; + offs &= ~(matchByte ^ symbol); + } + while (symbol < 0x10000); +} + +void LzmaEnc_InitPriceTables(UInt32 *ProbPrices) +{ + UInt32 i; + for (i = (1 << kNumMoveReducingBits) / 2; i < kBitModelTotal; i += (1 << kNumMoveReducingBits)) + { + const int kCyclesBits = kNumBitPriceShiftBits; + UInt32 w = i; + UInt32 bitCount = 0; + int j; + for (j = 0; j < kCyclesBits; j++) + { + w = w * w; + bitCount <<= 1; + while (w >= ((UInt32)1 << 16)) + { + w >>= 1; + bitCount++; + } + } + ProbPrices[i >> kNumMoveReducingBits] = ((kNumBitModelTotalBits << kCyclesBits) - 15 - bitCount); + } +} + + +#define GET_PRICE(prob, symbol) \ + p->ProbPrices[((prob) ^ (((-(int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; + +#define GET_PRICEa(prob, symbol) \ + ProbPrices[((prob) ^ ((-((int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; + +#define GET_PRICE_0(prob) p->ProbPrices[(prob) >> kNumMoveReducingBits] +#define GET_PRICE_1(prob) p->ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] + +#define GET_PRICE_0a(prob) ProbPrices[(prob) >> kNumMoveReducingBits] +#define GET_PRICE_1a(prob) ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] + +static UInt32 LitEnc_GetPrice(const CLzmaProb *probs, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + symbol |= 0x100; + do + { + price += GET_PRICEa(probs[symbol >> 8], (symbol >> 7) & 1); + symbol <<= 1; + } + while (symbol < 0x10000); + return price; +} + +static UInt32 LitEnc_GetPriceMatched(const CLzmaProb *probs, UInt32 symbol, UInt32 matchByte, UInt32 *ProbPrices) +{ + UInt32 price = 0; + UInt32 offs = 0x100; + symbol |= 0x100; + do + { + matchByte <<= 1; + price += GET_PRICEa(probs[offs + (matchByte & offs) + (symbol >> 8)], (symbol >> 7) & 1); + symbol <<= 1; + offs &= ~(matchByte ^ symbol); + } + while (symbol < 0x10000); + return price; +} + + +static void RcTree_Encode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) +{ + UInt32 m = 1; + int i; + for (i = numBitLevels; i != 0;) + { + UInt32 bit; + i--; + bit = (symbol >> i) & 1; + RangeEnc_EncodeBit(rc, probs + m, bit); + m = (m << 1) | bit; + } +} + +static void RcTree_ReverseEncode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) +{ + UInt32 m = 1; + int i; + for (i = 0; i < numBitLevels; i++) + { + UInt32 bit = symbol & 1; + RangeEnc_EncodeBit(rc, probs + m, bit); + m = (m << 1) | bit; + symbol >>= 1; + } +} + +static UInt32 RcTree_GetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + symbol |= (1 << numBitLevels); + while (symbol != 1) + { + price += GET_PRICEa(probs[symbol >> 1], symbol & 1); + symbol >>= 1; + } + return price; +} + +static UInt32 RcTree_ReverseGetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + UInt32 m = 1; + int i; + for (i = numBitLevels; i != 0; i--) + { + UInt32 bit = symbol & 1; + symbol >>= 1; + price += GET_PRICEa(probs[m], bit); + m = (m << 1) | bit; + } + return price; +} + + +static void LenEnc_Init(CLenEnc *p) +{ + unsigned i; + p->choice = p->choice2 = kProbInitValue; + for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumLowBits); i++) + p->low[i] = kProbInitValue; + for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumMidBits); i++) + p->mid[i] = kProbInitValue; + for (i = 0; i < kLenNumHighSymbols; i++) + p->high[i] = kProbInitValue; +} + +static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState) +{ + if (symbol < kLenNumLowSymbols) + { + RangeEnc_EncodeBit(rc, &p->choice, 0); + RcTree_Encode(rc, p->low + (posState << kLenNumLowBits), kLenNumLowBits, symbol); + } + else + { + RangeEnc_EncodeBit(rc, &p->choice, 1); + if (symbol < kLenNumLowSymbols + kLenNumMidSymbols) + { + RangeEnc_EncodeBit(rc, &p->choice2, 0); + RcTree_Encode(rc, p->mid + (posState << kLenNumMidBits), kLenNumMidBits, symbol - kLenNumLowSymbols); + } + else + { + RangeEnc_EncodeBit(rc, &p->choice2, 1); + RcTree_Encode(rc, p->high, kLenNumHighBits, symbol - kLenNumLowSymbols - kLenNumMidSymbols); + } + } +} + +static void LenEnc_SetPrices(CLenEnc *p, UInt32 posState, UInt32 numSymbols, UInt32 *prices, UInt32 *ProbPrices) +{ + UInt32 a0 = GET_PRICE_0a(p->choice); + UInt32 a1 = GET_PRICE_1a(p->choice); + UInt32 b0 = a1 + GET_PRICE_0a(p->choice2); + UInt32 b1 = a1 + GET_PRICE_1a(p->choice2); + UInt32 i = 0; + for (i = 0; i < kLenNumLowSymbols; i++) + { + if (i >= numSymbols) + return; + prices[i] = a0 + RcTree_GetPrice(p->low + (posState << kLenNumLowBits), kLenNumLowBits, i, ProbPrices); + } + for (; i < kLenNumLowSymbols + kLenNumMidSymbols; i++) + { + if (i >= numSymbols) + return; + prices[i] = b0 + RcTree_GetPrice(p->mid + (posState << kLenNumMidBits), kLenNumMidBits, i - kLenNumLowSymbols, ProbPrices); + } + for (; i < numSymbols; i++) + prices[i] = b1 + RcTree_GetPrice(p->high, kLenNumHighBits, i - kLenNumLowSymbols - kLenNumMidSymbols, ProbPrices); +} + +static void MY_FAST_CALL LenPriceEnc_UpdateTable(CLenPriceEnc *p, UInt32 posState, UInt32 *ProbPrices) +{ + LenEnc_SetPrices(&p->p, posState, p->tableSize, p->prices[posState], ProbPrices); + p->counters[posState] = p->tableSize; +} + +static void LenPriceEnc_UpdateTables(CLenPriceEnc *p, UInt32 numPosStates, UInt32 *ProbPrices) +{ + UInt32 posState; + for (posState = 0; posState < numPosStates; posState++) + LenPriceEnc_UpdateTable(p, posState, ProbPrices); +} + +static void LenEnc_Encode2(CLenPriceEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState, Bool updatePrice, UInt32 *ProbPrices) +{ + LenEnc_Encode(&p->p, rc, symbol, posState); + if (updatePrice) + if (--p->counters[posState] == 0) + LenPriceEnc_UpdateTable(p, posState, ProbPrices); +} + + + + +static void MovePos(CLzmaEnc *p, UInt32 num) +{ + #ifdef SHOW_STAT + ttt += num; + printf("\n MovePos %d", num); + #endif + if (num != 0) + { + p->additionalOffset += num; + p->matchFinder.Skip(p->matchFinderObj, num); + } +} + +static UInt32 ReadMatchDistances(CLzmaEnc *p, UInt32 *numDistancePairsRes) +{ + UInt32 lenRes = 0, numPairs; + p->numAvail = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); + numPairs = p->matchFinder.GetMatches(p->matchFinderObj, p->matches); + #ifdef SHOW_STAT + printf("\n i = %d numPairs = %d ", ttt, numPairs / 2); + ttt++; + { + UInt32 i; + for (i = 0; i < numPairs; i += 2) + printf("%2d %6d | ", p->matches[i], p->matches[i + 1]); + } + #endif + if (numPairs > 0) + { + lenRes = p->matches[numPairs - 2]; + if (lenRes == p->numFastBytes) + { + const Byte *pby = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + UInt32 distance = p->matches[numPairs - 1] + 1; + UInt32 numAvail = p->numAvail; + if (numAvail > LZMA_MATCH_LEN_MAX) + numAvail = LZMA_MATCH_LEN_MAX; + { + const Byte *pby2 = pby - distance; + for (; lenRes < numAvail && pby[lenRes] == pby2[lenRes]; lenRes++); + } + } + } + p->additionalOffset++; + *numDistancePairsRes = numPairs; + return lenRes; +} + + +#define MakeAsChar(p) (p)->backPrev = (UInt32)(-1); (p)->prev1IsChar = False; +#define MakeAsShortRep(p) (p)->backPrev = 0; (p)->prev1IsChar = False; +#define IsShortRep(p) ((p)->backPrev == 0) + +static UInt32 GetRepLen1Price(CLzmaEnc *p, UInt32 state, UInt32 posState) +{ + return + GET_PRICE_0(p->isRepG0[state]) + + GET_PRICE_0(p->isRep0Long[state][posState]); +} + +static UInt32 GetPureRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 state, UInt32 posState) +{ + UInt32 price; + if (repIndex == 0) + { + price = GET_PRICE_0(p->isRepG0[state]); + price += GET_PRICE_1(p->isRep0Long[state][posState]); + } + else + { + price = GET_PRICE_1(p->isRepG0[state]); + if (repIndex == 1) + price += GET_PRICE_0(p->isRepG1[state]); + else + { + price += GET_PRICE_1(p->isRepG1[state]); + price += GET_PRICE(p->isRepG2[state], repIndex - 2); + } + } + return price; +} + +static UInt32 GetRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 len, UInt32 state, UInt32 posState) +{ + return p->repLenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN] + + GetPureRepPrice(p, repIndex, state, posState); +} + +static UInt32 Backward(CLzmaEnc *p, UInt32 *backRes, UInt32 cur) +{ + UInt32 posMem = p->opt[cur].posPrev; + UInt32 backMem = p->opt[cur].backPrev; + p->optimumEndIndex = cur; + do + { + if (p->opt[cur].prev1IsChar) + { + MakeAsChar(&p->opt[posMem]) + p->opt[posMem].posPrev = posMem - 1; + if (p->opt[cur].prev2) + { + p->opt[posMem - 1].prev1IsChar = False; + p->opt[posMem - 1].posPrev = p->opt[cur].posPrev2; + p->opt[posMem - 1].backPrev = p->opt[cur].backPrev2; + } + } + { + UInt32 posPrev = posMem; + UInt32 backCur = backMem; + + backMem = p->opt[posPrev].backPrev; + posMem = p->opt[posPrev].posPrev; + + p->opt[posPrev].backPrev = backCur; + p->opt[posPrev].posPrev = cur; + cur = posPrev; + } + } + while (cur != 0); + *backRes = p->opt[0].backPrev; + p->optimumCurrentIndex = p->opt[0].posPrev; + return p->optimumCurrentIndex; +} + +#define LIT_PROBS(pos, prevByte) (p->litProbs + ((((pos) & p->lpMask) << p->lc) + ((prevByte) >> (8 - p->lc))) * 0x300) + +static UInt32 GetOptimum(CLzmaEnc *p, UInt32 position, UInt32 *backRes) +{ + UInt32 numAvail, mainLen, numPairs, repMaxIndex, i, posState, lenEnd, len, cur; + UInt32 matchPrice, repMatchPrice, normalMatchPrice; + UInt32 reps[LZMA_NUM_REPS], repLens[LZMA_NUM_REPS]; + UInt32 *matches; + const Byte *data; + Byte curByte, matchByte; + if (p->optimumEndIndex != p->optimumCurrentIndex) + { + const COptimal *opt = &p->opt[p->optimumCurrentIndex]; + UInt32 lenRes = opt->posPrev - p->optimumCurrentIndex; + *backRes = opt->backPrev; + p->optimumCurrentIndex = opt->posPrev; + return lenRes; + } + p->optimumCurrentIndex = p->optimumEndIndex = 0; + + if (p->additionalOffset == 0) + mainLen = ReadMatchDistances(p, &numPairs); + else + { + mainLen = p->longestMatchLength; + numPairs = p->numPairs; + } + + numAvail = p->numAvail; + if (numAvail < 2) + { + *backRes = (UInt32)(-1); + return 1; + } + if (numAvail > LZMA_MATCH_LEN_MAX) + numAvail = LZMA_MATCH_LEN_MAX; + + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + repMaxIndex = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 lenTest; + const Byte *data2; + reps[i] = p->reps[i]; + data2 = data - (reps[i] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + { + repLens[i] = 0; + continue; + } + for (lenTest = 2; lenTest < numAvail && data[lenTest] == data2[lenTest]; lenTest++); + repLens[i] = lenTest; + if (lenTest > repLens[repMaxIndex]) + repMaxIndex = i; + } + if (repLens[repMaxIndex] >= p->numFastBytes) + { + UInt32 lenRes; + *backRes = repMaxIndex; + lenRes = repLens[repMaxIndex]; + MovePos(p, lenRes - 1); + return lenRes; + } + + matches = p->matches; + if (mainLen >= p->numFastBytes) + { + *backRes = matches[numPairs - 1] + LZMA_NUM_REPS; + MovePos(p, mainLen - 1); + return mainLen; + } + curByte = *data; + matchByte = *(data - (reps[0] + 1)); + + if (mainLen < 2 && curByte != matchByte && repLens[repMaxIndex] < 2) + { + *backRes = (UInt32)-1; + return 1; + } + + p->opt[0].state = (CState)p->state; + + posState = (position & p->pbMask); + + { + const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); + p->opt[1].price = GET_PRICE_0(p->isMatch[p->state][posState]) + + (!IsCharState(p->state) ? + LitEnc_GetPriceMatched(probs, curByte, matchByte, p->ProbPrices) : + LitEnc_GetPrice(probs, curByte, p->ProbPrices)); + } + + MakeAsChar(&p->opt[1]); + + matchPrice = GET_PRICE_1(p->isMatch[p->state][posState]); + repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[p->state]); + + if (matchByte == curByte) + { + UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, p->state, posState); + if (shortRepPrice < p->opt[1].price) + { + p->opt[1].price = shortRepPrice; + MakeAsShortRep(&p->opt[1]); + } + } + lenEnd = ((mainLen >= repLens[repMaxIndex]) ? mainLen : repLens[repMaxIndex]); + + if (lenEnd < 2) + { + *backRes = p->opt[1].backPrev; + return 1; + } + + p->opt[1].posPrev = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + p->opt[0].backs[i] = reps[i]; + + len = lenEnd; + do + p->opt[len--].price = kInfinityPrice; + while (len >= 2); + + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 repLen = repLens[i]; + UInt32 price; + if (repLen < 2) + continue; + price = repMatchPrice + GetPureRepPrice(p, i, p->state, posState); + do + { + UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][repLen - 2]; + COptimal *opt = &p->opt[repLen]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = 0; + opt->backPrev = i; + opt->prev1IsChar = False; + } + } + while (--repLen >= 2); + } + + normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[p->state]); + + len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); + if (len <= mainLen) + { + UInt32 offs = 0; + while (len > matches[offs]) + offs += 2; + for (; ; len++) + { + COptimal *opt; + UInt32 distance = matches[offs + 1]; + + UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN]; + UInt32 lenToPosState = GetLenToPosState(len); + if (distance < kNumFullDistances) + curAndLenPrice += p->distancesPrices[lenToPosState][distance]; + else + { + UInt32 slot; + GetPosSlot2(distance, slot); + curAndLenPrice += p->alignPrices[distance & kAlignMask] + p->posSlotPrices[lenToPosState][slot]; + } + opt = &p->opt[len]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = 0; + opt->backPrev = distance + LZMA_NUM_REPS; + opt->prev1IsChar = False; + } + if (len == matches[offs]) + { + offs += 2; + if (offs == numPairs) + break; + } + } + } + + cur = 0; + + #ifdef SHOW_STAT2 + if (position >= 0) + { + unsigned i; + printf("\n pos = %4X", position); + for (i = cur; i <= lenEnd; i++) + printf("\nprice[%4X] = %d", position - cur + i, p->opt[i].price); + } + #endif + + for (;;) + { + UInt32 numAvailFull, newLen, numPairs, posPrev, state, posState, startLen; + UInt32 curPrice, curAnd1Price, matchPrice, repMatchPrice; + Bool nextIsChar; + Byte curByte, matchByte; + const Byte *data; + COptimal *curOpt; + COptimal *nextOpt; + + cur++; + if (cur == lenEnd) + return Backward(p, backRes, cur); + + newLen = ReadMatchDistances(p, &numPairs); + if (newLen >= p->numFastBytes) + { + p->numPairs = numPairs; + p->longestMatchLength = newLen; + return Backward(p, backRes, cur); + } + position++; + curOpt = &p->opt[cur]; + posPrev = curOpt->posPrev; + if (curOpt->prev1IsChar) + { + posPrev--; + if (curOpt->prev2) + { + state = p->opt[curOpt->posPrev2].state; + if (curOpt->backPrev2 < LZMA_NUM_REPS) + state = kRepNextStates[state]; + else + state = kMatchNextStates[state]; + } + else + state = p->opt[posPrev].state; + state = kLiteralNextStates[state]; + } + else + state = p->opt[posPrev].state; + if (posPrev == cur - 1) + { + if (IsShortRep(curOpt)) + state = kShortRepNextStates[state]; + else + state = kLiteralNextStates[state]; + } + else + { + UInt32 pos; + const COptimal *prevOpt; + if (curOpt->prev1IsChar && curOpt->prev2) + { + posPrev = curOpt->posPrev2; + pos = curOpt->backPrev2; + state = kRepNextStates[state]; + } + else + { + pos = curOpt->backPrev; + if (pos < LZMA_NUM_REPS) + state = kRepNextStates[state]; + else + state = kMatchNextStates[state]; + } + prevOpt = &p->opt[posPrev]; + if (pos < LZMA_NUM_REPS) + { + UInt32 i; + reps[0] = prevOpt->backs[pos]; + for (i = 1; i <= pos; i++) + reps[i] = prevOpt->backs[i - 1]; + for (; i < LZMA_NUM_REPS; i++) + reps[i] = prevOpt->backs[i]; + } + else + { + UInt32 i; + reps[0] = (pos - LZMA_NUM_REPS); + for (i = 1; i < LZMA_NUM_REPS; i++) + reps[i] = prevOpt->backs[i - 1]; + } + } + curOpt->state = (CState)state; + + curOpt->backs[0] = reps[0]; + curOpt->backs[1] = reps[1]; + curOpt->backs[2] = reps[2]; + curOpt->backs[3] = reps[3]; + + curPrice = curOpt->price; + nextIsChar = False; + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + curByte = *data; + matchByte = *(data - (reps[0] + 1)); + + posState = (position & p->pbMask); + + curAnd1Price = curPrice + GET_PRICE_0(p->isMatch[state][posState]); + { + const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); + curAnd1Price += + (!IsCharState(state) ? + LitEnc_GetPriceMatched(probs, curByte, matchByte, p->ProbPrices) : + LitEnc_GetPrice(probs, curByte, p->ProbPrices)); + } + + nextOpt = &p->opt[cur + 1]; + + if (curAnd1Price < nextOpt->price) + { + nextOpt->price = curAnd1Price; + nextOpt->posPrev = cur; + MakeAsChar(nextOpt); + nextIsChar = True; + } + + matchPrice = curPrice + GET_PRICE_1(p->isMatch[state][posState]); + repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[state]); + + if (matchByte == curByte && !(nextOpt->posPrev < cur && nextOpt->backPrev == 0)) + { + UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, state, posState); + if (shortRepPrice <= nextOpt->price) + { + nextOpt->price = shortRepPrice; + nextOpt->posPrev = cur; + MakeAsShortRep(nextOpt); + nextIsChar = True; + } + } + numAvailFull = p->numAvail; + { + UInt32 temp = kNumOpts - 1 - cur; + if (temp < numAvailFull) + numAvailFull = temp; + } + + if (numAvailFull < 2) + continue; + numAvail = (numAvailFull <= p->numFastBytes ? numAvailFull : p->numFastBytes); + + if (!nextIsChar && matchByte != curByte) /* speed optimization */ + { + /* try Literal + rep0 */ + UInt32 temp; + UInt32 lenTest2; + const Byte *data2 = data - (reps[0] + 1); + UInt32 limit = p->numFastBytes + 1; + if (limit > numAvailFull) + limit = numAvailFull; + + for (temp = 1; temp < limit && data[temp] == data2[temp]; temp++); + lenTest2 = temp - 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kLiteralNextStates[state]; + UInt32 posStateNext = (position + 1) & p->pbMask; + UInt32 nextRepMatchPrice = curAnd1Price + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 curAndLenPrice; + COptimal *opt; + UInt32 offset = cur + 1 + lenTest2; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = False; + } + } + } + } + + startLen = 2; /* speed optimization */ + { + UInt32 repIndex; + for (repIndex = 0; repIndex < LZMA_NUM_REPS; repIndex++) + { + UInt32 lenTest; + UInt32 lenTestTemp; + UInt32 price; + const Byte *data2 = data - (reps[repIndex] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + continue; + for (lenTest = 2; lenTest < numAvail && data[lenTest] == data2[lenTest]; lenTest++); + while (lenEnd < cur + lenTest) + p->opt[++lenEnd].price = kInfinityPrice; + lenTestTemp = lenTest; + price = repMatchPrice + GetPureRepPrice(p, repIndex, state, posState); + do + { + UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][lenTest - 2]; + COptimal *opt = &p->opt[cur + lenTest]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur; + opt->backPrev = repIndex; + opt->prev1IsChar = False; + } + } + while (--lenTest >= 2); + lenTest = lenTestTemp; + + if (repIndex == 0) + startLen = lenTest + 1; + + /* if (_maxMode) */ + { + UInt32 lenTest2 = lenTest + 1; + UInt32 limit = lenTest2 + p->numFastBytes; + UInt32 nextRepMatchPrice; + if (limit > numAvailFull) + limit = numAvailFull; + for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); + lenTest2 -= lenTest + 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kRepNextStates[state]; + UInt32 posStateNext = (position + lenTest) & p->pbMask; + UInt32 curAndLenCharPrice = + price + p->repLenEnc.prices[posState][lenTest - 2] + + GET_PRICE_0(p->isMatch[state2][posStateNext]) + + LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), + data[lenTest], data2[lenTest], p->ProbPrices); + state2 = kLiteralNextStates[state2]; + posStateNext = (position + lenTest + 1) & p->pbMask; + nextRepMatchPrice = curAndLenCharPrice + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 curAndLenPrice; + COptimal *opt; + UInt32 offset = cur + lenTest + 1 + lenTest2; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + lenTest + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = True; + opt->posPrev2 = cur; + opt->backPrev2 = repIndex; + } + } + } + } + } + } + /* for (UInt32 lenTest = 2; lenTest <= newLen; lenTest++) */ + if (newLen > numAvail) + { + newLen = numAvail; + for (numPairs = 0; newLen > matches[numPairs]; numPairs += 2); + matches[numPairs] = newLen; + numPairs += 2; + } + if (newLen >= startLen) + { + UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[state]); + UInt32 offs, curBack, posSlot; + UInt32 lenTest; + while (lenEnd < cur + newLen) + p->opt[++lenEnd].price = kInfinityPrice; + + offs = 0; + while (startLen > matches[offs]) + offs += 2; + curBack = matches[offs + 1]; + GetPosSlot2(curBack, posSlot); + for (lenTest = /*2*/ startLen; ; lenTest++) + { + UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][lenTest - LZMA_MATCH_LEN_MIN]; + UInt32 lenToPosState = GetLenToPosState(lenTest); + COptimal *opt; + if (curBack < kNumFullDistances) + curAndLenPrice += p->distancesPrices[lenToPosState][curBack]; + else + curAndLenPrice += p->posSlotPrices[lenToPosState][posSlot] + p->alignPrices[curBack & kAlignMask]; + + opt = &p->opt[cur + lenTest]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur; + opt->backPrev = curBack + LZMA_NUM_REPS; + opt->prev1IsChar = False; + } + + if (/*_maxMode && */lenTest == matches[offs]) + { + /* Try Match + Literal + Rep0 */ + const Byte *data2 = data - (curBack + 1); + UInt32 lenTest2 = lenTest + 1; + UInt32 limit = lenTest2 + p->numFastBytes; + UInt32 nextRepMatchPrice; + if (limit > numAvailFull) + limit = numAvailFull; + for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); + lenTest2 -= lenTest + 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kMatchNextStates[state]; + UInt32 posStateNext = (position + lenTest) & p->pbMask; + UInt32 curAndLenCharPrice = curAndLenPrice + + GET_PRICE_0(p->isMatch[state2][posStateNext]) + + LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), + data[lenTest], data2[lenTest], p->ProbPrices); + state2 = kLiteralNextStates[state2]; + posStateNext = (posStateNext + 1) & p->pbMask; + nextRepMatchPrice = curAndLenCharPrice + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 offset = cur + lenTest + 1 + lenTest2; + UInt32 curAndLenPrice; + COptimal *opt; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + lenTest + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = True; + opt->posPrev2 = cur; + opt->backPrev2 = curBack + LZMA_NUM_REPS; + } + } + } + offs += 2; + if (offs == numPairs) + break; + curBack = matches[offs + 1]; + if (curBack >= kNumFullDistances) + GetPosSlot2(curBack, posSlot); + } + } + } + } +} + +#define ChangePair(smallDist, bigDist) (((bigDist) >> 7) > (smallDist)) + +static UInt32 GetOptimumFast(CLzmaEnc *p, UInt32 *backRes) +{ + UInt32 numAvail, mainLen, mainDist, numPairs, repIndex, repLen, i; + const Byte *data; + const UInt32 *matches; + + if (p->additionalOffset == 0) + mainLen = ReadMatchDistances(p, &numPairs); + else + { + mainLen = p->longestMatchLength; + numPairs = p->numPairs; + } + + numAvail = p->numAvail; + *backRes = (UInt32)-1; + if (numAvail < 2) + return 1; + if (numAvail > LZMA_MATCH_LEN_MAX) + numAvail = LZMA_MATCH_LEN_MAX; + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + + repLen = repIndex = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 len; + const Byte *data2 = data - (p->reps[i] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + continue; + for (len = 2; len < numAvail && data[len] == data2[len]; len++); + if (len >= p->numFastBytes) + { + *backRes = i; + MovePos(p, len - 1); + return len; + } + if (len > repLen) + { + repIndex = i; + repLen = len; + } + } + + matches = p->matches; + if (mainLen >= p->numFastBytes) + { + *backRes = matches[numPairs - 1] + LZMA_NUM_REPS; + MovePos(p, mainLen - 1); + return mainLen; + } + + mainDist = 0; /* for GCC */ + if (mainLen >= 2) + { + mainDist = matches[numPairs - 1]; + while (numPairs > 2 && mainLen == matches[numPairs - 4] + 1) + { + if (!ChangePair(matches[numPairs - 3], mainDist)) + break; + numPairs -= 2; + mainLen = matches[numPairs - 2]; + mainDist = matches[numPairs - 1]; + } + if (mainLen == 2 && mainDist >= 0x80) + mainLen = 1; + } + + if (repLen >= 2 && ( + (repLen + 1 >= mainLen) || + (repLen + 2 >= mainLen && mainDist >= (1 << 9)) || + (repLen + 3 >= mainLen && mainDist >= (1 << 15)))) + { + *backRes = repIndex; + MovePos(p, repLen - 1); + return repLen; + } + + if (mainLen < 2 || numAvail <= 2) + return 1; + + p->longestMatchLength = ReadMatchDistances(p, &p->numPairs); + if (p->longestMatchLength >= 2) + { + UInt32 newDistance = matches[p->numPairs - 1]; + if ((p->longestMatchLength >= mainLen && newDistance < mainDist) || + (p->longestMatchLength == mainLen + 1 && !ChangePair(mainDist, newDistance)) || + (p->longestMatchLength > mainLen + 1) || + (p->longestMatchLength + 1 >= mainLen && mainLen >= 3 && ChangePair(newDistance, mainDist))) + return 1; + } + + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 len, limit; + const Byte *data2 = data - (p->reps[i] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + continue; + limit = mainLen - 1; + for (len = 2; len < limit && data[len] == data2[len]; len++); + if (len >= limit) + return 1; + } + *backRes = mainDist + LZMA_NUM_REPS; + MovePos(p, mainLen - 2); + return mainLen; +} + +static void WriteEndMarker(CLzmaEnc *p, UInt32 posState) +{ + UInt32 len; + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); + p->state = kMatchNextStates[p->state]; + len = LZMA_MATCH_LEN_MIN; + LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, (1 << kNumPosSlotBits) - 1); + RangeEnc_EncodeDirectBits(&p->rc, (((UInt32)1 << 30) - 1) >> kNumAlignBits, 30 - kNumAlignBits); + RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, kAlignMask); +} + +static SRes CheckErrors(CLzmaEnc *p) +{ + if (p->result != SZ_OK) + return p->result; + if (p->rc.res != SZ_OK) + p->result = SZ_ERROR_WRITE; + if (p->matchFinderBase.result != SZ_OK) + p->result = SZ_ERROR_READ; + if (p->result != SZ_OK) + p->finished = True; + return p->result; +} + +static SRes Flush(CLzmaEnc *p, UInt32 nowPos) +{ + /* ReleaseMFStream(); */ + p->finished = True; + if (p->writeEndMark) + WriteEndMarker(p, nowPos & p->pbMask); + RangeEnc_FlushData(&p->rc); + RangeEnc_FlushStream(&p->rc); + return CheckErrors(p); +} + +static void FillAlignPrices(CLzmaEnc *p) +{ + UInt32 i; + for (i = 0; i < kAlignTableSize; i++) + p->alignPrices[i] = RcTree_ReverseGetPrice(p->posAlignEncoder, kNumAlignBits, i, p->ProbPrices); + p->alignPriceCount = 0; +} + +static void FillDistancesPrices(CLzmaEnc *p) +{ + UInt32 tempPrices[kNumFullDistances]; + UInt32 i, lenToPosState; + for (i = kStartPosModelIndex; i < kNumFullDistances; i++) + { + UInt32 posSlot = GetPosSlot1(i); + UInt32 footerBits = ((posSlot >> 1) - 1); + UInt32 base = ((2 | (posSlot & 1)) << footerBits); + tempPrices[i] = RcTree_ReverseGetPrice(p->posEncoders + base - posSlot - 1, footerBits, i - base, p->ProbPrices); + } + + for (lenToPosState = 0; lenToPosState < kNumLenToPosStates; lenToPosState++) + { + UInt32 posSlot; + const CLzmaProb *encoder = p->posSlotEncoder[lenToPosState]; + UInt32 *posSlotPrices = p->posSlotPrices[lenToPosState]; + for (posSlot = 0; posSlot < p->distTableSize; posSlot++) + posSlotPrices[posSlot] = RcTree_GetPrice(encoder, kNumPosSlotBits, posSlot, p->ProbPrices); + for (posSlot = kEndPosModelIndex; posSlot < p->distTableSize; posSlot++) + posSlotPrices[posSlot] += ((((posSlot >> 1) - 1) - kNumAlignBits) << kNumBitPriceShiftBits); + + { + UInt32 *distancesPrices = p->distancesPrices[lenToPosState]; + UInt32 i; + for (i = 0; i < kStartPosModelIndex; i++) + distancesPrices[i] = posSlotPrices[i]; + for (; i < kNumFullDistances; i++) + distancesPrices[i] = posSlotPrices[GetPosSlot1(i)] + tempPrices[i]; + } + } + p->matchPriceCount = 0; +} + +void LzmaEnc_Construct(CLzmaEnc *p) +{ + RangeEnc_Construct(&p->rc); + MatchFinder_Construct(&p->matchFinderBase); + #ifdef COMPRESS_MF_MT + MatchFinderMt_Construct(&p->matchFinderMt); + p->matchFinderMt.MatchFinder = &p->matchFinderBase; + #endif + + { + CLzmaEncProps props; + LzmaEncProps_Init(&props); + LzmaEnc_SetProps(p, &props); + } + + #ifndef LZMA_LOG_BSR + LzmaEnc_FastPosInit(p->g_FastPos); + #endif + + LzmaEnc_InitPriceTables(p->ProbPrices); + p->litProbs = 0; + p->saveState.litProbs = 0; +} + +CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc) +{ + void *p; + p = alloc->Alloc(alloc, sizeof(CLzmaEnc)); + if (p != 0) + LzmaEnc_Construct((CLzmaEnc *)p); + return p; +} + +void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->litProbs); + alloc->Free(alloc, p->saveState.litProbs); + p->litProbs = 0; + p->saveState.litProbs = 0; +} + +void LzmaEnc_Destruct(CLzmaEnc *p, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + #ifdef COMPRESS_MF_MT + MatchFinderMt_Destruct(&p->matchFinderMt, allocBig); + #endif + MatchFinder_Free(&p->matchFinderBase, allocBig); + LzmaEnc_FreeLits(p, alloc); + RangeEnc_Free(&p->rc, alloc); +} + +void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + LzmaEnc_Destruct((CLzmaEnc *)p, alloc, allocBig); + alloc->Free(alloc, p); +} + +static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize, UInt32 maxUnpackSize) +{ + UInt32 nowPos32, startPos32; + if (p->inStream != 0) + { + p->matchFinderBase.stream = p->inStream; + p->matchFinder.Init(p->matchFinderObj); + p->inStream = 0; + } + + if (p->finished) + return p->result; + RINOK(CheckErrors(p)); + + nowPos32 = (UInt32)p->nowPos64; + startPos32 = nowPos32; + + if (p->nowPos64 == 0) + { + UInt32 numPairs; + Byte curByte; + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) + return Flush(p, nowPos32); + ReadMatchDistances(p, &numPairs); + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][0], 0); + p->state = kLiteralNextStates[p->state]; + curByte = p->matchFinder.GetIndexByte(p->matchFinderObj, 0 - p->additionalOffset); + LitEnc_Encode(&p->rc, p->litProbs, curByte); + p->additionalOffset--; + nowPos32++; + } + + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) != 0) + for (;;) + { + UInt32 pos, len, posState; + + if (p->fastMode) + len = GetOptimumFast(p, &pos); + else + len = GetOptimum(p, nowPos32, &pos); + + #ifdef SHOW_STAT2 + printf("\n pos = %4X, len = %d pos = %d", nowPos32, len, pos); + #endif + + posState = nowPos32 & p->pbMask; + if (len == 1 && pos == (UInt32)-1) + { + Byte curByte; + CLzmaProb *probs; + const Byte *data; + + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 0); + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; + curByte = *data; + probs = LIT_PROBS(nowPos32, *(data - 1)); + if (IsCharState(p->state)) + LitEnc_Encode(&p->rc, probs, curByte); + else + LitEnc_EncodeMatched(&p->rc, probs, curByte, *(data - p->reps[0] - 1)); + p->state = kLiteralNextStates[p->state]; + } + else + { + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); + if (pos < LZMA_NUM_REPS) + { + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 1); + if (pos == 0) + { + RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 0); + RangeEnc_EncodeBit(&p->rc, &p->isRep0Long[p->state][posState], ((len == 1) ? 0 : 1)); + } + else + { + UInt32 distance = p->reps[pos]; + RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 1); + if (pos == 1) + RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 0); + else + { + RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 1); + RangeEnc_EncodeBit(&p->rc, &p->isRepG2[p->state], pos - 2); + if (pos == 3) + p->reps[3] = p->reps[2]; + p->reps[2] = p->reps[1]; + } + p->reps[1] = p->reps[0]; + p->reps[0] = distance; + } + if (len == 1) + p->state = kShortRepNextStates[p->state]; + else + { + LenEnc_Encode2(&p->repLenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + p->state = kRepNextStates[p->state]; + } + } + else + { + UInt32 posSlot; + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); + p->state = kMatchNextStates[p->state]; + LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + pos -= LZMA_NUM_REPS; + GetPosSlot(pos, posSlot); + RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, posSlot); + + if (posSlot >= kStartPosModelIndex) + { + UInt32 footerBits = ((posSlot >> 1) - 1); + UInt32 base = ((2 | (posSlot & 1)) << footerBits); + UInt32 posReduced = pos - base; + + if (posSlot < kEndPosModelIndex) + RcTree_ReverseEncode(&p->rc, p->posEncoders + base - posSlot - 1, footerBits, posReduced); + else + { + RangeEnc_EncodeDirectBits(&p->rc, posReduced >> kNumAlignBits, footerBits - kNumAlignBits); + RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, posReduced & kAlignMask); + p->alignPriceCount++; + } + } + p->reps[3] = p->reps[2]; + p->reps[2] = p->reps[1]; + p->reps[1] = p->reps[0]; + p->reps[0] = pos; + p->matchPriceCount++; + } + } + p->additionalOffset -= len; + nowPos32 += len; + if (p->additionalOffset == 0) + { + UInt32 processed; + if (!p->fastMode) + { + if (p->matchPriceCount >= (1 << 7)) + FillDistancesPrices(p); + if (p->alignPriceCount >= kAlignTableSize) + FillAlignPrices(p); + } + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) + break; + processed = nowPos32 - startPos32; + if (useLimits) + { + if (processed + kNumOpts + 300 >= maxUnpackSize || + RangeEnc_GetProcessed(&p->rc) + kNumOpts * 2 >= maxPackSize) + break; + } + else if (processed >= (1 << 15)) + { + p->nowPos64 += nowPos32 - startPos32; + return CheckErrors(p); + } + } + } + p->nowPos64 += nowPos32 - startPos32; + return Flush(p, nowPos32); +} + +#define kBigHashDicLimit ((UInt32)1 << 24) + +static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + UInt32 beforeSize = kNumOpts; + Bool btMode; + if (!RangeEnc_Alloc(&p->rc, alloc)) + return SZ_ERROR_MEM; + btMode = (p->matchFinderBase.btMode != 0); + #ifdef COMPRESS_MF_MT + p->mtMode = (p->multiThread && !p->fastMode && btMode); + #endif + + { + unsigned lclp = p->lc + p->lp; + if (p->litProbs == 0 || p->saveState.litProbs == 0 || p->lclp != lclp) + { + LzmaEnc_FreeLits(p, alloc); + p->litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); + p->saveState.litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); + if (p->litProbs == 0 || p->saveState.litProbs == 0) + { + LzmaEnc_FreeLits(p, alloc); + return SZ_ERROR_MEM; + } + p->lclp = lclp; + } + } + + p->matchFinderBase.bigHash = (p->dictSize > kBigHashDicLimit); + + if (beforeSize + p->dictSize < keepWindowSize) + beforeSize = keepWindowSize - p->dictSize; + + #ifdef COMPRESS_MF_MT + if (p->mtMode) + { + RINOK(MatchFinderMt_Create(&p->matchFinderMt, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)); + p->matchFinderObj = &p->matchFinderMt; + MatchFinderMt_CreateVTable(&p->matchFinderMt, &p->matchFinder); + } + else + #endif + { + if (!MatchFinder_Create(&p->matchFinderBase, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)) + return SZ_ERROR_MEM; + p->matchFinderObj = &p->matchFinderBase; + MatchFinder_CreateVTable(&p->matchFinderBase, &p->matchFinder); + } + return SZ_OK; +} + +void LzmaEnc_Init(CLzmaEnc *p) +{ + UInt32 i; + p->state = 0; + for (i = 0 ; i < LZMA_NUM_REPS; i++) + p->reps[i] = 0; + + RangeEnc_Init(&p->rc); + + + for (i = 0; i < kNumStates; i++) + { + UInt32 j; + for (j = 0; j < LZMA_NUM_PB_STATES_MAX; j++) + { + p->isMatch[i][j] = kProbInitValue; + p->isRep0Long[i][j] = kProbInitValue; + } + p->isRep[i] = kProbInitValue; + p->isRepG0[i] = kProbInitValue; + p->isRepG1[i] = kProbInitValue; + p->isRepG2[i] = kProbInitValue; + } + + { + UInt32 num = 0x300 << (p->lp + p->lc); + for (i = 0; i < num; i++) + p->litProbs[i] = kProbInitValue; + } + + { + for (i = 0; i < kNumLenToPosStates; i++) + { + CLzmaProb *probs = p->posSlotEncoder[i]; + UInt32 j; + for (j = 0; j < (1 << kNumPosSlotBits); j++) + probs[j] = kProbInitValue; + } + } + { + for (i = 0; i < kNumFullDistances - kEndPosModelIndex; i++) + p->posEncoders[i] = kProbInitValue; + } + + LenEnc_Init(&p->lenEnc.p); + LenEnc_Init(&p->repLenEnc.p); + + for (i = 0; i < (1 << kNumAlignBits); i++) + p->posAlignEncoder[i] = kProbInitValue; + + p->optimumEndIndex = 0; + p->optimumCurrentIndex = 0; + p->additionalOffset = 0; + + p->pbMask = (1 << p->pb) - 1; + p->lpMask = (1 << p->lp) - 1; +} + +void LzmaEnc_InitPrices(CLzmaEnc *p) +{ + if (!p->fastMode) + { + FillDistancesPrices(p); + FillAlignPrices(p); + } + + p->lenEnc.tableSize = + p->repLenEnc.tableSize = + p->numFastBytes + 1 - LZMA_MATCH_LEN_MIN; + LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, p->ProbPrices); + LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, p->ProbPrices); +} + +static SRes LzmaEnc_AllocAndInit(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + UInt32 i; + for (i = 0; i < (UInt32)kDicLogSizeMaxCompress; i++) + if (p->dictSize <= ((UInt32)1 << i)) + break; + p->distTableSize = i * 2; + + p->finished = False; + p->result = SZ_OK; + RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig)); + LzmaEnc_Init(p); + LzmaEnc_InitPrices(p); + p->nowPos64 = 0; + return SZ_OK; +} + +static SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqInStream *inStream, ISeqOutStream *outStream, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + p->inStream = inStream; + p->rc.outStream = outStream; + return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig); +} + +SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, + ISeqInStream *inStream, UInt32 keepWindowSize, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + p->inStream = inStream; + return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); +} + +static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen) +{ + p->seqBufInStream.funcTable.Read = MyRead; + p->seqBufInStream.data = src; + p->seqBufInStream.rem = srcLen; +} + +SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen, + UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + LzmaEnc_SetInputBuf(p, src, srcLen); + p->inStream = &p->seqBufInStream.funcTable; + return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); +} + +void LzmaEnc_Finish(CLzmaEncHandle pp) +{ + #ifdef COMPRESS_MF_MT + CLzmaEnc *p = (CLzmaEnc *)pp; + if (p->mtMode) + MatchFinderMt_ReleaseStream(&p->matchFinderMt); + #else + pp = pp; + #endif +} + +typedef struct _CSeqOutStreamBuf +{ + ISeqOutStream funcTable; + Byte *data; + SizeT rem; + Bool overflow; +} CSeqOutStreamBuf; + +static size_t MyWrite(void *pp, const void *data, size_t size) +{ + CSeqOutStreamBuf *p = (CSeqOutStreamBuf *)pp; + if (p->rem < size) + { + size = p->rem; + p->overflow = True; + } + memcpy(p->data, data, size); + p->rem -= size; + p->data += size; + return size; +} + + +UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp) +{ + const CLzmaEnc *p = (CLzmaEnc *)pp; + return p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); +} + +const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp) +{ + const CLzmaEnc *p = (CLzmaEnc *)pp; + return p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; +} + +SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, Bool reInit, + Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + UInt64 nowPos64; + SRes res; + CSeqOutStreamBuf outStream; + + outStream.funcTable.Write = MyWrite; + outStream.data = dest; + outStream.rem = *destLen; + outStream.overflow = False; + + p->writeEndMark = False; + p->finished = False; + p->result = SZ_OK; + + if (reInit) + LzmaEnc_Init(p); + LzmaEnc_InitPrices(p); + nowPos64 = p->nowPos64; + RangeEnc_Init(&p->rc); + p->rc.outStream = &outStream.funcTable; + + res = LzmaEnc_CodeOneBlock(p, True, desiredPackSize, *unpackSize); + + *unpackSize = (UInt32)(p->nowPos64 - nowPos64); + *destLen -= outStream.rem; + if (outStream.overflow) + return SZ_ERROR_OUTPUT_EOF; + + return res; +} + +SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + SRes res = SZ_OK; + + #ifdef COMPRESS_MF_MT + Byte allocaDummy[0x300]; + int i = 0; + for (i = 0; i < 16; i++) + allocaDummy[i] = (Byte)i; + #endif + + RINOK(LzmaEnc_Prepare(pp, inStream, outStream, alloc, allocBig)); + + for (;;) + { + res = LzmaEnc_CodeOneBlock(p, False, 0, 0); + if (res != SZ_OK || p->finished != 0) + break; + if (progress != 0) + { + res = progress->Progress(progress, p->nowPos64, RangeEnc_GetProcessed(&p->rc)); + if (res != SZ_OK) + { + res = SZ_ERROR_PROGRESS; + break; + } + } + } + LzmaEnc_Finish(pp); + return res; +} + +SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + int i; + UInt32 dictSize = p->dictSize; + if (*size < LZMA_PROPS_SIZE) + return SZ_ERROR_PARAM; + *size = LZMA_PROPS_SIZE; + props[0] = (Byte)((p->pb * 5 + p->lp) * 9 + p->lc); + + for (i = 11; i <= 30; i++) + { + if (dictSize <= ((UInt32)2 << i)) + { + dictSize = (2 << i); + break; + } + if (dictSize <= ((UInt32)3 << i)) + { + dictSize = (3 << i); + break; + } + } + + for (i = 0; i < 4; i++) + props[1 + i] = (Byte)(dictSize >> (8 * i)); + return SZ_OK; +} + +SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + SRes res; + CLzmaEnc *p = (CLzmaEnc *)pp; + + CSeqOutStreamBuf outStream; + + LzmaEnc_SetInputBuf(p, src, srcLen); + + outStream.funcTable.Write = MyWrite; + outStream.data = dest; + outStream.rem = *destLen; + outStream.overflow = False; + + p->writeEndMark = writeEndMark; + res = LzmaEnc_Encode(pp, &outStream.funcTable, &p->seqBufInStream.funcTable, + progress, alloc, allocBig); + + *destLen -= outStream.rem; + if (outStream.overflow) + return SZ_ERROR_OUTPUT_EOF; + return res; +} + +SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc); + SRes res; + if (p == 0) + return SZ_ERROR_MEM; + + res = LzmaEnc_SetProps(p, props); + if (res == SZ_OK) + { + res = LzmaEnc_WriteProperties(p, propsEncoded, propsSize); + if (res == SZ_OK) + res = LzmaEnc_MemEncode(p, dest, destLen, src, srcLen, + writeEndMark, progress, alloc, allocBig); + } + + LzmaEnc_Destroy(p, alloc, allocBig); + return res; +} diff --git a/wiipax/client/LzmaEnc.h b/wiipax/client/LzmaEnc.h new file mode 100644 index 0000000..e3d84fa --- /dev/null +++ b/wiipax/client/LzmaEnc.h @@ -0,0 +1,72 @@ +/* LzmaEnc.h -- LZMA Encoder +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZMAENC_H +#define __LZMAENC_H + +#include "Types.h" + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaEncProps +{ + int level; /* 0 <= level <= 9 */ + UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version + (1 << 12) <= dictSize <= (1 << 30) for 64-bit version + default = (1 << 24) */ + int lc; /* 0 <= lc <= 8, default = 3 */ + int lp; /* 0 <= lp <= 4, default = 0 */ + int pb; /* 0 <= pb <= 4, default = 2 */ + int algo; /* 0 - fast, 1 - normal, default = 1 */ + int fb; /* 5 <= fb <= 273, default = 32 */ + int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */ + int numHashBytes; /* 2, 3 or 4, default = 4 */ + UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */ + unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */ + int numThreads; /* 1 or 2, default = 2 */ +} CLzmaEncProps; + +void LzmaEncProps_Init(CLzmaEncProps *p); +void LzmaEncProps_Normalize(CLzmaEncProps *p); +UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2); + + +/* ---------- CLzmaEncHandle Interface ---------- */ + +/* LzmaEnc_* functions can return the following exit codes: +Returns: + SZ_OK - OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_PARAM - Incorrect paramater in props + SZ_ERROR_WRITE - Write callback error. + SZ_ERROR_PROGRESS - some break from progress callback + SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) +*/ + +typedef void * CLzmaEncHandle; + +CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc); +void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig); +SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props); +SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size); +SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); +SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); + +/* ---------- One Call Interface ---------- */ + +/* LzmaEncode +Return code: + SZ_OK - OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_PARAM - Incorrect paramater + SZ_ERROR_OUTPUT_EOF - output buffer overflow + SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) +*/ + +SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); + +#endif diff --git a/wiipax/client/Makefile b/wiipax/client/Makefile new file mode 100644 index 0000000..1f3ecfc --- /dev/null +++ b/wiipax/client/Makefile @@ -0,0 +1,14 @@ +CFLAGS = -Wall -W -Os -g +TARGET = wiipax +OBJS = LzFind.o LzmaEnc.o LzmaDec.o lzma.o main.o +OBJS += stub_mini.o stub_mini_debug.o +OBJS += stub_dkf.o stub_dkf_debug.o +OBJS += stub_dkfc.o stub_dkfc_debug.o + +NOMAPFILE = 1 + +include ../../common.mk + +install: all + install -m 755 $(TARGET) $(WIIDEV)/bin + diff --git a/wiipax/client/Types.h b/wiipax/client/Types.h new file mode 100644 index 0000000..2638196 --- /dev/null +++ b/wiipax/client/Types.h @@ -0,0 +1,208 @@ +/* Types.h -- Basic types +2008-11-23 : Igor Pavlov : Public domain */ + +#ifndef __7Z_TYPES_H +#define __7Z_TYPES_H + +#include + +#ifdef _WIN32 +#include +#endif + +#define SZ_OK 0 + +#define SZ_ERROR_DATA 1 +#define SZ_ERROR_MEM 2 +#define SZ_ERROR_CRC 3 +#define SZ_ERROR_UNSUPPORTED 4 +#define SZ_ERROR_PARAM 5 +#define SZ_ERROR_INPUT_EOF 6 +#define SZ_ERROR_OUTPUT_EOF 7 +#define SZ_ERROR_READ 8 +#define SZ_ERROR_WRITE 9 +#define SZ_ERROR_PROGRESS 10 +#define SZ_ERROR_FAIL 11 +#define SZ_ERROR_THREAD 12 + +#define SZ_ERROR_ARCHIVE 16 +#define SZ_ERROR_NO_ARCHIVE 17 + +typedef int SRes; + +#ifdef _WIN32 +typedef DWORD WRes; +#else +typedef int WRes; +#endif + +#ifndef RINOK +#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } +#endif + +typedef unsigned char Byte; +typedef short Int16; +typedef unsigned short UInt16; + +#ifdef _LZMA_UINT32_IS_ULONG +typedef long Int32; +typedef unsigned long UInt32; +#else +typedef int Int32; +typedef unsigned int UInt32; +#endif + +#ifdef _SZ_NO_INT_64 + +/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. + NOTES: Some code will work incorrectly in that case! */ + +typedef long Int64; +typedef unsigned long UInt64; + +#else + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif + +#endif + +#ifdef _LZMA_NO_SYSTEM_SIZE_T +typedef UInt32 SizeT; +#else +typedef size_t SizeT; +#endif + +typedef int Bool; +#define True 1 +#define False 0 + + +#ifdef _MSC_VER + +#if _MSC_VER >= 1300 +#define MY_NO_INLINE __declspec(noinline) +#else +#define MY_NO_INLINE +#endif + +#define MY_CDECL __cdecl +#define MY_STD_CALL __stdcall +#define MY_FAST_CALL MY_NO_INLINE __fastcall + +#else + +#define MY_CDECL +#define MY_STD_CALL +#define MY_FAST_CALL + +#endif + + +/* The following interfaces use first parameter as pointer to structure */ + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) < input(*size)) is allowed */ +} ISeqInStream; + +/* it can return SZ_ERROR_INPUT_EOF */ +SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); +SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); +SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); + +typedef struct +{ + size_t (*Write)(void *p, const void *buf, size_t size); + /* Returns: result - the number of actually written bytes. + (result < size) means error */ +} ISeqOutStream; + +typedef enum +{ + SZ_SEEK_SET = 0, + SZ_SEEK_CUR = 1, + SZ_SEEK_END = 2 +} ESzSeek; + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ISeekInStream; + +typedef struct +{ + SRes (*Look)(void *p, void **buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) > input(*size)) is not allowed + (output(*size) < input(*size)) is allowed */ + SRes (*Skip)(void *p, size_t offset); + /* offset must be <= output(*size) of Look */ + + SRes (*Read)(void *p, void *buf, size_t *size); + /* reads directly (without buffer). It's same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ILookInStream; + +SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); +SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); + +/* reads via ILookInStream::Read */ +SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); +SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); + +#define LookToRead_BUF_SIZE (1 << 14) + +typedef struct +{ + ILookInStream s; + ISeekInStream *realStream; + size_t pos; + size_t size; + Byte buf[LookToRead_BUF_SIZE]; +} CLookToRead; + +void LookToRead_CreateVTable(CLookToRead *p, int lookahead); +void LookToRead_Init(CLookToRead *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToLook; + +void SecToLook_CreateVTable(CSecToLook *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToRead; + +void SecToRead_CreateVTable(CSecToRead *p); + +typedef struct +{ + SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); + /* Returns: result. (result != SZ_OK) means break. + Value (UInt64)(Int64)-1 for size means unknown value. */ +} ICompressProgress; + +typedef struct +{ + void *(*Alloc)(void *p, size_t size); + void (*Free)(void *p, void *address); /* address can be 0 */ +} ISzAlloc; + +#define IAlloc_Alloc(p, size) (p)->Alloc((p), size) +#define IAlloc_Free(p, a) (p)->Free((p), a) + +#endif diff --git a/wiipax/client/common.h b/wiipax/client/common.h new file mode 100644 index 0000000..18eadd8 --- /dev/null +++ b/wiipax/client/common.h @@ -0,0 +1,43 @@ +#ifndef _COMMON_H_ +#define _COMMON_H_ + +typedef unsigned char u8; +typedef signed char s8; +typedef unsigned short u16; +typedef signed short s16; +typedef unsigned int u32; +typedef signed int s32; +typedef unsigned long long u64; +typedef signed long long s64; + +#define round_up(x,n) (-(-(x) & -(n))) + +#define die(...) { \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "\n"); exit(1); \ +} + +#define perrordie(x) { perror(x); exit(1); } + +#if BYTE_ORDER == BIG_ENDIAN + +#define be32(x) (x) +#define be16(x) (x) + +#else + +static inline u32 be32(const u32 v) { + return (v >> 24) | + ((v >> 8) & 0x0000FF00) | + ((v << 8) & 0x00FF0000) | + (v << 24); +} + +static inline u16 be16(const u16 v) { + return (v >> 8) | (v << 8); +} + +#endif /* BIG_ENDIAN */ + +#endif /* _COMMON_H_ */ + diff --git a/wiipax/client/elf_abi.h b/wiipax/client/elf_abi.h new file mode 100644 index 0000000..379355c --- /dev/null +++ b/wiipax/client/elf_abi.h @@ -0,0 +1,594 @@ +/* + * Copyright (c) 1995, 1996, 2001, 2002 + * Erik Theisen. All rights reserved. + * + * 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. + */ + +/* + * This is the ELF ABI header file + * formerly known as "elf_abi.h". + */ + +#ifndef _ELF_ABI_H +#define _ELF_ABI_H + +#include "common.h" + +/* + * This version doesn't work for 64-bit ABIs - Erik. + */ + +/* + * These typedefs need to be handled better. + */ +typedef u32 Elf32_Addr; /* Unsigned program address */ +typedef u32 Elf32_Off; /* Unsigned file offset */ +typedef s32 Elf32_Sword; /* Signed large integer */ +typedef u32 Elf32_Word; /* Unsigned large integer */ +typedef u16 Elf32_Half; /* Unsigned medium integer */ + +/* e_ident[] identification indexes */ +#define EI_MAG0 0 /* file ID */ +#define EI_MAG1 1 /* file ID */ +#define EI_MAG2 2 /* file ID */ +#define EI_MAG3 3 /* file ID */ +#define EI_CLASS 4 /* file class */ +#define EI_DATA 5 /* data encoding */ +#define EI_VERSION 6 /* ELF header version */ +#define EI_OSABI 7 /* OS/ABI specific ELF extensions */ +#define EI_ABIVERSION 8 /* ABI target version */ +#define EI_PAD 9 /* start of pad bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* e_ident[] magic number */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" /* magic */ +#define SELFMAG 4 /* size of magic */ + +/* e_ident[] file class */ +#define ELFCLASSNONE 0 /* invalid */ +#define ELFCLASS32 1 /* 32-bit objs */ +#define ELFCLASS64 2 /* 64-bit objs */ +#define ELFCLASSNUM 3 /* number of classes */ + +/* e_ident[] data encoding */ +#define ELFDATANONE 0 /* invalid */ +#define ELFDATA2LSB 1 /* Little-Endian */ +#define ELFDATA2MSB 2 /* Big-Endian */ +#define ELFDATANUM 3 /* number of data encode defines */ + +/* e_ident[] OS/ABI specific ELF extensions */ +#define ELFOSABI_NONE 0 /* No extension specified */ +#define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */ +#define ELFOSABI_NETBSD 2 /* NetBSD */ +#define ELFOSABI_LINUX 3 /* Linux */ +#define ELFOSABI_SOLARIS 6 /* Sun Solaris */ +#define ELFOSABI_AIX 7 /* AIX */ +#define ELFOSABI_IRIX 8 /* IRIX */ +#define ELFOSABI_FREEBSD 9 /* FreeBSD */ +#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */ +#define ELFOSABI_MODESTO 11 /* Novell Modesto */ +#define ELFOSABI_OPENBSD 12 /* OpenBSD */ +/* 64-255 Architecture-specific value range */ + +/* e_ident[] ABI Version */ +#define ELFABIVERSION 0 + +/* e_ident */ +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ + (ehdr).e_ident[EI_MAG3] == ELFMAG3) + +/* ELF Header */ +typedef struct elfhdr{ + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ + Elf32_Half e_type; /* object file type */ + Elf32_Half e_machine; /* machine */ + Elf32_Word e_version; /* object file version */ + Elf32_Addr e_entry; /* virtual entry point */ + Elf32_Off e_phoff; /* program header table offset */ + Elf32_Off e_shoff; /* section header table offset */ + Elf32_Word e_flags; /* processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size */ + Elf32_Half e_phentsize; /* program header entry size */ + Elf32_Half e_phnum; /* number of program header entries */ + Elf32_Half e_shentsize; /* section header entry size */ + Elf32_Half e_shnum; /* number of section header entries */ + Elf32_Half e_shstrndx; /* section header table's "section + header string table" entry offset */ +} Elf32_Ehdr; + +/* e_type */ +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* relocatable file */ +#define ET_EXEC 2 /* executable file */ +#define ET_DYN 3 /* shared object file */ +#define ET_CORE 4 /* core file */ +#define ET_NUM 5 /* number of types */ +#define ET_LOOS 0xfe00 /* reserved range for operating */ +#define ET_HIOS 0xfeff /* system specific e_type */ +#define ET_LOPROC 0xff00 /* reserved range for processor */ +#define ET_HIPROC 0xffff /* specific e_type */ + +/* e_machine */ +#define EM_NONE 0 /* No Machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola 68000 */ +#define EM_88K 5 /* Motorola 88000 */ +#if 0 +#define EM_486 6 /* RESERVED - was Intel 80486 */ +#endif +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ +#define EM_S370 9 /* IBM System/370 Processor */ +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ +#if 0 +#define EM_SPARC64 11 /* RESERVED - was SPARC v9 + 64-bit unoffical */ +#endif +/* RESERVED 11-14 for future use */ +#define EM_PARISC 15 /* HPPA */ +/* RESERVED 16 for future use */ +#define EM_VPP500 17 /* Fujitsu VPP500 */ +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ +#define EM_960 19 /* Intel 80960 */ +#define EM_PPC 20 /* PowerPC */ +#define EM_PPC64 21 /* 64-bit PowerPC */ +#define EM_S390 22 /* IBM System/390 Processor */ +/* RESERVED 23-35 for future use */ +#define EM_V800 36 /* NEC V800 */ +#define EM_FR20 37 /* Fujitsu FR20 */ +#define EM_RH32 38 /* TRW RH-32 */ +#define EM_RCE 39 /* Motorola RCE */ +#define EM_ARM 40 /* Advanced Risc Machines ARM */ +#define EM_ALPHA 41 /* Digital Alpha */ +#define EM_SH 42 /* Hitachi SH */ +#define EM_SPARCV9 43 /* SPARC Version 9 */ +#define EM_TRICORE 44 /* Siemens TriCore embedded processor */ +#define EM_ARC 45 /* Argonaut RISC Core */ +#define EM_H8_300 46 /* Hitachi H8/300 */ +#define EM_H8_300H 47 /* Hitachi H8/300H */ +#define EM_H8S 48 /* Hitachi H8S */ +#define EM_H8_500 49 /* Hitachi H8/500 */ +#define EM_IA_64 50 /* Intel Merced */ +#define EM_MIPS_X 51 /* Stanford MIPS-X */ +#define EM_COLDFIRE 52 /* Motorola Coldfire */ +#define EM_68HC12 53 /* Motorola M68HC12 */ +#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/ +#define EM_PCP 55 /* Siemens PCP */ +#define EM_NCPU 56 /* Sony nCPU embeeded RISC */ +#define EM_NDR1 57 /* Denso NDR1 microprocessor */ +#define EM_STARCORE 58 /* Motorola Start*Core processor */ +#define EM_ME16 59 /* Toyota ME16 processor */ +#define EM_ST100 60 /* STMicroelectronic ST100 processor */ +#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ +#define EM_X86_64 62 /* AMD x86-64 */ +#define EM_PDSP 63 /* Sony DSP Processor */ +/* RESERVED 64,65 for future use */ +#define EM_FX66 66 /* Siemens FX66 microcontroller */ +#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ +#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ +#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ +#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ +#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ +#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ +#define EM_SVX 73 /* Silicon Graphics SVx */ +#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ +#define EM_VAX 75 /* Digital VAX */ +#define EM_CHRIS 76 /* Axis Communications embedded proc. */ +#define EM_JAVELIN 77 /* Infineon Technologies emb. proc. */ +#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ +#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX 80 /* Donald Knuth's edu 64-bit proc. */ +#define EM_HUANY 81 /* Harvard University mach-indep objs */ +#define EM_PRISM 82 /* SiTera Prism */ +#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ +#define EM_FR30 84 /* Fujitsu FR30 */ +#define EM_D10V 85 /* Mitsubishi DV10V */ +#define EM_D30V 86 /* Mitsubishi DV30V */ +#define EM_V850 87 /* NEC v850 */ +#define EM_M32R 88 /* Mitsubishi M32R */ +#define EM_MN10300 89 /* Matsushita MN10200 */ +#define EM_MN10200 90 /* Matsushita MN10200 */ +#define EM_PJ 91 /* picoJava */ +#define EM_NUM 92 /* number of machine types */ + +/* Version */ +#define EV_NONE 0 /* Invalid */ +#define EV_CURRENT 1 /* Current */ +#define EV_NUM 2 /* number of versions */ + +/* Section Header */ +typedef struct { + Elf32_Word sh_name; /* name - index into section header + string table section */ + Elf32_Word sh_type; /* type */ + Elf32_Word sh_flags; /* flags */ + Elf32_Addr sh_addr; /* address */ + Elf32_Off sh_offset; /* file offset */ + Elf32_Word sh_size; /* section size */ + Elf32_Word sh_link; /* section header table index link */ + Elf32_Word sh_info; /* extra information */ + Elf32_Word sh_addralign; /* address alignment */ + Elf32_Word sh_entsize; /* section entry size */ +} Elf32_Shdr; + +/* Special Section Indexes */ +#define SHN_UNDEF 0 /* undefined */ +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ +#define SHN_LOPROC 0xff00 /* reserved range for processor */ +#define SHN_HIPROC 0xff1f /* specific section indexes */ +#define SHN_LOOS 0xff20 /* reserved range for operating */ +#define SHN_HIOS 0xff3f /* specific semantics */ +#define SHN_ABS 0xfff1 /* absolute value */ +#define SHN_COMMON 0xfff2 /* common symbol */ +#define SHN_XINDEX 0xffff /* Index is an extra table */ +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ + +/* sh_type */ +#define SHT_NULL 0 /* inactive */ +#define SHT_PROGBITS 1 /* program defined information */ +#define SHT_SYMTAB 2 /* symbol table section */ +#define SHT_STRTAB 3 /* string table section */ +#define SHT_RELA 4 /* relocation section with addends*/ +#define SHT_HASH 5 /* symbol hash table section */ +#define SHT_DYNAMIC 6 /* dynamic section */ +#define SHT_NOTE 7 /* note section */ +#define SHT_NOBITS 8 /* no space section */ +#define SHT_REL 9 /* relation section without addends */ +#define SHT_SHLIB 10 /* reserved - purpose unknown */ +#define SHT_DYNSYM 11 /* dynamic symbol table section */ +#define SHT_INIT_ARRAY 14 /* Array of constructors */ +#define SHT_FINI_ARRAY 15 /* Array of destructors */ +#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ +#define SHT_GROUP 17 /* Section group */ +#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ +#define SHT_NUM 19 /* number of section types */ +#define SHT_LOOS 0x60000000 /* Start OS-specific */ +#define SHT_HIOS 0x6fffffff /* End OS-specific */ +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ +#define SHT_HIPROC 0x7fffffff /* specific section header types */ +#define SHT_LOUSER 0x80000000 /* reserved range for application */ +#define SHT_HIUSER 0xffffffff /* specific indexes */ + +/* Section names */ +#define ELF_BSS ".bss" /* uninitialized data */ +#define ELF_COMMENT ".comment" /* version control information */ +#define ELF_DATA ".data" /* initialized data */ +#define ELF_DATA1 ".data1" /* initialized data */ +#define ELF_DEBUG ".debug" /* debug */ +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ +#define ELF_FINI ".fini" /* termination code */ +#define ELF_FINI_ARRAY ".fini_array" /* Array of destructors */ +#define ELF_GOT ".got" /* global offset table */ +#define ELF_HASH ".hash" /* symbol hash table */ +#define ELF_INIT ".init" /* initialization code */ +#define ELF_INIT_ARRAY ".init_array" /* Array of constuctors */ +#define ELF_INTERP ".interp" /* Pathname of program interpreter */ +#define ELF_LINE ".line" /* Symbolic line numnber information */ +#define ELF_NOTE ".note" /* Contains note section */ +#define ELF_PLT ".plt" /* Procedure linkage table */ +#define ELF_PREINIT_ARRAY ".preinit_array" /* Array of pre-constructors */ +#define ELF_REL_DATA ".rel.data" /* relocation data */ +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ +#define ELF_REL_TEXT ".rel.text" /* relocation code */ +#define ELF_RODATA ".rodata" /* read-only data */ +#define ELF_RODATA1 ".rodata1" /* read-only data */ +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ +#define ELF_STRTAB ".strtab" /* string table */ +#define ELF_SYMTAB ".symtab" /* symbol table */ +#define ELF_SYMTAB_SHNDX ".symtab_shndx"/* symbol table section index */ +#define ELF_TBSS ".tbss" /* thread local uninit data */ +#define ELF_TDATA ".tdata" /* thread local init data */ +#define ELF_TDATA1 ".tdata1" /* thread local init data */ +#define ELF_TEXT ".text" /* code */ + +/* Section Attribute Flags - sh_flags */ +#define SHF_WRITE 0x1 /* Writable */ +#define SHF_ALLOC 0x2 /* occupies memory */ +#define SHF_EXECINSTR 0x4 /* executable */ +#define SHF_MERGE 0x10 /* Might be merged */ +#define SHF_STRINGS 0x20 /* Contains NULL terminated strings */ +#define SHF_INFO_LINK 0x40 /* sh_info contains SHT index */ +#define SHF_LINK_ORDER 0x80 /* Preserve order after combining*/ +#define SHF_OS_NONCONFORMING 0x100 /* Non-standard OS specific handling */ +#define SHF_GROUP 0x200 /* Member of section group */ +#define SHF_TLS 0x400 /* Thread local storage */ +#define SHF_MASKOS 0x0ff00000 /* OS specific */ +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific section attributes */ + +/* Section Group Flags */ +#define GRP_COMDAT 0x1 /* COMDAT group */ +#define GRP_MASKOS 0x0ff00000 /* Mask OS specific flags */ +#define GRP_MASKPROC 0xf0000000 /* Mask processor specific flags */ + +/* Symbol Table Entry */ +typedef struct elf32_sym { + Elf32_Word st_name; /* name - index into string table */ + Elf32_Addr st_value; /* symbol value */ + Elf32_Word st_size; /* symbol size */ + unsigned char st_info; /* type and binding */ + unsigned char st_other; /* 0 - no defined meaning */ + Elf32_Half st_shndx; /* section header index */ +} Elf32_Sym; + +/* Symbol table index */ +#define STN_UNDEF 0 /* undefined */ + +/* Extract symbol info - st_info */ +#define ELF32_ST_BIND(x) ((x) >> 4) +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) +#define ELF32_ST_VISIBILITY(x) ((x) & 0x3) + +/* Symbol Binding - ELF32_ST_BIND - st_info */ +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* like global - lower precedence */ +#define STB_NUM 3 /* number of symbol bindings */ +#define STB_LOOS 10 /* reserved range for operating */ +#define STB_HIOS 12 /* system specific symbol bindings */ +#define STB_LOPROC 13 /* reserved range for processor */ +#define STB_HIPROC 15 /* specific symbol bindings */ + +/* Symbol type - ELF32_ST_TYPE - st_info */ +#define STT_NOTYPE 0 /* not specified */ +#define STT_OBJECT 1 /* data object */ +#define STT_FUNC 2 /* function */ +#define STT_SECTION 3 /* section */ +#define STT_FILE 4 /* file */ +#define STT_NUM 5 /* number of symbol types */ +#define STT_TLS 6 /* Thread local storage symbol */ +#define STT_LOOS 10 /* reserved range for operating */ +#define STT_HIOS 12 /* system specific symbol types */ +#define STT_LOPROC 13 /* reserved range for processor */ +#define STT_HIPROC 15 /* specific symbol types */ + +/* Symbol visibility - ELF32_ST_VISIBILITY - st_other */ +#define STV_DEFAULT 0 /* Normal visibility rules */ +#define STV_INTERNAL 1 /* Processor specific hidden class */ +#define STV_HIDDEN 2 /* Symbol unavailable in other mods */ +#define STV_PROTECTED 3 /* Not preemptible, not exported */ + + +/* Relocation entry with implicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ +} Elf32_Rel; + +/* Relocation entry with explicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ + Elf32_Sword r_addend; +} Elf32_Rela; + +/* Extract relocation info - r_info */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char) (i)) +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) + +/* Program Header */ +typedef struct { + Elf32_Word p_type; /* segment type */ + Elf32_Off p_offset; /* segment offset */ + Elf32_Addr p_vaddr; /* virtual address of segment */ + Elf32_Addr p_paddr; /* physical address - ignored? */ + Elf32_Word p_filesz; /* number of bytes in file for seg. */ + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ + Elf32_Word p_flags; /* flags */ + Elf32_Word p_align; /* memory alignment */ +} Elf32_Phdr; + +/* Segment types - p_type */ +#define PT_NULL 0 /* unused */ +#define PT_LOAD 1 /* loadable segment */ +#define PT_DYNAMIC 2 /* dynamic linking section */ +#define PT_INTERP 3 /* the RTLD */ +#define PT_NOTE 4 /* auxiliary information */ +#define PT_SHLIB 5 /* reserved - purpose undefined */ +#define PT_PHDR 6 /* program header */ +#define PT_TLS 7 /* Thread local storage template */ +#define PT_NUM 8 /* Number of segment types */ +#define PT_LOOS 0x60000000 /* reserved range for operating */ +#define PT_HIOS 0x6fffffff /* system specific segment types */ +#define PT_LOPROC 0x70000000 /* reserved range for processor */ +#define PT_HIPROC 0x7fffffff /* specific segment types */ + +/* Segment flags - p_flags */ +#define PF_X 0x1 /* Executable */ +#define PF_W 0x2 /* Writable */ +#define PF_R 0x4 /* Readable */ +#define PF_MASKOS 0x0ff00000 /* OS specific segment flags */ +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific segment flags */ +/* Dynamic structure */ +typedef struct +{ + Elf32_Sword d_tag; /* controls meaning of d_val */ + union + { + Elf32_Word d_val; /* Multiple meanings - see d_tag */ + Elf32_Addr d_ptr; /* program virtual address */ + } d_un; +} Elf32_Dyn; + +extern Elf32_Dyn _DYNAMIC[]; + +/* Dynamic Array Tags - d_tag */ +#define DT_NULL 0 /* marks end of _DYNAMIC array */ +#define DT_NEEDED 1 /* string table offset of needed lib */ +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ +#define DT_PLTGOT 3 /* address PLT/GOT */ +#define DT_HASH 4 /* address of symbol hash table */ +#define DT_STRTAB 5 /* address of string table */ +#define DT_SYMTAB 6 /* address of symbol table */ +#define DT_RELA 7 /* address of relocation table */ +#define DT_RELASZ 8 /* size of relocation table */ +#define DT_RELAENT 9 /* size of relocation entry */ +#define DT_STRSZ 10 /* size of string table */ +#define DT_SYMENT 11 /* size of symbol table entry */ +#define DT_INIT 12 /* address of initialization func. */ +#define DT_FINI 13 /* address of termination function */ +#define DT_SONAME 14 /* string table offset of shared obj */ +#define DT_RPATH 15 /* string table offset of library + search path */ +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ +#define DT_REL 17 /* address of rel. tbl. w addends */ +#define DT_RELSZ 18 /* size of DT_REL relocation table */ +#define DT_RELENT 19 /* size of DT_REL relocation entry */ +#define DT_PLTREL 20 /* PLT referenced relocation entry */ +#define DT_DEBUG 21 /* bugger */ +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ +#define DT_BIND_NOW 24 /* Process relocations of object */ +#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ +#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ +#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ +#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ +#define DT_RUNPATH 29 /* Library search path */ +#define DT_FLAGS 30 /* Flags for the object being loaded */ +#define DT_ENCODING 32 /* Start of encoded range */ +#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ +#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ +#define DT_NUM 34 /* Number used. */ +#define DT_LOOS 0x60000000 /* reserved range for OS */ +#define DT_HIOS 0x6fffffff /* specific dynamic array tags */ +#define DT_LOPROC 0x70000000 /* reserved range for processor */ +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ + +/* Dynamic Tag Flags - d_un.d_val */ +#define DF_ORIGIN 0x01 /* Object may use DF_ORIGIN */ +#define DF_SYMBOLIC 0x02 /* Symbol resolutions starts here */ +#define DF_TEXTREL 0x04 /* Object contains text relocations */ +#define DF_BIND_NOW 0x08 /* No lazy binding for this object */ +#define DF_STATIC_TLS 0x10 /* Static thread local storage */ + +/* Standard ELF hashing function */ +unsigned long elf_hash(const unsigned char *name); + +#define ELF_TARG_VER 1 /* The ver for which this code is intended */ + +/* + * XXX - PowerPC defines really don't belong in here, + * but we'll put them in for simplicity. + */ + +/* Values for Elf32/64_Ehdr.e_flags. */ +#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ + +/* Cygnus local bits below */ +#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ +#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib + flag */ + +/* PowerPC relocations defined by the ABIs */ +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 /* 32bit absolute address */ +#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ +#define R_PPC_ADDR16 3 /* 16bit absolute address */ +#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ +#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ +#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ +#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 /* PC relative 26 bit */ +#define R_PPC_REL14 11 /* PC relative 16 bit */ +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 +/* Keep this the last entry. */ +#define R_PPC_NUM 37 + +/* The remaining relocs are from the Embedded ELF ABI, and are not + in the SVR4 ELF ABI. */ +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ + +/* Diab tool relocations. */ +#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ +#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ +#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ +#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ +#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ +#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ + +/* This is a phony reloc to handle any old fashioned TOC16 references + that may still be in object files. */ +#define R_PPC_TOC16 255 + +#endif /* _ELF_H */ + diff --git a/wiipax/client/lzma.c b/wiipax/client/lzma.c new file mode 100644 index 0000000..183b17b --- /dev/null +++ b/wiipax/client/lzma.c @@ -0,0 +1,123 @@ +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "lzma.h" + +#include "LzmaDec.h" + +static void *lz_malloc(void *p, size_t size) { + (void) p; + return malloc(size); +} + +static void lz_free(void *p, void *address) { + (void) p; + free(address); +} + +static ISzAlloc lz_alloc = { lz_malloc, lz_free }; + +static lzma_t *lzma_alloc(const u32 len) { + lzma_t *lzma; + + lzma = (lzma_t *) calloc(1, sizeof(lzma_t)); + + if (!lzma) + die("Failed to alloc 0x%x bytes", (u32) sizeof(lzma_t)); + + lzma->data = calloc(1, len); + if (!lzma->data) + die("Failed to alloc 0x%x bytes", len); + + return lzma; +} + +void lzma_free(lzma_t *lzma) { + free(lzma->data); + free(lzma); +} + +lzma_t *lzma_compress(const u8 *src, const u32 len) { + lzma_t *lzma; + CLzmaEncProps props; + size_t len_out; + size_t len_props = LZMA_PROPS_SIZE; + SRes res; + + printf("Compressing..."); + fflush(stdout); + + lzma = lzma_alloc(2*len); + + LzmaEncProps_Init(&props); + props.level = 7; + LzmaEncProps_Normalize(&props); + + len_out = 2*len; + res = LzmaEncode(lzma->data, &len_out, src, len, &props, lzma->props, + &len_props, 1, NULL, &lz_alloc, &lz_alloc); + + if (res != SZ_OK) + die(" failed (%d)", res); + + if (len_props != LZMA_PROPS_SIZE) + die(" failed: encoder propsize %u != %u", (u32) len_props, + LZMA_PROPS_SIZE); + + printf(" %u -> %u = %3.2f%%\n", len, (u32) len_out, + 100.0 * (float) len_out / (float) len); + + lzma->len_in = len; + lzma->len_out = len_out; + + return lzma; +} + +void lzma_decode(const lzma_t *lzma, u8 *dst) { + SizeT len_in; + SizeT len_out; + ELzmaStatus status; + SRes res; + + len_in = lzma->len_out; + len_out = lzma->len_in; + + res = LzmaDecode(dst, &len_out, lzma->data, &len_in, lzma->props, + LZMA_PROPS_SIZE, LZMA_FINISH_END, &status, &lz_alloc); + + if (res != SZ_OK) + die("Error decoding %d (%u)\n", res, status); + + *dst = len_out; +} + +void lzma_write(const char *filename, const lzma_t *lzma) { + int fd; + int i; + + fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0755); + if (fd < 0) + perrordie("Could not open file"); + + if (write(fd, lzma->props, LZMA_PROPS_SIZE) != LZMA_PROPS_SIZE) + perrordie("Could not write to file"); + + u64 size = lzma->len_in; + for (i = 0; i < 8; ++i) { + u8 j = size & 0xff; + size >>= 8; + if (write(fd, &j, 1) != 1) + perrordie("Could not write to file"); + } + + if (write(fd, lzma->data, lzma->len_out) != lzma->len_out) + perrordie("Could not write to file"); + + close(fd); +} + diff --git a/wiipax/client/lzma.h b/wiipax/client/lzma.h new file mode 100644 index 0000000..d8badf0 --- /dev/null +++ b/wiipax/client/lzma.h @@ -0,0 +1,20 @@ +#ifndef _LZMA_H_ +#define _LZMA_H_ + +#include "common.h" +#include "LzmaEnc.h" + +typedef struct { + u32 len_in; + u32 len_out; + u8 props[LZMA_PROPS_SIZE]; + u8 *data; +} lzma_t; + +lzma_t *lzma_compress(const u8 *src, const u32 len); +void lzma_decode(const lzma_t *lzma, u8 *dst); +void lzma_write(const char *filename, const lzma_t *lzma); +void lzma_free(lzma_t *lzma); + +#endif /* _LZMA_H_ */ + diff --git a/wiipax/client/main.c b/wiipax/client/main.c new file mode 100644 index 0000000..0cd231d --- /dev/null +++ b/wiipax/client/main.c @@ -0,0 +1,517 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "lzma.h" +#include "elf_abi.h" + +#define ALIGNOFFSET 32 + +extern int stub_mini_elf_len; +extern char stub_mini_elf[]; +extern int stub_mini_debug_elf_len; +extern char stub_mini_debug_elf[]; +extern int stub_dkf_elf_len; +extern char stub_dkf_elf[]; +extern int stub_dkf_debug_elf_len; +extern char stub_dkf_debug_elf[]; +extern int stub_dkfc_elf_len; +extern char stub_dkfc_elf[]; +extern int stub_dkfc_debug_elf_len; +extern char stub_dkfc_debug_elf[]; + +typedef struct { + const char *name; + const int *len; + const u8 *data; +} stub_t; + +static const stub_t stubs[] = { + { "mini", &stub_mini_elf_len, (u8 *) stub_mini_elf }, + { "mini_debug", &stub_mini_debug_elf_len, (u8 *) stub_mini_debug_elf }, + { "devkitfail", &stub_dkf_elf_len, (u8 *) stub_dkf_elf }, + { "devkitfail_debug", &stub_dkf_debug_elf_len, (u8 *) stub_dkf_debug_elf }, + { "dkfailchannel", &stub_dkfc_elf_len, (u8 *) stub_dkfc_elf }, + { "dkfailchannel_debug", &stub_dkfc_debug_elf_len, (u8 *) stub_dkfc_debug_elf }, + { NULL, NULL, NULL } +}; + +typedef struct { + u8 *data; + u32 len; + Elf32_Ehdr *ehdr; + Elf32_Phdr *phdrs; + Elf32_Shdr *shdrs; +} elf_t; + +typedef struct { + u32 dataptr; + u32 len_in; + u32 len_out; + u8 props[LZMA_PROPS_SIZE]; +} __attribute__((packed)) payload_t; + +static inline u8 *phdr_data(const elf_t *elf, const u16 ndx, const u32 off) { + return &elf->data[be32(elf->phdrs[ndx].p_offset) + off]; +} + +static elf_t *read_stub(const char *name) { + elf_t *elf = (elf_t *) calloc(1, sizeof(elf_t)); + if (!elf) + die("Error allocating %u bytes", (u32) sizeof(elf_t)); + + int i = 0; + while (stubs[i].name) { + if (!strcmp(name, stubs[i].name)) { + printf("Using stub '%s'\n", name); + elf->len = *(stubs[i].len); + elf->data = (u8 *) stubs[i].data; + + return elf; + } + ++i; + } + + die("Unknown stub '%s'", name); + return NULL; +} + +static elf_t *read_elf(const char *filename) { + int fd; + struct stat st; + elf_t *elf; + + printf("Reading %s\n", filename); + + fd = open(filename, O_RDONLY); + if (fd < 0) + perrordie("Could not open ELF file"); + + if (fstat(fd, &st)) + perrordie("Could not stat ELF file"); + + if ((u32) st.st_size < sizeof(Elf32_Ehdr)) + die("File too short for ELF"); + + elf = (elf_t *) calloc(1, sizeof(elf_t)); + if (!elf) + die("Error allocating %u bytes", (u32) sizeof(elf_t)); + + elf->len = st.st_size; + elf->data = (u8 *) malloc(elf->len); + + if (!elf->data) + die("Error allocating %u bytes", elf->len); + + if (read(fd, elf->data, elf->len) != elf->len) + perrordie("Could not read from file"); + + close(fd); + + return elf; +} + +static void write_elf(const char *filename, const elf_t *elf) { + int fd; + + fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0755); + if (fd < 0) + perrordie("Could not open ELF file"); + + if (write(fd, elf->data, elf->len) != elf->len) + perrordie("Could not write ELF file"); + + close(fd); +} + +static void free_elf(elf_t *elf) { + free(elf->data); + free(elf); +} + +static void check_elf(elf_t *elf) { + if (elf->len < sizeof(Elf32_Phdr)) + die("Too short for an ELF"); + + Elf32_Ehdr *ehdr = (Elf32_Ehdr *) elf->data; + + if (!IS_ELF(*ehdr)) + die("Not an ELF"); + if (ehdr->e_ident[EI_CLASS] != ELFCLASS32) + die("Invalid ELF class"); + if (ehdr->e_ident[EI_DATA] != ELFDATA2MSB) + die("Invalid ELF byte order"); + if (ehdr->e_ident[EI_VERSION] != EV_CURRENT) + die("Invalid ELF ident version"); + if (be16(ehdr->e_type) != ET_EXEC) + die("ELF is not an executable"); + if (be16(ehdr->e_machine) != EM_PPC) + die("Machine is not PowerPC"); + if (be32(ehdr->e_version) != EV_CURRENT) + die("Invalid ELF version"); + if (!be32(ehdr->e_entry)) + die("ELF has no entrypoint"); +} + +static void init_elf(elf_t *elf, int sections) { + elf->ehdr = (Elf32_Ehdr *) elf->data; + + u16 num = be16(elf->ehdr->e_phnum); + u32 off = be32(elf->ehdr->e_phoff); + + if (!num || !off) + die("ELF has no program headers"); + + if (be16(elf->ehdr->e_phentsize) != sizeof(Elf32_Phdr)) + die("Invalid program header entry size"); + + if ((off + num * sizeof(Elf32_Phdr)) > elf->len) + die("Program headers out of bounds"); + + elf->phdrs = (Elf32_Phdr *) &elf->data[off]; + + num = be16(elf->ehdr->e_shnum); + off = be32(elf->ehdr->e_shoff); + + if (!num || !off) { + if (!sections) { + elf->shdrs = NULL; + return; + } + + die("ELF has no section headers"); + } + + if (be16(elf->ehdr->e_shentsize) != sizeof(Elf32_Shdr)) + die("Invalid section header entry size"); + + if ((off + num * sizeof(Elf32_Shdr)) > elf->len) + die("Section headers out of bounds"); + + elf->shdrs = (Elf32_Shdr *) &elf->data[off]; +} + +static u32 find_payload_offset(const elf_t *elf) { + u16 shnum = be16(elf->ehdr->e_shnum); + + u16 shstrndx = be16(elf->ehdr->e_shstrndx); + if (!shstrndx || shstrndx > shnum) + die("Invalid .shstrtab index"); + + u32 off = be32(elf->shdrs[shstrndx].sh_offset); + u32 size = be32(elf->shdrs[shstrndx].sh_size); + + if (off + size > elf->len - 1) + die(".shstrtab section out of bounds"); + + const char *shstr = (const char *) &elf->data[off]; + + u16 i; + for (i = 0; i < shnum; ++i) { + off = be32(elf->shdrs[i].sh_name); + + if (off > size) + die("Section #%u name out of .shstrtab bounds", i); + + if (!strcmp(&shstr[off], ".payload")) { + printf(".payload section found: #%u\n", i); + return be32(elf->shdrs[i].sh_offset); + } + } + + die(".payload section not present"); +} + +static void map_file_offset(const elf_t *elf, const u32 offset, + u16 *phdrndx, u32 *phdroff) { + u16 phnum = be16(elf->ehdr->e_phnum); + + u16 i; + for (i = 0; i < phnum; ++i) { + if (be32(elf->phdrs[i].p_type) != PT_LOAD) + continue; + + if (be32(elf->phdrs[i].p_filesz) < 1) + continue; + + u32 poff = be32(elf->phdrs[i].p_offset); + u32 psize = be32(elf->phdrs[i].p_filesz); + + if (offset >= poff && offset <= poff + psize) { + *phdrndx = i; + *phdroff = offset - poff; + printf("Mapped payload to program header [%u] 0x%06x\n", + *phdrndx, *phdroff); + return; + } + } + + die("File offset 0x%x is not part of any PT_LOAD program header", offset); +} + +static elf_t *strip_elf(const elf_t *elf, u16 *phdrndx) { + elf_t *out; + u32 pos; + u16 count; + u16 phnum = be16(elf->ehdr->e_phnum); + u16 i; + + count = 0; + pos = round_up(sizeof(Elf32_Ehdr), ALIGNOFFSET); + for (i = 0; i < phnum; ++i) { + if (be32(elf->phdrs[i].p_type) != PT_LOAD) + continue; + + if (be32(elf->phdrs[i].p_filesz) < 1) + continue; + + if (be32(elf->phdrs[i].p_memsz) < 1) + continue; + + pos += round_up(be32(elf->phdrs[i].p_filesz), ALIGNOFFSET); + count++; + } + pos += round_up(count * sizeof(Elf32_Phdr), ALIGNOFFSET); + + if (pos > 20 * 1024 * 1024) + die("ELF too big, even after stripping (0x%x)", pos); + + printf("Stripping ELF from 0x%x to 0x%x bytes\n", elf->len, pos); + + out = (elf_t *) calloc(1, sizeof(elf_t)); + if (!out) + die("Error allocating %u bytes", (u32) sizeof(elf_t)); + + out->len = pos; + out->data = calloc(1, pos); + if (!out->data) + die("Error allocating %u bytes", pos); + + out->ehdr = (Elf32_Ehdr *) out->data; + pos = round_up(sizeof(Elf32_Ehdr), ALIGNOFFSET); + out->ehdr->e_ident[EI_MAG0] = ELFMAG0; + out->ehdr->e_ident[EI_MAG1] = ELFMAG1; + out->ehdr->e_ident[EI_MAG2] = ELFMAG2; + out->ehdr->e_ident[EI_MAG3] = ELFMAG3; + out->ehdr->e_ident[EI_CLASS] = ELFCLASS32; + out->ehdr->e_ident[EI_DATA] = ELFDATA2MSB; + out->ehdr->e_ident[EI_VERSION] = EV_CURRENT; + out->ehdr->e_type = be16(ET_EXEC); + out->ehdr->e_machine = be16(EM_PPC); + out->ehdr->e_version = be32(EV_CURRENT); + out->ehdr->e_entry = elf->ehdr->e_entry; + out->ehdr->e_phoff = be32(pos); + out->ehdr->e_phentsize = be16(sizeof(Elf32_Phdr)); + out->ehdr->e_phnum = be16(count); + out->ehdr->e_shentsize = be16(sizeof(Elf32_Shdr)); + + out->phdrs = (Elf32_Phdr *) &out->data[pos]; + pos += round_up(count * sizeof(Elf32_Phdr), ALIGNOFFSET); + + count = 0; + int found = 0; + for (i = 0; i < phnum; ++i) { + if (be32(elf->phdrs[i].p_type) != PT_LOAD) + continue; + + if (be32(elf->phdrs[i].p_filesz) < 1) + continue; + + if (be32(elf->phdrs[i].p_memsz) < 1) + continue; + + if (phdrndx && i == *phdrndx) { + *phdrndx = count; + found = 1; + } + + out->phdrs[count].p_type = elf->phdrs[i].p_type; + out->phdrs[count].p_offset = be32(pos); + out->phdrs[count].p_vaddr = elf->phdrs[i].p_vaddr; + out->phdrs[count].p_paddr = elf->phdrs[i].p_paddr; + out->phdrs[count].p_filesz = elf->phdrs[i].p_filesz; + out->phdrs[count].p_memsz = elf->phdrs[i].p_memsz; + out->phdrs[count].p_flags = elf->phdrs[i].p_flags; + out->phdrs[count].p_align = elf->phdrs[i].p_align; + + u32 p_offset = be32(elf->phdrs[i].p_offset); + u32 p_filesz = be32(elf->phdrs[i].p_filesz); + + printf(" PHDR[%u] 0x%08x 0x%06x -> [%u] 0x%06x\n", + i, p_offset, p_filesz, count, pos); + + memcpy(&out->data[pos], &elf->data[p_offset], p_filesz); + pos += round_up(p_filesz, ALIGNOFFSET); + + count++; + } + + if (phdrndx && !found) + die("PHDR #%u not part of the stripped ELF", *phdrndx); + + return out; +} + +static elf_t *inject_elf(elf_t *dst, const u8 *src, const u32 len, + u32 *dataaddr, u8 **dataptr) { + u16 phdrndx = be16(dst->ehdr->e_phnum) - 1; + Elf32_Phdr *phdr = &dst->phdrs[phdrndx]; + + if (phdr->p_filesz != phdr->p_memsz) + die("File size does not match the memory size for the last PHDR"); + + u32 pos = be32(phdr->p_vaddr) + be32(phdr->p_filesz); + u32 pos_a = round_up(pos, ALIGNOFFSET); + u32 pos_d = pos_a - pos; + u32 size_d = pos_d + round_up(len, ALIGNOFFSET); + + printf("Injecting payload in PHDR %u, size += 0x%x (0x%x/0x%x/0x%x)\n", + phdrndx, size_d, pos_d, len, size_d - pos_d - len); + + elf_t *elf = (elf_t *) calloc(1, sizeof(elf_t)); + if (!elf) + die("Error allocating %u bytes", (u32) sizeof(elf_t)); + + elf->data = calloc(1, dst->len + size_d); + elf->len = dst->len + size_d; + if (!elf->data) + die("Failed to alloc 0x%x bytes", dst->len + size_d); + + memcpy(elf->data, dst->data, dst->len); + init_elf(elf, 0); + + phdr = &elf->phdrs[phdrndx]; + u8 *p = phdr_data(elf, phdrndx, be32(phdr->p_filesz)); + + memcpy(&p[pos_d], src, len); + + *dataaddr = pos_a - be32(phdr->p_vaddr) + be32(phdr->p_paddr); + *dataaddr |= 0x80000000; + + phdr->p_filesz = be32(be32(phdr->p_filesz) + size_d); + phdr->p_memsz = be32(be32(phdr->p_memsz) + size_d); + phdr->p_vaddr = phdr->p_paddr; + + + printf("Payload blob @0x%x at runtime\n", pos_a); + + *dataptr = &p[pos_d]; + return elf; +} + +#define CLOCKS_PER_BYTE 47 +#define BUF_SIZE 256 +#define ROUNDS 256 + + +static void usage(const char *name) { + printf("usage: %s [-s stub] in.elf out.elf\n", name); + + printf("stubs:"); + int i = 0; + while (stubs[i].name) { + printf(" %s", stubs[i].name); + ++i; + } + + printf("\n"); + exit(1); +} + +int main(int argc, char *argv[]) { + elf_t *elf_tmp, *elf_pl, *elf_stub; + u32 offset; + u16 phdrndx; + u32 phdroff; + u32 dataaddr; + u8 *dataptr; + lzma_t *lzma; + + printf("wiipax v0.2 (c) 2009 Team Twiizers\n\n"); + + if (argc < 3) + usage(argv[0]); + + char *stubname = "mini"; + + char **arg = &argv[1]; + argc--; + + while (argc && *arg[0] == '-') { + if (!strcmp(*arg, "-h")) { + usage(argv[0]); + } else if (!strcmp(*arg, "-s")) { + if (argc < 2) + usage(argv[0]); + arg++; + argc--; + stubname = *arg; + } else if (!strcmp(*arg, "--")) { + arg++; + argc--; + break; + } else { + die("Unrecognized option %s\n", *arg); + usage(argv[0]); + } + arg++; + argc--; + } + + if (argc != 2) + usage(argv[0]); + + elf_tmp = read_stub(stubname); + check_elf(elf_tmp); + init_elf(elf_tmp, 1); + + offset = find_payload_offset(elf_tmp); + map_file_offset(elf_tmp, offset, &phdrndx, &phdroff); + elf_stub = strip_elf(elf_tmp, &phdrndx); + free(elf_tmp); + + elf_tmp = read_elf(arg[0]); + check_elf(elf_tmp); + init_elf(elf_tmp, 0); + elf_pl = strip_elf(elf_tmp, NULL); + free_elf(elf_tmp); + + lzma = lzma_compress(elf_pl->data, elf_pl->len); + // test decoding + lzma_decode(lzma, elf_pl->data); + free_elf(elf_pl); + +#if 0 + lzma_write("x.lzma", lzma); +#endif + + u32 aes_len = (lzma->len_out + 15) & (~15); + u8 aiv[16]; + memset(aiv, 0, 16); + + lzma->data = realloc(lzma->data, aes_len); + memset(lzma->data + lzma->len_out, 0, aes_len - lzma->len_out); + + elf_tmp = inject_elf(elf_stub, lzma->data, aes_len, &dataaddr, &dataptr); + free_elf(elf_stub); + + payload_t *pl = (payload_t *) phdr_data(elf_tmp, phdrndx, phdroff); + pl->dataptr = be32(dataaddr); + pl->len_in = be32(lzma->len_out); + pl->len_out = be32(lzma->len_in); + memcpy(pl->props, lzma->props, LZMA_PROPS_SIZE); + lzma_free(lzma); + + write_elf(arg[1], elf_tmp); + free_elf(elf_tmp); + + printf("Done.\n"); + return 0; +} + diff --git a/wiipax/client/stub_dkf.c b/wiipax/client/stub_dkf.c new file mode 120000 index 0000000..846981f --- /dev/null +++ b/wiipax/client/stub_dkf.c @@ -0,0 +1 @@ +../stub/stub_dkf.c \ No newline at end of file diff --git a/wiipax/client/stub_dkf_debug.c b/wiipax/client/stub_dkf_debug.c new file mode 120000 index 0000000..c992edb --- /dev/null +++ b/wiipax/client/stub_dkf_debug.c @@ -0,0 +1 @@ +../stub/stub_dkf_debug.c \ No newline at end of file diff --git a/wiipax/client/stub_dkfc.c b/wiipax/client/stub_dkfc.c new file mode 120000 index 0000000..71be34f --- /dev/null +++ b/wiipax/client/stub_dkfc.c @@ -0,0 +1 @@ +../stub/stub_dkfc.c \ No newline at end of file diff --git a/wiipax/client/stub_dkfc_debug.c b/wiipax/client/stub_dkfc_debug.c new file mode 120000 index 0000000..e6ebaf3 --- /dev/null +++ b/wiipax/client/stub_dkfc_debug.c @@ -0,0 +1 @@ +../stub/stub_dkfc_debug.c \ No newline at end of file diff --git a/wiipax/client/stub_mini.c b/wiipax/client/stub_mini.c new file mode 120000 index 0000000..08525f3 --- /dev/null +++ b/wiipax/client/stub_mini.c @@ -0,0 +1 @@ +../stub/stub_mini.c \ No newline at end of file diff --git a/wiipax/client/stub_mini_debug.c b/wiipax/client/stub_mini_debug.c new file mode 120000 index 0000000..d313e13 --- /dev/null +++ b/wiipax/client/stub_mini_debug.c @@ -0,0 +1 @@ +../stub/stub_mini_debug.c \ No newline at end of file diff --git a/wiipax/stub/.gitignore b/wiipax/stub/.gitignore new file mode 100644 index 0000000..7cb4458 --- /dev/null +++ b/wiipax/stub/.gitignore @@ -0,0 +1,3 @@ +stub_*.elf +stub_*.c + diff --git a/wiipax/stub/LzmaDec.c b/wiipax/stub/LzmaDec.c new file mode 100644 index 0000000..5c19600 --- /dev/null +++ b/wiipax/stub/LzmaDec.c @@ -0,0 +1,1006 @@ +/* LzmaDec.c -- LZMA Decoder +2008-11-06 : Igor Pavlov : Public domain */ + +#include "LzmaDec.h" +#include "string.h" + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_INIT_SIZE 5 + +#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); +#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ + { UPDATE_0(p); i = (i + i); A0; } else \ + { UPDATE_1(p); i = (i + i) + 1; A1; } +#define GET_BIT(p, i) GET_BIT2(p, i, ; , ;) + +#define TREE_GET_BIT(probs, i) { GET_BIT((probs + i), i); } +#define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +/* #define _LZMA_SIZE_OPT */ + +#ifdef _LZMA_SIZE_OPT +#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) +#else +#define TREE_6_DECODE(probs, i) \ + { i = 1; \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + i -= 0x40; } +#endif + +#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0_CHECK range = bound; +#define UPDATE_1_CHECK range -= bound; code -= bound; +#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ + { UPDATE_0_CHECK; i = (i + i); A0; } else \ + { UPDATE_1_CHECK; i = (i + i) + 1; A1; } +#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) +#define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + + +#define kNumStates 12 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 +#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#define LZMA_BASE_SIZE 1846 +#define LZMA_LIT_SIZE 768 + +#define LzmaProps_GetNumProbs(p) ((UInt32)LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) + +#if Literal != LZMA_BASE_SIZE +StopCompilingDueBUG +#endif + +static const Byte kLiteralNextStates[kNumStates * 2] = +{ + 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5, + 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10 +}; + +#define LZMA_DIC_MIN (1 << 12) + +/* First LZMA-symbol is always decoded. +And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization +Out: + Result: + SZ_OK - OK + SZ_ERROR_DATA - Error + p->remainLen: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished + = kMatchSpecLenStart + 1 : Flush marker + = kMatchSpecLenStart + 2 : State Init Marker +*/ + +static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + CLzmaProb *probs = p->probs; + + unsigned state = p->state; + UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; + unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; + unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1; + unsigned lc = p->prop.lc; + + Byte *dic = p->dic; + SizeT dicBufSize = p->dicBufSize; + SizeT dicPos = p->dicPos; + + UInt32 processedPos = p->processedPos; + UInt32 checkDicSize = p->checkDicSize; + unsigned len = 0; + + const Byte *buf = p->buf; + UInt32 range = p->range; + UInt32 code = p->code; + + do + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = processedPos & pbMask; + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + unsigned symbol; + UPDATE_0(prob); + prob = probs + Literal; + if (checkDicSize != 0 || processedPos != 0) + prob += (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + + (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc)))); + + if (state < kNumLitStates) + { + symbol = 1; + do { GET_BIT(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + unsigned offs = 0x100; + symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + dic[dicPos++] = (Byte)symbol; + processedPos++; + + state = kLiteralNextStates[state]; + /* if (state < 4) state = 0; else if (state < 10) state -= 3; else state -= 6; */ + continue; + } + else + { + UPDATE_1(prob); + prob = probs + IsRep + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + state += kNumStates; + prob = probs + LenCoder; + } + else + { + UPDATE_1(prob); + if (checkDicSize == 0 && processedPos == 0) + return SZ_ERROR_DATA; + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + UPDATE_0(prob); + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + processedPos++; + state = state < kNumLitStates ? 9 : 11; + continue; + } + UPDATE_1(prob); + } + else + { + UInt32 distance; + UPDATE_1(prob); + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep1; + } + else + { + UPDATE_1(prob); + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep2; + } + else + { + UPDATE_1(prob); + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + state = state < kNumLitStates ? 8 : 11; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = (1 << kLenNumMidBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = (1 << kLenNumHighBits); + } + } + TREE_DECODE(probLen, limit, len); + len += offset; + } + + if (state >= kNumStates) + { + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); + TREE_6_DECODE(prob, distance); + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; + int numDirectBits = (int)(((distance >> 1) - 1)); + distance = (2 | (distance & 1)); + if (posSlot < kEndPosModelIndex) + { + distance <<= numDirectBits; + prob = probs + SpecPos + distance - posSlot - 1; + { + UInt32 mask = 1; + unsigned i = 1; + do + { + GET_BIT2(prob + i, i, ; , distance |= mask); + mask <<= 1; + } + while (--numDirectBits != 0); + } + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE + range >>= 1; + + { + UInt32 t; + code -= range; + t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ + distance = (distance << 1) + (t + 1); + code += range & t; + } + /* + distance <<= 1; + if (code >= range) + { + code -= range; + distance |= 1; + } + */ + } + while (--numDirectBits != 0); + prob = probs + Align; + distance <<= kNumAlignBits; + { + unsigned i = 1; + GET_BIT2(prob + i, i, ; , distance |= 1); + GET_BIT2(prob + i, i, ; , distance |= 2); + GET_BIT2(prob + i, i, ; , distance |= 4); + GET_BIT2(prob + i, i, ; , distance |= 8); + } + if (distance == (UInt32)0xFFFFFFFF) + { + len += kMatchSpecLenStart; + state -= kNumStates; + break; + } + } + } + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance + 1; + if (checkDicSize == 0) + { + if (distance >= processedPos) + return SZ_ERROR_DATA; + } + else if (distance >= checkDicSize) + return SZ_ERROR_DATA; + state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; + /* state = kLiteralNextStates[state]; */ + } + + len += kMatchMinLen; + + if (limit == dicPos) + return SZ_ERROR_DATA; + { + SizeT rem = limit - dicPos; + unsigned curLen = ((rem < len) ? (unsigned)rem : len); + SizeT pos = (dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0); + + processedPos += curLen; + + len -= curLen; + if (pos + curLen <= dicBufSize) + { + Byte *dest = dic + dicPos; + ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; + const Byte *lim = dest + curLen; + dicPos += curLen; + do + *(dest) = (Byte)*(dest + src); + while (++dest != lim); + } + else + { + do + { + dic[dicPos++] = dic[pos]; + if (++pos == dicBufSize) + pos = 0; + } + while (--curLen != 0); + } + } + } + } + while (dicPos < limit && buf < bufLimit); + NORMALIZE; + p->buf = buf; + p->range = range; + p->code = code; + p->remainLen = len; + p->dicPos = dicPos; + p->processedPos = processedPos; + p->reps[0] = rep0; + p->reps[1] = rep1; + p->reps[2] = rep2; + p->reps[3] = rep3; + p->state = state; + + return SZ_OK; +} + +static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) +{ + if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) + { + Byte *dic = p->dic; + SizeT dicPos = p->dicPos; + SizeT dicBufSize = p->dicBufSize; + unsigned len = p->remainLen; + UInt32 rep0 = p->reps[0]; + if (limit - dicPos < len) + len = (unsigned)(limit - dicPos); + + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) + p->checkDicSize = p->prop.dicSize; + + p->processedPos += len; + p->remainLen -= len; + while (len-- != 0) + { + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + } + p->dicPos = dicPos; + } +} + +static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + do + { + SizeT limit2 = limit; + if (p->checkDicSize == 0) + { + UInt32 rem = p->prop.dicSize - p->processedPos; + if (limit - p->dicPos > rem) + limit2 = p->dicPos + rem; + } + RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit)); + if (p->processedPos >= p->prop.dicSize) + p->checkDicSize = p->prop.dicSize; + LzmaDec_WriteRem(p, limit); + } + while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); + + if (p->remainLen > kMatchSpecLenStart) + { + p->remainLen = kMatchSpecLenStart; + } + return 0; +} + +typedef enum +{ + DUMMY_ERROR, /* unexpected end of input stream */ + DUMMY_LIT, + DUMMY_MATCH, + DUMMY_REP +} ELzmaDummy; + +static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) +{ + UInt32 range = p->range; + UInt32 code = p->code; + const Byte *bufLimit = buf + inSize; + CLzmaProb *probs = p->probs; + unsigned state = p->state; + ELzmaDummy res; + + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1); + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK + + /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ + + prob = probs + Literal; + if (p->checkDicSize != 0 || p->processedPos != 0) + prob += (LZMA_LIT_SIZE * + ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); + + if (state < kNumLitStates) + { + unsigned symbol = 1; + do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[p->dicPos - p->reps[0] + + ((p->dicPos < p->reps[0]) ? p->dicBufSize : 0)]; + unsigned offs = 0x100; + unsigned symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + res = DUMMY_LIT; + } + else + { + unsigned len; + UPDATE_1_CHECK; + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { + UPDATE_1_CHECK; + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + NORMALIZE_CHECK; + return DUMMY_REP; + } + else + { + UPDATE_1_CHECK; + } + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + } + } + } + state = kNumStates; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumMidBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = 1 << kLenNumHighBits; + } + } + TREE_DECODE_CHECK(probLen, limit, len); + len += offset; + } + + if (state < 4) + { + unsigned posSlot; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); + TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); + if (posSlot >= kStartPosModelIndex) + { + int numDirectBits = ((posSlot >> 1) - 1); + + /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ + + if (posSlot < kEndPosModelIndex) + { + prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1; + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE_CHECK + range >>= 1; + code -= range & (((code - range) >> 31) - 1); + /* if (code >= range) code -= range; */ + } + while (--numDirectBits != 0); + prob = probs + Align; + numDirectBits = kNumAlignBits; + } + { + unsigned i = 1; + do + { + GET_BIT_CHECK(prob + i, i); + } + while (--numDirectBits != 0); + } + } + } + } + } + NORMALIZE_CHECK; + return res; +} + + +static void LzmaDec_InitRc(CLzmaDec *p, const Byte *data) +{ + p->code = ((UInt32)data[1] << 24) | ((UInt32)data[2] << 16) | ((UInt32)data[3] << 8) | ((UInt32)data[4]); + p->range = 0xFFFFFFFF; + p->needFlush = 0; +} + +void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) +{ + p->needFlush = 1; + p->remainLen = 0; + p->tempBufSize = 0; + + if (initDic) + { + p->processedPos = 0; + p->checkDicSize = 0; + p->needInitState = 1; + } + if (initState) + p->needInitState = 1; +} + +void LzmaDec_Init(CLzmaDec *p) +{ + p->dicPos = 0; + LzmaDec_InitDicAndState(p, True, True); +} + +static void LzmaDec_InitStateReal(CLzmaDec *p) +{ + UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (p->prop.lc + p->prop.lp)); + UInt32 i; + CLzmaProb *probs = p->probs; + for (i = 0; i < numProbs; i++) + probs[i] = kBitModelTotal >> 1; + p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; + p->state = 0; + p->needInitState = 0; +} + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, + ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + (*srcLen) = 0; + LzmaDec_WriteRem(p, dicLimit); + + *status = LZMA_STATUS_NOT_SPECIFIED; + + while (p->remainLen != kMatchSpecLenStart) + { + int checkEndMarkNow; + + if (p->needFlush != 0) + { + for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) + p->tempBuf[p->tempBufSize++] = *src++; + if (p->tempBufSize < RC_INIT_SIZE) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (p->tempBuf[0] != 0) + return SZ_ERROR_DATA; + + LzmaDec_InitRc(p, p->tempBuf); + p->tempBufSize = 0; + } + + checkEndMarkNow = 0; + if (p->dicPos >= dicLimit) + { + if (p->remainLen == 0 && p->code == 0) + { + *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; + return SZ_OK; + } + if (finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + if (p->remainLen != 0) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + checkEndMarkNow = 1; + } + + if (p->needInitState) + LzmaDec_InitStateReal(p); + + if (p->tempBufSize == 0) + { + SizeT processed; + const Byte *bufLimit; + if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, src, inSize); + if (dummyRes == DUMMY_ERROR) + { + memcpy(p->tempBuf, src, inSize); + p->tempBufSize = (unsigned)inSize; + (*srcLen) += inSize; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + bufLimit = src; + } + else + bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; + p->buf = src; + if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) + return SZ_ERROR_DATA; + processed = (SizeT)(p->buf - src); + (*srcLen) += processed; + src += processed; + inSize -= processed; + } + else + { + unsigned rem = p->tempBufSize, lookAhead = 0; + while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) + p->tempBuf[rem++] = src[lookAhead++]; + p->tempBufSize = rem; + if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); + if (dummyRes == DUMMY_ERROR) + { + (*srcLen) += lookAhead; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + } + p->buf = p->tempBuf; + if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) + return SZ_ERROR_DATA; + lookAhead -= (rem - (unsigned)(p->buf - p->tempBuf)); + (*srcLen) += lookAhead; + src += lookAhead; + inSize -= lookAhead; + p->tempBufSize = 0; + } + } + if (p->code == 0) + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA; +} + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT outSize = *destLen; + SizeT inSize = *srcLen; + *srcLen = *destLen = 0; + for (;;) + { + SizeT inSizeCur = inSize, outSizeCur, dicPos; + ELzmaFinishMode curFinishMode; + SRes res; + if (p->dicPos == p->dicBufSize) + p->dicPos = 0; + dicPos = p->dicPos; + if (outSize > p->dicBufSize - dicPos) + { + outSizeCur = p->dicBufSize; + curFinishMode = LZMA_FINISH_ANY; + } + else + { + outSizeCur = dicPos + outSize; + curFinishMode = finishMode; + } + + res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status); + src += inSizeCur; + inSize -= inSizeCur; + *srcLen += inSizeCur; + outSizeCur = p->dicPos - dicPos; + memcpy(dest, p->dic + dicPos, outSizeCur); + dest += outSizeCur; + outSize -= outSizeCur; + *destLen += outSizeCur; + if (res != 0) + return res; + if (outSizeCur == 0 || outSize == 0) + return SZ_OK; + } +} + +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->probs); + p->probs = 0; +} + +static void LzmaDec_FreeDict(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->dic); + p->dic = 0; +} + +void LzmaDec_Free(CLzmaDec *p, ISzAlloc *alloc) +{ + LzmaDec_FreeProbs(p, alloc); + LzmaDec_FreeDict(p, alloc); +} + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) +{ + UInt32 dicSize; + Byte d; + + if (size < LZMA_PROPS_SIZE) + return SZ_ERROR_UNSUPPORTED; + else + dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); + + if (dicSize < LZMA_DIC_MIN) + dicSize = LZMA_DIC_MIN; + p->dicSize = dicSize; + + d = data[0]; + if (d >= (9 * 5 * 5)) + return SZ_ERROR_UNSUPPORTED; + + p->lc = d % 9; + d /= 9; + p->pb = d / 5; + p->lp = d % 5; + + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc) +{ + UInt32 numProbs = LzmaProps_GetNumProbs(propNew); + if (p->probs == 0 || numProbs != p->numProbs) + { + LzmaDec_FreeProbs(p, alloc); + p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); + p->numProbs = numProbs; + if (p->probs == 0) + return SZ_ERROR_MEM; + } + return SZ_OK; +} + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + SizeT dicBufSize; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + dicBufSize = propNew.dicSize; + if (p->dic == 0 || dicBufSize != p->dicBufSize) + { + LzmaDec_FreeDict(p, alloc); + p->dic = (Byte *)alloc->Alloc(alloc, dicBufSize); + if (p->dic == 0) + { + LzmaDec_FreeProbs(p, alloc); + return SZ_ERROR_MEM; + } + } + p->dicBufSize = dicBufSize; + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc) +{ + CLzmaDec p; + SRes res; + SizeT inSize = *srcLen; + SizeT outSize = *destLen; + *srcLen = *destLen = 0; + if (inSize < RC_INIT_SIZE) + return SZ_ERROR_INPUT_EOF; + + LzmaDec_Construct(&p); + res = LzmaDec_AllocateProbs(&p, propData, propSize, alloc); + if (res != 0) + return res; + p.dic = dest; + p.dicBufSize = outSize; + + LzmaDec_Init(&p); + + *srcLen = inSize; + res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status); + + if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) + res = SZ_ERROR_INPUT_EOF; + + (*destLen) = p.dicPos; + LzmaDec_FreeProbs(&p, alloc); + return res; +} diff --git a/wiipax/stub/LzmaDec.h b/wiipax/stub/LzmaDec.h new file mode 100644 index 0000000..ad7d705 --- /dev/null +++ b/wiipax/stub/LzmaDec.h @@ -0,0 +1,223 @@ +/* LzmaDec.h -- LZMA Decoder +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZMADEC_H +#define __LZMADEC_H + +#include "Types.h" + +/* #define _LZMA_PROB32 */ +/* _LZMA_PROB32 can increase the speed on some CPUs, + but memory usage for CLzmaDec::probs will be doubled in that case */ + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + + +/* ---------- LZMA Properties ---------- */ + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaProps +{ + unsigned lc, lp, pb; + UInt32 dicSize; +} CLzmaProps; + +/* LzmaProps_Decode - decodes properties +Returns: + SZ_OK + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size); + + +/* ---------- LZMA Decoder state ---------- */ + +/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case. + Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */ + +#define LZMA_REQUIRED_INPUT_MAX 20 + +typedef struct +{ + CLzmaProps prop; + CLzmaProb *probs; + Byte *dic; + const Byte *buf; + UInt32 range, code; + SizeT dicPos; + SizeT dicBufSize; + UInt32 processedPos; + UInt32 checkDicSize; + unsigned state; + UInt32 reps[4]; + unsigned remainLen; + int needFlush; + int needInitState; + UInt32 numProbs; + unsigned tempBufSize; + Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; +} CLzmaDec; + +#define LzmaDec_Construct(p) { (p)->dic = 0; (p)->probs = 0; } + +void LzmaDec_Init(CLzmaDec *p); + +/* There are two types of LZMA streams: + 0) Stream with end mark. That end mark adds about 6 bytes to compressed size. + 1) Stream without end mark. You must know exact uncompressed size to decompress such stream. */ + +typedef enum +{ + LZMA_FINISH_ANY, /* finish at any point */ + LZMA_FINISH_END /* block must be finished at the end */ +} ELzmaFinishMode; + +/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!! + + You must use LZMA_FINISH_END, when you know that current output buffer + covers last bytes of block. In other cases you must use LZMA_FINISH_ANY. + + If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK, + and output value of destLen will be less than output buffer size limit. + You can check status result also. + + You can use multiple checks to test data integrity after full decompression: + 1) Check Result and "status" variable. + 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. + 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. + You must use correct finish mode in that case. */ + +typedef enum +{ + LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */ + LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ + LZMA_STATUS_NOT_FINISHED, /* stream was not finished */ + LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */ +} ELzmaStatus; + +/* ELzmaStatus is used only as output value for function call */ + + +/* ---------- Interfaces ---------- */ + +/* There are 3 levels of interfaces: + 1) Dictionary Interface + 2) Buffer Interface + 3) One Call Interface + You can select any of these interfaces, but don't mix functions from different + groups for same object. */ + + +/* There are two variants to allocate state for Dictionary Interface: + 1) LzmaDec_Allocate / LzmaDec_Free + 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs + You can use variant 2, if you set dictionary buffer manually. + For Buffer Interface you must always use variant 1. + +LzmaDec_Allocate* can return: + SZ_OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc); + +SRes LzmaDec_Allocate(CLzmaDec *state, const Byte *prop, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_Free(CLzmaDec *state, ISzAlloc *alloc); + +/* ---------- Dictionary Interface ---------- */ + +/* You can use it, if you want to eliminate the overhead for data copying from + dictionary to some other external buffer. + You must work with CLzmaDec variables directly in this interface. + + STEPS: + LzmaDec_Constr() + LzmaDec_Allocate() + for (each new stream) + { + LzmaDec_Init() + while (it needs more decompression) + { + LzmaDec_DecodeToDic() + use data from CLzmaDec::dic and update CLzmaDec::dicPos + } + } + LzmaDec_Free() +*/ + +/* LzmaDec_DecodeToDic + + The decoding to internal dictionary buffer (CLzmaDec::dic). + You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!! + +finishMode: + It has meaning only if the decoding reaches output limit (dicLimit). + LZMA_FINISH_ANY - Decode just dicLimit bytes. + LZMA_FINISH_END - Stream must be finished after dicLimit. + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_NEEDS_MORE_INPUT + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error +*/ + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- Buffer Interface ---------- */ + +/* It's zlib-like interface. + See LzmaDec_DecodeToDic description for information about STEPS and return results, + but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need + to work with CLzmaDec variables manually. + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). +*/ + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- One Call Interface ---------- */ + +/* LzmaDecode + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties + SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). +*/ + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc); + +#endif diff --git a/wiipax/stub/Makefile b/wiipax/stub/Makefile new file mode 100644 index 0000000..2aa6340 --- /dev/null +++ b/wiipax/stub/Makefile @@ -0,0 +1,66 @@ +include ../../broadway.mk + +CFLAGS += -mno-eabi -mno-sdata -O2 -ffreestanding +CFLAGS += -Wall -Wextra +DEFINES = +LDFLAGS += -nostartfiles -nodefaultlibs + +OBJS_COMMON = crt0.o main.o string.o sync.o elf.o time.o LzmaDec.o +TARGET_ID = + +ifeq ($(DEVKITFAIL),1) +DEFINES += -DDEVKITFAIL +OBJS = $(OBJS_COMMON) +LDSCRIPT = devkitfail.ld +TARGET_ID = _dkf +else +ifeq ($(DKFAILCHANNEL),1) +DEFINES += -DDEVKITFAIL +OBJS = realmode.o $(OBJS_COMMON) +LDSCRIPT = channel.ld +TARGET_ID = _dkfc +else +OBJS = realmode.o plunge.o $(OBJS_COMMON) +LDSCRIPT = realmode.ld +TARGET_ID = _mini +endif +endif + +ifeq ($(NDEBUG),1) +DEFINES += -DNDEBUG +TARGET_DEBUG = +else +OBJS += exception.o exception_asm.o vsprintf.o gecko.o +TARGET_DEBUG = _debug +endif + +TARGET = stub$(TARGET_ID)$(TARGET_DEBUG).elf + +include ../../common.mk + +all: xxd + +xxd: $(TARGET) + @echo " XXD $^" + @xxd -i $(TARGET) > $(subst .elf,.c,$(TARGET)) + +distclean: clean + rm -f stub_*.elf stub_*.c + +release: + $(Q)$(MAKE) clean + $(Q)$(MAKE) + $(Q)$(MAKE) clean + $(Q)$(MAKE) NDEBUG=1 + $(Q)$(MAKE) NDEBUG=1 clean + $(Q)$(MAKE) DEVKITFAIL=1 + $(Q)$(MAKE) DEVKITFAIL=1 clean + $(Q)$(MAKE) DEVKITFAIL=1 NDEBUG=1 + $(Q)$(MAKE) DEVKITFAIL=1 NDEBUG=1 clean + $(Q)$(MAKE) DKFAILCHANNEL=1 + $(Q)$(MAKE) DKFAILCHANNEL=1 clean + $(Q)$(MAKE) DKFAILCHANNEL=1 NDEBUG=1 + $(Q)$(MAKE) DKFAILCHANNEL=1 NDEBUG=1 clean + +.PHONY: release + diff --git a/wiipax/stub/Types.h b/wiipax/stub/Types.h new file mode 100644 index 0000000..2638196 --- /dev/null +++ b/wiipax/stub/Types.h @@ -0,0 +1,208 @@ +/* Types.h -- Basic types +2008-11-23 : Igor Pavlov : Public domain */ + +#ifndef __7Z_TYPES_H +#define __7Z_TYPES_H + +#include + +#ifdef _WIN32 +#include +#endif + +#define SZ_OK 0 + +#define SZ_ERROR_DATA 1 +#define SZ_ERROR_MEM 2 +#define SZ_ERROR_CRC 3 +#define SZ_ERROR_UNSUPPORTED 4 +#define SZ_ERROR_PARAM 5 +#define SZ_ERROR_INPUT_EOF 6 +#define SZ_ERROR_OUTPUT_EOF 7 +#define SZ_ERROR_READ 8 +#define SZ_ERROR_WRITE 9 +#define SZ_ERROR_PROGRESS 10 +#define SZ_ERROR_FAIL 11 +#define SZ_ERROR_THREAD 12 + +#define SZ_ERROR_ARCHIVE 16 +#define SZ_ERROR_NO_ARCHIVE 17 + +typedef int SRes; + +#ifdef _WIN32 +typedef DWORD WRes; +#else +typedef int WRes; +#endif + +#ifndef RINOK +#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } +#endif + +typedef unsigned char Byte; +typedef short Int16; +typedef unsigned short UInt16; + +#ifdef _LZMA_UINT32_IS_ULONG +typedef long Int32; +typedef unsigned long UInt32; +#else +typedef int Int32; +typedef unsigned int UInt32; +#endif + +#ifdef _SZ_NO_INT_64 + +/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. + NOTES: Some code will work incorrectly in that case! */ + +typedef long Int64; +typedef unsigned long UInt64; + +#else + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif + +#endif + +#ifdef _LZMA_NO_SYSTEM_SIZE_T +typedef UInt32 SizeT; +#else +typedef size_t SizeT; +#endif + +typedef int Bool; +#define True 1 +#define False 0 + + +#ifdef _MSC_VER + +#if _MSC_VER >= 1300 +#define MY_NO_INLINE __declspec(noinline) +#else +#define MY_NO_INLINE +#endif + +#define MY_CDECL __cdecl +#define MY_STD_CALL __stdcall +#define MY_FAST_CALL MY_NO_INLINE __fastcall + +#else + +#define MY_CDECL +#define MY_STD_CALL +#define MY_FAST_CALL + +#endif + + +/* The following interfaces use first parameter as pointer to structure */ + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) < input(*size)) is allowed */ +} ISeqInStream; + +/* it can return SZ_ERROR_INPUT_EOF */ +SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); +SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); +SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); + +typedef struct +{ + size_t (*Write)(void *p, const void *buf, size_t size); + /* Returns: result - the number of actually written bytes. + (result < size) means error */ +} ISeqOutStream; + +typedef enum +{ + SZ_SEEK_SET = 0, + SZ_SEEK_CUR = 1, + SZ_SEEK_END = 2 +} ESzSeek; + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ISeekInStream; + +typedef struct +{ + SRes (*Look)(void *p, void **buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) > input(*size)) is not allowed + (output(*size) < input(*size)) is allowed */ + SRes (*Skip)(void *p, size_t offset); + /* offset must be <= output(*size) of Look */ + + SRes (*Read)(void *p, void *buf, size_t *size); + /* reads directly (without buffer). It's same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ILookInStream; + +SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); +SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); + +/* reads via ILookInStream::Read */ +SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); +SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); + +#define LookToRead_BUF_SIZE (1 << 14) + +typedef struct +{ + ILookInStream s; + ISeekInStream *realStream; + size_t pos; + size_t size; + Byte buf[LookToRead_BUF_SIZE]; +} CLookToRead; + +void LookToRead_CreateVTable(CLookToRead *p, int lookahead); +void LookToRead_Init(CLookToRead *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToLook; + +void SecToLook_CreateVTable(CSecToLook *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToRead; + +void SecToRead_CreateVTable(CSecToRead *p); + +typedef struct +{ + SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); + /* Returns: result. (result != SZ_OK) means break. + Value (UInt64)(Int64)-1 for size means unknown value. */ +} ICompressProgress; + +typedef struct +{ + void *(*Alloc)(void *p, size_t size); + void (*Free)(void *p, void *address); /* address can be 0 */ +} ISzAlloc; + +#define IAlloc_Alloc(p, size) (p)->Alloc((p), size) +#define IAlloc_Free(p, a) (p)->Free((p), a) + +#endif diff --git a/wiipax/stub/channel.ld b/wiipax/stub/channel.ld new file mode 100644 index 0000000..5402765 --- /dev/null +++ b/wiipax/stub/channel.ld @@ -0,0 +1,64 @@ +OUTPUT_FORMAT("elf32-powerpc") +OUTPUT_ARCH(powerpc:common) + +__mem1_start = 0x80004000; +__mem2_start = 0x90010000; + +__mem1_entry = _start - __mem2_start + __mem1_start; +ENTRY(__mem1_entry) + +PHDRS { + realmode PT_LOAD FLAGS(5); + paxx PT_LOAD FLAGS(7); +} + +SECTIONS { + . = 0x80003400; + + .realmode : { KEEP(*(.realmode)) } :realmode = 0 + + . = __mem2_start; + + .start : AT(__mem1_start) { KEEP(*(.start)) } :paxx = 0 + .text : { *(.text) *(.text.*) } + + . = ALIGN(4); + + .payload : { + __payload = .; + LONG(0); + LONG(0); + LONG(0); + LONG(0); + LONG(0); + LONG(0); + } + + .rodata : { *(.rodata) *(.rodata.*) } + + . = (( . +19)&0xFFFFFFF0) - 4; + .padding : { + LONG(0xdeadbeef); + } + + .sdata : { *(.sdata) *(.sdata.*) } + .data : { *(.data) *(.data.*) } + + . = ALIGN(32); + __self_end = .; + + __bss_start = .; + .bss : { *(.bss) } :NONE = 0 + .sbss : { *(.sbss) } + __bss_end = .; + + . = ALIGN(32); + + .stack : { + _stack_top = .; + . += 32768; + _stack_bot = .; + } + +} + diff --git a/wiipax/stub/common.h b/wiipax/stub/common.h new file mode 100644 index 0000000..6cbb2ff --- /dev/null +++ b/wiipax/stub/common.h @@ -0,0 +1,107 @@ +#ifndef _LOADER_H_ +#define _LOADER_H_ + +#include + +// Basic types. + +typedef unsigned char u8; +typedef signed char s8; +typedef unsigned short int u16; +typedef signed short int s16; +typedef unsigned int u32; +typedef signed int s32; + +// Basic I/O. + +static inline u32 read32(u32 addr) { + u32 x; + + asm volatile("lwz %0,0(%1) ; sync" : "=r"(x) : "b"(0xc0000000 | addr)); + + return x; +} + +static inline void write32(u32 addr, u32 x) { + asm("stw %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); +} + +static inline u16 read16(u32 addr) { + u16 x; + + asm volatile("lhz %0,0(%1) ; sync" : "=r"(x) : "b"(0xc0000000 | addr)); + + return x; +} + +static inline u8 read8(u32 addr) { + u8 x; + + asm volatile("lbz %0,0(%1) ; sync" : "=r"(x) : "b"(0xc0000000 | addr)); + + return x; +} + +static inline void write16(u32 addr, u16 x) { + asm("sth %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); +} + +static inline void write8(u32 addr, u8 x) { + asm("stb %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); +} + +static inline void mask32(u32 addr, u32 clear, u32 set) +{ + write32(addr, (read32(addr)&(~clear)) | set); +} + +// Address mapping. + +static inline u32 virt_to_phys(const void *p) { + return (u32)p & 0x7fffffff; +} + +static inline void *phys_to_virt(u32 x) { + return (void *)(x | 0x80000000); +} + + +// Cache synchronisation. + +void sync_before_read(void *p, u32 len); +void sync_after_write(const void *p, u32 len); +void sync_before_exec(const void *p, u32 len); + + +// Time. + +void udelay(u32 us); + + +// Special purpose registers. + +#define mtspr(n, x) do { asm("mtspr %1,%0" : : "r"(x), "i"(n)); } while (0) +#define mfspr(n) ({ \ + u32 x; asm volatile("mfspr %0,%1" : "=r"(x) : "i"(n)); x; \ +}) + + +// Exceptions. + +#ifdef NDEBUG +#define printf(...) { } +#else +void exception_init(void); +void gecko_init(void); +int printf(const char *fmt, ...); +#endif + + +// Debug: blink the tray led. + +static inline void blink(void) { + write32(0x0d8000c0, read32(0x0d8000c0) ^ 0x20); +} + +#endif + diff --git a/wiipax/stub/crt0.s b/wiipax/stub/crt0.s new file mode 100644 index 0000000..f92ca7e --- /dev/null +++ b/wiipax/stub/crt0.s @@ -0,0 +1,330 @@ +# crt0.s file for the GameCube V1.0 by Costis (costis@gbaemu.com)! + + .text + .section .start,"ax",@progbits + .extern _start + .align 2 + .globl _start +_start: + + lis 3,__mem1_start@h + ori 3,3,__mem1_start@l + lis 4,__mem2_start@h + ori 4,4,__mem2_start@l + lis 5,__self_end@h + ori 5,5,__self_end@l + +_reloc_loop: + lwz 2,0(3) + stw 2,0(4) + + addi 3,3,4 + addi 4,4,4 + cmplw 4,5 + blt _reloc_loop + + lis 4,__mem2_start@h + ori 4,4,__mem2_start@l +_flush_loop: + dcbst 0,4 + sync + icbi 0,4 + addi 4,4,32 + cmplw 4,5 + blt _flush_loop + + sync + isync + + lis 3,_mem2_entry@h + ori 3,3,_mem2_entry@l + mtctr 3 + bctr + +_mem2_entry: + # Clear all GPRs except + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + li \i,0 + .endr + + lis 1,_stack_bot@h + ori 1,1,_stack_bot@l + stwu 0,-64(1) + + lis 2,0x8000 + stw 1,0x34(2) # write sp +# lis 13,_SDA_BASE_@h +# ori 13,13,_SDA_BASE_@l # Set the Small Data (Read\Write) base register. + + bl InitHardware # Initialize the GameCube Hardware (Floating Point Registers, Caches, etc.) + bl SystemInit # Initialize more cache aspects, clear a few SPR's, and disable interrupts. + + # clear BSS + lis 3, __bss_start@h + ori 3, 3, __bss_start@l + li 4, 0 + lis 5, __bss_end@h + ori 5, 5, __bss_end@l + sub 5, 5, 3 + + bl memset + + mr 3, 28 + bl stubmain # Branch to the user code! + + b . + +InitHardware: + mflr 31 # Store the link register in r31 + + bl PSInit # Initialize Paired Singles + bl FPRInit # Initialize the FPR's + bl CacheInit # Initialize the system caches + + mtlr 31 # Retreive the link register from r31 + blr + +PSInit: + mfspr 3, 920 # (HID2) + oris 3, 3, 0xA000 + mtspr 920, 3 # (HID2) + + # Set the Instruction Cache invalidation bit in HID0 + mfspr 3,1008 + ori 3,3,0x0800 + mtspr 1008,3 + + sync + + # Clear various Special Purpose Registers + li 3,0 + mtspr 912,3 + mtspr 913,3 + mtspr 914,3 + mtspr 915,3 + mtspr 916,3 + mtspr 917,3 + mtspr 918,3 + mtspr 919,3 + + # Return + blr + +FPRInit: + # Enable the Floating Point Registers + mfmsr 3 + ori 3,3,0x2000 + mtmsr 3 + + # Clear all of the FPR's to 0 + lis 3, zfloat@h + ori 3, 3, zfloat@l + lfd 0, 0(3) + fmr 1,0 + fmr 2,0 + fmr 3,0 + fmr 4,0 + fmr 5,0 + fmr 6,0 + fmr 7,0 + fmr 8,0 + fmr 9,0 + fmr 10,0 + fmr 11,0 + fmr 12,0 + fmr 13,0 + fmr 14,0 + fmr 15,0 + fmr 16,0 + fmr 17,0 + fmr 18,0 + fmr 19,0 + fmr 20,0 + fmr 21,0 + fmr 22,0 + fmr 23,0 + fmr 24,0 + fmr 25,0 + fmr 26,0 + fmr 27,0 + fmr 28,0 + fmr 29,0 + fmr 30,0 + fmr 31,0 + mtfsf 255,0 + + # Return + blr + +CacheInit: + mflr 0 + stw 0, 4(1) + stwu 1, -16(1) + stw 31, 12(1) + stw 30, 8(1) + + mfspr 3,1008 # (HID0) + rlwinm 0, 3, 0, 16, 16 + cmplwi 0, 0x0000 # Check if the Instruction Cache has been enabled or not. + bne ICEnabled + + # If not, then enable it. + isync + mfspr 3, 1008 + ori 3, 3, 0x8000 + mtspr 1008, 3 + +ICEnabled: + mfspr 3, 1008 # bl PPCMfhid0 + rlwinm 0, 3, 0, 17, 17 + cmplwi 0, 0x0000 # Check if the Data Cache has been enabled or not. + bne DCEnabled + + # If not, then enable it. + sync + mfspr 3, 1008 + ori 3, 3, 0x4000 + mtspr 1008, 3 + +DCEnabled: + + mfspr 3, 1017 # (L2CR) + clrrwi 0, 3, 31 # Clear all of the bits except 31 + cmplwi 0, 0x0000 + bne L2GISkip # Skip the L2 Global Cache Invalidation process if it has already been done befor. + + # Store the current state of the MSR in r30 + mfmsr 3 + mr 30,3 + + sync + + # Enable Instruction and Data Address Translation + li 3, 48 + mtmsr 3 + + sync + sync + + # Disable the L2 Global Cache. + mfspr 3, 1017 # (L2CR + clrlwi 3, 3, 1 + mtspr 1017, 3 # (L2CR) + sync + + # Invalidate the L2 Global Cache. + bl L2GlobalInvalidate + + # Restore the previous state of the MSR from r30 + mr 3, 30 + mtmsr 3 + + # Enable the L2 Global Cache and disable the L2 Data Only bit and the L2 Global Invalidate Bit. + mfspr 3, 1017 # (L2CR) + oris 0, 3, 0x8000 + rlwinm 3, 0, 0, 11, 9 + mtspr 1017, 3 # (L2CR) + + +L2GISkip: + # Restore the non-volatile registers to their previous values and return. + lwz 0, 20(1) + lwz 31, 12(1) + lwz 30, 8(1) + addi 1, 1, 16 + mtlr 0 + blr + +L2GlobalInvalidate: + mflr 0 + stw 0, 4(1) + stwu 1, -16(1) + stw 31, 12(1) + sync + + # Disable the L2 Cache. + mfspr 3, 1017 # bl PPCMf1017 + clrlwi 3, 3, 1 + mtspr 1017, 3 # bl PPCMt1017 + + sync + + # Initiate the L2 Cache Global Invalidation process. + mfspr 3, 1017 # (L2CR) + oris 3, 3, 0x0020 + mtspr 1017, 3 # (L2CR) + + # Wait until the L2 Cache Global Invalidation has been completed. +L2GICheckComplete: + mfspr 3, 1017 # (L2CR) + clrlwi 0, 3, 31 + cmplwi 0, 0x0000 + bne L2GICheckComplete + + # Clear the L2 Data Only bit and the L2 Global Invalidate Bit. + mfspr 3, 1017 # (L2CR) + rlwinm 3, 3, 0, 11, 9 + mtspr 1017, 3 # (L2CR) + + # Wait until the L2 Cache Global Invalidation status bit signifies that it is ready. +L2GDICheckComplete: + mfspr 3, 1017 # (L2CR) + clrlwi 0, 3, 31 + cmplwi 0, 0x0000 + bne L2GDICheckComplete + + # Restore the non-volatile registers to their previous values and return. + lwz 0, 20(1) + lwz 31, 12(1) + addi 1, 1, 16 + mtlr 0 + blr + +SystemInit: + mflr 0 + stw 0, 4(1) + stwu 1, -0x18(1) + stw 31, 0x14(1) + stw 30, 0x10(1) + stw 29, 0xC(1) + + # Disable interrupts! + mfmsr 3 + rlwinm 4,3,0,17,15 + rlwinm 4,4,0,26,24 + mtmsr 4 + + # Clear various SPR's + li 3,0 + mtspr 952, 3 + mtspr 956, 3 + mtspr 953, 3 + mtspr 954, 3 + mtspr 957, 3 + mtspr 958, 3 + + # Disable Speculative Bus Accesses to non-guarded space from both caches. + mfspr 3, 1008 # (HID0) + ori 3, 3, 0x0200 + mtspr 1008, 3 + + # Set the Non-IEEE mode in the FPSCR + mtfsb1 29 + + mfspr 3,920 # (HID2) + rlwinm 3, 3, 0, 2, 0 + mtspr 920,3 # (HID2) + + # Restore the non-volatile registers to their previous values and return. + lwz 0, 0x1C(1) + lwz 31, 0x14(1) + lwz 30, 0x10(1) + lwz 29, 0xC(1) + addi 1, 1, 0x18 + mtlr 0 + blr + +zfloat: + .float 0 + .align 4 +_got_start: diff --git a/wiipax/stub/devkitfail.ld b/wiipax/stub/devkitfail.ld new file mode 100644 index 0000000..4579d70 --- /dev/null +++ b/wiipax/stub/devkitfail.ld @@ -0,0 +1,59 @@ +OUTPUT_FORMAT("elf32-powerpc") +OUTPUT_ARCH(powerpc:common) + +__mem1_start = 0x80004000; +__mem2_start = 0x90010000; + +__mem1_entry = _start - __mem2_start + __mem1_start; +ENTRY(__mem1_entry) + +PHDRS { + paxx PT_LOAD FLAGS(7); +} + +SECTIONS { + . = __mem2_start; + + .start : AT(__mem1_start) { KEEP(*(.start)) } :paxx = 0 + .text : { *(.text) *(.text.*) } + + . = ALIGN(4); + + .payload : { + __payload = .; + LONG(0); + LONG(0); + LONG(0); + LONG(0); + LONG(0); + LONG(0); + } + + .rodata : { *(.rodata) *(.rodata.*) } + + . = (( . +19)&0xFFFFFFF0) - 4; + .padding : { + LONG(0xdeadbeef); + } + + .sdata : { *(.sdata) *(.sdata.*) } + .data : { *(.data) *(.data.*) } + + . = ALIGN(32); + __self_end = .; + + __bss_start = .; + .bss : { *(.bss) } :NONE = 0 + .sbss : { *(.sbss) } + __bss_end = .; + + . = ALIGN(32); + + .stack : { + _stack_top = .; + . += 32768; + _stack_bot = .; + } + +} + diff --git a/wiipax/stub/elf.c b/wiipax/stub/elf.c new file mode 100644 index 0000000..099ffa0 --- /dev/null +++ b/wiipax/stub/elf.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2001 William L. Pitts + * Modifications (c) 2004 Felix Domke + * All rights reserved. + * + * Redistribution and use in source and binary forms are freely + * permitted provided that the above copyright notice and this + * paragraph and the following disclaimer are duplicated in all + * such forms. + * + * This software is provided "AS IS" and without any express or + * implied warranties, including, without limitation, the implied + * warranties of merchantability and fitness for a particular + * purpose. + */ + +#include "common.h" +#include "elf_abi.h" +#include "string.h" + +int valid_elf_image (void *addr) { + Elf32_Ehdr *ehdr; /* Elf header structure pointer */ + + ehdr = (Elf32_Ehdr *) addr; + + if (!IS_ELF (*ehdr)) + return 0; + + if (ehdr->e_ident[EI_CLASS] != ELFCLASS32) + return -1; + + if (ehdr->e_ident[EI_DATA] != ELFDATA2MSB) + return -1; + + if (ehdr->e_ident[EI_VERSION] != EV_CURRENT) + return -1; + + if (ehdr->e_type != ET_EXEC) + return -1; + + if (ehdr->e_machine != EM_PPC) + return -1; + + return 1; +} + +u32 load_elf_image(void *addr) { + Elf32_Ehdr *ehdr; + Elf32_Phdr *phdrs; + u8 *image; + int i; + + ehdr = (Elf32_Ehdr *)addr; + + if(ehdr->e_phoff == 0 || ehdr->e_phnum == 0) { + printf("ELF has no phdrs\n"); + return 0; + } + + if(ehdr->e_phentsize != sizeof(Elf32_Phdr)) { + printf("Invalid ELF phdr size\n"); + return 0; + } + + phdrs = (Elf32_Phdr*)(addr + ehdr->e_phoff); + + for(i = 0; i < ehdr->e_phnum; i++) { + if(phdrs[i].p_type != PT_LOAD) { + printf("skip PHDR %d of type %d\n", i, phdrs[i].p_type); + continue; + } + + // translate paddr to this BAT setup + phdrs[i].p_paddr &= 0x3FFFFFFF; + phdrs[i].p_paddr |= 0x80000000; + + printf("PHDR %d 0x%08x [0x%x] -> 0x%08x [0x%x] <", i, + phdrs[i].p_offset, phdrs[i].p_filesz, + phdrs[i].p_paddr, phdrs[i].p_memsz); + + if(phdrs[i].p_flags & PF_R) + printf("R"); + if(phdrs[i].p_flags & PF_W) + printf("W"); + if(phdrs[i].p_flags & PF_X) + printf("X"); + printf(">\n"); + + if(phdrs[i].p_filesz > phdrs[i].p_memsz) { + printf("-> file size > mem size\n"); + return 0; + } + + if(phdrs[i].p_filesz) { + printf("-> load 0x%x\n", phdrs[i].p_filesz); + image = (u8 *)(addr + phdrs[i].p_offset); + memcpy((void *)phdrs[i].p_paddr, (const void *)image, + phdrs[i].p_filesz); + memset((void *)image, 0, phdrs[i].p_filesz); + + sync_after_write((void *)phdrs[i].p_paddr, phdrs[i].p_memsz); + + if(phdrs[i].p_flags & PF_X) + sync_before_exec((void *)phdrs[i].p_paddr, phdrs[i].p_memsz); + } else { + printf ("-> skip\n"); + } + } + + // entry point of the ELF _has_ to be correct - no translation done + return ehdr->e_entry; +} + diff --git a/wiipax/stub/elf.h b/wiipax/stub/elf.h new file mode 100644 index 0000000..10edf28 --- /dev/null +++ b/wiipax/stub/elf.h @@ -0,0 +1,7 @@ +#ifndef _ELF_H +#define _ELF_H + +int valid_elf_image (void *addr); +u32 load_elf_image (void *addr); + +#endif diff --git a/wiipax/stub/elf_abi.h b/wiipax/stub/elf_abi.h new file mode 100644 index 0000000..379355c --- /dev/null +++ b/wiipax/stub/elf_abi.h @@ -0,0 +1,594 @@ +/* + * Copyright (c) 1995, 1996, 2001, 2002 + * Erik Theisen. All rights reserved. + * + * 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. + */ + +/* + * This is the ELF ABI header file + * formerly known as "elf_abi.h". + */ + +#ifndef _ELF_ABI_H +#define _ELF_ABI_H + +#include "common.h" + +/* + * This version doesn't work for 64-bit ABIs - Erik. + */ + +/* + * These typedefs need to be handled better. + */ +typedef u32 Elf32_Addr; /* Unsigned program address */ +typedef u32 Elf32_Off; /* Unsigned file offset */ +typedef s32 Elf32_Sword; /* Signed large integer */ +typedef u32 Elf32_Word; /* Unsigned large integer */ +typedef u16 Elf32_Half; /* Unsigned medium integer */ + +/* e_ident[] identification indexes */ +#define EI_MAG0 0 /* file ID */ +#define EI_MAG1 1 /* file ID */ +#define EI_MAG2 2 /* file ID */ +#define EI_MAG3 3 /* file ID */ +#define EI_CLASS 4 /* file class */ +#define EI_DATA 5 /* data encoding */ +#define EI_VERSION 6 /* ELF header version */ +#define EI_OSABI 7 /* OS/ABI specific ELF extensions */ +#define EI_ABIVERSION 8 /* ABI target version */ +#define EI_PAD 9 /* start of pad bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* e_ident[] magic number */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" /* magic */ +#define SELFMAG 4 /* size of magic */ + +/* e_ident[] file class */ +#define ELFCLASSNONE 0 /* invalid */ +#define ELFCLASS32 1 /* 32-bit objs */ +#define ELFCLASS64 2 /* 64-bit objs */ +#define ELFCLASSNUM 3 /* number of classes */ + +/* e_ident[] data encoding */ +#define ELFDATANONE 0 /* invalid */ +#define ELFDATA2LSB 1 /* Little-Endian */ +#define ELFDATA2MSB 2 /* Big-Endian */ +#define ELFDATANUM 3 /* number of data encode defines */ + +/* e_ident[] OS/ABI specific ELF extensions */ +#define ELFOSABI_NONE 0 /* No extension specified */ +#define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */ +#define ELFOSABI_NETBSD 2 /* NetBSD */ +#define ELFOSABI_LINUX 3 /* Linux */ +#define ELFOSABI_SOLARIS 6 /* Sun Solaris */ +#define ELFOSABI_AIX 7 /* AIX */ +#define ELFOSABI_IRIX 8 /* IRIX */ +#define ELFOSABI_FREEBSD 9 /* FreeBSD */ +#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */ +#define ELFOSABI_MODESTO 11 /* Novell Modesto */ +#define ELFOSABI_OPENBSD 12 /* OpenBSD */ +/* 64-255 Architecture-specific value range */ + +/* e_ident[] ABI Version */ +#define ELFABIVERSION 0 + +/* e_ident */ +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ + (ehdr).e_ident[EI_MAG3] == ELFMAG3) + +/* ELF Header */ +typedef struct elfhdr{ + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ + Elf32_Half e_type; /* object file type */ + Elf32_Half e_machine; /* machine */ + Elf32_Word e_version; /* object file version */ + Elf32_Addr e_entry; /* virtual entry point */ + Elf32_Off e_phoff; /* program header table offset */ + Elf32_Off e_shoff; /* section header table offset */ + Elf32_Word e_flags; /* processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size */ + Elf32_Half e_phentsize; /* program header entry size */ + Elf32_Half e_phnum; /* number of program header entries */ + Elf32_Half e_shentsize; /* section header entry size */ + Elf32_Half e_shnum; /* number of section header entries */ + Elf32_Half e_shstrndx; /* section header table's "section + header string table" entry offset */ +} Elf32_Ehdr; + +/* e_type */ +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* relocatable file */ +#define ET_EXEC 2 /* executable file */ +#define ET_DYN 3 /* shared object file */ +#define ET_CORE 4 /* core file */ +#define ET_NUM 5 /* number of types */ +#define ET_LOOS 0xfe00 /* reserved range for operating */ +#define ET_HIOS 0xfeff /* system specific e_type */ +#define ET_LOPROC 0xff00 /* reserved range for processor */ +#define ET_HIPROC 0xffff /* specific e_type */ + +/* e_machine */ +#define EM_NONE 0 /* No Machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola 68000 */ +#define EM_88K 5 /* Motorola 88000 */ +#if 0 +#define EM_486 6 /* RESERVED - was Intel 80486 */ +#endif +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ +#define EM_S370 9 /* IBM System/370 Processor */ +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ +#if 0 +#define EM_SPARC64 11 /* RESERVED - was SPARC v9 + 64-bit unoffical */ +#endif +/* RESERVED 11-14 for future use */ +#define EM_PARISC 15 /* HPPA */ +/* RESERVED 16 for future use */ +#define EM_VPP500 17 /* Fujitsu VPP500 */ +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ +#define EM_960 19 /* Intel 80960 */ +#define EM_PPC 20 /* PowerPC */ +#define EM_PPC64 21 /* 64-bit PowerPC */ +#define EM_S390 22 /* IBM System/390 Processor */ +/* RESERVED 23-35 for future use */ +#define EM_V800 36 /* NEC V800 */ +#define EM_FR20 37 /* Fujitsu FR20 */ +#define EM_RH32 38 /* TRW RH-32 */ +#define EM_RCE 39 /* Motorola RCE */ +#define EM_ARM 40 /* Advanced Risc Machines ARM */ +#define EM_ALPHA 41 /* Digital Alpha */ +#define EM_SH 42 /* Hitachi SH */ +#define EM_SPARCV9 43 /* SPARC Version 9 */ +#define EM_TRICORE 44 /* Siemens TriCore embedded processor */ +#define EM_ARC 45 /* Argonaut RISC Core */ +#define EM_H8_300 46 /* Hitachi H8/300 */ +#define EM_H8_300H 47 /* Hitachi H8/300H */ +#define EM_H8S 48 /* Hitachi H8S */ +#define EM_H8_500 49 /* Hitachi H8/500 */ +#define EM_IA_64 50 /* Intel Merced */ +#define EM_MIPS_X 51 /* Stanford MIPS-X */ +#define EM_COLDFIRE 52 /* Motorola Coldfire */ +#define EM_68HC12 53 /* Motorola M68HC12 */ +#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/ +#define EM_PCP 55 /* Siemens PCP */ +#define EM_NCPU 56 /* Sony nCPU embeeded RISC */ +#define EM_NDR1 57 /* Denso NDR1 microprocessor */ +#define EM_STARCORE 58 /* Motorola Start*Core processor */ +#define EM_ME16 59 /* Toyota ME16 processor */ +#define EM_ST100 60 /* STMicroelectronic ST100 processor */ +#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ +#define EM_X86_64 62 /* AMD x86-64 */ +#define EM_PDSP 63 /* Sony DSP Processor */ +/* RESERVED 64,65 for future use */ +#define EM_FX66 66 /* Siemens FX66 microcontroller */ +#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ +#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ +#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ +#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ +#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ +#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ +#define EM_SVX 73 /* Silicon Graphics SVx */ +#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ +#define EM_VAX 75 /* Digital VAX */ +#define EM_CHRIS 76 /* Axis Communications embedded proc. */ +#define EM_JAVELIN 77 /* Infineon Technologies emb. proc. */ +#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ +#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX 80 /* Donald Knuth's edu 64-bit proc. */ +#define EM_HUANY 81 /* Harvard University mach-indep objs */ +#define EM_PRISM 82 /* SiTera Prism */ +#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ +#define EM_FR30 84 /* Fujitsu FR30 */ +#define EM_D10V 85 /* Mitsubishi DV10V */ +#define EM_D30V 86 /* Mitsubishi DV30V */ +#define EM_V850 87 /* NEC v850 */ +#define EM_M32R 88 /* Mitsubishi M32R */ +#define EM_MN10300 89 /* Matsushita MN10200 */ +#define EM_MN10200 90 /* Matsushita MN10200 */ +#define EM_PJ 91 /* picoJava */ +#define EM_NUM 92 /* number of machine types */ + +/* Version */ +#define EV_NONE 0 /* Invalid */ +#define EV_CURRENT 1 /* Current */ +#define EV_NUM 2 /* number of versions */ + +/* Section Header */ +typedef struct { + Elf32_Word sh_name; /* name - index into section header + string table section */ + Elf32_Word sh_type; /* type */ + Elf32_Word sh_flags; /* flags */ + Elf32_Addr sh_addr; /* address */ + Elf32_Off sh_offset; /* file offset */ + Elf32_Word sh_size; /* section size */ + Elf32_Word sh_link; /* section header table index link */ + Elf32_Word sh_info; /* extra information */ + Elf32_Word sh_addralign; /* address alignment */ + Elf32_Word sh_entsize; /* section entry size */ +} Elf32_Shdr; + +/* Special Section Indexes */ +#define SHN_UNDEF 0 /* undefined */ +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ +#define SHN_LOPROC 0xff00 /* reserved range for processor */ +#define SHN_HIPROC 0xff1f /* specific section indexes */ +#define SHN_LOOS 0xff20 /* reserved range for operating */ +#define SHN_HIOS 0xff3f /* specific semantics */ +#define SHN_ABS 0xfff1 /* absolute value */ +#define SHN_COMMON 0xfff2 /* common symbol */ +#define SHN_XINDEX 0xffff /* Index is an extra table */ +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ + +/* sh_type */ +#define SHT_NULL 0 /* inactive */ +#define SHT_PROGBITS 1 /* program defined information */ +#define SHT_SYMTAB 2 /* symbol table section */ +#define SHT_STRTAB 3 /* string table section */ +#define SHT_RELA 4 /* relocation section with addends*/ +#define SHT_HASH 5 /* symbol hash table section */ +#define SHT_DYNAMIC 6 /* dynamic section */ +#define SHT_NOTE 7 /* note section */ +#define SHT_NOBITS 8 /* no space section */ +#define SHT_REL 9 /* relation section without addends */ +#define SHT_SHLIB 10 /* reserved - purpose unknown */ +#define SHT_DYNSYM 11 /* dynamic symbol table section */ +#define SHT_INIT_ARRAY 14 /* Array of constructors */ +#define SHT_FINI_ARRAY 15 /* Array of destructors */ +#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ +#define SHT_GROUP 17 /* Section group */ +#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ +#define SHT_NUM 19 /* number of section types */ +#define SHT_LOOS 0x60000000 /* Start OS-specific */ +#define SHT_HIOS 0x6fffffff /* End OS-specific */ +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ +#define SHT_HIPROC 0x7fffffff /* specific section header types */ +#define SHT_LOUSER 0x80000000 /* reserved range for application */ +#define SHT_HIUSER 0xffffffff /* specific indexes */ + +/* Section names */ +#define ELF_BSS ".bss" /* uninitialized data */ +#define ELF_COMMENT ".comment" /* version control information */ +#define ELF_DATA ".data" /* initialized data */ +#define ELF_DATA1 ".data1" /* initialized data */ +#define ELF_DEBUG ".debug" /* debug */ +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ +#define ELF_FINI ".fini" /* termination code */ +#define ELF_FINI_ARRAY ".fini_array" /* Array of destructors */ +#define ELF_GOT ".got" /* global offset table */ +#define ELF_HASH ".hash" /* symbol hash table */ +#define ELF_INIT ".init" /* initialization code */ +#define ELF_INIT_ARRAY ".init_array" /* Array of constuctors */ +#define ELF_INTERP ".interp" /* Pathname of program interpreter */ +#define ELF_LINE ".line" /* Symbolic line numnber information */ +#define ELF_NOTE ".note" /* Contains note section */ +#define ELF_PLT ".plt" /* Procedure linkage table */ +#define ELF_PREINIT_ARRAY ".preinit_array" /* Array of pre-constructors */ +#define ELF_REL_DATA ".rel.data" /* relocation data */ +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ +#define ELF_REL_TEXT ".rel.text" /* relocation code */ +#define ELF_RODATA ".rodata" /* read-only data */ +#define ELF_RODATA1 ".rodata1" /* read-only data */ +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ +#define ELF_STRTAB ".strtab" /* string table */ +#define ELF_SYMTAB ".symtab" /* symbol table */ +#define ELF_SYMTAB_SHNDX ".symtab_shndx"/* symbol table section index */ +#define ELF_TBSS ".tbss" /* thread local uninit data */ +#define ELF_TDATA ".tdata" /* thread local init data */ +#define ELF_TDATA1 ".tdata1" /* thread local init data */ +#define ELF_TEXT ".text" /* code */ + +/* Section Attribute Flags - sh_flags */ +#define SHF_WRITE 0x1 /* Writable */ +#define SHF_ALLOC 0x2 /* occupies memory */ +#define SHF_EXECINSTR 0x4 /* executable */ +#define SHF_MERGE 0x10 /* Might be merged */ +#define SHF_STRINGS 0x20 /* Contains NULL terminated strings */ +#define SHF_INFO_LINK 0x40 /* sh_info contains SHT index */ +#define SHF_LINK_ORDER 0x80 /* Preserve order after combining*/ +#define SHF_OS_NONCONFORMING 0x100 /* Non-standard OS specific handling */ +#define SHF_GROUP 0x200 /* Member of section group */ +#define SHF_TLS 0x400 /* Thread local storage */ +#define SHF_MASKOS 0x0ff00000 /* OS specific */ +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific section attributes */ + +/* Section Group Flags */ +#define GRP_COMDAT 0x1 /* COMDAT group */ +#define GRP_MASKOS 0x0ff00000 /* Mask OS specific flags */ +#define GRP_MASKPROC 0xf0000000 /* Mask processor specific flags */ + +/* Symbol Table Entry */ +typedef struct elf32_sym { + Elf32_Word st_name; /* name - index into string table */ + Elf32_Addr st_value; /* symbol value */ + Elf32_Word st_size; /* symbol size */ + unsigned char st_info; /* type and binding */ + unsigned char st_other; /* 0 - no defined meaning */ + Elf32_Half st_shndx; /* section header index */ +} Elf32_Sym; + +/* Symbol table index */ +#define STN_UNDEF 0 /* undefined */ + +/* Extract symbol info - st_info */ +#define ELF32_ST_BIND(x) ((x) >> 4) +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) +#define ELF32_ST_VISIBILITY(x) ((x) & 0x3) + +/* Symbol Binding - ELF32_ST_BIND - st_info */ +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* like global - lower precedence */ +#define STB_NUM 3 /* number of symbol bindings */ +#define STB_LOOS 10 /* reserved range for operating */ +#define STB_HIOS 12 /* system specific symbol bindings */ +#define STB_LOPROC 13 /* reserved range for processor */ +#define STB_HIPROC 15 /* specific symbol bindings */ + +/* Symbol type - ELF32_ST_TYPE - st_info */ +#define STT_NOTYPE 0 /* not specified */ +#define STT_OBJECT 1 /* data object */ +#define STT_FUNC 2 /* function */ +#define STT_SECTION 3 /* section */ +#define STT_FILE 4 /* file */ +#define STT_NUM 5 /* number of symbol types */ +#define STT_TLS 6 /* Thread local storage symbol */ +#define STT_LOOS 10 /* reserved range for operating */ +#define STT_HIOS 12 /* system specific symbol types */ +#define STT_LOPROC 13 /* reserved range for processor */ +#define STT_HIPROC 15 /* specific symbol types */ + +/* Symbol visibility - ELF32_ST_VISIBILITY - st_other */ +#define STV_DEFAULT 0 /* Normal visibility rules */ +#define STV_INTERNAL 1 /* Processor specific hidden class */ +#define STV_HIDDEN 2 /* Symbol unavailable in other mods */ +#define STV_PROTECTED 3 /* Not preemptible, not exported */ + + +/* Relocation entry with implicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ +} Elf32_Rel; + +/* Relocation entry with explicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ + Elf32_Sword r_addend; +} Elf32_Rela; + +/* Extract relocation info - r_info */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char) (i)) +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) + +/* Program Header */ +typedef struct { + Elf32_Word p_type; /* segment type */ + Elf32_Off p_offset; /* segment offset */ + Elf32_Addr p_vaddr; /* virtual address of segment */ + Elf32_Addr p_paddr; /* physical address - ignored? */ + Elf32_Word p_filesz; /* number of bytes in file for seg. */ + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ + Elf32_Word p_flags; /* flags */ + Elf32_Word p_align; /* memory alignment */ +} Elf32_Phdr; + +/* Segment types - p_type */ +#define PT_NULL 0 /* unused */ +#define PT_LOAD 1 /* loadable segment */ +#define PT_DYNAMIC 2 /* dynamic linking section */ +#define PT_INTERP 3 /* the RTLD */ +#define PT_NOTE 4 /* auxiliary information */ +#define PT_SHLIB 5 /* reserved - purpose undefined */ +#define PT_PHDR 6 /* program header */ +#define PT_TLS 7 /* Thread local storage template */ +#define PT_NUM 8 /* Number of segment types */ +#define PT_LOOS 0x60000000 /* reserved range for operating */ +#define PT_HIOS 0x6fffffff /* system specific segment types */ +#define PT_LOPROC 0x70000000 /* reserved range for processor */ +#define PT_HIPROC 0x7fffffff /* specific segment types */ + +/* Segment flags - p_flags */ +#define PF_X 0x1 /* Executable */ +#define PF_W 0x2 /* Writable */ +#define PF_R 0x4 /* Readable */ +#define PF_MASKOS 0x0ff00000 /* OS specific segment flags */ +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific segment flags */ +/* Dynamic structure */ +typedef struct +{ + Elf32_Sword d_tag; /* controls meaning of d_val */ + union + { + Elf32_Word d_val; /* Multiple meanings - see d_tag */ + Elf32_Addr d_ptr; /* program virtual address */ + } d_un; +} Elf32_Dyn; + +extern Elf32_Dyn _DYNAMIC[]; + +/* Dynamic Array Tags - d_tag */ +#define DT_NULL 0 /* marks end of _DYNAMIC array */ +#define DT_NEEDED 1 /* string table offset of needed lib */ +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ +#define DT_PLTGOT 3 /* address PLT/GOT */ +#define DT_HASH 4 /* address of symbol hash table */ +#define DT_STRTAB 5 /* address of string table */ +#define DT_SYMTAB 6 /* address of symbol table */ +#define DT_RELA 7 /* address of relocation table */ +#define DT_RELASZ 8 /* size of relocation table */ +#define DT_RELAENT 9 /* size of relocation entry */ +#define DT_STRSZ 10 /* size of string table */ +#define DT_SYMENT 11 /* size of symbol table entry */ +#define DT_INIT 12 /* address of initialization func. */ +#define DT_FINI 13 /* address of termination function */ +#define DT_SONAME 14 /* string table offset of shared obj */ +#define DT_RPATH 15 /* string table offset of library + search path */ +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ +#define DT_REL 17 /* address of rel. tbl. w addends */ +#define DT_RELSZ 18 /* size of DT_REL relocation table */ +#define DT_RELENT 19 /* size of DT_REL relocation entry */ +#define DT_PLTREL 20 /* PLT referenced relocation entry */ +#define DT_DEBUG 21 /* bugger */ +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ +#define DT_BIND_NOW 24 /* Process relocations of object */ +#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ +#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ +#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ +#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ +#define DT_RUNPATH 29 /* Library search path */ +#define DT_FLAGS 30 /* Flags for the object being loaded */ +#define DT_ENCODING 32 /* Start of encoded range */ +#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ +#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ +#define DT_NUM 34 /* Number used. */ +#define DT_LOOS 0x60000000 /* reserved range for OS */ +#define DT_HIOS 0x6fffffff /* specific dynamic array tags */ +#define DT_LOPROC 0x70000000 /* reserved range for processor */ +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ + +/* Dynamic Tag Flags - d_un.d_val */ +#define DF_ORIGIN 0x01 /* Object may use DF_ORIGIN */ +#define DF_SYMBOLIC 0x02 /* Symbol resolutions starts here */ +#define DF_TEXTREL 0x04 /* Object contains text relocations */ +#define DF_BIND_NOW 0x08 /* No lazy binding for this object */ +#define DF_STATIC_TLS 0x10 /* Static thread local storage */ + +/* Standard ELF hashing function */ +unsigned long elf_hash(const unsigned char *name); + +#define ELF_TARG_VER 1 /* The ver for which this code is intended */ + +/* + * XXX - PowerPC defines really don't belong in here, + * but we'll put them in for simplicity. + */ + +/* Values for Elf32/64_Ehdr.e_flags. */ +#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ + +/* Cygnus local bits below */ +#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ +#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib + flag */ + +/* PowerPC relocations defined by the ABIs */ +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 /* 32bit absolute address */ +#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ +#define R_PPC_ADDR16 3 /* 16bit absolute address */ +#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ +#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ +#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ +#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 /* PC relative 26 bit */ +#define R_PPC_REL14 11 /* PC relative 16 bit */ +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 +/* Keep this the last entry. */ +#define R_PPC_NUM 37 + +/* The remaining relocs are from the Embedded ELF ABI, and are not + in the SVR4 ELF ABI. */ +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ + +/* Diab tool relocations. */ +#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ +#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ +#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ +#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ +#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ +#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ + +/* This is a phony reloc to handle any old fashioned TOC16 references + that may still be in object files. */ +#define R_PPC_TOC16 255 + +#endif /* _ELF_H */ + diff --git a/wiipax/stub/exception.c b/wiipax/stub/exception.c new file mode 100644 index 0000000..4d0ba41 --- /dev/null +++ b/wiipax/stub/exception.c @@ -0,0 +1,52 @@ +#include "common.h" +#include "string.h" + +extern char exception_asm_start, exception_asm_end; + +void exception_handler(int exception) +{ + u32 *x; + u32 i; + + printf("\nException %04x occurred!\n", exception); + + x = (u32 *)0x80003500; + + printf("\n R0..R7 R8..R15 R16..R23 R24..R31\n"); + for (i = 0; i < 8; i++) { + printf("%08x %08x %08x %08x\n", x[0], x[8], x[16], x[24]); + x++; + } + x += 24; + + printf("\n CR/XER LR/CTR SRR0/SRR1 DAR/DSISR\n"); + for (i = 0; i < 2; i++) { + printf("%08x %08x %08x %08x\n", x[0], x[2], x[4], x[6]); + x++; + } + + // Hang. + for (;;) + ; +} + +void exception_init(void) +{ + u32 vector; + u32 len_asm; + + for (vector = 0x100; vector < 0x1800; vector += 0x10) { + u32 *insn = (u32 *)(0x80000000 + vector); + + insn[0] = 0xbc003500; // stmw 0,0x3500(0) + insn[1] = 0x38600000 | vector; // li 3,vector + insn[2] = 0x48003602; // ba 0x3600 + insn[3] = 0; + } + sync_before_exec((void *)0x80000100, 0x1f00); + + len_asm = &exception_asm_end - &exception_asm_start; + memcpy((void *)0x80003600, &exception_asm_start, len_asm); + sync_before_exec((void *)0x80003600, len_asm); +} + diff --git a/wiipax/stub/exception_asm.s b/wiipax/stub/exception_asm.s new file mode 100644 index 0000000..a8729da --- /dev/null +++ b/wiipax/stub/exception_asm.s @@ -0,0 +1,21 @@ + .globl exception_asm_start, exception_asm_end + +exception_asm_start: + # store all interesting regs + mfcr 0 ; stw 0,0x3580(0) + mfxer 0 ; stw 0,0x3584(0) + mflr 0 ; stw 0,0x3588(0) + mfctr 0 ; stw 0,0x358c(0) + mfsrr0 0 ; stw 0,0x3590(0) + mfsrr1 0 ; stw 0,0x3594(0) + mfdar 0 ; stw 0,0x3598(0) + mfdsisr 0 ; stw 0,0x359c(0) + + # switch on FP, DR, IR + mfmsr 0 ; ori 0,0,0x2030 ; mtsrr1 0 + + # go to C handler + lis 0,exception_handler@h ; ori 0,0,exception_handler@l ; mtsrr0 0 + rfi +exception_asm_end: + diff --git a/wiipax/stub/gecko.c b/wiipax/stub/gecko.c new file mode 100644 index 0000000..0ce971c --- /dev/null +++ b/wiipax/stub/gecko.c @@ -0,0 +1,185 @@ +#include "common.h" +#include "vsprintf.h" + +#define EXI_REG_BASE 0xd806800 +#define EXI0_REG_BASE (EXI_REG_BASE+0x000) +#define EXI1_REG_BASE (EXI_REG_BASE+0x014) +#define EXI2_REG_BASE (EXI_REG_BASE+0x028) + +#define EXI0_CSR (EXI0_REG_BASE+0x000) +#define EXI0_MAR (EXI0_REG_BASE+0x004) +#define EXI0_LENGTH (EXI0_REG_BASE+0x008) +#define EXI0_CR (EXI0_REG_BASE+0x00c) +#define EXI0_DATA (EXI0_REG_BASE+0x010) + +#define EXI1_CSR (EXI1_REG_BASE+0x000) +#define EXI1_MAR (EXI1_REG_BASE+0x004) +#define EXI1_LENGTH (EXI1_REG_BASE+0x008) +#define EXI1_CR (EXI1_REG_BASE+0x00c) +#define EXI1_DATA (EXI1_REG_BASE+0x010) + +#define EXI2_CSR (EXI2_REG_BASE+0x000) +#define EXI2_MAR (EXI2_REG_BASE+0x004) +#define EXI2_LENGTH (EXI2_REG_BASE+0x008) +#define EXI2_CR (EXI2_REG_BASE+0x00c) +#define EXI2_DATA (EXI2_REG_BASE+0x010) + +static int gecko_console_enabled = 0; + +static u32 _gecko_command(u32 command) { + u32 i; + // Memory Card Port B (Channel 1, Device 0, Frequency 3 (32Mhz Clock)) + write32(EXI1_CSR, 0xd0); + write32(EXI1_DATA, command); + write32(EXI1_CR, 0x19); + i = 1000; + while ((read32(EXI1_CR) & 1) && (i--)); + i = read32(EXI1_DATA); + write32(EXI1_CSR, 0); + return i; +} + +static u32 _gecko_sendbyte(char sendbyte) { + u32 i = 0; + i = _gecko_command(0xB0000000 | (sendbyte<<20)); + if (i&0x04000000) + return 1; // Return 1 if byte was sent + return 0; +} + +#if 0 +static u32 _gecko_recvbyte(char *recvbyte) { + u32 i = 0; + *recvbyte = 0; + i = _gecko_command(0xA0000000); + if (i&0x08000000) { + // Return 1 if byte was received + *recvbyte = (i>>16)&0xff; + return 1; + } + return 0; +} + +static u32 _gecko_checksend(void) { + u32 i = 0; + i = _gecko_command(0xC0000000); + if (i&0x04000000) + return 1; // Return 1 if safe to send + return 0; +} + +static u32 _gecko_checkrecv(void) { + u32 i = 0; + i = _gecko_command(0xD0000000); + if (i&0x04000000) + return 1; // Return 1 if safe to recv + return 0; +} + +static void gecko_flush(void) { + char tmp; + while(_gecko_recvbyte(&tmp)); +} +#endif + +static int gecko_isalive(void) { + u32 i = 0; + i = _gecko_command(0x90000000); + if (i&0x04700000) + return 1; + return 0; +} + +#if 0 +static int gecko_recvbuffer(void *buffer, u32 size) { + u32 left = size; + char *ptr = (char*)buffer; + + while(left>0) { + if(!_gecko_recvbyte(ptr)) + break; + ptr++; + left--; + } + return (size - left); +} +#endif + +static int gecko_sendbuffer(const void *buffer, u32 size) { + u32 left = size; + char *ptr = (char*)buffer; + + while(left>0) { + if(!_gecko_sendbyte(*ptr)) + break; + ptr++; + left--; + } + return (size - left); +} + +#if 0 +static int gecko_recvbuffer_safe(void *buffer, u32 size) { + u32 left = size; + char *ptr = (char*)buffer; + + while(left>0) { + if(_gecko_checkrecv()) { + if(!_gecko_recvbyte(ptr)) + break; + ptr++; + left--; + } + } + return (size - left); +} + +static int gecko_sendbuffer_safe(const void *buffer, u32 size) { + u32 left = size; + char *ptr = (char*)buffer; + + while(left>0) { + if(_gecko_checksend()) { + if(!_gecko_sendbyte(*ptr)) + break; + ptr++; + left--; + } + } + return (size - left); +} +#endif + +void gecko_init(void) +{ + // unlock EXI + write32(0x0d00643c, 0); + + write32(EXI0_CSR, 0); + write32(EXI1_CSR, 0); + write32(EXI2_CSR, 0); + write32(EXI0_CSR, 0x2000); + write32(EXI0_CSR, 3<<10); + write32(EXI1_CSR, 3<<10); + + if (!gecko_isalive()) + return; + + gecko_console_enabled = 1; +} + +int printf(const char *fmt, ...) { + if (!gecko_console_enabled) + return 0; + + va_list args; + char buffer[1024]; + int i; + + va_start(args, fmt); + i = vsprintf(buffer, fmt, args); + va_end(args); + + return gecko_sendbuffer(buffer, i); +} + diff --git a/wiipax/stub/main.c b/wiipax/stub/main.c new file mode 100644 index 0000000..d7f2cf4 --- /dev/null +++ b/wiipax/stub/main.c @@ -0,0 +1,109 @@ +#include "common.h" + +#include "string.h" +#include "elf.h" + +#include "LzmaDec.h" + +extern const u8 __self_start[], __self_end[]; +extern const u8 __payload[]; + +extern void _plunge(u32 entry); + +typedef struct { + u8 * const data; + const u32 len_in; + const u32 len_out; + const u8 props[LZMA_PROPS_SIZE]; +} __attribute__((packed)) _payload; + +const _payload * const payload = (void *) __payload; + +u8 * const code_buffer = (u8 *) 0x90100000; + +static void *lz_malloc(void *p, size_t size) { + (void) p; + (void) size; + printf("lz_malloc %u\n", size); + return (void *) 0x90081000; +} + +static void lz_free(void *p, void *address) { + (void) p; + (void) address; + printf("lz_free %p\n", address); +} + +static const ISzAlloc lz_alloc = { lz_malloc, lz_free }; + +static inline __attribute__((always_inline)) int decode(void) { + SizeT len_in; + SizeT len_out; + ELzmaStatus status; + SRes res; + + len_in = payload->len_in; + len_out = payload->len_out; + + printf("in: %d out: %d\n", len_in, len_out); + + res = LzmaDecode(code_buffer, &len_out, payload->data, &len_in, + payload->props, LZMA_PROPS_SIZE, LZMA_FINISH_END, + &status, (ISzAlloc*)&lz_alloc); + + if (res != SZ_OK) { + printf("decoding error %d (%u)\n", res, status); + return res; + } + + return 0; +} + +void stubmain(void) { +#ifndef NDEBUG + exception_init(); +#endif + + // clear interrupt mask + write32(0x0c003004, 0); + +#ifndef NDEBUG +#ifndef DEVKITFAIL + udelay(500 * 1000); // wait for mini - avoid EXI battle +#endif + gecko_init(); +#endif + printf("hello world\n"); + printf("payload @%p blob @%p\n", payload, payload->data); + + if (decode() == 0 && valid_elf_image(code_buffer)) { + printf("Valid ELF image detected.\n"); + u32 entry = load_elf_image(code_buffer); + + if (entry) { + // Disable all IRQs; ack all pending IRQs. + write32(0x0c003004, 0); + write32(0x0c003000, 0xffffffff); + + printf("Branching to 0x%08x\n", entry); +#ifndef DEVKITFAIL + // detect failkit apps packed with the mini stub + if (entry & 0xc0000000) { + void (*ep)() = (void (*)()) entry; + ep(); + } else { + _plunge(entry); + } +#else + void (*ep)() = (void (*)()) entry; + ep(); +#endif + } + } + +error: + blink(); + udelay(500000); + goto error; +} + diff --git a/wiipax/stub/plunge.S b/wiipax/stub/plunge.S new file mode 100644 index 0000000..61536c2 --- /dev/null +++ b/wiipax/stub/plunge.S @@ -0,0 +1,13 @@ + .text + .section .text + .globl _plunge + +_plunge: + isync + mtsrr0 3 + + mfmsr 3 + li 4,0x30 + andc 3,3,4 + mtsrr1 3 + rfi diff --git a/wiipax/stub/realmode.S b/wiipax/stub/realmode.S new file mode 100644 index 0000000..b4f179c --- /dev/null +++ b/wiipax/stub/realmode.S @@ -0,0 +1,101 @@ +#define IBAT0U 528 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 +#define IBAT4U 560 +#define IBAT4L 561 +#define IBAT5U 562 +#define IBAT5L 563 +#define IBAT6U 564 +#define IBAT6L 565 +#define IBAT7U 566 +#define IBAT7L 567 + +#define DBAT0U 536 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 539 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 +#define DBAT3L 543 +#define DBAT4U 568 +#define DBAT4L 569 +#define DBAT5U 570 +#define DBAT5L 571 +#define DBAT6U 572 +#define DBAT6L 573 +#define DBAT7U 574 +#define DBAT7L 575 + + + .text + .section .realmode,"ax",@progbits + .extern _start + .align 2 + .globl _realmode_vector + +_realmode_vector: + // HID0 = 00110c64: + // bus checkstops off, sleep modes off, + // caches off, caches invalidate, + // store gathering off, enable data cache + // flush assist, enable branch target cache, + // enable branch history table + lis 3,0x0011 ; ori 3,3,0x0c64 ; mtspr 1008,3 ; isync + + // MSR = 00002000 (FP on) + li 4,0x2000 ; mtmsr 4 + + // HID0 |= 0000c000 (caches on) + ori 3,3,0xc000 ; mtspr 1008,3 ; isync + + // clear all BATs + li 0,0 + mtspr 528,0 ; mtspr 530,0 ; mtspr 532,0 ; mtspr 534,0 // IBATU 0..3 + mtspr 536,0 ; mtspr 538,0 ; mtspr 540,0 ; mtspr 542,0 // DBATU 0..3 + mtspr 560,0 ; mtspr 562,0 ; mtspr 564,0 ; mtspr 566,0 // IBATU 4..7 + mtspr 568,0 ; mtspr 570,0 ; mtspr 572,0 ; mtspr 574,0 // DBATU 4..7 + isync + + // clear all SRs + lis 0,0x8000 + mtsr 0,0 ; mtsr 1,0 ; mtsr 2,0 ; mtsr 3,0 + mtsr 4,0 ; mtsr 5,0 ; mtsr 6,0 ; mtsr 7,0 + mtsr 8,0 ; mtsr 9,0 ; mtsr 10,0 ; mtsr 11,0 + mtsr 12,0 ; mtsr 13,0 ; mtsr 14,0 ; mtsr 15,0 + isync + + // set [DI]BAT0 for 256MB@80000000, + // real 00000000, WIMG=0000, R/W + li 3,2 ; lis 4,0x8000 ; ori 4,4,0x1fff + mtspr IBAT0L,3 ; mtspr IBAT0U,4 ; mtspr DBAT0L,3 ; mtspr DBAT0U,4 ; isync + + // set [DI]BAT4 for 256MB@90000000, + // real 10000000, WIMG=0000, R/W + addis 3,3,0x1000 ; addis 4,4,0x1000 + mtspr IBAT4L,3 ; mtspr IBAT4U,4 ; mtspr DBAT4L,3 ; mtspr DBAT4U,4 ; isync + + // set DBAT1 for 256MB@c0000000, + // real 00000000, WIMG=0101, R/W + li 3,0x2a ; lis 4,0xc000 ; ori 4,4,0x1fff + mtspr DBAT1L,3 ; mtspr DBAT1U,4 ; isync + + // set DBAT5 for 256MB@d0000000, + // real 10000000, WIMG=0101, R/W + addis 3,3,0x1000 ; addis 4,4,0x1000 + mtspr DBAT5L,3 ; mtspr DBAT5U,4 ; isync + + // enable [DI]BAT4-7 in HID4 + lis 3, 0x8200 + mtspr 1011,3 + + // set MSR[DR:IR] = 11, jump to _start + lis 3,__mem1_entry@h ; ori 3,3,__mem1_entry@l ; mtsrr0 3 + + mfmsr 3 ; ori 3,3,0x30 ; mtsrr1 3 + rfi diff --git a/wiipax/stub/realmode.ld b/wiipax/stub/realmode.ld new file mode 100644 index 0000000..a8fd199 --- /dev/null +++ b/wiipax/stub/realmode.ld @@ -0,0 +1,64 @@ +OUTPUT_FORMAT("elf32-powerpc") +OUTPUT_ARCH(powerpc:common) + +__mem1_start = 0x80004000; +__mem2_start = 0x90010000; + +__mem1_entry = _start - __mem2_start + __mem1_start; +ENTRY(_realmode_vector) + +PHDRS { + realmode PT_LOAD FLAGS(5); + paxx PT_LOAD FLAGS(7); +} + +SECTIONS { + . = 0x00003400; + + .realmode : { *(.realmode) } :realmode = 0 + + . = __mem2_start; + + .start : AT(__mem1_start & 0x3FFFFFFF) { KEEP(*(.start)) } :paxx = 0 + .text : { *(.text) *(.text.*) } + + . = ALIGN(4); + + .payload : { + __payload = .; + LONG(0); + LONG(0); + LONG(0); + LONG(0); + LONG(0); + LONG(0); + } + + .rodata : { *(.rodata) *(.rodata.*) } + + . = (( . +19)&0xFFFFFFF0) - 4; + .padding : { + LONG(0xdeadbeef); + } + + .sdata : { *(.sdata) *(.sdata.*) } + .data : { *(.data) *(.data.*) } + + . = ALIGN(32); + __self_end = .; + + __bss_start = .; + .bss : { *(.bss) } :NONE = 0 + .sbss : { *(.sbss) } + __bss_end = .; + + . = ALIGN(32); + + .stack : { + _stack_top = .; + . += 32768; + _stack_bot = .; + } + +} + diff --git a/wiipax/stub/string.c b/wiipax/stub/string.c new file mode 100644 index 0000000..7d5481c --- /dev/null +++ b/wiipax/stub/string.c @@ -0,0 +1,94 @@ +/* + * linux/lib/string.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +#include "string.h" + +size_t strnlen(const char *s, size_t count) +{ + const char *sc; + + for (sc = s; count-- && *sc != '\0'; ++sc) + /* nothing */; + return sc - s; +} + +size_t strlen(const char *s) +{ + const char *sc; + + for (sc = s; *sc != '\0'; ++sc) + /* nothing */; + return sc - s; +} + +char *strncpy(char *dst, const char *src, size_t n) +{ + char *ret = dst; + + while (n && (*dst++ = *src++)) + n--; + + while (n--) + *dst++ = 0; + + return ret; +} + +char *strcpy(char *dst, const char *src) +{ + char *ret = dst; + + while ((*dst++ = *src++)) + ; + + return ret; +} + +int strcmp(const char *p, const char *q) +{ + for (;;) { + unsigned char a, b; + a = *p++; + b = *q++; + if (a == 0 || a != b) + return a - b; + } +} + +void *memset(void *dst, int x, size_t n) +{ + unsigned char *p; + + for (p = dst; n; n--) + *p++ = x; + + return dst; +} + +void *memcpy(void *dst, const void *src, size_t n) +{ + unsigned char *p; + const unsigned char *q; + + for (p = dst, q = src; n; n--) + *p++ = *q++; + + return dst; +} + +int memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *us1 = (unsigned char *) s1; + unsigned char *us2 = (unsigned char *) s2; + while (n-- != 0) { + if (*us1 != *us2) + return (*us1 < *us2) ? -1 : +1; + us1++; + us2++; + } + return 0; +} + diff --git a/wiipax/stub/string.h b/wiipax/stub/string.h new file mode 100644 index 0000000..6cd8119 --- /dev/null +++ b/wiipax/stub/string.h @@ -0,0 +1,15 @@ +#ifndef _STRING_H_ +#define _STRING_H_ + +#include + +char *strcpy(char *, const char *); +char *strncpy(char *, const char *, size_t); +int strcmp(const char *, const char *); +size_t strlen(const char *); +size_t strnlen(const char *, size_t); +void *memset(void *, int, size_t); +void *memcpy(void *, const void *, size_t); +int memcmp(const void *s1, const void *s2, size_t n); + +#endif diff --git a/wiipax/stub/sync.c b/wiipax/stub/sync.c new file mode 100644 index 0000000..98fec66 --- /dev/null +++ b/wiipax/stub/sync.c @@ -0,0 +1,40 @@ +#include "common.h" + +void sync_before_read(void *p, u32 len) +{ + u32 a, b; + + a = (u32)p & ~0x1f; + b = ((u32)p + len + 0x1f) & ~0x1f; + + for ( ; a < b; a += 32) + asm("dcbi 0,%0" : : "b"(a)); + + asm("sync ; isync"); +} + +void sync_after_write(const void *p, u32 len) +{ + u32 a, b; + + a = (u32)p & ~0x1f; + b = ((u32)p + len + 0x1f) & ~0x1f; + + for ( ; a < b; a += 32) + asm("dcbst 0,%0" : : "b"(a)); + + asm("sync ; isync"); +} + +void sync_before_exec(const void *p, u32 len) +{ + u32 a, b; + + a = (u32)p & ~0x1f; + b = ((u32)p + len + 0x1f) & ~0x1f; + + for ( ; a < b; a += 32) + asm("dcbst 0,%0 ; sync ; icbi 0,%0" : : "b"(a)); + + asm("sync ; isync"); +} diff --git a/wiipax/stub/time.c b/wiipax/stub/time.c new file mode 100644 index 0000000..109016e --- /dev/null +++ b/wiipax/stub/time.c @@ -0,0 +1,27 @@ +#include "common.h" + +// Timebase frequency is bus frequency / 4. Ignore roundoff, this +// doesn't have to be very accurate. +#define TICKS_PER_USEC (243/4) + +static u32 mftb(void) +{ + u32 x; + + asm volatile("mftb %0" : "=r"(x)); + + return x; +} + +static void __delay(u32 ticks) +{ + u32 start = mftb(); + + while (mftb() - start < ticks) + ; +} + +void udelay(u32 us) +{ + __delay(TICKS_PER_USEC * us); +} diff --git a/wiipax/stub/vsprintf.c b/wiipax/stub/vsprintf.c new file mode 100644 index 0000000..12cce95 --- /dev/null +++ b/wiipax/stub/vsprintf.c @@ -0,0 +1,291 @@ +/* + * linux/lib/vsprintf.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ +/* + * Wirzenius wrote this portably, Torvalds fucked it up :-) + */ + +#include +#include "string.h" + +static inline int isdigit(int c) +{ + return c >= '0' && c <= '9'; +} + +static inline int isxdigit(int c) +{ + return (c >= '0' && c <= '9') + || (c >= 'a' && c <= 'f') + || (c >= 'A' && c <= 'F'); +} + +static inline int islower(int c) +{ + return c >= 'a' && c <= 'z'; +} + +static inline int toupper(int c) +{ + if (islower(c)) + c -= 'a'-'A'; + return c; +} + +static int skip_atoi(const char **s) +{ + int i=0; + + while (isdigit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ + +#define do_div(n,base) ({ \ +int __res; \ +__res = ((unsigned long) n) % (unsigned) base; \ +n = ((unsigned long) n) / (unsigned) base; \ +__res; }) + +static char * number(char * str, long num, int base, int size, int precision + ,int type) +{ + char c,sign,tmp[66]; + const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; + int i; + + if (type & LARGE) + digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + if (type & LEFT) + type &= ~ZEROPAD; + if (base < 2 || base > 36) + return 0; + c = (type & ZEROPAD) ? '0' : ' '; + sign = 0; + if (type & SIGN) { + if (num < 0) { + sign = '-'; + num = -num; + size--; + } else if (type & PLUS) { + sign = '+'; + size--; + } else if (type & SPACE) { + sign = ' '; + size--; + } + } + if (type & SPECIAL) { + if (base == 16) + size -= 2; + else if (base == 8) + size--; + } + i = 0; + if (num == 0) + tmp[i++]='0'; + else while (num != 0) + tmp[i++] = digits[do_div(num,base)]; + if (i > precision) + precision = i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) + while(size-->0) + *str++ = ' '; + if (sign) + *str++ = sign; + if (type & SPECIAL) { + if (base==8) + *str++ = '0'; + else if (base==16) { + *str++ = '0'; + *str++ = digits[33]; + } + } + if (!(type & LEFT)) + while (size-- > 0) + *str++ = c; + while (i < precision--) + *str++ = '0'; + while (i-- > 0) + *str++ = tmp[i]; + while (size-- > 0) + *str++ = ' '; + return str; +} + +int vsprintf(char *buf, const char *fmt, va_list args) +{ + int len; + unsigned long num; + int i, base; + char * str; + const char *s; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', or 'L' for integer fields */ + + for (str=buf ; *fmt ; ++fmt) { + if (*fmt != '%') { + *str++ = *fmt; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (isdigit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (isdigit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { + qualifier = *fmt; + ++fmt; + } + + /* default base */ + base = 10; + + switch (*fmt) { + case 'c': + if (!(flags & LEFT)) + while (--field_width > 0) + *str++ = ' '; + *str++ = (unsigned char) va_arg(args, int); + while (--field_width > 0) + *str++ = ' '; + continue; + + case 's': + s = va_arg(args, char *); + if (!s) + s = ""; + + len = strnlen(s, precision); + + if (!(flags & LEFT)) + while (len < field_width--) + *str++ = ' '; + for (i = 0; i < len; ++i) + *str++ = *s++; + while (len < field_width--) + *str++ = ' '; + continue; + + case 'p': + if (field_width == -1) { + field_width = 2*sizeof(void *); + flags |= ZEROPAD; + } + str = number(str, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + continue; + + + case 'n': + if (qualifier == 'l') { + long * ip = va_arg(args, long *); + *ip = (str - buf); + } else { + int * ip = va_arg(args, int *); + *ip = (str - buf); + } + continue; + + case '%': + *str++ = '%'; + continue; + + /* integer number formats - set up the flags and "break" */ + case 'o': + base = 8; + break; + + case 'X': + flags |= LARGE; + case 'x': + base = 16; + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + break; + + default: + *str++ = '%'; + if (*fmt) + *str++ = *fmt; + else + --fmt; + continue; + } + if (qualifier == 'l') + num = va_arg(args, unsigned long); + else if (qualifier == 'h') { + num = (unsigned short) va_arg(args, int); + if (flags & SIGN) + num = (short) num; + } else if (flags & SIGN) + num = va_arg(args, int); + else + num = va_arg(args, unsigned int); + str = number(str, num, base, field_width, precision, flags); + } + *str = '\0'; + return str-buf; +} diff --git a/wiipax/stub/vsprintf.h b/wiipax/stub/vsprintf.h new file mode 100644 index 0000000..aca3816 --- /dev/null +++ b/wiipax/stub/vsprintf.h @@ -0,0 +1,9 @@ +#ifndef _VSPRINTF_H_ +#define _VSPRINTF_H_ + +#include + +int vsprintf(char *buf, const char *fmt, va_list args); + +#endif +

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 GfHZW@nc(yc#{Ta1t4+q6>D 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

0;8?w)VEJPJeZ7)#FW%Ic*}_ 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